/* ===========================================================
   두언유통 (ASL) - 대시보드 공통 스타일
   좌측(메뉴 프레임) + 우측(기능 화면 프레임) 2분할 구조
   =========================================================== */

:root{
  --side-w: 227px;          /* 스플릿바 드래그로 변경 (app.js 가 갱신) */

  /* 기능버튼 크기 : 고정값. 스플릿바를 움직여도 너비만 바뀐다 */
  --btn-h:    31px;
  --btn-fs:   13px;
  --btn-ls:   .32em;
  --btn-gap:  7px;
  --logout-h: 28px;
  --logout-fs:12px;

  --line:       #c9ced6;
  --line-soft:  #e4e8ee;
  --text:       #14181d;
  --muted:      #6b7480;

  /* 그리드 헤더 : 옵션(식단표/야쿠르트)의 기능버튼 색을 그대로 따른다 */
  --grid-head:  #1565c0;
  --grid-head2: #1565c0;
  --grid-input: #ffffcc;   /* 입력행 : 노란색 */
  --grid-alt:   #f7f9fc;
  --grid-sel:   #dceaff;

  --combo-bg:   #f0f2f5;   /* 콤보박스 기본 배경 (밝은 회색) */

  --accent:     #1565c0;   /* 향수 테마 */
  --accent-soft:#e8f1fc;

  /* 기능버튼 색 (향수) */
  --btn-bg:    #eef4fd;
  --btn-bg-hv: #dceafa;
  --btn-bd:    #c3d9f3;
  --btn-tx:    #12457f;
  --btn-sh:    rgba(21,101,192,.14);
  --btn-on:    #1565c0;    /* 선택된 기능버튼 = 그리드 헤더 색 */
}
/* 비누 선택 시 테마 색 전환 */
body[data-craft="soap"]{
  --accent:      #00796b;
  --accent-soft: #e2f3f1;

  /* 기능버튼 색 (비누) */
  --btn-bg:    #e9f5f2;
  --btn-bg-hv: #d5ebe6;
  --btn-bd:    #b7ded7;
  --btn-tx:    #0b564c;
  --btn-sh:    rgba(0,121,107,.14);
  --btn-on:    #00796b;

  --grid-head:  #00796b;   /* 그리드 헤더도 식단표 색으로 */
  --grid-head2: #00796b;
}

*{ box-sizing:border-box; }
html,body{ height:100%; margin:0; }
body{
  font-family:"Malgun Gothic","맑은 고딕","Pretendard","Apple SD Gothic Neo",-apple-system,"Segoe UI",sans-serif;
  font-size:13px; color:var(--text); background:#fff;
  -webkit-font-smoothing:antialiased;
}
button,input,select{ font-family:inherit; font-size:inherit; color:inherit; }
button{ cursor:pointer; }

/* 전체 프레임 ------------------------------------------------ */
.app{ display:flex; height:100vh; border:2px solid #2b6cb0; }

/* ===================== 좌측 프레임 ===================== */
/* 2026-10-17 : 글자 · 버튼 · 기본 폭을 아트센트랩 대비 2/3 로 축소 */
.side{
  width:var(--side-w); flex:0 0 var(--side-w);
  background:#f1f2f4; border-right:2px solid #2b6cb0;
  display:flex; flex-direction:column; padding:12px 11px 7px; overflow:hidden auto;
  container-type:inline-size;
}
.side-title h1{ margin:0; font-size:17px; font-weight:800; letter-spacing:-.5px; text-align:center; word-break:keep-all; }
/* 회사 로고 + 회사명 : 한 덩어리로 좌측 메뉴 가운데 */
.comp-head{ display:flex; align-items:center; justify-content:center; gap:8px; }
.comp-logo{ width:36px; height:36px; object-fit:contain; flex:none; border-radius:4px; }
.comp-logo[hidden]{ display:none; }
.comp-txt{ min-width:0; text-align:center; }
.side-title p { margin:1px 0 0; font-size:10px; font-weight:600; text-align:center; }

.craft-pick{ display:flex; flex-wrap:wrap; gap:5px 17px; margin:12px 3px 9px; }
.craft{ display:flex; align-items:center; gap:5px; font-size:13px; font-weight:700; cursor:pointer; }
.craft input{ width:11px; height:11px; accent-color:var(--accent); cursor:pointer; }
.craft.off{ color:#a8afb8; cursor:not-allowed; } .craft.off input{ cursor:not-allowed; }   /* 비활성화 옵션 (야쿠르트) */

.side-auth{ display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px; margin-bottom:11px; }
.btn-logout{
  flex:1; height:var(--logout-h); border-radius:7px;
  background:var(--btn-bg); border:1px solid var(--btn-bd); color:var(--btn-tx);
  font-size:var(--logout-fs); font-weight:800; white-space:nowrap;
  box-shadow:0 1px 2px var(--btn-sh);
  transition:background .14s, box-shadow .14s, transform .06s;
}
.btn-logout:hover{ background:var(--btn-bg-hv); box-shadow:0 2px 6px var(--btn-sh); }
.btn-logout:active{ transform:translateY(1px); }
.login-name{ font-size:10px; color:#333; white-space:nowrap; }

.side-label{ font-size:10px; color:#8a8f97; font-weight:600; margin:0 1px 5px; }

/* 즐겨찾기 프로그램 (위 · 아래 구분선) */
.side-split{ height:0; border-top:1px solid #cfd4db; border-bottom:1px solid #fff; margin:0 -11px; }
.side-fav{ display:flex; align-items:center; gap:7px; width:100%; margin:5px 0; padding:6px 8px; border:0; border-radius:8px;
  background:none; color:#3d434b; font-weight:800; font-size:12.5px; text-align:left; transition:background .15s, color .15s; }
.side-fav .ico{ width:16px; height:16px; flex:none; color:#e0a800; }
.side-fav:hover{ background:#e4e7eb; color:var(--text); }
.side-fav.on{ background:var(--accent-soft); color:var(--accent); }
.side-fav .nav-text{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.side-fav + .side-split{ margin-bottom:9px; }
body.folded .side-fav{ justify-content:center; padding:6px 0; }
body.folded .side-fav .nav-text{ display:none; }
body.folded .side-split{ margin:0 -4px; }

/* 기능 버튼 */
.menu{ display:flex; flex-direction:column; gap:var(--btn-gap); }
.menu button{
  height:var(--btn-h); border-radius:8px;
  background:var(--btn-bg); border:1px solid var(--btn-bd); color:var(--btn-tx);
  font-size:var(--btn-fs); font-weight:800; letter-spacing:var(--btn-ls); text-indent:var(--btn-ls);
  white-space:nowrap; overflow:hidden;
  box-shadow:0 1px 2px var(--btn-sh);
  transition:background .14s, color .14s, box-shadow .14s, transform .06s;
}
@container (max-width: 140px){ .menu button{ letter-spacing:.12em; text-indent:.12em; } }
.menu button:hover{ background:var(--btn-bg-hv); box-shadow:0 2px 8px var(--btn-sh); }
.menu button:active{ transform:translateY(1px); }
.menu button.on{
  background:var(--btn-on); border-color:var(--btn-on); color:#fff;
  box-shadow:0 3px 10px var(--btn-sh);
}

.side-foot{
  padding-top:7px; display:flex; justify-content:space-between;
  font-size:9px; color:#98a0ab;
}

/* 좌측 맨 아래 환경설정 (KaiLabs 플랫폼과 같은 모양) : 테마 변경 · 개발사 로고 · ••• 막대 */
.nav-foot{ margin:auto -11px 0; padding:9px 11px 0; border-top:1px solid #dde1e7; }
.nav-foot-items{ padding-bottom:6px; margin-bottom:9px; border-bottom:1px solid #dde1e7; }
.nav-foot .nav-label{ font-size:11px; font-weight:800; color:#8a8f97; margin:0 2px 4px; padding-left:7px; border-left:3px solid var(--accent); line-height:1.1; }
.nav-foot .nav-label-gap{ margin-top:9px; }
.nav-foot .nav-item{
  display:flex; align-items:center; gap:9px; width:100%; padding:7px 8px; margin:1px 0;
  border:0; border-radius:8px; background:none; color:#3d434b; font-weight:600; font-size:12.5px; text-align:left;
  transition:background .15s, color .15s;
}
.nav-foot .nav-item:hover{ background:#e4e7eb; color:var(--text); }
.nav-foot .nav-item .ico{ width:17px; height:17px; flex:none; }
.nav-foot .nav-text{ flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.dev-brand{ display:flex; justify-content:center; align-items:center; margin:0 2px; padding:6px 8px;
  background:#fff; border:1px solid #dde1e7; border-radius:10px; cursor:pointer; transition:border-color .15s, box-shadow .15s; }
.dev-brand img{ display:block; width:129px; max-width:100%; height:auto; }
.dev-brand:hover{ border-color:var(--accent); box-shadow:0 0 0 3px var(--accent-soft); }
/* 맨 아래 회색 막대 (빨간 •••) : 누르면 환경설정 보이기 · 한 번 더 누르면 숨기기 */
.foot-more{
  flex:none; display:flex; align-items:center; justify-content:center; gap:5px; height:18px; padding:0;
  margin:7px -11px -7px; border:0; border-top:1px solid #dde1e7; background:#e8eaee; transition:background .15s;
}
.foot-more i{ width:5px; height:5px; border-radius:50%; background:#e03131; }
.foot-more:hover, .foot-more[aria-expanded="true"]{ background:#dde1e7; }
.foot-more:focus-visible{ outline:2px solid var(--accent); outline-offset:-2px; }
/* 접힘(레일) 상태 : 환경설정 · 로고 숨김, ••• 만 */
body.folded .nav-foot{ display:none; }
body.folded .foot-more{ margin:auto -4px -8px; }

.nav-foot .nav-item.on{ background:var(--accent-soft); color:var(--accent); font-weight:800; }
/* [시스템설정] 우측 화면 : | 화면색상 설정 */
.sys-sec{ margin-top:10px; padding:2px 4px; }
.sys-sec-h{ display:flex; align-items:center; flex-wrap:wrap; gap:6px 10px; margin-bottom:10px; }
.sys-sec-h .t{ font-size:14px; font-weight:800; padding-left:8px; border-left:3px solid #333; line-height:1.1; white-space:nowrap; }
.sys-sec-h .dy-pop-craft{ white-space:nowrap; }
.sys-note{ font-size:11px; color:#8a93a3; }
.sys-color .dy-theme{ gap:10px; padding-left:11px; }
/* 화면색상 설정 : 전체 / 그룹 */
.clr-mode{ display:flex; align-items:center; gap:14px; padding-left:11px; margin-bottom:10px; }
.clr-mode label{ display:flex; align-items:center; gap:5px; font-size:13px; font-weight:800; cursor:pointer; }
.clr-mode input{ margin:0; accent-color:var(--accent); cursor:pointer; }
.clr-grp-l{ font-size:18px; font-weight:900; }
.clr-grp{ display:flex; align-items:center; gap:10px; height:32px; padding:0 10px 0 14px; border:2px solid #111; border-radius:3px; background:#fff;
  font-size:17px; font-weight:900; letter-spacing:.1em; cursor:pointer; margin-right:2px; }
.clr-grp b{ font-size:22px; line-height:1; }
.clr-grp:hover{ border-color:var(--accent); color:var(--accent); }
.clr-chips{ display:flex; gap:3px; margin-right:8px; }
.clr-chip{ width:12px; height:12px; border:1px solid #9aa3af; border-radius:2px; cursor:pointer; }
.clr-chip.none{ background:repeating-linear-gradient(45deg, #fff 0 2px, #e5e7eb 2px 4px) !important; }
.clr-chip.on{ outline:2px solid #111; outline-offset:1px; }
/* 좌측 메뉴 : 그룹 색이 있으면 캡션 아래에 색 표시 */
.menu-cap{ position:relative; }
.menu-group[data-gc] .menu-cap::after{ content:''; position:absolute; left:50%; bottom:4px; width:11px; height:11px; margin-left:-5.5px;
  background:var(--btn-on); border-radius:2px; }
.menu-group[data-gc] .menu-cap{ padding-bottom:14px; }
.sys-color .dy-theme .swatch, .sys-color .dy-theme .swatch-pick{ width:26px; height:26px; }
.sys-view{ overflow:auto; }
.sys-sec + .sys-sec{ margin-top:22px; }
.sys-err{ font-size:11.5px; color:#c0392b; font-weight:700; }
.sys-wait{ padding:10px 12px; color:#8a93a3; }
/* | 시스템화면 관리 (js/screens.js · t_screen) */
.scr-add{ display:flex; align-items:flex-end; flex-wrap:wrap; gap:6px 8px; margin:0 0 8px 11px; }
.scr-add label{ display:flex; flex-direction:column; gap:2px; font-size:11px; color:#5b6573; font-weight:700; }
.scr-add input, .scr-add select{ height:26px; border:1px solid var(--line); border-radius:4px; padding:0 6px; font-size:12px; width:130px; background:#fff; }
.scr-add input.g{ width:70px; background:#f0f2f5; text-align:center; color:#111; font-weight:700; }
.scr-add select{ width:80px; }
.scr-add label.w input{ width:170px; }
.scr-add input:focus, .scr-add select:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
.scr-add .sp{ flex:1 1 20px; }
.scr-gw{ margin-left:11px; overflow:auto; max-width:100%; }
table.scr-grid{ border-collapse:collapse; font-size:12px; white-space:nowrap; }
table.scr-grid th{ background:var(--grid-head); color:#fff; font-weight:700; padding:5px 8px; border:1px solid rgba(255,255,255,.35); position:sticky; top:0; }
table.scr-grid td{ border:1px solid #d5dae1; padding:0 6px; height:26px; }
table.scr-grid td.c{ text-align:center; }
table.scr-grid td.grp{ font-weight:800; color:#1e3a5f; width:60px; }
table.scr-grid td.grp{ vertical-align:middle; background:#f7f9fc !important; }   /* 그룹명 : 병합 칸 */
/* 가로선 : 그룹 경계(병합 칸 포함)와 표 맨 아래는 전체 폭이 같은 굵은 선, 그룹 안은 같은 가는 선 */
table.scr-grid:not(.cmp-grid) tbody tr.gtop > td{ border-top:2px solid #4b5563 !important; }
table.scr-grid:not(.cmp-grid) tbody tr.gend > td,
table.scr-grid:not(.cmp-grid) tbody td.grp{ border-bottom:2px solid #4b5563 !important; }
/* 고객사 등록 (js/company.js · t_company) */
.cmp-add label.cc input{ width:120px; font-family:Consolas,monospace; } .cmp-add label.nm input{ width:130px; font-weight:800; }
.cmp-add label.ne input{ width:120px; } .cmp-add label.ce input{ width:80px; } .cmp-add label.bz input{ width:110px; }
.cmp-add label.tl input{ width:110px; } .cmp-add label.rm input{ width:200px; }
.cmp-add .cmp-term{ display:flex; align-items:center; gap:3px; } .cmp-add .cmp-term input{ width:126px; } .cmp-add .cmp-term i{ font-style:normal; color:#8a93a3; }
table.cmp-grid td.lg{ padding:2px; } table.cmp-grid td.lg img{ display:block; width:28px; height:28px; object-fit:contain; margin:0 auto; }
table.cmp-grid td{ height:32px; }
table.cmp-grid td.cst{ font-weight:800; } table.cmp-grid td.cst.on{ color:#1e8a4c; } table.cmp-grid td.cst.end{ color:#c0392b; } table.cmp-grid td.cst.wait{ color:#b7791f; }
table.scr-grid td.tx{ padding:0 6px; white-space:nowrap; }
table.scr-grid td.ds.tx{ text-align:left; }
table.scr-grid td.nm.tx{ font-weight:800; }
table.scr-grid tr.gtop td{ border-top:2px solid #6b7685; }
table.scr-grid td.in{ padding:0; }
table.scr-grid td.in input{ width:150px; height:25px; border:0; padding:0 6px; font-size:12px; background:transparent; }
table.scr-grid td.nm{ background:#fff9d6; } table.scr-grid td.nm input{ font-weight:800; }   /* 화면명 : 굵게 · 연노랑 */
/* 정렬 : 화면설명만 왼쪽, 나머지는 모두 가운데 */
table.scr-grid td{ text-align:center; }
table.scr-grid td.in input, table.scr-grid td.in select{ text-align:center; text-align-last:center; }
/* 열폭은 colgroup (기본값 · [컬럼저장] 값) : 칸 안 입력은 칸 폭에 맞춘다 */
table.scr-grid{ table-layout:fixed; }
table.scr-grid th, table.scr-grid td{ overflow:hidden; text-overflow:ellipsis; }
table.scr-grid td.in input{ width:100% !important; }
/* 개발일정(From~To) : 최소 폭 (날짜칸 글자 작게 · 여백 없이) */
table.scr-grid td.dd{ padding:0 1px; }
table.scr-grid td.dd input{ width:calc(50% - 6px) !important; padding:0 1px !important; font-size:10.5px !important; letter-spacing:-.3px; }
table.scr-grid td.dd input::-webkit-calendar-picker-indicator{ margin:0; padding:0; width:10px; }
/* 메뉴얼 입력칸 + [...] (로컬 PDF 선택) */
table.scr-grid td.mf{ white-space:nowrap; }
table.scr-grid td.mf input{ width:calc(100% - 24px) !important; vertical-align:middle; }
.pdf-pick{ width:22px; height:20px; padding:0; border:1px solid var(--line); border-radius:3px; background:#fff; color:#1a56b8;
  font-size:11px; font-weight:800; line-height:16px; vertical-align:middle; cursor:pointer; }
.pdf-pick:hover:not(:disabled){ background:var(--accent); border-color:var(--accent); color:#fff; }
.pdf-pick:disabled{ color:#b8bec7; background:#f3f4f6; cursor:not-allowed; }
.scr-add .mf{ display:flex; align-items:center; gap:3px; }
.scr-add .mf .pdf-pick{ height:26px; width:26px; }
table.scr-grid td.ds input{ text-align:left; }                   /* 화면설명 : 왼쪽 정렬 */
table.scr-grid td.ver{ font-family:Consolas,monospace; }
table.scr-grid td.ro{ background:#f3f4f6; color:#4b5563; }        /* 배포버전 · 진행상태 : 변경 불가 */
table.scr-grid td.st{ min-width:70px; font-weight:700; } table.scr-grid td.st.done{ color:#1e8a4c; }
table.scr-grid td.dv input{ width:100px; }
table.scr-grid td.dvv input{ width:90px; font-family:Consolas,monospace; }
table.scr-grid td.dd{ white-space:nowrap; } table.scr-grid td.dd input{ width:118px; } table.scr-grid td.dd i{ font-style:normal; color:#8a93a3; }
table.scr-grid td.fn{ text-align:center; }
.scr-add label.d input{ width:260px; }
.scr-add input.ro{ background:#f3f4f6; color:#4b5563; text-align:center; }
.scr-add input.v{ width:96px; font-family:Consolas,monospace; } .scr-add input.s{ width:80px; }
table.scr-grid td.fn{ color:#1e3a5f; font-family:Consolas,monospace; font-size:11.5px; min-width:120px; }   /* 화면명(En) = 파일명 */
table.scr-grid td.in select{ height:24px; border:0; font-size:12px; background:transparent; cursor:pointer; }
table.scr-grid td.in input:focus, table.scr-grid td.in select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); background:#fff; }
table.scr-grid td.ord b{ display:inline-block; min-width:20px; }
table.scr-grid td.ord button{ width:20px; height:18px; padding:0; margin-left:2px; border:1px solid var(--line); border-radius:3px; background:#fff; font-size:9px; color:#4b5563; }
table.scr-grid td.ord button:hover:not(:disabled){ background:var(--accent); color:#fff; border-color:var(--accent); }
table.scr-grid td.ord button:disabled{ opacity:.4; cursor:not-allowed; }
table.scr-grid td.dt{ color:#6b7480; font-size:11px; min-width:110px; }
table.scr-grid td.dt i{ color:#c0392b; font-style:normal; font-weight:800; }
table.scr-grid tbody tr{ cursor:pointer; }
table.scr-grid tbody tr:hover td{ background:#f4f8fd; }
table.scr-grid tbody tr.sel td{ background:#fff7cc; }
table.scr-grid tbody tr.chg td.dt{ color:#c0392b; }
table.scr-grid tbody tr.off td{ color:#a0a7b1; } table.scr-grid tbody tr.off td.in input{ color:#a0a7b1; }
/* | 사용자정보 설정 (js/userinfo.js · t_user) */
.usr-form{ display:flex; flex-direction:column; gap:8px; padding-left:11px; max-width:900px; }
.usr-row{ display:flex; flex-wrap:wrap; gap:8px 14px; }
.usr-row label{ display:flex; flex-direction:column; gap:2px; font-size:11px; color:#5b6573; font-weight:700; }
.usr-row input{ height:28px; border:1px solid var(--line); border-radius:4px; padding:0 8px; font-size:12.5px; background:#fff; }
.usr-row input:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
.usr-row label.n input{ width:160px; font-weight:700; } .usr-row label.e input{ width:240px; } .usr-row label.t input{ width:160px; }
.usr-row label.a input{ width:592px; } .usr-row label.p input{ width:160px; }
.usr-chk{ display:flex; align-items:center; gap:6px; font-size:12.5px; font-weight:800; cursor:pointer; width:max-content; margin-top:2px; }
.usr-chk input{ width:15px; height:15px; margin:0; accent-color:var(--accent); cursor:pointer; }
.usr-pw{ display:flex; flex-direction:column; gap:8px; padding:8px 10px; border:1px dashed #c9d3e0; border-radius:6px; background:#fafbfd; width:max-content; }
.usr-pw .usr-row{ align-items:flex-end; }
.usr-pw .ic-btn{ height:28px; }
.usr-row label.done input{ background:#eef7f1; border-color:#9fd3b2; }
.pw-mark{ font-size:12px; font-weight:800; padding-bottom:6px; } .pw-mark.ng{ color:#d0342c; } .pw-mark.ok{ color:#1e8a4c; }
.usr-acts{ display:flex; align-items:center; gap:6px; margin-top:2px; }
.usr-msg{ font-size:12px; font-weight:700; margin-left:6px; } .usr-msg.ok{ color:#1e7d4f; } .usr-msg.ng{ color:#c0392b; }
/* 화면 권한 R (읽기만) : 편집설정 · 쓰기 버튼 숨김 (app.js renderContent → body[data-perm]) */
body[data-perm="R"] .acct-edit-btn,
body[data-perm="R"] .acct-reset-btn,
body[data-perm="R"] .w-only,
body[data-perm="R"] .acct-panel{ display:none !important; }
/* 테스트사용자 설정 (admin 만) */
.usr-wrap{ display:flex; align-items:flex-start; gap:28px; flex-wrap:wrap; }
.usr-test{ min-width:320px; padding:10px 14px 12px; border:2px solid #d0342c; border-radius:4px; background:#fff; }
.usr-test .ut-h{ font-size:13.5px; font-weight:900; margin-bottom:10px; }
.usr-test .ut-row{ display:flex; align-items:center; gap:10px; }
.usr-test .ut-l{ font-size:13px; font-weight:900; }
.usr-test .ut-sel{ height:30px; min-width:150px; border:1px solid var(--line); border-radius:4px; padding:0 8px; font-size:13.5px; font-weight:800; background:#fff; }
.usr-test .ut-sel:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
.usr-test .ut-ok{ height:30px; }
.usr-test .ut-note{ margin-top:8px; font-size:11.5px; color:#6b7480; }
.usr-test .ut-note b{ color:#d0342c; }
.usr-test kbd{ font-family:inherit; font-size:10.5px; padding:0 4px; border:1px solid #c9ced6; border-bottom-width:2px; border-radius:3px; background:#f6f7f9; }
/* 원격지원(Anydesk) (js/views/anydesk.js · dyanydesk.py · t_remote_req) */
.ad-view{ overflow:auto; }
.ad-sec{ padding:2px 4px 12px; }
.ad-sec .ad-re{ margin-left:auto; }
.ad-state{ display:flex; flex-wrap:wrap; gap:6px 28px; padding-left:11px; margin-bottom:12px; font-size:13px; }
.ad-state > div{ display:flex; align-items:center; gap:8px; }
.ad-state span{ color:#6b7480; font-weight:700; }
.ad-state b.ok{ color:#1e8a4c; } .ad-state b.ng{ color:#c0392b; }
.ad-state small{ color:#8a93a3; font-family:Consolas,monospace; font-size:11px; }
.ad-note{ flex-basis:100%; color:#b7791f; font-size:12px; font-weight:700; }
.ad-warn{ margin:0 0 12px 11px; padding:10px 12px; border:1px solid #f1c6c0; background:#fff5f4; color:#c0392b; border-radius:6px; font-weight:700; font-size:13px; }
/* 이 워크스테이션 : AnyDesk 화면 모양 */
.ad-ws{ width:460px; max-width:100%; margin:0 0 16px 11px; padding:16px 18px 18px; border:1px solid #e3e6eb; border-top:4px solid #ef443b; border-radius:4px;
  background:#fff; box-shadow:0 2px 8px rgba(15,23,42,.06); }
.ad-ws-h{ font-size:20px; color:#ef443b; font-weight:600; }
.ad-ws-sub{ font-size:12.5px; color:#6b7480; margin:6px 0 10px; }
.ad-id{ display:flex; align-items:center; gap:0; border:1px solid #c9ced6; height:36px; }
.ad-id i{ display:grid; place-items:center; width:36px; height:100%; background:#ef443b; }
.ad-id i svg{ width:22px; height:22px; }
.ad-id b{ padding:0 10px; font-size:18px; font-weight:900; letter-spacing:.5px; font-family:Consolas,"Malgun Gothic",monospace; }
.ad-id .none{ font-size:13px; color:#c0392b; font-weight:700; font-family:inherit; }
/* 원격받기 신청 */
.ad-req{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding-left:11px; margin-bottom:16px; }
.ad-req label{ display:flex; align-items:center; gap:8px; font-size:13.5px; font-weight:800; }
.ad-req .ad-in{ width:180px; height:32px; border:1px solid var(--line); border-radius:4px; padding:0 10px; font-size:15px; font-weight:800; font-family:Consolas,monospace; letter-spacing:.5px; }
.ad-req .ad-in:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
.ad-req .ad-go{ height:32px; }
/* 원격지원 대기 */
.ad-wait{ display:flex; align-items:center; gap:14px; margin:0 0 16px 11px; padding:12px 16px; width:max-content; max-width:100%;
  border:2px solid #ef443b; border-radius:6px; background:#fff7f6; }
.ad-wait.off{ border-color:#b7791f; background:#fdf6e9; }
.ad-wait-t{ display:flex; flex-direction:column; gap:3px; }
.ad-wait-t > b{ font-size:15px; color:#ef443b; } .ad-wait.off .ad-wait-t > b{ color:#b7791f; }
.ad-wait-t small{ font-size:12px; color:#5b6573; } .ad-wait-t small b{ font-family:Consolas,monospace; color:#111; }
.ad-spin{ width:26px; height:26px; flex:none; border:3px solid #f6c2be; border-top-color:#ef443b; border-radius:50%; animation:ad-spin 1s linear infinite; }
.ad-wait.off .ad-spin{ animation:none; border-color:#e8d2a8; }
@keyframes ad-spin{ to{ transform:rotate(360deg); } }
.ad-list{ padding-left:11px; }
.ad-list-h{ font-size:12.5px; font-weight:800; color:#5b6573; margin-bottom:5px; }
table.ad-grid{ table-layout:auto; }
table.ad-grid td{ padding:0 10px; }
table.ad-grid td.none{ height:40px; color:#8a93a3; font-weight:700; }
.nav-foot .nav-item.on{ background:var(--accent-soft); color:var(--accent); font-weight:800; }
/* 즐겨찾기 프로그램 (js/favorites.js · t_favorite) */
.fav-view{ overflow:auto; }
.fav-sec{ margin-top:10px; padding:2px 4px; }
.fav-add{ display:flex; gap:6px; align-items:center; margin-left:auto; }
.fav-add select{ height:28px; min-width:230px; border:1px solid var(--line); border-radius:6px; padding:0 6px; font-size:12px; background:#fff; }
.fav-none{ padding:18px 12px; color:#8a93a3; font-weight:700; }
.fav-cards{ display:grid; grid-template-columns:repeat(auto-fill, minmax(240px, 270px));   /* 카드 폭 360 → 270 (1/4 줄임) */ gap:16px; padding:4px 0 12px 11px; }
.fav-card{ display:flex; flex-direction:column; gap:8px; padding:14px 16px 12px; background:#fff; border:1px solid #dfe3ea; border-top:3px solid var(--accent);
  border-radius:12px; box-shadow:0 2px 8px rgba(15,23,42,.06); }
.fav-card .r1{ display:flex; align-items:center; justify-content:space-between; }
.fav-card .grp{ font-size:11px; font-weight:800; color:#3b4a63; background:#eef1f6; border-radius:6px; padding:2px 8px; }
.fav-card .st{ font-size:11px; font-weight:800; color:#1e8a4c; background:#e6f6ec; border-radius:10px; padding:2px 9px 2px 8px; }
.fav-card .st::before{ content:'●'; margin-right:4px; font-size:9px; }
.fav-card.off .st{ color:#8a93a3; background:#eef0f3; }
.fav-card .r2{ display:flex; align-items:center; gap:8px; }
.fav-card .r2 b{ font-size:18px; font-weight:900; letter-spacing:.5px; }
.fav-card .fav-web{ width:22px; height:22px; color:#1a73c8; }
.fav-card .r3{ font-size:12px; color:#4b5563; min-height:18px; }
.fav-card .r3 i{ color:#a0a7b1; font-style:normal; }
.fav-card .r4{ display:flex; align-items:center; justify-content:space-between; font-size:11.5px; color:#6b7480; }
.fav-card .r4 span{ display:flex; align-items:center; gap:4px; }
.fav-card .r4 svg{ width:13px; height:13px; }
.fav-card .r4 .ver{ color:#1a56b8; font-weight:700; }
.fav-card .r5{ display:flex; align-items:center; gap:4px; border-top:1px solid #eef0f3; padding-top:9px; }
.fav-card .r5 .sp{ flex:1; }
.fav-card .open{ display:flex; align-items:center; gap:5px; height:28px; padding:0 12px; border:1px solid #b9cdea; border-radius:7px; background:#eef4fd;
  color:#1a56b8; font-weight:800; font-size:12px; }
.fav-card .open svg{ width:14px; height:14px; }
.fav-card .open:hover:not(:disabled){ background:var(--accent); border-color:var(--accent); color:#fff; }
.fav-card .open:disabled{ opacity:.45; cursor:not-allowed; }
.fav-card .mv, .fav-card .rm{ width:26px; height:26px; border:0; border-radius:6px; background:none; color:#6b7480; font-size:15px; }
.fav-card .mv:hover:not(:disabled), .fav-card .rm:hover{ background:#eef1f6; color:#111; }
.fav-card .mv:disabled{ opacity:.3; cursor:default; }
/* (옛) [테마 변경] 팝오버 · 색 고르기 공통 */
.dy-popover{ position:fixed; z-index:400; width:236px; padding:12px 13px; background:#fff; border:1px solid #d5d9e0;
  border-radius:12px; box-shadow:0 10px 30px rgba(20,24,29,.18); }
.dy-popover h4{ margin:0 0 9px; font-size:12px; color:#6b7480; }
.dy-pop-craft{ margin-left:4px; padding:0 6px; border-radius:6px; background:var(--accent-soft); color:var(--accent); font-size:11px; }
.dy-theme{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.dy-theme .swatch{ width:22px; height:22px; padding:0; border-radius:50%; border:2px solid #fff; box-shadow:0 0 0 1px #d5d7dc; cursor:pointer; }
.dy-theme .swatch.on{ box-shadow:0 0 0 2px #1e1e23; }
.dy-theme .swatch-pick{ position:relative; width:22px; height:22px; border-radius:50%; overflow:hidden; cursor:pointer;
  background:conic-gradient(red, yellow, lime, cyan, blue, magenta, red); box-shadow:0 0 0 1px #d5d7dc; }
.dy-theme .swatch-pick input{ position:absolute; inset:-8px; opacity:0; cursor:pointer; }
.dy-theme .link-btn{ border:0; background:none; color:#6b7480; font-size:12px; padding:4px 2px; }
.dy-theme .link-btn:hover{ color:var(--accent); text-decoration:underline; }

/* ===================== 우측 프레임 ===================== */
.main{ flex:1; min-width:0; display:flex; flex-direction:column; background:#fff; }

.topbar{
  height:38px; flex:0 0 38px; display:flex; align-items:center; justify-content:space-between;
  padding:0 14px; border-bottom:1px solid var(--line-soft); background:#fafbfc;
}
.crumb{ display:flex; align-items:center; gap:7px; font-size:12px; color:var(--muted); }
.crumb b{ color:var(--accent); font-size:13px; }
.crumb i{ font-style:normal; color:#b9c0c9; }
.crumb-ver{ margin-left:4px; font-size:13px; font-weight:800; color:#111; font-family:Consolas,"Malgun Gothic",monospace; }   /* [배포버전] */
.conn{ display:flex; align-items:center; gap:6px; font-size:11px; color:var(--muted); }
.conn .dot{ width:7px; height:7px; border-radius:50%; background:#d0402f; display:inline-block; }
.conn.ok .dot{ background:#12a150; }

.content{ flex:1; min-height:0; overflow:auto; padding:8px 10px 14px; }
/* 배경 이미지 화면 : 여백·스크롤바 없이 우측 프레임을 꽉 채운다 */
.content.full{ padding:0; overflow:hidden; display:flex; flex-direction:column; }

/* ---------- 기능 화면 공통 패턴 ---------- */
.panel-head{ display:flex; align-items:center; gap:20px; flex-wrap:wrap; margin-bottom:6px; }
.panel-title{ font-size:15px; font-weight:800; color:var(--accent); }

.radios{ display:flex; gap:16px; align-items:center; }
.radios label{ display:flex; align-items:center; gap:5px; cursor:pointer; }
.radios input{ accent-color:var(--accent); cursor:pointer; }
.radios label.on{ font-weight:800; color:var(--accent); }

/* 검색 / 툴바 */
.toolbar{
  display:flex; align-items:flex-end; gap:10px; flex-wrap:wrap;
  padding:6px 8px; border:1px solid var(--line-soft); background:#fafbfc; border-radius:3px;
  margin-bottom:6px;
}
.field{ display:flex; align-items:center; gap:5px; }
.field > span{ font-size:12px; color:#333; white-space:nowrap; }
.field select,.field input[type=text]{
  height:24px; border:1px solid var(--line); border-radius:2px; padding:0 6px; background:#fff; min-width:130px;
}
.field input[type=text]{ color:var(--accent); font-weight:700; }
.tool-btn{
  height:26px; padding:0 10px; border:1px solid var(--line); background:#fff; border-radius:2px; font-size:12px;
}
.tool-btn:hover{ background:var(--accent-soft); border-color:var(--accent); }
.tool-btn.primary{ background:var(--btn-on); border-color:var(--btn-on); color:#fff; }
.tool-btn.danger:hover{ background:#fdecea; border-color:#d0402f; color:#b3261e; }
.tool-sep{ width:1px; height:22px; background:var(--line-soft); }
.spacer{ flex:1; }
.count{ font-size:12px; font-weight:800; color:var(--accent); text-decoration:underline; white-space:nowrap; }

/* ---------- 그리드 ---------- */
.grid-wrap{ border:1px solid var(--line); overflow:auto; max-height:calc(100vh - 190px); }
table.grid{ border-collapse:collapse; width:100%; white-space:nowrap; }
table.grid th, table.grid td{ border:1px solid #b7bec8; padding:3px 6px; height:24px; }
table.grid thead th{ position:sticky; top:0; z-index:3; }
table.grid thead tr.h1 th{ background:var(--grid-head); color:#fff; font-size:12px; font-weight:700; text-align:center; }
table.grid thead tr.h2 th{ top:24px; background:var(--grid-head2); color:#fff; font-size:12px; font-weight:700; text-align:center; }
table.grid tr.input-row td{ background:var(--grid-input); }
table.grid thead tr.input-row td{ z-index:3; }
table.grid tr.input-row td input{
  width:100%; border:0; background:transparent; outline:none; font-size:12px; font-weight:700; color:var(--accent); text-align:center;
}
table.grid tbody tr:nth-child(even) td{ background:var(--grid-alt); }
table.grid tbody tr:hover td{ background:var(--grid-sel); }
table.grid tbody tr.sel td{ background:var(--grid-sel); }
table.grid td{ font-size:12px; text-align:center; }
table.grid td.left{ text-align:left; }
table.grid td.key{ color:#1a56b8; font-weight:700; }
table.grid td.name{ color:#0a7f3f; font-weight:700; }
table.grid td.link{ color:#1a56b8; text-decoration:underline; cursor:pointer; }
table.grid td.num{ text-align:right; font-variant-numeric:tabular-nums; }
.col-chk{ width:30px; }

.empty{ padding:38px 10px; text-align:center; color:var(--muted); font-size:13px; }
.empty b{ display:block; margin-bottom:6px; color:var(--text); font-size:14px; }
.empty code{ background:#f2f4f7; padding:1px 6px; border-radius:3px; font-size:12px; }

/* 반응형 (좁은 화면) */
@media (max-width:1100px){
  .side-title h1{ font-size:21px; }
}

/* ---------- 상품관리 등 확장 요소 ---------- */
.opt{ display:flex; align-items:center; gap:5px; font-size:12px; color:#333; cursor:pointer; white-space:nowrap; }
.opt input{ accent-color:var(--accent); cursor:pointer; }

.tool-btn.green{ background:#00a651; border-color:#00a651; color:#fff; font-weight:700; }
.tool-btn.green:hover{ background:#00913f; }

.field input[type=date]{ height:24px; border:1px solid var(--line); border-radius:2px; padding:0 4px; background:#fff; }

/* 이미지 미리보기 상자 */
.imgbox{
  width:132px; height:56px; border:1px solid var(--line); background:#fff;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  font-size:11px; color:var(--muted); overflow:hidden; flex:0 0 auto;
}
.imgbox.hide{ display:none; }
.imgbox b{ font-size:13px; color:var(--accent); }
.imgbox span{ max-width:126px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* 묶음 머리행 (예: 단가이력) */
table.grid thead tr.h0 th{
  background:var(--grid-head2); color:#fff; font-size:11px; font-weight:700; text-align:center; top:0;
}
/* 묶음이 없는 칸도 머리행과 같은 색으로 이어지게 (칸 구분선 없이) */
table.grid thead tr.h0 th.blank{ background:var(--grid-head2); border-color:var(--grid-head2); }
table.grid.has-group thead tr.h1 th{ top:24px; }
table.grid.has-group thead tr.h2 th{ top:48px; }

/* 클릭 선택 행 */
table.grid tbody tr.focus td{ background:#cfe3ff; }   /* 외곽선은 선택한 칸에만 (아래) */

/* ---------- 좌/우 크기조절 스플릿바 ---------- */
.splitter{
  flex:0 0 7px; width:7px; align-self:stretch; position:relative;
  background:#e6e9ee; border-left:1px solid #cdd3db; border-right:1px solid #cdd3db;
  cursor:col-resize; touch-action:none;
}
.splitter::before{                 /* 손잡이 점선 */
  content:''; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);
  width:3px; height:44px; border-radius:2px;
  background:repeating-linear-gradient(#9aa3ae 0 2px, transparent 2px 5px);
}
.splitter:hover, .splitter.drag{ background:var(--accent-soft); }
.splitter:hover::before, .splitter.drag::before{
  background:repeating-linear-gradient(var(--accent) 0 2px, transparent 2px 5px);
}
.splitter:focus-visible{ outline:2px solid var(--accent); outline-offset:-2px; }
body.resizing{ cursor:col-resize; user-select:none; }
body.resizing .main{ pointer-events:none; }

/* ---------- 주문(발주)관리 등 : 구역 구분 · 입력셀 · 합계 ---------- */
.tool-btn.pink{ background:#f8d7da; border-color:#e39aa2; color:#a4262c; font-weight:700; }
.tool-btn.pink:hover{ background:#f3c2c7; }
.field.red > span{ color:#c62828; font-weight:700; }
.field.red input[type=date]{ border-color:#d0402f; }

.sum{ font-size:12px; color:#333; white-space:nowrap; }
.sum b{ font-size:13px; color:var(--accent); }

/* 노란 입력 대상 셀 (발주명 · 입고수량) */
table.grid tbody tr td.edit{ background:var(--grid-input); }
table.grid tbody tr:hover td.edit,
table.grid tbody tr.sel td.edit,
table.grid tbody tr.focus td.edit{ background:#f2ecb6; }

/* 발주 블록(파랑) · 입고 블록 구분선 (빨간 테두리는 쓰지 않는다) */
table.grid th.z-first, table.grid td.z-first{ border-left-width:2px; }
table.grid th.z-order.z-first, table.grid td.z-order.z-first{ border-left-color:#1a56b8; }

/* ---------- 서브메뉴 (R&D 관리 등) ---------- */
.menu button.has-sub{ position:relative; }
.menu .caret{ position:absolute; right:10px; font-style:normal; font-size:12px; letter-spacing:0; }
.submenu{ display:flex; flex-direction:column; gap:6px; margin:6px 0 2px 14px; }
.submenu button.sub{
  height:calc(var(--btn-h) * .78); border-radius:9px;
  background:#fff; border:1px dashed var(--btn-bd); color:var(--btn-tx);
  font-size:calc(var(--btn-fs) * .82); font-weight:700; letter-spacing:.06em;
  white-space:nowrap; overflow:hidden; transition:background .14s, border-color .14s;
}
.submenu button.sub:hover{ background:var(--btn-bg); border-style:solid; }
.submenu button.sub.on{ background:var(--accent); border-color:var(--accent); }

/* ---------- 제품레시피 관리 (생산계획-레시피구성) ---------- */
.recipe{ display:flex; gap:10px; align-items:flex-start; }
.rc-left{ flex:1 1 auto; min-width:0; }
.rc-title{ font-size:15px; font-weight:800; color:var(--accent); margin-bottom:6px; }

.rc-head{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; margin-bottom:6px; }
.rc-kv{ display:flex; align-items:stretch; border:1px solid var(--line); }
.rc-kv span{ padding:3px 8px; background:#eef1f5; font-size:12px; border-right:1px solid var(--line); white-space:nowrap; }
.rc-kv b{ padding:3px 10px; font-size:12px; background:var(--grid-input); border-right:1px solid var(--line); }
.rc-kv b:last-child{ border-right:0; }
.rc-kv b.ymd, .rc-kv b.code{ color:#1a56b8; }
.rc-kv b.cnt{ background:#fff; text-align:center; min-width:34px; }

.rc-head.bomhead{ margin-top:12px; }
.rc-bom-title{ flex:1; text-align:center; font-weight:800; color:var(--accent); font-size:13px; }

.plan-wrap{ max-height:none; }
table.grid.plan thead tr.h2 th{ top:0; }
table.grid.plan tbody tr.blank td{ background:#fff; color:#9aa3ae; }
table.grid.plan td.c{ text-align:center; }
.rc-total{
  display:inline-flex; gap:10px; align-items:center; margin:4px 0 0;
  padding:3px 10px; border:1px solid var(--line); background:#eef1f5; font-size:12px; font-weight:700;
}
.rc-total b{ color:var(--accent); }

.rc-boms{ display:flex; gap:8px; margin-top:6px; flex-wrap:wrap; }
.bom{ flex:1 1 150px; min-width:150px; border:1px solid var(--line); }
.bom-h{ background:#eef1f5; border-bottom:1px solid var(--line); padding:3px 6px; font-weight:800; text-align:center; font-size:12px; }
.bom-b{ max-height:300px; overflow:auto; }
.bom-r{ display:flex; justify-content:space-between; gap:6px; padding:2px 6px; font-size:12px; border-bottom:1px dotted #dfe3e9; }
.bom-r span{ color:#1a56b8; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bom-r b{ font-variant-numeric:tabular-nums; }
.bom-r.total{ background:#f3f6fa; font-weight:800; border-top:1px solid var(--line); }
.bom-r.total span{ color:#333; }

/* 작업레시피[MP] 카드 */
.rc-mp{ flex:0 0 470px; border:2px solid #1f3864; background:#fff; }
.mp-top{ display:flex; align-items:stretch; border-bottom:1px solid var(--line); }
.mp-no{ width:44px; display:flex; align-items:center; justify-content:center; font-size:20px; font-weight:800; color:#c62828; border-right:1px solid var(--line); }
.mp-title{ flex:1; display:flex; align-items:center; justify-content:center; font-weight:800; color:#c62828; }
.mp-code{ display:flex; flex-direction:column; align-items:center; justify-content:center; padding:2px 8px; border-left:1px solid var(--line); font-size:11px; }
.mp-code b{ color:#1a56b8; }

table.mp-info{ width:100%; border-collapse:collapse; }
table.mp-info th, table.mp-info td{ border:1px solid #b7bec8; padding:2px 5px; font-size:11px; height:22px; text-align:center; }
table.mp-info th{ background:#eef1f5; white-space:nowrap; }
table.mp-info td.l{ text-align:left; }
table.mp-info td.b{ font-weight:700; }
table.mp-info td.pink{ color:#d81b60; font-weight:700; }
table.mp-info td.ver{ background:#dbe6f5; font-weight:700; }

table.mp-rows{ width:100%; border-collapse:collapse; }
table.mp-rows th, table.mp-rows td{ border:1px solid #b7bec8; padding:2px 5px; font-size:11px; height:21px; }
table.mp-rows thead th{ background:var(--grid-head); color:#fff; text-align:center; }
table.mp-rows th.mp-label{ background:#eef1f5; text-align:center; white-space:nowrap; width:74px; }
table.mp-rows th.mp-label em{ display:block; font-style:normal; color:#c62828; font-weight:800; }
table.mp-rows td.c{ text-align:center; }
table.mp-rows td.l{ text-align:left; }
table.mp-rows td.b{ text-align:right; font-weight:700; font-variant-numeric:tabular-nums; }
table.mp-rows td.pct{ color:#c62828; font-weight:700; }
table.mp-rows td.rate{ color:#c62828; }
table.mp-rows td.note{ color:#555; }
table.mp-rows tr.sub td{ background:#f7f9fc; }

.mp-note{ border-top:1px solid var(--line); display:flex; }
.mp-note-h{ width:74px; flex:0 0 74px; padding:6px 4px; background:#eef1f5; border-right:1px solid #b7bec8; font-size:11px; text-align:center; color:#c62828; font-weight:700; }
.mp-note-b{ flex:1; min-height:56px; background:repeating-linear-gradient(#fff 0 17px, #e4e8ee 17px 18px); }

@media (max-width:1400px){
  .recipe{ flex-wrap:wrap; }
  .rc-mp{ flex:1 1 100%; }
}

/* ---------- 이미지 전용 화면 (R&D관리) ---------- */
.bgview{
  flex:1; min-height:0;
  background-repeat:no-repeat; background-position:center top; background-size:contain;
  display:flex; align-items:center; justify-content:center;
}
.bgview-msg{
  max-width:520px; padding:26px 22px; text-align:center; color:var(--muted); font-size:13px;
  border:1px dashed var(--line); border-radius:4px; background:#fafbfc;
}
.bgview-msg b{ display:block; margin-bottom:8px; color:var(--text); font-size:14px; }
.bgview-msg code{ background:#f2f4f7; padding:1px 6px; border-radius:3px; }
.btn-logout.on{ background:var(--accent); border-color:var(--accent); color:#fff; }
.login-name.in{ color:var(--accent); font-weight:800; }

/* 로그아웃 상태 : 기능버튼 비활성화 */
.menu button:disabled, .submenu button:disabled{
  background:#eceef1; color:#a7aeb7; border-color:#dcdfe4;
  cursor:not-allowed; box-shadow:none;
}
.menu button:disabled:hover, .submenu button:disabled:hover{
  background:#eceef1; box-shadow:none; transform:none;
}
.menu button:disabled .caret{ color:#c2c8d0; }
.side-label.off{ color:#c2c8d0; }

/* ---------- 로그인 화면 ---------- */
.login{
  flex:1; min-height:0; display:flex; align-items:center; justify-content:center;
  padding:24px 16px; position:relative;
  /* R&D관리 화면과 같은 배율 : center top / contain */
  background:#f3f5f8 no-repeat center top; background-size:contain;
}
.login::before{                       /* 배경 사진 위에 얇은 막 */
  content:''; position:absolute; inset:0; z-index:1;
  background:linear-gradient(180deg, rgba(255,255,255,.82), rgba(255,255,255,.92));
}

/* 배경 카드 : 안내 이미지를 10장(5열 x 2행)으로 나눠 0.5초에 한 장씩 */
.lg-wall{
  position:absolute; inset:0; z-index:0; overflow:hidden;
  container-type:size;
  display:flex; justify-content:center; align-items:flex-start;
}
.lg-grid{
  width:min(100%, calc(100cqh * 962 / 749));   /* 원본과 같은 배율(contain) */
  aspect-ratio:962 / 749;
  display:grid;
  grid-template-columns:195fr 194fr 191fr 196fr 186fr;   /* 원본 칸 너비 그대로 */
  grid-template-rows:385fr 364fr;
}
.lg-card{
  width:100%; height:100%; object-fit:fill; display:block;
  opacity:0; transform:translateY(12px) scale(.985);
  transition:opacity .45s ease-out, transform .45s ease-out;
}
.lg-card.on{ opacity:1; transform:none; }
@media (prefers-reduced-motion:reduce){
  .lg-card{ transition:none; }
}
.login-card{
  position:relative; z-index:2; width:360px; max-width:100%; padding:30px 28px 22px;
  background:#fff; border:1px solid var(--line-soft); border-radius:12px;
  box-shadow:0 10px 34px rgba(20,30,50,.14); text-align:center;
}
/* 창 닫기 버튼 : 카드 우측 상단 모서리에 걸치는 둥근 버튼 */
.lg-close{
  position:absolute; top:-16px; right:-16px; z-index:3;
  width:46px; height:46px; padding:0; border-radius:50%;
  border:3px solid var(--accent); background:#111418; color:#fff; cursor:pointer;
  display:flex; align-items:center; justify-content:center;
  box-shadow:0 6px 18px rgba(20,30,50,.30);
  transition:transform .14s ease, background .14s ease, box-shadow .14s ease;
}
.lg-close:hover{ background:#000; transform:scale(1.06); box-shadow:0 8px 22px rgba(20,30,50,.40); }
.lg-close:active{ transform:scale(.96); }
.lg-close:focus-visible{ outline:3px solid var(--accent-soft); outline-offset:2px; }
.lg-close svg{ width:20px; height:20px; display:block; }
.lg-close-hint{
  position:absolute; top:40px; right:-16px; z-index:3; width:236px;
  padding:9px 12px; border-radius:8px; background:#c62828; color:#fff;
  font-size:12px; line-height:1.5; text-align:left;
  box-shadow:0 6px 18px rgba(20,30,50,.30);
}
@media (max-width:440px){
  .lg-close{ top:8px; right:8px; width:40px; height:40px; border-width:2px; }
  .lg-close-hint{ top:54px; right:8px; width:auto; left:8px; }
}

.lg-badge{
  display:inline-block; margin-bottom:14px; padding:4px 14px; border-radius:999px;
  background:var(--accent-soft); color:var(--accent); font-size:12px; font-weight:800; letter-spacing:.04em;
}
.login-card h2{ margin:0; font-size:21px; font-weight:800; letter-spacing:-.3px; }
.lg-sub{ margin:4px 0 22px; font-size:12px; color:var(--muted); letter-spacing:.06em; }

.lg-f{ display:block; text-align:left; margin-bottom:12px; }
.lg-f span{ display:block; margin-bottom:5px; font-size:12px; font-weight:700; color:#48505b; }
.lg-f input{
  width:100%; height:40px; padding:0 12px; font-size:14px;
  border:1px solid var(--line); border-radius:6px; background:#fcfdfe; outline:none;
}
.lg-f input:focus{ border-color:var(--accent); background:#fff; box-shadow:0 0 0 3px var(--accent-soft); }

.lg-keep{ display:flex; align-items:center; gap:6px; margin:2px 0 18px; font-size:12px; color:#48505b; cursor:pointer; }
.lg-keep input{ accent-color:var(--accent); cursor:pointer; }

.lg-btn{
  width:100%; height:44px; border:0; border-radius:6px;
  background:var(--accent); color:#fff; font-size:15px; font-weight:800; letter-spacing:.06em;
  transition:filter .12s;
}
.lg-btn:hover{ filter:brightness(1.08); }
.lg-btn:active{ filter:brightness(.94); }

.lg-foot{
  margin-top:16px; padding-top:14px; border-top:1px solid var(--line-soft);
  font-size:11px; line-height:1.7; color:#98a0ab;
}
.lg-foot b{ color:var(--accent); }

/* ---------- 좌측화면 폴딩 / 언폴딩 ---------- */
.split-btn{
  position:absolute; top:56px; left:50%; transform:translateX(-50%);
  width:20px; height:34px; padding:0; border:1px solid #b9c0c9; border-radius:4px;
  background:#fff; color:#48505b; font-size:11px; line-height:1; box-shadow:0 1px 3px rgba(20,30,50,.14);
  display:flex; align-items:center; justify-content:center; z-index:5;
}
.split-btn:hover{ background:var(--accent); border-color:var(--accent); color:#fff; }
.splitter.locked{ cursor:default; }
.splitter.locked::before{ opacity:.35; }

.rail-only{ display:none; }
body.folded .rail-only{ display:block; text-align:center; margin-bottom:12px; }
.rail-brand{ font-size:15px; font-weight:800; letter-spacing:.02em; }
.rail-craft{
  margin-top:4px; padding:2px 0; border-radius:3px;
  background:var(--accent-soft); color:var(--accent); font-size:11px; font-weight:800;
}

body.folded{ --side-w:60px; }
body.folded .side{ padding:12px 4px 8px; }
body.folded .side-title,
body.folded .craft-pick,
body.folded .side-label,
body.folded .login-name,
body.folded .side-foot #sideClock{ display:none; }
body.folded .side-auth{ margin-bottom:12px; }
body.folded .btn-logout{ font-size:12px; letter-spacing:.02em; height:32px; }
body.folded .menu button{
  height:40px; font-size:11.5px; letter-spacing:0; text-indent:0; padding:0 1px;
}
body.folded .submenu{ margin-left:0; gap:5px; }
body.folded .submenu button.sub{ height:28px; font-size:11px; letter-spacing:0; }
body.folded .side-foot{ justify-content:center; }
body.folded .side-foot .ver{ font-size:9px; }

/* ---------- 환경설정 버튼 / 모달 ---------- */
.lg-btn.ghost{
  margin-top:8px; background:#fff; color:var(--accent);
  border:1px solid var(--line); font-size:13px; font-weight:700; height:38px; letter-spacing:0;
}
.lg-btn.ghost:hover{ background:var(--accent-soft); border-color:var(--accent); filter:none; }

.modal-back{
  position:fixed; inset:0; z-index:9999; background:rgba(15,23,42,.55);
  display:flex; align-items:flex-start; justify-content:center;   /* 화면 위쪽에 표시 */
  padding:5vh 20px 20px;
  overflow:auto;
}
.modal{
  width:420px; max-width:100%; background:#fff; border-radius:10px;
  box-shadow:0 16px 46px rgba(15,23,42,.30); overflow:hidden;
}
.modal-h{
  padding:14px 18px; border-bottom:1px solid var(--line-soft);
  font-size:15px; font-weight:800; color:var(--accent);
}
.modal-h span{ margin-left:8px; font-size:11px; font-weight:600; color:var(--muted); }
.modal-b{ padding:16px 18px; }

.modal-f-row{ display:flex; align-items:center; gap:10px; margin-bottom:10px; }
.modal-f-row span{ width:92px; flex:0 0 92px; font-size:12px; font-weight:700; color:#48505b; }
.modal-f-row input{
  flex:1; min-width:0; height:34px; padding:0 10px; font-size:13px;
  border:1px solid var(--line); border-radius:5px; background:#fcfdfe; outline:none;
}
.modal-f-row input:focus{ border-color:var(--accent); background:#fff; box-shadow:0 0 0 3px var(--accent-soft); }

.modal-msg{
  margin:4px 0 10px; padding:8px 10px; border-radius:5px; font-size:12px; line-height:1.6;
  background:#f3f5f8; color:var(--muted); word-break:break-all;
}
.modal-msg.wait{ background:var(--accent-soft); color:var(--accent); }
.modal-msg.ok{ background:#e7f6ec; color:#1b7a3d; font-weight:700; }
.modal-msg.ng{ background:#fdecea; color:#b3261e; font-weight:700; }

.modal-f{ display:flex; align-items:center; gap:8px; padding:12px 18px; background:#fafbfc; border-top:1px solid var(--line-soft); }
.modal-f .tool-btn{ height:32px; padding:0 16px; font-size:13px; }
.tool-btn:disabled, .tool-btn.primary:disabled{
  background:#e9ebee; border-color:#c9ced6; color:#a7aeb7; cursor:not-allowed;
}
.tool-btn:disabled:hover{ background:#e9ebee; border-color:#c9ced6; color:#a7aeb7; }

/* ---------- 암호화 도구 / 암호화 필드 ---------- */
.crypto{ margin:10px 0 4px; padding:12px 12px 8px; border:1px solid var(--line-soft); border-radius:6px; background:#fafbfc; }
.crypto-h{ margin-bottom:10px; font-size:12px; font-weight:800; color:var(--accent); }
.crypto-btns{ display:flex; gap:6px; margin:0 0 10px 102px; }
.crypto-btns .tool-btn{ height:28px; padding:0 12px; font-size:12px; }
/* DB 환경설정 창 : 기본(420px)보다 넓혀 암호화 버튼 4개가 한 줄 글자로 들어가게 한다 */
.modal.dbcfg{ width:540px; }
.modal.dbcfg .crypto-btns .tool-btn{ flex:1 1 0; min-width:0; white-space:nowrap; justify-content:center; }
.crypto .modal-f-row input[readonly]{ background:#eef1f5; color:#1a56b8; font-weight:700; }
.crypto-msg{ margin-left:2px; font-size:11px; line-height:1.6; color:var(--muted); word-break:break-all; }
.crypto-msg.ok{ color:#1b7a3d; font-weight:700; }
.crypto-msg.ng{ color:#b3261e; font-weight:700; }

table.grid td.enc{ color:#8a6d1b; letter-spacing:.1em; cursor:pointer; user-select:none; }
.modal-f-row.chk input[type=checkbox]{
  width:16px; height:16px; flex:0 0 16px; accent-color:var(--accent); cursor:pointer;
}

/* 암호화키(개인) 항목 강조 */
.modal-f-row.keyrow span{ color:#c62828; }
.modal-f-row.keyrow input{ color:#c62828; font-weight:700; border-color:#e6a9a4; }
.modal-f-row.keyrow input:focus{ border-color:#c62828; box-shadow:0 0 0 3px #fdecea; }
.modal-f-row input:disabled{ background:#eef0f3; color:#a7aeb7; cursor:not-allowed; }

/* 암호화키 보기 토글 */
.key-eye{
  flex:0 0 30px; width:30px; height:34px; margin-left:-2px;
  border:1px solid var(--line); border-radius:5px; background:#fff; font-size:13px; line-height:1;
  opacity:.55;
}
.key-eye:hover{ opacity:1; border-color:#c62828; }
.key-eye.on{ opacity:1; background:#fdecea; border-color:#c62828; }
.modal.narrow{ width:340px; }

/* 로그인 사용자 표시 (UserID / UserName 2층) */
.login-name.in{ display:flex; flex-direction:column; line-height:1.2; text-align:center; }
.login-name .uid{ font-size:9px; font-weight:800; color:var(--accent); }
.login-name .uname{ font-size:8px; font-style:normal; color:#48505b; }

/* 로그인 오류 안내 */
.lg-msg{ display:none; }
.lg-msg.ng{
  display:block; margin:-4px 0 12px; padding:8px 10px; border-radius:5px;
  background:#fdecea; color:#b3261e; font-size:12px; font-weight:700; text-align:left;
}

/* ---------- 기능버튼 카테고리 (기준 · 생산 · 수업) ---------- */
.menu-group{ display:flex; align-items:stretch; gap:5px; }
.menu-cap{
  flex:0 0 23px; width:23px;                 /* 좌측화면 폭과 무관하게 고정 */
  display:flex; align-items:center; justify-content:center;
  writing-mode:vertical-rl; text-orientation:upright;
  border:1px solid var(--btn-bd); border-radius:8px; background:transparent;
  font-size:var(--btn-fs);                   /* 기능버튼과 같은 글자크기 */
  font-weight:800; letter-spacing:.22em; color:var(--btn-tx);
}
.menu-btns{ flex:1; min-width:0; display:flex; flex-direction:column; gap:var(--btn-gap); }

/* 접힘(레일) 상태에서는 캡션 숨김 */
body.folded .menu-cap{ display:none; }
body.folded .menu-group{ gap:0; }

/* 좌측화면이 좁아져도 캡션 크기는 그대로, 간격만 줄인다 */
@container (max-width: 177px){ .menu-group{ gap:4px; } }
@container (max-width: 140px){ .menu-group{ gap:3px; } }
/* 접힘(레일) : 하단 버전 표기 숨김 (가로 넘침 방지) */
body.folded .side-foot{ display:none; }

/* 좌측화면 스크롤바를 얇게 (특히 접힘 레일에서 폭 확보) */
.side{ scrollbar-width:thin; scrollbar-color:#c3c9d2 transparent; }
.side::-webkit-scrollbar{ width:6px; }
.side::-webkit-scrollbar-thumb{ background:#c3c9d2; border-radius:3px; }
.side::-webkit-scrollbar-track{ background:transparent; }

/* ---------- 툴바 그룹 (1층 + 2층을 한 테두리로) ---------- */
.toolbar-group{
  display:flex; align-items:stretch;
  border:1px solid var(--line-soft); background:#fafbfc; border-radius:4px; margin-bottom:6px;
}
.tg-rows{ flex:1 1 auto; min-width:0; display:flex; flex-direction:column; justify-content:center; }
.tg-side{                                   /* 1층+2층을 합친 자리 (이미지 도구) */
  flex:0 0 auto; display:flex; align-items:stretch; gap:6px;
  padding:3px 8px; border-left:1px dashed #dfe4ea;
}
.tg-side .opt{ align-self:center; }
.toolbar-group .toolbar{ border:0; background:transparent; margin:0; border-radius:0; padding:4px 8px; }
.toolbar-group .toolbar.row2{ margin-top:0; border-top:1px dashed #dfe4ea; }

/* ---------- 하단 2분할 (발주현황 / 거래처현황) ---------- */
.grid-wrap.half{ max-height:40vh; }
.split-bottom{ display:flex; gap:8px; margin-top:8px; align-items:stretch; }
.sp-panel{
  flex:1 1 0; min-width:0; display:flex; flex-direction:column;
  border:2px solid #2b6cb0; border-radius:3px; background:#fff;
}
.sp-head{
  display:flex; align-items:center; gap:8px; flex-wrap:wrap;
  padding:6px 8px; border-bottom:1px solid var(--line-soft); background:#fafbfc;
}
.sp-title{ font-size:13px; font-weight:800; color:var(--accent); white-space:nowrap; }
.sp-head .field select,.sp-head .field input[type=date]{ height:24px; }
.sp-body{ flex:1; min-height:120px; max-height:34vh; overflow:auto; }

table.grid.mini th, table.grid.mini td{ height:22px; font-size:11px; padding:2px 5px; }
table.grid.mini tr.total td{ background:#eef1f5; font-weight:800; }

/* 미니 그리드는 머리행이 한 줄이므로 맨 위에 고정 (헤더 위 빈 줄 제거) */
table.grid.mini thead tr.h2 th{ top:0; }

/* 하단 좌/우 크기조절 스플리터 */
.sp-splitter{
  flex:0 0 8px; align-self:stretch; position:relative;
  background:#e6e9ee; border-radius:3px; cursor:col-resize; touch-action:none;
}
.sp-splitter::before{
  content:''; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%);
  width:3px; height:40px; border-radius:2px;
  background:repeating-linear-gradient(#9aa3ae 0 2px, transparent 2px 5px);
}
.sp-splitter:hover, .sp-splitter.drag{ background:var(--accent-soft); }
.sp-splitter:hover::before, .sp-splitter.drag::before{
  background:repeating-linear-gradient(var(--accent) 0 2px, transparent 2px 5px);
}
.sp-splitter:focus-visible{ outline:2px solid var(--accent); outline-offset:-2px; }

/* ---------- 상/하 분할 레이아웃 + 수직 스플리터 ---------- */
.content.split{ display:flex; flex-direction:column; overflow:hidden; }
.content.split .grid-wrap.half{ flex:0 0 auto; max-height:none; }   /* 높이는 스플리터가 지정 */
.content.split .split-bottom{ flex:1 1 auto; min-height:140px; margin-top:0; }
.content.split .sp-body{ max-height:none; flex:1 1 auto; }

.v-splitter{
  flex:0 0 9px; height:9px; margin:4px 0; position:relative;
  background:#e6e9ee; border-radius:3px; cursor:row-resize; touch-action:none;
}
.v-splitter::before{
  content:''; position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  height:3px; width:52px; border-radius:2px;
  background:repeating-linear-gradient(90deg,#9aa3ae 0 2px, transparent 2px 5px);
}
.v-splitter:hover, .v-splitter.drag{ background:var(--accent-soft); }
.v-splitter:hover::before, .v-splitter.drag::before{
  background:repeating-linear-gradient(90deg,var(--accent) 0 2px, transparent 2px 5px);
}
.v-splitter:focus-visible{ outline:2px solid var(--accent); outline-offset:-2px; }
body.resizing-v{ cursor:row-resize; user-select:none; }
.field .tilde{ color:var(--muted); font-size:12px; padding:0 1px; }
.field input[type=date]{ min-width:118px; }

/* 자료 출처 표시 (DB / 샘플) */
.src{
  padding:1px 8px; border-radius:10px; font-size:11px; font-weight:700; white-space:nowrap;
  border:1px solid var(--line);
}
.src.db{ background:#e7f6ec; color:#1b7a3d; border-color:#b7e0c4; }
.src.local{ background:#f2f4f7; color:#6b7480; }

/* [전체조회] 표시 */
.field input[type=text].all{ color:#98a0ab; font-weight:600; }

/* 추가 / 편집 입력창 */
.modal.wide{ width:620px; }
.form-grid{ display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:8px 14px; }
.form-row{ display:flex; align-items:center; gap:8px; }
.form-row > span:first-child{ width:84px; flex:0 0 84px; font-size:12px; font-weight:700; color:#48505b; text-align:right; }
.form-row .suffix, .form-row .inline-label{ width:auto; flex:0 0 auto; text-align:left; }
.form-row .note{ width:auto; flex:0 1 auto; min-width:0; text-align:left; }
.form-row input{
  flex:1; min-width:0; height:32px; padding:0 10px; font-size:13px;
  border:1px solid var(--line); border-radius:5px; background:#fcfdfe; outline:none;
}
.form-row input:focus{ border-color:var(--accent); background:#fff; box-shadow:0 0 0 3px var(--accent-soft); }
.form-row input[readonly]{ background:#eef0f3; color:#6b7480; }
.modal-msg2{ font-size:12px; color:var(--muted); }
.modal-msg2.ng{ color:#b3261e; font-weight:700; }

/* 입력창 : 한 줄 전체 항목 · 콤보 · 비활성 항목 */
.form-row.full{ grid-column:1 / -1; }
.form-row select{
  flex:1; min-width:0; height:32px; padding:0 8px; font-size:13px;
  border:1px solid var(--line); border-radius:5px; background:#fcfdfe; outline:none;
}
.form-row select:focus{ border-color:var(--accent); background:#fff; box-shadow:0 0 0 3px var(--accent-soft); }
.form-row select.pick{ flex:0 0 190px; margin-left:8px; }
.form-row input.off, .form-row input[disabled]{
  background:#eef0f3; color:#8a919e; cursor:not-allowed; -webkit-text-fill-color:#8a919e; opacity:1;
}
.modal-b.form-grid{ padding:16px 18px; }
.src.ng{ background:#fdecea; color:#b3261e; border-color:#e6a9a4; }

/* 선택용 칸(거래처) : 옅은 노란 바탕 */
table.grid tbody tr td.sel-cell,
table.grid tbody tr:nth-child(even) td.sel-cell{ background:#fffbe0; cursor:pointer; }
table.grid tbody tr:hover td.sel-cell{ background:#fff6c9; }
table.grid tbody tr.sel td.sel-cell,
table.grid tbody tr.focus td.sel-cell{ background:#f6efb8; }
/* 선택 표시는 고른 칸에만 : 나머지 칸에는 외곽선을 그리지 않는다 */
table.grid tbody tr.focus td.sel-cell{ box-shadow:inset 0 0 0 2px #4a8ee8; }
body.modal-open{ overflow:hidden; }          /* 모달이 열리면 뒤 화면 스크롤 잠금 */
.modal{ box-shadow:0 20px 60px rgba(15,23,42,.45); }

/* 화면에서 감추는 열 (정보 = SiteID_PW) */
table.grid th.col-hide, table.grid td.col-hide{ display:none; }

/* 사이트 ID / PW 입력줄 */
.form-row.idpw{ display:flex; align-items:center; gap:8px; }
.form-row.idpw .chk{
  display:flex; align-items:center; gap:5px; flex:0 0 auto;
  font-size:12px; font-weight:700; color:#48505b; white-space:nowrap; cursor:pointer;
}
.form-row.idpw .chk input{ width:16px; height:16px; flex:0 0 16px; accent-color:var(--accent); cursor:pointer; }
.form-row.idpw input[type=text]{ flex:1; min-width:0; }
/* 구분이 '사이트' 가 아닐 때 ID/PW 줄 흐리게 */
.form-row.idpw.off .chk{ color:#a7aeb7; cursor:not-allowed; }
.form-row.idpw.off .chk input{ cursor:not-allowed; }

/* ---------- 콤보박스 공통 : 지시가 없으면 밝은 회색 바탕 ---------- */
select,
.field select,
.form-row select,
.form-row select.pick,
.sp-head .field select,
.toolbar select,
.modal select{ background-color:var(--combo-bg); }
select:focus,
.field select:focus,
.form-row select:focus,
.modal select:focus{ background-color:#fff; }
select:disabled{ background-color:#e6e8ec; color:#a7aeb7; }
.tg-side .imgbox{ width:96px; height:auto; align-self:stretch; }

/* 입력창 : 안내문 · 좁은칸 · 단위 라벨 · 강조색 · 이미지 미리보기 */
.form-row .note{
  font-size:11px; color:#6b7480; white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; min-width:0; max-width:100%;
}
.form-row .suffix{ font-size:11px; color:#6b7480; white-space:nowrap; }
.form-row input.narrow{ flex:0 0 110px; }
.form-row.red span{ color:#c62828; }
.form-row.red input{ color:#c62828; font-weight:700; border-color:#e6a9a4; }
.form-row.img-preview{ align-items:flex-start; }
.form-row.img-preview img{
  max-width:180px; max-height:120px; border:1px solid var(--line); border-radius:4px;
  background:#fff; padding:2px;
}

/* 입력창 : 폭 조정 · 같은 줄 배치 · 아래쪽 미리보기 */
.form-row input.halfw{ flex:0 0 calc((100% - 14px) / 2 - 92px); }   /* 콤보 한 칸과 같은 폭 */
.form-row input.third{ flex:0 0 125px; }
.form-row .tool-btn.grow{ flex:1 1 auto; height:32px; }
.form-row .inline-label{ flex:0 0 auto; margin-left:6px; font-size:12px; font-weight:700; color:#48505b; }
.form-row select{ flex:1 1 0; min-width:0; }
.form-row select.inline-combo{ flex:0 0 96px; }

.form-tail{
  grid-column:1 / -1; display:grid; grid-template-columns:300px 1fr;
  gap:8px 14px; align-items:stretch;
}
.ft-left{ display:flex; flex-direction:column; gap:8px; min-width:0; }
.ft-preview{
  display:flex; align-items:center; justify-content:center;
  border:1px dashed var(--line); border-radius:5px; background:#fff; padding:6px; min-height:120px;
}
.ft-preview img{ max-width:100%; max-height:100%; object-fit:contain; }
.ft-preview{ min-height:170px; }
.form-row select.third{ flex:0 0 125px; }

/* 이미지번호 줄 : 선택한 파일명을 아랫줄에 표시 */
.form-row.imgrow{ flex-wrap:wrap; }
/* 이미지번호 : 입력칸을 줄인 만큼 [등록] 버튼을 넓힌다 (125+46 -> 80+91) */
.form-row.imgrow input.third{ flex:0 0 80px; }
.form-row.imgrow .tool-btn{ flex:0 0 91px; }
.form-row.imgrow .note{ flex:0 0 calc(100% - 92px); margin:2px 0 0 92px; }
.form-row input.ta-right{ text-align:right; }
.toolbar input.qty-in{ width:90px; height:24px; border:1px solid var(--line); border-radius:2px; padding:0 6px; text-align:right; }
.toolbar input.qty-in:disabled{ background:#eef0f3; color:#a7aeb7; }
.sp-head .field select{ min-width:0; width:65px; }              /* 집계구간 콤보 : 1/2 폭 */
.sp-head .field input.term{ min-width:0; width:118px; height:24px; padding:0 4px;
  border:1px solid var(--line); border-radius:2px;
  text-align:center; font-weight:700; color:var(--accent); }
.sp-head .field input.term:disabled{ background:#f3f5f8; color:var(--accent); opacity:1; }
.sp-head .field .tilde{ color:var(--muted); }
table.grid.mini tbody tr.blank td{ height:22px; }
.sp-head .sp-tail{ margin-left:auto; display:flex; align-items:center; gap:10px; white-space:nowrap; }
.sp-msg{ padding:8px 10px; font-size:12px; color:var(--muted); }
.sp-head .field .sum{ margin-left:4px; }
.opt.red{ color:#c62828; font-weight:700; }
.opt.red input{ accent-color:#c62828; }

/* 노란 바탕을 쓰는 칸(선택칸 · 입력대상칸 · 입력행)은 굵은 글씨로 */
table.grid tbody td.sel-cell,
table.grid tbody td.edit,
table.grid tr.input-row td,
table.grid tr.input-row td input{ font-weight:700; }

/* ===================== 계정정보 (js/views/account.js) ===================== */
/* 편집설정 : 평소 = 색 배경 · 편집창이 열린 상태(on) = 흰 배경 */
.acct-edit-btn{ font-weight:700; background:var(--btn-on); border-color:var(--btn-on); color:#fff; }
.acct-edit-btn:hover{ background:var(--btn-on); border-color:var(--btn-on); color:#fff; filter:brightness(1.1); }
.acct-edit-btn.on, .acct-edit-btn.on:hover{ background:#fff; border-color:var(--accent); color:var(--accent); filter:none; }
table.grid.acct td.col-chk input, table.grid.acct th.col-chk input{ cursor:pointer; accent-color:var(--accent); }
/* 그리드 + 편집창이 남은 높이 · 폭을 꽉 채운다 */
.acct-view{ height:100%; display:flex; flex-direction:column; min-height:0; }
.acct-body{ flex:1 1 auto; min-height:0; display:flex; align-items:stretch; gap:8px; }
.acct-body .acct-grid{ flex:1 1 auto; min-width:0; max-height:none; height:100%; }
table.grid.acct{ table-layout:fixed; }
table.grid.acct thead tr.h2 th{ top:0; white-space:normal; line-height:1.15; vertical-align:middle; height:34px; }
table.grid.acct thead th.long{ font-size:10.5px; letter-spacing:-.3px; }
table.grid.acct tbody tr{ cursor:pointer; }
table.grid.acct td.acct-w{ color:#1a56b8; font-weight:800; }
table.grid.acct td.acct-0{ color:#a7aeb7; }
table.grid.acct td.acct-admin{ color:#c62828; font-weight:700; }
table.grid.acct tbody tr.focus td{ background:var(--grid-sel); box-shadow:inset 0 1px 0 var(--accent), inset 0 -1px 0 var(--accent); }

/* 편집창 (우측) */
.acct-panel{
  flex:0 0 300px; width:300px; display:flex; flex-direction:column;
  height:100%; border:1px solid #c9d3e3; border-radius:4px;
  background:#eef2f9; overflow:hidden;
}
.ap-h{ padding:8px 10px; background:#1e3a5f; color:#fff; font-size:13px; font-weight:800; text-align:center; }
.ap-code{ padding:6px 10px; font-size:12px; font-weight:700; color:#1e3a5f; border-bottom:1px solid #d5ddea; }
.ap-code span{ margin-left:6px; font-weight:600; color:#8a93a3; }
.ap-body{ flex:1 1 auto; overflow:auto; padding:8px 10px; }
.ap-row{ display:flex; align-items:center; gap:8px; margin-bottom:5px; }
.ap-row > span{ flex:0 0 118px; font-size:12px; font-weight:700; color:#2b4a74; text-align:right; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ap-row > span i{ color:#c62828; font-style:normal; }
.ap-row input, .ap-row select{
  flex:1 1 auto; min-width:0; height:24px; border:1px solid #c3cbd8; border-radius:3px; padding:0 6px;
  background:#fff; font-size:12px;
}
.ap-row input:focus, .ap-row select:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
.ap-row select.w{ color:#1a56b8; font-weight:800; }
.ap-sec{ display:flex; align-items:center; gap:6px; margin:10px 0 6px; padding-top:8px; border-top:1px dashed #c9d3e3; }
.ap-sec > span{ flex:1; font-size:12px; font-weight:800; color:#1e3a5f; }
.ap-mini{ height:20px; padding:0 8px; border:1px solid #c3cbd8; border-radius:3px; background:#fff; font-size:11px; }
.ap-mini:hover{ border-color:var(--accent); color:var(--accent); }
.ap-msg{ min-height:0; padding:0 10px; font-size:12px; }
.ap-msg.ok{ padding:5px 10px; color:#1b7a3d; font-weight:700; }
.ap-msg.ng{ padding:5px 10px; color:#b3261e; font-weight:700; background:#fdecea; }
.ap-foot{ display:flex; align-items:center; gap:6px; padding:8px 10px; border-top:1px solid #d5ddea; background:#f6f8fc; }

/* 조회 버튼 뒤 건수 · 툴바 안의 편집설정 */
.toolbar .acct-count{ align-self:center; margin-left:4px; }
.toolbar .acct-edit-btn{ align-self:center; }

/* 계정정보 일괄 편집 (멀티선택) */
.acct-panel.multi .ap-h{ background:#7a4b00; }
.ap-row input[readonly], .ap-row select:disabled{ background:#e9edf3; color:#6b7685; cursor:not-allowed; }
.ap-row select.mixed{ color:#b26a00; font-weight:800; }

/* 화면 제목 앞 아이콘 (전용 화면 공통) */
.panel-title.with-icon{ display:flex; align-items:center; gap:6px; }
.panel-title .title-ico{
  width:22px; height:22px; flex:0 0 22px; padding:3px; box-sizing:border-box;
  border-radius:6px; background:var(--accent-soft); color:var(--accent);
}

/* ===================== 기초정보 (js/views/basic.js) ===================== */
.bi-msg{ align-self:center; font-size:12px; color:var(--muted); }
.bi-msg.ok{ color:#1b7a3d; font-weight:700; }
.bi-msg.ng{ color:#b3261e; font-weight:700; }
.bi-body{ flex:1 1 auto; min-height:0; display:flex; align-items:stretch; }
.bi-sec{ display:flex; flex-direction:column; min-width:0; min-height:0; }
.bi-food{ flex:0 0 400px; width:400px; }
.bi-basic{ flex:0 0 560px; width:560px; }
.bi-supply{ flex:1 1 300px; }
/* 상단 구분 : 세 영역 모두 같은 높이 -> 그리드 머리줄 · 높이가 나란히 맞는다 */
.bi-top{
  flex:0 0 32px; height:32px; display:flex; align-items:center; gap:8px; padding:0 2px 0 4px;
  font-size:12px; color:#1e3a5f; white-space:nowrap; overflow:hidden;
}
.bi-title{ font-size:12px; }
.bi-note{ color:#c62828; font-size:11px; font-weight:700; overflow:hidden; text-overflow:ellipsis; min-width:0; }
.bi-edit{ width:16px; height:16px; margin:0; cursor:pointer; accent-color:var(--accent); flex:0 0 auto; }
.bi-save{ font-weight:700; flex:0 0 auto; }
.bi-save:not(:disabled){ background:#fff4e5; border-color:#e0a050; color:#8a4b00; }
.bi-caps{ flex:1 1 auto; min-width:0; overflow:hidden; align-self:stretch; display:flex; align-items:center; }
.bi-caps-in{ display:flex; will-change:transform; }
.bi-caps-in b{ font-size:12px; padding-left:2px; white-space:nowrap; overflow:hidden; }
.bi-grid{ flex:1 1 auto; min-height:0; max-height:none; }
table.grid.bi{ table-layout:fixed; }
table.grid.bi thead tr.h2 th{ top:0; height:26px; box-sizing:border-box; }
table.grid.bi thead th.sortable{ cursor:pointer; }
table.grid.bi td{ height:24px; }
table.grid.bi td:has(> .bi-in){ padding:0; }
table.grid.bi td.num{ text-align:right; }
table.grid.bi td.num .bi-in{ text-align:right; }
table.grid.bi td.changed{ background:#fff8d6 !important; }
table.grid.bi tr.bi-new td{ background:#fbfcfe; }
table.grid.bi tbody tr{ cursor:default; }
table.grid.bi td.col-chk input, table.grid.bi th.col-chk input{ cursor:pointer; accent-color:var(--accent); }
.bi-in{ width:100%; height:23px; border:0; padding:0 6px; background:transparent; font-size:12px; color:var(--text); outline:none; box-sizing:border-box; }
.bi-in:focus{ background:#fff; box-shadow:inset 0 0 0 2px var(--accent); }

/* 나란한 그리드 사이 스플리터 바 (js/dygrid.js) */
.dy-split{ flex:0 0 8px; width:8px; cursor:col-resize; position:relative; }
.dy-split::before{ content:''; position:absolute; top:0; bottom:0; left:3px; width:2px; border-radius:1px; background:#dfe4ea; }
.dy-split:hover::before, .dy-split.drag::before{ background:var(--accent); }
body.dy-resizing{ cursor:col-resize; user-select:none; }

/* 기초정보 2차 : 제목줄 [새로고침] · 그리드별 [조회] · 공급자 편집창 */
.bi-head{ flex-wrap:nowrap; gap:12px; }
.bi-head .bi-msg{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0; }
.bi-load{ flex:0 0 auto; height:24px; padding:0 8px; }
.bi-top .tool-btn{ height:24px; }
.bi-row{ flex:1 1 auto; min-height:0; display:flex; align-items:stretch; gap:6px; }
.bi-row .bi-grid{ flex:1 1 auto; min-width:0; }
.bi-row .bi-panel{ flex:0 0 280px; width:280px; height:auto; }
.bi-panel .ap-row > span{ flex-basis:92px; }
table.grid.bi tbody td.col-chk input:disabled{ cursor:not-allowed; opacity:.55; }

/* 기초정보 3차 : 제목줄 가운데 [기본공급자] · 그리드별 건수 · 긴 글자 말줄임 · 기본공급자 팝업 */
.bi-head{ display:grid; grid-template-columns:1fr auto 1fr; align-items:center; }
.bi-head-side{ display:flex; align-items:center; gap:12px; min-width:0; }
.bi-head-side.right{ justify-content:flex-end; }
.bi-head-mid{ display:flex; justify-content:center; }
.bi-base-btn{ font-weight:700; color:#1e3a5f; border-color:#8aa3c2; background:#f3f7fc; }
.bi-base-btn.on{ background:#1e3a5f; border-color:#1e3a5f; color:#fff; }
.bi-count{ flex:0 0 auto; }
table.grid.bi td{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
table.grid.acct td{ overflow:hidden; text-overflow:ellipsis; }

.bi-pop{
  position:fixed; z-index:9000; width:400px; max-width:calc(100vw - 16px);
  background:#fff; border:1px solid #9fb3cc; border-radius:10px; padding:10px 14px 12px;
  box-shadow:0 12px 34px rgba(15,23,42,.28);
}
.bp-h{
  position:relative; margin:4px 4px 10px; padding:7px 10px; text-align:center;
  font-size:15px; font-weight:800; color:#1e3a5f; background:#eef3fa;
  border:1px solid #1e3a5f; border-radius:8px; box-shadow:0 2px 0 #c9d6e8;
}
.bp-x{
  position:absolute; right:-12px; top:-14px; width:30px; height:30px; border-radius:50%;
  border:2px solid #fff; background:#3f6fb5; color:#fff; font-size:14px; font-weight:800;
  box-shadow:0 2px 6px rgba(0,0,0,.25); cursor:pointer;
}
.bp-x:hover{ background:#2c5596; }
.bp-sub{ font-size:12px; font-weight:800; color:#222; margin:0 2px 6px; }
.bp-load{ padding:24px; text-align:center; color:var(--muted); }
.bp-tbl{ border:2px solid #777; }
.bp-row{ display:flex; align-items:stretch; border-bottom:1px solid #c8c8c8; min-height:34px; }
.bp-row:last-child{ border-bottom:0; }
.bp-row > span{
  flex:0 0 110px; display:flex; align-items:center; justify-content:center;
  background:#f2f2f2; border-right:1px solid #c8c8c8; font-size:12px; font-weight:800; color:#333;
}
.bp-row input{ flex:1 1 auto; min-width:0; border:0; padding:0 8px; font-size:13px; text-align:center; background:#fff; }
.bp-row input:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.bp-row input[readonly]{ color:#333; }
.bp-row.changed input{ background:#fff8d6; }
.bp-foot{ display:flex; align-items:center; gap:8px; margin-top:10px; }
.bp-msg{ flex:1; font-size:12px; }
.bp-msg.ok{ color:#1b7a3d; font-weight:700; }
.bp-msg.ng{ color:#b3261e; font-weight:700; }
.bp-save{ height:32px; padding:0 16px; font-weight:700; background:#4472c4; border-color:#4472c4; color:#fff; }
.bp-save:hover{ background:#365fa8; }

/* 기본공급자 팝업 : 도장 이미지 · 인센티브비율 관리 */
.bp-row.stamp{ min-height:64px; }
.bp-row.stamp > input[type=text]{ flex:0 0 128px; width:128px; color:#555; }   /* 다른 입력칸의 1/2 */
.bp-file{ flex:0 0 auto; align-self:center; height:26px; padding:0 8px; margin:0 6px; font-size:12px; }
.bp-stamp{
  flex:1 1 auto; min-width:0; display:flex; align-items:center; justify-content:center;
  border-left:1px solid #e0e0e0; padding:3px; background:#fff;
}
.bp-stamp img{ max-width:100%; max-height:56px; object-fit:contain; }
.bp-stamp em{ font-size:11px; color:#a0a7b1; font-style:normal; }
.bp-sub2{ margin-top:14px; }
.bp-rate{ display:flex; align-items:flex-end; gap:12px; }
.bp-rate-tbl{ display:flex; border:1px solid #777; }
.bp-rate-col{ width:120px; }
.bp-rate-col + .bp-rate-col{ border-left:1px solid #777; }
.bp-rate-h{ background:#7030a0; color:#fff; font-size:13px; font-weight:800; text-align:center; padding:5px 0; }
.bp-rate-v{ display:flex; align-items:center; justify-content:center; gap:4px; background:#f2f2f2; padding:4px 8px; }
.bp-rate-v input{ width:64px; border:0; background:transparent; text-align:right; font-size:13px; }
.bp-rate-v input:focus{ outline:none; box-shadow:inset 0 -2px 0 var(--accent); }
.bp-rate-v.changed{ background:#fff8d6; }
.bp-rate-v span{ font-size:13px; color:#333; }
.bp-rate .bp-save{ margin-left:auto; }

/* 기초정보 : 영역 보이기 체크박스 (식단가 · 관리항목 · 공급자정보) */
.bi-head-mid{ align-items:center; gap:14px; }
.bi-show{ display:flex; align-items:center; gap:12px; }
.bi-show-chk{ display:flex; align-items:center; gap:4px; font-size:13px; font-weight:700; color:#333; cursor:pointer; white-space:nowrap; }
.bi-show-chk input{ width:15px; height:15px; margin:0; accent-color:var(--accent); cursor:pointer; }
.bi-show-chk.off{ color:#9aa1ab; cursor:not-allowed; }
.bi-show-chk.off input{ cursor:not-allowed; }
.bi-hidden{ display:none !important; }

/* 공급자 편집창 : 캡션 폭을 줄여 항목을 앞으로 · 사업장/소재지 2줄 */
.bi-panel .ap-row{ gap:6px; }
.bi-panel .ap-row > span{ flex:0 0 52px; width:52px; text-align:right; white-space:nowrap; overflow:visible; }
.bi-panel .ap-row.two{ align-items:stretch; }
.bi-panel .ap-row.two > span{ white-space:normal; line-height:1.25; display:flex; flex-direction:column; justify-content:center; align-items:flex-end; }
.bi-panel .ap-row textarea{
  flex:1 1 auto; min-width:0; height:44px; resize:none; border:1px solid #c3cbd8; border-radius:3px;
  padding:3px 6px; background:#fff; font:inherit; font-size:12px; line-height:1.4; overflow:auto;
}
.bi-panel .ap-row textarea:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
.bi-panel .ap-row textarea[readonly]{ background:#e9edf3; color:#6b7685; }
/* 공급자 편집창 : 도장 (파일명 + 파일선택 + 미리보기) */
.bi-panel .ap-row.stamp{ align-items:center; min-height:46px; }
.bi-panel .ap-row.stamp > input[type=text]{ flex:0 1 90px; width:90px; color:#555; background:#f4f6f9; }
.bi-panel .ap-row.stamp .bp-file{ margin:0; padding:0 6px; height:24px; }
.bi-panel .ap-row.stamp .bp-stamp{ flex:0 0 46px; width:46px; height:44px; border:1px solid #d5dbe5; border-radius:3px; padding:2px; }
.bi-panel .ap-row.stamp .bp-stamp img{ max-height:38px; }
.bi-panel .ap-row.stamp .bp-stamp em{ font-size:10px; text-align:center; line-height:1.1; }

/* ===================== 열폭 조절 · 컬럼저장 (js/dygrid.js · 모든 화면 공통) ===================== */
.dy-coltools{ display:flex; align-items:center; gap:6px; flex:0 0 auto; }
.dy-coltools input{ width:16px; height:16px; margin:0; cursor:pointer; accent-color:var(--accent); }
.dy-colsave{ font-weight:700; }
.dy-colsave:not(:disabled){ background:#fff4e5; border-color:#e0a050; color:#8a4b00; }
table.grid.dy-col-on thead th{ position:sticky; }
table.grid.dy-col-on thead th:not(.col-chk){ outline:1px dashed rgba(255,255,255,.45); outline-offset:-3px; }
.dy-col-handle{
  position:absolute; top:0; right:-4px; width:8px; height:100%; z-index:5; cursor:col-resize;
}
.dy-col-handle::after{ content:''; position:absolute; top:4px; bottom:4px; left:3px; width:2px; background:rgba(255,255,255,.75); border-radius:1px; }
.dy-col-handle:hover::after{ background:#ffd54f; }

/* ===================== 상품관리 (js/views/product.js) ===================== */
/* 가상 스크롤 : 위 · 아래 빈 줄 (보이지 않는 행 자리) */
table.grid.pr tbody tr.vs-pad td{ padding:0; border:0; background:transparent; }
/* 열고정 : 선택칸 + 사용기간 · 상품코드 · 상품명 (left 값은 product.js 가 넣는다) */
table.grid.pr th.fz, table.grid.pr td.fz{ position:sticky; z-index:2; }
table.grid.pr thead th.fz{ z-index:6; }
:where(table.grid.pr) td.fz{ background:#fff; }   /* 줄무늬 · 선택 · hover 색은 기존 규칙이 덮는다 */
table.grid.pr th.fz-last, table.grid.pr td.fz-last{ box-shadow:inset -2px 0 0 #7b8794; }
.pr-bar{
  display:flex; align-items:stretch; gap:8px; flex-wrap:wrap; padding:6px 8px; margin-bottom:6px;
  border:1px solid var(--line-soft); border-radius:6px; background:#f4f5f7;
}
.pr-q{ display:flex; border:1px solid #777; background:#fff; }
.pr-qc{ display:flex; flex-direction:column; border-left:1px solid #999; }
.pr-qc:first-child{ border-left:0; }
.pr-qc > span{ background:#d9d9d9; text-align:center; font-size:12px; font-weight:800; padding:3px 6px; border-bottom:1px solid #777; }
.pr-qc input{ border:0; height:26px; padding:0 6px; font-size:12px; text-align:center; background:#fff; }
.pr-qc input:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.pr-qc.use_date input{ width:120px; }
.pr-qc.code input{ width:130px; }
.pr-qc.name input{ width:260px; }
.pr-big{
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px; width:58px;
  border:1px solid #b8bec8; border-radius:4px; background:#fff; font-size:11px; color:#333; cursor:pointer;
}
.pr-big b{ font-size:18px; line-height:1; }
.pr-big:hover{ border-color:var(--accent); background:var(--accent-soft); }
.pr-kv{ display:flex; flex-direction:column; border:1px solid #999; min-width:96px; }
.pr-kv > span{ text-align:center; font-size:12px; font-weight:800; padding:3px 6px; border-bottom:1px dashed #999; }
.pr-kv.yellow > span{ background:#ffff00; }
.pr-kv.peach > span{ background:#fce4d6; }
.pr-kv-v{ display:flex; align-items:center; justify-content:center; gap:2px; background:#fff; flex:1; }
.pr-kv-v input{ border:0; width:52px; height:24px; text-align:right; font-size:13px; background:transparent; }
.pr-kv-v input[type=month]{ width:120px; text-align:center; }
.pr-kv-v input:focus{ outline:none; box-shadow:inset 0 -2px 0 var(--accent); }
.pr-kv-v i{ font-style:normal; font-size:12px; }
.pr-act{ border:1px solid #c9a227; border-radius:3px; padding:0 10px; font-size:12px; font-weight:700; line-height:1.35; cursor:pointer; }
.pr-act.yellow{ background:#ffff66; }
.pr-act.orange{ background:#f8cbad; border-color:#e59866; }
.pr-act:hover:not(:disabled){ filter:brightness(.95); }
.pr-act:disabled, .pr-apply:disabled{ opacity:.5; cursor:not-allowed; }
.pr-apply{ align-self:flex-end; height:30px; padding:0 12px; border:0; border-radius:4px; background:#1e3a5f; color:#fff; font-size:15px; font-weight:800; cursor:pointer; }
.pr-count{ align-self:flex-end; }                 /* 건수 · 편집설정 : 조회줄 아래쪽 (그리드 바로 위) */
.pr-bar .acct-edit-btn{ align-self:flex-end; }
table.grid.pr thead th{ font-size:11.5px; }
table.grid.pr thead th.vat{ background:#2f5597; }
table.grid.pr td{ font-size:11.5px; height:22px; padding:2px 5px; }
.pr-panel{ flex-basis:320px; width:320px; }

/* ===================== 납품처관리 (js/views/school.js) ===================== */
.sc-filter{ display:flex; align-items:center; gap:14px; margin-left:24px; font-size:13px; font-weight:700; }
.sc-filter label{ display:flex; align-items:center; gap:4px; cursor:pointer; }
.sc-filter input{ margin:0; accent-color:var(--accent); cursor:pointer; }
.sc-filter .sc-f-use{ color:#1a56b8; }
.sc-filter .sc-f-stop{ color:#c62828; }
.sc-bar .pr-q{ max-width:100%; overflow-x:auto; }   /* 좁은 화면 : 조회줄만 가로 스크롤 */
.sc-bar .pr-qc select{ border:0; height:26px; padding:0 4px; font-size:12px; background:#fff; text-align-last:center; }
.sc-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.sc-bar .pr-qc input:disabled{ background:#f1f1f1; }
.sc-q-name input{ width:170px; }
.sc-q-people_num input{ width:60px; }
.sc-q-food_price select{ width:80px; }
.sc-q-calculation select{ width:170px; }
.sc-q-payment select, .sc-q-contract select{ width:110px; }
.sc-q-c_manager select, .sc-q-s_manager select{ width:140px; }
.sc-panel .ap-row > span{ flex-basis:96px; }

/* ===================== 청구기간설정 (js/views/period.js) ===================== */
.pd-bar .pr-qc input[type=month]{ width:140px; }
.pd-bar .pr-qc select{ border:0; height:26px; padding:0 4px; width:160px; font-size:12px; background:#fff; text-align-last:center; }
.pd-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
table.grid.pd td.pd-ok{ color:#1a56b8; font-weight:700; }
table.grid.pd td.pd-no{ color:#9aa3ae; }
.pd-panel .ap-row > span{ flex-basis:104px; }
.pd-def button{ flex:1 1 auto; height:26px; }

/* ===================== 팝업창 이동 (js/dydrag.js) ===================== */
.modal .modal-h, .pr-allergy .pr-al-h{ cursor:move; user-select:none; }
.bi-pop .modal-h{ cursor:default; }                 /* 기본공급자 정보는 이동하지 않음 */
body.dy-dragging, body.dy-dragging *{ cursor:move !important; user-select:none !important; }

/* ===================== 식단표등록 (js/views/menuReg.js) ===================== */
.mr-bar .pr-qc input[type=month]{ width:130px; }
.mr-bar .pr-qc select{ border:0; height:26px; padding:0 4px; font-size:12px; background:#fff; text-align-last:center; }
.mr-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.mr-q-food select{ width:80px; }
.mr-q-item select{ width:150px; }
.mr-q-range select{ width:90px; }
.mr-q-ym input{ cursor:pointer; }
.mr-bar .mr-save{ margin-left:auto; }                                   /* 등록하기 : 맨 우측 */
.mr-bar .mr-save:disabled{ opacity:.45; cursor:not-allowed; }
.mr-bar .mr-save.dirty{ border-color:#e07b00; background:#fff1dc; color:#8a4b00; box-shadow:0 0 0 2px rgba(224,123,0,.25); }
table.mr-cal tr.mr-date td.dirty{ background:#ffd9a8; color:#8a4b00; }
.mr-wrap{ flex:1 1 auto; min-height:0; max-height:none; background:#fff; }
/* 열폭 고정 (조절 불가) : 요일마다 같은 크기 = 62+104+28+44+28+44+44+44 = 398px, 표 폭은 menuReg.js 가 정확히 넣는다 */
table.mr-cal{ border-collapse:collapse; table-layout:fixed; font-size:11px; white-space:nowrap; }
table.mr-cal col.mr-c-wk{ width:96px; }
table.mr-cal col.mr-c-code{ width:62px; }
table.mr-cal col.mr-c-name{ width:104px; }
table.mr-cal col.mr-c-n{ width:28px; }
table.mr-cal col.mr-c-m{ width:44px; }
table.mr-cal th, table.mr-cal td{ border:1px solid #d3d8df; padding:1px 3px; height:20px; overflow:hidden; text-overflow:ellipsis; }
/* 요일 구분선 : 굵은 테두리는 열폭을 흔들므로 안쪽 그림자로 그린다 */
table.mr-cal th.dl, table.mr-cal td.dl{ box-shadow:inset 2px 0 0 #6b7685; }
table.mr-cal thead th{ position:sticky; background:#eef1f5; color:#333; font-weight:700; text-align:center; z-index:2; }
table.mr-cal thead tr.mr-h1 th{ top:0; height:20px; font-size:12px; box-shadow:inset 2px 0 0 #6b7685; }
table.mr-cal thead tr.mr-h2 th{ top:21px; font-size:10.5px; font-weight:600; }
table.mr-cal thead th.mr-corner{ left:0; z-index:4; background:linear-gradient(to top right, #eef1f5 49%, #9aa3ae 50%, #eef1f5 51%); }
table.mr-cal thead th.we{ color:#c62828; }
table.mr-cal td.mr-wk, table.mr-cal td.mr-wk-f{ position:sticky; left:0; z-index:1; background:#fff; text-align:center; }
table.mr-cal td.mr-wk{ vertical-align:top; padding-top:6px; }
table.mr-cal td.mr-wk b{ display:block; font-size:12px; }
table.mr-cal td.mr-wk i{ display:block; margin-top:30px; font-style:normal; color:#d32f2f; font-weight:700; }
table.mr-cal tr.mr-date td{ background:#e3edf8; text-align:center; font-weight:700; color:#1e3a5f; }
table.mr-cal tr.mr-date td.out{ color:#8a93a3; background:#eef2f6; }
table.mr-cal tr.mr-date td.we{ color:#c62828; }
table.mr-cal tr.mr-item td.n{ text-align:center; }
table.mr-cal tr.mr-item td.m, table.mr-cal tr.mr-foot td.m{ text-align:right; }
table.mr-cal tr.mr-item td:nth-child(8n+5), table.mr-cal tr.mr-item td:nth-child(8n+6),
table.mr-cal tr.mr-item td:nth-child(8n+7), table.mr-cal tr.mr-item td:nth-child(8n+8){ background:#f6f7f9; }
table.mr-cal tr.mr-item td.nm{ cursor:pointer; }
table.mr-cal tr.mr-item td.nm:hover{ background:#fff6c9; box-shadow:inset 0 0 0 1px #e0b400; }
table.mr-cal tr.mr-foot td{ background:#ffffa6; font-weight:700; }
table.mr-cal tr.mr-foot td.mr-wk-f{ background:#ffffa6; font-size:10px; letter-spacing:-.3px; }
table.mr-cal tr.mr-foot td.sum{ text-align:center; }
table.mr-cal tr.mr-foot td.mg{ color:#d32f2f; text-align:center; padding:0; font-size:10.5px; text-overflow:clip; }

/* 편집설정 : 우측 편집창 '식단표 데이터 조회' (엑셀 데이타확인) */
.mr-bar .mr-look{ align-self:flex-end; }
.mr-body .mr-wrap{ flex:1 1 auto; min-width:0; height:100%; }
.acct-panel.mr-lk{ flex:0 0 560px; width:560px; background:#eef2fa; }
.mr-lk-q{ display:flex; align-items:stretch; gap:8px; padding:8px 8px 6px; }
table.mr-lk-form{ flex:1 1 auto; border-collapse:collapse; background:#fff; }
table.mr-lk-form th, table.mr-lk-form td{ border:2px solid #222; height:28px; padding:0; }
table.mr-lk-form th{ width:84px; background:#fff; font-size:13px; font-weight:800; text-align:center; }
table.mr-lk-form td{ background:#dde8f5; }
table.mr-lk-form input{ width:100%; height:26px; border:0; background:transparent; text-align:center; font-size:13px; font-weight:800; color:#1a35c8; }
table.mr-lk-form input:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); background:#fff; }
table.mr-lk-form input[type=date]{ cursor:pointer; }
.mr-lk-side{ display:flex; flex-direction:column; justify-content:space-between; align-items:center; }
.mr-lk-side .lk-go{ height:34px; padding:0 14px; font-size:14px; }
.mr-lk-side .lk-cnt{ font-size:12px; font-weight:700; color:#1a56b8; }
.mr-lk-msg{ margin:0 8px 4px; }
.mr-lk-msg:empty{ display:none; }
/* 그리드는 편집창 끝까지 채운다 */
.mr-lk-list{ flex:1 1 auto; min-height:0; overflow:auto; margin:0 8px 8px; border:1px solid #6b7685; background:#fff; }
.mr-lk-list table{ width:100%; border-collapse:collapse; table-layout:fixed; font-size:12px; background:#fff; }
.mr-lk-list th{ position:sticky; top:0; background:#dde8f5; border:1px solid #6b7685; border-top:0; padding:3px 2px; font-weight:700; }
.mr-lk-list td{ border:1px solid #6b7685; padding:2px 4px; height:18px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mr-lk-list td.cd{ background:#ffff00; text-align:center; font-weight:700; }
.mr-lk-list td.m{ text-align:right; }
.mr-lk-list td.none{ height:60px; text-align:center; color:#8a93a3; font-weight:700; background:#fff; }
.mr-lk-list th:nth-child(1){ width:66px; }
.mr-lk-list th:nth-child(3), .mr-lk-list th:nth-child(6){ width:34px; }
.mr-lk-list th:nth-child(4){ width:42px; }
.mr-lk-list th:nth-child(5), .mr-lk-list th:nth-child(7){ width:50px; }
.mr-lk-list th:nth-child(8){ width:96px; }

/* ===================== 실납품수량등록 (js/views/shipReg.js) ===================== */
.sr-body{ flex:1 1 auto; min-height:0; display:flex; gap:10px; overflow-x:auto; padding-bottom:4px; }
.sr-area{ display:flex; flex-direction:column; gap:6px; min-height:0; flex:0 0 auto; }
.sr-a1{ width:360px; }   /* 2026-10-27 넓힘 (271 → 360). 상단 선택칸(254+52+52+테두리)과 같은 폭. 그리드① 거래처명 = 영역폭 - 인원수 56 - 식단가 56 */
.sr-q .w-sel{ width:226px; }   /* ① 상단 납품처명 : 영역에 맞춰 함께 (226 + 인원수 66 + 식단가 66) */
.sr-a1 .sr-q .w-n{ width:66px; }   /* 머리칸 14px 에서 '인원수' · '식단가' 가 한 줄로 */
.sr-a2{ width:495px; }   /* ② 영역 = 달력 그리드 폭 (상단 조회줄 오른쪽 끝을 그리드에 맞춤) */
.sr-a2 > .sr-bar{ gap:4px; } .sr-a3{ width:275px; } .sr-a4{ width:261px; }   /* ③ 컵과일 : 220 → 275 (1/4 넓힘, 2026-10-27) */   /* ④ : 240 + 엑셀 열너비 3 (21px) */
.sr-a4 .sr-q .w-ym input{ width:112px; }   /* ④ 상단이 영역 안에 들어가도록 (년월 112 + 식단가 71 + 조회 버튼) */
.sr-bar .pr-qc > span, .sr-act, .sr-bar .pr-big span{ white-space:nowrap; }
.sr-bar{ display:flex; align-items:stretch; gap:6px; padding:6px; border:1px solid var(--line-soft); border-radius:6px; background:#f4f5f7; }
.sr-q .pr-qc input, .sr-q .pr-qc select{ border:0; height:24px; padding:0 4px; font-size:12px; background:#fff; text-align:center; }
.sr-q .pr-qc select{ text-align-last:center; }
.sr-q .pr-qc input:focus, .sr-q .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.sr-q .pr-qc input:disabled{ background:#f1f1f1; }
.sr-q .sr-v{ display:block; height:24px; line-height:24px; padding:0 6px; text-align:center; font-size:12px; background:#fff; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sr-q .w-name{ width:214px; } .sr-q .w-name input{ width:214px; }   /* 좌측 영역을 넓히며 130 → 214 (납품처명 + 식단가 + [조회] = 영역 폭) */
.sr-q .w-n{ width:52px; } .sr-q .w-n2 input{ width:60px; } .sr-q .w-n2 .sr-v{ width:60px; }
.sr-q .w-food select{ width:70px; } .sr-q .w-ym input{ width:118px; cursor:pointer; }
.sr-q .hi .sr-v{ color:#1a35c8; font-weight:800; background:#dde8f5; }
.sr-a1 > .sr-q{ align-self:flex-start; }
.sr-acts{ display:flex; flex-direction:column; gap:4px; }
.sr-act{ flex:1; border:1px solid #b8bec8; border-radius:3px; padding:0 8px; font-size:12px; font-weight:800; cursor:pointer; }
.sr-act.peach{ background:#f8cbad; } .sr-act.green{ background:#e2f0d9; border-bottom:3px solid #2e9e4f; }
.sr-act:hover{ filter:brightness(.96); }
.sr-bar .pr-big:disabled{ opacity:.45; cursor:not-allowed; }
.sr-bar .pr-big.sr-dirty{ border-color:#e07b00; background:#fff1dc; box-shadow:0 0 0 2px rgba(224,123,0,.25); }
.sr-grid{ flex:1 1 auto; min-height:0; overflow:auto; border:1px solid #6b7685; background:#fff; }
.sr-grid table{ width:100%; border-collapse:collapse; table-layout:fixed; font-size:12px; }
.sr-grid th{ position:sticky; top:0; z-index:1; background:#1e4f8f; color:#fff; font-weight:700; padding:4px 2px; border:1px solid #6b7685; }
.sr-grid td{ border:1px dotted #9aa3ae; padding:2px 4px; height:20px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; text-align:center; }
.sr-grid td.l{ text-align:left; } .sr-grid td.m{ text-align:right; }
.sr-grid td.none{ height:60px; color:#8a93a3; font-weight:700; }
.sr-g1 tbody tr{ cursor:pointer; }
.sr-g1 tbody tr:hover td{ background:#eef4fc; }
.sr-g1 tbody tr.sel td{ background:#fff3c4; font-weight:700; }
.sr-g1 th:nth-child(2){ width:44px; } .sr-g1 th:nth-child(3), .sr-g1 th:nth-child(4){ width:56px; }   /* 건수 · 인원수 · 식단가 */
.sr-cnt{ font-size:12px; font-weight:700; color:#1a56b8; text-align:right; }
.sr-cnt.hi{ text-align:center; color:#1a35c8; font-size:13px; }
.sr-note{ font-size:12px; color:#48505b; }
.sr-note i{ color:#c62828; font-style:normal; font-weight:700; }
/* ② 달력 */
.sr-g2{ flex:0 0 auto; border:2px solid #222; }
.sr-g2 td{ border:1px solid #9aa3ae; padding:0; height:28px; }
.sr-g2 td.day{ background:#dde8f5; font-weight:700; }
.sr-g2 td.day.dirty{ background:#ffd9a8; color:#8a4b00; }
.sr-g2 td.we{ background:#ff0000; }
.sr-g2 td.diag{ background:linear-gradient(to top right, #fff 49.5%, #9aa3ae 50%, #fff 50.5%); }
.sr-g2 td input{ width:100%; height:27px; border:0; background:transparent; text-align:center; font-size:12px; }
.sr-g2 td input:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); background:#fff; }
.sr-g2 td input:disabled{ color:#333; cursor:default; }
.sr-g2 th:nth-child(1), .sr-g2 th:nth-child(4){ width:56px; }
.sr-g2 th:nth-child(2), .sr-g2 th:nth-child(5){ width:72px; }
/* 비고 열 : 엑셀 열너비 16 (= 117px) , 표 폭 고정 (일자 56 + 실인원수 72 + 비고 117) × 2 */
.sr-g2{ align-self:flex-start; }
.sr-g2 table{ width:490px; }
.sr-g2 th:nth-child(3), .sr-g2 th:nth-child(6){ width:117px; }
/* ③ 컵과일 */
.sr-card{ flex:1; display:flex; flex-direction:column; border:1px solid #777; background:#fff; font-size:12px; }
.sr-card-h{ padding:4px; text-align:center; font-weight:800; font-size:13px; border-bottom:1px solid #777; }
.sr-card-n{ padding:3px; text-align:center; font-weight:800; color:#1a35c8; border-bottom:1px solid #777; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.sr-card-p{ display:flex; align-items:center; gap:2px; padding:2px; background:#fffbc8; }
.sr-card-p input{ width:0; flex:1; border:0; background:transparent; font-size:11px; font-weight:700; color:#1a35c8; cursor:pointer; }
.sr-g3 tr.tot td{ background:#fff3c4; font-weight:800; }
.sr-col{ flex:1; display:flex; flex-direction:column; gap:4px; }

/* ===================== 인센티브지급 현황 (js/views/incStat.js) ===================== */
.is-bar .pr-qc select{ border:0; height:26px; padding:0 4px; font-size:12px; background:#fff; text-align-last:center; }
.is-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.is-bar .pr-qc select:disabled{ background:#f1f1f1; color:#6b7685; }
.is-q-year select{ width:100px; } .is-q-mgr select{ width:160px; } .is-q-mon select{ width:80px; }
.is-bar .is-file{ align-self:flex-end; background:#c9c3f5; border-color:#9a91e0; }
.is-bar .is-file:disabled{ opacity:.6; cursor:not-allowed; }
.is-grid{ flex:1 1 auto; min-height:0; max-height:none; align-self:flex-start; }
table.grid.is{ width:1320px; table-layout:fixed; }   /* 차량코스 150 + 13열 × 90 : 좁은 화면은 가로 스크롤 */
table.grid.is th{ background:#2f5ea8; color:#fff; font-size:13px; font-weight:800; width:90px; position:sticky; top:0; z-index:1; }   /* 폭 1/4 넓힘 (72 → 90) */
table.grid.is th.c{ width:150px; }   /* 120 → 150 */
table.grid.is tr.sum td{ background:#fff3c4; font-weight:800; border-top:2px solid #2f5ea8; position:sticky; bottom:0; }
table.grid.is td{ font-size:12px; height:22px; border-color:#9fb3d6; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
table.grid.is td.c{ text-align:center; }
table.grid.is td.m{ text-align:right; font-variant-numeric:tabular-nums; }
table.grid.is td.tot{ font-weight:800; background:#f3f6fb; }
table.grid.is td.none{ height:60px; text-align:center; color:#8a93a3; font-weight:700; }

/* ===================== 예상청구금액 (js/views/expClaim.js) ===================== */
.ec-bar .pr-qc input[type=month]{ width:140px; }
.ec-bar .pr-qc select{ border:0; height:26px; padding:0 4px; width:160px; font-size:12px; background:#fff; text-align-last:center; }
.ec-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.ec-sum{ border-collapse:collapse; margin:0 0 8px; border:2px solid #555; background:#fff; flex:none; align-self:flex-start; width:auto !important; table-layout:fixed; }
.ec-sum th{ width:112px; padding:4px 6px; background:#d9d9d9; font-size:13px; font-weight:800; border:1px solid #888; }
.ec-sum td{ padding:4px 8px; text-align:center; font-size:13px; font-weight:800; border:1px solid #888; font-variant-numeric:tabular-nums; }
.ec-body{ gap:10px; }
.ec-mgr{ flex:none; width:auto; align-self:flex-start; max-height:100%; overflow:auto; }
table.grid.ec-mg{ width:288px; table-layout:fixed; }
table.grid.ec-mg tbody tr{ cursor:pointer; }
table.grid.ec-mg td{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
table.grid.ec-mg tr.zero td{ color:#9aa3af; }
table.grid.ec-mg tr.ec-ym th{ background:#3d4a5c; }
table.grid.ec-mg tr.tot td{ background:#fff3c4; font-weight:800; }
table.grid.ec-mg tr.sel td{ background:var(--accent-soft); font-weight:800; }
.ec-grid{ flex:1 1 auto; min-width:0; }
table.grid.ec td.ec-shade{ background:#f2f2f2; }
table.grid.ec tr.sel td.ec-shade{ background:inherit; }
table.grid.ec th.ec-line, table.grid.ec td.ec-line{ box-shadow:inset -2px 0 0 #7b8794; }

/* ===================== 납품내역서 (js/views/delivery.js) : 견적서(es-*) 모양을 그대로 쓰고 열만 다르게 ===================== */
.es-list.dl-list{ flex-basis:400px; }
.es-list.dl-list th:nth-child(1){ width:34px !important; } .es-list.dl-list th:nth-child(2){ width:auto !important; }
.es-list.dl-list th:nth-child(3){ width:38px !important; } .es-list.dl-list th:nth-child(4){ width:70px !important; } .es-list.dl-list th:nth-child(5){ width:92px !important; }
.es-list.dl-list tfoot td{ bottom:0; }
.es-doc.dl-doc{ width:640px; padding:18px 18px 22px; }
.dl-doc .es-head td.msg{ font-size:11px; }
.dl-total td{ text-align:right; }
.dl-items th:nth-child(1){ width:56px; } .dl-items th:nth-child(2){ width:auto; } .dl-items th:nth-child(3){ width:56px; }
.dl-items th:nth-child(4){ width:64px; } .dl-items th:nth-child(5){ width:150px; }
.dl-items td{ height:19px; }

/* ===================== 인센티브 내역 (js/views/incList.js) ===================== */
.il-bar .pr-qc input[type=date]{ width:130px; }
.il-bar .pr-qc select{ border:0; height:26px; padding:0 4px; width:170px; font-size:12px; background:#fff; text-align-last:center; }
.il-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.il-body{ gap:10px; }
.il-mgr, .il-fp{ flex:none; width:auto; align-self:flex-start; max-height:100%; overflow:auto; }
table.grid.il-mg{ width:260px; table-layout:fixed; } table.grid.il-fpg{ width:190px; table-layout:fixed; }
table.grid.il-mg td, table.grid.il-fpg td{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
table.grid.il-mg tr.il-cap th{ background:#3d4a5c; line-height:1.3; }
table.grid.il-mg tr.il-cap small{ display:block; font-size:11px; font-weight:600; opacity:.85; }
table.grid.il-mg tbody tr[data-m]{ cursor:pointer; }
table.grid.il-mg tr.sel td{ background:var(--accent-soft); font-weight:800; }
table.grid.il-mg tr.tot td, table.grid.il-fpg tr.tot td{ background:#fff3c4; font-weight:800; }
table.grid.il-mg td.none{ height:50px; text-align:center; color:#8a93a3; font-weight:700; }
.il-grid{ flex:1 1 auto; min-width:0; }
table.grid.il tr.il-sub td{ background:#fff3c4; font-weight:800; border-bottom:2px solid #c0392b; }
.il-hint{ flex:1 1 auto; align-self:flex-start; }

/* ===================== 견적서 (js/views/estDoc.js) : 견적서(es-*) 틀 + 엑셀 View09 모양 ===================== */
.ed-bar .pr-qc select{ border:0; height:26px; padding:0 4px; width:260px; font-size:12px; background:#fff; text-align-last:center; }
.ed-bar .pr-qc input{ width:70px; background:#f6f7f9; font-weight:700; }
.es-list.ed-list{ flex-basis:300px; display:flex; flex-direction:column; }
.ed-find{ display:flex; gap:4px; padding:4px; background:#dde8f5; border-bottom:1px solid #6b7685; position:sticky; top:0; z-index:3; }
.ed-find select{ width:96px; height:26px; font-size:12px; }
.ed-find input{ flex:1; min-width:0; height:26px; padding:0 6px; font-size:12px; border:1px solid #9aa3af; }
.ed-find .tool-btn{ height:26px; padding:0 10px; }
.es-list.ed-list th:nth-child(1){ width:auto !important; } .es-list.ed-list th:nth-child(2){ width:60px !important; }
.es-list.ed-list th{ top:34px !important; }
.es-list.ed-list tfoot td{ bottom:0; }
.ed-docbar{ display:flex; align-items:center; gap:6px; width:640px; margin-bottom:8px; font-size:12px; }
.ed-tag{ background:#2e7d32; color:#fff; font-weight:800; padding:2px 6px; border-radius:2px; white-space:nowrap; }
.ed-tag.t{ background:#8bc34a; } .ed-tag.s{ background:#f9a825; }
.ed-ids{ height:24px; font-size:12px; max-width:200px; }
.ed-title{ flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ed-upd{ white-space:nowrap; }
.es-doc.ed-doc{ width:640px; padding:18px 18px 22px; }
.ed-top{ display:flex; gap:14px; margin:6px 0 10px; }
.ed-to{ flex:1; display:flex; flex-direction:column; gap:4px; padding-top:4px; }
.ed-to span{ display:inline-block; width:62px; color:#333; }
.ed-say{ padding-left:62px; font-weight:700; }
.ed-guest{ display:flex; justify-content:space-between; align-items:baseline; margin-top:8px; padding:0 6px; font-size:14px; }
.ed-sup{ width:260px !important; } .ed-sup th{ width:56px; background:#f2f2f2; border-color:#999 !important; }
.ed-sup td{ border-color:#999 !important; } .ed-sup td.ceo{ position:relative; }
.ed-amt{ display:flex; gap:10px; align-items:baseline; padding:8px 10px; background:#f2f2f2; border:1px solid #bbb; margin-bottom:6px; }
.ed-amt b{ font-size:13px; } .ed-amt b:first-of-type{ margin-left:auto; } .ed-amt b.n{ min-width:90px; text-align:right; }
.ed-items th:nth-child(1){ width:auto; } .ed-items th:nth-child(2){ width:46px; } .ed-items th:nth-child(3){ width:40px; }
.ed-items th:nth-child(4){ width:64px; } .ed-items th:nth-child(5){ width:60px; } .ed-items th:nth-child(6){ width:84px; } .ed-items th:nth-child(7){ width:84px; }
.ed-items td{ height:19px; } .ed-items td.amt{ background:#f2f2f2; }
.ed-items td.p{ text-align:center; } .ed-items tr.blank td{ color:#555; }
.ed-remark{ margin-top:8px; min-height:56px; padding:6px 8px; border:1px solid #555; font-size:11px; font-weight:700; line-height:1.5; }

/* ===================== 데이타검증 (js/views/verify.js) : 엑셀 REG050 모양 ===================== */
.vf-bar .pr-qc input[type=month]{ width:140px; color:#1a35c8; font-weight:800; }
.vf-run{ align-self:flex-end; height:30px; background:#c9c3f5; border-color:#9a91e0; font-weight:700; }
.vf-info{ display:flex; align-items:flex-end; gap:14px; margin:0 0 8px; flex:none; flex-wrap:wrap; }
.vf-info table{ border-collapse:collapse; background:#fff; font-size:12px; }
.vf-info th, .vf-info td{ border:1px solid #555; padding:3px 8px; text-align:center; white-space:nowrap; }
.vf-info th{ background:#d9d9d9; font-weight:800; }
.vf-info td.ym{ color:#1a35c8; font-weight:800; }
.vf-cnt td{ min-width:50px; color:#1a35c8; font-weight:800; } .vf-cnt th{ min-width:90px; }
.vf-applied th.cap{ background:#fff; color:#1a35c8; font-size:13px; padding:6px 8px; }
.vf-applied td{ min-width:130px; }
.vf-cond{ display:flex; align-items:center; gap:8px; font-size:12px; }
.vf-cond th{ background:#ffff00 !important; min-width:90px; font-weight:700 !important; }
.vf-cond td{ background:#dde3ea; padding:0 !important; }
.vf-cond select, .vf-cond input{ border:0; background:transparent; height:24px; width:150px; padding:0 6px; font-size:12px; text-align:center; }
.vf-cond select{ width:80px; height:50px; text-align-last:center; }
.vf-cond select:focus, .vf-cond input:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.vf-grid{ flex:1 1 auto; min-height:0; overflow:auto; align-self:flex-start; max-width:100%; }
table.grid.vf{ width:auto; table-layout:fixed; border-collapse:separate; border-spacing:0; font-size:12px; }
table.grid.vf col.n{ width:230px; } table.grid.vf col.r{ width:59px; } table.grid.vf col.d{ width:45px; }   /* 결과 44 → 59 · 일자 34 → 45 (1/3 넓힘) */ table.grid.vf col.m{ width:130px; }
table.grid.vf th{ position:sticky; top:0; z-index:2; background:#fff; color:#111; font-weight:700; border-bottom:1px solid #555; padding:3px 2px; }
table.grid.vf th.dd.sat{ background:#0000ff; color:#fff; } table.grid.vf th.dd.sun{ background:#ff0000; color:#fff; }
table.grid.vf td{ height:20px; padding:0 3px; border-right:1px solid #ccd; border-bottom:1px dotted #bbb; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
table.grid.vf td.n{ text-align:right; position:sticky; left:0; background:#fff; z-index:1; }
table.grid.vf th.n{ position:sticky; left:0; z-index:3; }
table.grid.vf td.r{ text-align:center; font-weight:800; }
table.grid.vf td.v{ text-align:center; } table.grid.vf td.v.b{ color:#1a35c8; } table.grid.vf td.v.k{ color:#111; } table.grid.vf td.v.r{ color:#e00; font-weight:800; }
table.grid.vf td.m{ text-align:left; font-weight:700; background:#eee; padding-left:6px; }
table.grid.vf tr.sum td{ background:#fff3c4; font-weight:800; color:#1a35c8; border-top:2px solid #555; border-bottom:2px solid #555; }
table.grid.vf tr.sum td.r{ color:#111; }
table.grid.vf tr.cap td{ background:#dde8f5; font-weight:800; color:#1e3a5f; text-align:left; }
table.grid.vf tr.cap td.n{ text-align:right; }
table.grid.vf td.none{ text-align:center; color:#8a93a3; font-weight:700; }
.vf-opt{ display:flex; flex-direction:column; gap:6px; font-size:12px; }
.vf-opt label{ display:inline-flex; align-items:center; gap:3px; margin-right:12px; cursor:pointer; white-space:nowrap; }
.vf-opt input[type=radio]{ margin:0; accent-color:var(--accent); }
.vf-opt-a{ color:#1a35c8; font-weight:700; }
.vf-opt-row{ display:flex; align-items:center; gap:12px; }
.vf-opt-b{ color:#1a35c8; font-weight:800; text-decoration:underline; }
.vf-file{ height:30px; padding:0 18px; background:#c9c3f5; border-color:#9a91e0; font-weight:800; }
.vf-file:disabled{ opacity:.55; cursor:not-allowed; }

/* ===================== 견적서 조회 (js/views/estimate.js) ===================== */
.es-bar .pr-qc input, .es-bar .pr-qc select{ border:0; height:26px; padding:0 4px; font-size:12px; background:#fff; text-align-last:center; }
.es-bar .pr-qc input:focus, .es-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.es-bar .pr-qc select:disabled{ background:#f1f1f1; color:#8a93a3; }
.es-q-d input{ width:128px; cursor:pointer; } .es-q-name select{ width:210px; } .es-q-mode select{ width:72px; }
.es-bar .pr-qc input.es-group{ width:190px; background:#ffff00; font-weight:700; cursor:pointer; }   /* 그룹 : 노란 입력칸, 더블클릭 → 그룹 편집 */
/* 왼쪽 목록 체크박스 열 (견적(일)등록 · 일별출고 현황) */
.es-list th.ck, .es-list td.ck, .do-list th.ck, .do-list td.ck{ text-align:center; padding:0; }
.es-list input[type=checkbox], .do-list input[type=checkbox]{ margin:0; width:14px; height:14px; cursor:pointer; accent-color:var(--accent); vertical-align:middle; }
.es-list th:nth-child(1), .do-list th:nth-child(1){ width:28px !important; }
.es-list th:nth-child(2){ width:38px !important; } .es-list th:nth-child(3){ width:auto !important; }
.es-list th:nth-child(4){ width:40px !important; } .es-list th:nth-child(5){ width:92px !important; }
.do-list th:nth-child(2){ width:36px !important; } .do-list th:nth-child(3){ width:auto !important; } .do-list th:nth-child(4){ width:52px !important; }
.es-list-h{ position:sticky; top:0; z-index:2; padding:4px 6px; background:#dde8f5; font-size:11px; font-weight:800; color:#1e3a5f; text-align:center; }
.es-list .es-list-empty{ padding:30px 10px; text-align:center; color:#8a93a3; font-weight:700; }
.es-list th{ top:23px !important; }
.es-list td.none{ height:60px; text-align:center; color:#8a93a3; font-weight:700; }
/* 그룹 편집 팝업 (frm그룹편집2) */
.modal.es-ge{ width:860px; }
.modal.es-ge .modal-h{ position:relative; padding:10px 44px 10px 16px; }
.modal.es-ge .modal-b{ padding:10px 14px; }
.es-ge-top{ display:flex; align-items:flex-end; gap:8px; flex-wrap:wrap; margin-bottom:10px; }
.es-ge-top label{ display:flex; flex-direction:column; gap:3px; font-size:12px; font-weight:800; color:#48505b; }
.es-ge-top .v{ display:block; min-width:60px; height:28px; line-height:28px; padding:0 8px; border:1px solid #c3cbd8; border-radius:3px; background:#f3f6fb; font-size:12px; color:#1e3a5f; white-space:nowrap; }
.es-ge-top .v.n{ min-width:40px; text-align:center; }
.es-ge-top input.ge-group{ width:220px; height:28px; padding:0 8px; border:1px solid #c9a227; border-radius:3px; background:#ffff00; font-size:13px; font-weight:800; }
.es-ge-top input.ge-group:focus{ outline:none; box-shadow:0 0 0 2px var(--accent-soft); border-color:var(--accent); }
.es-ge-top .tool-btn{ height:30px; }
.es-ge-lists{ display:flex; gap:10px; }
.es-ge-col{ flex:1 1 0; min-width:0; display:flex; flex-direction:column; gap:4px; }
.es-ge-col .cap{ font-size:12px; font-weight:800; color:#1e3a5f; }
.es-ge-col .cap i{ font-style:normal; font-weight:600; color:#c62828; font-size:11px; }
.es-ge-q{ display:flex; gap:4px; }
.es-ge-q input{ height:26px; padding:0 6px; border:1px solid #b8bec8; border-radius:3px; font-size:12px; }
.es-ge-q .ge-qn{ flex:1; } .es-ge-q .ge-qf{ width:70px; }
.es-ge-col .lst{ height:300px; overflow:auto; border:1px solid #b8bec8; background:#fff; }
.es-ge-col table{ width:100%; border-collapse:collapse; table-layout:fixed; font-size:12px; }
.es-ge-col th{ position:sticky; top:0; background:#eef1f5; padding:4px; font-weight:800; border-bottom:1px solid #b8bec8; }
.es-ge-col td{ padding:3px 6px; border-bottom:1px dotted #d3d8df; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.es-ge-col td.c{ text-align:center; } .es-ge-col td.m{ text-align:right; }
.es-ge-col td.none{ text-align:center; color:#8a93a3; height:50px; }
.ge-mem th:nth-child(1){ width:44px; } .ge-mem th:nth-child(4){ width:56px; }
.ge-all th:nth-child(2), .ge-all th:nth-child(3){ width:56px; }
.es-ge-col tbody tr[data-r], .es-ge-col tbody tr[data-n]{ cursor:pointer; }
.es-ge-col tbody tr[data-r]:hover td, .es-ge-col tbody tr[data-n]:hover td{ background:#e8f0fb; }
.modal.es-ge .ge-msg{ margin-top:6px; min-height:18px; }
.es-body{ flex:1 1 auto; min-height:0; display:flex; gap:8px; }
.es-wrap{ flex:1 1 auto; min-width:0; min-height:0; overflow:auto; background:#e9edf3; border:1px solid var(--line); padding:14px; }
/* 납품처명 없이 조회 : 왼쪽 목록 */
.es-list{ flex:0 0 330px; min-height:0; overflow:auto; border:1px solid #6b7685; background:#fff; }
.es-list table{ width:100%; border-collapse:collapse; table-layout:fixed; font-size:12px; }
.es-list th{ position:sticky; top:0; z-index:1; background:#1e3a5f; color:#fff; padding:4px 2px; font-weight:700; }
.es-list th:nth-child(1){ width:38px; } .es-list th:nth-child(3){ width:40px; } .es-list th:nth-child(4){ width:92px; }
.es-list td{ border-bottom:1px dotted #c3cbd8; padding:3px 4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.es-list td.c{ text-align:center; } .es-list td.m{ text-align:right; font-variant-numeric:tabular-nums; }
.es-list td i{ font-style:normal; font-size:10px; color:#1a56b8; border:1px solid #9fb3d6; border-radius:3px; padding:0 3px; }
.es-list tbody tr{ cursor:pointer; }
.es-list tbody tr:hover td{ background:#eef4fc; }
.es-list tbody tr.sel td{ background:#fff3c4; font-weight:700; }
.es-list tfoot td{ position:sticky; bottom:22px; background:#f3f6fb; font-weight:800; border-top:2px solid #6b7685; }
.es-list tfoot tr.sub td{ bottom:0; font-weight:600; font-size:11px; color:#48505b; text-align:right; border-top:0; }
.es-doc{ width:860px; margin:0; background:#fff;   /* 견적서는 왼쪽(납품처 목록 쪽)에 붙여 표시 */ padding:22px 26px 26px; box-shadow:0 2px 10px rgba(15,23,42,.15); font-size:12px; color:#111; }
.es-title{ text-align:center; font-size:24px; font-weight:800; letter-spacing:2px; margin-bottom:4px; }
.es-tel{ text-align:right; font-size:11px; margin-bottom:4px; }
.es-doc table{ width:100%; border-collapse:collapse; }
.es-doc th, .es-doc td{ border:1px solid #333; padding:3px 6px; }
.es-head th{ background:#f2f2f2; font-weight:700; width:84px; white-space:nowrap; }
.es-head th.v{ width:26px; line-height:1.3; }
.es-head td.msg{ text-align:center; font-weight:700; line-height:1.5; }
.es-head td.to{ text-align:center; font-size:14px; font-weight:800; }
.es-head td.gw{ width:46px; text-align:center; }
.es-head td.ceo{ position:relative; }
.es-stamp{ position:absolute; right:4px; top:50%; transform:translateY(-50%); height:46px; opacity:.85; }
.es-claim{ margin-top:-1px; }
.es-claim th{ width:110px; background:#f2f2f2; font-size:13px; }
.es-claim td{ text-align:right; font-size:14px; font-weight:800; }
.es-items{ margin-top:8px; table-layout:fixed; }
.es-items th{ background:#dde8f5; font-weight:700; }
.es-items th:nth-child(1){ width:84px; } .es-items th:nth-child(3){ width:44px; } .es-items th:nth-child(4){ width:56px; }
.es-items th:nth-child(5){ width:62px; } .es-items th:nth-child(6){ width:84px; } .es-items th:nth-child(7){ width:150px; }
.es-items td{ border-color:#999; border-style:dotted; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.es-items tr.d1 td{ border-top:1px solid #555; }
.es-items td.c{ text-align:center; } .es-items td.m{ text-align:right; font-variant-numeric:tabular-nums; }
.es-items td.tx{ color:#1a56b8; }
.es-sum{ margin-top:-1px; table-layout:fixed; }
.es-sum th{ background:#1e3a5f; color:#fff; font-weight:700; }
.es-sum td{ text-align:right; font-weight:700; font-variant-numeric:tabular-nums; }
.es-sum tr.tot td{ font-size:13px; }
.es-note{ margin-top:8px; font-size:11px; color:#48505b; }

/* ===================== 식단표 조회 · 간식 계획표 (js/views/menuView.js) ===================== */
.mv-bar .pr-qc input, .mv-bar .pr-qc select{ border:0; height:26px; padding:0 4px; font-size:12px; background:#fff; text-align-last:center; }
.mv-bar .pr-qc input:focus, .mv-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.mv-q-ym input{ width:130px; cursor:pointer; } .mv-q-food select{ width:80px; } .mv-q-item select{ width:190px; background:#dde8f5 !important; }
.mv-q-range select{ width:100px; }
.mv-body{ flex:1 1 auto; min-height:0; display:flex; gap:8px; }
.mv-wrap{ flex:1 1 auto; min-width:0; min-height:0; overflow:auto; background:#e9edf3; border:1px solid var(--line); padding:14px; }
/* 왼쪽 납품처 목록 */
.mv-list{ flex:0 0 260px; min-height:0; overflow:auto; border:1px solid #6b7685; background:#fff; position:relative; }
.mv-list-h{ position:sticky; top:0; z-index:2; padding:4px 6px; background:#dde8f5; font-size:11px; font-weight:800; color:#1e3a5f; text-align:center; }
/* 일별출고 현황 : 머리줄 맨 우측 [ReFresh] (높이 23px 유지 — 아래 머리글 sticky top) */
.do-list-h{ display:flex; align-items:center; gap:4px; height:23px; padding:0 3px 0 6px; }
.do-list-h > span{ flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.do-refresh{ flex:none; height:18px; padding:0 7px; border:1px solid #8aa3c4; border-radius:4px; background:#fff; color:#1e3a5f;
  font-size:11px; font-weight:800; line-height:16px; }
.do-refresh:hover{ background:var(--accent); border-color:var(--accent); color:#fff; }
/* 납품처 검색줄 (머리줄 23px 아래에 고정, 높이 27px → 표 머리글 top 50px) */
.do-find{ position:sticky; top:23px; z-index:2; display:flex; gap:3px; height:27px; padding:3px 3px; background:#fff; border-bottom:1px solid #c3cbd8; }
.do-find .do-kw{ flex:1; min-width:0; height:21px; padding:0 6px; border:1px solid #8aa3c4; border-radius:3px; font-size:12px; }
.do-find .do-kw:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
.do-find .do-kw-go{ flex:none; height:21px; padding:0 9px; border:1px solid #8aa3c4; border-radius:3px; background:#f1f4f8; color:#1e3a5f; font-size:12px; font-weight:800; }
.do-find .do-kw-go:hover{ background:var(--accent); border-color:var(--accent); color:#fff; }
.mv-list.do-list th{ top:50px; }
.mv-list table{ width:100%; border-collapse:collapse; table-layout:fixed; font-size:12px; }
.mv-list th{ position:sticky; top:23px; z-index:1; background:#1e3a5f; color:#fff; padding:4px 2px; font-weight:700; }
.mv-list th:nth-child(1){ width:36px; } .mv-list th:nth-child(3){ width:52px; }
.mv-list td{ border-bottom:1px dotted #c3cbd8; padding:3px 4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mv-list td.c{ text-align:center; }
.mv-list td i{ font-style:normal; font-size:10px; color:#1a56b8; border:1px solid #9fb3d6; border-radius:3px; padding:0 3px; }
.mv-list td.none{ height:70px; text-align:center; color:#8a93a3; font-weight:700; white-space:normal; }
.mv-list tbody tr[data-i]{ cursor:pointer; }
.mv-list tbody tr[data-i]:hover td{ background:#eef4fc; }
.mv-list tbody tr.sel td{ background:#fff3c4; font-weight:700; }
.mv-list-f{ position:sticky; bottom:0; padding:3px 6px; background:#f3f6fb; border-top:2px solid #6b7685; font-size:12px; font-weight:800; text-align:right; }
.mv-page{ margin:0; background:#fff;   /* 계획표는 왼쪽(납품처 목록 쪽)에 붙여 표시 */ padding:18px 18px 22px; box-shadow:0 2px 10px rgba(15,23,42,.15); color:#111; }
.mv-page.mv-n5{ width:1180px; } .mv-page.mv-n6{ width:1380px; } .mv-page.mv-n7{ width:1580px; }
.mv-top{ display:flex; align-items:flex-start; gap:14px; }
.mv-sign{ border-collapse:collapse; font-size:12px; flex:0 0 auto; }
.mv-sign th, .mv-sign td{ border:1px solid #333; padding:2px 10px; text-align:center; font-weight:600; }
.mv-sign td{ height:34px; }
.mv-title{ flex:1 1 auto; align-self:center; text-align:center; font-size:46px; font-weight:900; letter-spacing:6px; }
.mv-brand{ flex:0 0 auto; width:500px; border:1px solid #ddd; position:relative; }
.mv-brand img{ display:block; width:100%; }
.mv-brand .tel{ position:absolute; top:4px; right:8px; font-size:13px; font-weight:700; background:rgba(255,255,255,.85); padding:0 4px; }
.mv-warn{ margin:6px 0 4px; color:#d32f2f; font-size:13px; font-weight:700; }
table.mv-cal{ width:100%; border-collapse:collapse; table-layout:fixed; border:2px solid #222; }
table.mv-cal col.wk{ width:56px; }
table.mv-cal th{ background:#fde9d9; font-size:20px; font-weight:900; height:38px; border:1px solid #888; }
table.mv-cal th.we{ color:#c62828; }
table.mv-cal th.corner{ position:relative; font-size:11px; font-weight:600; background:#fde9d9 linear-gradient(to top right, transparent 49.5%, #888 50%, transparent 50.5%); }
table.mv-cal th.corner span:first-child{ position:absolute; top:3px; right:5px; } table.mv-cal th.corner span:last-child{ position:absolute; bottom:3px; left:5px; }
table.mv-cal td{ border-left:1px solid #888; border-right:1px solid #888; text-align:center; vertical-align:top; padding:2px 4px; }
table.mv-cal td.wk{ vertical-align:middle; font-size:15px; font-weight:800; background:#f4f6f9; border:1px solid #888; }
table.mv-cal tr.d td{ background:#ddebf7; font-size:14px; font-weight:800; border-top:2px solid #555; border-bottom:1px solid #9aa3ae; }
table.mv-cal tr.d td.wk{ background:#f4f6f9; }
table.mv-cal tr.d td.out{ color:#7b8794; }
table.mv-cal tr.n td{ background:#ddebf7; font-size:13px; font-weight:800; border-bottom:1px solid #9aa3ae; }
table.mv-cal tr.it td{ height:150px; padding-top:6px; }
table.mv-cal tr.it .nm{ font-size:15px; font-weight:700; line-height:1.3; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
table.mv-cal tr.it .al{ font-size:13px; min-height:18px; margin-bottom:4px; }
table.mv-cal tr.im td{ height:96px; vertical-align:middle; border-bottom:1px solid #888; }
/* 사진 : 1~3개 같은 크기, 4개는 조금 작게 */
.mv-cal .pics{ display:flex; justify-content:center; align-items:center; gap:4px; }
.mv-cal .pic{ width:76px; height:84px; display:flex; align-items:center; justify-content:center; }
.mv-cal .pics.c4 .pic{ width:56px; height:64px; }
.mv-cal .pic img{ max-width:100%; max-height:100%; object-fit:contain; }
.mv-cal .pic.none{ background:repeating-linear-gradient(45deg, #f3f4f6, #f3f4f6 6px, #e8eaee 6px, #e8eaee 12px); border:1px dashed #c3cbd8; }
.mv-cal .pic.none::after{ content:'사진'; font-size:10px; color:#9aa3ae; }
.mv-notes{ position:relative; margin-top:6px; color:#d32f2f; font-size:13px; font-weight:700; line-height:1.6; }
.mv-notes .r{ position:absolute; right:0; top:0; text-align:right; color:#c62828; }
.mv-bottom{ display:flex; gap:10px; margin-top:4px; }
.mv-allergy{ flex:0 0 46%; border:2px solid #1f6fb2; padding:6px 8px; font-size:14px; font-weight:700; line-height:1.55; }
.mv-allergy .b{ color:#1f6fb2; } .mv-allergy .r{ color:#d32f2f; }
.mv-eco{ flex:1 1 auto; border:2px solid #1f6fb2; display:flex; flex-direction:column; }
.mv-eco .h{ background:#ffffcc; text-align:center; font-weight:800; color:#1e3a5f; padding:4px; border-bottom:2px solid #1f6fb2; }
.mv-eco .cols{ flex:1; display:grid; grid-template-columns:1fr 1fr 1fr; }
.mv-eco .cols > div{ padding:4px 6px; font-size:11px; color:#2b4f86; line-height:1.55; border-right:1px solid #1f6fb2; }
.mv-eco .cols > div:last-child{ border-right:0; }
.mv-eco .hd{ font-weight:700; }
.mv-foot{ display:flex; align-items:center; gap:16px; margin-top:14px; }
.mv-foot .slogan{ flex:1 1 auto; text-align:center; font-size:24px; font-weight:900; line-height:1.4; }
.mv-foot .slogan img{ height:30px; vertical-align:-6px; }
.mv-origin{ flex:0 0 46%; border-collapse:collapse; font-size:12px; }
.mv-origin th{ width:56px; border:1px solid #333; padding:4px; font-weight:800; }
.mv-origin td{ border:1px solid #333; padding:4px 6px; line-height:1.5; }

/* ===================== 일별출고 현황 (js/views/dailyOut.js) ===================== */
.do-bar .pr-qc input, .do-bar .pr-qc select{ border:0; height:26px; padding:0 4px; font-size:12px; background:#fff; text-align-last:center; }
.do-bar .pr-qc input:focus, .do-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.do-q-d input{ width:130px; cursor:pointer; } .do-q-mgr select{ width:170px; } .do-q-food select{ width:80px; }
.do-wrap{ flex:1 1 auto; min-height:0; overflow:auto; background:#e9edf3; border:1px solid var(--line); padding:14px; }
.do-page{ display:inline-block; min-width:900px; background:#fff; padding:14px 16px 18px; box-shadow:0 2px 10px rgba(15,23,42,.15); color:#111; font-size:12px; }   /* 왼쪽 정렬 */
.do-body{ flex:1 1 auto; min-height:0; display:flex; gap:8px; }
.do-body .do-wrap{ flex:1 1 auto; min-width:0; }
/* 머리줄 : 조회조건 2행 | 가운데 제목 | 오른쪽 아래 조회일자 */
/* 머리줄 · 총합계 표는 1640px 로 고정 (아래 납품내역이 항목 수만큼 넓어져도 제목이 화면 안에 보이도록) */
.do-headline{ display:flex; align-items:flex-end; gap:16px; margin-bottom:8px; width:1640px; }
.do-page table.do-tot{ width:1640px; }
.do-page{ min-width:1640px; }
.do-headline table.do-cap{ margin-bottom:0; flex:0 0 auto; }
.do-title{ flex:1 1 auto; align-self:center; text-align:center; font-size:30px; font-weight:900; letter-spacing:4px; }
.do-asof{ flex:0 0 auto; font-size:14px; font-weight:700; white-space:nowrap; }
.do-asof b{ font-size:16px; font-weight:900; }
/* 보고서 머리 2행 (조회일자 · 차량코스 · 식단가) */
table.do-cap{ margin-bottom:8px; border:2px solid #222; }
table.do-cap th, table.do-cap td{ border:1px solid #333; height:26px; padding:2px 10px; text-align:center; font-size:13px; font-weight:800; white-space:nowrap; }
table.do-cap td.dt{ width:150px; font-size:19.5px; }   /* 병합한 날짜 칸 : 1.5배 (13px × 1.5) */
table.do-cap th{ width:150px; background:#ededed; }
table.do-cap td{ min-width:120px; }
.do-page table{ border-collapse:collapse; }
/* ① 당일 총합계 수량 */
table.do-tot{ width:100%; margin-bottom:12px; }
table.do-tot th, table.do-tot td{ border:1px solid #555; padding:2px 6px; height:20px; white-space:nowrap; }
table.do-tot td{ border-top-style:dotted; border-bottom-style:dotted; }
table.do-tot th{ background:#f3f6fb; font-weight:800; }
table.do-tot th.lb{ width:70px; font-size:11px; line-height:1.4; background:#fff; }
table.do-tot td.nm, table.do-tot th.nm{ text-align:center; font-weight:700; min-width:380px; }
table.do-tot td.c{ text-align:center; } table.do-tot td.m{ text-align:right; font-weight:700; }
table.do-tot td.none{ text-align:center; color:#8a93a3; height:40px; }
/* ② 식단가별 납품내역 */
table.do-det{ table-layout:fixed; }
table.do-det th.sub{ white-space:nowrap; }
table.do-det col.dt{ width:84px; } table.do-det col.cs{ width:64px; } table.do-det col.fp{ width:56px; }
table.do-det col.sn{ width:280px; } table.do-det col.pn{ width:44px; }
table.do-det th, table.do-det td{ border:1px solid #6b7685; padding:2px 6px; height:20px; }
table.do-det tbody.hd th, table.do-det tbody.hd td{ background:#bdd7ee; font-weight:800; text-align:center; }
table.do-det tbody.hd td.pr{ font-weight:600; font-size:11px; line-height:1.45; vertical-align:top; white-space:normal; }
table.do-det tbody.hd th.sub{ font-weight:700; }
table.do-det tbody.hd tr:first-child th{ border-top:3px double #1e3a5f; }
table.do-det tbody.bd td{ border-top-style:dotted; border-bottom-style:dotted; font-weight:700; white-space:nowrap; }
table.do-det tbody.bd tr.brk td{ border-top:1px solid #333; }
table.do-det td.c{ text-align:center; } table.do-det td.m{ text-align:right; }
table.do-det td.sn{ text-align:center; }
table.do-det td.sn.al{ color:#1a35c8; }
.do-none{ padding:20px; color:#8a93a3; font-weight:700; }
/* 글자 규칙 : 디비 자료 = 파란 글씨(보통), 타이틀(머리줄 · 항목명) = 굵은 글씨 */
.do-page{ --do-db:#1a3fc8; }
table.do-cap td, table.do-tot td, table.do-det tbody.bd td, table.do-det tbody.hd td.pr{ color:var(--do-db); font-weight:400; }
table.do-tot td.nm{ font-weight:400; }
table.do-tot td.m, table.do-det tbody.bd td.m{ font-weight:400; }
table.do-tot td.fx{ color:#111; }                                   /* 여유분 [  ] : 고정 글자 */
table.do-tot td, table.do-tot td.nm, table.do-tot td.m{ font-weight:700; }   /* 당일 총합계 수량 내역 : 굵게 (파란 글씨 유지) */
table.do-tot td.none{ font-weight:700; }
table.do-tot td.none{ color:#8a93a3; }
table.do-cap td.dt{ color:var(--do-db); font-weight:600; }        /* 조회일자 (2행 병합, 1.5배) */
table.do-cap th, table.do-tot th, table.do-det th, .do-title{ font-weight:800; color:#111; }
table.do-det tbody.hd th.dv{ font-weight:800; }
table.do-det tbody.hd td.pr{ font-weight:700; }                    /* 항목별 품목 리스트 : 굵게 (파란 글씨 유지) */
table.do-det td.sn.al{ color:var(--do-db); }
table.do-det td.sn .alg{ color:#d32f2f; }                          /* 알러지 표시 (빨간 글씨) */
.do-asof{ color:#111; }

/* ===================== 인센티브지급 관리 (js/views/incentive.js) ===================== */
.ic-bar .pr-qc input, .ic-bar .pr-qc select{ border:0; height:26px; padding:0 4px; font-size:12px; background:#fff; text-align-last:center; }
.ic-bar .pr-qc input:focus, .ic-bar .pr-qc select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.ic-q-ym input{ width:120px; cursor:pointer; } .ic-q-c1 select, .ic-q-c2 select{ width:150px; background:#dde8f5 !important; } .ic-q-mgr select{ width:160px; }
.ic-acts{ display:flex; align-items:center; justify-content:flex-end; gap:6px; padding-right:2px; }
.ic-acts .ic-edit{ width:16px; height:16px; margin:0 2px 0 0; accent-color:var(--accent); cursor:pointer; }
.ic-acts .ic-edit:disabled{ cursor:not-allowed; }
table.ic-btbl td.acts{ vertical-align:middle; }
.ic-btn{ height:30px; padding:0 14px; border-radius:6px; border:1px solid var(--btn-bd); background:var(--btn-bg); color:var(--btn-tx); font-weight:800; font-size:12.5px; }
.ic-btn:hover:not(:disabled){ background:var(--btn-bg-hv); }
.ic-btn.save{ background:var(--accent); border-color:var(--accent); color:#fff; }
.ic-btn.save:hover:not(:disabled){ filter:brightness(1.08); background:var(--accent); }
.ic-btn.del{ color:#c0392b; border-color:#e7b6b0; background:#fff5f4; }
.ic-btn:disabled{ opacity:.45; cursor:not-allowed; }
.ic-wrap{ flex:1 1 auto; min-height:0; overflow:auto; padding:4px 2px 12px; }
.ic-sec{ margin-top:8px; }
.ic-sec-h{ display:flex; align-items:center; gap:10px; margin:2px 0 5px; }
.ic-sec-h .t{ font-size:14px; font-weight:800; padding-left:8px; border-left:3px solid #333; line-height:1.1; }
.ic-tbl{ font-size:11px; color:#5b6573; padding:1px 8px; border:1px solid #c9d3e0; border-radius:10px; background:#f4f7fb; }
.ic-tbl b{ color:var(--accent); font-family:Consolas,monospace; }
.ic-st{ font-size:11px; color:#8a93a3; } .ic-st.ok{ color:#1e7d4f; }
.ic-key{ font-size:11px; font-weight:700; color:#1a3fc8; }
/* 기본정보 입력 */
.ic-base{ display:inline-block; padding:8px 10px 10px; border:2px solid #d0342c; border-radius:3px; }
table.ic-btbl{ border-collapse:collapse; table-layout:fixed; width:1016px; font-size:12.5px; }
table.ic-btbl col.a{ width:80px; } table.ic-btbl col.b{ width:78px; } table.ic-btbl col.c{ width:56px; } table.ic-btbl col.d{ width:66px; } table.ic-btbl col.e{ width:78px; }
table.ic-btbl col.f{ width:110px; } table.ic-btbl col.g{ width:110px; } table.ic-btbl col.h{ width:110px; } table.ic-btbl col.i{ width:83px; }   /* 전기 · 창고 · 기타 넓게, 합계 1/3 넓게 */
table.ic-btbl col.j{ width:44px; } table.ic-btbl col.k{ width:68px; } table.ic-btbl col.l{ width:133px; }
table.ic-btbl th{ font-weight:800; padding:2px; height:22px; border-bottom:1px solid #333; }
table.ic-btbl th.iss{ color:#1a3fc8; border:1px solid #333; line-height:1.3; }
table.ic-btbl td{ border:1px solid #333; height:22px; padding:0 4px; white-space:nowrap; }
table.ic-btbl td.nb{ border:0; }
table.ic-btbl td.lb{ text-align:center; }
table.ic-btbl td.gy{ background:#d9d9d9; }
table.ic-btbl td.m{ text-align:right; } table.ic-btbl td.c{ text-align:center; }
table.ic-btbl td.in{ padding:0; position:relative; }
table.ic-btbl td.in input{ width:100%; height:21px; border:0; padding:0 4px; text-align:right; font-size:12.5px; background:transparent; }
table.ic-btbl td.in input.rt{ padding-right:16px; }
table.ic-btbl td.in i{ position:absolute; right:4px; top:3px; font-style:normal; }
table.ic-btbl td.in input:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); background:#fff; }
table.ic-btbl td.in input:disabled{ background:transparent; }
table.ic-btbl td.iss-l{ text-align:center; color:#1a3fc8; font-weight:800; }
table.ic-btbl td.iss-v input{ color:#d0342c; font-weight:800; }
table.ic-btbl td.iss-v i{ color:#d0342c; font-weight:800; }
table.ic-btbl td.warn{ color:#d0342c; font-weight:800; padding-left:6px; }
table.ic-btbl td.dep-l{ color:#d0342c; font-weight:800; text-align:center; border-bottom:0; }
table.ic-btbl td.dep{ color:#d0342c; font-size:20px; font-weight:900; text-align:center; border-top:0; }
table.ic-btbl td.sm-h{ text-align:center; font-weight:800; border-bottom:0; } table.ic-btbl td.sm-h.bl{ color:#1a3fc8; }
table.ic-btbl td.sales{ text-align:center; color:#1a3fc8; font-weight:800; font-size:13.5px; border-top:0; }
/* 인센티브지급 내역 */
.ic-gw{ overflow-x:auto; }
table.ic-grid{ border-collapse:collapse; font-size:8pt; white-space:nowrap; table-layout:fixed; }   /* 그리드 글자 크기 8 · 열폭 = colgroup (컬럼저장) */
table.ic-grid td{ overflow:hidden; text-overflow:ellipsis; }
table.ic-grid td.in input{ box-sizing:border-box; width:100% !important; }   /* 입력칸은 열폭에 맞춰 */
table.ic-grid th{ background:#2f5597; color:#fff; font-weight:700; padding:3px 6px; border:1px solid #fff; line-height:1.25; }
table.ic-grid th.w{ background:#fff; color:#111; border:1px solid #c9ced6; }
table.ic-grid th.b{ background:#1f3e7a; }
table.ic-grid th.bill{ background:#2f5597; min-width:180px; }
table.ic-grid th.g{ background:#d9d9d9; color:#111; border:1px solid #fff; }
table.ic-grid td{ padding:1px 6px; height:20px; border-bottom:1px dotted #b8bfca; }
table.ic-grid td.c{ text-align:center; } table.ic-grid td.m{ text-align:right; font-variant-numeric:tabular-nums; }
table.ic-grid td.none{ height:60px; text-align:center; color:#8a93a3; font-weight:700; }
table.ic-grid td.in{ padding:0; position:relative; background:#fffde8; }
table.ic-grid td.in.b{ background:#eef3fb; }
table.ic-grid td.in input{ width:74px; height:19px; border:0; padding:0 14px 0 4px; text-align:right; font-size:8pt; background:transparent; }
table.ic-grid td.in.bill input{ width:200px; padding-right:4px; text-align:left; }
table.ic-grid td.in i{ position:absolute; right:4px; top:3px; font-style:normal; color:#666; }
table.ic-grid td.in input:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); background:#fff; }
table.ic-grid td.ng, table.ic-grid .ng{ color:#d0342c; } table.ic-grid td.in.ng{ box-shadow:inset 0 0 0 1px #d0342c; }
table.ic-grid tr.sub td{ font-weight:800; border-top:1px solid #333; border-bottom:3px double #333; }
table.ic-grid tr.sub td.tot{ color:#1a3fc8; }
table.ic-grid tr.sub td.set{ font-size:8pt; }

/* ===================== 주간집계표 (js/views/weekly.js) ===================== */
/* 제목 옆 지역 옵션 : 전체 · 수도권 · 지방 */
.wk-region{ display:flex; align-items:center; gap:14px; margin-left:16px; padding:3px 10px; border:2px solid var(--accent); border-radius:4px; }
.wk-region label{ display:flex; align-items:center; gap:4px; font-size:13px; font-weight:700; cursor:pointer; }
.wk-region input{ margin:0; accent-color:var(--accent); cursor:pointer; }
.wk-region label.off{ color:#a0a7b1; cursor:not-allowed; } .wk-region label.off input{ cursor:not-allowed; }
.wk-bar .pr-qc input{ border:0; height:26px; padding:0 4px; font-size:12px; background:#fff; color:#1a3fc8; font-weight:700; text-align:center; width:130px; cursor:pointer; }
.wk-bar .pr-qc input:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.wk-term2{ display:flex; gap:1px; background:var(--line); }
.wk-bar .wk-q-food select{ width:80px; height:26px; border:0; padding:0 4px; font-size:12px; background:#fff; color:#111; font-weight:700; text-align-last:center; cursor:pointer; }
.wk-bar .wk-q-food select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
.wk-wrap{ flex:1 1 auto; min-height:0; overflow:auto; background:#e9edf3; border:1px solid var(--line); padding:14px; }
.wk-page{ --wk-db:#1a3fc8; display:inline-block; background:#fff; padding:14px 16px 18px; box-shadow:0 2px 10px rgba(15,23,42,.15); color:#111; font-size:12px; }   /* 왼쪽 정렬 */
.wk-headline{ position:relative; width:912px; height:40px; margin-bottom:4px; }
.wk-title{ text-align:center; font-size:24px; font-weight:900; letter-spacing:6px; line-height:34px; }
.wk-asof{ position:absolute; right:0; bottom:2px; font-size:12px; }
/* 열폭 (엑셀 B ~ I) */
table.wk-tbl{ width:912px; table-layout:fixed; border-collapse:collapse; }
table.wk-tbl col.b{ width:75px; } table.wk-tbl col.c{ width:67px; } table.wk-tbl col.d{ width:410px; } table.wk-tbl col.e{ width:105px; }
table.wk-tbl col.f{ width:45px; } table.wk-tbl col.g{ width:43px; } table.wk-tbl col.h{ width:78px; } table.wk-tbl col.i{ width:89px; }
table.wk-tbl th, table.wk-tbl td{ height:18px; padding:1px 4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
table.wk-tbl td.c{ text-align:center; }
table.wk-tbl td.sm{ font-size:9.5px; }
table.wk-tbl td.none{ height:46px; text-align:center; color:#8a93a3; font-weight:700; }
/* 머리 : 조회기간 · 식단가 · 단위 · 항목 · 상호 */
table.wk-tbl tbody.cap th{ border:1px solid #333; background:#d9d9d9; font-weight:800; }
table.wk-tbl tbody.cap td{ border:1px solid #333; text-align:center; }
table.wk-tbl tbody.cap td.db{ color:var(--wk-db); font-weight:700; padding:0; letter-spacing:-.3px; }
table.wk-tbl tbody.tot td:last-child{ white-space:normal; line-height:1.35; }   /* 요일별 수량 : 여러 날이면 날 단위로 줄바꿈 */
table.wk-tbl tbody.tot td .dy{ white-space:nowrap; }
table.wk-tbl tbody.cap td.blank{ border-bottom:0; }
table.wk-tbl tbody.cap td.in{ padding:0; }
table.wk-tbl tbody.cap td.in select{ width:100%; height:20px; border:0; background:#fff; color:#c55a11; font-size:12px; text-align-last:center; cursor:pointer; }
table.wk-tbl tbody.cap td.in select:focus{ outline:none; box-shadow:inset 0 0 0 2px var(--accent); }
table.wk-tbl tbody.cap td.in span{ color:#c55a11; }
/* ① 주간 총 합계 수량 */
table.wk-tbl tbody.tot th, table.wk-tbl tbody.tot td{ border:1px solid #333; font-weight:800; }
table.wk-tbl tbody.tot td{ border-top-style:dotted; border-bottom-style:dotted; color:var(--wk-db); font-weight:700; }
table.wk-tbl tbody.tot tr.th th{ border-bottom-style:dotted; }
table.wk-tbl tbody.tot th.lb{ font-size:11px; line-height:1.4; white-space:normal; }
table.wk-tbl tbody.tot tr:last-child td{ border-bottom:1px solid #333; }
/* ② 날짜별 상품 내역 */
table.wk-tbl tbody.det tr.dh th{ height:40px; background:#bdd7ee; font-weight:800; border-top:1px solid #333; }
table.wk-tbl tbody.det td{ border-left:0; border-right:0; border-bottom:1px dotted #999; color:var(--wk-db); font-weight:700; }
table.wk-tbl tbody.det td:nth-child(7){ border-left:1px solid #333; }
table.wk-tbl tbody.det tr.brk td{ border-top:1px solid #333; }
table.wk-tbl tbody.det tr.sum td{ border-top:3px double #333; border-bottom:1px solid #333; color:#111; font-weight:800; }
table.wk-tbl tbody.det tr.sum td:last-child{ color:var(--wk-db); }

/* 상품 선택 팝업 (ADD_PRODUCT) */
.modal.mr-pop{ width:720px; }
.modal.mr-pop .modal-h{ position:relative; padding:10px 44px 10px 16px; }
.modal.mr-pop .modal-b{ padding:10px 16px; }
.mr-x{ position:absolute; top:7px; right:10px; width:28px; height:28px; border:0; border-radius:50%; background:#eef1f5; cursor:pointer; font-size:14px; }
.mr-x:hover{ background:#dfe4ea; }
.mr-p-q{ display:flex; align-items:flex-end; gap:8px; margin-bottom:8px; }
.mr-p-q label{ display:flex; flex-direction:column; gap:3px; font-size:12px; font-weight:800; }
.mr-p-q input{ width:130px; height:28px; padding:0 6px; border:1px solid #b8bec8; border-radius:3px; font-size:12px; }
.mr-p-q input:focus{ outline:none; border-color:var(--accent); box-shadow:0 0 0 2px var(--accent-soft); }
.mr-p-q .q-go{ height:28px; padding:0 18px; }
.mr-p-q p{ margin:0 0 0 8px; color:#d32f2f; font-size:12px; font-weight:700; line-height:1.35; }
.mr-p-list{ border:1px solid #b8bec8; overflow:auto; background:#fff; }
.mr-p-prod{ height:240px; }
.mr-p-list table, .mr-p-del table{ width:100%; border-collapse:collapse; table-layout:fixed; font-size:12px; }
.mr-p-list th{ position:sticky; top:0; background:#eef1f5; padding:4px 6px; text-align:left; font-weight:800; border-bottom:1px solid #b8bec8; }
.mr-p-list th:nth-child(1), .mr-p-list td:nth-child(1), .mr-p-del td:nth-child(1){ width:110px; }
.mr-p-list th:nth-child(3), .mr-p-list td:nth-child(3), .mr-p-del td:nth-child(3),
.mr-p-list th:nth-child(4), .mr-p-list td:nth-child(4), .mr-p-del td:nth-child(4){ width:96px; }
.mr-p-list td, .mr-p-del td{ padding:3px 6px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mr-p-list td.m, .mr-p-del td.m{ text-align:right; }
.mr-p-prod tbody tr, .mr-p-sel tbody tr{ cursor:pointer; }
.mr-p-prod tbody tr:hover td, .mr-p-sel tbody tr:hover td{ background:#e8f0fb; }
.mr-p-empty{ color:#8a93a3; text-align:center !important; cursor:default; }
.mr-p-cap{ margin-top:10px; padding:4px; border:1px solid #c9a227; border-bottom:0; background:#ffff00; text-align:center; font-weight:800; font-size:13px; }
.mr-p-cap i{ font-style:normal; font-weight:600; font-size:11px; color:#6b5a00; }
.mr-p-sel{ height:104px; background:#ffffe0; border-color:#c9a227; }
.mr-p-sel td em{ font-style:normal; color:#c62828; font-size:11px; }
.mr-p-del{ margin-top:8px; max-height:90px; overflow:auto; border:1px solid #e6a9a4; background:#fdecea; }
.mr-p-del tr.gone td{ color:#9a4b45; text-decoration:line-through; }
.mr-p-msg{ margin-top:6px; min-height:18px; }
.mr-p-save{ height:34px; padding:0 34px; border:0; border-radius:3px; background:#c00000; color:#fff; font-size:13px; font-weight:800; cursor:pointer; }
.mr-p-save:hover:not(:disabled){ background:#a00000; }
.mr-p-save:disabled{ opacity:.45; cursor:not-allowed; }
.pr-panel .ap-row > span{ flex-basis:96px; }
.pr-pick{ flex:0 0 auto; height:24px; padding:0 8px; }
.pr-allergy{
  position:fixed; z-index:9100; width:300px; background:#fff; border:1px solid #9fb3cc; border-radius:8px;
  box-shadow:0 12px 30px rgba(15,23,42,.28); padding:8px 10px;
}
.pr-al-h{ font-weight:800; color:#1e3a5f; margin-bottom:6px; }
.pr-al-list{ display:grid; grid-template-columns:1fr 1fr; gap:3px 8px; }
.pr-al-list label{ display:flex; align-items:center; gap:4px; font-size:12px; cursor:pointer; }
.pr-al-f{ display:flex; gap:6px; margin-top:8px; }

/* ===================== 견적서 조회 (estimate.js) 보완 2026-10-27 : 열변경 · 좌측 접기 · 그룹납품처 ===================== */
.es-list.es-main table{ table-layout:fixed; }
.es-list.es-main th:nth-child(n){ width:auto !important; }           /* 열폭은 colgroup (저장된 열폭) 으로 */
.es-doc table.es-items.es-cw{ width:100% !important; }                /* 열폭을 바꿔도 견적서 폭은 그대로 (품명 칸이 남는 폭) */
.es-doc table.es-items.es-cw th:nth-child(n){ width:auto; }
.es-foldbar{ flex:0 0 12px; position:relative; margin:0 -4px; }      /* 버튼 자리만 (세로 막대 없음) */
.es-fold{                                                              /* 좌측 메뉴 접기 버튼(.split-btn)과 같은 모양 */
  position:absolute; top:8px; left:50%; transform:translateX(-50%);
  width:20px; height:34px; padding:0; border:1px solid #b9c0c9; border-radius:4px;
  background:#fff; color:#48505b; font-size:11px; line-height:1; box-shadow:0 1px 3px rgba(20,30,50,.14);
  display:flex; align-items:center; justify-content:center; z-index:5; cursor:pointer;
}
.es-fold:hover{ background:var(--accent); border-color:var(--accent); color:#fff; }
/* 열변경 체크 ON : 목록과 견적서 사이가 Splitter bar (좌측 메뉴 스플릿바와 같은 모양) */
.es-foldbar.split{ flex:0 0 9px; margin:0; background:#e6e9ee; border-left:1px solid #cdd3db; border-right:1px solid #cdd3db; cursor:col-resize; touch-action:none; }
.es-foldbar.split::before{ content:''; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); width:3px; height:36px;
  border-left:1px dotted #8a93a3; border-right:1px dotted #8a93a3; }
.es-foldbar.split:hover, .es-foldbar.split.drag{ background:var(--accent-soft); }
.es-view .es-bar{ flex-wrap:wrap; row-gap:4px; }
.es-members{ flex:0 0 100%; color:#e00; font-size:13px; font-weight:700; white-space:normal; word-break:keep-all; line-height:1.5; }   /* 조회줄 아래 행에 전체 표시 */
.es-members:empty{ display:none; }
.es-members .es-amt{ color:#1e3a5f; margin-right:18px; white-space:nowrap; } .es-members .es-amt b{ color:#111; }
.es-members .es-mem{ color:#e00; }

/* ===================== DB 환경설정 › 디비마이그레이션 (app.js openMigrate · dymigrate.py) ===================== */
.modal.dbcfg .modal-h{ display:flex; align-items:baseline; }
.modal-h .mig-btn{ margin-left:auto; padding:2px 6px; border:2px solid #e00; border-radius:2px; background:#fff; color:#e00;
  font-size:13px; font-weight:700; cursor:pointer; }
.modal-h .mig-btn:hover{ background:#fdecea; }
.modal.mig{ width:620px; }
.mig-warn{ margin-bottom:12px; padding:8px 10px; border:1px solid #f0b4ae; border-radius:5px; background:#fff6f5; color:#b3261e; font-size:12px; line-height:1.6; }
.modal.mig .modal-f-row input[type=file]{ height:auto; padding:6px 8px; }
.modal.mig .modal-f-row em{ font-style:normal; font-size:11px; color:var(--muted); }
.mig-note{ margin:-2px 0 8px 102px; font-size:11px; color:var(--muted); }
/* 디비마이그레이션 진행 막대 : 행 수를 알면 % 막대, 단계만 알면 흐르는 막대(.flow) */
.mig-prog{ margin:-4px 0 10px; }
.mig-prog[hidden]{ display:none; }
.mig-bar{ position:relative; height:14px; border-radius:7px; background:#e3e8ef; overflow:hidden; }
.mig-bar i{ display:block; height:100%; width:0; border-radius:7px; background:linear-gradient(90deg,#0f7a6c,#26a69a); transition:width .4s ease; }
.mig-bar.flow i{ background:repeating-linear-gradient(-45deg,#26a69a 0 10px,#7fd3c9 10px 20px); background-size:28px 28px; animation:migFlow .8s linear infinite; }
@keyframes migFlow{ from{ background-position:0 0; } to{ background-position:28px 0; } }
.mig-ptxt{ display:flex; gap:8px; margin-top:4px; font-size:12px; color:#43506a; }
.mig-pct{ min-width:34px; font-weight:800; color:#0f7a6c; }
.mig-pinfo{ flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.mig-res{ max-height:260px; overflow:auto; }
.mig-res table{ width:100%; border-collapse:collapse; font-size:12px; }
.mig-res th{ position:sticky; top:0; background:#2f5597; color:#fff; padding:3px 6px; }
.mig-res td{ padding:2px 6px; border-bottom:1px dotted #c3cbd8; }
.mig-res td.m{ text-align:right; font-variant-numeric:tabular-nums; } .mig-res td.ok{ color:#1b7a3d; text-align:center; } .mig-res td.ng{ color:#b3261e; font-weight:700; }
/* [MariaDB로...] 체크 : 디비마이그레이션 대상을 아래 DB 정보(MariaDB)로 · 체크하면 DB 정보 칸을 빨간 테두리로 표시 */
.modal-h .mig-to{ margin-left:auto; margin-right:8px; display:inline-flex; align-items:center; gap:4px; font-size:12px; font-weight:700; color:#48505b; cursor:pointer; }
.modal-h .mig-to input{ width:16px; height:16px; accent-color:#e00; cursor:pointer; }
.modal-h .mig-to + .mig-btn{ margin-left:0; }
.dbinfo{ border:2px solid transparent; border-radius:4px; padding:4px 6px 0; margin:-6px -8px 4px; }
.dbinfo.mig-on{ border-color:#e00; background:#fffafa; }
/* 예상청구금액 [☐ 구-로직적용] (조회 버튼 옆) */
.ec-old{ align-self:center; display:inline-flex; align-items:center; gap:5px; margin-left:10px; color:#e00; font-size:13px; font-weight:700; cursor:pointer; white-space:nowrap; }
.ec-old input{ width:16px; height:16px; margin:0; accent-color:#e00; cursor:pointer; }
/* 견적서조회 납품처명 : 입력도 되는 콤보 (input + datalist) */
.es-bar .es-q-name input.es-name{ width:210px; text-align:center; }
/* 예상청구금액 [☐ 항목상세내역] : 합계칸 옆 체크 · 오른쪽 = 위 목록 + 아래 상세내역 */
.ec-sumrow{ display:flex; align-items:flex-end; gap:6px; flex:none; }
.ec-sumrow .ec-sum{ margin-bottom:8px; }
.ec-sumrow .ec-det{ margin:0 0 10px 6px; }
.ec-right{ flex:1 1 auto; min-width:0; min-height:0; display:flex; flex-direction:column; gap:0; }
.ec-right > .ec-grid{ flex:1 1 55%; min-height:120px; }
.ec-detail{ flex:1 1 45%; min-height:140px; display:flex; flex-direction:column; padding-top:2px; }
.ec-det-h{ color:#e00; font-size:13px; font-weight:700; margin:2px 0 4px; display:flex; gap:12px; align-items:baseline; flex-wrap:wrap; }
.ec-det-h b{ color:#111; } .ec-det-s{ color:#48505b; font-weight:600; font-size:12px; }
.ec-det-grid{ flex:1 1 auto; min-height:0; overflow:auto; align-self:stretch; max-width:100%; }
table.grid.ec-dt{ width:100%; min-width:1060px; table-layout:fixed; }   /* 우측까지 꽉 차게 (품명 칸이 남는 폭) */   /* 품목 · 단가 + 공급가 ~ 금액계 */
table.grid.ec-dt td.amt{ background:#f8fafc; } table.grid.ec-dt td.amt.tot{ font-weight:700; }
table.grid.ec-dt td{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
table.grid.ec-dt tr.d1 td{ border-top:1px solid #9aa3af; }
table.grid.ec-dt tr.zero td{ color:#a0a7b1; }
table.grid.ec-dt td.tx{ color:#1a56b8; } table.grid.ec-dt td.fr{ color:#1b7a3d; }
table.grid.ec-dt td.none{ text-align:center; color:#8a93a3; }
table.grid.ec-dt tfoot td{ position:sticky; bottom:0; background:#fff3c4; font-weight:800; border-top:2px solid #555; }

/* 예상청구금액 : 위 목록 ↔ 항목상세내역 Splitter bar (컬럼변경 체크 ON 일 때만 끌기) */
.ec-hsplit{ flex:0 0 8px; margin:2px 0; border-radius:2px; }
.ec-hsplit.on{ background:#e6e9ee; border-top:1px solid #cdd3db; border-bottom:1px solid #cdd3db; cursor:row-resize; touch-action:none; position:relative; }
.ec-hsplit.on::before{ content:''; position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); width:36px; height:3px; border-top:1px dotted #8a93a3; border-bottom:1px dotted #8a93a3; }
.ec-hsplit.on:hover, .ec-hsplit.drag{ background:var(--accent-soft); }

/* ===================== 모든 화면 공통 (2026-10-27) : 조건 행(조회줄)의 값은 파란색 · 굵게 =====================
   .pr-qc = 화면마다 조회줄 칸 (기준년월 · 시작일 · 납품처명 · 정산 담당자 …) / 데이타검증 조건 · 견적서 좌측 검색도 같게
   머리칸(라벨)은 그대로, 사용할 수 없는(disabled) 칸은 회색 그대로 */
.pr-qc input:not(:disabled), .pr-qc select:not(:disabled),
.vf-cond input:not(:disabled), .vf-cond select:not(:disabled),
.ed-find input:not(:disabled), .ed-find select:not(:disabled),
.do-find input:not(:disabled), .kp-bar > select, .kp-bar > input.kp-q{
  color:#1a35c8 !important; font-weight:700 !important;
}
.pr-qc select:not(:disabled) option{ color:#1a35c8; font-weight:700; }
/* 2026-10-27 추가 : 머리칸(라벨)도 파란색 · 굵게, 머리칸 · 값 모두 글자를 조금 크게 (12px → 14px) */
.pr-qc > span, .vf-cond th, .vf-cond .lab{ color:#1a35c8 !important; font-weight:800 !important; font-size:14px !important; }
.pr-qc input, .pr-qc select, .vf-cond input, .vf-cond select,
.ed-find input, .ed-find select, .do-find input, .kp-bar > select, .kp-bar > input.kp-q{ font-size:14px !important; }
.pr-qc input, .pr-qc select{ height:28px !important; }
.pr-qc input::placeholder, .vf-cond input::placeholder, .ed-find input::placeholder, .do-find input::placeholder{ color:#9aa3af; font-weight:400; }

/* ===================== 모든 화면 공통 (2026-10-27) : 제목줄 맨 우측 [화면 배율 − 100% + 초기화] [☐] [컬럼저장] ===================== */
.dy-coltools.auto{ margin-left:auto; }
.dy-zoom{ display:inline-flex; align-items:center; gap:3px; margin-left:14px; }   /* 상단 맨 우측 (topbar) · 사각 테두리 없음 */
.dy-zoom[hidden]{ display:none; }
.dy-zoom .lab{ font-size:12px; font-weight:700; color:#48505b; margin-right:3px; white-space:nowrap; }
.dy-zoom .z-btn, .dy-zoom .z-reset{ height:24px; min-width:24px; padding:0 6px; border:1px solid #c9ced6; border-radius:3px; background:#fff; color:#333; font-size:13px; font-weight:700; cursor:pointer; line-height:1; }
.dy-zoom .z-reset{ font-size:12px; font-weight:600; }
.dy-zoom .z-btn:hover, .dy-zoom .z-reset:hover{ border-color:var(--accent); color:var(--accent); background:var(--accent-soft); }
.dy-zoom .dy-zoom-v{ min-width:52px; height:24px; line-height:22px; text-align:center; border:1px solid #c9ced6; border-radius:3px; background:#fff; font-size:13px; font-weight:800; color:#1a35c8; }
/* 상단(topbar) 맨 우측 : DB 상태 + 화면 배율을 한 줄로 */
.topbar-right{ display:flex; align-items:center; flex-wrap:nowrap; white-space:nowrap; }
.topbar .dy-zoom .z-btn, .topbar .dy-zoom .z-reset, .topbar .dy-zoom .dy-zoom-v{ height:24px; }

/* 2026-10-27 : 계정정보(및 같은 틀 화면) 제목줄 구분(전체 · 일반 · 관리자)과 조회조건 줄도 조건 행과 같게 — 파란색 · 굵게 · 14px */
.panel-head .radios label, .panel-head .radios label.on{ color:#1a35c8; font-weight:800; font-size:14px; }
.toolbar .field > span{ color:#1a35c8 !important; font-weight:800 !important; font-size:14px !important; }
.toolbar .field select, .toolbar .field input[type=text]{ color:#1a35c8 !important; font-weight:700 !important; font-size:14px !important; height:28px; }
.toolbar .field input[type=text].all{ color:#7d8fd6 !important; }   /* [전체조회] 는 옅은 파랑 */
.panel-head .radios input{ accent-color:#1a35c8; }
/* 실납품수량등록 좌측 그리드 인원수(기준년월 대표인원수) : 파란색 · 굵게 · 옅은 회색 바탕 */
.sr-g1 tbody td:nth-child(3){ color:#1a35c8; font-weight:800; background:#f1f3f6; }   /* 인원수 (대표인원수) */
.sr-g1 tbody tr.sel td:nth-child(3){ background:#fff3c4; }
.sr-g1 tbody tr:hover td:nth-child(3){ background:#eef4fc; }
/* 실납품수량등록 ③ 컵과일 월별회수조회 칸 : 글자 크게 (2026-10-27) */
.sr-card .sr-card-h{ font-size:15px; }
.sr-card .sr-card-n{ font-size:14px; }
.sr-card .sr-card-p input{ font-size:13px; }
/* 기간 칸 : 달력 아이콘을 숨겨 글자(2026년 10월)가 잘리지 않게 — 칸을 누르면 달력이 열림 (shipReg.js showPicker) */
.sr-card .sr-card-p input::-webkit-calendar-picker-indicator{ display:none; }
.sr-card .sr-card-p input{ padding:0 2px; text-align:center; }
