/* 피더 함대 대시보드 (2026-07-31) — 현장/사무실 공용, 모바일 대응 */
* { box-sizing: border-box; }

/*
   HTML hidden 속성 보장 (2026-07-31 사용자 보고 봉합):
   hidden은 UA 스타일시트의 display:none일 뿐이라, 아래 .modal{display:flex}
   같은 작성자 규칙이 우선순위에서 이겨 버린다 → 빈 모달이 늘 떠 있고
   closeDetail()이 hidden=true로 바꿔도 닫히지 않았다.
*/
[hidden] { display: none !important; }
body {
  margin: 0; padding: 0 0 40px;
  font-family: "Malgun Gothic", -apple-system, "Segoe UI", sans-serif;
  color: #222; background: #f4f6f8;
}
h1 { margin: 0; font-size: 19px; line-height: 20px; }
.brand { display: flex; align-items: center; }
.brand img { display: block; height: auto; object-fit: contain; }

/* 로그인 */
.login { max-width: 340px; margin: 12vh auto; background: #fff; padding: 28px 26px;
         border-radius: 10px; box-shadow: 0 2px 12px rgba(0,0,0,.08); }
.login-brand { gap: 12px; margin-bottom: 18px; }
.login-brand img { width: 20px; }
.login-brand h1 { color: #005EB8; white-space: nowrap; }
.login input { width: 100%; padding: 11px 12px; margin-bottom: 10px; font-size: 15px;
               border: 1px solid #ccd0d4; border-radius: 6px; }
.login button { width: 100%; padding: 11px; font-size: 15px; font-weight: bold; color: #fff;
                background: #005EB8; border: 0; border-radius: 6px; cursor: pointer; }
.login button:hover { background: #004a94; }
.err { color: #c00; font-size: 13px; margin: 10px 0 0; }
.hint { color: #666; font-size: 12px; line-height: 1.6; margin: 14px 0 0; }
.hint code { background: #f1f1f1; padding: 1px 4px; border-radius: 3px; }
.verify-copy {
  margin: 0 0 14px; color: #56616b; font-size: 13px;
  line-height: 1.6; text-align: center;
}
.verify-copy strong { color: #005EB8; }
#verificationCode {
  text-align: center; letter-spacing: .28em; font-size: 18px;
  font-weight: 700; font-variant-numeric: tabular-nums;
}
.verify-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 9px; }
.login .verify-actions button {
  padding: 8px 6px; border: 1px solid #bdc9d3;
  background: #fff; color: #52606c; font-size: 12px;
}
.login .verify-actions button:hover { background: #eef3f8; }
.verify-hint { margin: 12px 0 0; color: #7d8790; font-size: 11px; line-height: 1.5; text-align: center; }

/* 상단 */
.top { display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
       justify-content: space-between; padding: 14px 18px; background: #005EB8; color: #fff; }
.top-brand { gap: 10px; }
.top-brand img {
  width: 20px;
}
.top-brand h1 { white-space: nowrap; }
.top .meta { display: flex; align-items: center; gap: 12px; font-size: 13px; }
.top button { padding: 6px 12px; font-size: 13px; border: 1px solid rgba(255,255,255,.5);
              background: transparent; color: #fff; border-radius: 5px; cursor: pointer; }
.top button:hover { background: rgba(255,255,255,.15); }
.top .logout { color: #d6e6f5; font-size: 13px; text-decoration: none; }
.top .settings-button {
  width: 31px; height: 29px; padding: 0; border-radius: 50%;
  font-size: 17px; line-height: 1;
}
.top .top-icon-button, .top .top-icon-link {
  display: inline-flex; width: 31px; height: 29px; flex: 0 0 31px; align-items: center;
  justify-content: center; padding: 0; border: 1px solid rgba(255,255,255,.5);
  border-radius: 50%; color: #fff; line-height: 1;
}
.top .top-icon-button svg, .top .top-icon-link svg {
  width: 16px; height: 16px; fill: none; stroke: currentColor;
  stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round;
}
.top .top-icon-link:hover { background: rgba(255,255,255,.15); }
.top .top-icon-button.is-active { background: #fff; color: #005EB8; }
.top .top-add-button { padding-bottom: 2px; font-size: 22px; font-weight: 400; }
.top .top-admin-start { margin-left: 5px; }
.notification-center { position: relative; flex: 0 0 auto; }
.top .notification-button { position: relative; font-size: 17px; font-weight: 900; }
.top .notification-button.has-alerts { border-color: #ffd276; background: rgba(255,187,55,.18); color: #fff4c9; }
.notification-badge { position: absolute; top: -7px; right: -8px; z-index: 2; min-width: 18px; height: 18px;
  padding: 0 5px; border: 2px solid #005EB8; border-radius: 10px; background: #d92d2d; color: #fff;
  font-size: 9px; font-weight: 800; line-height: 14px; text-align: center; pointer-events: none; }
.notification-dropdown { position: absolute; top: calc(100% + 11px); right: 0; z-index: 90;
  width: min(390px, calc(100vw - 24px)); overflow: hidden; border: 1px solid #bfcdd7;
  border-radius: 10px; background: #fff; color: #253744; box-shadow: 0 12px 34px rgba(22,45,61,.25); }
.notification-dropdown::before { content: ''; position: absolute; top: -7px; right: 12px; width: 12px;
  height: 12px; transform: rotate(45deg); border-left: 1px solid #bfcdd7;
  border-top: 1px solid #bfcdd7; background: #f3f7fa; }
.notification-head { position: relative; display: flex; align-items: flex-start; justify-content: space-between;
  gap: 12px; padding: 13px 13px 11px; border-bottom: 1px solid #dbe4ea; background: #f3f7fa; }
.notification-title-group { display: flex; min-width: 0; align-items: center; gap: 9px; }
.notification-bot-icon { display: inline-flex; width: 31px; height: 31px; flex: 0 0 31px;
  align-items: center; justify-content: center; border: 1px solid #b9d2e2; border-radius: 50%;
  margin-top: 0; background: #e5f2fa; color: #126b9e; }
.notification-bot-icon svg { width: 20px; height: 20px; fill: none; stroke: currentColor;
  display: block; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.notification-head h2 { margin: 0; color: #29485d; font-size: 14px; }
.notification-title-group > div > span { display: block; margin-top: 3px; color: #788691; font-size: 10px; }
.notification-head-actions { display: flex; align-items: center; gap: 5px; }
.top .notification-head button { width: 25px; height: 25px; padding: 0; border: 0; color: #657682;
  font-size: 21px; line-height: 24px; }
.top .notification-head .notification-mail-button { display: inline-flex; align-items: center;
  justify-content: center; border: 1px solid #b9cbd8; border-radius: 50%; background: #fff;
  color: #1d6c9e; }
.top .notification-head .notification-clear-button { display: inline-flex; align-items: center;
  justify-content: center; border: 1px solid #d4c6a6; border-radius: 50%; background: #fff;
  color: #9a6915; }
.notification-mail-button svg, .notification-clear-button svg { width: 14px; height: 14px; fill: none; stroke: currentColor;
  stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.top .notification-head .notification-mail-button:hover { border-color: #4d8db8; background: #e7f3fb; }
.top .notification-head .notification-clear-button:hover { border-color: #c18b2a; background: #fff7e7; }
.top .notification-head .notification-mail-button:disabled,
.top .notification-head .notification-clear-button:disabled { opacity: .45; cursor: wait; }
.notification-summary { padding: 8px 12px; border-bottom: 1px solid #e3e9ed; background: #fff;
  color: #687883; font-size: 10.5px; }
.notification-summary strong { color: #b42525; }
.notification-list { max-height: min(520px, calc(100vh - 150px)); overflow-y: auto; }
.notification-empty { margin: 0; padding: 32px 18px; color: #71808a; font-size: 12px; text-align: center; }
.top .notification-item { display: block; width: 100%; padding: 11px 13px; border: 0;
  border-bottom: 1px solid #edf1f3; border-radius: 0; background: #fff; color: #293d4a;
  text-align: left; }
.top .notification-item:last-child { border-bottom: 0; }
.top .notification-item:hover { background: #f5f9fc; }
.notification-item-head { display: flex; align-items: center; gap: 7px; }
.notification-level { flex: 0 0 auto; padding: 2px 6px; border-radius: 9px; color: #fff;
  font-size: 9px; font-weight: 800; }
.notification-level.is-critical { background: #c42f2f; }
.notification-level.is-warning { background: #d08318; }
.notification-item-head strong { min-width: 0; overflow: hidden; color: #203946; font-size: 12px;
  text-overflow: ellipsis; white-space: nowrap; }
.notification-item-head time { margin-left: auto; color: #89959d; font-size: 9.5px; white-space: nowrap; }
.notification-item p { margin: 6px 0 0; color: #546671; font-size: 11px; line-height: 1.45; }
.notification-item small { display: block; margin-top: 5px; overflow: hidden; color: #8a959c;
  font-size: 9.5px; text-overflow: ellipsis; white-space: nowrap; }

/* 메인 현황 요약 */
.overview-panel { margin: 16px 18px 0; overflow: hidden; border: 1px solid #cfdce6;
                  border-radius: 10px; background: #fff; box-shadow: 0 2px 8px rgba(29,66,96,.08); }
.overview-head { display: flex; align-items: center; justify-content: space-between; gap: 14px;
                 padding: 13px 16px; border-bottom: 1px solid #dbe5ec; background: #edf5fb; }
.overview-head h2 { margin: 0 0 3px; color: #24475f; font-size: 16px; }
.overview-scope { color: #6c7b87; font-size: 11.5px; }
.overview-actions { display: flex; align-items: center; gap: 7px; }
.overview-actions button, .overview-filters button { padding: 6px 10px; border: 1px solid #aac1d2;
                                                     border-radius: 5px; background: #fff; color: #36576e;
                                                     font-size: 12px; font-weight: 700; cursor: pointer; }
.overview-actions button:hover, .overview-filters button:hover { background: #e6f1f8; }
.overview-actions .summary-share-button { display: inline-flex; width: 31px; height: 29px;
  align-items: center; justify-content: center; padding: 0; border-radius: 50%; }
.summary-share-button svg { width: 16px; height: 16px; fill: none; stroke: currentColor;
  stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.overview-demo-badge { padding: 3px 8px; border-radius: 10px; background: #fff0c9;
                       color: #8a6100; font-size: 10.5px; font-weight: 800; letter-spacing: .08em; }
.overview-body { padding: 13px 14px 15px; }
.overview-filters { display: grid; grid-template-columns: repeat(5, minmax(120px, 1fr)) auto;
                    gap: 9px; align-items: end; }
.overview-filters label { display: grid; gap: 4px; color: #667581; font-size: 11px; font-weight: 700; }
.overview-filters select, .overview-filters input { width: 100%; min-width: 0; padding: 7px 8px;
                                                    border: 1px solid #c7d3dc; border-radius: 5px;
                                                    background: #fff; color: #273944; font-size: 12.5px; }
.overview-kpis { display: grid; grid-template-columns: repeat(6, minmax(110px, 1fr));
                 gap: 9px; margin-top: 12px; }
.overview-kpi { padding: 10px 11px; border: 1px solid #dee6ec; border-radius: 7px; background: #fafcfd; }
.overview-kpi span { display: block; color: #6d7983; font-size: 11px; }
.overview-kpi strong { display: block; margin-top: 4px; color: #1e4158; font-size: 20px;
                       font-variant-numeric: tabular-nums; }
.overview-kpi small { display: block; min-height: 15px; margin-top: 2px; color: #8a949c; font-size: 10.5px; }
.overview-kpi.is-warn { border-color: #edcf78; background: #fffaf0; }
.overview-kpi.is-danger { border-color: #e3a5a5; background: #fff5f5; }
.overview-charts { display: grid; grid-template-columns: minmax(280px, 1fr) minmax(360px, 1.35fr) minmax(260px, .9fr);
                   gap: 11px; margin-top: 11px; }
.overview-chart-card { min-width: 0; padding: 11px 12px; border: 1px solid #dfe7ed;
                       border-radius: 7px; background: #fff; }
.overview-chart-card h3 { margin: 0 0 10px; color: #435562; font-size: 12.5px; }
.overview-chart-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.overview-chart-title select { padding: 4px 7px; border: 1px solid #cbd6de; border-radius: 5px;
                               color: #425966; font-size: 11px; }
.overview-chart-controls { display: flex; align-items: center; gap: 7px; }
.overview-chart-controls span { color: #82909a; font-size: 9.5px; white-space: nowrap; }
.overview-line-chart { display: grid; grid-template-rows: minmax(0, 1fr) auto; height: 160px; }
.overview-line-rows { display: flex; min-height: 0; overflow-y: auto; flex-direction: column; padding-right: 3px; }
.overview-line-row { display: grid; grid-template-columns: 82px minmax(0, 1fr) 28px;
                     flex: 1 0 26px; gap: 7px; align-items: center; margin: 0; font-size: 10.5px; }
.overview-line-name { overflow: hidden; color: #52636f; text-overflow: ellipsis; white-space: nowrap; }
.overview-line-stack { display: flex; height: 12px; overflow: hidden; border-radius: 6px; background: #edf1f4; }
.overview-line-stack i { display: flex; align-items: center; justify-content: center; min-width: 0;
                         height: 100%; overflow: hidden; color: #263640; font-size: 8.5px;
                         font-style: normal; font-weight: 800; line-height: 1; }
.overview-line-stack i span { min-width: 11px; padding: 1px 3px; border-radius: 5px;
                              background: rgba(255,255,255,.82); color: #263640;
                              box-shadow: 0 0 0 1px rgba(35,54,66,.12); text-align: center; }
.overview-line-stack .good { background: #4fa36b; }
.overview-line-stack .warn { background: #e0a52f; }
.overview-line-stack .due { background: #cf4c4c; }
.overview-line-stack .unset { background: #9ca8b0; }
.overview-line-count { color: #6e7c85; text-align: right; }
.overview-legend { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 9px; color: #74818a; font-size: 10px; }
.overview-legend span { display: inline-flex; align-items: center; gap: 4px; }
.overview-legend i { width: 8px; height: 8px; border-radius: 50%; }
.overview-trend-chart { position: relative; min-height: 160px; touch-action: pan-y; }
.overview-trend-chart.is-zoomed { cursor: grab; touch-action: none; user-select: none; }
.overview-trend-chart.is-dragging { cursor: grabbing; }
.overview-trend-chart svg { display: block; width: 100%; height: 160px; }
.overview-trend-line { fill: none; stroke: #005EB8; stroke-width: 2.5; stroke-linejoin: round; stroke-linecap: round; }
.overview-trend-area { fill: rgba(0,94,184,.08); }
.overview-trend-point { fill: #005EB8; stroke: #fff; stroke-width: 1.5; }
.overview-trend-hit { fill: transparent; cursor: inherit; }
.overview-trend-grid { stroke: #e4eaef; stroke-width: 1; }
.overview-trend-label { fill: #7b8790; font-size: 9px; }
.overview-chart-tooltip { position: absolute; z-index: 3; max-width: 190px; padding: 5px 8px;
                          border: 1px solid #b9cad7; border-radius: 5px; background: #203b4d;
                          color: #fff; box-shadow: 0 3px 10px rgba(24,49,66,.22);
                          font-size: 10.5px; line-height: 1.35; pointer-events: none; white-space: nowrap; }
.instant-tooltip { position: fixed; z-index: 9999; max-width: min(320px, calc(100vw - 18px));
                   padding: 6px 9px; border: 1px solid #b9cad7; border-radius: 5px;
                   background: #203b4d; color: #fff; box-shadow: 0 3px 12px rgba(24,49,66,.25);
                   font-size: 11px; line-height: 1.4; pointer-events: none; white-space: pre-line; }
.overview-alarm-chart { display: flex; height: 160px; flex-direction: column; justify-content: stretch; }
.overview-alarm-row { display: grid; grid-template-columns: 58px minmax(0, 1fr) 68px;
                      flex: 1 1 20%; gap: 7px; align-items: center; margin: 0; min-height: 26px;
                      font-size: 10.5px; }
.overview-alarm-code { color: #5a6872; font-weight: 700; }
.overview-alarm-track { height: 12px; overflow: hidden; border-radius: 6px; background: #f0f2f4; }
.overview-alarm-track i { display: block; height: 100%; border-radius: 6px; background: #cc5959; }
.overview-alarm-count { color: #704343; text-align: right; font-variant-numeric: tabular-nums; }
.overview-alarm-chart.top-esc .overview-alarm-track i { background: #347fba; }
.overview-alarm-chart.top-esc .overview-alarm-count { color: #2f6287; }
.overview-alarm-chart.top-run .overview-alarm-track i { background: #4f9a69; }
.overview-alarm-chart.top-run .overview-alarm-count { color: #33704a; }
.overview-alarm-row.is-empty { opacity: .42; }
.overview-empty { margin: 22px 0; color: #8a949c; font-size: 11px; text-align: center; }

/* 필터 바 */
.bar { display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
       padding: 12px 18px; background: #fff; border-bottom: 1px solid #e3e6ea; }
.bar input, .bar select { padding: 8px 10px; font-size: 14px;
       border: 1px solid #ccd0d4; border-radius: 6px; }
.bar input { flex: 1 1 260px; min-width: 180px; }
.search-bar { box-shadow: 0 2px 6px rgba(25,55,75,.08); }
.count { color: #666; font-size: 13px; margin-left: auto; }
.floating-page-actions {
  position: fixed; right: 22px; bottom: 22px; z-index: 45;
  display: flex; flex-direction: column; align-items: center; gap: 9px;
}
.scroll-top-button, .floating-feederbot-button {
  width: 43px; height: 43px; padding: 0; border: 1px solid #9fb8ca;
  border-radius: 50%; background: #fff; color: #285a7a;
  box-shadow: 0 3px 12px rgba(32,65,88,.22); font-size: 23px;
  font-weight: 700; line-height: 1; cursor: pointer;
}
.floating-feederbot-button { display: inline-flex; align-items: center; justify-content: center;
  text-decoration: none; }
.floating-feederbot-button svg { width: 24px; height: 24px; fill: none; stroke: currentColor;
  stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.scroll-top-button:hover, .floating-feederbot-button:hover {
  border-color: #005EB8; background: #edf6fd; color: #005EB8;
}
.scroll-top-button:focus-visible, .floating-feederbot-button:focus-visible {
  outline: 3px solid rgba(0,94,184,.25); outline-offset: 2px;
}

.warn { margin: 12px 18px 0; padding: 10px 14px; background: #fff4e5;
        border-left: 4px solid #e8912d; font-size: 13px; border-radius: 4px; }
.fleet-action-notice {
  margin: 12px 18px 0; padding: 10px 14px; border-left: 4px solid #1f9d61;
  border-radius: 4px; background: #e7f5ed; color: #147347; font-size: 13px; font-weight: 700;
}
.empty { padding: 24px 18px; color: #888; }

/* 그룹/표 */
.grp { margin: 18px 18px 0; background: #fff; border-radius: 8px; overflow: hidden;
       box-shadow: 0 1px 3px rgba(0,0,0,.06); }
.grp h2 { margin: 0; padding: 12px 16px; font-size: 15px; background: #eef3f8;
          border-bottom: 1px solid #e3e6ea; }
.grp h2 em { font-style: normal; color: #666; font-weight: normal; font-size: 13px; }
.customer-grp > h2 { background: #e7f0f7; color: #284b63; }
.project-list { display: grid; gap: 14px; padding: 12px; background: #f5f7f9; }
.project-grp { overflow: hidden; border: 1px solid #d8e1e8; border-radius: 7px; background: #fff; }
.project-grp h3 { display: flex; align-items: center; gap: 8px; margin: 0; padding: 9px 12px;
                  border-bottom: 1px solid #e3e9ee; background: #f9fbfc;
                  color: #344f61; font-size: 13.5px; }
.project-grp h3::before { content: ''; width: 4px; height: 16px; border-radius: 2px; background: #4d8db8; }
.project-grp h3 em { margin-left: auto; color: #697984; font-size: 12px; font-style: normal;
                     font-weight: 500; }
.project-board-button, .project-share-button {
  position: relative; display: inline-flex; flex: 0 0 auto; align-items: center; justify-content: center;
  width: 30px; height: 30px; margin-left: 1px; padding: 0; border: 1px solid #b9cbd8;
  border-radius: 6px; background: #fff; color: #356b8e; cursor: pointer;
  transition: background-color .12s ease, border-color .12s ease, color .12s ease;
}
.project-board-button svg, .project-share-button svg { width: 17px; height: 17px; fill: none; stroke: currentColor;
                            stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.project-board-button:hover, .project-share-button:hover { border-color: #4d8db8; background: #edf6fc; color: #005EB8; }
.project-board-button:focus-visible, .project-share-button:focus-visible {
  outline: 3px solid rgba(0,94,184,.22); outline-offset: 2px;
}
.project-board-unread {
  position: absolute; top: -7px; right: -8px; min-width: 17px; height: 17px; padding: 0 4px;
  box-sizing: border-box; border: 2px solid #f9fbfc; border-radius: 9px; background: #d72d2d;
  color: #fff; font-size: 9px; font-weight: 800; line-height: 13px; text-align: center;
  font-variant-numeric: tabular-nums; pointer-events: none;
}
.unassigned-grp { border: 1px solid #edcf78; box-shadow: 0 2px 7px rgba(138,97,0,.10); }
.unassigned-grp h2 {
  display: flex; align-items: center; gap: 7px; background: #fff7dc;
  border-bottom-color: #edcf78; color: #704f00;
}
.unassigned-grp h2 > span { margin-left: auto; color: #806b36; font-size: 11.5px; font-weight: 500; }
.unassigned-grp th:last-child, .unassigned-grp td:last-child { width: 110px; text-align: center; }
.unassigned-table-wrap { overflow-x: auto; }
.unassigned-table { min-width: 1080px; table-layout: fixed; font-size: 12.5px; }
.unassigned-table th, .unassigned-table td {
  overflow: hidden; padding: 8px 9px; text-overflow: ellipsis; white-space: nowrap;
}
.unassigned-table th:nth-child(1)  { width: 92px; }
.unassigned-table th:nth-child(2)  { width: 102px; }
.unassigned-table th:nth-child(3)  { width: 72px; }
.unassigned-table th:nth-child(4)  { width: 86px; }
.unassigned-table th:nth-child(5)  { width: 92px; }
.unassigned-table th:nth-child(6)  { width: 92px; }
.unassigned-table th:nth-child(7)  { width: 94px; }
.unassigned-table th:nth-child(8)  { width: 86px; }
.unassigned-table th:nth-child(9)  { width: 122px; }
.unassigned-table th:nth-child(10) { width: 96px; }
.unassigned-table td:nth-child(10) .badge {
  width: 70px; min-width: 70px; box-sizing: border-box; text-align: center;
}
.unassigned-row { background: #fffdf7; }
.unassigned-row:hover { background: #fff7dc; }
.unassigned-row:focus-visible { outline: 3px solid rgba(212,170,71,.45); outline-offset: -3px; }
.pending-grp { border: 1px solid #9fc5e8; box-shadow: 0 2px 7px rgba(0,94,184,.08); }
.pending-grp h2 { display: flex; align-items: center; gap: 7px; background: #eef6ff; color: #07558f; }
.pending-grp h2 > span { margin-left: auto; color: #55748c; font-size: 11.5px; font-weight: 500; }
.pending-table { min-width: 860px; }
.pending-table th:last-child, .pending-table td:last-child { width: 130px; text-align: center; }
.pending-row { background: #fbfdff; }
.pending-row:hover { background: #eef6ff; }
.st-pending { background: #e8f2ff; color: #07558f; }
.main-table-wrap { overflow-x: auto; }
.main-table { min-width: 1080px; table-layout: fixed; }
.main-table th, .main-table td { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.main-table th:nth-child(1)  { width: 86px; }
.main-table th:nth-child(2)  { width: 112px; }
.main-table th:nth-child(3)  { width: 100px; }
.main-table th:nth-child(4)  { width: 92px; }
.main-table th:nth-child(5)  { width: 78px; }
.main-table th:nth-child(6)  { width: 72px; }
.main-table th:nth-child(7)  { width: 112px; }
.main-table th:nth-child(8)  { width: 62px; }
.main-table th:nth-child(9)  { width: 112px; }
.main-table th:nth-child(10) { width: 86px; }
.main-table th:nth-child(11) { width: 92px; }
.main-table td:nth-child(10) .badge,
.main-table td:nth-child(11) .maintenance-badge {
  width: 70px; min-width: 70px; box-sizing: border-box; text-align: center;
}
table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
th, td { padding: 9px 12px; text-align: left; border-bottom: 1px solid #eef0f2; }
th { background: #fafbfc; color: #555; font-weight: 600; font-size: 12.5px; }
tbody tr { cursor: pointer; }
tbody tr:hover { background: #f7fbff; }
td.sn { font-weight: bold; color: #005EB8; }
.detail-nameplate { display: inline-block; margin: 0 4px; padding: 3px 8px;
                    border: 1px solid #d5e0e8; border-radius: 5px; background: #f2f6f9;
                    color: #526573; font-size: 12px; font-weight: 600; vertical-align: 2px; }
.fleet-row-action {
  display: block; margin-top: 5px; padding: 3px 8px; border: 1px solid #d4aa47;
  border-radius: 5px; background: #fff8df; color: #7f5a00; font-size: 10.5px;
  font-weight: 700; white-space: nowrap; cursor: pointer;
}
.fleet-row-action:hover { background: #ffefb8; }
td .toperr { color: #a33; font-size: 12px; }   /* 최다 알람 표기 */
.collection-overdue { color: #c62828; font-weight: 700; }
.alert-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 16px; height: 16px; margin-left: 5px; border-radius: 50%;
  color: #fff; background: #d32f2f; font-size: 11px; font-weight: 800;
  line-height: 1; vertical-align: text-bottom; cursor: help;
}
.alert-icon:focus-visible { outline: 2px solid rgba(211,47,47,.35); outline-offset: 2px; }

/* 상태 배지 */
.badge { display: inline-block; padding: 2px 8px; border-radius: 10px;
         font-size: 11.5px; font-weight: bold; white-space: nowrap; }
.st-active     { background: #e3f5e8; color: #17743a; }
.st-spare      { background: #eceff1; color: #555; }
.st-retired    { background: #eceff1; color: #999; }
.st-unassigned { background: #fff3cd; color: #8a6100; }
.st-stale      { background: #ffe0e0; color: #a12; }
.st-nodata     { background: #f0f0f0; color: #777; }
.maintenance-badge {
  display: inline-block; min-width: 58px; padding: 3px 8px; border-radius: 10px;
  font-size: 11.5px; font-weight: 700; text-align: center; white-space: nowrap;
}
.maint-good { background: #e3f5e8; color: #17743a; }
.maint-warn { background: #fff0c9; color: #8a6100; }
.maint-due { background: #ffe0e0; color: #a12; }
.maint-unset { background: #eef0f2; color: #747b82; }

/* 상세 모달 */
.modal { position: fixed; inset: 0; background: rgba(0,0,0,.45);
         display: flex; align-items: flex-start; justify-content: center; padding: 2.5vh 12px;
         overflow-y: auto; z-index: 10; }
.sheet { position: relative; width: calc(100vw - 24px); max-width: 1700px; background: #fff;
         border-radius: 10px; padding: 22px 24px 28px; }
.sheet h2 { margin: 0 0 14px; font-size: 18px; }
.sheet h3 { margin: 22px 0 8px; font-size: 14px; color: #444; }
.close { position: absolute; top: 14px; right: 16px; padding: 5px 12px; font-size: 13px;
         border: 1px solid #ccd0d4; background: #fff; border-radius: 5px; cursor: pointer; }
.detail-export-button {
  position: absolute; top: 14px; right: 250px; padding: 5px 12px;
  border: 1px solid #ccd0d4; border-radius: 5px; background: #fff;
  color: inherit; font-size: 13px; font-weight: 400; cursor: pointer;
}
.detail-export-button:hover { background: #f5f6f7; }
.detail-share-button {
  position: absolute; top: 14px; right: 210px; display: inline-flex; width: 31px; height: 29px;
  align-items: center; justify-content: center; padding: 0; border: 1px solid #b9cbd8;
  border-radius: 50%; background: #fff; color: #356b8e; cursor: pointer;
}
.detail-share-button svg { width: 16px; height: 16px; fill: none; stroke: currentColor;
  stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.detail-share-button:hover { border-color: #4d8db8; background: #edf6fc; color: #005EB8; }
.detail-delete-button {
  position: absolute; top: 14px; right: 78px; padding: 5px 12px;
  border: 1px solid #d8a5a5; border-radius: 5px; background: #fff;
  color: #a12; font-size: 13px; font-weight: 400; cursor: pointer;
}
.detail-delete-button:hover { background: #fff0f0; }
.detail-delete-button:disabled { opacity: .65; cursor: wait; }
.copy-toast {
  position: fixed; left: 50%; bottom: 28px; z-index: 120; transform: translateX(-50%);
  padding: 10px 17px; border-radius: 20px; background: rgba(32,49,61,.94); color: #fff;
  box-shadow: 0 4px 16px rgba(0,0,0,.24); font-size: 13px; font-weight: 700;
  pointer-events: none;
}
.copy-toast.is-error { background: rgba(166,34,34,.96); }
.share-action-modal { z-index: 95; align-items: center; }
.share-action-sheet { position: relative; width: min(242px, calc(100vw - 28px));
  padding: 20px 18px 18px; }
.share-action-sheet > h2 { margin: 0 24px 16px; color: #2d4352; font-size: 15px;
  line-height: 1.35; text-align: center; overflow-wrap: anywhere; }
.share-action-close { position: absolute; top: 8px; right: 9px; width: 27px; height: 27px;
  padding: 0; border: 0; background: transparent; color: #697984; font-size: 22px;
  line-height: 27px; cursor: pointer; }
.share-action-close:hover { color: #263d4b; }
.share-action-list { display: flex; justify-content: center; gap: 11px; }
.share-action-list > button { display: inline-flex; align-items: center; justify-content: center;
  width: 55px; height: 55px; padding: 0; border: 1px solid #ccd7df; border-radius: 13px;
  color: #2f414d; cursor: pointer; transition: transform .12s ease, background .12s ease; }
.share-action-list > button:hover { transform: translateY(-1px); }
.share-action-list > button:disabled { cursor: wait; opacity: .55; transform: none; }
.share-action-list svg { width: 26px; height: 26px; fill: none; stroke: currentColor;
  stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.share-action-kakao svg { width: 29px; height: 29px; fill: currentColor; stroke: none; }
.share-action-kakao { background: #fee500; border-color: #e7d000 !important; }
.share-action-kakao:hover { background: #f4dc00; }
.share-action-email { background: #edf6fc; border-color: #b7d2e4 !important; }
.share-action-email:hover { background: #dfedf7; }
.share-action-copy { background: #f7f9fa; }
.share-action-copy:hover { background: #edf1f4; }
.kv { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
      gap: 6px 18px; font-size: 13.5px; }
.kv div { padding: 5px 0; border-bottom: 1px dotted #e8eaec; }
.kv b { display: inline-block; width: 78px; color: #56616b; font-weight: 700; white-space: nowrap; }
.kv .param-action { display: flex; align-items: center; }
.sheet h3.factory-detail-title { margin-top: 18px; }
.factory-detail-kv { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
                     gap: 8px 12px; padding: 12px; border: 1px solid #dbe5ec;
                     border-radius: 7px; background: #f8fbfd; box-sizing: border-box; }
.factory-detail-kv > div,
.factory-detail-kv > div.param-action { display: grid; grid-template-columns: 124px minmax(0, 1fr);
                                        align-items: stretch; min-height: 38px; padding: 0;
                                        overflow: hidden; border: 1px solid #dce5eb;
                                        border-radius: 5px; background: #fff; }
.factory-detail-kv > div > b { display: flex; align-items: center; width: auto; padding: 8px 10px;
                              border-right: 1px solid #d4e0e8; background: #eaf2f8;
                              color: #405565; box-sizing: border-box; }
.factory-detail-value { display: flex; align-items: center; min-width: 0; padding: 8px 10px;
                        flex-wrap: wrap; color: #263746; background: #fff; overflow-wrap: anywhere; }
.factory-detail-value .alert-icon { flex: 0 0 auto; }
.factory-detail-value > button { margin: 0; }
.firmware-update-note { flex: 1 0 100%; margin-top: 5px; color: #a25d14; font-size: 10.5px;
                        font-weight: 700; line-height: 1.4; }
.param-action button { padding: 5px 11px; border: 1px solid #1e70b7; border-radius: 5px;
                       background: #eef6ff; color: #005EB8; font-size: 12px;
                       font-weight: 700; cursor: pointer; }
.param-action button:hover { background: #dceeff; }
.fleet-detail-action button { border-color: #d4aa47; background: #fff8df; color: #7f5a00; }
.fleet-detail-action button:hover { background: #ffefb8; }
.feeder-detail-action .alert-icon { flex: 0 0 auto; margin: 0 7px 0 0; }
.dim { color: #999; font-size: 12px; font-weight: normal; }
.sheet h3.cumulative-title { margin-top: 22px; }
table.cumulative-grid {
  width: 100%; overflow: hidden;
  border: 1px solid #dfe5ea; border-radius: 7px; border-collapse: separate;
  border-spacing: 0; table-layout: fixed;
}
table.cumulative-grid th {
  padding: 8px 14px; border-right: 1px solid #e3e8ec;
  background: #eef3f8; color: #4b5965; text-align: center;
}
table.cumulative-grid td {
  padding: 13px 14px; border-right: 1px solid #e3e8ec;
  color: #263746; background: #fff; text-align: center; cursor: default;
}
table.cumulative-grid th:last-child,
table.cumulative-grid td:last-child { border-right: 0; }
table.cumulative-grid tbody tr:hover { background: transparent; }
table.cumulative-grid strong { color: #005EB8; font-size: 17px; font-variant-numeric: tabular-nums; }
.cumulative-unit { margin-left: 3px; color: #68737d; font-size: 12px; }
.cumulative-sub { display: block; margin-top: 3px; color: #818a92; font-size: 11px; }
.maint-good-text { color: #17743a; }
.cumulative-sub.maint-warn-text { color: #a56a1b; font-weight: 700; }
.cumulative-sub.maint-due-text { color: #b42323; font-weight: 700; }
.cumulative-sub .alert-icon { width: 14px; height: 14px; margin-left: 4px; font-size: 9px; }
.custom-maintenance-panel { margin-top: 20px; }
.custom-maintenance-panel-head { display: flex; align-items: center; justify-content: space-between;
                                 gap: 12px; margin-bottom: 8px; }
.sheet .custom-maintenance-panel-head h3 { margin: 0; }
#customMaintenanceToggle {
  padding: 6px 12px; border: 1px solid #bdc9d3; border-radius: 6px;
  background: #fff; color: #4d5a66; font-size: 11.5px; font-weight: 700; cursor: pointer;
}
#customMaintenanceToggle:hover { background: #eef6ff; color: #005EB8; }
.custom-maintenance-panel.is-collapsed .custom-maintenance-panel-head { margin-bottom: 0; }
table.custom-maintenance-table { min-width: 840px; table-layout: fixed; }
table.custom-maintenance-table th, table.custom-maintenance-table td {
  padding: 9px 11px; text-align: center; cursor: default; font-size: 12px;
}
table.custom-maintenance-table thead th { background: #eef3f8; color: #3f4b56; }
table.custom-maintenance-table tbody th { color: #354b5a; background: #fbfcfd; text-align: left; }
table.custom-maintenance-table th:first-child { width: 20%; }
table.custom-maintenance-table th:nth-child(2), table.custom-maintenance-table th:nth-child(3) { width: 13%; }
table.custom-maintenance-table th:nth-child(4) { width: 19%; }
table.custom-maintenance-table th:nth-child(5) { width: 16%; }
table.custom-maintenance-table th:nth-child(6) { width: 11%; }
table.custom-maintenance-table th:last-child { width: 8%; }
.maintenance-reset-button { min-width: 48px; padding: 4px 8px; border: 1px solid #b9c5ce;
                            border-radius: 5px; background: #fff; color: #445865;
                            font-size: 11px; font-weight: 700; cursor: pointer; }
.maintenance-reset-button:hover { border-color: #738b9b; background: #f2f6f8; }
.maintenance-reset-button:disabled { opacity: .55; cursor: default; }
.maintenance-progress { position: relative; min-width: 100px; height: 21px; overflow: hidden;
                        border-radius: 11px; background: #eef1f3; color: #43525d; }
.maintenance-progress i { position: absolute; inset: 0 auto 0 0; opacity: .62; }
.maintenance-progress span { position: relative; z-index: 1; display: block; font-size: 10.5px;
                             font-weight: 800; line-height: 21px; text-align: center; }
.maintenance-progress.maint-good i { background: #8dd3a3; }
.maintenance-progress.maint-warn i { background: #e7bf5e; }
.maintenance-progress.maint-due i { background: #e38b8b; }
.table-scroll { width: 100%; overflow-x: auto; border: 1px solid #e2e6ea;
                border-radius: 7px; -webkit-overflow-scrolling: touch; }
table.alarm-grid { width: max-content; min-width: 100%; }
table.alarm-grid th, table.alarm-grid td {
  min-width: 60px; padding: 8px 10px; text-align: center; white-space: nowrap;
  font-size: 12.5px; font-variant-numeric: tabular-nums;
}
table.alarm-grid thead th { background: #eef3f8; color: #3f4b56; }
table.alarm-grid th:first-child {
  position: sticky; left: 0; z-index: 2; min-width: 88px; text-align: left;
  background: #f7f9fb; box-shadow: 1px 0 0 #e2e6ea;
}
table.alarm-grid thead th:first-child { z-index: 3; background: #e7eef5; }
table.alarm-grid tbody tr { cursor: default; }
table.alarm-grid tbody tr:hover { background: #f7fbff; }
.alarm-zero { color: #b6bcc2; background: #fbfcfd; }
.alarm-hit { color: #a42323; background: #fff2f2; font-weight: 700; }
.alarm-total { color: #005EB8; background: #eef6ff; font-weight: 700; }
.error-rate { color: #785400; background: #fff8df; font-weight: 700; }
.rate-error { min-width: 90px; color: #fff; background: #c73737; font-weight: 700; }
.param-change-btn { padding: 4px 8px; border: 1px solid #be6a17; border-radius: 5px;
                    background: #fff5e8; color: #9b4d00; font-size: 11.5px;
                    font-weight: 700; white-space: nowrap; cursor: pointer; }
.param-change-btn:hover { background: #ffe8ca; }
.param-change-btn.is-empty { border-color: #aab7c1; background: #f6f8fa; color: #667782; }
.param-change-btn.is-empty:hover { background: #eaf0f4; color: #405866; }
.param-history-summary { display: flex; align-items: center; gap: 9px; margin: 0 0 10px; }
.param-history-summary b { color: #005EB8; font-size: 14px; }
.param-history-summary span { color: #687985; font-size: 12px; }
.param-history-summary .param-history-group-guide { margin-left: auto; padding: 3px 8px;
                                                    border-radius: 10px; background: #edf3f7;
                                                    color: #536774; font-size: 10.5px; }
.param-history-empty { margin: 18px 0 8px; padding: 24px; border: 1px dashed #c7d2da;
                       border-radius: 7px; background: #f8fafb; color: #70808b; text-align: center; }
.param-history-table { width: 100%; min-width: 0; table-layout: fixed; }
.param-history-table thead tr > :nth-child(1) { width: 4%; }
.param-history-table thead tr > :nth-child(2) { width: 15%; }
.param-history-table thead tr > :nth-child(3) { width: 9%; }
.param-history-table thead tr > :nth-child(4) { width: 9%; }
.param-history-table thead tr > :nth-child(5) { width: 13%; }
.param-history-table thead tr > :nth-child(6) { width: 16%; }
.param-history-table thead tr > :nth-child(7) { width: 12%; }
.param-history-table thead tr > :nth-child(8) { width: 3%; }
.param-history-table thead tr > :nth-child(9) { width: 12%; }
.param-history-table thead tr > :nth-child(10) { width: 7%; }
.param-history-table th,
.param-history-table td { overflow-wrap: anywhere; white-space: normal; }
.param-history-table .param-history-time { white-space: nowrap; font-variant-numeric: tabular-nums; }
.param-history-table .param-history-actor { min-width: 0; font-weight: 700; }
.param-history-table .param-history-ip { font-family: Consolas, "Courier New", monospace; font-size: 11px; }
.param-history-table .param-history-merged { vertical-align: middle; text-align: center; }
.param-history-country-flag { display: inline-block; width: 24px; height: 18px;
                              border: 1px solid rgba(0,0,0,.14); border-radius: 2px;
                              object-fit: cover; vertical-align: middle; }
.param-history-table tbody tr.param-history-group-0 > * { background: #dceeff; }
.param-history-table tbody tr.param-history-group-1 > * { background: #ffedbd; }
.param-history-table tbody tr.param-history-group-2 > * { background: #d9f1df; }
.param-history-table tbody tr.param-history-group-3 > * { background: #eadff7; }
.param-history-table tbody tr.param-history-group-start > * { border-top: 3px solid #7893a5; }
.param-history-table tbody tr.param-history-group-start > :first-child {
  box-shadow: inset 6px 0 0 #3f6f8b; font-weight: 800;
}
.param-history-table tbody tr:first-child > * { border-top: 0; }
.param-unchanged { color: #a7adb3; }
.param-muted { color: #8a9198; font-size: 11px; }
.param-error { color: #b42323; background: #fff1f1; font-size: 11px; }
table.daily-grid th:first-child { min-width: 142px; }
table.daily-grid .run-time { min-width: 90px; }
.daily-date-value { white-space: nowrap; }
.life-reset-marker, .life-reset-summary {
  display: inline-flex; align-items: center; gap: 3px; border: 1px solid #e2a33b;
  border-radius: 999px; background: #fff3d8; color: #9a5600; font-weight: 800;
  line-height: 1; white-space: nowrap; vertical-align: middle;
}
.life-reset-marker { margin-left: 6px; padding: 3px 6px; font-size: 10px; }
.life-reset-marker > span[aria-hidden="true"], .life-reset-summary > span[aria-hidden="true"] {
  font-size: 1.25em;
}
.life-reset-marker.is-compact { width: 20px; height: 20px; justify-content: center; margin-left: 3px; padding: 0; }
.life-reset-summary { margin-left: 5px; padding: 4px 8px; font-size: 11px; }
table.daily-grid tr.is-life-reset > * { background: #fffaf0; }
table.daily-grid tr.is-life-reset > :first-child { box-shadow: inset 4px 0 0 #e2a33b; }
.report-heading { display: flex; align-items: center; justify-content: space-between;
                  gap: 12px; margin: 20px 0 12px; }
.report-heading h3 { margin: 0; }
.daily-tools { color: #777; font-size: 12px; text-align: right; }
.daily-report-actions { display: flex; align-items: center; justify-content: flex-end; gap: 7px; flex-wrap: wrap; }
.daily-view-toggle { display: inline-flex; overflow: hidden; border: 1px solid #b9cad7; border-radius: 6px; }
.daily-view-toggle button { padding: 5px 10px; border: 0; border-right: 1px solid #b9cad7;
                            background: #fff; color: #526675; font-size: 11.5px; cursor: pointer; }
.daily-view-toggle button:last-child { border-right: 0; }
.daily-view-toggle button:hover { background: #edf5fb; }
.daily-view-toggle button.is-active { background: #005EB8; color: #fff; font-weight: 700; }
.raw-log-view-button, .raw-log-download-button {
  padding: 5px 10px; border: 1px solid #6f9abe; border-radius: 5px; background: #edf6fd;
  color: #175d91; font-size: 11.5px; font-weight: 700; white-space: nowrap; cursor: pointer;
}
.raw-log-view-button:hover, .raw-log-download-button:hover {
  background: #dceeff;
}
.raw-log-empty { color: #a8afb5; }
.daily-calendar-wrap { overflow-x: auto; border: 1px solid #dce4ea; border-radius: 7px; background: #fff; }
.daily-calendar-weekdays, .daily-calendar { display: grid; min-width: 840px; grid-template-columns: repeat(7, 1fr); }
.daily-calendar-weekdays { border-bottom: 1px solid #dce4ea; background: #eef3f8; }
.daily-calendar-weekdays span { padding: 7px; color: #566572; font-size: 11px; font-weight: 700; text-align: center; }
.daily-calendar-day { min-height: 110px; padding: 7px 8px; border-right: 1px solid #e5eaee;
                      border-bottom: 1px solid #e5eaee; background: #fff; box-sizing: border-box; }
.daily-calendar-day:nth-child(7n) { border-right: 0; }
.daily-calendar-day.is-outside { background: #f7f9fa; }
.daily-calendar-day.is-empty { background: #fbfcfd; color: #a1a9af; }
.daily-calendar-day.is-empty > span { display: block; margin-top: 20px; font-size: 10px; text-align: center; }
.daily-calendar-day.has-alarm { box-shadow: inset 3px 0 0 #d36161; }
.daily-calendar-day.is-life-reset { background: #fffaf0; box-shadow: inset 0 4px 0 #e2a33b; }
.daily-calendar-day.has-alarm.is-life-reset { box-shadow: inset 3px 0 0 #d36161, inset 0 4px 0 #e2a33b; }
.daily-calendar-date { display: flex; justify-content: space-between; margin-bottom: 6px; color: #52636f; font-size: 10px; }
.daily-calendar-date .life-reset-marker { margin: 0 auto 0 5px; padding: 2px 5px; }
.daily-calendar-date b { color: #183f5a; font-size: 13px; }
.daily-calendar-day dl { display: grid; grid-template-columns: 1fr 1fr; gap: 3px 7px; margin: 0 0 5px; }
.daily-calendar-day dl div { display: flex; justify-content: space-between; gap: 4px; min-width: 0; }
.daily-calendar-day dt { color: #71808b; font-size: 10.5px; font-weight: 600; }
.daily-calendar-day dd { overflow: hidden; margin: 0; color: #344b5b; font-size: 10.5px;
                         font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.daily-calendar-day .raw-log-view-button { width: 100%; padding: 4px 6px; font-size: 10px; }
.daily-calendar-no-log { display: block; padding: 4px 0; color: #a6adb3; font-size: 9.5px; text-align: center; }
.raw-log-list-panel { margin-top: 16px; padding: 12px 14px; border: 1px solid #dce4ea;
                      border-radius: 7px; background: #f8fafc; }
.raw-log-list-panel h3 { margin: 0 0 3px; }
.raw-log-list-panel > p { margin: 0 0 9px; color: #77848d; font-size: 11px; }
.raw-log-unmatched-list { display: grid; gap: 5px; }
.raw-log-list-row { display: grid; grid-template-columns: minmax(160px, 1fr) 100px 70px auto;
                    gap: 10px; align-items: center; padding: 7px 9px; border: 1px solid #e0e7ec;
                    border-radius: 5px; background: #fff; color: #596a76; font-size: 11px; }
.raw-log-list-name { overflow: hidden; color: #284d65; font-weight: 700;
                     text-overflow: ellipsis; white-space: nowrap; }
.daily-sort, .main-sort, .param-history-sort { width: 100%; padding: 0; border: 0; background: transparent; color: inherit;
                          font: inherit; font-weight: 600; white-space: nowrap; cursor: pointer; }
.daily-sort:hover, .main-sort:hover, .param-history-sort:hover { color: #005EB8; }
.daily-sort:focus-visible, .main-sort:focus-visible, .param-history-sort:focus-visible {
  outline: 2px solid rgba(0,94,184,.35); outline-offset: 2px;
}
.sort-mark { display: inline-block; min-width: 14px; margin-left: 3px; color: #8a949e;
             font-size: 10px; }
.daily-sort[data-direction="asc"] .sort-mark,
.daily-sort[data-direction="desc"] .sort-mark,
.main-sort[data-direction="asc"] .sort-mark,
.main-sort[data-direction="desc"] .sort-mark,
.param-history-sort[data-direction="asc"] .sort-mark,
.param-history-sort[data-direction="desc"] .sort-mark { color: #005EB8; }
.alarm-code-tip {
  border-bottom: 1px dotted #7a8792;
  cursor: help;
}
.empty.compact { padding: 12px 0; }
.month-empty { margin: 0; border: 1px solid #e2e6ea; border-radius: 7px; background: #fbfcfd; }

.month-panel { margin-top: 20px; padding: 14px 16px 16px; border: 1px solid #dbe4ec;
               border-radius: 9px; background: #f7fafc; }
.month-panel-head { display: flex; align-items: center; justify-content: space-between;
                    gap: 16px; margin-bottom: 12px; }
.month-panel-head h3 { margin: 0 0 3px; color: #33404b; font-size: 15px; }
.history-state { color: #7a858f; font-size: 11.5px; }
.history-state.ready { color: #247348; }
.history-state.warn-text { color: #a56a1b; }
.month-picker { display: flex; align-items: center; gap: 8px; color: #59636d;
                font-size: 12.5px; font-weight: 700; white-space: nowrap; }
.month-picker input { padding: 7px 9px; border: 1px solid #bdc9d3; border-radius: 6px;
                      background: #fff; color: #26323c; font: inherit; cursor: pointer; }
.month-summary { display: grid; grid-template-columns: repeat(5, minmax(110px, 1fr)); gap: 8px; }
.month-summary div { padding: 10px 12px; border: 1px solid #e0e6eb; border-radius: 7px;
                     background: #fff; }
.month-summary span { display: block; margin-bottom: 3px; color: #79838c; font-size: 11.5px; }
.month-summary strong { color: #263746; font-size: 15px; font-variant-numeric: tabular-nums; }
.month-chart-panel { margin-top: 12px; padding: 12px 14px 8px; border: 1px solid #e0e6eb;
                     border-radius: 7px; background: #fff; }
.month-chart-head { display: flex; align-items: center; justify-content: space-between;
                    gap: 12px; margin-bottom: 8px; }
.daily-chart-picker { position: relative; display: flex; align-items: center; gap: 8px; }
.chart-picker-label { color: #59636d; font-size: 12.5px; font-weight: 700; white-space: nowrap; }
#dailyChartPickerButton {
  min-width: 190px; padding: 7px 30px 7px 10px; border: 1px solid #bdc9d3;
  border-radius: 6px; background: #fff; color: #26323c; font: inherit;
  font-size: 12.5px; text-align: left; cursor: pointer; position: relative;
}
.chart-picker-arrow { position: absolute; right: 10px; color: #79838c; }
.daily-chart-menu {
  position: absolute; top: calc(100% + 5px); left: 82px; z-index: 8;
  width: 250px; max-height: 270px; overflow-y: auto; padding: 5px;
  border: 1px solid #bdc9d3; border-radius: 7px; background: #fff;
  box-shadow: 0 5px 16px rgba(30,45,60,.16);
}
.daily-chart-menu label {
  display: grid; grid-template-columns: 20px 1fr auto; align-items: center;
  gap: 7px; padding: 7px 8px; border-radius: 5px; color: #35424e;
  font-size: 12.5px; cursor: pointer;
}
.daily-chart-menu label:hover { background: #eef6ff; }
.daily-chart-menu input { width: 15px; height: 15px; margin: 0; accent-color: #005EB8; }
.daily-chart-menu small { color: #8a949d; font-size: 10.5px; }
#dailyChartMeta { display: flex; flex-wrap: wrap; justify-content: flex-end;
                  gap: 5px 12px; color: #66727c; font-size: 11.5px; }
.month-chart-actions { display: flex; align-items: center; justify-content: flex-end; gap: 12px; }
#dailyChartToggle {
  flex: 0 0 auto; padding: 6px 10px; border: 1px solid #bdc9d3; border-radius: 6px;
  background: #fff; color: #4d5a66; font-size: 11.5px; font-weight: 700; cursor: pointer;
}
#dailyChartToggle:hover { background: #eef6ff; color: #005EB8; }
.month-chart-panel.is-collapsed { padding-bottom: 12px; }
.month-chart-panel.is-collapsed #dailyChartPickerButton,
.month-chart-panel.is-collapsed .daily-chart-menu,
.month-chart-panel.is-collapsed #dailyChartMeta,
.month-chart-panel.is-collapsed .daily-chart { display: none; }
.month-chart-panel.is-collapsed .month-chart-head { justify-content: space-between; margin-bottom: 0; }
.chart-legend { display: inline-flex; align-items: center; gap: 5px; white-space: nowrap; }
.chart-legend i { display: inline-block; width: 14px; height: 3px; border-radius: 2px; }
.daily-chart { width: 100%; overflow-x: auto; }
.daily-chart svg { display: block; width: 100%; min-width: 680px; height: auto; }
.chart-grid-line { stroke: #e5e9ed; stroke-width: 1; }
.chart-line { fill: none; stroke-width: 2.5; stroke-linejoin: round; stroke-linecap: round; }
.chart-point { stroke: #fff; stroke-width: 2; cursor: help; }
.chart-axis-text { fill: #76818b; font-family: "Malgun Gothic", sans-serif; font-size: 11px; }
.chart-date { font-size: 10.5px; }

.param-modal { z-index: 30; align-items: center; }
.param-sheet { display: flex; flex-direction: column; width: calc(100vw - 32px);
               max-width: 920px; max-height: 90vh; padding: 22px 24px 24px; }
.param-sheet.is-comparing { max-width: 1280px; }
.param-sheet h2 { padding-right: 260px; margin-bottom: 6px; }
.param-export-button { position: absolute; top: 14px; right: 86px; padding: 5px 12px;
                       border: 1px solid #ccd0d4; border-radius: 5px; background: #fff;
                       color: #333; font-size: 13px; cursor: pointer; }
.param-compare-button { position: absolute; top: 14px; right: 174px; padding: 5px 12px;
                        border: 1px solid #8eb2cc; border-radius: 5px; background: #edf6fc;
                        color: #195e8d; font-size: 13px; font-weight: 700; cursor: pointer; }
.param-export-button:hover { background: #f2f5f7; }
.param-compare-button:hover { border-color: #4f8db9; background: #dfeffa; }
.raw-log-modal { z-index: 40; align-items: center; }
.raw-log-sheet { display: flex; flex-direction: column; width: min(1180px, calc(100vw - 32px));
                 max-height: 92vh; padding: 22px 22px 18px; }
.raw-log-viewer-head { display: flex; align-items: center; justify-content: space-between;
                       gap: 14px; }
.raw-log-viewer-head h2 { margin-bottom: 4px; }
.raw-log-viewer-head p { margin: 0; color: #77848e; font-size: 11.5px; }
.raw-log-viewer-actions { display: flex; flex: 0 0 auto; align-items: center; gap: 7px; }
.raw-log-download-button, .raw-log-close-button {
  height: 30px; padding: 0 12px; border: 1px solid #6f9abe; border-radius: 5px;
  background: #edf6fd; color: #175d91; font-size: 11.5px; font-weight: 700; cursor: pointer;
}
.raw-log-close-button { border-color: #ccd0d4; background: #fff; color: #444; font-weight: 400; }
.raw-log-close-button:hover { background: #f1f3f5; }
.raw-log-download-button:disabled { opacity: .55; cursor: wait; }
.raw-log-viewer-content { display: flex; min-height: 260px; margin-top: 13px; overflow: hidden;
                          flex-direction: column; border: 1px solid #dce4ea;
                          border-radius: 7px; background: #fbfcfd; }
.raw-log-filter-bar { display: flex; flex-wrap: wrap; gap: 8px; align-items: end; padding: 9px 10px;
                      border-bottom: 1px solid #dce4ea; background: #f3f7fa; }
.raw-log-multifilter { position: relative; display: grid; min-width: 150px; gap: 3px; }
.raw-log-filter-label { color: #61727e; font-size: 10.5px; font-weight: 700; }
.raw-log-filter-button { display: flex; height: 30px; align-items: center; justify-content: space-between;
                         gap: 12px; padding: 0 8px; border: 1px solid #becbd4; border-radius: 5px;
                         background: #fff; color: #304653; font-size: 11.5px; cursor: pointer; }
.raw-log-filter-button i { color: #71818d; font-style: normal; }
.raw-log-filter-button:disabled { background: #edf0f2; color: #9aa3aa; cursor: default; }
.raw-log-filter-menu { position: absolute; z-index: 8; top: calc(100% + 4px); left: 0;
                       min-width: 210px; overflow: hidden; border: 1px solid #aebdc8;
                       border-radius: 6px; background: #fff; box-shadow: 0 8px 20px rgba(32,51,66,.18); }
.raw-log-filter-all { width: 100%; padding: 8px 10px; border: 0; border-bottom: 1px solid #e3e8ec;
                      background: #f6f9fb; color: #34556a; font-size: 11px; font-weight: 700;
                      text-align: left; cursor: pointer; }
.raw-log-filter-all:hover { background: #eaf3f9; }
.raw-log-filter-options { max-height: 230px; overflow: auto; padding: 4px 0; }
.raw-log-filter-options label { display: flex; min-width: 0; align-items: center; gap: 7px;
                                padding: 6px 10px; color: #354b59; font-size: 11.5px;
                                font-weight: 500; cursor: pointer; }
.raw-log-filter-options label:hover { background: #f0f6fa; }
.raw-log-filter-options input { margin: 0; }
.raw-log-filter-reset { height: 30px; padding: 0 10px; border: 1px solid #bdc9d3;
                        border-radius: 5px; background: #fff; color: #52636f;
                        font-size: 11px; font-weight: 700; cursor: pointer; }
.raw-log-filter-reset:hover { background: #e7f1f8; color: #005EB8; }
.raw-log-filter-result { margin-left: auto; padding-bottom: 7px; color: #6f7d87;
                         font-size: 10.5px; white-space: nowrap; }
.raw-log-table-wrap { max-height: calc(92vh - 190px); overflow: auto; }
.raw-log-table { width: max-content; min-width: 100%; border-collapse: collapse; font-size: 11px; }
.raw-log-table th, .raw-log-table td { max-width: 300px; padding: 6px 9px; overflow: hidden;
                                      border-right: 1px solid #e7ebee; border-bottom: 1px solid #e7ebee;
                                      text-overflow: ellipsis; white-space: nowrap; }
.raw-log-table th { position: sticky; top: 0; z-index: 1; background: #eaf2f8; color: #3e5667; }
.raw-log-table tbody tr { cursor: default; }
.raw-log-table .raw-log-filter-empty { padding: 28px 12px; color: #87939c; text-align: center; }
.raw-log-pagination { display: flex; flex: 0 0 auto; align-items: center; justify-content: center;
                      gap: 4px; padding: 9px 10px; border-top: 1px solid #dce4ea;
                      background: #f7fafc; }
.raw-log-pagination button { min-width: 30px; height: 28px; padding: 0 8px; border: 1px solid #c4d0d8;
                             border-radius: 5px; background: #fff; color: #425967;
                             font-size: 11px; font-weight: 700; cursor: pointer; }
.raw-log-pagination button:hover:not(:disabled) { border-color: #7aa7c5; background: #eaf4fb; color: #005EB8; }
.raw-log-pagination button.is-current { border-color: #0068b5; background: #0068b5; color: #fff; }
.raw-log-pagination button:disabled { opacity: .42; cursor: default; }
.raw-log-page-ellipsis { min-width: 22px; color: #7d8992; text-align: center; }
.raw-log-error { margin: 0; padding: 24px; color: #b42323; text-align: center; }
.param-content { min-height: 80px; overflow: hidden; }
.param-meta { margin: 0 0 12px; color: #68727c; font-size: 12.5px; }
.param-status { margin: 28px 0; color: #777; text-align: center; }
.param-compare-picker { flex: 0 0 auto; margin: 8px 0 12px; padding: 13px;
                        border: 1px solid #b9cfde; border-radius: 8px; background: #f5f9fc; }
.param-compare-search-head { display: flex; align-items: baseline; justify-content: space-between;
                             gap: 12px; margin-bottom: 7px; }
.param-compare-search-head label { color: #284c64; font-size: 13px; font-weight: 800; }
.param-compare-search-head span { color: #74838d; font-size: 11px; }
#paramCompareSearch { width: 100%; height: 34px; padding: 0 10px; border: 1px solid #afc1ce;
                      border-radius: 6px; background: #fff; color: #263a47; font-size: 12.5px; }
#paramCompareSearch:focus { outline: 2px solid rgba(0,94,184,.18); border-color: #4f8fbd; }
.param-compare-results { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
                         gap: 6px; max-height: 220px; margin-top: 8px; overflow-y: auto; }
.param-compare-result { display: grid; grid-template-columns: minmax(72px, auto) minmax(0, 1fr) auto;
                        align-items: center; gap: 8px; min-width: 0; padding: 8px 9px;
                        border: 1px solid #d5e0e7; border-radius: 6px; background: #fff;
                        color: #354b59; text-align: left; cursor: pointer; }
.param-compare-result:hover, .param-compare-result:focus-visible { border-color: #6fa3c7;
                                                                   background: #eaf4fb; }
.param-compare-result strong { color: #075f9d; font-size: 12.5px; }
.param-compare-result span { min-width: 0; overflow: hidden; font-size: 11.5px;
                             text-overflow: ellipsis; white-space: nowrap; }
.param-compare-result small { color: #7f8c95; font-size: 10.5px; white-space: nowrap; }
.param-compare-empty, .param-compare-more { grid-column: 1 / -1; margin: 0; padding: 16px;
                                           color: #7c8992; font-size: 11.5px; text-align: center; }
.param-compare-more { padding: 6px; }
.param-compare-summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
                         gap: 8px; margin: 0 0 10px; }
.param-compare-summary > div { min-width: 0; padding: 10px 12px; border: 1px solid #dbe4ea;
                               border-radius: 7px; background: #f8fafb; }
.param-compare-device { position: relative; }
.param-compare-summary span { display: block; color: #71808a; font-size: 10.5px; font-weight: 700; }
.param-compare-summary strong { display: block; margin-top: 2px; color: #214d68; font-size: 15px; }
.param-compare-summary small { display: block; margin-top: 3px; overflow: hidden; color: #71808a;
                               font-size: 10.5px; line-height: 1.45; text-overflow: ellipsis; white-space: nowrap; }
.param-compare-remove { position: absolute; top: 6px; right: 7px; display: inline-flex; width: 22px;
                        height: 22px; align-items: center; justify-content: center; padding: 0;
                        border: 0; border-radius: 50%; background: transparent; color: #8b979f;
                        font-size: 17px; cursor: pointer; }
.param-compare-remove:hover { background: #ffe7e3; color: #ae3829; }
.param-compare-add-card { display: flex; min-height: 72px; align-items: center; justify-content: center;
                          flex-direction: column; padding: 9px; border: 1px dashed #77a8c9;
                          border-radius: 7px; background: #f2f8fc; color: #23658f; cursor: pointer; }
.param-compare-add-card:hover { border-style: solid; background: #e5f2fa; }
.param-compare-add-card strong { margin: 0; font-size: 24px; line-height: 1; }
.param-compare-add-card span { margin-top: 3px; color: #23658f; font-size: 11.5px; }
.param-compare-add-card small { margin-top: 1px; color: #7593a7; font-size: 9.5px; }
.param-compare-summary .param-compare-difference { display: flex; min-width: 112px;
                                                   flex-direction: column; justify-content: center;
                                                   border-color: #edcf91; background: #fff8e8; text-align: center; }
.param-compare-difference strong { color: #aa650d; }
.param-compare-difference button { margin-top: 5px; padding: 4px 8px; border: 1px solid #d1b371;
                                   border-radius: 5px; background: #fff; color: #88560f;
                                   font-size: 10.5px; cursor: pointer; }
.param-table-wrap { max-height: 68vh; overflow: auto; border: 1px solid #dfe4e8;
                    border-radius: 7px; }
.param-compare-table-wrap { max-height: 58vh; }
table.param-table { font-size: 13px; }
table.param-table th, table.param-table td { padding: 8px 10px; }
table.param-table thead th { position: sticky; top: 0; z-index: 1; background: #eef3f8;
                            text-align: left; }
table.param-table tbody tr { cursor: default; }
table.param-table tbody tr:hover { background: #f7fbff; }
table.param-table td:first-child { width: 54px; color: #8a9198; text-align: center; }
table.param-table tbody th { width: 44%; color: #38434d; background: #fbfcfd; }
table.param-table .param-new { color: #005EB8; font-weight: 700; }
table.param-table .change-arrow { width: 36px; color: #89939d; text-align: center; }
table.param-compare-table { width: max-content; min-width: 100%; }
table.param-compare-table tbody th { min-width: 210px; width: 30%; }
table.param-compare-table .param-compare-value { min-width: 135px; font-variant-numeric: tabular-nums; }
table.param-compare-table tr.is-different th,
table.param-compare-table tr.is-different td { background: #fff8e5; }
table.param-compare-table tr.is-different .param-compare-source { color: #135f93; font-weight: 800; }
table.param-compare-table tr.is-different .param-compare-target { color: #b04b25; font-weight: 800; }

.export-modal { z-index: 45; align-items: center; }
.export-sheet { width: calc(100vw - 32px); max-width: 620px; padding: 24px 26px 22px; }
.export-sheet > h2 { padding-right: 70px; margin-bottom: 16px; }
.export-section {
  margin-top: 12px; padding: 14px 16px; border: 1px solid #dce3e9;
  border-radius: 8px; background: #f8fafc;
}
.export-section h3 { margin: 0 0 10px; color: #35424e; font-size: 14px; }
.export-choice {
  display: grid; grid-template-columns: 20px 120px 1fr; align-items: center;
  gap: 8px; min-height: 38px; color: #394752; font-size: 13px;
}
.export-choice input[type="radio"] { width: 15px; height: 15px; margin: 0; accent-color: #005EB8; }
.export-choice input[type="month"] {
  width: 170px; max-width: 100%; padding: 7px 9px; border: 1px solid #bdc9d3;
  border-radius: 6px; background: #fff; color: #26323c; font: inherit;
}
.export-choice strong { color: #005EB8; font-size: 12.5px; font-weight: 700; }
.export-fixed-note { margin: 7px 0 11px; color: #74808a; font-size: 11.5px; line-height: 1.5; }
.export-checks { display: flex; flex-wrap: wrap; gap: 8px 18px; }
.export-checks label {
  display: flex; align-items: center; gap: 6px; color: #394752; font-size: 12.5px;
}
.export-checks input { width: 15px; height: 15px; margin: 0; accent-color: #005EB8; }
.export-history-state { min-height: 18px; margin: 10px 0 0; color: #68747e; font-size: 11.5px; }
.export-actions { margin-top: 8px; }

.fleet-modal { z-index: 55; align-items: center; }
.fleet-sheet { width: calc(100vw - 32px); max-width: 900px; padding: 24px 26px 22px; }
.fleet-sheet > h2 { padding-right: 70px; margin-bottom: 7px; }
.fleet-intro { margin: 0 0 17px; color: #697780; font-size: 12px; line-height: 1.55; }
.fleet-form-grid {
  display: grid; grid-template-columns: repeat(6, minmax(0, 1fr));
  gap: 13px 16px;
}
.fleet-field { display: flex; flex-direction: column; grid-column: span 3; gap: 6px; min-width: 0; }
.fleet-field-top { grid-column: span 2; }
.fleet-field > span { color: #3f4d58; font-size: 12.5px; font-weight: 700; }
.fleet-value-editor { display: grid; gap: 6px; }
.fleet-field input, .fleet-field select {
  width: 100%; min-width: 0; height: 38px; padding: 8px 10px;
  border: 1px solid #bdc9d3; border-radius: 6px; background: #fff;
  color: #26323c; font-family: inherit; font-size: 13px;
}
.fleet-field input:focus, .fleet-field select:focus {
  outline: 0; border-color: #1681c4; box-shadow: 0 0 0 3px rgba(22,129,196,.12);
}
.fleet-field input[readonly] { background: #eef2f5; color: #66727c; font-weight: 700; }
.fleet-field input:disabled, .fleet-field select:disabled { opacity: .65; cursor: wait; }
.fleet-value-editor input { border-color: #1681c4; background: #f7fbff; }
.fleet-choice-guide {
  margin: 13px 0 0; padding: 9px 11px; border-radius: 6px; background: #eef6ff;
  color: #536473; font-size: 11.5px; line-height: 1.5;
}
.fleet-choice-guide b { color: #005EB8; }
.fleet-input-note { margin: 13px 0 0; color: #87919a; font-size: 11px; line-height: 1.5; }
.fleet-state { min-height: 18px; margin: 9px 0 0; color: #68747e; font-size: 12px; }
.fleet-state-success {
  padding: 9px 11px; border-radius: 6px; background: #e7f5ed;
  color: #147d4c; font-weight: 700;
}
.fleet-actions { margin-top: 9px; }
.settings-actions .fleet-delete-button {
  border-color: #d14343; background: #fff; color: #b42323;
}
.settings-actions .fleet-delete-button:hover { background: #fff0f0; }
.settings-actions .fleet-delete-button:disabled { opacity: .55; cursor: wait; }

.settings-modal {
  z-index: 40;
  align-items: flex-start;
  overflow: hidden;
}
.settings-sheet {
  width: calc(100vw - 32px);
  max-width: 800px;
  max-height: calc(100vh - 5vh);
  max-height: calc(100dvh - 5vh);
  padding: 24px 26px 22px;
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-gutter: stable;
}
.settings-sheet h2 { margin-bottom: 16px; }
.settings-section { padding: 15px 16px 17px; border: 1px solid #dce3e9;
                    border-radius: 8px; background: #f8fafc; }
.settings-section + .settings-section { margin-top: 12px; }
.settings-section h3 { margin: 0 0 7px; color: #33404b; font-size: 15px; }
.settings-help { margin: 0 0 15px; color: #69747e; font-size: 12px; line-height: 1.6; }
.maintenance-settings-grid {
  display: grid; grid-template-columns: minmax(100px, 1fr) minmax(132px, 148px) minmax(132px, 148px);
  gap: 8px 12px; align-items: center;
}
.settings-field-title { color: #65717c; font-size: 12px; font-weight: 700; text-align: center; }
.maintenance-settings-grid > label:first-of-type,
.maintenance-settings-grid > label:nth-of-type(4) {
  color: #35424e; font-size: 13px; font-weight: 700;
}
.maintenance-settings-grid label:not(:first-of-type):not(:nth-of-type(4)) {
  display: flex; align-items: center; gap: 6px;
}
.maintenance-settings-grid input {
  width: 100%; min-width: 0; box-sizing: border-box; padding: 8px 9px; border: 1px solid #bdc9d3;
  border-radius: 6px; background: #fff; color: #26323c; font-size: 13px;
  font-variant-numeric: tabular-nums;
}
.maintenance-settings-grid label span {
  flex: 0 0 24px; color: #69747e; font-size: 12px; white-space: nowrap;
}
.custom-maintenance-head { display: flex; align-items: end; justify-content: space-between;
                           gap: 14px; margin-top: 18px; }
.custom-maintenance-head h4 { margin: 0 0 3px; color: #35424e; font-size: 13.5px; }
.custom-maintenance-head p { margin: 0; color: #74818b; font-size: 11px; line-height: 1.45; }
#btnAddMaintenanceItem { flex: 0 0 auto; padding: 7px 10px; border: 1px solid #1e70b7;
                         border-radius: 6px; background: #eef6ff; color: #005EB8;
                         font-size: 11.5px; font-weight: 700; cursor: pointer; }
#btnAddMaintenanceItem:hover { background: #dceeff; }
#btnAddMaintenanceItem:disabled { opacity: .5; cursor: not-allowed; }
.custom-maintenance-columns, .custom-maintenance-row {
  display: grid; grid-template-columns: minmax(150px, 1fr) minmax(130px, 158px)
                                     minmax(130px, 158px) 32px;
  gap: 8px; align-items: center;
}
.custom-maintenance-columns { margin-top: 11px; padding: 0 0 2px; color: #65717c;
                              font-size: 11px; font-weight: 700; text-align: center; }
.custom-maintenance-list { display: grid; max-height: 285px; gap: 7px; overflow-y: auto;
                           padding: 1px 3px 1px 0; }
.custom-maintenance-row > input, .custom-maintenance-row label input {
  width: 100%; min-width: 0; height: 34px; padding: 7px 8px; border: 1px solid #bdc9d3;
  border-radius: 6px; background: #fff; color: #26323c; font-size: 12px;
}
.custom-maintenance-row label { display: flex; align-items: center; gap: 5px; }
.custom-maintenance-row label span { flex: 0 0 18px; color: #69747e; font-size: 11px; }
.custom-maintenance-delete { width: 30px; height: 30px; padding: 0; border: 1px solid #d5b4b4;
                             border-radius: 50%; background: #fff; color: #b42323;
                             font-size: 17px; line-height: 1; cursor: pointer; }
.custom-maintenance-delete:hover { background: #fff0f0; }
.custom-maintenance-empty { margin: 0; padding: 12px; border: 1px dashed #cdd7de;
                            border-radius: 6px; color: #8a949c; font-size: 11.5px; text-align: center; }
.custom-maintenance-count { margin: 6px 0 0; color: #89939b; font-size: 10.5px; text-align: right; }
.settings-storage-note { margin: 13px 0 0; color: #8a939b; font-size: 11px; }
.monitoring-settings-section { background: #fbfcf7; border-color: #d9dfc6; }
.monitoring-rule-list { overflow: hidden; border: 1px solid #d9e1e6; border-radius: 7px; background: #fff; }
.monitoring-rule-row { display: grid; grid-template-columns: minmax(210px, 1fr) 126px 126px;
  gap: 10px; align-items: center; padding: 10px 12px; border-bottom: 1px solid #e8edef; }
.monitoring-rule-row:last-child { border-bottom: 0; }
.monitoring-rule-row-wide { grid-template-columns: minmax(180px, 1fr) repeat(4, 116px); }
.monitoring-rule-row-triple { grid-template-columns: minmax(190px, 1fr) repeat(3, 118px); }
.monitoring-rule-row > div strong { display: block; color: #354751; font-size: 12.5px; }
.monitoring-rule-row > div small { display: block; margin-top: 3px; color: #849098; font-size: 10px; }
.monitoring-rule-row label { display: grid; grid-template-columns: auto minmax(42px, 1fr) auto;
  gap: 5px; align-items: center; color: #66747d; font-size: 10.5px; white-space: nowrap; }
.monitoring-rule-row input { width: 100%; min-width: 0; padding: 7px 6px; border: 1px solid #bdc9d3;
  border-radius: 5px; background: #fff; color: #273944; font-size: 12px; text-align: right;
  font-variant-numeric: tabular-nums; }
.monitoring-rule-row label span { color: #7d8991; }
.download-settings-section { background: #f6faff; border-color: #cbddea; }
.app-release-card { display: block; padding: 12px 13px; border: 1px solid #d8e4ed;
                    border-radius: 7px; background: #fff; }
.app-release-main { flex: 1 1 auto; min-width: 0; }
.app-release-main > strong { display: block; margin-bottom: 8px; color: #263640; font-size: 13.5px; }
.app-release-info-box { padding: 10px 11px; border: 1px solid #d8e4ed; border-radius: 6px;
                        background: #f8fbfd; }
.app-release-meta { display: block; color: #005EB8; font-size: 12px; font-weight: 700;
                    font-variant-numeric: tabular-nums; }
.app-release-notes-block { margin-top: 9px; padding-top: 9px; border-top: 1px solid #e1e9ef; }
.app-release-notes-label { display: block; margin-bottom: 4px; color: #687782;
                           font-size: 11px; font-weight: 700; }
.app-download-button { display: block; width: 100%; box-sizing: border-box; margin-top: 10px;
                       padding: 7px 13px; border: 1px solid #005EB8; text-align: center;
                       border-radius: 6px; background: #005EB8; color: #fff;
                       font-size: 12px; font-weight: 700; text-decoration: none; cursor: pointer; }
.app-download-button:hover { background: #004a94; }
.app-download-button.is-pending,
.app-download-button[aria-disabled="true"] { border-color: #aab4bc; background: #aab4bc;
                                              color: #fff; cursor: wait; pointer-events: none; }
.app-download-button[aria-disabled="true"] { cursor: not-allowed; }
.app-release-notes { margin: 0; color: #4d5c67; font-size: 12px; line-height: 1.55;
                     white-space: pre-wrap; overflow-wrap: anywhere; }
.app-release-asset { margin: 7px 0 0; color: #8a939b; font-size: 11px;
                     overflow-wrap: anywhere; }
.settings-error { min-height: 18px; margin: 6px 0 0; color: #b42323; font-size: 12px; }
.settings-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 15px; }
.settings-actions button {
  padding: 7px 14px; border: 1px solid #bdc9d3; border-radius: 6px;
  background: #fff; color: #46535f; font-size: 12.5px; font-weight: 700; cursor: pointer;
}
.settings-actions button:hover { background: #eef3f8; }
.settings-actions .settings-reset { margin-right: auto; color: #8b4c19; }
.settings-actions .settings-save { border-color: #005EB8; background: #005EB8; color: #fff; }
.settings-actions .settings-save:hover { background: #004a94; }
.settings-actions .settings-save:disabled { opacity: .6; cursor: wait; }

/* 프로젝트 게시판 */
.board-modal { z-index: 70; align-items: center; }
.board-sheet { width: min(1040px, calc(100vw - 48px)); max-height: 90vh; overflow-y: auto;
               box-sizing: border-box; padding: 24px 26px 28px; }
.board-sheet > h2 { padding-right: 72px; margin-bottom: 3px; color: #273e4e; }
.board-context { margin: 0 0 18px; color: #75828c; font-size: 12.5px; }
.board-toolbar, .board-read-head, .board-write-head {
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
}
.board-toolbar { padding: 11px 13px; border: 1px solid #d9e3ea; border-radius: 7px 7px 0 0;
                 background: #f7fafc; }
.board-toolbar > div { display: flex; align-items: center; gap: 8px; }
.board-toolbar strong { color: #354b5a; font-size: 13.5px; }
#boardPostCount { padding: 2px 7px; border-radius: 10px; background: #e3edf4;
                  color: #4d687b; font-size: 11px; font-weight: 700; }
.board-primary-button, .board-view-actions button {
  padding: 6px 12px; border: 1px solid #b8c8d4; border-radius: 6px; background: #fff;
  color: #3f5666; font-size: 12px; font-weight: 700; cursor: pointer;
}
.board-primary-button { border-color: #005EB8; background: #005EB8; color: #fff; }
.board-primary-button:hover { background: #004a94; }
.board-state { display: none; margin: 7px 2px; padding: 7px 9px; border-radius: 5px;
               background: #f4f7f9; color: #73808a; font-size: 12px; }
.board-state:not(:empty) { display: block; }
.board-table-wrap { overflow-x: auto; border: 1px solid #d9e3ea; border-top: 0;
                    border-radius: 0 0 7px 7px; }
.board-table { min-width: 680px; table-layout: fixed; }
.board-table th, .board-table td { padding: 10px 11px; }
.board-table th:nth-child(1) { width: 58px; text-align: center; }
.board-table th:nth-child(3) { width: 120px; }
.board-table th:nth-child(4) { width: 150px; }
.board-table th:nth-child(5) { width: 92px; text-align: center; }
.board-table td:nth-child(1), .board-table td:nth-child(5) { text-align: center; color: #6f7c86; }
.board-table tbody tr { cursor: default; }
.board-table tbody tr.board-post-unread { background: #f4f9fd; }
.board-table tbody tr.board-post-unread:hover { background: #eaf5fc; }
.board-post-link { width: 100%; padding: 2px 0; border: 0; background: none; color: #225d84;
                   font: inherit; font-weight: 700; text-align: left; cursor: pointer; }
.board-post-link:hover { color: #005EB8; text-decoration: underline; }
.board-unread-dot { display: inline-block; width: 7px; height: 7px; margin-right: 7px;
                    border-radius: 50%; background: #d72d2d; vertical-align: 1px; }
.board-attachment-count { color: #3e718f; font-size: 11.5px; font-weight: 700; }
.board-empty { margin: 0; padding: 48px 20px; border: 1px solid #d9e3ea; border-top: 0;
               border-radius: 0 0 7px 7px; color: #7a8790; text-align: center; }
.board-read-head { align-items: flex-start; padding: 15px 16px; border: 1px solid #d9e3ea;
                   border-radius: 7px 7px 0 0; background: #f7fafc; }
.board-sheet .board-read-head h3, .board-sheet .board-write-head h3 {
  margin: 0; color: #2e4352; font-size: 15px;
}
.board-read-head p { margin: 6px 0 0; color: #77848e; font-size: 11.5px; }
.board-view-actions { display: flex; flex: 0 0 auto; gap: 7px; }
.board-view-actions .board-delete-button { border-color: #d8a5a5; color: #a12; }
.board-view-actions .board-delete-button:hover { background: #fff0f0; }
.board-read-body { min-height: 180px; padding: 20px 17px; border: 1px solid #d9e3ea;
                   border-top: 0; color: #35434d; font-size: 13.5px; line-height: 1.7;
                   white-space: pre-wrap; overflow-wrap: anywhere; }
.board-attachment-grid, .board-image-grid, .board-image-preview {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 10px;
}
.board-attachment-grid, .board-image-grid { padding: 14px; border: 1px solid #d9e3ea; border-top: 0;
                    border-radius: 0 0 7px 7px; }
.board-attachment-grid:empty, .board-image-grid:empty { display: none; }
.board-attachment-grid figure, .board-image-grid figure, .board-image-preview figure { min-width: 0; margin: 0; padding: 7px;
  border: 1px solid #dbe4ea; border-radius: 7px; background: #f8fafb; }
.board-attachment-grid img, .board-image-grid img, .board-image-preview img { display: block; width: 100%; height: 145px;
  border-radius: 4px; background: #e9eef2; object-fit: contain; }
.board-attachment-grid figcaption, .board-image-grid figcaption, .board-image-preview figcaption { margin-top: 6px; overflow: hidden;
  color: #6f7d87; font-size: 10.5px; text-overflow: ellipsis; white-space: nowrap; }
.board-attachment-delete, .board-preview-delete { width: 100%; margin-top: 7px; padding: 5px 8px;
  border: 1px solid #d7b1b1; border-radius: 5px; background: #fff; color: #a12;
  font-size: 11px; font-weight: 700; cursor: pointer; }
.board-attachment-delete:hover, .board-preview-delete:hover { background: #fff0f0; }
.board-attachment-delete:disabled { opacity: .55; cursor: wait; }
.board-write-view { padding: 16px; border: 1px solid #d9e3ea; border-radius: 7px;
                    background: #f9fbfc; }
.board-write-head { margin-bottom: 14px; }
.board-write-head > span { color: #77848e; font-size: 11px; }
.board-field { display: block; margin-top: 11px; }
.board-field > span { display: block; margin-bottom: 5px; color: #52636f;
                      font-size: 12px; font-weight: 700; }
.board-field input[type="text"], .board-field textarea { width: 100%; box-sizing: border-box;
  padding: 9px 10px; border: 1px solid #bdc9d3; border-radius: 6px; background: #fff;
  color: #26323c; font: inherit; font-size: 13px; }
.board-field textarea { min-height: 220px; resize: vertical; line-height: 1.6; }
.board-field input:focus, .board-field textarea:focus { border-color: #4d8db8;
  outline: 3px solid rgba(0,94,184,.10); }
.board-file-field { position: relative; padding: 12px; border: 2px dashed #b9cbd8; border-radius: 8px;
                    background: #fff; transition: border-color .15s ease, background .15s ease, box-shadow .15s ease; }
.board-file-field.is-dragover { border-color: #0876bd; background: #edf7fe;
                                box-shadow: inset 0 0 0 2px rgba(0,94,184,.10); }
.board-file-field input { display: block; max-width: 100%; margin-top: 9px; color: #52636f; font-size: 12px; }
.board-drop-guide { display: flex; min-height: 58px; align-items: center; justify-content: center; gap: 10px;
                    padding: 8px 12px; border-radius: 6px; background: #f5f9fc; color: #426579;
                    font-size: 12px; text-align: center; pointer-events: none; }
.is-dragover .board-drop-guide { background: #dceffc; color: #005e9d; }
.board-drop-icon { display: inline-flex; width: 30px; height: 30px; align-items: center; justify-content: center;
                   border-radius: 50%; background: #e1eef6; color: #176b9d; font-size: 21px; line-height: 1; }
.is-dragover .board-drop-icon { background: #0876bd; color: #fff; }
.board-drop-status { display: block; margin-top: 7px; color: #326b8e; font-size: 11px; font-weight: 700; }
.board-file-field small, .board-model-unit-field small { display: block; margin-top: 6px;
  color: #7a8790; font-size: 10.5px; font-weight: 400; }
.board-model-unit-field { padding: 10px; border: 1px solid #d7e1e8; border-radius: 7px; background: #f7fafc; }
.board-model-unit-field select { min-width: 190px; padding: 7px 9px; border: 1px solid #bdc9d3;
  border-radius: 6px; background: #fff; color: #2e4352; }
.board-image-preview { margin-top: 10px; }
.board-write-actions { margin-top: 14px; }

.board-model-card, .board-model-preview { display: flex; flex-direction: column; }
.board-model-icon { display: flex; height: 145px; align-items: center; justify-content: center;
  border-radius: 4px; background: linear-gradient(145deg, #e8f2f8, #d6e6f0); color: #17638f; }
.board-model-icon.has-snapshot { overflow: hidden; background: #edf2f5; }
.board-model-icon.has-snapshot img { width: 100%; height: 100%; object-fit: contain; }
.board-model-icon svg { width: 62px; height: 62px; fill: none; stroke: currentColor;
  stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.4; }
.board-model-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-top: 7px; }
.board-model-view, .board-model-download { display: flex; min-height: 29px; box-sizing: border-box;
  align-items: center; justify-content: center; padding: 5px 8px; border: 1px solid #9bbbd0;
  border-radius: 5px; background: #fff; color: #1f648e; font-size: 11px; font-weight: 700;
  text-decoration: none; cursor: pointer; }
.board-model-view:hover, .board-model-download:hover { border-color: #4d8db8; background: #edf6fc; }
.board-model-card .board-attachment-delete { grid-column: 1 / -1; margin-top: 0; }

/* 게시판 3D 모델 뷰어 */
.model-viewer-modal { z-index: 95; align-items: center; }
.model-viewer-sheet { width: min(1180px, calc(100vw - 48px)); max-height: 94vh; box-sizing: border-box;
  padding: 20px 22px 18px; overflow: hidden; }
.model-viewer-head { display: flex; min-height: 40px; align-items: flex-start; justify-content: space-between;
  gap: 20px; padding-right: 56px; }
.model-viewer-head h2 { margin: 0; color: #273e4e; font-size: 19px; }
.model-viewer-head p { margin: 5px 0 0; color: #77848e; font-size: 11.5px; }
.model-viewer-toolbar { display: flex; flex-wrap: wrap; gap: 7px; margin: 12px 0 10px; }
.model-viewer-toolbar button, .model-viewer-toolbar a { display: inline-flex; min-height: 31px; box-sizing: border-box;
  align-items: center; justify-content: center; padding: 6px 11px; border: 1px solid #b8c8d4;
  border-radius: 6px; background: #fff; color: #3f5666; font-size: 11.5px; font-weight: 700;
  text-decoration: none; cursor: pointer; }
.model-viewer-toolbar button:hover, .model-viewer-toolbar a:hover { border-color: #4d8db8;
  background: #edf6fc; color: #005EB8; }
.model-viewer-toolbar button.is-active { border-color: #005EB8; background: #005EB8; color: #fff; }
.model-viewer-viewport { position: relative; height: min(64vh, 650px); min-height: 360px; overflow: hidden;
  border: 1px solid #cbd8e1; border-radius: 8px; background: #edf2f5; }
.model-viewer-canvas-host, .model-viewer-canvas-host canvas { display: block; width: 100%; height: 100%; }
.model-viewer-canvas-host.is-measuring canvas { cursor: crosshair; }
.model-viewer-loading, .model-viewer-error { position: absolute; inset: 0; display: flex; align-items: center;
  justify-content: center; padding: 24px; background: rgba(237,242,245,.92); color: #4e6472;
  font-size: 13px; font-weight: 700; text-align: center; }
.model-viewer-error { color: #a12; }
.model-viewer-loading[hidden], .model-viewer-error[hidden] { display: none; }
.model-viewer-info { display: grid; grid-template-columns: minmax(240px, 1fr) minmax(240px, 1fr) auto;
  gap: 12px; align-items: center; margin-top: 10px; }
.model-viewer-info > div { display: flex; min-width: 0; align-items: baseline; gap: 8px; padding: 8px 10px;
  border-radius: 6px; background: #f3f7f9; }
.model-viewer-info span { flex: 0 0 auto; color: #75828c; font-size: 10.5px; font-weight: 700; }
.model-viewer-info strong { overflow: hidden; color: #2d485a; font-size: 12px; text-overflow: ellipsis;
  white-space: nowrap; }
.model-viewer-info p { margin: 0; color: #7a8790; font-size: 10.5px; white-space: nowrap; }

@media (min-width: 1100px) {
  table.daily-grid { width: 100%; min-width: 0; table-layout: fixed; }
  table.daily-grid th, table.daily-grid td { min-width: 0; padding-left: 6px; padding-right: 6px; }
  table.daily-grid th:first-child { width: 96px; }
  table.daily-grid th:nth-child(2) { width: 64px; }
  table.daily-grid th:nth-child(3) { width: 90px; }
  table.daily-grid th:nth-last-child(4) { width: 78px; }
  table.daily-grid th:nth-last-child(3) { width: 104px; }
  table.daily-grid th:nth-last-child(2) { width: 90px; }
  table.daily-grid th:last-child { width: 92px; }
}

@media (min-width: 641px) and (max-width: 1099px) {
  .overview-filters { grid-template-columns: repeat(3, minmax(130px, 1fr)); }
  .overview-filters button { min-height: 32px; }
  .overview-kpis { grid-template-columns: repeat(3, minmax(120px, 1fr)); }
  .overview-charts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .overview-chart-card:nth-child(2) { grid-column: 1 / -1; grid-row: 1; }
}

@media (max-width: 640px) {
  .floating-page-actions { right: 12px; bottom: 14px; gap: 8px; }
  .scroll-top-button, .floating-feederbot-button { width: 40px; height: 40px; }
  .overview-panel { margin: 10px 8px 0; }
  .overview-head { align-items: flex-start; }
  .overview-actions { flex-wrap: wrap; justify-content: flex-end; }
  .overview-filters { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .overview-filters button { grid-column: 1 / -1; }
  .overview-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .overview-charts { grid-template-columns: 1fr; }
  .grp { margin: 12px 8px 0; }
  .project-list { gap: 10px; padding: 8px; }
  .main-table th:nth-child(4), .main-table td:nth-child(4) { display: none; }   /* 볼트스펙 */
  .bar { padding: 10px 8px; }
  .top { padding: 12px 10px; }
  .top .meta { gap: 7px; }
  .notification-dropdown { position: fixed; top: 64px; right: 8px; width: calc(100vw - 16px); }
  .modal { padding: 2vh 6px; }
  .sheet { width: calc(100vw - 12px); padding: 18px 12px 22px; }
  #modal > .sheet { padding-top: 56px; }
  .param-sheet { max-height: 94vh; }
  .param-sheet h2 { padding: 38px 0 0; }
  .param-compare-button { right: 164px; }
  .param-compare-results { grid-template-columns: 1fr; }
  .param-compare-search-head { align-items: flex-start; flex-direction: column; gap: 2px; }
  .param-compare-result { grid-template-columns: minmax(72px, auto) minmax(0, 1fr); }
  .param-compare-result small { display: none; }
  .param-compare-summary { grid-template-columns: 1fr 1fr; }
  .param-compare-summary .param-compare-difference { grid-column: 1 / -1; }
  .param-compare-summary small { white-space: normal; }
  .param-compare-table { min-width: 720px; }
  .raw-log-sheet { width: calc(100vw - 12px); max-height: 95vh; padding: 18px 10px 12px; }
  .raw-log-viewer-head { align-items: flex-start; }
  .raw-log-multifilter { min-width: calc(50% - 4px); }
  .raw-log-filter-result { width: 100%; margin-left: 0; padding-bottom: 0; }
  .custom-maintenance-head { align-items: flex-start; }
  .custom-maintenance-columns { display: none; }
  .custom-maintenance-list { margin-top: 10px; }
  .custom-maintenance-row { grid-template-columns: 1fr 1fr 30px; }
  .custom-maintenance-row > input { grid-column: 1 / -1; }
  .raw-log-list-row { grid-template-columns: minmax(0, 1fr) auto; }
  .raw-log-list-row > span:nth-child(2), .raw-log-list-row > span:nth-child(3) { display: none; }
  .param-table-wrap { max-height: 76vh; }
  .month-panel-head, .report-heading { align-items: flex-start; flex-direction: column; gap: 7px; }
  .daily-report-actions { width: 100%; justify-content: flex-start; }
  .daily-tools { width: 100%; }
  .month-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .month-chart-head { align-items: flex-start; flex-direction: column; gap: 6px; }
  .daily-chart-picker { width: 100%; }
  #dailyChartPickerButton { flex: 1; min-width: 0; }
  .daily-chart-menu { left: 0; width: min(280px, 100%); }
  #dailyChartMeta { justify-content: flex-start; }
  .month-chart-actions { width: 100%; justify-content: space-between; }
  .month-chart-panel.is-collapsed .month-chart-head {
    align-items: center; flex-direction: row; width: 100%;
  }
  .month-chart-panel.is-collapsed .daily-chart-picker,
  .month-chart-panel.is-collapsed .month-chart-actions { width: auto; }
  .month-chart-panel.is-collapsed .month-chart-actions { justify-content: flex-end; }
  .settings-sheet { width: calc(100vw - 12px); padding: 20px 14px 16px; }
  .export-sheet { width: calc(100vw - 12px); padding: 20px 14px 16px; }
  .fleet-sheet { width: calc(100vw - 12px); padding: 20px 14px 16px; }
  .board-sheet { width: calc(100vw - 12px); max-height: 95vh; padding: 20px 12px 18px; }
  .board-read-head, .board-write-head { align-items: flex-start; }
  .board-table th:nth-child(3) { width: 100px; }
  .board-table th:nth-child(4) { width: 130px; }
  .board-attachment-grid, .board-image-grid, .board-image-preview { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .board-attachment-grid img, .board-image-grid img, .board-image-preview img,
  .board-model-icon { height: 120px; }
  .model-viewer-sheet { width: calc(100vw - 12px); padding: 16px 12px 12px; }
  .model-viewer-viewport { height: 58vh; min-height: 320px; }
  .model-viewer-info { grid-template-columns: 1fr 1fr; }
  .model-viewer-info p { grid-column: 1 / -1; white-space: normal; }
  .fleet-form-grid { grid-template-columns: 1fr; gap: 10px; }
  .fleet-field, .fleet-field-top { grid-column: 1; }
  .unassigned-grp h2 { flex-wrap: wrap; }
  .unassigned-grp h2 > span { width: 100%; margin-left: 0; }
  .export-choice { grid-template-columns: 20px 100px 1fr; }
  .maintenance-settings-grid { grid-template-columns: 1fr 1fr; gap: 8px; }
  .monitoring-rule-row, .monitoring-rule-row-wide, .monitoring-rule-row-triple {
    grid-template-columns: 1fr 1fr;
    gap: 8px;
  }
  .monitoring-rule-row > div { grid-column: 1 / -1; }
  .factory-detail-kv { grid-template-columns: 1fr; }
  .settings-field-title:first-child { display: none; }
  .maintenance-settings-grid > label:first-of-type,
  .maintenance-settings-grid > label:nth-of-type(4) {
    grid-column: 1 / -1; margin-top: 5px;
  }
  .daily-tools { text-align: left; }
}
