/* ===== dashboard.css ===== */
/* v54.47 대시보드 1차: 대분류 카드 + 통합 현황 패널 + 모션 UI */
#dashboard { min-width: 0; }
#dashboard.page.active { display: flex; flex-direction: column; }

/* v54.48: author CSS의 display:flex가 HTML hidden 상태를 덮어쓰지 않도록 고정한다.
   로딩 완료 후 스켈레톤은 완전히 숨기고, 초기 패널도 데이터가 준비되기 전에는 표시하지 않는다. */
#dashboard .dashboard-skeleton[hidden],
#dashboard .dashboard-panel[hidden] {
  display: none !important;
}

.dashboard-topbar {
  flex: 0 0 auto;
  margin-bottom: 14px;
}
.dashboard-topbar h1 { letter-spacing: -.035em; }
.dashboard-updated {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 11px;
  border: 1px solid #e2e8f0;
  border-radius: 999px;
  background: rgba(255,255,255,.78);
  color: #64748b;
  font-size: 12px;
  font-weight: 700;
  white-space: nowrap;
}
.dashboard-live-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: #ef4444;
  box-shadow: 0 0 0 4px rgba(239,68,68,.09);
  animation: dashboardPulse 1.9s ease-in-out infinite;
}

.dashboard-category-row {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 11px;
  flex: 0 0 auto;
  margin-bottom: 12px;
}
.dashboard-category-card {
  position: relative;
  min-width: 0;
  min-height: 98px;
  display: grid;
  grid-template-columns: 38px minmax(0, 1fr) 14px;
  align-items: center;
  gap: 10px;
  padding: 13px 12px;
  border: 1px solid #e2e8f0;
  border-radius: 17px;
  background: rgba(255,255,255,.9);
  color: #0f172a;
  box-shadow: 0 4px 16px rgba(15,23,42,.045);
  cursor: pointer;
  text-align: left;
  overflow: hidden;
  transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease, background .2s ease;
}
.dashboard-category-card::before {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  background: #dc2626;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .25s ease;
}
.dashboard-category-card:hover {
  transform: translateY(-2px);
  border-color: #cbd5e1;
  box-shadow: 0 10px 24px rgba(15,23,42,.08);
}
.dashboard-category-card.is-active {
  border-color: rgba(220,38,38,.34);
  background: linear-gradient(145deg, #fff 20%, #fff7f7 100%);
  box-shadow: 0 12px 30px rgba(127,29,29,.1);
}
.dashboard-category-card.is-active::before { transform: scaleX(1); }
.dashboard-category-card:focus-visible { outline: 3px solid rgba(37,99,235,.18); outline-offset: 2px; }

.dashboard-card-icon {
  width: 38px;
  height: 38px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 12px;
  background: #f1f5f9;
  color: #334155;
  transition: background .2s ease, color .2s ease, transform .2s ease;
}
.dashboard-card-icon svg {
  width: 21px;
  height: 21px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.dashboard-category-card.is-active .dashboard-card-icon {
  background: #fee2e2;
  color: #b91c1c;
  transform: scale(1.04);
}
.dashboard-card-copy { min-width: 0; display: block; }
.dashboard-card-title { display: block; margin-bottom: 4px; color: #64748b; font-size: 11px; font-weight: 800; }
.dashboard-card-value {
  display: block;
  min-width: 0;
  color: #0f172a;
  font-size: clamp(17px, 1.35vw, 23px);
  line-height: 1.08;
  letter-spacing: -.04em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.dashboard-card-sub {
  display: block;
  margin-top: 5px;
  color: #64748b;
  font-size: 10.5px;
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.dashboard-card-arrow { color: #94a3b8; font-size: 22px; line-height: 1; transition: transform .2s ease, color .2s ease; }
.dashboard-category-card.is-active .dashboard-card-arrow { color: #b91c1c; transform: translateX(2px); }

.dashboard-stage {
  position: relative;
  flex: 1 1 auto;
  min-height: 0;
  padding: 17px;
  border-radius: 20px;
  overflow: hidden;
  background: rgba(255,255,255,.96);
}
.dashboard-panel {
  height: 100%;
  min-height: 0;
  display: flex;
  flex-direction: column;
  opacity: 1;
  transform: translateY(0);
  transition: opacity .16s ease, transform .16s ease;
}
.dashboard-panel.is-leaving { opacity: 0; transform: translateY(7px); }
.dashboard-panel.is-entering { animation: dashboardPanelIn .34s cubic-bezier(.22,.8,.3,1) both; }
.dashboard-panel-head {
  flex: 0 0 auto;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  margin-bottom: 12px;
}
.dashboard-panel-kicker {
  display: block;
  margin-bottom: 4px;
  color: #dc2626;
  font-size: 11px;
  font-weight: 900;
  letter-spacing: .08em;
}
.dashboard-panel-head h2 { color: #0f172a; font-size: 21px; line-height: 1.15; letter-spacing: -.035em; }
.dashboard-panel-head p { margin-top: 5px; color: #64748b; font-size: 12px; }
.dashboard-panel-action {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 11px;
  border: 1px solid #e2e8f0;
  border-radius: 10px;
  background: #f8fafc;
  color: #334155;
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
  white-space: nowrap;
  transition: background .18s ease, transform .18s ease;
}
.dashboard-panel-action:hover { background: #f1f5f9; transform: translateY(-1px); }

.dashboard-metric-strip {
  flex: 0 0 auto;
  display: grid;
  grid-template-columns: repeat(4, minmax(0,1fr));
  gap: 9px;
  margin-bottom: 11px;
}
.dashboard-metric {
  min-width: 0;
  padding: 10px 12px;
  border: 1px solid #e8edf3;
  border-radius: 13px;
  background: linear-gradient(180deg, #fff, #f8fafc);
  animation: dashboardItemIn .35s cubic-bezier(.22,.8,.3,1) both;
  animation-delay: calc(var(--dashboard-order, 0) * 45ms);
}
.dashboard-metric-label { display: block; color: #64748b; font-size: 10.5px; font-weight: 800; }
.dashboard-metric strong {
  display: block;
  margin-top: 4px;
  color: #0f172a;
  font-size: clamp(17px, 1.45vw, 23px);
  line-height: 1.08;
  letter-spacing: -.035em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.dashboard-metric small { display: block; margin-top: 3px; color: #94a3b8; font-size: 9.5px; }
.dashboard-metric.is-alert { border-color: #fecaca; background: #fff8f8; }
.dashboard-metric.is-alert strong { color: #b91c1c; }
.dashboard-metric.is-positive { border-color: #d1fae5; background: #f7fffb; }
.dashboard-metric.is-positive strong { color: #047857; }
.dashboard-metric.is-warn { border-color: #fed7aa; background: #fffaf5; }
.dashboard-metric.is-warn strong { color: #c2410c; }

.dashboard-content-grid {
  flex: 1 1 auto;
  min-height: 0;
  display: grid;
  grid-template-columns: minmax(0, .92fr) minmax(0, 1.48fr);
  gap: 11px;
}
.dashboard-block {
  min-height: 0;
  display: flex;
  flex-direction: column;
  padding: 13px;
  border: 1px solid #e8edf3;
  border-radius: 15px;
  background: #fbfcfe;
  overflow: hidden;
  animation: dashboardItemIn .38s cubic-bezier(.22,.8,.3,1) both;
}
.dashboard-block:nth-child(2) { animation-delay: 70ms; }
.dashboard-block-head {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 9px;
}
.dashboard-block-head h3 { color: #1e293b; font-size: 13px; font-weight: 900; }
.dashboard-block-head span { color: #94a3b8; font-size: 10px; }
.dashboard-block-body { flex: 1 1 auto; min-height: 0; }

.dashboard-chart-wrap {
  height: 100%;
  display: flex;
  flex-direction: column;
}
.dashboard-line-chart { width: 100%; flex: 1 1 auto; min-height: 120px; overflow: visible; }
.dashboard-chart-grid { stroke: #e2e8f0; stroke-width: 1; stroke-dasharray: 3 4; }
.dashboard-chart-area { fill: rgba(220,38,38,.07); opacity: 0; animation: dashboardFade .5s ease .15s forwards; }
.dashboard-chart-line {
  fill: none;
  stroke: #dc2626;
  stroke-width: 2.4;
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-dasharray: var(--path-length, 900);
  stroke-dashoffset: var(--path-length, 900);
  animation: dashboardDrawLine .78s cubic-bezier(.22,.8,.3,1) .08s forwards;
}
.dashboard-chart-point { fill: #fff; stroke: #dc2626; stroke-width: 2; transform-box: fill-box; transform-origin: center; animation: dashboardPointIn .28s ease both; animation-delay: calc(var(--dashboard-order, 0) * 55ms + 220ms); }
.dashboard-chart-point.is-today { fill: #dc2626; }
.dashboard-chart-labels { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-top: 3px; }
.dashboard-chart-label { color: #94a3b8; font-size: 9.5px; text-align: center; white-space: nowrap; }
.dashboard-chart-label.is-today { color: #b91c1c; font-weight: 900; }
.dashboard-chart-empty { height: 100%; display: grid; place-items: center; color: #94a3b8; font-size: 12px; }

.dashboard-bar-chart {
  height: 100%;
  min-height: 165px;
  display: flex;
  align-items: stretch;
  gap: 8px;
  padding-top: 7px;
}
.dashboard-bar-group { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; gap: 5px; }
.dashboard-bars { height: 118px; width: 100%; display: flex; align-items: flex-end; justify-content: center; gap: 4px; border-bottom: 1px solid #dbe3ec; }
.dashboard-bar {
  width: min(15px, 38%);
  min-height: 2px;
  height: 0;
  border-radius: 6px 6px 2px 2px;
  background: #dc2626;
  transition: height .72s cubic-bezier(.22,.8,.3,1);
}
.dashboard-bar.is-expense { background: #334155; }
.dashboard-bar-group span { color: #94a3b8; font-size: 9.5px; white-space: nowrap; }
.dashboard-bar-legend { display: flex; align-items: center; justify-content: center; gap: 14px; margin-top: 8px; color: #64748b; font-size: 10px; }
.dashboard-bar-legend i { width: 8px; height: 8px; display: inline-block; margin-right: 4px; border-radius: 3px; background: #dc2626; }
.dashboard-bar-legend .expense i { background: #334155; }

.dashboard-progress-list { display: grid; gap: 9px; align-content: center; height: 100%; }
.dashboard-progress-row { display: grid; grid-template-columns: 74px minmax(0,1fr) 34px; align-items: center; gap: 8px; }
.dashboard-progress-row > span { color: #475569; font-size: 10.5px; font-weight: 800; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dashboard-progress-track { height: 8px; overflow: hidden; border-radius: 999px; background: #e9eef4; }
.dashboard-progress-fill {
  display: block;
  width: 0;
  height: 100%;
  border-radius: inherit;
  background: linear-gradient(90deg, #ef4444, #b91c1c);
  transition: width .72s cubic-bezier(.22,.8,.3,1);
}
.dashboard-progress-row:nth-child(even) .dashboard-progress-fill { background: linear-gradient(90deg, #64748b, #334155); }
.dashboard-progress-row strong { color: #0f172a; font-size: 11px; text-align: right; }

.dashboard-record-grid {
  height: 100%;
  display: grid;
  grid-template-columns: repeat(2, minmax(0,1fr));
  grid-auto-rows: minmax(0,1fr);
  gap: 8px;
}
.dashboard-record-card {
  min-width: 0;
  display: grid;
  grid-template-columns: minmax(0,1fr) auto;
  gap: 8px;
  align-items: center;
  padding: 10px 11px;
  border: 1px solid #e4eaf1;
  border-radius: 12px;
  background: #fff;
  cursor: pointer;
  text-align: left;
  color: inherit;
  overflow: hidden;
  animation: dashboardItemIn .35s cubic-bezier(.22,.8,.3,1) both;
  animation-delay: calc(var(--dashboard-order, 0) * 45ms + 80ms);
  transition: border-color .18s ease, transform .18s ease, box-shadow .18s ease;
}
.dashboard-record-card:hover { transform: translateY(-1px); border-color: #cbd5e1; box-shadow: 0 7px 17px rgba(15,23,42,.065); }
.dashboard-record-main { min-width: 0; }
.dashboard-record-eyebrow { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; color: #94a3b8; font-size: 9.5px; font-weight: 800; white-space: nowrap; }
.dashboard-record-eyebrow .is-overdue { color: #b91c1c; }
.dashboard-record-title { display: block; color: #0f172a; font-size: 11.5px; line-height: 1.35; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dashboard-record-desc { display: block; margin-top: 4px; color: #64748b; font-size: 9.5px; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dashboard-record-side { display: flex; flex-direction: column; align-items: flex-end; gap: 5px; }
.dashboard-record-amount { color: #0f172a; font-size: 11px; font-weight: 900; white-space: nowrap; }
.dashboard-record-meta { color: #94a3b8; font-size: 9px; white-space: nowrap; }
.dashboard-record-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  max-width: 90px;
  padding: 4px 7px;
  border-radius: 999px;
  background: #eef2f7;
  color: #475569;
  font-size: 9px;
  font-weight: 900;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.dashboard-record-badge.is-red { background: #fee2e2; color: #b91c1c; }
.dashboard-record-badge.is-orange { background: #ffedd5; color: #c2410c; }
.dashboard-record-badge.is-green { background: #dcfce7; color: #047857; }
.dashboard-record-badge.is-blue { background: #dbeafe; color: #1d4ed8; }
.dashboard-record-badge.is-gray { background: #f1f5f9; color: #64748b; }
.dashboard-empty {
  height: 100%;
  min-height: 120px;
  display: grid;
  place-items: center;
  padding: 18px;
  border: 1px dashed #cbd5e1;
  border-radius: 13px;
  color: #94a3b8;
  font-size: 12px;
  text-align: center;
  background: rgba(248,250,252,.75);
}

.dashboard-skeleton { height: 100%; display: flex; flex-direction: column; gap: 12px; }
.dashboard-skeleton span { display: block; border-radius: 12px; background: linear-gradient(90deg, #eef2f6 25%, #f8fafc 43%, #eef2f6 62%); background-size: 400% 100%; animation: dashboardShimmer 1.25s ease-in-out infinite; }
.dashboard-skeleton-head { display: flex; align-items: center; justify-content: space-between; gap: 20px; }
.dashboard-skeleton-head span:first-child { width: 220px; height: 40px; }
.dashboard-skeleton-head span:last-child { width: 90px; height: 31px; }
.dashboard-skeleton-metrics { display: grid; grid-template-columns: repeat(4,1fr); gap: 9px; }
.dashboard-skeleton-metrics span { height: 64px; }
.dashboard-skeleton-body { flex: 1 1 auto; display: grid; grid-template-columns: .92fr 1.48fr; gap: 11px; }
.dashboard-skeleton-body span { height: 100%; min-height: 230px; }

@keyframes dashboardPanelIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes dashboardItemIn { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: translateY(0); } }
@keyframes dashboardPulse { 0%,100% { opacity: .7; transform: scale(.92); } 50% { opacity: 1; transform: scale(1.08); } }
@keyframes dashboardShimmer { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } }
@keyframes dashboardDrawLine { to { stroke-dashoffset: 0; } }
@keyframes dashboardPointIn { from { opacity: 0; transform: scale(.35); } to { opacity: 1; transform: scale(1); } }
@keyframes dashboardFade { to { opacity: 1; } }

@media (min-width: 761px) {
  #dashboard.page.active { height: calc(100vh - 48px); overflow: hidden; }
}

@media (max-height: 820px) and (min-width: 761px) {
  .dashboard-topbar { margin-bottom: 10px; }
  .dashboard-topbar h1 { font-size: 24px; }
  .dashboard-category-row { gap: 8px; margin-bottom: 9px; }
  .dashboard-category-card { min-height: 83px; padding: 10px; grid-template-columns: 34px minmax(0,1fr) 10px; gap: 8px; }
  .dashboard-card-icon { width: 34px; height: 34px; }
  .dashboard-card-sub { margin-top: 3px; }
  .dashboard-stage { padding: 13px; }
  .dashboard-panel-head { margin-bottom: 8px; }
  .dashboard-panel-head h2 { font-size: 18px; }
  .dashboard-panel-head p { margin-top: 3px; }
  .dashboard-metric-strip { margin-bottom: 8px; gap: 7px; }
  .dashboard-metric { padding: 8px 10px; }
  .dashboard-content-grid { gap: 8px; }
  .dashboard-block { padding: 10px; }
  .dashboard-chart-wrap, .dashboard-bar-chart { min-height: 135px; }
  .dashboard-bars { height: 92px; }
  .dashboard-record-grid { gap: 6px; }
  .dashboard-record-card { padding: 8px 9px; }
}

@media (max-width: 1180px) and (min-width: 761px) {
  .dashboard-category-card { grid-template-columns: 34px minmax(0,1fr); }
  .dashboard-card-arrow { display: none; }
  .dashboard-card-icon { width: 34px; height: 34px; }
  .dashboard-card-sub { font-size: 9.5px; }
}

@media (max-width: 900px) and (min-width: 761px) {
  .dashboard-category-row { grid-template-columns: repeat(5, minmax(128px,1fr)); overflow-x: auto; padding-bottom: 3px; }
  .dashboard-content-grid { grid-template-columns: .82fr 1.18fr; }
  .dashboard-record-grid { grid-template-columns: 1fr; grid-auto-rows: minmax(50px,1fr); }
  .dashboard-record-card:nth-child(n+5) { display: none; }
}

@media (max-width: 760px) {
  #dashboard.page.active { display: block; overflow: visible; }
  .dashboard-topbar { align-items: flex-start; margin-bottom: 12px; }
  .dashboard-updated { margin-top: 2px; }
  .dashboard-category-row {
    display: flex;
    overflow-x: auto;
    gap: 9px;
    margin: 0 -2px 11px;
    padding: 2px 2px 7px;
    scroll-snap-type: x proximity;
  }
  .dashboard-category-card { flex: 0 0 184px; min-height: 92px; scroll-snap-align: start; }
  .dashboard-stage { min-height: 610px; padding: 13px !important; overflow: visible !important; }
  .dashboard-panel-head { align-items: flex-start; }
  .dashboard-panel-head p { max-width: 240px; }
  .dashboard-metric-strip { grid-template-columns: repeat(2, minmax(0,1fr)); }
  .dashboard-content-grid { display: grid; grid-template-columns: 1fr; }
  .dashboard-block { min-height: 225px; }
  .dashboard-record-grid { grid-template-columns: 1fr; grid-auto-rows: minmax(58px, auto); }
  .dashboard-chart-wrap, .dashboard-bar-chart { min-height: 190px; }
  .dashboard-skeleton-metrics { grid-template-columns: repeat(2,1fr); }
  .dashboard-skeleton-body { grid-template-columns: 1fr; }
  .dashboard-skeleton-body span { min-height: 220px; }
}

@media (prefers-reduced-motion: reduce) {
  .dashboard-live-dot,
  .dashboard-panel,
  .dashboard-metric,
  .dashboard-block,
  .dashboard-record-card,
  .dashboard-chart-area,
  .dashboard-chart-line,
  .dashboard-chart-point,
  .dashboard-skeleton span { animation: none !important; transition-duration: .01ms !important; }
}

/* v54.49 대시보드 2차: 카드 선택형 월별 그래프 + 포인터 툴팁 */
.dashboard-metric {
  position: relative;
  width: 100%;
  appearance: none;
  font: inherit;
  color: inherit;
  text-align: left;
  cursor: pointer;
  overflow: hidden;
  transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease, background .18s ease;
}
.dashboard-metric:hover {
  transform: translateY(-1px);
  border-color: #cbd5e1;
  box-shadow: 0 8px 18px rgba(15,23,42,.065);
}
.dashboard-metric:focus-visible {
  outline: 3px solid rgba(220,38,38,.14);
  outline-offset: 2px;
}
.dashboard-metric.is-selected {
  border-color: rgba(220,38,38,.48);
  box-shadow: 0 0 0 2px rgba(220,38,38,.07), 0 9px 20px rgba(127,29,29,.075);
}
.dashboard-metric.is-selected::after {
  content: "";
  position: absolute;
  left: 10px;
  right: 10px;
  bottom: 0;
  height: 2px;
  border-radius: 999px;
  background: #dc2626;
}
.dashboard-metric-chart-hint {
  position: absolute;
  right: 9px;
  bottom: 7px;
  color: #b91c1c;
  font-size: 8px;
  font-weight: 900;
  opacity: 0;
  transform: translateY(3px);
  transition: opacity .18s ease, transform .18s ease;
}
.dashboard-metric:hover .dashboard-metric-chart-hint,
.dashboard-metric.is-selected .dashboard-metric-chart-hint {
  opacity: .72;
  transform: translateY(0);
}

.dashboard-chart-block { overflow: hidden; }
.dashboard-chart-slot {
  height: 100%;
  min-height: 0;
  display: flex;
  flex-direction: column;
  opacity: 1;
  transform: translateY(0);
  transition: opacity .12s ease, transform .12s ease;
}
.dashboard-chart-slot.is-changing { opacity: 0; transform: translateY(5px); }
.dashboard-chart-slot.is-changed { animation: dashboardChartChangeIn .32s cubic-bezier(.22,.8,.3,1) both; }
.dashboard-chart-title-row > div { min-width: 0; }
.dashboard-chart-title-row > div span { display: block; margin-top: 3px; }
.dashboard-chart-guide { white-space: nowrap; }
.dashboard-chart-body {
  position: relative;
  flex: 1 1 auto;
  min-height: 0;
  padding: 1px 1px 5px;
  overflow: visible;
}
.dashboard-chart-shell {
  position: relative;
  width: 100%;
  height: 100%;
  min-height: 150px;
}
.dashboard-chart-wrap {
  min-height: 150px;
  padding-bottom: 1px;
}
.dashboard-line-chart {
  width: 100%;
  height: calc(100% - 23px);
  min-height: 112px;
  flex: 1 1 auto;
}
.dashboard-chart-labels {
  grid-template-columns: repeat(var(--dashboard-columns, 7), minmax(0, 1fr));
  gap: 2px;
  margin-top: 1px;
}
.dashboard-chart-hit-zone {
  fill: transparent;
  pointer-events: all;
  cursor: crosshair;
}
.dashboard-chart-point {
  transition: r .15s ease, fill .15s ease, stroke-width .15s ease, filter .15s ease;
}
.dashboard-chart-point.is-hovered {
  r: 6px;
  fill: #dc2626;
  stroke-width: 3;
  filter: drop-shadow(0 3px 4px rgba(127,29,29,.22));
}
.dashboard-chart-tooltip {
  position: absolute;
  z-index: 8;
  left: 0;
  top: 0;
  min-width: 86px;
  max-width: 180px;
  display: grid;
  gap: 2px;
  padding: 7px 9px;
  border: 1px solid rgba(15,23,42,.1);
  border-radius: 9px;
  background: rgba(15,23,42,.92);
  color: #fff;
  box-shadow: 0 9px 24px rgba(15,23,42,.18);
  opacity: 0;
  pointer-events: none;
  transform: translate(0,0);
  transition: opacity .1s ease;
  will-change: transform;
}
.dashboard-chart-tooltip.is-visible { opacity: 1; }
.dashboard-chart-tooltip strong {
  overflow: hidden;
  color: #e2e8f0;
  font-size: 9px;
  font-weight: 800;
  line-height: 1.25;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dashboard-chart-tooltip span {
  color: #fff;
  font-size: 11px;
  font-weight: 900;
  line-height: 1.25;
  white-space: nowrap;
}

.dashboard-single-bar-shell {
  display: flex;
  flex-direction: column;
  padding: 2px 2px 1px;
}
.dashboard-single-bar-chart {
  flex: 1 1 auto;
  min-height: 145px;
  display: flex;
  align-items: stretch;
  gap: 8px;
  padding: 4px 2px 0;
}
.dashboard-single-bar-group {
  flex: 1 1 0;
  min-width: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  cursor: crosshair;
  animation: dashboardItemIn .32s cubic-bezier(.22,.8,.3,1) both;
  animation-delay: calc(var(--dashboard-order, 0) * 42ms);
}
.dashboard-single-bar-track {
  position: relative;
  width: min(34px, 72%);
  flex: 1 1 auto;
  min-height: 112px;
  display: flex;
  align-items: flex-end;
  overflow: hidden;
  border-bottom: 1px solid #dbe3ec;
  border-radius: 7px 7px 2px 2px;
  background: linear-gradient(180deg, rgba(241,245,249,.3), rgba(241,245,249,.82));
}
.dashboard-single-bar {
  width: 100%;
  min-height: 2px;
  height: 0;
  display: block;
  border-radius: 7px 7px 2px 2px;
  background: linear-gradient(180deg, #ef4444, #b91c1c);
  transform-origin: bottom;
  transition: height .72s cubic-bezier(.22,.8,.3,1), filter .15s ease, opacity .15s ease;
}
.dashboard-single-bar-group:nth-child(even) .dashboard-single-bar {
  background: linear-gradient(180deg, #64748b, #334155);
}
.dashboard-single-bar-group.is-hovered .dashboard-single-bar {
  filter: brightness(1.08) drop-shadow(0 5px 6px rgba(15,23,42,.16));
}
.dashboard-single-bar-group > span {
  width: 100%;
  overflow: hidden;
  color: #94a3b8;
  font-size: 9.5px;
  line-height: 1.2;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dashboard-single-bar-group.is-hovered > span {
  color: #b91c1c;
  font-weight: 900;
}

@keyframes dashboardChartChangeIn {
  from { opacity: 0; transform: translateY(7px); }
  to { opacity: 1; transform: translateY(0); }
}

@media (max-height: 820px) and (min-width: 761px) {
  .dashboard-chart-shell { min-height: 126px; }
  .dashboard-chart-wrap { min-height: 126px; }
  .dashboard-line-chart { min-height: 93px; }
  .dashboard-single-bar-chart { min-height: 122px; gap: 6px; }
  .dashboard-single-bar-track { min-height: 88px; }
  .dashboard-metric-chart-hint { display: none; }
}

@media (max-width: 760px) {
  .dashboard-chart-guide { display: none; }
  .dashboard-chart-shell { min-height: 190px; }
  .dashboard-single-bar-chart { min-height: 188px; }
  .dashboard-single-bar-track { min-height: 150px; }
  .dashboard-metric-chart-hint { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  .dashboard-chart-slot,
  .dashboard-metric,
  .dashboard-chart-tooltip,
  .dashboard-chart-point,
  .dashboard-single-bar,
  .dashboard-single-bar-group { animation: none !important; transition-duration: .01ms !important; }
}


/* v54.55: 그래프 스케일·구성 분포·대시보드 빠른 상세 */
.dashboard-chart-head-actions { display: flex; align-items: center; gap: 7px; }
.dashboard-chart-mode { display: inline-flex; padding: 2px; border: 1px solid #e2e8f0; border-radius: 9px; background: #f8fafc; }
.dashboard-chart-mode button { min-width: 38px; padding: 4px 7px; border: 0; border-radius: 7px; background: transparent; color: #64748b; font-size: 9px; font-weight: 900; cursor: pointer; }
.dashboard-chart-mode button.active { background: #fff; color: #b91c1c; box-shadow: 0 2px 7px rgba(15,23,42,.08); }
.dashboard-chart-scale { position: absolute; z-index: 1; left: 0; top: 4px; bottom: 22px; width: 48px; display: flex; flex-direction: column; justify-content: space-between; pointer-events: none; }
.dashboard-chart-scale span { color: #94a3b8; font-size: 8px; line-height: 1; transform: scale(.92); transform-origin: left center; white-space: nowrap; }
.dashboard-chart-wrap .dashboard-line-chart { padding-left: 35px; box-sizing: border-box; }
.dashboard-single-bar-chart { padding-left: 42px; }
.dashboard-single-bar-track { max-height: calc(100% - 2px); }
.dashboard-donut-shell { display: grid; grid-template-columns: minmax(120px,.8fr) minmax(130px,1.2fr); align-items: center; gap: 12px; padding: 2px 4px; }
.dashboard-donut-wrap { position: relative; width: min(160px,100%); aspect-ratio: 1; justify-self: center; }
.dashboard-donut { width: 100%; height: 100%; overflow: visible; transform: rotate(-90deg); }
.dashboard-donut-track { fill: none; stroke: #e8edf3; stroke-width: 15; }
.dashboard-donut-segment { fill: none; stroke-width: 15; stroke-linecap: butt; stroke-dasharray: var(--dashboard-donut-dash, 0) 100; stroke-dashoffset: var(--dashboard-donut-offset, 0); transition: stroke-dasharray .78s cubic-bezier(.22,.8,.3,1), opacity .16s ease; cursor: crosshair; }
.dashboard-donut-segment.is-hovered { opacity: .7; stroke-width: 18; }
.dashboard-donut-center { position: absolute; inset: 28%; display: flex; flex-direction: column; align-items: center; justify-content: center; border-radius: 50%; text-align: center; pointer-events: none; }
.dashboard-donut-center strong { color: #0f172a; font-size: 13px; line-height: 1.2; }
.dashboard-donut-center span { margin-top: 2px; color: #94a3b8; font-size: 9px; }
.dashboard-donut-legend { display: grid; gap: 6px; align-content: center; min-width: 0; }
.dashboard-donut-legend > div { display: grid; grid-template-columns: 9px minmax(0,1fr) auto; align-items: center; gap: 6px; min-width: 0; padding: 3px 4px; border-radius: 7px; cursor: crosshair; }
.dashboard-donut-legend > div.is-hovered { background: #f1f5f9; }
.dashboard-donut-legend i { width: 8px; height: 8px; border-radius: 3px; }
.dashboard-donut-legend span { overflow: hidden; color: #64748b; font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
.dashboard-donut-legend strong { color: #334155; font-size: 9px; white-space: nowrap; }
.dashboard-donut-color-0 { stroke: #dc2626; background: #dc2626; }
.dashboard-donut-color-1 { stroke: #334155; background: #334155; }
.dashboard-donut-color-2 { stroke: #2563eb; background: #2563eb; }
.dashboard-donut-color-3 { stroke: #059669; background: #059669; }
.dashboard-donut-color-4 { stroke: #d97706; background: #d97706; }
.dashboard-donut-color-5 { stroke: #7c3aed; background: #7c3aed; }
.dashboard-donut-color-6 { stroke: #0891b2; background: #0891b2; }
.dashboard-quick-detail-backdrop { z-index: 1400; }
.dashboard-quick-detail-modal { width: min(620px, calc(100vw - 32px)); }
.dashboard-quick-detail-body { display: grid; gap: 12px; }
.dashboard-quick-detail-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 8px; }
.dashboard-quick-detail-grid > div { display: grid; gap: 4px; padding: 10px 11px; border: 1px solid #e5eaf0; border-radius: 11px; background: #f8fafc; }
.dashboard-quick-detail-grid strong { color: #64748b; font-size: 10px; }
.dashboard-quick-detail-grid span { color: #0f172a; font-size: 12px; font-weight: 800; overflow-wrap: anywhere; }
@media (max-height: 820px) and (min-width: 761px) {
  .dashboard-donut-wrap { width: min(132px,100%); }
  .dashboard-donut-legend { gap: 3px; }
}
@media (max-width: 760px) {
  .dashboard-chart-title-row { align-items: flex-start; }
  .dashboard-chart-scale { width: 43px; }
  .dashboard-donut-shell { grid-template-columns: 1fr; min-height: 250px; }
  .dashboard-donut-wrap { width: 150px; }
  .dashboard-donut-legend { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .dashboard-quick-detail-grid { grid-template-columns: 1fr; }
}
@media (prefers-reduced-motion: reduce) {
  .dashboard-donut-segment { transition-duration: .01ms !important; }
}


/* v54.57: 도넛 분포를 하나의 큰 패널 안에 4분할로 압축 */
.dashboard-overview-grid {
  flex: 1 1 auto;
  min-height: 0;
  display: grid;
  grid-template-columns: minmax(0, .92fr) minmax(0, 1.48fr);
  gap: 11px;
}
.dashboard-distribution-block {
  min-height: 0;
}
.dashboard-distribution-grid {
  min-height: 0;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-template-rows: repeat(2, minmax(0, 1fr));
  gap: 0;
  overflow: hidden;
  border: 1px solid #e7ecf2;
  border-radius: 12px;
  background: #fff;
}
.dashboard-distribution-item {
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
  overflow: hidden;
}
.dashboard-distribution-item:nth-child(odd) { border-right: 1px solid #edf1f5; }
.dashboard-distribution-item:nth-child(-n+2) { border-bottom: 1px solid #edf1f5; }
.dashboard-distribution-head {
  flex: 0 0 auto;
  min-width: 0;
}
.dashboard-distribution-head > div { min-width: 0; }
.dashboard-distribution-head h3 {
  overflow: hidden;
  color: #334155;
  font-weight: 900;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dashboard-distribution-head span {
  display: block;
  overflow: hidden;
  color: #94a3b8;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dashboard-distribution-body {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  align-items: stretch;
}
.dashboard-distribution-item .dashboard-chart-shell { min-height: 0; }
.dashboard-distribution-item .dashboard-donut-shell {
  flex: 1 1 auto;
  grid-template-columns: 76px minmax(0, 1fr);
  padding: 0;
}
.dashboard-distribution-item .dashboard-donut-wrap {
  max-width: 100%;
}
.dashboard-distribution-item .dashboard-donut-track,
.dashboard-distribution-item .dashboard-donut-segment { stroke-width: 12; }
.dashboard-distribution-item .dashboard-donut-segment.is-hovered { stroke-width: 14; }
.dashboard-distribution-item .dashboard-donut-legend {
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-width: 0;
}
.dashboard-distribution-item .dashboard-donut-legend > div {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 3px;
  min-width: 0;
}
.dashboard-distribution-item .dashboard-donut-legend i {
  flex: 0 0 auto;
}
.dashboard-distribution-item .dashboard-donut-legend span {
  flex: 0 1 auto;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dashboard-distribution-item .dashboard-donut-legend strong {
  flex: 0 0 auto;
  white-space: nowrap;
}
.dashboard-distribution-empty {
  grid-column: 1 / -1;
  grid-row: 1 / -1;
  min-height: 0;
}
.dashboard-recent-block { min-height: 0; }
.dashboard-recent-block .dashboard-record-grid { min-height: 0; }

.dashboard-skeleton-overview {
  flex: 1 1 auto;
  min-height: 0;
  display: grid;
  grid-template-columns: minmax(0, .92fr) minmax(0, 1.48fr);
  gap: 11px;
}
.dashboard-skeleton-donuts {
  min-height: 0;
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-template-rows: repeat(2, minmax(0, 1fr));
  gap: 1px;
  padding: 12px;
  border-radius: 15px;
  background: #e8edf3;
  overflow: hidden;
}
.dashboard-skeleton-donuts span {
  min-height: 0;
  border-radius: 0;
  background: linear-gradient(90deg,#f1f4f7 0%,#fff 45%,#f1f4f7 100%);
}
.dashboard-skeleton-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  grid-template-rows: repeat(3, minmax(0, 1fr));
  gap: 8px;
}
.dashboard-skeleton-list span { min-height: 0; }

@media (max-height: 820px) and (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview { gap: 8px; }
  .dashboard-distribution-block { padding: 9px; }
  .dashboard-distribution-item { padding: 5px 6px; }
  .dashboard-distribution-item .dashboard-donut-shell { grid-template-columns: 64px minmax(0, 1fr); gap: 3px; }
  .dashboard-distribution-item .dashboard-donut-wrap { width: 62px; }
  .dashboard-distribution-head h3 { font-size: 9.5px; }
  .dashboard-distribution-head span { font-size: 7px; }
  .dashboard-distribution-item .dashboard-donut-legend span,
  .dashboard-distribution-item .dashboard-donut-legend strong { font-size: 7px; }
}

@media (max-width: 1020px) and (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview { grid-template-columns: minmax(0, .86fr) minmax(0, 1.14fr); }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: 1fr;
    align-content: center;
    gap: 1px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap { width: 60px; }
  .dashboard-distribution-item .dashboard-donut-legend {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0 3px;
  }
  .dashboard-distribution-item .dashboard-donut-legend span { max-width: 54px; }
}

@media (max-width: 760px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview { grid-template-columns: 1fr; }
  .dashboard-distribution-block { min-height: 355px; }
  .dashboard-distribution-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dashboard-distribution-item { min-height: 155px; padding: 8px; }
  .dashboard-distribution-item .dashboard-donut-shell { grid-template-columns: 78px minmax(0, 1fr); gap: 5px; }
  .dashboard-distribution-item .dashboard-donut-wrap { width: 76px; }
  .dashboard-distribution-item .dashboard-donut-legend span,
  .dashboard-distribution-item .dashboard-donut-legend strong { font-size: 8px; }
  .dashboard-recent-block { min-height: 360px; }
  .dashboard-skeleton-donuts { min-height: 355px; }
  .dashboard-skeleton-list span { min-height: 58px; }
}

@media (max-width: 520px) {
  .dashboard-distribution-block { min-height: 0; }
  .dashboard-distribution-grid { grid-template-columns: 1fr; grid-template-rows: none; }
  .dashboard-distribution-item {
    border-right: 0 !important;
    border-bottom: 1px solid #edf1f5;
  }
  .dashboard-distribution-item:last-child { border-bottom: 0; }
  .dashboard-distribution-item .dashboard-donut-shell { grid-template-columns: 105px minmax(0, 1fr); gap: 9px; }
  .dashboard-distribution-item .dashboard-donut-wrap { width: 98px; }
  .dashboard-distribution-item .dashboard-donut-legend span { max-width: 125px; }
  .dashboard-skeleton-donuts { grid-template-columns: 1fr; grid-template-rows: repeat(4, minmax(110px, 1fr)); min-height: 470px; }
}

@media (prefers-reduced-motion: reduce) {
  .dashboard-distribution-item { animation: none !important; }
}


/* v54.58: 도넛 시인성 확대, 전체 금액 표기, 분포/최근목록 비율 재조정 */
.dashboard-overview-grid,
.dashboard-skeleton-overview {
  grid-template-columns: minmax(0, 1.08fr) minmax(0, 1.32fr);
}
.dashboard-distribution-block {
  padding: 12px 13px;
}
.dashboard-distribution-block > .dashboard-block-head {
  margin-bottom: 7px;
}
.dashboard-distribution-item {
  padding: 9px 10px;
}
.dashboard-distribution-head {
  margin-bottom: 5px;
}
.dashboard-distribution-head h3 {
  font-size: 12px;
  line-height: 1.25;
}
.dashboard-distribution-head span {
  margin-top: 2px;
  font-size: 9px;
  line-height: 1.25;
}
.dashboard-distribution-item .dashboard-donut-shell {
  grid-template-columns: 98px minmax(0, 1fr);
  gap: 8px;
}
.dashboard-distribution-item .dashboard-donut-wrap {
  width: 94px;
}
.dashboard-distribution-item .dashboard-donut-track,
.dashboard-distribution-item .dashboard-donut-segment {
  stroke-width: 11;
}
.dashboard-distribution-item .dashboard-donut-segment.is-hovered {
  stroke-width: 13;
}
.dashboard-distribution-item .dashboard-donut-center {
  inset: 20%;
}
.dashboard-distribution-item .dashboard-donut-center strong {
  width: 100%;
  max-width: 72px;
  overflow: visible;
  font-size: 11px;
  line-height: 1.02;
  letter-spacing: -.055em;
  text-align: center;
  text-overflow: clip;
  white-space: normal;
  overflow-wrap: anywhere;
}
.dashboard-distribution-item .dashboard-donut-center.is-won-value strong {
  font-size: 9.6px;
}
.dashboard-distribution-item .dashboard-donut-center.is-long-value strong {
  font-size: 8.7px;
}
.dashboard-distribution-item .dashboard-donut-center.is-very-long-value strong {
  font-size: 7.8px;
}
.dashboard-distribution-item .dashboard-donut-center span {
  margin-top: 3px;
  font-size: 8px;
}
.dashboard-distribution-item .dashboard-donut-legend {
  justify-content: center;
  gap: 2px;
}
.dashboard-distribution-item .dashboard-donut-legend > div {
  display: grid;
  grid-template-columns: 8px auto auto;
  justify-content: start;
  column-gap: 4px;
  width: max-content;
  max-width: 100%;
  padding: 3px 2px;
}
.dashboard-distribution-item .dashboard-donut-legend i {
  width: 7px;
  height: 7px;
}
.dashboard-distribution-item .dashboard-donut-legend span {
  max-width: 92px;
  font-size: 9.4px;
}
.dashboard-distribution-item .dashboard-donut-legend strong {
  margin-left: 0;
  font-size: 9.4px;
  letter-spacing: -.02em;
}

@media (max-height: 820px) and (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1.04fr) minmax(0, 1.36fr);
  }
  .dashboard-distribution-head {
    margin-bottom: 3px;
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: 82px minmax(0, 1fr);
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: 80px;
  }
}

@media (max-width: 1120px) and (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr);
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: 82px minmax(0, 1fr);
    align-content: center;
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: 80px;
  }
  .dashboard-distribution-item .dashboard-donut-legend {
    display: flex;
    flex-direction: column;
    gap: 1px;
  }
  .dashboard-distribution-item .dashboard-donut-legend span {
    max-width: 72px;
    font-size: 8.5px;
  }
  .dashboard-distribution-item .dashboard-donut-legend strong {
    font-size: 8.5px;
  }
}

@media (max-width: 760px) {
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: 96px minmax(0, 1fr);
  }
}

@media (max-width: 520px) {
  .dashboard-distribution-item {
    min-height: 160px;
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: 112px minmax(0, 1fr);
    gap: 10px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: 106px;
  }
  .dashboard-distribution-item .dashboard-donut-legend span {
    max-width: 118px;
    font-size: 9.5px;
  }
  .dashboard-distribution-item .dashboard-donut-legend strong {
    font-size: 9.5px;
  }
}

/* v54.59: 대시보드 도넛 분포 영역 최대 시인성 보강 */
@media (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1.24fr) minmax(0, 1.16fr);
  }
  .dashboard-distribution-block {
    padding: 12px 14px;
  }
  .dashboard-distribution-block > .dashboard-block-head {
    margin-bottom: 5px;
  }
  .dashboard-distribution-grid {
    border-radius: 13px;
  }
  .dashboard-distribution-head {
    margin-bottom: 4px;
  }
  .dashboard-distribution-head h3 {
    line-height: 1.18;
  }
  .dashboard-distribution-head span {
    line-height: 1.15;
  }
  .dashboard-distribution-body {
    align-items: center;
  }
  .dashboard-distribution-item .dashboard-chart-shell,
  .dashboard-distribution-item .dashboard-donut-shell {
    width: 100%;
    height: 100%;
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: minmax(132px, 148px) minmax(0, 1fr);
    align-items: center;
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: clamp(124px, 10.6vw, 148px);
  }
  .dashboard-distribution-item .dashboard-donut-track,
  .dashboard-distribution-item .dashboard-donut-segment {
    stroke-width: 12;
  }
  .dashboard-distribution-item .dashboard-donut-segment.is-hovered {
    stroke-width: 14.5;
  }
  .dashboard-distribution-item .dashboard-donut-center {
    inset: 18%;
  }
  .dashboard-distribution-item .dashboard-donut-center strong {
    line-height: 1.04;
    letter-spacing: -.055em;
  }
  .dashboard-distribution-item .dashboard-donut-center span {
    margin-top: 4px;
  }
  .dashboard-distribution-item .dashboard-donut-legend {
    justify-content: center;
  }
  .dashboard-distribution-item .dashboard-donut-legend > div {
    grid-template-columns: 10px auto auto;
  }
  .dashboard-distribution-item .dashboard-donut-legend i {
    border-radius: 3px;
  }
  .dashboard-distribution-item .dashboard-donut-legend span {
    line-height: 1.2;
  }
  .dashboard-distribution-item .dashboard-donut-legend strong {
    line-height: 1.2;
    letter-spacing: -.025em;
  }
}

@media (max-height: 820px) and (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1.18fr) minmax(0, 1.22fr);
  }
  .dashboard-distribution-block {
    padding: 9px 11px;
  }
  .dashboard-distribution-item {
    padding: 7px 9px;
  }
  .dashboard-distribution-head h3 {
    font-size: 11.5px;
  }
  .dashboard-distribution-head span {
    font-size: 8.5px;
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: minmax(108px, 120px) minmax(0, 1fr);
    gap: 9px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: clamp(106px, 8.8vw, 120px);
  }
  .dashboard-distribution-item .dashboard-donut-center strong {
    max-width: 76px;
    font-size: 11.2px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-won-value strong {
    font-size: 9.3px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-long-value strong {
    font-size: 8.5px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-very-long-value strong {
    font-size: 7.8px;
  }
  .dashboard-distribution-item .dashboard-donut-center span {
    font-size: 8.2px;
  }
  .dashboard-distribution-item .dashboard-donut-legend {
    gap: 2px;
  }
  .dashboard-distribution-item .dashboard-donut-legend span,
  .dashboard-distribution-item .dashboard-donut-legend strong {
    font-size: 9.6px;
  }
}

@media (max-width: 1120px) and (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1.12fr) minmax(0, 1.18fr);
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: minmax(96px, 108px) minmax(0, 1fr);
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: clamp(94px, 9.2vw, 108px);
  }
}

@media (max-width: 760px) {
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: 112px minmax(0, 1fr);
  }
}

/* v54.60: 도넛·범례 시인성 추가 확대 */
@media (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1.30fr) minmax(0, 1.10fr);
  }
  .dashboard-distribution-item {
    padding: 9px 10px;
  }
  .dashboard-distribution-head h3 {
    font-size: 13.5px;
  }
  .dashboard-distribution-head span {
    font-size: 9.8px;
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: minmax(148px, 168px) minmax(0, 1fr);
    gap: 12px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: clamp(142px, 11.8vw, 168px);
  }
  .dashboard-distribution-item .dashboard-donut-track,
  .dashboard-distribution-item .dashboard-donut-segment {
    stroke-width: 13;
  }
  .dashboard-distribution-item .dashboard-donut-segment.is-hovered {
    stroke-width: 15.5;
  }
  .dashboard-distribution-item .dashboard-donut-center {
    inset: 17%;
  }
  .dashboard-distribution-item .dashboard-donut-center strong {
    max-width: 108px;
    font-size: 14.5px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-won-value strong {
    font-size: 11.8px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-long-value strong {
    font-size: 10.8px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-very-long-value strong {
    font-size: 9.7px;
  }
  .dashboard-distribution-item .dashboard-donut-center span {
    font-size: 10px;
  }
  .dashboard-distribution-item .dashboard-donut-legend {
    gap: 5px;
  }
  .dashboard-distribution-item .dashboard-donut-legend > div {
    grid-template-columns: 11px auto auto;
    column-gap: 5px;
    padding: 4px 2px;
  }
  .dashboard-distribution-item .dashboard-donut-legend i {
    width: 10px;
    height: 10px;
  }
  .dashboard-distribution-item .dashboard-donut-legend span {
    max-width: 128px;
    font-size: 12px;
  }
  .dashboard-distribution-item .dashboard-donut-legend strong {
    font-size: 12px;
  }
}

@media (max-height: 820px) and (min-width: 1121px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1.26fr) minmax(0, 1.14fr);
  }
  .dashboard-distribution-item {
    padding: 6px 8px;
  }
  .dashboard-distribution-head h3 {
    font-size: 12px;
  }
  .dashboard-distribution-head span {
    font-size: 8.7px;
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: minmax(124px, 140px) minmax(0, 1fr);
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: clamp(122px, 10vw, 140px);
  }
  .dashboard-distribution-item .dashboard-donut-center strong {
    max-width: 88px;
    font-size: 12px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-won-value strong {
    font-size: 9.8px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-long-value strong {
    font-size: 9px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-very-long-value strong {
    font-size: 8.2px;
  }
  .dashboard-distribution-item .dashboard-donut-center span {
    font-size: 8.8px;
  }
  .dashboard-distribution-item .dashboard-donut-legend {
    gap: 3px;
  }
}

@media (max-width: 1120px) and (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1.16fr) minmax(0, 1.14fr);
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: minmax(104px, 118px) minmax(0, 1fr);
    gap: 7px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: clamp(102px, 10vw, 118px);
  }
  .dashboard-distribution-item .dashboard-donut-legend span,
  .dashboard-distribution-item .dashboard-donut-legend strong {
    font-size: 9.8px;
  }
}

@media (max-width: 760px) {
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: 120px minmax(0, 1fr);
    gap: 11px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: 112px;
  }
  .dashboard-distribution-item .dashboard-donut-legend span,
  .dashboard-distribution-item .dashboard-donut-legend strong {
    font-size: 10.4px;
  }
}

/* v54.61: 도넛 확대 + 최근목록 폭 복원 + 모바일 견적카드 겹침 방지 */
@media (min-width: 1121px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1.18fr) minmax(0, 1.22fr);
  }
  .dashboard-distribution-block {
    padding: 10px 11px;
  }
  .dashboard-distribution-item {
    padding: 7px 8px;
  }
  .dashboard-distribution-head {
    margin-bottom: 2px;
  }
  .dashboard-distribution-head h3 {
    font-size: 14px;
  }
  .dashboard-distribution-head span {
    font-size: 10px;
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: minmax(174px, 188px) minmax(0, 1fr);
    gap: 9px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: clamp(168px, 12.4vw, 188px);
  }
  .dashboard-distribution-item .dashboard-donut-track,
  .dashboard-distribution-item .dashboard-donut-segment {
    stroke-width: 13.5;
  }
  .dashboard-distribution-item .dashboard-donut-segment.is-hovered {
    stroke-width: 16;
  }
  .dashboard-distribution-item .dashboard-donut-center {
    inset: 16.5%;
  }
  .dashboard-distribution-item .dashboard-donut-center strong {
    max-width: 118px;
    font-size: 15.5px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-won-value strong {
    font-size: 12.2px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-long-value strong {
    font-size: 11.2px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-very-long-value strong {
    font-size: 10px;
  }
  .dashboard-distribution-item .dashboard-donut-center span {
    font-size: 10.5px;
  }
  .dashboard-distribution-item .dashboard-donut-legend {
    gap: 5px;
  }
  .dashboard-distribution-item .dashboard-donut-legend > div {
    grid-template-columns: 11px auto auto;
    column-gap: 5px;
    padding: 4px 1px;
  }
  .dashboard-distribution-item .dashboard-donut-legend span {
    max-width: 136px;
    font-size: 12.4px;
  }
  .dashboard-distribution-item .dashboard-donut-legend strong {
    font-size: 12.4px;
  }
}

@media (max-height: 820px) and (min-width: 1121px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1.14fr) minmax(0, 1.26fr);
  }
  .dashboard-distribution-item .dashboard-donut-shell {
    grid-template-columns: minmax(150px, 166px) minmax(0, 1fr);
    gap: 8px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap {
    width: clamp(148px, 11.4vw, 166px);
  }
  .dashboard-distribution-item .dashboard-donut-legend span,
  .dashboard-distribution-item .dashboard-donut-legend strong {
    font-size: 10.8px;
  }
}

@media (max-width: 1120px) and (min-width: 761px) {
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.18fr);
  }
}

@media (max-width: 760px) {
  .dashboard-record-card-quote {
    grid-template-columns: minmax(0, 1fr);
    align-items: start;
    gap: 7px;
  }
  .dashboard-record-card-quote .dashboard-record-eyebrow {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .dashboard-record-card-quote .dashboard-record-side {
    width: 100%;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 6px 10px;
  }
  .dashboard-record-card-quote .dashboard-record-amount {
    min-width: 0;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}


/* v54.62: 모바일 금액·정산 카드 겹침 방지 + 대시보드 스와이프 전환 여유 */
@media (max-width: 760px) {
  #dashboardStage {
    touch-action: pan-y;
  }
  .dashboard-record-card-money {
    grid-template-columns: minmax(0, 1fr);
    align-items: start;
    gap: 7px;
  }
  .dashboard-record-card-money .dashboard-record-eyebrow,
  .dashboard-record-card-money .dashboard-record-title,
  .dashboard-record-card-money .dashboard-record-desc {
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .dashboard-record-card-money .dashboard-record-side {
    width: 100%;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 6px 10px;
  }
  .dashboard-record-card-money .dashboard-record-amount {
    min-width: 0;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}

/* v54.71 금액·정산 도넛 중앙값 분할 */
.dashboard-donut-center.is-split-center{display:grid;grid-template-rows:1fr 1fr;align-content:center;gap:3px;padding:8px 5px}.dashboard-donut-center.is-split-center>span{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;min-width:0;line-height:1.05}.dashboard-donut-center.is-split-center>span+span{border-top:1px solid rgba(148,163,184,.32);padding-top:3px}.dashboard-donut-center.is-split-center em{font-style:normal;font-size:9px;font-weight:800;color:#64748b}.dashboard-donut-center.is-split-center strong{max-width:100%;font-size:11px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* v54.78: 금액/정산 도넛 중앙 4단 배치 및 항목별 색상 정합 */
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack {
  inset: 13%;
  display: grid;
  grid-template-rows: auto auto auto auto;
  align-content: center;
  justify-items: center;
  gap: 0;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > em,
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong {
  display: block;
  width: 100%;
  max-width: none;
  margin: 0;
  overflow: hidden;
  text-align: center;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > em {
  font-style: normal;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong {
  font-size: 9.4px !important;
}
.dashboard-donut-text-color-0 { color: #dc2626 !important; }
.dashboard-donut-text-color-1 { color: #334155 !important; }
.dashboard-donut-text-color-2 { color: #2563eb !important; }
.dashboard-donut-text-color-3 { color: #059669 !important; }
.dashboard-donut-text-color-4 { color: #d97706 !important; }
.dashboard-donut-text-color-5 { color: #7c3aed !important; }
.dashboard-donut-text-color-6 { color: #0891b2 !important; }

@media (max-height: 820px) and (min-width: 761px) {
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack {
    inset: 11%;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > em {
    font-size: 7px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong {
    font-size: 8.6px !important;
  }
}

@media (max-width: 760px) {
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack {
    inset: 12%;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong {
    font-size: 8.2px !important;
  }
}

/* v54.79: 금액/정산 도넛 중앙 공간 확대 + 실제 금액 표시 */
.dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell .dashboard-donut-track,
.dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell .dashboard-donut-segment {
  stroke-width: 10.5;
}
.dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell .dashboard-donut-segment.is-hovered {
  stroke-width: 13;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack {
  inset: 15.5%;
  grid-template-rows: auto auto auto auto;
  align-content: center;
  justify-items: stretch;
  row-gap: 4.5px;
  padding: 4px 3px;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > em {
  font-size: 11px;
  font-weight: 900;
  line-height: 1;
  letter-spacing: -.015em;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong {
  font-variant-numeric: tabular-nums;
  font-size: 15.2px !important;
  font-weight: 900;
  line-height: 1.02;
  letter-spacing: -.045em;
  overflow: visible;
  text-overflow: clip;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong:nth-of-type(1) {
  margin-bottom: 2px;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong:nth-of-type(2) {
  margin-top: 2px;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong.is-center-value-long {
  font-size: 13.2px !important;
  letter-spacing: -.055em;
}
.dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong.is-center-value-very-long {
  font-size: 11.4px !important;
  letter-spacing: -.065em;
}

@media (max-height: 820px) and (min-width: 1121px) {
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack {
    inset: 15.5%;
    row-gap: 3.5px;
    padding: 3px 2px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > em {
    font-size: 10.5px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong {
    font-size: 14.2px !important;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong.is-center-value-long {
    font-size: 12.4px !important;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong.is-center-value-very-long {
    font-size: 10.8px !important;
  }
}

@media (max-width: 1120px) and (min-width: 761px) {
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack {
    inset: 15.5%;
    row-gap: 2px;
    padding: 2px 1px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > em {
    font-size: 8.7px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong {
    font-size: 11px !important;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong.is-center-value-long {
    font-size: 9.5px !important;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong.is-center-value-very-long {
    font-size: 8.4px !important;
  }
}

@media (max-width: 760px) {
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell {
    grid-template-columns: 136px minmax(0, 1fr);
  }
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell .dashboard-donut-wrap {
    width: 130px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack {
    inset: 15.5%;
    row-gap: 2.5px;
    padding: 3px 1px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > em {
    font-size: 9px;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong {
    font-size: 11.4px !important;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong.is-center-value-long {
    font-size: 9.8px !important;
  }
  .dashboard-distribution-item .dashboard-donut-center.is-pair-stack > strong.is-center-value-very-long {
    font-size: 8.6px !important;
  }
}

/* v56.02.07 모바일 현황분포 도넛 중앙정렬 · 금액/정산 잘림 방지 */
@media(max-width:760px){
  .dashboard-distribution-body{justify-content:center;overflow:visible}
  .dashboard-distribution-item{overflow:visible}
  .dashboard-distribution-item .dashboard-donut-shell,
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell{
    width:min(100%,340px);
    max-width:340px;
    margin-inline:auto;
    justify-self:center;
    grid-template-columns:minmax(112px,126px) minmax(0,1fr);
    align-items:center;
    justify-content:center;
    gap:10px;
    padding-inline:2px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap,
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell .dashboard-donut-wrap{
    width:122px;
    max-width:100%;
    justify-self:center;
  }
  .dashboard-distribution-item .dashboard-donut-legend{min-width:0;max-width:100%}
}
@media(max-width:520px){
  .dashboard-distribution-grid{overflow:visible}
  .dashboard-distribution-item .dashboard-donut-shell,
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell{
    width:min(100%,328px);
    grid-template-columns:minmax(108px,122px) minmax(0,1fr);
    gap:9px;
  }
  .dashboard-distribution-item .dashboard-donut-wrap,
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell .dashboard-donut-wrap{width:118px}
  .dashboard-distribution-item .dashboard-donut-legend span{max-width:122px}
}
/* ===== site.css ===== */
.device-toolbar { display:flex; justify-content:space-between; align-items:center; gap:10px; margin-bottom:12px; flex-wrap:wrap; }
.device-actions { display:flex; gap:8px; flex-wrap:wrap; justify-content:flex-end; }
.device-actions select { border:1px solid #d1d5db; border-radius:10px; padding:9px 10px; font-size:14px; background:#fff; }

/* v8: 수정 모드/행 선택/네트워크 요약/대규모 행 비율 */
.device-network-panel { margin: 10px 0 16px; padding: 14px; border: 1px solid #e5e7eb; border-radius: 16px; background: #f9fafb; }
.device-network-panel .section-title { margin-bottom: 10px; }
.compact-wrap { border: 1px solid #e5e7eb; border-radius: 12px; background: #fff; }
.network-table th, .network-table td { padding: 8px; }
.network-table input { width: 100%; min-width: 110px; border: 1px solid #d1d5db; border-radius: 9px; padding: 8px; font-size: 13px; background: #fff; }
.network-table input:disabled, .form-field input:disabled, .form-field select:disabled, .form-field textarea:disabled { background: #f9fafb; color: #475569; cursor: default; }
#siteSaveBtn:disabled { opacity: .45; cursor: not-allowed; }
.site-edit-mode #siteEditToggleBtn { background: #ffedd5; color: #c2410c; }
#deviceTableBody tr { cursor: default; }
.site-edit-mode #deviceTableBody tr { cursor: pointer; }
#deviceTableBody tr.device-row-selected td { background: #eff6ff; outline-color: #bfdbfe; }
#deviceTableBody tr.dragging { opacity: .55; }
#deviceTableBody tr.drag-over td { border-top: 2px solid #2563eb; }
.device-edit-control:disabled { opacity: .45; cursor: not-allowed; }
.bulk-table .bulk-zone-cell { width: 9%; min-width: 88px; }
.bulk-table .bulk-category-cell { width: 11%; min-width: 100px; }
.bulk-table .bulk-model-cell { width: 22%; min-width: 220px; }
.bulk-table .bulk-count-cell { width: 90px; min-width: 86px; }
.bulk-table .bulk-ip-cell { width: 14%; min-width: 138px; }
.bulk-table .bulk-mac-cell { width: 13%; min-width: 128px; }
.bulk-table .bulk-detail-cell { width: 210px; min-width: 200px; }
.bulk-table .bulk-remove-cell { width: 74px; min-width: 70px; }
.bulk-row-detail { min-width: 0; }
.bulk-detail-grid { display: grid; grid-template-columns: 1fr 82px 64px; gap: 8px; width: 100%; box-sizing: border-box; }
.bulk-detail-grid label { min-width: 0; }
.bulk-detail-grid input { min-width: 0; width: 100%; }
@media (max-width: 1320px) {
  .bulk-table { table-layout: auto; }
  .bulk-table .bulk-model-cell { min-width: 210px; }
  .bulk-table .bulk-detail-cell { min-width: 200px; }
}
.device-inline-input {
  width: 100%;
  min-width: 80px;
  padding: 7px 8px;
  border: 1px solid #cbd5e1;
  border-radius: 8px;
  font-size: 13px;
  background: #fff;
  box-sizing: border-box;
}
.device-ip-inline { min-width: 120px; }
.device-mac-inline { min-width: 110px; }
.device-location-inline { min-width: 130px; }
.device-as-inline { min-width: 100px; }
.site-edit-mode #deviceTableBody td { vertical-align: middle; }

/* v16: 통합 네트워크 정보 헤더 안의 한 줄 서브넷 계산기 */
.network-header-line {
  display: grid;
  grid-template-columns: auto minmax(520px, 1fr) auto;
  align-items: center;
  gap: 10px;
}
.network-header-line h2 { white-space: nowrap; }
.network-calc-inline {
  display: grid;
  grid-template-columns: 76px 96px 74px 150px 92px;
  gap: 6px;
  align-items: center;
  justify-self: center;
  max-width: 520px;
  width: 100%;
  padding: 0;
  margin: 0;
  border: 0;
  background: transparent;
}
.network-calc-label {
  font-size: 12px;
  font-weight: 800;
  color: #334155;
  white-space: nowrap;
}
.network-calc-inline input {
  width: 100%;
  min-width: 0;
  border: 1px solid #cbd5e1;
  border-radius: 9px;
  padding: 7px 8px;
  font-size: 12px;
  background: #fff;
  box-sizing: border-box;
}
.network-calc-inline .gateway-input { max-width: 150px; }
.network-calc-inline input:disabled { background: #f8fafc; color: #475569; }

@media (max-width: 1180px) {
  .network-header-line { grid-template-columns: 1fr auto; }
  .network-header-line h2 { grid-column: 1 / 2; }
  .network-calc-inline { grid-column: 1 / -1; justify-self: stretch; max-width: none; order: 3; }
}
@media (max-width: 760px) {
  .network-calc-inline { grid-template-columns: 1fr 1fr; }
  .network-calc-label { grid-column: 1 / -1; }
}
.network-table th:nth-child(1) { min-width: 90px; }
.network-table th:nth-child(2) { min-width: 70px; }
.network-table th:nth-child(3) { min-width: 125px; }
.network-table th:nth-child(4) { min-width: 125px; }
.network-table th:nth-child(5) { min-width: 220px; }
@media (max-width: 1200px) {
  .network-calc-inline { grid-template-columns: 1fr 1fr; }
  .network-calc-label { grid-column: 1 / -1; }
}

/* v17: 통합 네트워크 정보 접기/펼치기 */
.device-network-panel.collapsed { padding-bottom: 8px; }
.device-network-panel.collapsed .network-panel-body { display: none; }
.device-network-panel.collapsed .section-title { margin-bottom: 0; }
.network-toggle-btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  border: 0;
  background: transparent;
  padding: 4px 2px;
  font-size: 18px;
  font-weight: 800;
  color: #111827;
  cursor: pointer;
  white-space: nowrap;
}
.network-toggle-btn .toggle-icon { font-size: 13px; color: #64748b; width: 14px; display: inline-block; }
.network-toggle-btn:hover { color: #2563eb; }
.network-panel-body { margin-top: 10px; }
.device-network-panel.collapsed .network-calc-inline,
.device-network-panel.collapsed .network-header-line > .device-edit-control { display: none; }
.device-network-panel.collapsed .network-header-line { grid-template-columns: 1fr; }

/* v19: 현장 목록 접수일 기준/열기 화살표 위치 조정 */
.site-row .date-cell { white-space: nowrap; color: #475569; font-weight: 700; }
.site-row .arrow-cell { text-align: center; width: 54px; color: #64748b; font-weight: 900; }
#siteTableBody .site-row.selected .arrow-cell { color: #2563eb; }


/* v20-db-step1-memo-fix: 현장메모/작업내용 분리 및 자동 높이 */
.site-memo-grid {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: start;
}
.site-memo-grid .form-field {
  min-width: 0;
}
.form-field textarea.auto-grow-textarea {
  min-height: 112px;
  overflow-y: hidden !important;
  line-height: 1.5;
  resize: none;
}
#regMemo.auto-grow-textarea {
  min-height: 96px;
}
@media (max-width: 1100px) {
  .site-memo-grid { grid-template-columns: 1fr; }
}


/* v20-db-step1-memo-fix4: 현장 목록 간단상세 접수/작업내용 - 기존 배경 + 점선 구분 */
.detail-expand-row > td {
  background: #f8fbff !important;
}
.site-note-rows {
  margin-top: 14px;
  border: 1px dashed #cbd5e1;
  border-radius: 14px;
  background: transparent;
  overflow: hidden;
}
.site-note-row {
  display: grid;
  grid-template-columns: 120px 1fr;
  align-items: stretch;
  background: transparent;
}
.site-note-row + .site-note-row {
  border-top: 1px dashed #cbd5e1;
}
.site-note-label {
  display: flex;
  align-items: center;
  padding: 11px 14px;
  font-weight: 800;
  color: #334155;
  background: transparent;
  border-right: 1px dashed #cbd5e1;
}
.site-note-value {
  padding: 11px 14px;
  min-height: 44px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  word-break: normal;
  background: transparent;
}
@media (max-width: 760px) {
  .site-note-row { grid-template-columns: 1fr; }
  .site-note-label { border-right: 0; border-bottom: 1px dashed #cbd5e1; }
}

/* 상세 기본정보 수정 중에는 수정중 버튼을 다시 눌러 편집모드가 풀리지 않게 고정 */
.site-edit-mode #siteEditToggleBtn:disabled {
  opacity: .85;
  cursor: not-allowed;
}

/* v41: 현장 상세 장비목록 리스트 내부 스크롤 + 파일/문서 목록형 전환 */
#site-detail .tabs {
  position: sticky;
  background: #f3f4f6;
}
.device-scroll-card {
  display: flex;
  flex-direction: column;
  max-height: calc(100vh - 190px);
  min-height: 520px;
  overflow: hidden;
}
.device-scroll-card > .device-toolbar,
.device-scroll-card > .device-network-panel,
.device-scroll-card > .bulk-panel {
  flex: 0 0 auto;
}
.device-list-scroll {
  flex: 1 1 auto;
  min-height: 280px;
  overflow: auto;
  border: 1px solid #e5e7eb;
  border-radius: 14px;
  background: #fff;
}
.attachment-list-card {
  display: flex;
  flex-direction: column;
  min-height: 560px;
  max-height: calc(100vh - 190px);
}
.attachment-guide {
  flex: 0 0 auto;
  margin-top: 0;
  margin-bottom: 12px;
}
.attachment-list-scroll {
  flex: 1 1 auto;
  min-height: 320px;
  overflow: auto;
}
@media (max-width: 900px) {
  .device-scroll-card,
  .attachment-list-card {
    max-height: none;
    min-height: auto;
  }
  .device-list-scroll,
  .attachment-list-scroll {
    max-height: 60vh;
  }
}
.status.gray { background:#f3f4f6; color:#4b5563; }
.link-btn { color:#2563eb; font-weight:800; text-decoration:none; }
.link-btn:hover { text-decoration:underline; }

/* v42: 현장 상세는 상단/요약/탭을 고정하고 탭 아래 내용만 스크롤 */
#site-detail.page.active {
  display: flex;
  flex-direction: column;
  height: calc(100vh - 48px);
  overflow: hidden;
}
#site-detail .detail-header,
#site-detail .detail-summary,
#site-detail .tabs {
  flex: 0 0 auto;
}
#site-detail .tabs {
  position: relative;
  top: auto;
  z-index: 10;
  padding: 10px 0 12px;
  margin-bottom: 0;
  background: #f3f4f6;
  border-bottom: 1px solid #e5e7eb;
}
#site-detail .detail-section {
  min-height: 0;
}
#site-detail .detail-section.active {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  padding-top: 16px;
  padding-right: 4px;
}
#site-detail .detail-section.active::-webkit-scrollbar { width: 10px; }
#site-detail .detail-section.active::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 999px; }
#site-detail .detail-section.active::-webkit-scrollbar-track { background: transparent; }

/* v42: 장비목록는 카드 안쪽 목록만이 아니라 탭 아래 영역 전체가 스크롤되도록 되돌림 */
.device-scroll-card,
.attachment-list-card {
  max-height: none;
  min-height: auto;
  overflow: visible;
}
.device-list-scroll,
.attachment-list-scroll {
  max-height: none;
  overflow: visible;
}
.device-list-scroll table thead th,
.attachment-list-scroll table thead th {
  position: sticky;
  top: 0;
  z-index: 5;
}

@media (max-width: 900px) {
  #site-detail.page.active {
    height: auto;
    min-height: 100vh;
    overflow: visible;
  }
  #site-detail .detail-section.active {
    overflow: visible;
    padding-right: 0;
  }
}


/* v45-12-5: 현장관리 목록 간단상세 펼침 높이 축소 - 전체 페이지 세로 스크롤 최소화 */
.site-quick-detail-cell {
  background: #f8fbff !important;
  padding: 10px 14px !important;
}
.site-quick-detail-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(0, .85fr);
  gap: 10px;
  align-items: start;
}
.site-quick-detail h3,
.site-quick-device h3 {
  margin: 0 0 6px 0;
  font-size: 15px;
  line-height: 1.2;
}
.site-quick-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px 10px;
  margin-bottom: 0 !important;
}
.site-quick-grid .form-field label {
  margin-bottom: 4px;
  font-size: 12px;
}
.site-quick-grid .readonly-box {
  min-height: 34px;
  padding: 7px 9px;
  border-radius: 8px;
  font-size: 13px;
}
.site-quick-detail .site-note-rows {
  margin-top: 8px;
  border-radius: 10px;
}
.site-quick-detail .site-note-row {
  grid-template-columns: 92px 1fr;
}
.site-quick-detail .site-note-label,
.site-quick-detail .site-note-value {
  padding: 7px 10px;
  min-height: 32px;
  font-size: 13px;
}
.site-quick-device table {
  font-size: 13px;
}
.site-quick-device th,
.site-quick-device td {
  padding: 7px 8px;
}
@media (max-width: 1100px) {
  .site-quick-detail-layout { grid-template-columns: 1fr; }
}

/* v51.65 업무일지 보정 */
.modal-close.danger-text {
  color: #d62828;
  background: #fff1f1;
  border-color: #ffd1d1;
}
.modal-close.danger-text:hover {
  background: #ffe2e2;
}
#worklogSiteSelect:disabled {
  background: #f3f4f6;
  color: #6b7280;
  cursor: not-allowed;
}

/* v51.66: 주소록 기반 현장명 후보 */
.site-name-candidate-box {
  margin-top: 8px;
  border: 1px solid #e5e7eb;
  background: #f8fafc;
}
.site-name-candidate-box .small { margin-bottom: 8px; color: #64748b; }
.site-name-candidate-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 4px 6px 4px 0;
  padding: 7px 10px;
  border: 1px solid #d8dee8;
  border-radius: 999px;
  background: #fff;
  color: #111827;
  font-size: 13px;
  cursor: pointer;
  box-shadow: 0 1px 2px rgba(15, 23, 42, .06);
}
.site-name-candidate-chip:hover { border-color: #2563eb; background: #eff6ff; }
.site-name-candidate-chip em { color: #64748b; font-style: normal; font-size: 12px; }

/* v51.78 worklog linked-site inline action */
.inline-field-action{display:flex;gap:8px;align-items:center;width:100%;}
.inline-field-action select{flex:1;min-width:0;}
.small-btn{padding:7px 10px;font-size:12px;white-space:nowrap;}

/* v52.21: 현장등록 주소록 필터/후보현장 보정 */
.address-book-filter-row {
  display: grid;
  grid-template-columns: 170px 1fr;
  gap: 8px;
  align-items: center;
}
.address-book-filter-row select {
  height: 38px;
  border: 1px solid #d8dee8;
  border-radius: 10px;
  padding: 0 10px;
  background: #fff;
  color: #111827;
}
.address-book-filter-guide {
  margin: -4px 0 8px;
}
.site-name-candidate-box.span-2 {
  grid-column: 1 / -1;
}
.site-name-candidate-box {
  display: block;
}
.site-name-candidate-box .site-name-candidate-chip {
  width: 100%;
  justify-content: space-between;
  border-radius: 12px;
  margin: 0;
}
.site-name-candidate-box {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
}
.site-name-candidate-box .small {
  grid-column: 1 / -1;
}
@media (min-width: 1380px) {
  .site-name-candidate-box { grid-template-columns: repeat(5, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
  .address-book-filter-row { grid-template-columns: 1fr; }
  .site-name-candidate-box { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 560px) {
  .site-name-candidate-box { grid-template-columns: 1fr; }
}


/* v52.22: 주소록 불러오기 필터는 새 현장 등록의 현장구분과 자동 연동하므로 별도 선택 탭을 제거 */
.address-book-filter-row {
  display: block;
}
.address-book-filter-row input {
  width: 100%;
}
.site-name-candidate-chip.site-name-only {
  justify-content: center;
  text-align: center;
}
.site-name-candidate-chip.site-name-only span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.site-name-candidate-chip.site-name-only em {
  display: none;
}


.device-quote-material-guide { display:none; margin: 0; padding: 0; }
.device-quote-material-guide.warning { background: #fff7ed; border-color: #fed7aa; color: #9a3412; }
.site-material-usage-table td, .site-material-usage-table th { white-space: nowrap; }
.site-material-usage-table td:nth-child(3), .site-material-usage-table td:nth-child(4), .site-material-usage-table td:nth-child(8) { white-space: normal; }

/* v53.17 현장 자재사용 탭 */
.site-material-usage-wrap { max-height: 520px; }
.site-material-usage-table th,
.site-material-usage-table td { padding: 6px 6px; vertical-align: middle; }
.site-material-usage-table .center { text-align: center; }
.site-material-usage-table .num { text-align: right; white-space: nowrap; }
.site-material-usage-table .usage-input { width: 100%; min-width: 54px; height: 28px; padding: 4px 6px; border: 1px solid var(--line, #d8dde8); border-radius: 8px; font-size: 12px; box-sizing: border-box; background: #fff; }
.site-material-usage-table .usage-name-cell { min-width: 190px; max-width: 260px; }
.site-material-usage-table .usage-name-main { max-width: 250px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.site-material-usage-table .usage-material-select { margin-bottom: 0; }
.site-material-usage-table .usage-category-input { min-width: 80px; }
.site-material-usage-table .usage-spec-input { min-width: 90px; }
.site-material-usage-table .usage-qty-input { width: 70px; }
.site-material-usage-table .usage-unit-input { width: 54px; }
.site-material-usage-table .usage-price-input { width: 82px; }
.site-material-usage-table .usage-date-input { width: 118px; }
.site-material-usage-table .usage-memo-input { min-width: 120px; }
.site-material-usage-table .usage-pending-row { opacity: .72; }
.site-material-usage-table .status-pill { display: inline-flex; align-items: center; justify-content: center; min-width: 34px; height: 22px; padding: 0 7px; border-radius: 999px; font-size: 11px; font-weight: 700; }
.site-material-usage-table .status-pill.blue { background: #e7f0ff; color: #1d4ed8; }
.site-material-usage-table .status-pill.gray { background: #f1f3f5; color: #495057; }

/* v53.18 자재사용 입력 단순화 */
.site-material-usage-table .usage-static-text { display:inline-block; max-width:120px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.site-material-usage-table .usage-material-select { min-width: 180px; }

/* v53.24 협력업체 작업 탭 */
.site-partner-work-wrap { max-height: 460px; }
.site-partner-work-table { min-width: 900px; }
.site-partner-work-table th,
.site-partner-work-table td { padding: 6px 7px; vertical-align: middle; }
.partner-work-input { width: 100%; min-height: 30px; border: 1px solid #d1d5db; border-radius: 8px; padding: 4px 7px; font-size: 12px; background: #fff; box-sizing: border-box; }
.partner-work-date { width: 122px; }
.partner-work-partner { min-width: 150px; }
.partner-work-content { min-width: 220px; }
.partner-work-amount { width: 118px; text-align: right; }
.partner-work-memo { min-width: 150px; }
.site-partner-work-row.settled-row { background: #f8fafc; color: #6b7280; }
.status-pill.warn { background: #fff7ed; color: #c2410c; border-color: #fed7aa; }
.status-pill.done { background: #ecfdf5; color: #047857; border-color: #a7f3d0; }
.status-pill.gray { background: #f3f4f6; color: #6b7280; border-color: #d1d5db; }

/* v53.33 협력업체 지급명세서 정산 진행 상태 */
.site-partner-work-row.pending-row { background: #f8fbff; color: #374151; }
.status-pill.info { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }

/* v54.13: 신규현장 주소록 우선 흐름 / 후보현장 폭주 방지 */
.hidden-form-field { display: none !important; }
.site-register-full-layout { grid-template-columns: minmax(0, 1fr) !important; }
.site-register-full-layout > .card { width: 100%; }
.register-guide-inline { margin-top: 12px; }
#regOrderCompany[readonly], .locked-field[readonly] { background: #f8fafc; color: #475569; cursor: default; }
.address-book-picker-tools { display: grid; grid-template-columns: 210px minmax(0, 1fr); gap: 10px; align-items: center; margin-bottom: 6px; }
.address-book-mode-tabs { display: inline-flex; gap: 6px; align-items: center; justify-content: flex-start; }
.address-book-mode-tabs .btn { min-width: 86px; }
.address-book-mode-tabs .btn.active { background: #111827; color: #fff; border-color: #111827; }
.site-name-candidate-box { max-height: 132px; overflow-y: auto; padding: 8px; border: 1px solid #e5e7eb; border-radius: 12px; background: #f8fafc; }
.site-name-candidate-box .small { grid-column: 1 / -1; margin-bottom: 2px; }
.site-name-candidate-chip.site-name-only { min-height: 32px; padding: 6px 8px; }
@media (max-width: 720px) {
  .address-book-picker-tools { grid-template-columns: 1fr; }
  .address-book-mode-tabs .btn { flex: 1; }
}


/* v54.15 새현장 등록 흐름 정리 */
.site-register-title-row { align-items: flex-start; }
.site-register-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.site-register-form-grid { align-items: end; }
.click-address-input[readonly] { background: #fff; cursor: pointer; }
.partner-site-candidate-list { display: grid; grid-template-columns: 1fr; gap: 8px; max-height: 62vh; overflow-y: auto; padding: 4px; }
.partner-site-candidate-list .site-name-candidate-chip.site-name-only { width: 100%; display: flex; justify-content: space-between; align-items: center; text-align: left; }
.partner-site-candidate-list .site-name-candidate-chip.site-name-only em { margin-left: 10px; color: #64748b; font-style: normal; font-size: 12px; }
#partnerSiteCandidateBtn { align-items: center; }
@media (max-width: 900px) {
  .site-register-actions { width: 100%; justify-content: flex-start; }
  .site-register-form-grid .span-2 { grid-column: span 4; }
}

/* v54.70 장비별 접속정보 한 줄 표시 */
.device-list-scroll table th:nth-child(5),
.device-list-scroll table td:nth-child(5){min-width:104px;width:112px;}
.device-access-cell{min-width:238px;width:255px;}
.device-access-editor{display:grid;grid-template-columns:62px 82px minmax(96px,1fr);gap:4px;align-items:center;}
.device-access-editor .device-access-password{grid-column:auto;}
.device-access-editor .device-inline-input{min-width:0;width:100%;height:30px;padding:4px 7px;font-size:12px;}
.device-access-summary{display:flex;flex-direction:row;align-items:center;gap:8px;line-height:1.15;font-size:11.5px;color:#475569;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.device-access-summary span{display:inline-flex;align-items:center;min-width:0;white-space:nowrap;}
.device-access-summary span:nth-child(1)::before{content:"포트 ";font-weight:800;color:#111827;}
.device-access-summary span:nth-child(2)::before{content:"ID ";font-weight:800;color:#111827;}
.device-access-summary span:nth-child(3)::before{content:"PW ";font-weight:800;color:#111827;}
@media (max-width: 900px){
  .device-access-cell{min-width:150px;width:170px;}
  .device-access-editor{grid-template-columns:1fr 1fr;}
  .device-access-editor .device-access-password{grid-column:1 / -1;}
  .device-access-summary{white-space:normal;flex-wrap:wrap;gap:3px 8px;}
}


/* v54.71 장비목록 컬럼 재배치: MAC 12자리/접속정보 한 줄 완전 표시 */
.device-list-scroll{overflow-x:auto!important;-webkit-overflow-scrolling:touch;}
.device-list-table{width:100%;min-width:1220px;table-layout:fixed;}
.device-list-table col.col-no{width:68px}.device-list-table col.col-category{width:112px}.device-list-table col.col-model{width:150px}.device-list-table col.col-ip{width:132px}.device-list-table col.col-mac{width:148px}.device-list-table col.col-access{width:278px}.device-list-table col.col-location{width:150px}.device-list-table col.col-as{width:120px}.device-list-table col.col-status{width:112px}
.device-list-table th,.device-list-table td{box-sizing:border-box;min-width:0!important;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.device-list-table th:nth-child(4),.device-list-table td:nth-child(4),.device-list-table th:nth-child(5),.device-list-table td:nth-child(5){white-space:nowrap;font-variant-numeric:tabular-nums;overflow:visible;text-overflow:clip}
.device-list-table td:nth-child(5){letter-spacing:.015em;font-size:12px}
.device-list-table .device-access-cell{min-width:0!important;width:auto!important;overflow:visible}
.device-list-table .device-access-summary{width:100%;justify-content:flex-start;overflow:visible;text-overflow:clip;gap:10px;font-size:11.5px}
.device-list-table .device-access-editor{grid-template-columns:64px 84px minmax(112px,1fr);gap:4px}
@media(max-width:900px){.device-list-table{min-width:1180px}.device-list-table .device-access-summary{white-space:nowrap;flex-wrap:nowrap}.device-list-table .device-access-editor{grid-template-columns:64px 84px minmax(112px,1fr)}.device-list-table .device-access-editor .device-access-password{grid-column:auto}}

/* v55.43: 협력업체 후보현장 중복 제거 / 3열 카드형 팝업 */
.partner-site-candidate-list {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
}
.partner-site-candidate-list .site-name-candidate-chip.site-name-only.partner-site-candidate-card {
  min-width: 0;
  min-height: 58px;
  padding: 8px 10px;
  border-radius: 12px;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  gap: 4px;
  text-align: left;
}
.partner-site-candidate-list .partner-site-candidate-card span {
  display: block;
  width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 13px;
  font-weight: 800;
  color: #111827;
}
.partner-site-candidate-list .site-name-candidate-chip.site-name-only.partner-site-candidate-card em {
  display: block;
  width: 100%;
  margin-left: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  font-size: 11px;
  color: #64748b;
}
@media (max-width: 900px) {
  .partner-site-candidate-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 560px) {
  .partner-site-candidate-list { grid-template-columns: 1fr; }
}
#partnerSiteCandidateModal .modal.small-modal {
  width: min(900px, 94vw);
  max-width: 900px;
}

/* v55.95: 장비 원본을 설치/네트워크/녹화기 연결 기준으로 재정리 */
.device-master-table{min-width:1560px;table-layout:fixed}
.device-master-table .col-no{width:72px}.device-master-table .col-category{width:125px}.device-master-table .col-model{width:170px}
.device-master-table .col-install{width:230px}.device-master-table .col-ipmac{width:190px}.device-master-table .col-hub{width:160px}
.device-master-table .col-network{width:220px}.device-master-table .col-recorder{width:145px}.device-master-table .col-as{width:120px}.device-master-table .col-status{width:120px}
.device-stack-inputs{display:grid;gap:5px}.device-two-line{display:grid;gap:3px;min-width:0}.device-two-line strong,.device-two-line span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.device-two-line span{font-size:11px;color:#64748b}.device-network-inline{min-width:150px}.device-hub-inline,.device-zone-inline{min-width:120px}
.device-toolbar .device-actions select.device-edit-control{min-width:112px}
.network-table{min-width:1180px}.network-table th:nth-child(6){width:100px}.network-table th:nth-child(7){width:110px}.network-table th:nth-child(8){width:140px}
.bulk-detail-grid{grid-template-columns:repeat(5,minmax(135px,1fr))}
@media(max-width:900px){.device-master-table{min-width:1460px}.bulk-detail-grid{grid-template-columns:repeat(2,minmax(130px,1fr))}}
.device-network-editor{display:flex;align-items:center;gap:5px;min-width:0}.device-network-editor .device-network-inline{min-width:0;flex:1}.device-access-override-btn{flex:0 0 auto;border:1px solid #d5dbe6;border-radius:8px;background:#fff;color:#64748b;font-size:10px;font-weight:800;padding:6px 7px;cursor:pointer}.device-access-override-btn:hover{border-color:#8aa6e6;background:#f7faff}.device-access-override-btn.active{border-color:#5478c8;background:#edf3ff;color:#2852a4}

/* v55.96: IP LIST 엑셀 직접 가져오기 / 장비목록 간소화 / 네트워크 사용 안내 */
.device-master-table{min-width:1435px}
.device-master-table .col-model{width:185px}.device-master-table .col-install{width:245px}.device-master-table .col-network{width:235px}
.bulk-import-box{display:grid;gap:10px;margin:10px 0 12px;padding:12px;border:1px solid #dbe4f0;border-radius:14px;background:#f7faff}
.bulk-import-fields{display:grid;grid-template-columns:1.15fr 1fr 1.6fr 1fr;gap:8px}.bulk-import-fields label{display:grid;gap:5px;font-size:11px;font-weight:800;color:#475569}.bulk-import-fields select{width:100%;min-width:0;border:1px solid #cbd5e1;border-radius:9px;padding:8px;background:#fff}
.bulk-import-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.bulk-import-actions .small{flex:1;min-width:240px}
.network-usage-guide{display:flex;gap:8px;align-items:flex-start;padding:9px 10px;margin-bottom:9px;border:1px solid #dbe4f0;border-radius:10px;background:#fff;font-size:12px;color:#475569}.network-usage-guide strong{white-space:nowrap;color:#1f2937}.network-bulk-apply{display:flex;gap:7px;align-items:center;margin:0 0 10px}.network-bulk-apply select{min-width:150px;border:1px solid #cbd5e1;border-radius:9px;padding:8px;background:#fff}
@media(max-width:900px){.device-master-table{min-width:1360px}.bulk-import-fields{grid-template-columns:1fr 1fr}.network-usage-guide{display:grid}.network-bulk-apply{flex-wrap:wrap}}
@media(max-width:560px){.bulk-import-fields{grid-template-columns:1fr}}

/* v55.98: 장비 원본·대규모 추가·통합네트워크 드롭다운 공통 둥근 UI */
#site-detail select.device-edit-control,
#site-detail select.device-inline-input,
#site-detail .network-bulk-apply select,
#site-detail .bulk-import-fields select,
#site-detail .bulk-table select {
  -webkit-appearance: none;
  appearance: none;
  border: 1px solid #cbd5e1;
  border-radius: 12px !important;
  padding-right: 32px !important;
  background-color: #fff;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='m6 8 4 4 4-4' stroke='%2364758b' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 10px center;
  background-size: 14px 14px;
  box-sizing: border-box;
}
#site-detail select.device-edit-control:focus,
#site-detail select.device-inline-input:focus,
#site-detail .network-bulk-apply select:focus,
#site-detail .bulk-import-fields select:focus,
#site-detail .bulk-table select:focus {
  outline: none;
  border-color: #93a9dc;
  box-shadow: 0 0 0 3px rgba(71,119,232,.11);
}
#site-detail select.status-select {
  border-radius: 999px !important;
  background-image: none;
  padding-right: 10px !important;
}

/* v56.02.07 현장 목록 밀도 · 펼침내용 최소화 */
#siteTableBody .site-row>td{padding-top:8px;padding-bottom:8px;line-height:1.25}
#siteTableBody .site-row .status{padding-top:4px;padding-bottom:4px}
.site-quick-detail-notes-only .site-note-rows{margin-top:0}
.site-quick-detail-notes-only .site-note-row{grid-template-columns:92px minmax(0,1fr)}
.site-quick-detail-notes-only .site-note-label,
.site-quick-detail-notes-only .site-note-value{min-height:30px;padding:6px 10px;font-size:13px}
.detail-expand-row>.site-quick-detail-cell{padding:7px 12px!important}
/* 공통 보조문구: v53.24 현장관리 안에 있던 실제 전역 최종값을 역할 기준으로 이동 */
.muted { color: #9ca3af; font-size: 12px; }
/* ===== siteDocuments.css ===== */
/* v52.96: 현장 파일/문서 관리 1단계 보정 */
.site-document-header-actions {
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 6px;
}
.site-document-manager {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.site-document-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 2px;
}
.site-document-toolbar.compact {
  margin-top: -2px;
}
.site-document-category-tabs-wrap {
  min-width: 0;
  flex: 1 1 auto;
}
.site-document-category-tabs {
  display: flex;
  align-items: center;
  gap: 5px;
  flex-wrap: wrap;
}
.site-document-category-tab {
  border: 1px solid #d8dee9;
  background: #fff;
  color: #374151;
  border-radius: 999px;
  padding: 6px 10px;
  font-size: 12px;
  font-weight: 800;
  line-height: 1.1;
  cursor: pointer;
}
.site-document-category-tab:hover {
  border-color: #111827;
}
.site-document-category-tab.active {
  background: #111827;
  border-color: #111827;
  color: #fff;
}
.site-document-toolbar-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  flex-wrap: wrap;
}
.site-document-toolbar-actions .btn,
.site-document-header-actions .btn {
  padding: 7px 10px;
  border-radius: 9px;
  font-size: 12px;
  font-weight: 800;
}
.site-document-summary-table,
.site-document-detail-table {
  overflow: auto;
}
.site-document-summary-table table,
.site-document-detail-table table {
  min-width: 940px;
  font-size: 12px;
}
.site-document-summary-table thead th,
.site-document-detail-table thead th {
  position: sticky;
  top: 0;
  z-index: 4;
  background: #f8fafc;
}
.site-document-summary-table th,
.site-document-summary-table td,
.site-document-detail-table th,
.site-document-detail-table td {
  padding: 7px 8px;
  line-height: 1.25;
}
.site-document-row td {
  vertical-align: middle;
}
.site-document-no {
  width: 52px;
  color: #64748b;
  font-weight: 800;
  font-size: 11px;
}
.site-document-title-cell {
  min-width: 150px;
}
.site-document-title-cell strong {
  display: block;
  color: #111827;
  line-height: 1.25;
}
.site-document-title-cell span {
  display: block;
  margin-top: 1px;
  color: #64748b;
  font-size: 11px;
  max-width: 240px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.site-document-file-cell {
  max-width: 280px;
  word-break: break-all;
  color: #334155;
}
.site-document-actions-cell {
  white-space: nowrap;
  gap: 6px;
}
.status.purple {
  background: #f3e8ff;
  color: #7e22ce;
}
.danger-link {
  color: #b91c1c !important;
}
#attachmentModal.site-document-nested-modal,
#attachmentEditModal.site-document-nested-modal,
#attachmentPreviewModal.site-document-nested-modal {
  z-index: 12000 !important;
}
#attachmentModal,
#attachmentEditModal {
  z-index: 12000 !important;
}
#attachmentPreviewModal {
  z-index: 12100 !important;
}
.site-summary-modal .site-summary-modal-body {
  padding-top: 0;
}
@media (max-width: 900px) {
  .site-document-header-actions,
  .site-document-toolbar {
    align-items: stretch;
    justify-content: flex-start;
  }
  .site-document-category-tabs-wrap,
  .site-document-toolbar-actions,
  .site-document-toolbar-actions .btn {
    width: 100%;
  }
  .site-document-category-tabs {
    gap: 5px;
  }
  .site-document-category-tab {
    flex: 1 1 calc(33.333% - 5px);
    text-align: center;
  }
}

/* v52.97: 긴 파일명은 칸을 밀지 않고 말줄임 처리 */
.site-document-summary-table table,
.site-document-detail-table table {
  table-layout: fixed;
}
.site-document-summary-table th:nth-child(1),
.site-document-detail-table th:nth-child(1) { width: 54px; }
.site-document-summary-table th:nth-child(2),
.site-document-detail-table th:nth-child(2) { width: 92px; }
.site-document-summary-table th:nth-child(3),
.site-document-detail-table th:nth-child(3) { width: 190px; }
.site-document-summary-table th:nth-child(4),
.site-document-detail-table th:nth-child(4) { width: 285px; }
.site-document-summary-table th:nth-child(5),
.site-document-detail-table th:nth-child(5) { width: 56px; }
.site-document-summary-table th:nth-child(6),
.site-document-detail-table th:nth-child(6) { width: 70px; }
.site-document-summary-table th:nth-child(7),
.site-document-detail-table th:nth-child(7) { width: 126px; }
.site-document-summary-table th:nth-child(8),
.site-document-detail-table th:nth-child(8) { width: 210px; }
.site-document-file-cell,
.site-document-title-cell strong,
.site-document-title-cell span {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  word-break: normal;
}
.site-document-file-cell span {
  display: block;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* v52.98: 문서함 관리 버튼 크기 통일 및 긴 파일명 안전 처리 */
.site-document-actions-cell .link-btn,
.site-document-actions-cell a.link-btn,
.site-document-actions-cell button.link-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  height: 26px;
  box-sizing: border-box;
  border-radius: 7px;
  font-size: 12px;
  vertical-align: middle;
  text-decoration: none;
}
.site-document-actions-cell button.link-btn {
  font-family: inherit;
}
.site-document-actions-cell .link-btn:hover {
  background: #f1f5f9;
  text-decoration: none;
}
.site-document-actions-cell .danger-link:hover {
  background: #fee2e2;
}
.site-document-file-cell,
.site-document-file-cell span {
  max-width: 100%;
}
.site-document-summary-table td,
.site-document-detail-table td {
  overflow: hidden;
}

/* v52.99: 문서함 수정 버튼 임시 숨김 후 관리 버튼 균일화 */
.site-document-actions-cell .link-btn,
.site-document-actions-cell a.link-btn,
.site-document-actions-cell button.link-btn {
  border: 0 !important;
  background: transparent !important;
  color: #2563eb;
  width: 54px;
  min-width: 54px;
  max-width: 54px;
  height: 26px !important;
  padding: 0 !important;
  margin: 0 !important;
  line-height: 26px !important;
  font-size: 12px !important;
  font-weight: 800;
  text-align: center;
}
.site-document-actions-cell .danger-link {
  color: #b91c1c !important;
}
.site-document-summary-table th:nth-child(8),
.site-document-detail-table th:nth-child(8) { width: 174px; }

/* v55.86 사진/사진대지 업로드 날짜 묶음 */
.site-document-photo-bundle-row td{background:#f8fbff;border-top:1px solid #dbeafe;border-bottom:1px solid #dbeafe;font-weight:700}
.site-document-photo-bundle-row.is-expanded td{background:#eff6ff}
.site-document-bundle-mark{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:22px;padding:0 6px;border-radius:999px;background:#dbeafe;color:#1d4ed8;font-size:10px;font-weight:900}
.site-document-bundle-child td{background:#fff}
.site-document-bundle-child .site-document-no{padding-left:14px;color:#94a3b8}
.site-document-bundle-child .site-document-title-cell strong:before{content:'↳ ';color:#94a3b8}
.site-document-bundle-actions{justify-content:flex-start}
.site-document-bundle-actions .link-btn{width:60px!important;min-width:60px!important;max-width:60px!important}
#attachmentTitle.locked-field{background:#f8fafc;color:#64748b;cursor:default}
@media(max-width:680px){
  .site-document-photo-bundle-row .site-document-title-cell span{white-space:normal;line-height:1.35}
}


/* v55.89 사진 묶음 바로보기 */
.site-document-bundle-actions{flex-wrap:wrap;gap:4px}
.site-document-bundle-actions .site-document-pdf-view{width:auto!important;min-width:76px!important;max-width:none!important;color:#1d4ed8!important;font-weight:900}
/* ===== quote.css ===== */
/* 견적서 전용 스타일: 합계카드/절삭 표시 */
.quote-total-box .raw-total-card {
  background: #eef2ff;
  border-color: #a5b4fc;
}
.quote-total-box .raw-total-card strong {
  color: #3730a3;
}
.quote-total-box .final-card {
  background: #fff7ed;
  border-color: #fb923c;
}
.quote-total-box .final-card strong {
  color: #c2410c;
}
.quote-total-box .round-card {
  background: #fef2f2;
  border-color: #fecaca;
}
.quote-total-box .round-card strong {
  color: #b91c1c;
}
.quote-total-box .final-card em {
  display: block;
  margin-top: 4px;
  color: #7c2d12;
  font-style: normal;
  font-size: 12px;
  font-weight: 800;
}

/* v51_53: 견적서 작성/수정 화면 문서묶음 고정 */
#quoteFormView .quote-doc-bundle-top {
  position: sticky;
  top: 0;
  z-index: 30;
  box-shadow: 0 8px 18px rgba(15, 23, 42, 0.08);
}
#quoteFormView .quote-form-card {
  overflow: visible;
}
@media (max-width: 760px) {
  #quoteFormView .quote-doc-bundle-top {
    top: 0;
  }
}

/* v52.98: 견적서 자재비 행 드래그 UX 보강 */
.quote-material-draggable-row .quote-drag-handle {
  border: 1px solid #d8dee9;
  background: #f8fafc;
  color: #475569;
  cursor: grab;
  -webkit-user-drag: element;
  touch-action: none;
}
.quote-material-draggable-row .quote-drag-handle:hover {
  border-color: #2563eb;
  color: #1d4ed8;
  background: #eff6ff;
}
.quote-material-draggable-row.drag-over td {
  box-shadow: inset 0 2px 0 #2563eb;
}

/* v53.26 협력업체 매출/지급 문서 작성 */
.quote-new-type-card {
  width: min(780px, 94vw) !important;
  max-width: 780px !important;
}
.quote-new-type-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.quote-new-type-income strong {
  color: #166534;
}
.quote-new-type-expense strong {
  color: #991b1b;
}
.quote-partner-doc-card {
  overflow: visible;
}
.quote-partner-doc-form {
  margin-top: 14px;
}
.form-grid.quote-partner-doc-form {
  grid-template-columns:
    minmax(150px, 1.15fr)
    minmax(120px, .86fr)
    minmax(118px, .72fr)
    minmax(118px, .72fr)
    minmax(180px, 1.35fr);
  gap: 8px;
  align-items: end;
}
.quote-partner-doc-form .form-field,
.quote-partner-doc-form input,
.quote-partner-doc-form select {
  min-width: 0;
}
.quote-partner-doc-form input,
.quote-partner-doc-form select {
  width: 100%;
}
@media (max-width: 1040px) {
  .form-grid.quote-partner-doc-form {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .quote-partner-doc-name-field {
    grid-column: span 2;
  }
}
@media (max-width: 720px) {
  .form-grid.quote-partner-doc-form {
    grid-template-columns: 1fr !important;
  }
  .quote-partner-doc-name-field {
    grid-column: auto;
  }
}
.quote-partner-doc-table-wrap {
  margin-top: 14px;
}
.quote-partner-doc-table th,
.quote-partner-doc-table td {
  white-space: normal;
  vertical-align: middle;
}
.partner-doc-inline-amount {
  width: 140px;
  border: 1px solid #d8dee9;
  border-radius: 10px;
  padding: 8px 10px;
  text-align: right;
}
.quote-partner-doc-bottom {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(340px, 480px);
  gap: 14px;
  align-items: start;
  margin-top: 14px;
}
.quote-partner-doc-total-box {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 10px;
  border: 1px solid #e2e8f0;
  border-radius: 16px;
  padding: 12px;
  background: #f8fafc;
}
.quote-partner-doc-total-box input {
  text-align: right;
  font-weight: 800;
}
#quotePartnerDocPreviewModal {
  display: none;
}
.quote-partner-doc-preview-modal {
  width: min(1180px, 96vw);
  height: min(900px, 94vh);
  max-width: none;
  display: flex;
  flex-direction: column;
}
.quote-partner-doc-preview-body {
  flex: 1;
  overflow: auto;
}
.quote-partner-doc-preview-body .quote-doc-sheet {
  margin: 0 auto;
}
.partner-doc-print-sheet {
  background: #fff;
  border: 1px solid #e2e8f0;
  border-radius: 12px;
  padding: 22px;
}
.partner-doc-print-sheet h3 {
  text-align: center;
  font-size: 24px;
  margin: 0 0 18px;
}
.partner-doc-preview-meta {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 8px;
  margin-bottom: 12px;
}
.partner-doc-preview-meta p {
  margin: 0;
  font-size: 13px;
}
.partner-doc-preview-table {
  width: 100%;
  border-collapse: collapse;
}
.partner-doc-preview-table th,
.partner-doc-preview-table td {
  border: 1px solid #cbd5e1;
  padding: 8px;
  font-size: 12.4px;
}
.partner-doc-preview-table th {
  background: #f8fafc;
}
.partner-doc-preview-total {
  margin-top: 14px;
  text-align: right;
}
.partner-doc-preview-total p {
  margin: 4px 0;
}
@media (max-width: 900px) {
  .quote-new-type-grid {
    grid-template-columns: 1fr;
  }
  .quote-partner-doc-bottom {
    grid-template-columns: 1fr;
  }
  .quote-partner-doc-total-box {
    grid-template-columns: 1fr;
  }
  .partner-doc-preview-meta {
    grid-template-columns: 1fr;
  }
}

/* v53.29 견적서 목록/협력업체 문서 UI 보정 */
.quote-list-table {
  table-layout: auto;
}
.quote-list-table th,
.quote-list-table td {
  padding: 8px 7px;
  font-size: 13px;
  vertical-align: middle;
}
.quote-list-table th:nth-child(1), .quote-list-table td:nth-child(1) { width: 112px; white-space: nowrap; }
.quote-list-table th:nth-child(2), .quote-list-table td:nth-child(2) { width: 82px; white-space: nowrap; }
.quote-list-table th:nth-child(3), .quote-list-table td:nth-child(3) { width: 118px; white-space: nowrap; }
.quote-list-table th:nth-child(4), .quote-list-table td:nth-child(4) { width: 96px; white-space: nowrap; }
.quote-list-table th:nth-child(5), .quote-list-table td:nth-child(5) { width: 180px; max-width: 220px; }
.quote-list-table th:nth-child(7), .quote-list-table td:nth-child(7),
.quote-list-table th:nth-child(8), .quote-list-table td:nth-child(8) { width: 108px; white-space: nowrap; text-align: right; }
.quote-list-table th:nth-child(9), .quote-list-table td:nth-child(9) { width: 82px; white-space: nowrap; text-align: center; }
.quote-list-table td:nth-child(5),
.quote-list-table td:nth-child(6) {
  overflow: hidden;
  text-overflow: ellipsis;
}
.quote-partner-doc-bundle {
  margin-top: 12px;
}
.quote-partner-doc-bundle .doc-primary-chip {
  background: #111827;
  color: #fff;
  border-color: #111827;
}
.quote-partner-doc-bundle .doc-chip:disabled {
  opacity: .55;
  cursor: not-allowed;
}
.quote-partner-doc-notice {
  margin-top: 10px;
}
@media (max-width: 900px) {
  .quote-list-table th, .quote-list-table td { padding: 7px 6px; font-size: 12px; }
}

/* v53.40 작업내역서/지급명세서: 기본 견적서 양식 기준 통합 보정 */
.quote-partner-doc-preview-body .quote-doc-sheet {
  max-width: 794px;
}
.quote-formal-sheet.partner-doc-print-sheet {
  width: 794px;
  min-height: 1123px;
  margin: 0 auto 18px;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none;
  padding: 14px !important;
  background: #fff;
  font-size: 12.4px;
}
.quote-formal-title .partner-doc-title-word {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  line-height: 1;
  font-size: 30px;
  font-weight: 900;
  letter-spacing: 0;
  transform: translateX(2px);
  white-space: nowrap;
}
.partner-doc-formal-table {
  font-size: 12px;
}
.partner-doc-formal-table th,
.partner-doc-formal-table td {
  height: 23px;
  padding: 2px 5px;
  word-break: keep-all;
  overflow: visible;
}
.partner-doc-formal-table .partner-doc-item-row td {
  height: calc(23px * var(--partner-doc-row-slots, 1));
}
.partner-doc-formal-table .partner-doc-expanded-row td {
  vertical-align: top;
  padding-top: 4px;
  padding-bottom: 4px;
}
.partner-doc-formal-table .partner-doc-site-cell,
.partner-doc-formal-table .partner-doc-content-cell,
.partner-doc-formal-table .partner-doc-note-cell {
  word-break: break-word;
  white-space: normal;
  line-height: 1.18;
  vertical-align: middle;
}
.partner-doc-formal-table .partner-doc-expanded-row .partner-doc-site-cell,
.partner-doc-formal-table .partner-doc-expanded-row .partner-doc-content-cell,
.partner-doc-formal-table .partner-doc-expanded-row .partner-doc-note-cell {
  vertical-align: top;
}
.partner-doc-formal-table .partner-doc-money-cell {
  white-space: nowrap;
}
.partner-doc-formal-table .partner-doc-blank-row td {
  height: 23px;
  overflow: hidden;
}
.partner-doc-bottom-block > td {
  padding: 0 !important;
  border: 0 !important;
  overflow: visible !important;
}
.partner-doc-bottom-table {
  width: 100%;
  border-collapse: collapse;
  table-layout: fixed;
  font-size: 12.3px;
  background: #fff;
}
.partner-doc-bottom-table th,
.partner-doc-bottom-table td {
  border: 1px solid #222;
  height: 28px;
  padding: 3px 7px !important;
  background: #fff !important;
  color: #111 !important;
  text-align: center;
  vertical-align: middle;
  font-weight: 700;
  line-height: 1.24;
  overflow: visible;
  word-break: keep-all;
  white-space: normal;
}
.partner-doc-bottom-table th {
  font-size: 13.1px;
  letter-spacing: -.25px;
  white-space: nowrap;
}
.partner-doc-bottom-table td {
  font-size: 13px;
  word-break: break-word;
}
@media (max-width: 900px) {
  .quote-formal-sheet.partner-doc-print-sheet {
    transform: scale(.78);
    transform-origin: top center;
    margin-bottom: -230px;
  }
}


/* v53.86 문서업무 신규작성 2x2 기본 구조 */
.quote-new-type-card {
  width: min(820px, 94vw) !important;
  max-width: 820px !important;
}
.quote-new-type-grid.quote-new-type-grid-v5386 {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.quote-new-type-handover strong {
  color: #1d4ed8;
}
@media (max-width: 720px) {
  .quote-new-type-grid.quote-new-type-grid-v5386 {
    grid-template-columns: 1fr;
  }
}

/* v54.00 협력업체 저장문서 원본 PDF 확인 */
.quote-partner-saved-pdf-frame-wrap {
  width: 100%;
  height: calc(100vh - 170px);
  min-height: 680px;
  background: #f3f4f6;
  border: 1px solid #d1d5db;
  border-radius: 12px;
  overflow: hidden;
}
.quote-partner-saved-pdf-frame {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
  background: #fff;
}
@media (max-width: 900px) {
  .quote-partner-saved-pdf-frame-wrap {
    height: calc(100vh - 140px);
    min-height: 520px;
  }
}

/* v55.70: 현장관리 목록 1건 기준 견적안(1안~3안) 묶음 */
#quoteFormView .quote-option-bar {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  width: 100%;
  min-width: 0;
}
#quoteFormView .quote-option-label {
  flex: 0 0 auto;
  margin-right: 4px;
}
#quoteFormView .quote-option-chips {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  min-width: 0;
}
#quoteFormView .quote-option-chip {
  cursor: pointer;
  min-width: 58px;
}
#quoteFormView .quote-option-chip .quote-option-status-dot {
  display: inline-block;
  width: 6px;
  height: 6px;
  margin-left: 6px;
  margin-right: 0;
  border-radius: 999px;
  background: #94a3b8;
  vertical-align: middle;
}
#quoteFormView .quote-option-chip.option-contract .quote-option-status-dot { background: #ea580c; }
#quoteFormView .quote-option-chip.option-done .quote-option-status-dot { background: #16a34a; }
#quoteFormView .quote-option-chip.option-cancel { opacity: .62; text-decoration: line-through; }
#quoteFormView .quote-option-chip.option-cancel .quote-option-status-dot { background: #94a3b8; }
#quoteFormView .quote-option-add {
  cursor: pointer;
  border-style: dashed;
  background: #f8fafc;
}
#quoteFormView .quote-option-add:disabled {
  cursor: not-allowed;
  opacity: .48;
}
#quoteFormView .quote-option-hint {
  margin-left: auto;
  color: #64748b;
  font-size: 11px;
  font-weight: 700;
}
#quoteFormView .quote-doc-bundle-divider {
  width: 100%;
  height: 1px;
  margin: 2px 0;
  background: #e2e8f0;
}
.quote-option-list-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 36px;
  margin-right: 6px;
  padding: 2px 7px;
  border: 1px solid #cbd5e1;
  border-radius: 999px;
  background: #f8fafc;
  color: #334155;
  font-size: 11px;
  font-weight: 800;
  line-height: 1.4;
}
@media (max-width: 720px) {
  #quoteFormView .quote-option-bar {
    flex-wrap: nowrap;
    overflow-x: auto;
    padding-bottom: 4px;
  }
  #quoteFormView .quote-option-chips {
    flex-wrap: nowrap;
    flex: 0 0 auto;
  }
  #quoteFormView .quote-option-hint {
    display: none;
  }
  #quoteFormView .quote-option-chip,
  #quoteFormView .quote-option-add,
  #quoteFormView .quote-option-label {
    white-space: nowrap;
    flex: 0 0 auto;
  }
}

/* v56.02.01 문서목록 제목·검색 배치 */
.quote-list-title-row{
  display:flex;
  align-items:center;
  gap:16px;
}
.quote-list-title-copy{
  display:flex;
  align-items:center;
  gap:9px;
  flex:none;
  min-width:0;
}
.quote-list-title-copy h2{
  margin:0;
  white-space:nowrap;
}
.quote-list-search-actions{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:8px;
  flex:1 1 auto;
  min-width:0;
}
.quote-list-search-actions input{
  flex:1 1 620px;
  width:min(760px,100%);
  max-width:760px;
  min-width:220px;
  min-height:42px;
  border:1px solid #d7dde8;
  border-radius:13px;
  background:#fff;
  padding:9px 13px;
  font-size:13px;
  outline:0;
}
.quote-list-search-actions input:focus{
  border-color:#93a9dc;
  box-shadow:0 0 0 3px rgba(71,119,232,.1);
}
.quote-list-search-actions select{
  flex:0 0 120px;
  min-height:42px;
}
@media(max-width:760px){
  .quote-list-title-row{
    align-items:stretch;
    flex-direction:column;
    gap:9px;
  }
  .quote-list-search-actions{
    width:100%;
  }
  .quote-list-search-actions input{
    flex:1 1 auto;
    min-width:0;
    max-width:none;
  }
  .quote-list-search-actions select{
    flex-basis:105px;
  }
}
.quote-list-search-actions > .jh-select{
  flex:0 0 120px;
  min-width:120px;
}
@media(max-width:760px){
  .quote-list-search-actions > .jh-select{
    flex-basis:105px;
    min-width:105px;
  }
}
/* ===== responsive.css ===== */
@media (max-width: 1100px) { .grid-4, .detail-summary { grid-template-columns: repeat(2, 1fr); } .grid-2 { grid-template-columns: 1fr; } .form-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 760px) { .layout { flex-direction: column; } .sidebar { width: 100%; } .grid-4, .form-grid, .detail-summary { grid-template-columns: 1fr; } .topbar, .detail-header { align-items: flex-start; flex-direction: column; } .toolbar-inner, .search-box { flex-direction: column; align-items: stretch; } .span-2 { grid-column: span 1; } }
@media (max-width: 1100px) { .dashboard-layout { grid-template-columns:1fr; } }
@media (max-width: 760px) { .dash-list li { grid-template-columns:1fr; align-items:flex-start; } .dash-list .time { width:max-content; } }

/* v46 patch15 override */
@media (max-width: 760px) {
  html, body { max-width: 100%; overflow-x: hidden; }
  .layout { display: block !important; min-height: 100vh; }
  .sidebar {
    position: sticky !important;
    top: 0 !important;
    z-index: 9000 !important;
    width: 100% !important;
    height: auto !important;
    min-height: 0 !important;
    overflow: visible !important;
    padding: 10px 12px !important;
  }
  .sidebar-topline { display: flex; align-items: center; gap: 10px; margin: 0 !important; }
  .brand-logo { height: 42px !important; margin: 0 !important; padding: 6px 10px !important; flex: 1; justify-content: flex-start; }
  .brand-logo img { max-height: 30px !important; width: auto; }
  .sidebar-toggle { flex: 0 0 42px; width: 42px !important; height: 42px !important; }
  .sidebar .menu-title { display: none !important; }
  .sidebar .menu {
    position: absolute !important;
    left: 12px !important;
    top: calc(100% + 8px) !important;
    width: min(260px, calc(100vw - 24px)) !important;
    max-height: 72vh !important;
    overflow: auto !important;
    padding: 10px !important;
    border: 1px solid rgba(148,163,184,.28) !important;
    border-radius: 16px !important;
    background: #111827 !important;
    box-shadow: 0 22px 60px rgba(15,23,42,.32) !important;
    display: none !important;
  }
  body.mobile-menu-open .sidebar .menu { display: grid !important; gap: 4px; }
  .sidebar .menu a { margin-bottom: 0 !important; display: flex !important; align-items: center; gap: 10px; padding: 11px 12px !important; }
  .sidebar .menu a::before { display: inline-flex !important; content: attr(data-icon); width: 22px; justify-content: center; color: #fca5a5; }
  .sidebar:not(.collapsed) .menu a::before { display: inline-flex !important; }
  .sidebar .menu-text { display: inline !important; opacity: 1 !important; }
  .main { width: 100% !important; max-width: 100vw !important; padding: 12px !important; overflow-x: hidden !important; }
  .page.active, .card, .quote-form-card, .quote-doc-panel, .quote-doc-bundle-top, .quote-document-preview { max-width: 100% !important; }
  .card { overflow: hidden !important; padding: 14px !important; border-radius: 16px !important; }
  .table-wrap, .preview-wrap { width: 100% !important; max-width: 100% !important; overflow-x: auto !important; -webkit-overflow-scrolling: touch; }
  .table-wrap table { min-width: 720px; }
  .quote-doc-chips { max-width: 100%; overflow-x: auto; flex-wrap: nowrap !important; padding-bottom: 4px; }
  .quote-doc-chips .doc-chip { white-space: nowrap; flex: 0 0 auto; }
  .quote-single-form-grid, .form-grid { grid-template-columns: 1fr !important; }
  .device-actions, .detail-actions, .toolbar, .quote-toolbar, .search-box { max-width: 100%; }
  input, select, textarea { max-width: 100%; }
  .quote-mini-popover { max-width: calc(100vw - 32px); }
}

/* v52.62: 모바일 메뉴 로그아웃 버튼 */
.sidebar .menu a.mobile-logout-link { display: none !important; }
@media (max-width: 760px) {
  .sidebar .menu a.mobile-logout-link {
    display: flex !important;
    color: #fecaca !important;
    border-top: 1px solid rgba(255,255,255,.12) !important;
    margin-top: 6px !important;
    padding-top: 13px !important;
  }
}


/* v54.62: 모바일 메뉴 외부 터치 차단용 투명 레이어 */
@media (max-width: 760px) {
  body.mobile-menu-open::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: 8990;
    background: rgba(15,23,42,.08);
    pointer-events: auto;
  }
  body.mobile-menu-open .sidebar {
    z-index: 9000 !important;
  }
}

/* v54.71 휴대폰 가로모드: 모바일 UI 유지 + 좌/우 독립 스크롤 */
@media (orientation:landscape) and (max-height:620px) and (hover:none) and (pointer:coarse){
html,body{height:100%;max-height:100%;overflow:hidden!important}.layout{display:grid!important;grid-template-columns:220px minmax(0,1fr)!important;flex-direction:initial!important;width:100vw!important;height:100dvh!important;min-height:0!important;overflow:hidden!important}.sidebar{position:relative!important;inset:auto!important;width:220px!important;height:100dvh!important;min-height:0!important;max-height:none!important;overflow-y:auto!important;overflow-x:hidden!important;padding:10px!important;border-radius:0!important;z-index:30!important;overscroll-behavior:contain}.sidebar-topline{position:sticky!important;top:0!important;z-index:3!important;background:#111827!important;padding-bottom:8px!important}.sidebar-toggle{display:none!important}.sidebar .menu-title{display:block!important}.sidebar .menu{position:static!important;display:grid!important;width:100%!important;max-height:none!important;overflow:visible!important;padding:0!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;gap:4px!important}.sidebar .menu a{display:flex!important;align-items:center!important;gap:9px!important;margin:0!important;padding:10px 9px!important;white-space:nowrap!important}.sidebar .menu a::before{display:inline-flex!important;content:attr(data-icon);width:22px;justify-content:center;color:#fca5a5}.sidebar .menu-text{display:inline!important;opacity:1!important}.sidebar .menu a.mobile-logout-link{display:flex!important}.sidebar-account{display:none!important}body.mobile-menu-open::before{display:none!important}.main{width:auto!important;max-width:none!important;height:100dvh!important;min-height:0!important;overflow-y:auto!important;overflow-x:hidden!important;padding:10px 12px!important;overscroll-behavior:contain}.page.active{min-height:auto!important;max-width:100%!important}.grid-4,.detail-summary{grid-template-columns:repeat(2,minmax(0,1fr))!important}.form-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important}.topbar,.detail-header{flex-direction:row!important;align-items:center!important}.toolbar-inner,.search-box{flex-direction:row!important;align-items:center!important}.table-wrap{overflow-x:auto!important;-webkit-overflow-scrolling:touch}#dashboardStage{touch-action:pan-y!important;overflow:visible!important;min-height:auto!important}.dashboard-category-row{display:flex!important;overflow-x:auto!important;scroll-snap-type:x mandatory;gap:8px;padding-bottom:4px}.dashboard-category-card{flex:0 0 184px!important;scroll-snap-align:start}.dashboard-overview-grid,.dashboard-skeleton-overview{grid-template-columns:1fr!important}.dashboard-distribution-grid{display:flex!important;grid-template-columns:none!important;overflow-x:auto!important;scroll-snap-type:x mandatory;gap:10px!important;padding-bottom:5px!important}.dashboard-distribution-item{flex:0 0 min(360px,76vw)!important;min-width:min(360px,76vw)!important;scroll-snap-align:start;border:1px solid #e2e8f0!important;border-radius:15px!important}.dashboard-distribution-item .dashboard-donut-shell{grid-template-columns:minmax(135px,155px) minmax(0,1fr)!important}.dashboard-record-list{max-height:none!important}.quote-dashboard-fixed,.quote-dashboard-optional{display:flex!important;overflow-x:auto!important;scroll-snap-type:x mandatory}.quote-dashboard-stack .dashboard-action-card{flex:0 0 210px!important;scroll-snap-align:start}}

/* v55.15 그룹 표시 / v55.16 분류 제목 가독성 보강 */
@media (max-width: 760px) {
  .sidebar .menu .sidebar-menu-section {
    display: grid !important;
    grid-template-columns: 1fr;
    gap: 5px;
    margin: 0 0 11px !important;
    padding: 10px 0 0 !important;
    border-top: 1px solid rgba(255,255,255,.10) !important;
  }
  .sidebar .menu .sidebar-menu-section:first-child {
    padding-top: 0 !important;
    border-top: 0 !important;
  }
  .sidebar .menu .menu-section-title,
  .sidebar.collapsed .menu .menu-section-title {
    display: flex !important;
    width: auto !important;
    height: auto !important;
    min-height: 21px !important;
    margin: 0 0 6px !important;
    padding: 0 8px !important;
    color: #aeb8c7 !important;
    font-size: 12px !important;
    font-weight: 700 !important;
    letter-spacing: .04em !important;
    opacity: 1 !important;
  }
  .sidebar .menu .menu-section-title::before,
  .sidebar.collapsed .menu .menu-section-title::before {
    display: block !important;
  }
}

@media (orientation:landscape) and (max-height:620px) and (hover:none) and (pointer:coarse) {
  .sidebar .menu .sidebar-menu-section {
    display: grid !important;
    gap: 5px !important;
    margin: 0 0 11px !important;
    padding-top: 10px !important;
    border-top: 1px solid rgba(255,255,255,.10) !important;
  }
  .sidebar .menu .sidebar-menu-section:first-child {
    padding-top: 0 !important;
    border-top: 0 !important;
  }
  .sidebar .menu .menu-section-title {
    display: flex !important;
    height: auto !important;
    min-height: 21px !important;
    margin: 0 0 6px !important;
    padding: 0 8px !important;
    color: #aeb8c7 !important;
    font-size: 12px !important;
    font-weight: 700 !important;
    letter-spacing: .04em !important;
    opacity: 1 !important;
  }
}


/* v55.88 모바일 상단 고정·아이콘 메뉴·오버스크롤 안정화 */
@media (max-width: 760px) {
  .sidebar {
    position: fixed !important;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    width: 100% !important;
    padding: calc(8px + env(safe-area-inset-top, 0px)) 12px 8px !important;
    border-radius: 0 0 16px 16px !important;
    box-shadow: 0 8px 22px rgba(15,23,42,.18) !important;
  }
  .sidebar-topline { position: relative !important; min-height: 48px !important; gap: 8px !important; }
  .main { padding-top: calc(76px + env(safe-area-inset-top, 0px)) !important; }
  .sidebar-topline .brand-logo {
    max-width: calc(100% - 112px) !important;
    height: 48px !important;
    padding: 6px 2px !important;
  }
  .sidebar-topline .sidebar-toggle,
  .sidebar-topline .mobile-account-toggle {
    flex: 0 0 48px !important;
    width: 48px !important;
    min-width: 48px !important;
    height: 48px !important;
    padding: 0 !important;
    border-radius: 12px !important;
    touch-action: manipulation;
  }
  .sidebar-toggle-label { display: none !important; }
  .sidebar.collapsed .sidebar-toggle .toggle-open { display: inline-flex !important; }
  .sidebar.collapsed .sidebar-toggle .toggle-closed { display: none !important; }
  .sidebar .menu {
    left: auto !important;
    right: 12px !important;
    top: calc(100% + 7px) !important;
    width: min(292px, calc(100vw - 24px)) !important;
    max-height: min(72vh, calc(100dvh - 92px)) !important;
    overscroll-behavior: contain !important;
    -webkit-overflow-scrolling: touch;
  }
  body.mobile-menu-open { overscroll-behavior: none; }
}

/* 휴대폰 가로모드는 기존 좌측 고정 메뉴 구조 유지 */
@media (orientation:landscape) and (max-height:620px) and (hover:none) and (pointer:coarse) {
  .sidebar { position: relative !important; inset: auto !important; padding: 10px !important; box-shadow: none !important; }
  .main { padding-top: 10px !important; }
  .mobile-account-toggle, .mobile-account-menu { display: none !important; }
}

/* v56.02.09 모바일 대시보드 도넛·가로모드 안정화 */
@media (max-width: 760px) {
  /* 모바일에서는 범례 문구가 생략되므로 색상 점까지 숨기고 도넛 자체를 중앙 배치한다. */
  .dashboard-distribution-item .dashboard-donut-legend {
    display: none !important;
  }
  .dashboard-distribution-item .dashboard-donut-shell,
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell {
    width: min(100%, 176px) !important;
    max-width: 176px !important;
    grid-template-columns: minmax(0, 1fr) !important;
    justify-items: center !important;
    gap: 0 !important;
    margin-inline: auto !important;
    padding-inline: 0 !important;
  }
  .dashboard-distribution-item .dashboard-donut-wrap,
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell .dashboard-donut-wrap {
    width: 124px !important;
    justify-self: center !important;
  }
}

/* 휴대폰 가로모드: 대시보드 각 영역을 독립적으로 줄여 겹침 없이 세로 스크롤한다. */
@media (orientation: landscape) and (max-height: 620px) and (hover: none) and (pointer: coarse) {
  .layout {
    grid-template-columns: 176px minmax(0, 1fr) !important;
  }
  .sidebar {
    width: 176px !important;
    padding: 8px !important;
  }
  .sidebar .menu a {
    gap: 7px !important;
    padding: 8px 7px !important;
    font-size: 12px !important;
  }
  .sidebar .menu .menu-section-title {
    padding-inline: 6px !important;
    font-size: 10.5px !important;
  }
  .main {
    padding: 8px 10px !important;
  }
  #dashboard.page.active {
    display: block !important;
    height: auto !important;
    min-height: 100% !important;
    overflow: visible !important;
  }
  #dashboard .dashboard-topbar {
    flex-direction: row !important;
    align-items: center !important;
    margin-bottom: 7px !important;
  }
  #dashboard .dashboard-topbar .sub {
    display: none !important;
  }
  #dashboard .dashboard-topbar h1 {
    font-size: 21px !important;
  }
  .dashboard-updated {
    padding: 6px 8px !important;
    font-size: 10px !important;
  }
  .dashboard-category-row {
    display: flex !important;
    gap: 7px !important;
    margin-bottom: 8px !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    scroll-snap-type: x proximity;
    padding-bottom: 3px !important;
  }
  .dashboard-category-card {
    flex: 0 0 158px !important;
    min-height: 72px !important;
    grid-template-columns: 30px minmax(0, 1fr) 10px !important;
    gap: 7px !important;
    padding: 8px 9px !important;
    border-radius: 13px !important;
    scroll-snap-align: start;
  }
  .dashboard-card-icon {
    width: 30px !important;
    height: 30px !important;
    border-radius: 9px !important;
  }
  .dashboard-card-icon svg {
    width: 17px !important;
    height: 17px !important;
  }
  .dashboard-card-title {
    margin-bottom: 2px !important;
    font-size: 9.5px !important;
  }
  .dashboard-card-value {
    font-size: 16px !important;
  }
  .dashboard-card-sub,
  .dashboard-card-arrow {
    display: none !important;
  }
  .dashboard-stage {
    min-height: auto !important;
    padding: 10px !important;
    border-radius: 15px !important;
    overflow: visible !important;
  }
  .dashboard-panel {
    height: auto !important;
    min-height: 0 !important;
  }
  .dashboard-panel-head {
    align-items: center !important;
    margin-bottom: 8px !important;
  }
  .dashboard-panel-head h2 {
    font-size: 17px !important;
  }
  .dashboard-panel-head p {
    display: none !important;
  }
  .dashboard-panel-action {
    padding: 6px 8px !important;
    font-size: 10px !important;
  }
  .dashboard-metric-strip {
    display: flex !important;
    gap: 7px !important;
    margin-bottom: 8px !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    padding-bottom: 3px !important;
  }
  .dashboard-metric {
    flex: 0 0 148px !important;
    padding: 8px 9px !important;
    border-radius: 11px !important;
  }
  .dashboard-metric strong {
    font-size: 16px !important;
  }
  .dashboard-content-grid,
  .dashboard-overview-grid,
  .dashboard-skeleton-overview {
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 8px !important;
  }
  .dashboard-block,
  .dashboard-recent-block,
  .dashboard-distribution-block {
    min-height: 0 !important;
    height: auto !important;
  }
  .dashboard-distribution-grid {
    display: flex !important;
    gap: 8px !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    scroll-snap-type: x proximity;
    padding-bottom: 4px !important;
  }
  .dashboard-distribution-item {
    flex: 0 0 210px !important;
    min-width: 210px !important;
    padding: 7px 8px !important;
    scroll-snap-align: start;
  }
  .dashboard-distribution-head h3 {
    font-size: 11.5px !important;
  }
  .dashboard-distribution-head span {
    display: none !important;
  }
  .dashboard-distribution-item .dashboard-donut-legend {
    display: none !important;
  }
  .dashboard-distribution-item .dashboard-donut-shell,
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell {
    width: 100% !important;
    max-width: none !important;
    grid-template-columns: minmax(0, 1fr) !important;
    justify-items: center !important;
    gap: 0 !important;
    margin-inline: auto !important;
  }
  .dashboard-distribution-item .dashboard-donut-wrap,
  .dashboard-distribution-item .dashboard-donut-shell.is-split-center-shell .dashboard-donut-wrap {
    width: 116px !important;
    justify-self: center !important;
  }
  .dashboard-record-grid {
    grid-template-columns: minmax(0, 1fr) !important;
  }
  .dashboard-record-card {
    min-width: 0 !important;
  }
}
/* ===== manualDocuments.css ===== */
/* v54.70 CMS 매뉴얼 UI 정리·자동 문서명 */
.quote-manual-view{margin-top:14px;}
.quote-manual-card{padding:14px 16px;}
.quote-manual-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:12px;}
.quote-manual-head h2{margin:3px 0 5px;font-size:22px;}
.quote-manual-head .eyebrow{font-size:11px;font-weight:900;letter-spacing:.08em;color:#dc2626;}
.quote-manual-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;}
.quote-manual-layout{display:grid;grid-template-columns:minmax(300px,370px) minmax(0,1fr);gap:14px;align-items:start;}
.quote-manual-form{min-width:0;}
.quote-manual-form .form-grid{gap:9px 12px;}
.quote-manual-form .form-field{gap:4px;}
.quote-manual-form .form-field .small{margin-top:2px;line-height:1.35;}
.quote-manual-preview-pane{align-self:start;}

.manual-sync-check{display:flex;align-items:flex-start;gap:8px;margin:9px 0;padding:8px 10px;border:1px solid #e2e8f0;border-radius:10px;background:#f8fafc;font-size:13px;font-weight:700;color:#334155;}
.manual-sync-check input{margin-top:2px;}
.quote-manual-preview-pane{min-width:0;border:1px solid #dbe2ea;border-radius:14px;background:#f3f4f6;padding:12px;}
.quote-manual-preview-toolbar{display:flex;align-items:center;justify-content:space-between;margin:0 2px 10px;}
.honeywell-manual-sheet{position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;background:#000;border-radius:8px;box-shadow:0 10px 30px rgba(15,23,42,.18);container-type:inline-size;}
.honeywell-manual-sheet>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;user-select:none;pointer-events:none;}
.manual-overlay{position:absolute;display:flex;align-items:center;color:#f8fafc;white-space:nowrap;overflow:hidden;text-overflow:clip;line-height:1;font-family:"Noto Sans KR","Noto Sans CJK KR","NanumGothic",sans-serif;z-index:2;}
.manual-revision-suffix{left:81.72%;top:1.48%;width:16.98%;height:4.45%;font-size:1.18cqw;justify-content:center;font-weight:500;}
.manual-mac-ip{left:86.35%;top:8.05%;width:12.05%;height:4.4%;font-size:1.23cqw;padding-left:.65%;font-weight:500;}
.manual-port{left:86.35%;top:12.45%;width:12.05%;height:4.4%;font-size:1.23cqw;padding-left:.65%;font-weight:500;}
.manual-login-id{left:86.35%;top:16.85%;width:12.05%;height:4.4%;font-size:1.23cqw;padding-left:.65%;font-weight:500;}
.manual-password{left:86.35%;top:21.25%;width:12.05%;height:4.4%;font-size:1.23cqw;padding-left:.65%;font-weight:500;}
.manual-document-preview-modal{width:min(96vw,1500px);max-width:none;max-height:96vh;display:flex;flex-direction:column;}
.manual-document-preview-body{padding:14px;background:#0b0b0b;overflow:auto;flex:1;min-height:0;}
.manual-document-preview-body .honeywell-manual-sheet{width:min(100%,1440px);margin:0 auto;border-radius:6px;}
.quote-new-type-grid .quote-new-type-manual{border-color:rgba(220,38,38,.24);}
.quote-new-type-grid .quote-new-type-manual strong{color:#b91c1c;}
@media (max-width:1100px){
  .quote-manual-layout{grid-template-columns:1fr;}
  .quote-manual-form{max-width:none;}
}
@media (max-width:720px){
  .quote-manual-card{padding:12px;}
  .quote-manual-head{flex-direction:column;}
  .quote-manual-actions{width:100%;justify-content:flex-start;}
  .quote-manual-actions .btn,.quote-manual-actions a.btn{flex:1 1 calc(50% - 6px);justify-content:center;}
  .quote-manual-preview-pane{padding:7px;}
  .manual-document-preview-modal{width:100vw;height:100vh;max-height:none;border-radius:0;}
  .manual-document-preview-body{display:flex;align-items:center;padding:6px;}
  .manual-document-preview-body .honeywell-manual-sheet{min-width:940px;}
}

.manual-template-picker-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center;}
.manual-template-picker-row .btn{white-space:nowrap;}
#manualDocumentDate[readonly]{background:#f8fafc;color:#334155;}
.manual-template-manager-backdrop{align-items:center;justify-content:center;padding:18px;overflow:auto;}
.manual-template-manager-modal{width:min(1180px,96vw);max-width:none;max-height:94vh;overflow:auto;}
.manual-template-manager-layout{display:grid;grid-template-columns:minmax(320px,430px) minmax(0,1fr);gap:18px;align-items:start;}
.manual-template-manager-form{min-width:0;}
.manual-template-manager-actions-top{display:flex;justify-content:flex-end;margin:-2px 0 12px;}
.manual-template-manager-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end;margin-top:14px;}
.manual-template-manager-preview{min-width:0;border:1px solid #dbe2ea;border-radius:14px;background:#f8fafc;padding:12px;}
.manual-template-manager-image-wrap{margin-top:10px;background:#000;border-radius:10px;overflow:hidden;aspect-ratio:16/9;box-shadow:0 10px 24px rgba(15,23,42,.16);}
.manual-template-manager-image-wrap img{display:block;width:100%;height:100%;object-fit:cover;}
@media (max-width:900px){
  .manual-template-manager-layout{grid-template-columns:1fr;}
}
@media (max-width:720px){
  .manual-template-picker-row{grid-template-columns:1fr;}
  .manual-template-manager-backdrop{padding:0;align-items:stretch;}
  .manual-template-manager-modal{width:100vw;max-height:none;min-height:100vh;border-radius:0;}
}
/* v55.68 문서 작성 상단/문서 묶음 버튼 통일 */
.quote-manual-doc-bundle a.doc-chip{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;}
/* ===== equipmentDocuments.css ===== */
.quote-equipment-view{display:block}.quote-equipment-view.hidden{display:none}.quote-equipment-card{padding:18px}.quote-equipment-head,.equipment-panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}.quote-equipment-head h2,.equipment-panel-head h2{margin:2px 0 4px}.equipment-doc-tabs{margin:14px 0}.equipment-common-site{margin-bottom:14px;padding:14px}.equipment-common-site .section-title{margin-bottom:8px}.equipment-site-picker-wrap{display:grid;grid-template-columns:minmax(0,1fr);gap:7px;align-items:start}.equipment-site-picker-wrap input,.equipment-site-picker-wrap select,.equipment-meta-row input,.equipment-nvr-meta input,.equipment-nvr-meta select,.equipment-device-table input,.equipment-device-table select{width:100%;min-height:38px;border:1px solid #d7dde8;border-radius:11px;background:#fff;padding:7px 10px;color:#172033;box-sizing:border-box}.equipment-device-table input:focus,.equipment-device-table select:focus,.equipment-site-picker-wrap input:focus,.equipment-site-picker-wrap select:focus{outline:none;border-color:#4777e8;box-shadow:0 0 0 3px rgba(71,119,232,.12)}.equipment-tab-panel{padding:4px 0 0}.equipment-tab-panel.hidden{display:none}.equipment-panel-head{margin:4px 0 12px}.equipment-meta-row{display:grid;grid-template-columns:180px 180px minmax(260px,1fr);gap:10px;margin-bottom:10px}.equipment-meta-row label{font-size:12px;color:#5f6b7c;font-weight:800}.equipment-meta-row label input{display:block;margin-top:5px}.equipment-meta-row .grow{min-width:0}.equipment-table-wrap{max-height:58vh;overflow:auto;border:1px solid #e1e6ef;border-radius:14px;background:#fff}.equipment-device-table{width:100%;min-width:1080px;border-collapse:separate;border-spacing:0;table-layout:fixed}.equipment-device-table th{position:sticky;top:0;z-index:2;background:#f6f8fc;color:#465266;font-size:12px;padding:9px 7px;border-bottom:1px solid #dfe5ef;text-align:center}.equipment-device-table td{padding:6px;border-bottom:1px solid #edf0f5;vertical-align:middle}.equipment-device-table tbody tr:last-child td{border-bottom:0}.equipment-device-table tbody tr:hover{background:#fafcff}.equipment-device-table th:nth-child(1){width:64px}.equipment-device-table th:nth-child(2){width:130px}.equipment-device-table th:nth-child(3){width:110px}.equipment-device-table th:nth-child(4){width:110px}.equipment-device-table th:nth-child(5){width:135px}.equipment-device-table th:nth-child(6){width:145px}.equipment-device-table th:nth-child(7){width:120px}.equipment-device-table th:nth-child(8){width:105px}.equipment-device-table th:nth-child(9){width:180px}.equipment-check{display:inline-flex;align-items:center;justify-content:center;gap:4px;font-size:11px;font-weight:800;white-space:nowrap}.equipment-check input{width:16px!important;min-height:16px!important;height:16px;padding:0}.equipment-nvr-meta{margin-bottom:10px}.equipment-nvr-table{min-width:1320px}.equipment-nvr-table th:nth-child(1){width:64px}.equipment-nvr-table th:nth-child(2){width:74px}.equipment-nvr-table th:nth-child(3){width:130px}.equipment-nvr-table th:nth-child(4){width:100px}.equipment-nvr-table th:nth-child(5){width:130px}.equipment-nvr-table th:nth-child(6){width:140px}.equipment-nvr-table th:nth-child(7){width:82px}.equipment-nvr-table th:nth-child(8){width:105px}.equipment-nvr-table th:nth-child(9){width:130px}.equipment-nvr-table th:nth-child(10){width:190px}.equipment-nvr-selected{background:#f2f7ff}.equipment-nvr-selected:hover{background:#eaf2ff!important}.equipment-nvr-selected td:nth-child(2){cursor:grab}.drag-handle{display:block;color:#7c8799;font-size:13px;line-height:1}.equipment-device-table input.compact{padding-left:6px;padding-right:6px}.equipment-device-table .mono{font-family:Consolas,"Courier New",monospace;font-size:12px}.equipment-manual-content{display:block}.equipment-manual-content.hidden{display:none}.equipment-manual-content>.quote-manual-card{box-shadow:none!important;border:0!important;padding:0!important;margin:0!important}.equipment-manual-site-field{display:none!important}#equipmentManualPanel .quote-manual-head{justify-content:flex-end;margin:0 0 8px}#equipmentManualPanel .quote-manual-head>div:first-child{display:none}#equipmentManualPanel #manualGoSiteBtn{display:none!important}#equipmentManualPanel .quote-manual-doc-bundle{margin-top:0}.equipment-doc-tabs .doc-chip{min-width:130px}.equipment-doc-tabs .doc-chip.active{border-color:#2f65df;background:#eef4ff;color:#1648b5}.equipment-manual-content .quote-manual-layout{margin-top:10px}
@media(max-width:900px){.quote-equipment-card{padding:13px}.quote-equipment-head,.equipment-panel-head{flex-direction:column}.equipment-site-row,.equipment-meta-row{grid-template-columns:1fr}.equipment-doc-tabs{overflow-x:auto;flex-wrap:nowrap}.equipment-doc-tabs .doc-chip{min-width:max-content}.equipment-table-wrap{max-height:62vh}.equipment-common-site{padding:11px}}

/* v55.75: 장비자료 현장 선택 공통 팝업화 */
.equipment-site-picker-button{min-height:60px}
.equipment-site-picker-modal{width:min(1180px,94vw);max-height:min(820px,90vh)}
.equipment-site-picker-search-row{padding:0 2px 10px}
.equipment-site-picker-search-row input{width:100%}
.equipment-site-picker-list{min-height:240px;max-height:560px;overflow-y:auto}
.equipment-site-picker-card{min-height:112px}
.equipment-site-picker-card.active{border-color:#334155;background:#f8fafc;box-shadow:0 0 0 2px rgba(51,65,85,.1)}
#equipmentSiteStatus{display:block;min-height:18px;padding:0 3px}
@media(max-width:680px){.equipment-site-picker-modal{width:96vw;max-height:92vh}.equipment-site-picker-card{min-height:96px}}


/* v55.77: 장비자료 탭 안으로 대상 현장 선택을 통합하고 높이를 압축 */
.equipment-doc-tabs{align-items:center}
.equipment-site-inline{margin-left:auto;display:grid;grid-template-columns:auto minmax(220px,330px);grid-template-areas:"label picker" "status status";align-items:center;gap:4px 8px;min-width:0}
.equipment-site-inline-label{grid-area:label!important;margin:0!important;color:#64748b!important;font-size:11px!important;white-space:nowrap}
.equipment-site-picker-compact{grid-area:picker;min-height:42px;width:100%;border:1px solid #d7dde8;border-radius:12px;background:#fff;padding:6px 10px;display:flex;align-items:center;justify-content:space-between;gap:10px;text-align:left;cursor:pointer;color:#172033}
.equipment-site-picker-compact:hover{border-color:#8da7e8;background:#f8fbff}
.equipment-site-picker-compact.selected{border-color:#4777e8;background:#f4f8ff;box-shadow:0 0 0 2px rgba(71,119,232,.08)}
.equipment-site-picker-compact strong{font-size:12px;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:58%}
.equipment-site-picker-compact span{font-size:11px!important;font-weight:700!important;color:#64748b!important;margin:0!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:42%}
.equipment-site-inline-status{grid-area:status;display:block;min-height:15px;color:#6b7280;font-size:11px;line-height:1.25;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:1080px){.equipment-site-inline{width:100%;margin-left:0;grid-template-columns:auto minmax(0,1fr)}}
@media(max-width:680px){.equipment-site-inline{grid-template-columns:1fr;grid-template-areas:"label" "picker" "status"}.equipment-site-inline-status{text-align:left}.equipment-site-picker-compact strong{max-width:52%}.equipment-site-picker-compact span{max-width:48%}}
@media(max-width:1080px){.equipment-doc-tabs{flex-wrap:wrap;overflow-x:visible}}


/* v55.78: 대상 현장 선택을 장비자료 제목 아래 좌측으로 이동 */
.equipment-site-primary{display:grid;grid-template-columns:auto minmax(240px,390px) minmax(150px,1fr);align-items:center;gap:7px 9px;margin-top:10px;max-width:820px}
.equipment-site-primary-label{color:#64748b;font-size:11px;font-weight:800;white-space:nowrap}
.equipment-site-primary-status{min-width:0;color:#6b7280;font-size:11px;line-height:1.25;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.equipment-site-primary .equipment-site-picker-compact{min-height:42px}
@media(max-width:900px){.equipment-site-primary{grid-template-columns:auto minmax(0,1fr);max-width:none}.equipment-site-primary-status{grid-column:2}}
@media(max-width:680px){.equipment-site-primary{grid-template-columns:1fr;gap:5px}.equipment-site-primary-status{grid-column:1}.equipment-site-primary .equipment-site-picker-compact strong{max-width:52%}.equipment-site-primary .equipment-site-picker-compact span{max-width:48%}}


/* v55.79: 대상 현장 선택을 장비자료 탭 왼쪽의 동일 높이 컨트롤로 배치 */
.equipment-heading-block{min-width:0;flex:1}
.equipment-doc-tabs{align-items:center;flex-wrap:wrap}
.equipment-site-tab-control{display:flex;align-items:center;min-width:0;flex:0 1 300px}
.equipment-site-tab-picker{width:100%;min-width:190px;max-width:300px;min-height:34px;height:34px;border:1px solid #cbd5e1;border-radius:999px;background:#fff;padding:5px 12px;display:flex;align-items:center;justify-content:flex-start;gap:6px;color:#172033;cursor:pointer;box-sizing:border-box;text-align:left}
.equipment-site-tab-picker:hover{border-color:#8da7e8;background:#f8fbff}
.equipment-site-tab-picker.selected{border-color:#4777e8;background:#f4f8ff;box-shadow:0 0 0 2px rgba(71,119,232,.08)}
.equipment-site-tab-picker strong{min-width:0;max-width:58%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1.2}
.equipment-site-tab-picker span{min-width:0;max-width:42%;margin:0!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#64748b!important;font-size:11px!important;font-weight:700!important;line-height:1.2}
.equipment-site-tab-picker strong+span:before{content:"·";margin-right:6px;color:#94a3b8}
.equipment-site-tab-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.equipment-doc-tabs-label{white-space:nowrap}
@media(max-width:900px){.equipment-site-tab-control{flex:1 1 100%;width:100%}.equipment-site-tab-picker{width:100%;max-width:none}.equipment-doc-tabs{overflow-x:visible;flex-wrap:wrap}}
@media(max-width:520px){.equipment-site-tab-picker strong{max-width:55%}.equipment-site-tab-picker span{max-width:45%}}

/* v55.95: 장비 원본 기반 IP LIST 동시저장 및 녹화기 채널 배치 */
.equipment-ip-meta-row{grid-template-columns:150px 170px 190px 160px minmax(220px,1fr)}
.equipment-recorder-workspace{display:grid;grid-template-columns:minmax(0,1.75fr) minmax(300px,.75fr);gap:14px;margin-top:12px;min-height:0}
.equipment-recorder-stage,.equipment-recorder-candidates{border:1px solid #dfe5ef;border-radius:16px;background:#f8fafc;min-width:0}
.equipment-recorder-stage{padding:12px;display:flex;flex-direction:column;gap:10px}
.equipment-recorder-stage-head,.equipment-recorder-candidate-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.equipment-recorder-stage-head>strong,.equipment-recorder-candidate-head>strong{font-size:13px;color:#1f2937}
.equipment-nvr-grid{--nvr-grid-size:4;display:grid;grid-template-columns:repeat(var(--nvr-grid-size),minmax(0,1fr));gap:7px;align-content:start;min-height:410px;max-height:58vh;overflow:auto;padding:2px;overscroll-behavior:contain}
.equipment-nvr-slot{position:relative;min-height:112px;border:1px dashed #aeb8c7;border-radius:11px;background:#fff;overflow:hidden;transition:border-color .15s,box-shadow .15s,background .15s}
.equipment-nvr-slot:hover{border-color:#4777e8;box-shadow:0 0 0 2px rgba(71,119,232,.08)}
.equipment-nvr-slot.filled{border-style:solid;border-color:#94a9d9;background:#f5f8ff}
.equipment-nvr-slot-head{display:flex;align-items:center;justify-content:space-between;gap:5px;height:28px;padding:0 7px;border-bottom:1px solid #e3e8f0;background:#edf2fa}
.equipment-nvr-slot-head strong{font-size:10px;color:#455268;letter-spacing:.02em}
.equipment-nvr-slot-head button{border:0;background:transparent;color:#9b1c31;font-size:18px;line-height:1;cursor:pointer;padding:0 2px}
.equipment-nvr-camera-card{display:flex;flex-direction:column;gap:4px;height:calc(100% - 28px);padding:9px;cursor:grab;box-sizing:border-box}
.equipment-nvr-camera-card strong{font-size:11px;line-height:1.3;color:#16213a;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.equipment-nvr-camera-card span{font:600 10px/1.25 Consolas,"Courier New",monospace;color:#2454ad;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.equipment-nvr-camera-card em{margin-top:auto;font-size:9px;line-height:1.25;color:#68758a;font-style:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.equipment-nvr-empty-slot{height:calc(100% - 28px);display:flex;align-items:center;justify-content:center;text-align:center;padding:8px;color:#98a2b3;font-size:10px;box-sizing:border-box}
.equipment-recorder-candidates{display:flex;flex-direction:column;padding:12px;max-height:65vh}
.equipment-recorder-filter-row{display:grid;grid-template-columns:minmax(0,1fr) 125px;gap:7px;margin:9px 0 7px}
.equipment-recorder-filter-row input,.equipment-recorder-filter-row select{width:100%;min-height:36px;border:1px solid #d7dde8;border-radius:10px;background:#fff;padding:6px 9px;box-sizing:border-box}
.equipment-recorder-batch-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px}
.equipment-recorder-batch-row .btn{padding:7px 9px;font-size:11px}
.equipment-nvr-candidates{display:flex;flex-direction:column;gap:6px;overflow:auto;min-height:180px;overscroll-behavior:contain}
.equipment-nvr-candidate-card{display:grid;grid-template-columns:24px minmax(0,1fr);align-items:start;border:1px solid #e0e5ed;border-radius:11px;background:#fff;padding:7px;cursor:grab}
.equipment-nvr-candidate-card.assigned{background:#f3f7ff;border-color:#bdccec}
.equipment-nvr-candidate-card>label{padding-top:5px}.equipment-nvr-candidate-card input{width:15px;height:15px}
.equipment-nvr-candidate-main{display:flex;flex-direction:column;gap:2px;min-width:0;border:0;background:transparent;text-align:left;padding:0;cursor:pointer}
.equipment-nvr-candidate-main strong{font-size:11px;color:#19243a;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.equipment-nvr-candidate-main span{font-size:10px;color:#667085;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.equipment-nvr-candidate-main em{font-size:9px;color:#2f65b9;font-style:normal}
.equipment-nvr-detail-list{margin-top:12px;border:1px solid #dfe5ef;border-radius:13px;background:#fff;overflow:hidden}
.equipment-nvr-detail-list>summary{cursor:pointer;padding:11px 13px;font-size:12px;font-weight:800;color:#435069;background:#f7f9fc}
.equipment-nvr-detail-list .equipment-table-wrap{border:0;border-radius:0;max-height:48vh}
@media(max-width:1250px){.equipment-ip-meta-row{grid-template-columns:repeat(3,minmax(0,1fr))}.equipment-ip-meta-row .grow{grid-column:span 2}.equipment-recorder-workspace{grid-template-columns:minmax(0,1fr) 330px}.equipment-nvr-grid{min-height:360px}}
@media(max-width:900px){.equipment-ip-meta-row{grid-template-columns:1fr 1fr}.equipment-ip-meta-row .grow{grid-column:1/-1}.equipment-recorder-workspace{grid-template-columns:1fr}.equipment-recorder-candidates{max-height:none}.equipment-nvr-grid{max-height:54vh;min-height:330px}.equipment-nvr-slot{min-height:100px}}
@media(max-width:560px){.equipment-ip-meta-row{grid-template-columns:1fr}.equipment-ip-meta-row .grow{grid-column:auto}.equipment-recorder-stage{padding:9px}.equipment-nvr-grid{gap:5px}.equipment-nvr-slot{min-height:92px}.equipment-recorder-filter-row{grid-template-columns:1fr}.equipment-recorder-stage-head{align-items:flex-start;flex-direction:column}.equipment-recorder-stage-head .device-actions{width:100%;justify-content:space-between}}

/* v55.98: 장비자료 신규 드롭다운을 공통 둥근 UI로 통일 */
.quote-equipment-view select,
#equipmentSitePickerModal select {
  -webkit-appearance: none;
  appearance: none;
  border-radius: 12px !important;
  padding-right: 34px !important;
  background-color: #fff;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='m6 8 4 4 4-4' stroke='%2364758b' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 11px center;
  background-size: 14px 14px;
}
.quote-equipment-view select:focus,
#equipmentSitePickerModal select:focus {
  outline: none;
  border-color: #93a9dc !important;
  box-shadow: 0 0 0 3px rgba(71,119,232,.11);
}
/* ===== photoSheets.css ===== */
/* v55.66 사진대지 선택 안정화·사진 확대·설명 입력 개선 */
.quote-photo-sheet-view{min-width:0}
.photo-sheet-card{padding:18px}
.photo-sheet-head{align-items:flex-start;gap:14px}
.photo-sheet-doc-bundle{margin:10px 0 14px}
.photo-sheet-form-grid{display:grid;grid-template-columns:minmax(260px,1.15fr) minmax(170px,.7fr) minmax(240px,1fr);gap:10px 12px;align-items:start}
.photo-sheet-site-select-field{grid-column:1/3}
.photo-sheet-date-field{grid-column:3/4}
.photo-sheet-cover-title-field{grid-column:1/2}
.photo-sheet-work-title-field{grid-column:2/4}
.photo-sheet-name-field{grid-column:1/4}
.photo-sheet-site-picker-button{width:100%;min-height:58px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:4px;padding:9px 13px;border:1px solid #cbd5e1;border-radius:11px;background:#fff;color:#334155;text-align:left;cursor:pointer;transition:border-color .16s ease,box-shadow .16s ease,background .16s ease}
.photo-sheet-site-picker-button:hover{border-color:#94a3b8;background:#f8fafc}
.photo-sheet-site-picker-button:focus{outline:0;border-color:#64748b;box-shadow:0 0 0 3px rgba(100,116,139,.12)}
.photo-sheet-site-picker-button strong{font-size:14px;color:#0f172a}
.photo-sheet-site-picker-button span{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:#64748b}
.photo-sheet-site-picker-button.selected{border-color:#94a3b8;background:#f8fafc}
.photo-sheet-site-picker-modal{width:min(880px,96vw);max-height:90vh;display:flex;flex-direction:column}
.photo-sheet-site-picker-search-row{padding:0 2px 10px}
.photo-sheet-site-picker-search-row input{width:100%}
.photo-sheet-site-picker-list{min-height:180px;overflow:auto}
.photo-sheet-site-picker-card.active{border-color:#334155;box-shadow:0 0 0 2px rgba(51,65,85,.1)}
.photo-sheet-upload-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(245px,285px);gap:12px;align-items:start;margin-top:14px}
.photo-sheet-upload-field,.photo-sheet-count-field{min-width:0}
.photo-sheet-count-box{width:100%;min-width:0;min-height:52px;margin:0;display:flex;align-items:center;justify-content:center;box-sizing:border-box;text-align:center;white-space:normal}
.photo-sheet-empty-guide{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-height:150px;margin-top:14px;border:1px dashed #cbd5e1;border-radius:16px;background:#f8fafc;color:#64748b;text-align:center}
.photo-sheet-empty-guide strong{color:#334155;font-size:15px}
.photo-sheet-empty-guide.hidden{display:none!important}
.photo-sheet-item-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:14px}
.photo-sheet-item-card{display:grid;grid-template-columns:148px minmax(0,1fr);gap:12px;min-height:150px;padding:10px;border:1px solid #dbe3ec;border-radius:15px;background:#fff;box-shadow:0 4px 14px rgba(15,23,42,.045);cursor:grab;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}
.photo-sheet-item-card:hover{border-color:#94a3b8;box-shadow:0 9px 22px rgba(15,23,42,.075)}
.photo-sheet-item-card.is-dragging{opacity:.48;transform:scale(.985)}
.photo-sheet-item-card.is-dragover{border-color:#dc2626;box-shadow:0 0 0 3px rgba(220,38,38,.1)}
.photo-sheet-thumb{position:relative;width:100%;height:128px;padding:0;border-radius:11px;overflow:hidden;background:#eef3de;border:1px solid #d7dfc9;display:flex;align-items:center;justify-content:center;cursor:zoom-in;appearance:none;-webkit-appearance:none}
.photo-sheet-thumb:hover,.photo-sheet-thumb:focus{outline:0;border-color:#94a3b8;box-shadow:0 0 0 3px rgba(100,116,139,.12)}
.photo-sheet-thumb img{width:100%;height:100%;object-fit:contain;display:block;transform-origin:center;pointer-events:none}
.photo-sheet-order-badge{position:absolute;left:7px;top:7px;display:inline-flex;align-items:center;justify-content:center;min-width:25px;height:25px;padding:0 7px;border-radius:999px;background:rgba(15,23,42,.82);color:#fff;font-size:12px;font-weight:900;pointer-events:none}
.photo-sheet-zoom-badge{position:absolute;right:7px;bottom:7px;display:inline-flex;align-items:center;justify-content:center;height:24px;padding:0 8px;border-radius:999px;background:rgba(15,23,42,.72);color:#fff;font-size:11px;font-weight:800;pointer-events:none}
.photo-sheet-item-main{display:flex;flex-direction:column;min-width:0}
.photo-sheet-item-file{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0;margin-bottom:8px}
.photo-sheet-item-file strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:#334155}
.photo-sheet-drag-label{flex:0 0 auto;color:#94a3b8;font-size:12px;font-weight:700}
.photo-sheet-caption{width:100%;min-height:58px;resize:vertical;box-sizing:border-box;border:1px solid #d1d5db;border-radius:10px;padding:10px;font:inherit;font-size:14px;line-height:1.45;background:#fff;color:#111827;outline:0;transition:border-color .16s ease,box-shadow .16s ease}
.photo-sheet-caption:focus{border-color:#64748b;box-shadow:0 0 0 3px rgba(100,116,139,.12)}
.photo-sheet-item-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto;padding-top:8px}
.photo-sheet-item-actions .btn{min-height:31px;padding:5px 9px;font-size:12px}
.photo-sheet-preview-modal{width:min(980px,96vw);max-width:980px;height:min(92vh,980px)}
.photo-sheet-preview-body{display:flex;flex-direction:column;align-items:center;gap:18px;padding:18px;background:#eef2f7;overflow:auto}
.photo-sheet-preview-page{position:relative;width:min(750px,100%);aspect-ratio:3/4;background:#fff;box-shadow:0 12px 28px rgba(15,23,42,.15);flex:0 0 auto}
.photo-sheet-preview-page canvas{display:block;width:100%;height:100%}
.photo-sheet-preview-page-label{position:absolute;right:10px;top:10px;padding:4px 8px;border-radius:999px;background:rgba(15,23,42,.72);color:#fff;font-size:11px;font-weight:800;pointer-events:none}
.photo-sheet-saved-pdf-frame{width:100%;height:calc(100vh - 175px);min-height:650px;border:0;background:#fff;border-radius:10px}
.photo-sheet-image-preview-modal{width:min(1180px,96vw);height:min(92vh,920px);display:flex;flex-direction:column}
.photo-sheet-image-preview-body{min-height:0;flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:12px 16px 16px;background:#eef2f7;overflow:hidden}
.photo-sheet-image-preview-stage{min-height:0;flex:1;width:100%;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:12px;background:#111827}
.photo-sheet-image-preview-stage img{display:block;max-width:min(86vw,72vh);max-height:min(72vh,86vw);object-fit:contain;transform-origin:center}
.photo-sheet-image-preview-caption{flex:0 0 auto;max-width:100%;margin:0;padding:7px 12px;border-radius:10px;background:#fff;color:#334155;font-size:13px;line-height:1.45;text-align:center;white-space:normal;overflow-wrap:anywhere}
.quote-new-type-photo-sheet{border-color:#cbd5e1!important}
.quote-new-type-photo-sheet strong{color:#1e3a8a}

@media(max-width:980px){
  .photo-sheet-form-grid{grid-template-columns:1fr 1fr}
  .photo-sheet-site-select-field{grid-column:1/3}
  .photo-sheet-date-field{grid-column:1/2}
  .photo-sheet-cover-title-field{grid-column:2/3}
  .photo-sheet-work-title-field,.photo-sheet-name-field{grid-column:1/3}
  .photo-sheet-item-list{grid-template-columns:1fr}
}
@media(max-width:680px){
  .photo-sheet-card{padding:13px}
  .photo-sheet-head{display:block}
  .photo-sheet-head .device-actions{margin-top:10px;width:100%;display:grid;grid-template-columns:repeat(2,1fr)}
  .photo-sheet-form-grid{grid-template-columns:1fr}
  .photo-sheet-site-select-field,.photo-sheet-date-field,.photo-sheet-cover-title-field,.photo-sheet-work-title-field,.photo-sheet-name-field{grid-column:1/2}
  .photo-sheet-upload-layout{grid-template-columns:1fr}
  .photo-sheet-count-box{min-height:52px}
  .photo-sheet-item-card{grid-template-columns:116px minmax(0,1fr);gap:9px}
  .photo-sheet-thumb{height:116px}
  .photo-sheet-item-actions .btn{flex:1}
  .photo-sheet-preview-body{padding:8px;gap:10px}
  .photo-sheet-image-preview-modal{width:96vw;height:92vh}
  .photo-sheet-image-preview-body{padding:8px}
  .photo-sheet-site-picker-modal{width:96vw;max-height:92vh}
}

/* v55.86 현장 사진 불러오기·혼합 사용 */
.photo-sheet-upload-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:8px}
.photo-sheet-upload-actions .btn{min-height:32px;padding:6px 10px;font-size:12px}
.photo-sheet-source-badge{flex:0 0 auto;display:inline-flex;align-items:center;height:22px;padding:0 7px;border-radius:999px;font-size:10px;font-weight:900;white-space:nowrap}
.photo-sheet-source-badge.site{background:#dbeafe;color:#1d4ed8}
.photo-sheet-source-badge.direct{background:#f1f5f9;color:#475569}
.photo-sheet-site-photo-modal{width:min(1040px,96vw);max-height:92vh;display:flex;flex-direction:column}
.photo-sheet-site-photo-toolbar{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding:10px 16px;border-bottom:1px solid #e5e7eb;background:#f8fafc}
.photo-sheet-site-photo-toolbar .btn{min-height:31px;padding:5px 10px;font-size:12px}
.photo-sheet-site-photo-list{min-height:240px;max-height:calc(92vh - 205px);overflow:auto;padding:14px 16px;background:#f8fafc}
.photo-sheet-site-photo-group{margin-bottom:16px}
.photo-sheet-site-photo-group:last-child{margin-bottom:0}
.photo-sheet-site-photo-group-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px;padding:0 2px}
.photo-sheet-site-photo-group-head strong{font-size:14px;color:#0f172a}
.photo-sheet-site-photo-group-head span{font-size:12px;color:#64748b}
.photo-sheet-site-photo-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px}
.photo-sheet-site-photo-card{position:relative;display:flex;flex-direction:column;min-width:0;padding:8px;border:1px solid #dbe3ec;border-radius:12px;background:#fff;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,opacity .15s ease}
.photo-sheet-site-photo-card:hover{border-color:#94a3b8;box-shadow:0 5px 14px rgba(15,23,42,.07)}
.photo-sheet-site-photo-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 2px rgba(37,99,235,.12)}
.photo-sheet-site-photo-card.is-added{opacity:.58;cursor:not-allowed}
.photo-sheet-site-photo-card>input{position:absolute;top:12px;left:12px;z-index:2;width:18px;height:18px;margin:0;accent-color:#2563eb}
.photo-sheet-site-photo-thumb{display:block;width:100%;aspect-ratio:4/3;border-radius:9px;overflow:hidden;background:#e2e8f0}
.photo-sheet-site-photo-thumb img{display:block;width:100%;height:100%;object-fit:cover}
.photo-sheet-site-photo-info{display:flex;flex-direction:column;gap:3px;min-width:0;padding-top:7px}
.photo-sheet-site-photo-info strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:#334155}
.photo-sheet-site-photo-info small{font-size:11px;color:#64748b}
@media(max-width:900px){.photo-sheet-site-photo-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:680px){
  .photo-sheet-upload-actions{align-items:stretch}
  .photo-sheet-upload-actions .btn{width:100%}
  .photo-sheet-item-file{flex-wrap:wrap;justify-content:flex-start}
  .photo-sheet-item-file strong{flex:1 1 100%}
  .photo-sheet-drag-label{margin-left:auto}
  .photo-sheet-site-photo-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
  .photo-sheet-site-photo-list{padding:10px;max-height:calc(92vh - 215px)}
  .photo-sheet-site-photo-toolbar{padding:8px 10px}
}


/* v55.88 사진대지 다중 선택·장거리 순서 변경 */
.photo-sheet-order-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:14px;padding:10px 12px;border:1px solid #dbe3ec;border-radius:14px;background:#f8fafc}
.photo-sheet-order-toolbar[hidden]{display:none!important}
.photo-sheet-order-summary{display:flex;flex-direction:column;gap:2px;min-width:0}
.photo-sheet-order-summary strong{font-size:13px;color:#0f172a}
.photo-sheet-order-summary span{font-size:11px;color:#64748b}
.photo-sheet-order-actions{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.photo-sheet-order-actions .btn{min-height:32px;padding:5px 9px;font-size:12px}
.photo-sheet-item-card{position:relative}
.photo-sheet-item-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 3px rgba(37,99,235,.12),0 9px 22px rgba(15,23,42,.075)}
.photo-sheet-select-toggle{position:absolute;z-index:5;right:8px;top:8px;display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:1px solid #cbd5e1;border-radius:9px;background:rgba(255,255,255,.96);color:#64748b;cursor:pointer;box-shadow:0 3px 9px rgba(15,23,42,.12);transition:border-color .15s ease,background .15s ease,transform .15s ease}
.photo-sheet-select-toggle:hover{border-color:#93c5fd;background:#eff6ff;transform:translateY(-1px)}
.photo-sheet-select-toggle.active{border-color:#2563eb;background:#2563eb;color:#fff}
.photo-sheet-select-toggle:focus-visible{outline:3px solid rgba(37,99,235,.22);outline-offset:2px}
.photo-sheet-select-icon{position:relative;display:block;width:14px;height:14px;border:2px solid currentColor;border-radius:4px;background:transparent;box-sizing:border-box}
.photo-sheet-select-toggle.active .photo-sheet-select-icon{border-color:#fff;background:#fff}
.photo-sheet-select-toggle.active .photo-sheet-select-icon:after{content:"";position:absolute;left:2px;top:2px;width:6px;height:3px;border-left:2px solid #2563eb;border-bottom:2px solid #2563eb;transform:rotate(-45deg)}
.photo-sheet-item-card.is-dragging{opacity:.48}
@media(max-width:680px){
  .photo-sheet-order-toolbar{position:sticky;top:calc(68px + env(safe-area-inset-top,0px));z-index:25;align-items:stretch;padding:9px;background:rgba(248,250,252,.97);backdrop-filter:blur(8px)}
  .photo-sheet-order-summary span{display:none}
  .photo-sheet-order-actions{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:100%}
  .photo-sheet-order-actions .btn{width:100%;padding:5px 4px}
  .photo-sheet-select-toggle{width:34px;height:34px;right:7px;top:7px}
  .photo-sheet-drag-label{font-size:11px}
}
.photo-sheet-item-file{padding-right:34px}
/* ===== taxInvoiceTransform.css ===== */
/* v55.84: 국세청 전자세금계산서 보안 HTML 변환 */
.tax-invoice-transform-backdrop {
  z-index: 3150;
  align-items: center;
  justify-content: center;
  padding: 12px;
}
.tax-invoice-transform-modal {
  width: min(1180px, calc(100vw - 24px));
  max-height: calc(100dvh - 24px);
  overflow: auto;
}
.tax-invoice-transform-toolbar {
  display: grid;
  grid-template-columns: minmax(300px, 460px) minmax(0, 1fr);
  gap: 14px;
  align-items: end;
  margin-bottom: 12px;
}
.tax-invoice-biz-field { margin: 0; }
.tax-invoice-source-info {
  min-width: 0;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  padding-bottom: 3px;
}
.tax-invoice-source-info strong {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #334155;
  font-size: 13px;
}
.tax-invoice-status {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  min-height: 26px;
  padding: 4px 9px;
  border: 1px solid #cbd5e1;
  border-radius: 999px;
  background: #f8fafc;
  color: #475569;
  font-size: 11px;
  font-weight: 800;
}
.tax-invoice-status.is-working { border-color: #f59e0b; background: #fffbeb; color: #92400e; }
.tax-invoice-status.is-ready { border-color: #22c55e; background: #f0fdf4; color: #166534; }
.tax-invoice-status.is-error { border-color: #ef4444; background: #fef2f2; color: #991b1b; }
.tax-invoice-preview-stage {
  min-height: 470px;
  height: min(68dvh, 760px);
  overflow: hidden;
  border: 1px solid #cbd5e1;
  border-radius: 14px;
  background: #eef2f7;
}
.tax-invoice-secure-frame {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
  background: #fff;
}
.tax-invoice-capture-stage {
  margin-top: 12px;
  border: 1px solid #dbe3ec;
  border-radius: 14px;
  background: #f8fafc;
  padding: 12px;
}
.tax-invoice-capture-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 9px;
}
.tax-invoice-capture-head > div { min-width: 0; }
.tax-invoice-capture-head strong { display: block; color: #0f172a; font-size: 14px; }
.tax-invoice-capture-head .small { display: block; margin-top: 3px; }
.tax-invoice-crop-wrap {
  display: flex;
  justify-content: center;
  max-height: 62dvh;
  overflow: auto;
  border: 1px solid #cbd5e1;
  border-radius: 11px;
  background: #111827;
  padding: 10px;
  touch-action: none;
}
#taxInvoiceCropCanvas {
  display: block;
  max-width: 100%;
  height: auto;
  background: #fff;
  cursor: crosshair;
  touch-action: none;
}
.tax-invoice-transform-notice {
  margin-top: 10px;
  padding: 9px 11px;
  border: 1px solid #e2e8f0;
  border-radius: 10px;
  background: #f8fafc;
  color: #475569;
}
.tax-invoice-transform-actions { position: sticky; bottom: -1px; background: #fff; padding-top: 12px; }

@media (max-width: 760px) {
  .tax-invoice-transform-backdrop { padding: 0; align-items: stretch; }
  .tax-invoice-transform-modal { width: 100%; max-height: 100dvh; border-radius: 0; }
  .tax-invoice-transform-toolbar { grid-template-columns: 1fr; gap: 8px; }
  .tax-invoice-source-info { justify-content: space-between; }
  .tax-invoice-preview-stage { min-height: 430px; height: 62dvh; }
  .tax-invoice-capture-head { align-items: flex-start; }
  .tax-invoice-transform-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tax-invoice-transform-actions .btn { width: 100%; }
}
/* ===== shareWorkspace.css ===== */
/* v55.93 자료공유 최초 탐색·사진 스크롤 보완 */
#share-create.share-workspace-page.active {
  display: flex;
  flex-direction: column;
  height: calc(100dvh - 48px);
  min-height: 0;
  overflow: hidden;
}
.share-workspace-topbar {
  flex: 0 0 auto;
  margin-bottom: 10px !important;
}
.share-workspace-top-actions { flex-wrap: nowrap; }
.share-workspace-commandbar {
  flex: 0 0 auto;
  display: grid;
  grid-template-columns: minmax(210px, .56fr) minmax(680px, 2.44fr) auto;
  align-items: center;
  gap: 10px;
  min-height: 54px;
  padding: 7px 9px;
  margin-bottom: 9px;
  border: 1px solid #dbe3ee;
  border-radius: 15px;
  background: #fff;
  box-shadow: 0 3px 14px rgba(15,23,42,.045);
}
.share-workspace-context-summary {
  min-width: 0;
  display: grid;
  grid-template-columns: auto minmax(0,1fr);
  align-items: center;
  gap: 8px;
}
.share-workspace-context-summary > strong { overflow: hidden; color: #0f172a; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-tabs {
  display: grid;
  grid-template-columns: repeat(7, minmax(82px, 1fr));
  gap: 5px;
  min-width: 0;
}
.share-workspace-tabs button {
  position: relative;
  min-width: 0;
  min-height: 38px;
  padding: 5px 26px 5px 8px;
  border: 1px solid #dbe3ee;
  border-radius: 10px;
  background: #f8fafc;
  color: #475569;
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.share-workspace-tabs button:hover { border-color: #94a3b8; background: #fff; }
.share-workspace-tabs button.active { border-color: #111827; background: #111827; color: #fff; }
.share-workspace-tabs button em {
  position: absolute;
  top: 50%;
  right: 6px;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 999px;
  background: rgba(148,163,184,.2);
  font-size: 10px;
  font-style: normal;
  line-height: 18px;
  transform: translateY(-50%);
}
.share-workspace-tabs button.active em { background: rgba(255,255,255,.22); }
.share-workspace-selected-toggle {
  min-width: 88px;
  min-height: 38px;
  padding: 0 10px;
  border: 1px solid #fecaca;
  border-radius: 10px;
  background: #fff7f7;
  color: #991b1b;
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
  white-space: nowrap;
}
.share-workspace-selected-toggle strong { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; margin-left: 4px; border-radius: 999px; background: #dc2626; color: #fff; font-size: 11px; }
.share-workspace-shell {
  flex: 1 1 auto;
  min-height: 0;
  display: grid;
  grid-template-columns: minmax(250px, 280px) minmax(430px, 1fr) minmax(300px, 350px);
  gap: 9px;
  overflow: hidden;
}
.share-workspace-finder,
.share-workspace-browser,
.share-workspace-selected-panel {
  min-width: 0;
  min-height: 0;
  border: 1px solid #dbe3ee;
  border-radius: 16px;
  background: #fff;
  box-shadow: 0 3px 14px rgba(15,23,42,.04);
  overflow: hidden;
}
.share-workspace-finder {
  display: grid;
  grid-template-rows: auto minmax(130px, .88fr) auto minmax(150px, 1.12fr);
}
.share-workspace-finder-head,
.share-workspace-secondary-head,
.share-workspace-browser-head,
.share-workspace-selected-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 10px 11px;
  border-bottom: 1px solid #e8edf4;
  background: #fbfdff;
}
.share-workspace-finder-head { display: grid; grid-template-columns: 1fr; }
.share-workspace-finder-head > div,
.share-workspace-secondary-head > div,
.share-workspace-browser-head > div,
.share-workspace-selected-head > div { min-width: 0; display: grid; gap: 2px; }
.share-workspace-finder-head strong,
.share-workspace-secondary-head strong,
.share-workspace-browser-head strong,
.share-workspace-selected-head strong { color: #0f172a; font-size: 14px; }
.share-workspace-finder-head span,
.share-workspace-secondary-head span,
.share-workspace-browser-head span,
.share-workspace-selected-head span { overflow: hidden; color: #64748b; font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
#shareWorkspaceSearch {
  width: 100%;
  height: 34px;
  padding: 0 10px;
  border: 1px solid #cbd5e1;
  border-radius: 10px;
  background: #fff;
  font-size: 12px;
}
.share-workspace-primary-list,
.share-workspace-secondary-list,
.share-workspace-source-stage,
.share-workspace-selected-items {
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
  scrollbar-gutter: stable;
}
.share-workspace-primary-list { padding: 6px; }
.share-workspace-secondary-list { padding: 6px; }
.share-workspace-primary-row {
  width: 100%;
  display: grid;
  grid-template-columns: minmax(0,1fr) auto;
  align-items: center;
  gap: 8px;
  padding: 8px 9px;
  margin: 0 0 5px;
  border: 1px solid transparent;
  border-radius: 10px;
  background: #f8fafc;
  text-align: left;
  cursor: pointer;
}
.share-workspace-primary-row:hover { border-color: #cbd5e1; background: #fff; }
.share-workspace-primary-row.active { border-color: #111827; background: #eef2ff; }
.share-workspace-primary-row span { min-width: 0; display: grid; gap: 2px; }
.share-workspace-primary-row strong { overflow: hidden; color: #0f172a; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-primary-row em { overflow: hidden; color: #64748b; font-size: 10px; font-style: normal; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-primary-row small { color: #64748b; font-size: 10px; white-space: nowrap; }
.share-workspace-site-row {
  display: grid;
  grid-template-columns: auto minmax(0,1fr) auto;
  align-items: center;
  gap: 8px;
  padding: 8px 9px;
  margin-bottom: 5px;
  border: 1px solid #e2e8f0;
  border-radius: 10px;
  background: #fff;
  cursor: pointer;
}
.share-workspace-site-row:hover { border-color: #94a3b8; }
.share-workspace-site-row.selected { border-color: #2563eb; background: #eff6ff; }
.share-workspace-site-row input { width: 17px; height: 17px; accent-color: #2563eb; }
.share-workspace-site-row span { min-width: 0; display: grid; gap: 2px; }
.share-workspace-site-row strong { overflow: hidden; color: #0f172a; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-site-row em { overflow: hidden; color: #64748b; font-size: 10px; font-style: normal; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-site-row small { color: #64748b; font-size: 10px; white-space: nowrap; }
.share-workspace-browser { display: grid; grid-template-rows: auto auto minmax(0,1fr); }
.share-workspace-browser-head { min-height: 58px; }
.share-workspace-site-chips { min-width: 0; display: flex; justify-content: flex-end; gap: 4px; overflow: hidden; }
.share-workspace-site-chips span { flex: 0 0 auto; max-width: 145px; padding: 4px 7px; border: 1px solid #dbeafe; border-radius: 999px; background: #eff6ff; color: #1e3a8a; font-size: 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-site-chips b { font-weight: 700; opacity: .68; }
.share-workspace-library-toolbar {
  min-width: 0;
  display: grid;
  grid-template-columns: minmax(0,1fr) minmax(190px, 240px);
  align-items: center;
  gap: 8px;
  padding: 7px 8px;
  border-bottom: 1px solid #e8edf4;
  background: #fff;
}
.share-workspace-library-toolbar[hidden] { display: none !important; }
.share-workspace-library-categories {
  min-width: 0;
  display: flex;
  gap: 5px;
  overflow-x: auto;
  padding-bottom: 1px;
  scrollbar-width: thin;
}
.share-workspace-library-categories button {
  flex: 0 0 auto;
  min-height: 30px;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 0 9px;
  border: 1px solid #dbe3ee;
  border-radius: 999px;
  background: #f8fafc;
  color: #475569;
  font-size: 10px;
  font-weight: 800;
  cursor: pointer;
}
.share-workspace-library-categories button.active { border-color: #111827; background: #111827; color: #fff; }
.share-workspace-library-categories button em {
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  border-radius: 999px;
  background: rgba(148,163,184,.2);
  font-size: 9px;
  font-style: normal;
  line-height: 18px;
  text-align: center;
}
.share-workspace-library-categories button.active em { background: rgba(255,255,255,.2); }
#shareWorkspaceLibrarySearch {
  width: 100%;
  height: 32px;
  padding: 0 9px;
  border: 1px solid #cbd5e1;
  border-radius: 9px;
  background: #fff;
  font-size: 11px;
}
.share-workspace-source-stage {
  padding: 8px;
  background: #f8fafc;
  -webkit-overflow-scrolling: touch;
  overflow-anchor: none;
}
.share-workspace-empty { min-height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; padding: 24px; color: #64748b; font-size: 12px; text-align: center; }
.share-workspace-empty strong { color: #334155; font-size: 14px; }
.share-workspace-data-list { display: grid; gap: 6px; }
.share-workspace-data-row {
  display: grid;
  grid-template-columns: auto 76px minmax(190px,1fr) minmax(105px,.42fr) 82px 76px;
  align-items: center;
  gap: 8px;
  min-height: 52px;
  padding: 7px 9px;
  border: 1px solid #e2e8f0;
  border-radius: 11px;
  background: #fff;
  cursor: pointer;
}
.share-workspace-data-row:hover { border-color: #94a3b8; }
.share-workspace-data-row.selected { border-color: #2563eb; background: #eff6ff; }
.share-workspace-data-row.disabled { opacity: .58; cursor: not-allowed; }
.share-workspace-data-row > input { width: 17px; height: 17px; accent-color: #2563eb; }
.share-workspace-data-kind { display: inline-flex; justify-content: center; padding: 4px 6px; border-radius: 999px; background: #f1f5f9; color: #475569; font-size: 10px; font-weight: 800; white-space: nowrap; }
.share-workspace-data-main { min-width: 0; display: grid; gap: 2px; }
.share-workspace-data-main strong { overflow: hidden; color: #0f172a; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-data-main em { overflow: hidden; color: #64748b; font-size: 10px; font-style: normal; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-data-site,
.share-workspace-data-date { overflow: hidden; color: #475569; font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-data-action { display: flex; justify-content: flex-end; }
.share-workspace-data-action .btn { min-height: 28px; padding: 0 7px; font-size: 10px; }
.share-workspace-photo-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px,1fr)); gap: 8px; align-content: start; }
.share-workspace-photo-card {
  position: relative;
  min-width: 0;
  overflow: hidden;
  contain: layout paint;
  border: 1px solid #e2e8f0;
  border-radius: 12px;
  background: #fff;
  cursor: pointer;
}
.share-workspace-photo-card.selected { border-color: #2563eb; box-shadow: 0 0 0 2px rgba(37,99,235,.12); }
.share-workspace-photo-card > input { position: absolute; z-index: 2; top: 7px; right: 7px; width: 19px; height: 19px; accent-color: #2563eb; }
.share-workspace-photo-thumb { display: flex; align-items: center; justify-content: center; height: 104px; overflow: hidden; background: #e2e8f0; }
.share-workspace-photo-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; }
.share-workspace-photo-thumb b { color: #475569; font-size: 18px; }
.share-workspace-photo-info { display: grid; gap: 2px; padding: 7px 8px; }
.share-workspace-photo-info strong,
.share-workspace-photo-info em { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-photo-info strong { color: #0f172a; font-size: 11px; }
.share-workspace-photo-info em { color: #64748b; font-size: 9px; font-style: normal; }
.share-workspace-photo-info small { color: #64748b; font-size: 9px; }
.share-workspace-selected-panel { display: grid; grid-template-rows: auto minmax(90px,1fr) auto; }
.share-workspace-selected-head { min-height: 58px; }
.share-workspace-mobile-close { display: none; width: 34px; height: 34px; border: 0; border-radius: 9px; background: #f1f5f9; color: #334155; font-size: 21px; cursor: pointer; }
.share-workspace-selected-items { padding: 7px; overflow-x: hidden; }
.share-workspace-selected-card-list { min-width: 0; display: grid; gap: 6px; }
.share-workspace-selected-card {
  min-width: 0;
  display: grid;
  grid-template-columns: auto minmax(0,1fr) auto;
  align-items: center;
  gap: 7px;
  padding: 7px;
  border: 1px solid #e2e8f0;
  border-radius: 11px;
  background: #fff;
}
.share-workspace-selected-kind {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 52px;
  min-height: 24px;
  padding: 0 6px;
  border-radius: 999px;
  background: #f1f5f9;
  color: #475569;
  font-size: 9px;
  font-weight: 800;
  white-space: nowrap;
}
.share-workspace-selected-main { min-width: 0; display: grid; gap: 2px; }
.share-workspace-selected-main strong,
.share-workspace-selected-main span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-selected-main strong { color: #0f172a; font-size: 11px; }
.share-workspace-selected-main span { color: #64748b; font-size: 9px; }
.share-workspace-selected-actions { display: flex; align-items: center; gap: 4px; }
.share-workspace-selected-actions .btn { min-height: 27px; padding: 0 6px; font-size: 9px; }
.share-workspace-selected-actions .danger-text { color: #b91c1c; }
.share-workspace-form { display: grid; gap: 6px; padding: 8px; border-top: 1px solid #e8edf4; background: #fbfdff; }
.share-workspace-form-row { min-width: 0; display: grid; gap: 3px; }
.share-workspace-form-row label { color: #64748b; font-size: 10px; font-weight: 800; }
.share-workspace-form input,
.share-workspace-form textarea { width: 100%; min-width: 0; border: 1px solid #cbd5e1; border-radius: 8px; background: #fff; color: #0f172a; font-size: 11px; }
.share-workspace-form input { height: 32px; padding: 0 8px; }
.share-workspace-form textarea { height: 52px; min-height: 52px; padding: 7px 8px; resize: vertical; }
.share-workspace-form-inline { display: grid; grid-template-columns: 1fr 1.2fr .9fr; gap: 5px; }
.share-workspace-form-actions { display: grid; grid-template-columns: .8fr 1.2fr; gap: 6px; }
.share-workspace-form-actions .btn { min-height: 34px; }

@media (max-width: 1280px) {
  .share-workspace-commandbar { grid-template-columns: minmax(190px,.5fr) minmax(590px,1.92fr) auto; }
  .share-workspace-shell { grid-template-columns: 245px minmax(390px,1fr) 315px; }
  .share-workspace-data-row { grid-template-columns: auto 68px minmax(170px,1fr) 100px 72px 66px; }
}

@media (max-width: 1050px) {
  #share-create.share-workspace-page.active { height: auto; min-height: calc(100dvh - 24px); overflow: visible; }
  .share-workspace-commandbar { grid-template-columns: 1fr auto; }
  .share-workspace-tabs { grid-column: 1 / -1; grid-row: 2; overflow-x: auto; display: flex; padding-bottom: 2px; }
  .share-workspace-tabs button { flex: 0 0 104px; }
  .share-workspace-shell { grid-template-columns: 250px minmax(0,1fr); min-height: 620px; overflow: visible; }
  .share-workspace-selected-panel {
    position: fixed;
    z-index: 9400;
    top: 0;
    right: 0;
    bottom: 0;
    width: min(380px, 92vw);
    border-radius: 16px 0 0 16px;
    transform: translateX(105%);
    transition: transform .2s ease;
    box-shadow: -14px 0 34px rgba(15,23,42,.2);
  }
  .share-workspace-selected-panel.mobile-open { transform: translateX(0); }
  .share-workspace-mobile-close { display: inline-flex; align-items: center; justify-content: center; }
}

@media (max-width: 760px) {
  #share-create.share-workspace-page.active {
    height: calc(100dvh - 86px);
    min-height: 0;
    overflow: hidden;
  }
  .share-workspace-topbar { align-items: center !important; }
  .share-workspace-topbar .sub { display: none; }
  .share-workspace-top-actions .btn.light:first-child { display: none; }
  .share-workspace-top-actions .btn { min-height: 36px; padding: 0 9px; font-size: 11px; }
  .share-workspace-commandbar { grid-template-columns: minmax(0,1fr) auto; gap: 6px; padding: 6px; margin-bottom: 6px; }
  .share-workspace-context-summary { grid-template-columns: auto minmax(0,1fr); }
  .share-workspace-context-summary > strong { display: none; }
  .share-workspace-tabs { grid-column: 1 / -1; grid-row: 2; }
  .share-workspace-tabs button { flex-basis: 92px; min-height: 36px; }
  .share-workspace-selected-toggle { min-width: 76px; min-height: 34px; padding: 0 7px; }
  .share-workspace-shell { grid-template-columns: 42% minmax(0,1fr); gap: 6px; min-height: 0; height: 100%; overflow: hidden; }
  .share-workspace-finder { grid-template-rows: auto minmax(100px,.8fr) auto minmax(120px,1.2fr); border-radius: 12px; }
  .share-workspace-browser { border-radius: 12px; }
  .share-workspace-finder-head,
  .share-workspace-secondary-head,
  .share-workspace-browser-head { padding: 7px; }
  .share-workspace-finder-head span,
  .share-workspace-secondary-head span,
  .share-workspace-browser-head span { display: none; }
  #shareWorkspaceSearch { height: 32px; padding: 0 7px; font-size: 10px; }
  .share-workspace-primary-row,
  .share-workspace-site-row { padding: 7px; gap: 5px; }
  .share-workspace-primary-row small,
  .share-workspace-site-row small { display: none; }
  .share-workspace-primary-row strong,
  .share-workspace-site-row strong { font-size: 10px; }
  .share-workspace-primary-row em,
  .share-workspace-site-row em { font-size: 9px; }
  .share-workspace-browser-head { min-height: 44px; }
  .share-workspace-site-chips { display: none; }
  .share-workspace-source-stage { padding: 5px; }
  .share-workspace-library-toolbar { grid-template-columns: 1fr; gap: 5px; padding: 5px; }
  .share-workspace-library-categories button { min-height: 28px; padding: 0 7px; font-size: 9px; }
  #shareWorkspaceLibrarySearch { height: 30px; font-size: 10px; }
  .share-workspace-data-row {
    grid-template-columns: auto minmax(0,1fr);
    gap: 5px;
    min-height: 48px;
    padding: 6px;
  }
  .share-workspace-data-kind,
  .share-workspace-data-site,
  .share-workspace-data-date,
  .share-workspace-data-action { display: none; }
  .share-workspace-data-main strong { font-size: 10px; }
  .share-workspace-data-main em { font-size: 9px; }
  .share-workspace-photo-grid { grid-template-columns: repeat(2,minmax(0,1fr)); gap: 5px; }
  .share-workspace-photo-thumb { height: 78px; }
  .share-workspace-photo-info { padding: 5px; }
}

/* v55.93 사진 다량 선택: 순차 축소·지연 로딩·분할 표시 */
.share-workspace-photo-groups { display: grid; gap: 8px; align-content: start; }
.share-workspace-photo-group {
  overflow: hidden;
  border: 1px solid #dbe3ee;
  border-radius: 13px;
  background: #fff;
}
.share-workspace-photo-group:not(.expanded) {
  content-visibility: auto;
  contain: layout paint style;
  contain-intrinsic-size: 112px;
}
.share-workspace-photo-group.expanded {
  content-visibility: visible;
  contain: layout style;
  border-color: #b8c6d9;
}
.share-workspace-photo-group-head {
  display: grid;
  grid-template-columns: minmax(0,1fr) auto;
  align-items: center;
  gap: 8px;
  padding: 7px 8px;
  background: #fbfdff;
  border-bottom: 1px solid transparent;
}
.share-workspace-photo-group.expanded .share-workspace-photo-group-head { border-bottom-color: #e8edf4; }
.share-workspace-photo-group-summary {
  min-width: 0;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  border: 0;
  background: transparent;
  text-align: left;
  cursor: pointer;
}
.share-workspace-photo-group-summary > span { min-width: 0; display: grid; gap: 2px; }
.share-workspace-photo-group-summary strong,
.share-workspace-photo-group-summary em { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.share-workspace-photo-group-summary strong { color: #0f172a; font-size: 12px; }
.share-workspace-photo-group-summary em { color: #64748b; font-size: 10px; font-style: normal; }
.share-workspace-photo-group-summary > b {
  flex: 0 0 auto;
  padding: 3px 7px;
  border-radius: 999px;
  background: #dbeafe;
  color: #1d4ed8;
  font-size: 10px;
}
.share-workspace-photo-group-actions { display: flex; gap: 5px; }
.share-workspace-photo-group > .share-workspace-photo-grid { padding: 8px; }
.share-workspace-photo-preview-strip {
  width: 100%;
  min-height: 76px;
  display: grid;
  grid-template-columns: minmax(58px, 82px) minmax(110px,1fr);
  align-items: center;
  gap: 6px;
  padding: 7px 8px 9px;
  border: 0;
  background: #fff;
  text-align: left;
  cursor: pointer;
}
.share-workspace-photo-preview-strip > span {
  height: 58px;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  border: 1px solid #e2e8f0;
  border-radius: 8px;
  background: #eef2f7;
}
.share-workspace-photo-preview-strip img { width: 100%; height: 100%; object-fit: cover; }
.share-workspace-photo-preview-strip b { color: #475569; font-size: 13px; }
.share-workspace-photo-preview-strip > em { color: #64748b; font-size: 10px; font-style: normal; text-align: left; }
.share-workspace-photo-more { display: flex; justify-content: center; padding: 0 8px 9px; }
.share-workspace-photo-more .btn { min-height: 32px; padding: 0 12px; font-size: 10px; }
.share-workspace-photo-more small { color: #64748b; font-size: 9px; }
.share-workspace-photo-thumb img,
.share-workspace-photo-preview-strip img { background: linear-gradient(110deg, #e2e8f0 8%, #f8fafc 18%, #e2e8f0 33%); }

@media (max-width: 1050px) and (min-width: 761px) {
  #share-create.share-workspace-page.active {
    height: calc(100dvh - 48px);
    min-height: 0;
    overflow: hidden;
  }
  .share-workspace-shell { min-height: 0; height: 100%; overflow: hidden; }
}

@media (max-width: 760px) {
  #share-create.share-workspace-page.active { height: calc(100dvh - 88px); }
  .share-workspace-photo-group-head { grid-template-columns: minmax(0,1fr); gap: 5px; padding: 6px; }
  .share-workspace-photo-group-actions { justify-content: flex-end; }
  .share-workspace-photo-group-actions .btn { min-height: 28px; padding: 0 7px; font-size: 9px; }
  .share-workspace-photo-preview-strip {
    min-height: 58px;
    grid-template-columns: 54px minmax(0,1fr);
    gap: 4px;
    padding: 5px;
  }
  .share-workspace-photo-preview-strip > span { height: 48px; }
  .share-workspace-photo-preview-strip > em { grid-column: auto; padding: 0; text-align: left; }
}

/* v56.02.09 모바일 공유작성 선택자료 접근성 보완 */
@media (max-width: 760px) {
  /* 선택자료 버튼은 항상 보이도록 화면 우측 하단에 고정한다. */
  .share-workspace-selected-toggle {
    position: fixed !important;
    z-index: 9395 !important;
    right: 14px !important;
    bottom: calc(14px + env(safe-area-inset-bottom, 0px)) !important;
    min-width: 108px !important;
    min-height: 44px !important;
    padding: 0 12px !important;
    border-radius: 999px !important;
    box-shadow: 0 12px 28px rgba(15, 23, 42, .22) !important;
  }
  /* PC의 우측 패널은 모바일에서 하단 시트로 열어 선택자료와 공유생성을 함께 확인한다. */
  .share-workspace-selected-panel {
    position: fixed !important;
    z-index: 9400 !important;
    top: auto !important;
    left: 0 !important;
    right: 0 !important;
    bottom: 0 !important;
    width: 100vw !important;
    height: min(84dvh, 720px) !important;
    max-height: calc(100dvh - 68px) !important;
    grid-template-rows: auto minmax(90px, .72fr) minmax(230px, 1.28fr) !important;
    border-radius: 18px 18px 0 0 !important;
    transform: translateY(105%) !important;
    transition: transform .22s ease !important;
    box-shadow: 0 -16px 42px rgba(15, 23, 42, .24) !important;
  }
  .share-workspace-selected-panel.mobile-open {
    transform: translateY(0) !important;
  }
  .share-workspace-selected-head {
    min-height: 54px !important;
    padding: 9px 12px !important;
  }
  .share-workspace-selected-items {
    min-height: 0 !important;
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch;
  }
  .share-workspace-form {
    min-height: 0 !important;
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch;
    padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px)) !important;
  }
  .share-workspace-form-actions {
    position: sticky;
    bottom: 0;
    padding-top: 6px;
    background: #fbfdff;
  }
}

/* 휴대폰 가로모드에서는 선택자료를 우측 슬라이드 패널로 표시한다. */
@media (orientation: landscape) and (max-height: 620px) and (hover: none) and (pointer: coarse) {
  .share-workspace-selected-toggle {
    position: fixed !important;
    z-index: 9395 !important;
    right: 12px !important;
    bottom: 12px !important;
    min-width: 108px !important;
    min-height: 40px !important;
    padding: 0 11px !important;
    border-radius: 999px !important;
    box-shadow: 0 10px 26px rgba(15, 23, 42, .22) !important;
  }
  .share-workspace-selected-panel {
    position: fixed !important;
    z-index: 9400 !important;
    top: 0 !important;
    left: auto !important;
    right: 0 !important;
    bottom: 0 !important;
    width: min(520px, 82vw) !important;
    height: 100dvh !important;
    max-height: none !important;
    grid-template-rows: auto minmax(76px, .65fr) minmax(180px, 1.35fr) !important;
    border-radius: 16px 0 0 16px !important;
    transform: translateX(105%) !important;
    transition: transform .22s ease !important;
    box-shadow: -14px 0 34px rgba(15, 23, 42, .24) !important;
  }
  .share-workspace-selected-panel.mobile-open {
    transform: translateX(0) !important;
  }
  .share-workspace-selected-items,
  .share-workspace-form {
    min-height: 0 !important;
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch;
  }
  .share-workspace-mobile-close {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
  }
}
/* ===== parcelManagement.css ===== */
/* v56.02 택배관리 1차 */
.quote-parcel-view{display:block}.quote-parcel-view.hidden,.parcel-form-view.hidden,.parcel-manager-view.hidden{display:none}
.parcel-manager-card,.parcel-form-card{padding:18px}
.parcel-manager-head,.parcel-form-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:15px}
.parcel-manager-head h2,.parcel-form-head h2{font-size:22px;margin:2px 0 4px;color:#172033}.parcel-manager-head .eyebrow,.parcel-form-head .eyebrow{display:block;color:#64748b;font-size:11px;font-weight:800;letter-spacing:.06em}
.parcel-search-box{width:min(420px,100%)}.parcel-search-box input,.parcel-source-search input{width:100%;min-height:42px;border:1px solid #d7dde8;border-radius:13px;background:#fff;padding:9px 13px;font-size:13px;outline:0}.parcel-search-box input:focus,.parcel-source-search input:focus{border-color:#93a9dc;box-shadow:0 0 0 3px rgba(71,119,232,.1)}
.parcel-split-list{display:grid;grid-template-columns:1fr 1fr;gap:14px;min-height:470px}.parcel-list-panel{display:flex;flex-direction:column;min-width:0;border:1px solid #e1e6ee;border-radius:17px;background:#f8fafc;overflow:hidden}.parcel-list-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 14px;border-bottom:1px solid #e4e9f0;background:#fff}.parcel-list-head>div{display:flex;align-items:center;gap:7px}.parcel-list-head strong{font-size:14px;color:#172033}.parcel-list-head span{display:inline-flex;padding:3px 7px;border-radius:999px;background:#eef2f7;color:#64748b;font-size:10px;font-weight:800}.parcel-list-head .btn{padding:8px 11px;font-size:11px}
.parcel-row-list{display:flex;flex-direction:column;gap:7px;overflow:auto;max-height:61vh;min-height:390px;padding:10px;overscroll-behavior:contain}.parcel-row{width:100%;display:grid;grid-template-columns:68px minmax(0,1fr) auto;align-items:center;gap:10px;border:1px solid #e1e6ee;border-radius:13px;background:#fff;padding:11px 12px;text-align:left;cursor:pointer;transition:border-color .16s,box-shadow .16s,transform .16s}.parcel-row:hover{border-color:#aebde0;box-shadow:0 6px 16px rgba(15,23,42,.07);transform:translateY(-1px)}.parcel-row.is-done{background:#f3f4f6;color:#6b7280}.parcel-row.is-alert{border-color:#fecaca;background:#fff8f8}.parcel-row-date{font-size:11px;font-weight:800;color:#64748b;font-variant-numeric:tabular-nums}.parcel-row-main{display:flex;flex-direction:column;gap:3px;min-width:0}.parcel-row-main strong{font-size:13px;color:#172033;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.parcel-row-main small{font-size:10px;color:#64748b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.parcel-row-main em{font-size:9px;color:#2d5ead;font-style:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.parcel-row-status{display:inline-flex;align-items:center;justify-content:center;min-height:25px;padding:0 8px;border-radius:999px;background:#f1f5f9;color:#475569;font-size:10px;font-weight:800;white-space:nowrap}.parcel-row.is-moving .parcel-row-status{background:#eef4ff;color:#2456b8}.parcel-row.is-done .parcel-row-status{background:#e5e7eb;color:#6b7280}.parcel-row.is-alert .parcel-row-status{background:#fee2e2;color:#b42318}.parcel-empty{display:flex;align-items:center;justify-content:center;min-height:110px;padding:20px;border:1px dashed #cbd5e1;border-radius:13px;color:#64748b;font-size:12px;text-align:center}
.parcel-direction-switch{display:inline-flex;border:1px solid #d9e0ea;border-radius:999px;background:#f3f6fa;padding:3px}.parcel-direction-switch button{min-width:84px;border:0;border-radius:999px;background:transparent;color:#64748b;padding:8px 15px;font-size:12px;font-weight:800;cursor:pointer}.parcel-direction-switch button.active{background:#172033;color:#fff;box-shadow:0 3px 9px rgba(15,23,42,.18)}
.parcel-form-layout{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(330px,.75fr);gap:14px;align-items:start}.parcel-input-column{display:flex;flex-direction:column;gap:11px}.parcel-section{border:1px solid #e1e6ee;border-radius:16px;background:#fbfcfe;padding:13px}.parcel-section-title{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:11px}.parcel-section-title strong{font-size:13px;color:#172033}.parcel-source-buttons{display:flex;flex-wrap:wrap;gap:5px}.parcel-source-buttons .btn{padding:6px 9px;font-size:10px}.parcel-basic-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.parcel-inline-input{display:flex;gap:6px}.parcel-inline-input input{min-width:0;flex:1}.parcel-inline-input .btn{flex:none;padding:8px 10px;font-size:10px}.parcel-section textarea{resize:vertical;min-height:64px}
.parcel-preview-column{position:sticky;top:18px;display:flex;flex-direction:column;gap:11px;min-width:0}.parcel-label-preview-card{min-height:360px;border:2px solid #172033;border-radius:18px;background:#fff;padding:22px;display:flex;flex-direction:column;box-shadow:0 12px 28px rgba(15,23,42,.06)}.parcel-preview-topline{display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:2px solid #172033;padding-bottom:13px}.parcel-preview-topline strong{font-size:19px}.parcel-preview-topline span{font-size:14px;font-weight:900}.parcel-preview-address{flex:1;display:flex;align-items:center;padding:22px 0;font-size:25px;font-weight:900;line-height:1.35;word-break:keep-all}.parcel-preview-recipient{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;border-top:2px solid #172033;padding-top:14px}.parcel-preview-recipient strong{font-size:18px}.parcel-preview-recipient span{font-size:13px;font-weight:800;text-align:right}.parcel-preview-item{margin-top:9px;color:#475569;font-size:11px}.parcel-tracking-summary-card{border:1px solid #dfe5ee;border-radius:16px;background:#fff;padding:13px}.parcel-tracking-summary-card.parcel-tracking-primary{min-height:250px}.parcel-tracking-empty{display:flex;align-items:center;justify-content:center;min-height:90px;border:1px dashed #cbd5e1;border-radius:12px;color:#64748b;font-size:11px;line-height:1.5;text-align:center;padding:15px}.parcel-tracking-compact{display:flex;flex-direction:column;gap:7px}.parcel-tracking-compact>div{display:flex;align-items:flex-start;gap:8px}.parcel-tracking-compact strong{font-size:11px;line-height:1.45;color:#334155}.parcel-tracking-compact small{color:#64748b;font-size:10px}.parcel-track-state{display:inline-flex;align-items:center;min-height:23px;padding:0 8px;border-radius:999px;background:#f1f5f9;color:#475569;font-size:9px;font-weight:900;white-space:nowrap}.parcel-track-state.is-moving{background:#eaf2ff;color:#2456b8}.parcel-track-state.is-done{background:#e5e7eb;color:#64748b}.parcel-track-state.is-alert{background:#fee2e2;color:#b42318}.parcel-form-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.parcel-form-actions .btn{font-size:11px;padding:9px 11px}.parcel-delete-link{align-self:flex-end;border:0;background:transparent;color:#b42318;font-size:10px;text-decoration:underline;cursor:pointer;padding:2px 4px}
.parcel-source-backdrop,.parcel-tracking-backdrop{display:none}.parcel-source-modal{width:min(760px,calc(100vw - 28px));max-height:82vh;display:flex;flex-direction:column}.parcel-source-search{margin-bottom:10px}.parcel-source-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;overflow:auto;min-height:220px;padding:2px}.parcel-source-row{display:flex;flex-direction:column;gap:4px;min-width:0;border:1px solid #e1e6ee;border-radius:13px;background:#fff;padding:11px;text-align:left;cursor:pointer}.parcel-source-row:hover{border-color:#93a9dc;background:#f8fbff}.parcel-source-row strong{font-size:12px;color:#172033;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.parcel-source-row span{font-size:10px;color:#475569;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.parcel-source-row small{font-size:9px;color:#64748b;line-height:1.4}.parcel-tracking-modal{width:min(680px,calc(100vw - 28px));max-height:84vh}.parcel-tracking-modal-body{overflow:auto;max-height:61vh}.parcel-tracking-modal-summary{display:flex;align-items:center;gap:10px;border:1px solid #dfe5ee;border-radius:13px;background:#f8fafc;padding:12px;margin-bottom:11px}.parcel-tracking-modal-summary strong{font-size:12px;color:#334155}.parcel-track-timeline{display:flex;flex-direction:column;gap:7px}.parcel-track-step{display:grid;grid-template-columns:125px minmax(0,1fr);gap:10px;border:1px solid #e2e7ef;border-radius:12px;background:#fff;padding:10px}.parcel-track-step time{font-size:10px;color:#64748b}.parcel-track-step div{display:flex;flex-direction:column;gap:3px}.parcel-track-step strong{font-size:11px;color:#172033}.parcel-track-step span{font-size:10px;color:#64748b}
.quote-new-type-parcel{border-color:#dbeafe!important;background:linear-gradient(145deg,#fff,#f4f8ff)!important}.parcel-api-settings-card{border-left:3px solid #4777e8}
@media(max-width:1180px){.parcel-form-layout{grid-template-columns:minmax(0,1fr) 330px}.parcel-preview-address{font-size:21px}.parcel-basic-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:900px){.parcel-split-list{grid-template-columns:1fr;min-height:0}.parcel-row-list{min-height:260px;max-height:46vh}.parcel-form-layout{grid-template-columns:1fr}.parcel-preview-column{position:static}.parcel-label-preview-card{min-height:300px}.parcel-source-list{grid-template-columns:1fr}}
@media(max-width:680px){.parcel-manager-card,.parcel-form-card{padding:13px}.parcel-manager-head,.parcel-form-head{flex-direction:column;align-items:stretch}.parcel-search-box{width:100%}.parcel-form-head .parcel-direction-switch{align-self:stretch}.parcel-direction-switch button{flex:1}.parcel-list-head{align-items:flex-start}.parcel-list-head .btn{padding:7px 8px}.parcel-row{grid-template-columns:58px minmax(0,1fr)}.parcel-row-status{grid-column:2;justify-self:start}.parcel-basic-grid{grid-template-columns:1fr}.parcel-inline-input{align-items:stretch}.parcel-preview-address{font-size:19px;padding:17px 0}.parcel-preview-recipient{align-items:flex-start;flex-direction:column}.parcel-preview-recipient span{text-align:left}.parcel-form-actions{display:grid;grid-template-columns:1fr 1fr}.parcel-form-actions .btn{width:100%}.parcel-section-title{align-items:flex-start;flex-direction:column}.parcel-source-buttons{width:100%}.parcel-source-buttons .btn{flex:1}.parcel-track-step{grid-template-columns:1fr;gap:4px}}

/* v56.02.01 택배관리 UI 정리 */
.parcel-manager-head{
  align-items:center;
}
.parcel-manager-head h2{
  flex:none;
  margin:0;
  white-space:nowrap;
}
.parcel-search-box{
  flex:1 1 620px;
  width:auto;
  max-width:760px;
  margin-left:auto;
}
.parcel-source-buttons .btn{
  padding:7px 11px;
  font-size:12px;
  font-weight:800;
}
#parcelContactSelect{
  width:100%;
  min-height:38px;
}
.click-address-input{
  cursor:pointer;
  background:#fff;
}
.click-address-input:hover{
  border-color:#93a9dc;
  background:#f8fbff;
}
.parcel-source-modal{
  position:relative;
  padding-top:18px;
}
.parcel-source-modal-head{
  padding-right:88px;
}
.parcel-source-close{
  position:absolute;
  top:16px;
  right:16px;
  z-index:3;
}
.parcel-source-relation-tabs{
  display:flex;
  align-items:center;
  gap:6px;
  margin:0 0 10px;
  padding-right:88px;
}
.parcel-source-relation-tabs .btn{
  min-width:92px;
  padding:8px 13px;
  font-size:12px;
  font-weight:800;
}
.parcel-source-relation-tabs .btn.active{
  border-color:#172033;
  background:#172033;
  color:#fff;
}
@media(max-width:680px){
  .parcel-manager-head{
    align-items:stretch;
  }
  .parcel-search-box{
    flex-basis:auto;
    max-width:none;
    margin-left:0;
  }
  .parcel-source-modal{
    padding-top:14px;
  }
  .parcel-source-modal-head,
  .parcel-source-relation-tabs{
    padding-right:76px;
  }
  .parcel-source-close{
    top:12px;
    right:12px;
  }
}


/* v56.02.02 택배관리 일반 목록 · 조회창 보정 */
.parcel-split-list{align-items:stretch}
.parcel-list-panel{background:#fff;border-radius:14px;overflow:hidden}
.parcel-table-wrap{flex:1;min-height:390px;max-height:61vh;overflow:auto;background:#fff}
.parcel-list-table{width:100%;min-width:520px;border-collapse:collapse;table-layout:fixed}
.parcel-list-table th{position:sticky;top:0;z-index:1;background:#f7f9fc;color:#64748b;font-size:10px;font-weight:900;text-align:left;padding:9px 10px;border-bottom:1px solid #dfe5ed}
.parcel-list-table th:nth-child(1){width:74px}.parcel-list-table th:nth-child(2){width:30%}.parcel-list-table th:nth-child(4){width:78px;text-align:center}
.parcel-list-table td{padding:10px;border-bottom:1px solid #e7ebf1;color:#334155;font-size:11px;vertical-align:middle;overflow:hidden}
.parcel-table-row{cursor:pointer;background:#fff;transition:background .14s}.parcel-table-row:hover{background:#f7faff}.parcel-table-row.is-done{background:#f3f4f6;color:#6b7280}.parcel-table-row.is-alert{background:#fff7f7}.parcel-table-row:focus{outline:2px solid #93a9dc;outline-offset:-2px}
.parcel-table-date{color:#64748b;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap}.parcel-table-name,.parcel-table-meta{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.parcel-table-name{color:#172033;font-size:12px}.parcel-table-meta{color:#334155}.parcel-list-table td small,.parcel-table-relation{display:block;margin-top:3px;color:#7b8798;font-size:9px;font-style:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.parcel-table-relation{color:#2d5ead}
.parcel-empty-cell{height:120px!important;text-align:center!important;color:#64748b!important;background:#fff!important}
.parcel-inline-input .btn{min-width:58px;padding:8px 13px;font-size:12px;font-weight:900}
.parcel-tracking-modal{position:relative;padding-top:18px}.parcel-tracking-modal .modal-head{padding-right:82px}.parcel-tracking-modal .modal-close{position:absolute;top:16px;right:16px;z-index:3}
.parcel-api-settings-card{border-left:0}
@media(max-width:900px){.parcel-table-wrap{min-height:260px;max-height:46vh}}
@media(max-width:680px){.parcel-list-table{min-width:480px}.parcel-tracking-modal{padding-top:14px}.parcel-tracking-modal .modal-head{padding-right:74px}.parcel-tracking-modal .modal-close{top:12px;right:12px}}

/* v56.02.03 택배관리 한 줄 목록 · 자동상태 · 간단 수정팝업 */
.parcel-list-table{min-width:660px}
.parcel-list-table th{padding:8px 9px;font-size:10px;white-space:nowrap}
.parcel-list-table td{height:38px;padding:7px 9px;font-size:10px;white-space:nowrap;text-overflow:ellipsis}
.parcel-list-table th:nth-child(1){width:70px}
.parcel-list-table th:nth-child(2){width:24%}
.parcel-list-table th:nth-child(3){width:92px}
.parcel-list-table th:nth-child(4){width:105px}
.parcel-list-table th:nth-child(5){width:128px}
.parcel-list-table th:nth-child(6){width:72px;text-align:center}
.parcel-list-table td:last-child{text-align:center}
.parcel-table-name,.parcel-table-meta,.parcel-tracking-number-cell{display:block;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.parcel-table-name{font-size:11px}
.parcel-list-table .status{min-width:52px;justify-content:center;padding:4px 7px;font-size:9px}
.parcel-status-display{display:flex;min-height:38px;align-items:center;gap:7px;padding:5px 0}
.parcel-status-display .status{min-width:56px;justify-content:center}
.parcel-status-display small{color:#7b8798;font-size:9px;white-space:nowrap}
.parcel-create-actions{justify-content:flex-end}
.parcel-detail-backdrop{display:none}
.parcel-detail-modal{position:relative;width:min(980px,calc(100vw - 28px));max-height:90vh;overflow:auto}
.parcel-detail-header{position:sticky;top:0;z-index:3;margin:-18px -18px 14px;padding:16px 18px 12px;background:#fff;border-bottom:1px solid #e4e9f0}
.parcel-detail-body{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(250px,.65fr);gap:13px;align-items:start}
.parcel-detail-main{display:flex;flex-direction:column;gap:10px;min-width:0}
.parcel-detail-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.parcel-detail-section{padding:12px;border:1px solid #e1e6ee;border-radius:14px;background:#fbfcfe}
.parcel-detail-outbound-fields{min-width:0}
.parcel-detail-side{position:sticky;top:70px}
.parcel-detail-relations{border:1px solid #e1e6ee;border-radius:14px;background:#fff;padding:0 12px}
.parcel-detail-relations summary{cursor:pointer;padding:11px 0;color:#334155;font-size:11px;font-weight:900}
.parcel-detail-relations[open] summary{margin-bottom:9px;border-bottom:1px solid #edf0f4}
.parcel-detail-relations>.form-grid{padding-bottom:12px}
.parcel-detail-actions{position:sticky;bottom:-18px;z-index:3;margin:14px -18px -18px;padding:12px 18px;background:#fff;border-top:1px solid #e4e9f0}
.parcel-detail-modal>.parcel-delete-link{display:block;margin:8px 0 0 auto}
@media(max-width:900px){.parcel-list-table{min-width:620px}.parcel-detail-body{grid-template-columns:1fr}.parcel-detail-side{position:static}.parcel-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:680px){.parcel-list-table{min-width:600px}.parcel-detail-modal{width:calc(100vw - 18px);padding:13px}.parcel-detail-header{margin:-13px -13px 12px;padding:13px}.parcel-detail-actions{bottom:-13px;margin:12px -13px -13px;padding:11px 13px}.parcel-detail-grid{grid-template-columns:1fr}.parcel-status-display{align-items:flex-start;flex-direction:column}}

/* v56.02.04 택배목록 시인성 · 상세요약 팝업 */
.parcel-list-table th{font-size:11.5px;padding:9px 10px;line-height:1.25;vertical-align:middle}
.parcel-list-table td{height:42px;font-size:12px;padding:8px 10px;line-height:1.25;vertical-align:middle}
.parcel-table-name{font-size:13px;font-weight:900}
.parcel-table-meta,.parcel-tracking-number-cell{font-size:11.5px}
.parcel-list-table .status{min-width:58px;font-size:10.5px;padding:5px 8px}
.parcel-list-table th:nth-child(1),.parcel-list-table td:nth-child(1){width:78px;text-align:left}
.parcel-list-table th:nth-child(2),.parcel-list-table td:nth-child(2){width:28%;text-align:left}
.parcel-list-table th:nth-child(3),.parcel-list-table td:nth-child(3){width:92px;text-align:center}
.parcel-list-table th:nth-child(4),.parcel-list-table td:nth-child(4){width:108px;text-align:center}
.parcel-list-table th:nth-child(5),.parcel-list-table td:nth-child(5){width:138px;text-align:center}
.parcel-list-table th:nth-child(6),.parcel-list-table td:nth-child(6){width:82px;text-align:center}

.parcel-detail-modal{width:min(860px,calc(100vw - 28px));height:min(82vh,760px);max-height:82vh;overflow:hidden;display:flex;flex-direction:column;padding:18px}
.parcel-detail-header{position:static;flex:0 0 auto;margin:-18px -18px 0;padding:16px 18px 13px}
.parcel-detail-summary-view{display:flex;flex-direction:column;gap:12px}
.parcel-detail-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:9px}
.parcel-detail-summary-item{min-width:0;border:1px solid #e2e7ee;border-radius:13px;background:#fbfcfe;padding:11px 12px}
.parcel-detail-summary-item.span-2{grid-column:span 2}
.parcel-detail-summary-item strong{display:block;margin-bottom:5px;color:#64748b;font-size:10px;font-weight:900}
.parcel-detail-summary-item span{display:block;min-height:18px;color:#172033;font-size:12.5px;font-weight:800;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.parcel-detail-summary-item.span-2 span{white-space:normal;word-break:break-word}
.parcel-detail-summary-memo{margin:0;font-size:12px;line-height:1.55}
.parcel-detail-summary-relation{display:flex;align-items:center;gap:10px;border:1px solid #dbe4ef;border-radius:12px;background:#f7faff;padding:10px 12px}
.parcel-detail-summary-relation strong{flex:0 0 auto;color:#2d5ead;font-size:11px}
.parcel-detail-summary-relation span{min-width:0;color:#475569;font-size:11.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.parcel-detail-edit-view{display:flex;flex-direction:column;gap:11px}
.parcel-detail-edit-section{border:1px solid #e1e6ee;border-radius:14px;background:#fbfcfe;padding:12px}
.parcel-detail-actions{position:static;flex:0 0 auto;margin:8px -18px -18px;padding:11px 18px;min-height:58px;background:#fff;border-top:1px solid #e4e9f0;overflow:visible}
.parcel-detail-modal>.parcel-delete-link{flex:0 0 auto;margin:8px 0 0 auto}
.parcel-detail-modal:not(.is-editing)>.parcel-delete-link{display:none!important}

@media(max-width:900px){
  .parcel-detail-modal{height:min(88vh,780px);max-height:88vh}
  .parcel-detail-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:680px){
  .parcel-list-table th{font-size:11px}.parcel-list-table td{font-size:11.5px}.parcel-table-name{font-size:12.5px}
  .parcel-detail-modal{width:calc(100vw - 18px);height:90vh;max-height:90vh;padding:13px}
    .parcel-detail-scroll{padding-top:11px}
    .parcel-detail-summary-item.span-2{grid-column:auto}
  }


/* v56.02.05 택배목록 확대 · 자료실형 간단 상세 */
.parcel-list-table th{font-size:12.5px!important;padding:10px 11px!important;line-height:1.3!important}
.parcel-list-table td{height:46px!important;font-size:13px!important;padding:9px 11px!important;line-height:1.35!important}
.parcel-table-name{font-size:14px!important;font-weight:900!important}.parcel-table-meta,.parcel-tracking-number-cell{font-size:12.5px!important}.parcel-list-table .status{font-size:11.5px!important;min-width:62px!important}
.parcel-detail-modal{width:min(880px,calc(100vw - 28px));height:auto;max-height:90vh;padding:18px;overflow:hidden;display:flex;flex-direction:column}
.parcel-detail-modal.is-editing{width:min(980px,calc(100vw - 28px));height:min(90vh,820px)}
.parcel-detail-header{position:static;margin:-18px -18px 0;padding:16px 18px 13px;flex:0 0 auto}.parcel-detail-header-actions{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.parcel-detail-scroll{flex:1 1 auto;min-height:0;overflow:auto;padding:14px 2px 8px}.parcel-detail-summary-view{gap:11px}
.parcel-detail-summary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;border:1px solid #e2e7ee;border-radius:15px;background:#fff;overflow:hidden}
.parcel-detail-summary-row{display:grid;grid-template-columns:86px minmax(0,1fr);align-items:center;gap:10px;min-width:0;min-height:48px;padding:10px 12px;border-right:1px solid #edf0f4;border-bottom:1px solid #edf0f4;background:#fff}
.parcel-detail-summary-row:nth-child(2n){border-right:0}.parcel-detail-summary-row.wide{grid-column:auto}.parcel-detail-summary-row.full{grid-column:1/-1;border-right:0}
.parcel-detail-summary-row strong{color:#64748b;font-size:11px;font-weight:900}.parcel-detail-summary-row span{min-width:0;color:#172033;font-size:13px;font-weight:800;line-height:1.45;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.parcel-detail-summary-row.full span{white-space:normal;word-break:break-word}
.parcel-detail-summary-memo{margin:0;padding:12px 14px;border-radius:13px;font-size:12.5px;line-height:1.55}.parcel-detail-summary-relation{padding:11px 13px}.parcel-detail-summary-relation strong{font-size:11.5px}.parcel-detail-summary-relation span{font-size:12px}
.parcel-detail-summary-tracking{margin:0}.parcel-detail-actions{position:static;flex:0 0 auto;margin:8px -18px -18px;padding:11px 18px;min-height:58px;overflow:visible}.parcel-detail-actions .btn{min-height:34px}
@media(max-width:680px){.parcel-list-table th{font-size:12px!important}.parcel-list-table td{font-size:12.5px!important}.parcel-table-name{font-size:13.5px!important}.parcel-detail-modal,.parcel-detail-modal.is-editing{width:calc(100vw - 18px);height:auto;max-height:92vh;padding:13px}.parcel-detail-header{margin:-13px -13px 0;padding:13px}.parcel-detail-header-actions{gap:6px}.parcel-detail-summary-grid{grid-template-columns:1fr}.parcel-detail-summary-row,.parcel-detail-summary-row:nth-child(2n){border-right:0}.parcel-detail-summary-row{grid-template-columns:78px minmax(0,1fr)}.parcel-detail-actions{margin:8px -13px -13px;padding:10px 13px;flex-wrap:wrap}}


/* v56.02.06 택배 상세 배송상태 가독성 · 배송조회 팝업 계층 보정 */
.parcel-detail-summary-tracking .parcel-tracking-compact>div{align-items:center;gap:10px}
.parcel-detail-summary-tracking .parcel-tracking-compact strong{font-size:13.5px;line-height:1.5;color:#26364d;font-weight:800}
.parcel-detail-summary-tracking .parcel-tracking-compact small{font-size:11.5px;line-height:1.45}
.parcel-detail-modal .parcel-status-display small{font-size:11.5px;line-height:1.35;color:#64748b}
.parcel-detail-modal .parcel-track-state,.parcel-detail-summary-tracking .status{font-size:11.5px;min-height:25px;padding-inline:9px}
.parcel-tracking-backdrop{z-index:12060!important}
.parcel-tracking-modal{z-index:12061!important}

/* v56.02.07 저장된 배송진행 보기 */
.parcel-tracking-head-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;min-width:0}
.parcel-tracking-head-actions .small{white-space:nowrap}
.parcel-stored-track-button{min-height:29px;padding:5px 9px;font-size:11px;font-weight:900;white-space:nowrap}
@media(max-width:680px){
  .parcel-detail-summary-tracking .parcel-section-title{flex-direction:row;align-items:center}
  .parcel-tracking-head-actions{flex-wrap:wrap}
}
/* ===== jhSelect.css ===== */
/* v56.00: 전 사이트 JH 공통 둥근 드롭다운 */
.jh-select {
  position: relative;
  display: block;
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
}
.jh-select-native {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  margin: -1px !important;
  padding: 0 !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  clip-path: inset(50%) !important;
  white-space: nowrap !important;
  border: 0 !important;
  opacity: 0 !important;
  pointer-events: none !important;
}
.jh-select-trigger {
  position: relative;
  display: block;
  width: 100%;
  min-width: 0;
  min-height: 38px;
  height: 38px;
  box-sizing: border-box;
  border: 1px solid #d7dde8;
  border-radius: 12px;
  background: #fff;
  padding: 7px 36px 7px 11px;
  color: #172033;
  font: inherit;
  font-size: 13px;
  line-height: 1.25;
  text-align: left;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
  transition: border-color .14s ease, box-shadow .14s ease, background .14s ease;
}
.jh-select-trigger::after {
  content: "";
  position: absolute;
  right: 13px;
  top: 50%;
  width: 7px;
  height: 7px;
  border-right: 2px solid #64748b;
  border-bottom: 2px solid #64748b;
  transform: translateY(-70%) rotate(45deg);
  transition: transform .15s ease;
  pointer-events: none;
}
.jh-select-trigger:hover {
  border-color: #aebbd0;
  background: #fbfdff;
}
.jh-select.is-open .jh-select-trigger,
.jh-select-trigger:focus-visible {
  outline: none;
  border-color: #ff715d;
  box-shadow: 0 0 0 3px rgba(255,90,67,.12);
}
.jh-select.is-open .jh-select-trigger::after {
  transform: translateY(-28%) rotate(225deg);
}
.jh-select-trigger:disabled {
  background: #f3f4f6;
  color: #94a3b8;
  border-color: #e2e8f0;
  cursor: default;
}
.jh-select-menu {
  position: fixed;
  z-index: 100000;
  overflow: auto;
  overscroll-behavior: contain;
  border: 1px solid #e8dcd8;
  border-radius: 20px;
  background: rgba(255,255,255,.985);
  padding: 8px;
  box-sizing: border-box;
  box-shadow: 0 22px 52px rgba(22,26,32,.21), 0 4px 14px rgba(22,26,32,.08);
  backdrop-filter: blur(14px);
}
.jh-select-menu[hidden] { display: none !important; }
.jh-select-menu-list { display: grid; gap: 5px; }
.jh-select-option {
  display: block;
  width: 100%;
  min-height: 40px;
  border: 1px solid transparent;
  border-radius: 13px;
  background: transparent;
  padding: 9px 13px;
  color: #34383f;
  font: inherit;
  font-size: 12px;
  font-weight: 700;
  line-height: 1.3;
  text-align: left;
  cursor: pointer;
}
.jh-select-option:hover,
.jh-select-option:focus-visible {
  outline: none;
  border-color: #ffd6cf;
  background: #fff5f2;
}
.jh-select-option.selected {
  border-color: #ffc6bc;
  background: #ffebe7;
  color: #a83829;
  font-weight: 800;
  box-shadow: inset 3px 0 0 #f04d39;
}
.jh-select-option:disabled {
  color: #a6afbe;
  cursor: default;
  background: transparent;
}
.jh-select-group {
  padding: 8px 9px 4px;
  color: #7b8798;
  font-size: 10px;
  font-weight: 900;
  letter-spacing: .04em;
}
.jh-select-empty {
  padding: 12px 10px;
  color: #94a3b8;
  font-size: 12px;
  text-align: center;
}
.jh-select-inline {
  width: auto;
  min-width: 126px;
  flex: 0 1 auto;
}
.jh-select-inline .jh-select-trigger { min-width: 126px; }

/* 기존 장비상태 캡슐형은 닫힌 상태도 그대로 유지 */
.jh-select-status .jh-select-trigger.status-select {
  min-height: 28px;
  height: 28px;
  border: 0;
  border-radius: 999px;
  padding: 5px 29px 5px 10px;
  font-size: 12px;
  font-weight: 800;
  box-shadow: none;
}
.jh-select-status .jh-select-trigger.status-select::after {
  right: 11px;
  width: 6px;
  height: 6px;
}

/* 장비 IP LIST 상단 폼: 라벨과 모든 입력 높이·기준선을 통일 */
.equipment-ip-meta-row > label {
  display: flex;
  min-width: 0;
  flex-direction: column;
  gap: 5px;
  justify-content: flex-end;
}
.equipment-ip-meta-row > label > input,
.equipment-ip-meta-row > label > .jh-select {
  margin-top: 0 !important;
}
.equipment-ip-meta-row .jh-select-trigger,
.equipment-ip-meta-row input {
  min-height: 38px;
  height: 38px;
}

/* 각 장비자료 영역의 배치에 맞춘 폭 */
.equipment-recorder-filter-row > .jh-select { min-width: 0; }
.equipment-nvr-meta .jh-select,
.quote-manual-form .jh-select,
.manual-template-manager-form .jh-select,
.bulk-import-fields .jh-select,
.bulk-table .jh-select,
.device-network-editor .jh-select { width: 100%; }
.manual-template-picker-row > .jh-select { min-width: 0; }
.network-bulk-apply > .jh-select { width: auto; min-width: 150px; }
.device-toolbar .device-actions > .jh-select { min-width: 112px; }
.device-toolbar .device-actions > .jh-select .jh-select-trigger { min-width: 112px; }

@media (max-width: 680px) {
  .jh-select-inline,
  .jh-select-inline .jh-select-trigger { width: 100%; min-width: 0; }
  .network-bulk-apply > .jh-select { width: 100%; min-width: 0; }
}


/* v56.00: 주소록·공유관리·문서관리·자재관리 포함 전 사이트 배치 통일 */
.form-field > .jh-select,
.form-field label + .jh-select,
.form-grid .jh-select,
.compact-form .jh-select,
.modal .form-field .jh-select {
  width: 100%;
  min-width: 0;
}

/* 검색창 옆 필터는 검색 입력을 밀지 않고 기존 폭을 유지 */
.search-box > .jh-select,
.search-box > span > .jh-select,
.share-status-filter-wrap > .jh-select,
.address-book-filter-row > .jh-select,
.filter-row > .jh-select {
  width: auto;
  min-width: 145px;
  max-width: 220px;
  flex: 0 0 auto;
}
.search-box > .jh-select .jh-select-trigger,
.search-box > span > .jh-select .jh-select-trigger {
  min-width: 145px;
}
.share-status-filter-wrap > .jh-select {
  min-width: 150px;
  max-width: 180px;
}

/* 툴바·액션 영역 */
.address-preview-actions > .jh-select,
.device-actions > .jh-select,
.detail-actions > .jh-select,
.permission-toolbar .jh-select,
.inline-field-action > .jh-select {
  width: auto;
  min-width: 126px;
  max-width: 220px;
  flex: 0 1 auto;
}

/* 주소록 수정 폼은 기존 31px 압축 높이 유지 */
.address-book-form-pane .address-book-form-grid .jh-select-trigger {
  min-height: 31px;
  height: 31px;
  padding: 4px 31px 4px 9px;
  border-radius: 9px;
  line-height: 1.2;
}
.address-book-form-pane .address-book-form-grid .jh-select-trigger::after {
  right: 11px;
  width: 6px;
  height: 6px;
}

/* 첨부 미리보기의 사업자등록증 선택 */
.address-preview-actions > .jh-select-compact {
  width: 130px;
  min-width: 112px;
  max-width: 130px;
}
.address-preview-actions .jh-select-trigger.compact-select {
  width: 100%;
  max-width: none;
  min-height: 34px;
  height: 34px;
  padding: 0 31px 0 9px;
  border-radius: 10px;
  font-weight: 700;
}

/* 표 안 선택목록은 셀 폭을 넘기지 않음 */
.jh-select-table,
.jh-select-table .jh-select-trigger,
td > .jh-select,
td > .jh-select .jh-select-trigger {
  width: 100%;
  min-width: 0;
  max-width: 100%;
}
.quote-edit-table .jh-select-trigger,
.bulk-table .jh-select-trigger,
.equipment-device-table .jh-select-trigger {
  min-height: 36px;
  height: 36px;
  border-radius: 9px;
  padding-top: 6px;
  padding-bottom: 6px;
}

/* 기존 select 전용 폭 규칙을 JH 래퍼에도 이어받음 */
.purchase-material-toolbar .search-box > .jh-select {
  flex: 0 0 150px;
  min-width: 130px;
  max-width: 160px;
}
.share-toolbar .search-box .jh-select {
  max-width: 180px;
}
#material .material-main-card > .material-toolbar .jh-select,
.quote-toolbar .search-box > .jh-select,
.worklog-dashboard + .card .toolbar .jh-select {
  flex: 0 0 auto;
}

/* 잠금·비활성 선택목록 */
.jh-select-trigger.locked-field,
.locked-field + .jh-select-trigger,
.jh-select .jh-select-trigger:disabled {
  background: #f3f4f6 !important;
  color: #6b7280 !important;
  cursor: not-allowed !important;
  border-color: #e5e7eb !important;
}

@media (max-width: 760px) {
  .search-box > .jh-select,
  .search-box > span > .jh-select,
  .share-status-filter-wrap > .jh-select,
  .address-book-filter-row > .jh-select,
  .filter-row > .jh-select,
  .address-preview-actions > .jh-select,
  .device-actions > .jh-select,
  .detail-actions > .jh-select,
  .permission-toolbar .jh-select,
  .inline-field-action > .jh-select {
    width: 100%;
    min-width: 0;
    max-width: none;
    flex: 1 1 100%;
  }
  .search-box > .jh-select .jh-select-trigger,
  .search-box > span > .jh-select .jh-select-trigger {
    min-width: 0;
  }
  .address-preview-actions > .jh-select-compact {
    width: auto;
    min-width: 0;
    max-width: none;
    flex: 1 1 130px;
  }
}

@media (max-width: 760px) {
  .share-status-filter-wrap {
    width: 100%;
  }
}

@media (max-width: 760px) {
  .share-toolbar .search-box .jh-select {
    width: 100%;
    max-width: none;
  }
}
/* ===== main.css overrides ===== */
/* v52.27 안정화: 데이터관리 카드 건수/입금지급 UX */
.data-count-inline{font-size:12px;font-weight:600;color:#6b7280;margin-left:6px;white-space:nowrap}
.data-count-inline strong{color:#111827;margin-right:2px}
.checkbox-line{display:inline-flex;align-items:center;gap:6px;color:#4b5563;font-size:13px;margin-top:6px}
.bulk-vat-grid{margin-top:6px}
#moneyPaidHistoryInfo{margin-top:4px;line-height:1.35}
.share-method-buttons{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
/* v54.48: 대시보드 로딩 hidden 상태 보정 및 모바일 통합 패널 스크롤 유지. */
@media (max-width: 760px) {
  #dashboard .dashboard-stage { overflow: visible !important; }
}
/* v54.50: 제목 보조문구 제거 후 상단 공간 재조정 */
.page > .topbar {
  min-height: 38px;
  margin-bottom: 15px;
  align-items: center;
}
.page > .topbar h1,
.page > .detail-header h1 {
  margin: 0;
  font-size: 27px;
  line-height: 1.12;
  letter-spacing: -.035em;
}
.page > .detail-header {
  align-items: center;
  margin-bottom: 14px;
}
#dashboard .dashboard-topbar { margin-bottom: 10px; }
/* v54.50: 기존 리스트는 유지하고 사이드 메뉴 요약카드만 대시보드 계열로 통일 */
.compact-summary-row > .card,
.compact-summary-row .dashboard-action-card {
  position: relative;
  overflow: hidden;
  min-width: 0;
  border: 1px solid #e2e8f0 !important;
  border-radius: 17px !important;
  background: linear-gradient(145deg, #ffffff 20%, #f8fafc 100%) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, .045) !important;
  transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease, background .2s ease !important;
}
.compact-summary-row > .card::after,
.compact-summary-row .dashboard-action-card::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  background: #dc2626;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .25s ease;
}
.compact-summary-row .dashboard-action-card:hover,
.compact-summary-row > button.card:hover {
  transform: translateY(-2px) !important;
  border-color: #cbd5e1 !important;
  box-shadow: 0 10px 24px rgba(15, 23, 42, .08) !important;
}
.compact-summary-row .dashboard-action-card.active,
.compact-summary-row .dashboard-action-card.is-active,
.compact-summary-row .dashboard-action-card[aria-pressed="true"],
.compact-summary-row > .card.active,
.compact-summary-row > .card.is-active {
  border-color: rgba(220, 38, 38, .34) !important;
  background: linear-gradient(145deg, #fff 20%, #fff7f7 100%) !important;
  box-shadow: 0 12px 30px rgba(127, 29, 29, .10) !important;
}
.compact-summary-row .dashboard-action-card.active::after,
.compact-summary-row .dashboard-action-card.is-active::after,
.compact-summary-row .dashboard-action-card[aria-pressed="true"]::after,
.compact-summary-row > .card.active::after,
.compact-summary-row > .card.is-active::after {
  transform: scaleX(1);
}
.compact-summary-row .card-title {
  color: #64748b !important;
  font-weight: 800 !important;
}
.compact-summary-row .card-value {
  letter-spacing: -.035em;
  font-variant-numeric: tabular-nums;
}
.compact-summary-row .card-sub { color: #64748b !important; }

.summary-motion-ready .page.active .compact-summary-row > .card,
.summary-motion-ready .page.active .compact-summary-row .dashboard-action-card {
  animation: summaryCardIn .38s cubic-bezier(.22, .8, .3, 1) backwards;
}
.summary-motion-ready .page.active .compact-summary-row > :nth-child(2) { animation-delay: 45ms; }
.summary-motion-ready .page.active .compact-summary-row > :nth-child(3) { animation-delay: 90ms; }
.summary-motion-ready .page.active .compact-summary-row > :nth-child(4) { animation-delay: 135ms; }
.summary-motion-ready .page.active .compact-summary-row > :nth-child(5) { animation-delay: 180ms; }
.summary-motion-ready .page.active .compact-summary-row > :nth-child(6) { animation-delay: 225ms; }
.summary-motion-ready .page.active .compact-summary-row > :nth-child(7) { animation-delay: 270ms; }
.summary-motion-ready .page.active .compact-summary-row > :nth-child(8) { animation-delay: 315ms; }

@keyframes summaryCardIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

@media (max-width: 760px) {
  .page > .topbar,
  .page > .detail-header { min-height: 0; margin-bottom: 13px; }
  .page > .topbar h1,
  .page > .detail-header h1 { font-size: 24px; }
}

@media (prefers-reduced-motion: reduce) {
  .summary-motion-ready .page.active .compact-summary-row > .card,
  .summary-motion-ready .page.active .compact-summary-row .dashboard-action-card {
    animation: none !important;
    transition-duration: .01ms !important;
  }
}

/* v54.51: 문서업무를 포함한 사이드 메뉴 상단 요약카드 공통 UI/모션 보강 */
.page .compact-summary-row > .jh-summary-card {
  position: relative;
  overflow: hidden;
  min-width: 0;
  border: 1px solid #e2e8f0 !important;
  background: linear-gradient(145deg, #ffffff 18%, #f8fafc 100%) !important;
  box-shadow: 0 4px 16px rgba(15, 23, 42, .045) !important;
  transition: transform .22s ease, border-color .22s ease, box-shadow .22s ease, background .22s ease !important;
}
.page .compact-summary-row > .jh-summary-card::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  background: #dc2626;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .26s ease;
}
.page .compact-summary-row > .jh-summary-card:hover {
  border-color: #cbd5e1 !important;
  box-shadow: 0 11px 26px rgba(15, 23, 42, .085) !important;
}
.page .compact-summary-row > .jh-summary-card.active,
.page .compact-summary-row > .jh-summary-card.is-active,
.page .compact-summary-row > .jh-summary-card[aria-pressed="true"] {
  background: linear-gradient(145deg, #ffffff 18%, #fff7f7 100%) !important;
}
.page .compact-summary-row > .jh-summary-card.active::after,
.page .compact-summary-row > .jh-summary-card.is-active::after,
.page .compact-summary-row > .jh-summary-card[aria-pressed="true"]::after {
  transform: scaleX(1);
}
.page .compact-summary-row > .jh-summary-card .card-title {
  color: #64748b !important;
  font-weight: 800 !important;
}
.page .compact-summary-row > .jh-summary-card .card-value {
  letter-spacing: -.035em;
  font-variant-numeric: tabular-nums;
}
.page .compact-summary-row > .jh-summary-card .card-sub {
  color: #64748b !important;
}
.page .compact-summary-row > .jh-summary-card.summary-card-enter {
  animation: summaryCardInV5451 .4s cubic-bezier(.22, .8, .3, 1) both;
  animation-delay: calc(var(--summary-index, 0) * 46ms);
}
@keyframes summaryCardInV5451 {
  from { opacity: 0; transform: translateY(9px) scale(.985); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}
/* 자료실: 고정 대분류 + 제조사/제품군 하위 필터 */
.library-dashboard.compact-summary-row {
  grid-template-columns: repeat(6, minmax(0, 1fr)) !important;
  gap: 9px !important;
}
.library-dashboard.compact-summary-row > .library-major-card {
  min-height: 68px !important;
  padding: 10px 12px !important;
}
.library-filter-stack {
  display: grid;
  gap: 7px;
}
.filter-motion-bar {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 7px;
  min-height: 40px;
  padding: 7px 9px;
  border: 1px solid #e2e8f0;
  border-radius: 14px;
  background: #f8fafc;
}
.library-sub-filter-bar::before {
  flex: 0 0 auto;
  min-width: 46px;
  color: #64748b;
  font-size: 11px;
  font-weight: 900;
  letter-spacing: -.02em;
}
#libraryManufacturerFilterBar::before { content: "제조사"; }
#libraryProductFilterBar::before { content: "제품군"; }
.ui-filter-chip {
  appearance: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 29px;
  padding: 6px 10px;
  border: 1px solid #d7dee8;
  border-radius: 999px;
  background: #ffffff;
  color: #334155;
  font-size: 12px;
  font-weight: 800;
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  box-shadow: 0 2px 7px rgba(15, 23, 42, .035);
  transition: transform .18s ease, border-color .18s ease, background .18s ease, color .18s ease, box-shadow .18s ease;
  animation: filterChipInV5451 .34s cubic-bezier(.22, .8, .3, 1) both;
  animation-delay: calc(var(--chip-index, 0) * 35ms);
}
.ui-filter-chip:hover {
  transform: translateY(-1px);
  border-color: #94a3b8;
  background: #ffffff;
  box-shadow: 0 6px 14px rgba(15, 23, 42, .08);
}
.ui-filter-chip.active {
  border-color: #dc2626 !important;
  background: #dc2626 !important;
  color: #ffffff !important;
  box-shadow: 0 7px 16px rgba(220, 38, 38, .18) !important;
  transform: translateY(-1px);
}
.ui-filter-chip em {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 18px;
  padding: 0 5px;
  border-radius: 999px;
  background: #eef2f7;
  color: #475569;
  font-size: 10px;
  font-style: normal;
  font-weight: 900;
}
.ui-filter-chip.active em {
  background: rgba(255,255,255,.2);
  color: #ffffff;
}
@keyframes filterChipInV5451 {
  from { opacity: 0; transform: translateY(5px) scale(.98); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* 업무공유 하단 카테고리 버튼도 자료실과 같은 모션/선택 UI 사용 */
.share-sub-filter-bar.filter-motion-bar {
  margin: -2px 0 10px;
  padding: 8px 10px;
}
.share-sub-filter-bar .share-mini-filter.ui-filter-chip {
  color: #334155;
}
.share-sub-filter-bar .share-mini-filter.ui-filter-chip.active {
  border-color: #dc2626 !important;
  background: #dc2626 !important;
  color: #ffffff !important;
}

@media (max-width: 760px) {
  .filter-motion-bar { padding: 7px; gap: 6px; }
  .library-sub-filter-bar::before { flex-basis: 100%; min-width: 0; }
  .ui-filter-chip { font-size: 11px; padding: 6px 9px; }
}
@media (max-width: 480px) {
  .library-dashboard.compact-summary-row { grid-template-columns: 1fr !important; }
}
@media (prefers-reduced-motion: reduce) {
  .page .compact-summary-row > .jh-summary-card.summary-card-enter,
  .ui-filter-chip {
    animation: none !important;
    transition-duration: .01ms !important;
  }
}
/* v54.52: 모든 사이드 메뉴 상단카드를 업무공유 기준의 고정형 카드로 통일 */
.page .compact-summary-row {
  margin-bottom: 12px !important;
}
.page .compact-summary-row > .jh-summary-card,
.page .compact-summary-row > .card,
.page .compact-summary-row > .dashboard-action-card {
  min-height: 58px !important;
  padding: 8px 10px !important;
  border-radius: 14px !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 3px !important;
  text-align: center !important;
  opacity: 1 !important;
  animation: none !important;
}
.page .compact-summary-row > .jh-summary-card.summary-card-enter,
.summary-motion-ready .page.active .compact-summary-row > .card,
.summary-motion-ready .page.active .compact-summary-row > .dashboard-action-card {
  animation: none !important;
}

/* 선택·호버·숫자 변화만 남기고 카드 재생성 때 순차 등장은 사용하지 않음 */
.page .compact-summary-row > .jh-summary-card:hover,
.page .compact-summary-row > button.card:hover,
.page .compact-summary-row > .dashboard-action-card:hover {
  transform: translateY(-2px) !important;
}
.page .compact-summary-row > .jh-summary-card:active,
.page .compact-summary-row > button.card:active,
.page .compact-summary-row > .dashboard-action-card:active {
  transform: translateY(0) scale(.99) !important;
}
/* 자료실: 큰 카테고리 카드 + 제조사 버튼 한 줄 */
.library-dashboard.compact-summary-row {
  grid-template-columns: repeat(6, minmax(0, 1fr)) !important;
  margin-bottom: 8px !important;
}
.library-filter-stack {
  display: block !important;
  margin: 0 0 11px !important;
}
#libraryManufacturerFilterBar {
  display: flex;
}
#libraryProductFilterBar {
  display: none !important;
}
.ui-filter-chip,
.share-sub-filter-bar .ui-filter-chip,
.library-sub-filter-bar .ui-filter-chip {
  animation: none !important;
  transition: transform .16s ease, border-color .16s ease, background .16s ease, color .16s ease, box-shadow .16s ease !important;
}

@media (max-width: 1180px) {
  .library-dashboard.compact-summary-row { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
}
@media (max-width: 760px) {
  .library-dashboard.compact-summary-row { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .page .compact-summary-row > .jh-summary-card,
  .page .compact-summary-row > .card,
  .page .compact-summary-row > .dashboard-action-card { min-height: 52px !important; }
}
@media (max-width: 480px) {
  .library-dashboard.compact-summary-row { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}


/* v54.54: 문서 필터 단순화 · 자료실 제조사 2줄 페이지 · 업무일지 초기화/색상 보정 */
/* 자료실 전체자료 카드는 업무공유 첫 카드와 같은 기본 파란 배경을 유지합니다. */
#public-library .library-dashboard.compact-summary-row .library-filter-card[data-library-card="all"],
#public-library .library-dashboard.compact-summary-row .library-filter-card[data-library-card="all"].active {
  background: #eff6ff !important;
}
/* 업무일지 상단 카드는 업무공유와 같은 순서의 색상 팔레트로 통일합니다. */
#schedule .worklog-dashboard.compact-summary-row > .card:nth-child(1) { background: #eff6ff !important; }
#schedule .worklog-dashboard.compact-summary-row > .card:nth-child(2) { background: #fff7ed !important; }
#schedule .worklog-dashboard.compact-summary-row > .card:nth-child(3) { background: #f0fdf4 !important; }
#schedule .worklog-dashboard.compact-summary-row > .card:nth-child(4) { background: #eef2ff !important; }
#schedule .worklog-dashboard.compact-summary-row > .card:nth-child(5) { background: #fff1f2 !important; }
#schedule .worklog-dashboard.compact-summary-row > .card:nth-child(6),
#schedule .worklog-dashboard.compact-summary-row > .card:nth-child(7) { background: #f8fafc !important; }
#schedule .worklog-dashboard.compact-summary-row > .card.active {
  border-color: rgba(220, 38, 38, .34) !important;
  box-shadow: 0 12px 30px rgba(127, 29, 29, .10) !important;
}
/* 제조사 필터는 기본 1줄, 필요 시 2줄까지만 확장하고 그 이상은 좌측 화살표로 전환합니다. */
.library-sub-filter-pager {
  display: grid;
  grid-template-columns: 54px minmax(0, 1fr);
  gap: 8px;
  align-items: stretch;
  min-width: 0;
  padding: 7px 9px;
  border: 1px solid #e2e8f0;
  border-radius: 14px;
  background: #f8fafc;
}
.library-sub-filter-pager-side {
  display: grid;
  grid-template-columns: repeat(2, 22px);
  gap: 4px;
  align-content: center;
  justify-content: center;
  min-width: 0;
}
.library-sub-filter-pager-side > span {
  grid-column: 1 / -1;
  color: #64748b;
  font-size: 11px;
  font-weight: 900;
  line-height: 1;
  text-align: center;
  white-space: nowrap;
}
.library-filter-page-button {
  display: none;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  padding: 0;
  border: 1px solid #cbd5e1;
  border-radius: 7px;
  background: #fff;
  color: #475569;
  font-size: 10px;
  font-weight: 900;
  cursor: pointer;
}
.library-sub-filter-pager.has-pages .library-filter-page-button { display: inline-flex; }
.library-filter-page-button:hover:not(:disabled) { border-color: #94a3b8; background: #f1f5f9; }
.library-filter-page-button:disabled { opacity: .35; cursor: default; }
#libraryManufacturerFilterBar.library-sub-filter-bar {
  min-width: 0;
  min-height: 29px;
  padding: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  background: transparent !important;
  display: flex;
  flex-wrap: nowrap;
  gap: 7px;
  overflow-x: hidden;
  overflow-y: hidden;
  scroll-behavior: smooth;
  scrollbar-width: none;
}
#libraryManufacturerFilterBar.library-sub-filter-bar::-webkit-scrollbar { display: none; }
#libraryManufacturerFilterBar.library-sub-filter-bar::before { content: none !important; display: none !important; }
#libraryManufacturerFilterBar.library-sub-filter-bar.is-two-row {
  display: grid !important;
  grid-template-rows: repeat(2, 29px);
  grid-auto-flow: column;
  grid-auto-columns: max-content;
  align-content: start;
  justify-content: start;
  row-gap: 7px;
  column-gap: 7px;
  max-height: 65px;
}
#libraryManufacturerFilterBar .ui-filter-chip {
  min-height: 29px;
  height: 29px;
  margin: 0;
}
@media (max-width: 760px) {
  .library-sub-filter-pager { grid-template-columns: 48px minmax(0, 1fr); padding: 7px; gap: 6px; }
  .library-sub-filter-pager-side { grid-template-columns: repeat(2, 20px); }
  .library-filter-page-button { width: 20px; height: 20px; }
}


/* v54.55: 자료실 2단 버튼 앞의 중복 '제조사' 문구 제거. 페이지 전환 화살표만 필요 시 노출 */
.library-sub-filter-pager-side {
  grid-template-rows: 24px !important;
  align-items: center;
}
.library-sub-filter-pager-side > span { display: none !important; }
.library-sub-filter-pager:not(.has-pages) { grid-template-columns: 0 minmax(0, 1fr); gap: 0; }
.library-sub-filter-pager:not(.has-pages) .library-sub-filter-pager-side { width: 0; overflow: hidden; }
@media (max-width: 760px) {
  .library-sub-filter-pager:not(.has-pages) { grid-template-columns: 0 minmax(0, 1fr); }
}
/* v54.71 문서업무 요약카드 2단 구조 */
.quote-dashboard-stack{display:grid;gap:10px;margin-bottom:16px}.quote-dashboard-stack .quote-dashboard{margin:0!important}.quote-dashboard-fixed,.quote-dashboard-optional{grid-template-columns:repeat(3,minmax(0,1fr))!important}.quote-dashboard-optional .dashboard-action-card{min-height:86px}
@media(max-width:760px){.quote-dashboard-fixed,.quote-dashboard-optional{display:flex!important;overflow-x:auto;scroll-snap-type:x mandatory;gap:8px;padding-bottom:4px}.quote-dashboard-stack .dashboard-action-card{flex:0 0 min(210px,76vw);scroll-snap-align:start}}

/* v54.72 문서업무 카드: 업무공유 카드 UI 통일 + 5개 단일 행 */
.quote-document-dashboard {
  grid-template-columns: repeat(5, minmax(0, 1fr)) !important;
  gap: 8px !important;
  margin-bottom: 16px !important;
}
.quote-document-dashboard .dashboard-action-card {
  min-width: 0;
}
@media (max-width: 980px) {
  .quote-document-dashboard {
    display: flex !important;
    overflow-x: auto !important;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    padding-bottom: 4px;
  }
  .quote-document-dashboard .dashboard-action-card {
    flex: 0 0 min(210px, 76vw) !important;
    scroll-snap-align: start;
  }
}
/* v54.73: 모든 메뉴 상단 요약카드를 업무공유 카드 UI로 최종 통일 */
.page .compact-summary-row,
.page .jh-unified-summary-row {
  display: grid !important;
  grid-template-columns: repeat(auto-fit, minmax(118px, 1fr)) !important;
  align-items: stretch !important;
  gap: 8px !important;
  margin: 0 0 14px !important;
  min-width: 0;
}

.page .compact-summary-row > .card,
.page .compact-summary-row > .dashboard-action-card,
.page .jh-unified-summary-row > .card,
.page .jh-unified-summary-row > .dashboard-action-card {
  position: relative !important;
  overflow: hidden !important;
  min-width: 0 !important;
  min-height: 58px !important;
  padding: 8px 10px !important;
  border: 1px solid #e2e8f0 !important;
  border-radius: 14px !important;
  background: #f8fafc !important;
  box-shadow: 0 4px 14px rgba(15, 23, 42, .045) !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 3px !important;
  text-align: center !important;
  opacity: 1 !important;
  transform: none;
  animation: none !important;
  transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease, background-color .18s ease !important;
}

/* 업무공유와 동일한 반복 팔레트 */
.page .compact-summary-row > :nth-child(8n + 1) { background: #eff6ff !important; }
.page .compact-summary-row > :nth-child(8n + 2) { background: #fff7ed !important; }
.page .compact-summary-row > :nth-child(8n + 3) { background: #f0fdf4 !important; }
.page .compact-summary-row > :nth-child(8n + 4) { background: #eef2ff !important; }
.page .compact-summary-row > :nth-child(8n + 5) { background: #fff1f2 !important; }
.page .compact-summary-row > :nth-child(8n + 6) { background: #f8fafc !important; }
.page .compact-summary-row > :nth-child(8n + 7) { background: #fefce8 !important; }
.page .compact-summary-row > :nth-child(8n + 8) { background: #f0fdfa !important; }

.page .compact-summary-row .card-title,
.page .jh-unified-summary-row .card-title {
  display: block !important;
  max-width: 100% !important;
  margin: 0 !important;
  color: #64748b !important;
  font-size: 12px !important;
  font-weight: 800 !important;
  line-height: 1.1 !important;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}
.page .compact-summary-row .card-value,
.page .jh-unified-summary-row .card-value {
  display: block !important;
  max-width: 100% !important;
  margin: 0 !important;
  font-size: 18px !important;
  font-weight: 900 !important;
  line-height: 1.05 !important;
  letter-spacing: -.035em !important;
  font-variant-numeric: tabular-nums;
  white-space: nowrap !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
}
.page .compact-summary-row .card-sub,
.page .jh-unified-summary-row .card-sub {
  display: none !important;
}

.page .compact-summary-row > button.card,
.page .compact-summary-row > button.dashboard-action-card,
.page .jh-unified-summary-row > button.card,
.page .jh-unified-summary-row > button.dashboard-action-card {
  appearance: none;
  width: 100%;
  font: inherit;
  cursor: pointer;
}
.page .compact-summary-row > button.card:hover,
.page .compact-summary-row > button.dashboard-action-card:hover,
.page .jh-unified-summary-row > button.card:hover,
.page .jh-unified-summary-row > button.dashboard-action-card:hover {
  transform: translateY(-2px) !important;
  border-color: #cbd5e1 !important;
  box-shadow: 0 10px 22px rgba(15, 23, 42, .085) !important;
}
.page .compact-summary-row > button.card:active,
.page .compact-summary-row > button.dashboard-action-card:active,
.page .jh-unified-summary-row > button.card:active,
.page .jh-unified-summary-row > button.dashboard-action-card:active {
  transform: translateY(0) scale(.99) !important;
}
.page .compact-summary-row > button:focus-visible,
.page .jh-unified-summary-row > button:focus-visible {
  outline: 3px solid rgba(37, 99, 235, .22) !important;
  outline-offset: 2px;
}

/* 업무공유와 동일한 선택 상태: 검정 테두리 + 하단 JH 포인트 */
.page .compact-summary-row > .card.active,
.page .compact-summary-row > .card.is-active,
.page .compact-summary-row > .card[aria-pressed="true"],
.page .compact-summary-row > .dashboard-action-card.active,
.page .compact-summary-row > .dashboard-action-card.is-active,
.page .compact-summary-row > .dashboard-action-card[aria-pressed="true"],
.page .jh-unified-summary-row > .card.active,
.page .jh-unified-summary-row > .card.is-active,
.page .jh-unified-summary-row > .card[aria-pressed="true"],
.page .jh-unified-summary-row > .dashboard-action-card.active,
.page .jh-unified-summary-row > .dashboard-action-card.is-active,
.page .jh-unified-summary-row > .dashboard-action-card[aria-pressed="true"] {
  border-color: #111827 !important;
  box-shadow: 0 0 0 2px rgba(17, 24, 39, .08), 0 9px 20px rgba(15, 23, 42, .08) !important;
}
.page .compact-summary-row > .card::after,
.page .compact-summary-row > .dashboard-action-card::after,
.page .jh-unified-summary-row > .card::after,
.page .jh-unified-summary-row > .dashboard-action-card::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  border-radius: 0 0 14px 14px;
  background: #dc2626;
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .2s ease;
  pointer-events: none;
}
.page .compact-summary-row > .card.active::after,
.page .compact-summary-row > .card.is-active::after,
.page .compact-summary-row > .card[aria-pressed="true"]::after,
.page .compact-summary-row > .dashboard-action-card.active::after,
.page .compact-summary-row > .dashboard-action-card.is-active::after,
.page .compact-summary-row > .dashboard-action-card[aria-pressed="true"]::after,
.page .jh-unified-summary-row > .card.active::after,
.page .jh-unified-summary-row > .card.is-active::after,
.page .jh-unified-summary-row > .card[aria-pressed="true"]::after,
.page .jh-unified-summary-row > .dashboard-action-card.active::after,
.page .jh-unified-summary-row > .dashboard-action-card.is-active::after,
.page .jh-unified-summary-row > .dashboard-action-card[aria-pressed="true"]::after {
  transform: scaleX(1);
}

/* 문서업무의 기존 5열, 자료실의 기존 6열 등 페이지별 강제 폭도 공통 규칙으로 흡수 */
.page .quote-document-dashboard,
.page .library-dashboard,
.page .worklog-dashboard,
.page .material-dashboard,
.page .money-dashboard,
.page .revenue-dashboard,
.page .expense-dashboard,
.page .share-dashboard {
  grid-template-columns: repeat(auto-fit, minmax(118px, 1fr)) !important;
}

/* 휴대폰 세로·가로 및 좁은 태블릿: 모든 메뉴에서 동일한 한 줄 스와이프 */
@media (max-width: 980px), (pointer: coarse) and (max-width: 1180px) {
  .page .compact-summary-row,
  .page .jh-unified-summary-row,
  .page .quote-document-dashboard,
  .page .library-dashboard,
  .page .worklog-dashboard,
  .page .material-dashboard,
  .page .money-dashboard,
  .page .revenue-dashboard,
  .page .expense-dashboard,
  .page .share-dashboard {
    display: flex !important;
    flex-wrap: nowrap !important;
    align-items: stretch !important;
    gap: 8px !important;
    overflow-x: auto !important;
    overflow-y: hidden !important;
    scroll-snap-type: x proximity;
    scroll-padding-inline: 1px;
    -webkit-overflow-scrolling: touch;
    overscroll-behavior-inline: contain;
    padding: 1px 1px 6px !important;
    scrollbar-width: thin;
  }
  .page .compact-summary-row > .card,
  .page .compact-summary-row > .dashboard-action-card,
  .page .jh-unified-summary-row > .card,
  .page .jh-unified-summary-row > .dashboard-action-card {
    flex: 0 0 154px !important;
    width: 154px !important;
    min-width: 154px !important;
    max-width: 154px !important;
    min-height: 58px !important;
    scroll-snap-align: start;
  }
}

@media (max-width: 430px) {
  .page .compact-summary-row > .card,
  .page .compact-summary-row > .dashboard-action-card,
  .page .jh-unified-summary-row > .card,
  .page .jh-unified-summary-row > .dashboard-action-card {
    flex-basis: 146px !important;
    width: 146px !important;
    min-width: 146px !important;
    max-width: 146px !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  .page .compact-summary-row > .card,
  .page .compact-summary-row > .dashboard-action-card,
  .page .jh-unified-summary-row > .card,
  .page .jh-unified-summary-row > .dashboard-action-card {
    transition-duration: .01ms !important;
  }
}

/* v54.75: 선택 카드 외곽선을 대시보드/업무일지의 얇은 빨간 테두리와 동일하게 통일 */
.page .compact-summary-row > .card.active,
.page .compact-summary-row > .card.is-active,
.page .compact-summary-row > .card[aria-pressed="true"],
.page .compact-summary-row > .dashboard-action-card.active,
.page .compact-summary-row > .dashboard-action-card.is-active,
.page .compact-summary-row > .dashboard-action-card[aria-pressed="true"],
.page .jh-unified-summary-row > .card.active,
.page .jh-unified-summary-row > .card.is-active,
.page .jh-unified-summary-row > .card[aria-pressed="true"],
.page .jh-unified-summary-row > .dashboard-action-card.active,
.page .jh-unified-summary-row > .dashboard-action-card.is-active,
.page .jh-unified-summary-row > .dashboard-action-card[aria-pressed="true"],
.page .compact-summary-row > .jh-summary-card.active,
.page .compact-summary-row > .jh-summary-card.is-active,
.page .compact-summary-row > .jh-summary-card[aria-pressed="true"] {
  border-width: 1px !important;
  border-style: solid !important;
  border-color: rgba(220, 38, 38, .34) !important;
  outline: 0 !important;
  box-shadow: 0 12px 30px rgba(127, 29, 29, .10) !important;
}

/* v54.76: 사이드 메뉴 상단카드의 선택 상태를 hover 중에도 유지
   - 메인 대시보드(#dashboard)는 기존 동작 유지
   - 선택 카드 위에 마우스가 있어도 업무일지와 같은 얇은 빨간 테두리 유지 */
.page:not(#dashboard) .compact-summary-row > button.card.active:hover,
.page:not(#dashboard) .compact-summary-row > button.card.is-active:hover,
.page:not(#dashboard) .compact-summary-row > button.card[aria-pressed="true"]:hover,
.page:not(#dashboard) .compact-summary-row > button.dashboard-action-card.active:hover,
.page:not(#dashboard) .compact-summary-row > button.dashboard-action-card.is-active:hover,
.page:not(#dashboard) .compact-summary-row > button.dashboard-action-card[aria-pressed="true"]:hover,
.page:not(#dashboard) .jh-unified-summary-row > button.card.active:hover,
.page:not(#dashboard) .jh-unified-summary-row > button.card.is-active:hover,
.page:not(#dashboard) .jh-unified-summary-row > button.card[aria-pressed="true"]:hover,
.page:not(#dashboard) .jh-unified-summary-row > button.dashboard-action-card.active:hover,
.page:not(#dashboard) .jh-unified-summary-row > button.dashboard-action-card.is-active:hover,
.page:not(#dashboard) .jh-unified-summary-row > button.dashboard-action-card[aria-pressed="true"]:hover {
  border-width: 1px !important;
  border-style: solid !important;
  border-color: rgba(220, 38, 38, .34) !important;
  outline: 0 !important;
  box-shadow: 0 12px 30px rgba(127, 29, 29, .10) !important;
}

/* v54.77: 사이드 메뉴 상단카드 배경 흰색 통일 + 자료실 선택선 모션 정합
   - 메인 대시보드는 기존 색상 유지
   - v54.73에서 다시 들어온 파랑/주황/초록 반복 배경을 제거
   - 선택/hover 상태에서도 카드 바탕은 흰색 유지 */
.page:not(#dashboard) .compact-summary-row > .card,
.page:not(#dashboard) .compact-summary-row > .dashboard-action-card,
.page:not(#dashboard) .compact-summary-row > .jh-summary-card,
.page:not(#dashboard) .jh-unified-summary-row > .card,
.page:not(#dashboard) .jh-unified-summary-row > .dashboard-action-card,
.page:not(#dashboard) .jh-unified-summary-row > .jh-summary-card,
.page:not(#dashboard) .compact-summary-row > .card:hover,
.page:not(#dashboard) .compact-summary-row > .dashboard-action-card:hover,
.page:not(#dashboard) .compact-summary-row > .jh-summary-card:hover,
.page:not(#dashboard) .jh-unified-summary-row > .card:hover,
.page:not(#dashboard) .jh-unified-summary-row > .dashboard-action-card:hover,
.page:not(#dashboard) .jh-unified-summary-row > .jh-summary-card:hover,
.page:not(#dashboard) .compact-summary-row > .card.active,
.page:not(#dashboard) .compact-summary-row > .card.is-active,
.page:not(#dashboard) .compact-summary-row > .card[aria-pressed="true"],
.page:not(#dashboard) .compact-summary-row > .dashboard-action-card.active,
.page:not(#dashboard) .compact-summary-row > .dashboard-action-card.is-active,
.page:not(#dashboard) .compact-summary-row > .dashboard-action-card[aria-pressed="true"],
.page:not(#dashboard) .jh-unified-summary-row > .card.active,
.page:not(#dashboard) .jh-unified-summary-row > .card.is-active,
.page:not(#dashboard) .jh-unified-summary-row > .card[aria-pressed="true"],
.page:not(#dashboard) .jh-unified-summary-row > .dashboard-action-card.active,
.page:not(#dashboard) .jh-unified-summary-row > .dashboard-action-card.is-active,
.page:not(#dashboard) .jh-unified-summary-row > .dashboard-action-card[aria-pressed="true"] {
  background: #ffffff !important;
  background-image: none !important;
}

/* 과거 페이지별 ID 규칙도 최종 흰색 규칙으로 덮습니다. */
#schedule.page .worklog-dashboard.compact-summary-row > .card,
#schedule.page .worklog-dashboard.compact-summary-row > .card:hover,
#schedule.page .worklog-dashboard.compact-summary-row > .card.active,
#public-library.page .library-dashboard.compact-summary-row > .library-filter-card,
#public-library.page .library-dashboard.compact-summary-row > .library-filter-card:hover,
#public-library.page .library-dashboard.compact-summary-row > .library-filter-card.active {
  background: #ffffff !important;
  background-image: none !important;
}
/* v55.82: 자재목록 녹화기 모델명·채널정보 한 줄 표시 */
.material-main-card th:nth-child(4),
.material-main-card td:nth-child(4) {
  width: 250px;
  min-width: 210px;
  max-width: 290px;
}
.material-main-card td.material-model-cell {
  overflow: hidden;
  vertical-align: middle;
}
.material-model-line {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  width: 100%;
  white-space: nowrap;
  line-height: 1.25;
}
.material-model-name {
  display: block;
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.material-model-badges {
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 4px;
}
.material-model-badge {
  display: inline-flex;
  align-items: center;
  min-height: 20px;
  padding: 1px 6px;
  border: 1px solid #bfdbfe;
  border-radius: 999px;
  background: #eff6ff;
  color: #1d4ed8;
  font-size: 10px;
  font-weight: 800;
  line-height: 1;
  white-space: nowrap;
}
.material-model-profile {
  border-color: #e2e8f0;
  background: #f8fafc;
  color: #475569;
}
@media (max-width: 1100px) {
  .material-model-profile { display: none; }
}
/* v56.01: 메뉴 전환 시 즉시 반응하는 얇은 로딩 표시. */
body.jh-page-loading::before {
  content: "";
  position: fixed;
  top: 0;
  left: 0;
  z-index: 999999;
  width: 42%;
  height: 3px;
  background: #dc2626;
  box-shadow: 0 0 10px rgba(220, 38, 38, .35);
  animation: jhPageLoadingSlide .85s ease-in-out infinite alternate;
  pointer-events: none;
}
@keyframes jhPageLoadingSlide {
  from { transform: translateX(-35%); opacity: .55; }
  to { transform: translateX(175%); opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  body.jh-page-loading::before { animation: none; width: 100%; opacity: .75; }
}
/* v56.02.13 협력정산은 현장 2차 선택 없이 저장된 협력업체 문서 기준으로 탐색 */
#share-create.share-workspace-settlement-mode .share-workspace-secondary-head,
#share-create.share-workspace-settlement-mode #shareWorkspaceSecondaryList {
  display: none !important;
}
#share-create.share-workspace-settlement-mode .share-workspace-finder {
  grid-template-rows: auto minmax(0, 1fr) !important;
}
#share-create.share-workspace-settlement-mode .share-workspace-primary-list {
  padding-bottom: 10px;
}
/* v56.03.55 · v56.02.21 업무관리 분리
   업무 진행현황판 공유 영역을 main.css 누적영역에서 업무관리 전용 override로 이동. */
.worklog-progress-share-card .worklog-progress-share-bar {
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;
  gap: 9px !important;
}
.worklog-progress-share-card .worklog-progress-share-copy {
  display: flex !important;
  flex-direction: row !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  gap: 4px 9px !important;
  min-width: 0 !important;
}
.worklog-progress-share-card .worklog-progress-share-copy strong {
  flex: 0 0 auto;
}
.worklog-progress-share-card .worklog-progress-share-copy .small {
  min-width: 0;
  font-size: 10px !important;
  line-height: 1.35 !important;
  white-space: normal !important;
  word-break: keep-all !important;
  overflow-wrap: anywhere;
}
.worklog-progress-share-card .worklog-progress-share-actions {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  flex-wrap: wrap !important;
  gap: 7px !important;
  max-width: none !important;
  overflow: visible !important;
  padding: 0 !important;
}
.worklog-progress-share-card .worklog-progress-share-actions .btn {
  flex: 0 0 auto !important;
  white-space: nowrap !important;
}
@media (max-width: 760px) {
  .worklog-progress-share-card .worklog-progress-share-actions .btn {
    flex: 1 1 auto !important;
  }
}
/* v56.03.55 · v56.02.21 현장관리 분리
   현장 기본정보 4열/주소 직접입력 UI를 main.css 누적영역에서 현장관리 전용 override로 이동.
   .site-address-mode-guide의 margin-top:5px는 후순위 v56.02.23 현장 override가 항상 4px로 덮어쓰므로 중복 선언을 제거. */
.site-detail-basic-grid {
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}
.site-detail-basic-grid .site-address-span-two {
  grid-column: span 2 !important;
}
.site-address-entry {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 6px;
  min-width: 0;
}
.site-address-entry input {
  grid-column: 1 / -1;
  min-width: 0;
}
.site-address-entry .btn {
  width: 100%;
  min-width: 0;
  padding: 7px 8px;
  font-size: 11px;
  white-space: nowrap;
}
.site-address-entry .btn.active {
  background: #111827;
  color: #fff;
}
.site-address-entry .manual-address-input {
  border-color: #64748b !important;
  background: #fffef7 !important;
  cursor: text !important;
}
.site-address-mode-guide {
  line-height: 1.35;
  word-break: keep-all;
}
@media (max-width: 900px) {
  .site-detail-basic-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  }
  .site-detail-basic-grid .site-address-span-two {
    grid-column: span 2 !important;
  }
}
@media (max-width: 760px) {
  .site-detail-basic-grid {
    grid-template-columns: 1fr !important;
  }
  .site-detail-basic-grid .site-address-span-two {
    grid-column: span 1 !important;
  }
}
/* v56.03.55 · 첨부 동영상 미리보기 공통
   v56.02.21 main.css 누적영역에서 첨부파일 미리보기 공통 컴포넌트로 이동. */
.attachment-preview-video {
  display: block;
  width: 100%;
  max-width: 100%;
  max-height: 70vh;
  margin: 0 auto;
  border-radius: 12px;
  background: #000;
}
/* v56.02.23 · 공통 모바일 폭 안정화
   특정 메뉴가 아닌 모든 활성 페이지의 폭/폼/스크롤 안전장치. */
@media (max-width: 760px) {
  .page.active,
  .page.active > .card,
  .page.active .card,
  .page.active .topbar,
  .page.active .section-title,
  .page.active .form-grid,
  .page.active .grid-1,
  .page.active .grid-2,
  .page.active .grid-3,
  .page.active .detail-actions,
  .page.active .device-actions,
  .page.active .toolbar,
  .page.active .modal,
  .page.active .modal-header,
  .page.active .modal-actions { min-width: 0 !important; max-width: 100% !important; box-sizing: border-box !important; }
  .page.active { overflow-x: hidden !important; }
  .page.active .table-wrap,
  .page.active .device-list-scroll,
  .page.active .preview-table-wrap { max-width: 100% !important; overflow-x: auto !important; -webkit-overflow-scrolling: touch; }
  .page.active input,
  .page.active select,
  .page.active textarea { max-width: 100%; min-width: 0; }
}
/* v56.02.23 · 대시보드 모바일 폭 안정화 override
   main.css 누적영역에서 대시보드 전용 규칙을 분리.
   보조문구 display:none 그룹은 dashboard/mobile.css와 중복되어 이쪽에서는 제거. */
@media (max-width: 760px) {
  #dashboard .dashboard-panel-head { margin-bottom: 6px !important; }
  #dashboard .dashboard-category-card { min-height: 64px !important; }
  #dashboard .dashboard-card-copy { gap: 1px !important; }
  #dashboard .dashboard-record-card {
    grid-template-columns: minmax(0, 1fr) !important;
    align-items: stretch !important;
    gap: 6px !important;
    overflow: hidden !important;
  }
  #dashboard .dashboard-record-main,
  #dashboard .dashboard-record-side { min-width: 0 !important; max-width: 100% !important; }
  #dashboard .dashboard-record-side {
    width: 100% !important;
    flex-direction: row !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 6px !important;
  }
  #dashboard .dashboard-record-badge { max-width: 58% !important; }
  #dashboard .dashboard-record-meta,
  #dashboard .dashboard-record-amount { min-width: 0 !important; max-width: 42% !important; overflow: hidden !important; text-overflow: ellipsis !important; }
}
@media (max-width: 520px) {
  #dashboard .dashboard-record-grid { grid-template-columns: minmax(0,1fr) !important; }
  #dashboard .dashboard-record-card { padding: 8px 9px !important; }
  #dashboard .dashboard-record-eyebrow,
  #dashboard .dashboard-record-title,
  #dashboard .dashboard-record-desc { max-width: 100% !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; }
}
/* v56.02.23 · 자료실 목록/다운로드 안정화 override
   main.css 누적영역의 자료실 전용 규칙을 분리. */
.library-list-title-row {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 14px;
}
.library-list-search-actions {
  display: grid;
  grid-template-columns: minmax(260px, 420px) auto;
  align-items: center;
  gap: 8px;
  margin-left: auto;
}
.library-list-search-actions .search-box,
.library-list-search-actions .search-box input { width: 100%; min-width: 0; }
.library-main-card .table-wrap { margin-top: 10px; }
.library-table { table-layout: fixed !important; width: 100% !important; min-width: 920px !important; }
.library-table th,
.library-table td { padding: 6px 8px !important; }
.library-table th:nth-child(1), .library-table td:nth-child(1) { width: 88px !important; min-width: 88px !important; text-align: center !important; }
.library-table th:nth-child(2), .library-table td:nth-child(2) { width: 96px !important; min-width: 96px !important; text-align: center !important; }
.library-table th:nth-child(3), .library-table td:nth-child(3) { width: 112px !important; min-width: 112px !important; text-align: center !important; }
.library-table th:nth-child(4), .library-table td:nth-child(4) { width: 130px !important; min-width: 130px !important; text-align: center !important; }
.library-table th:nth-child(5), .library-table td:nth-child(5) { width: auto !important; min-width: 330px !important; text-align: left !important; }
.library-table th:nth-child(6), .library-table td:nth-child(6) { width: 104px !important; min-width: 104px !important; text-align: center !important; }
.library-title-line {
  display: flex;
  align-items: baseline;
  gap: 8px;
  min-width: 0;
  max-width: 100%;
  white-space: nowrap;
  overflow: hidden;
}
.library-title-line strong {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.library-file-subtitle {
  flex: 1 1 auto;
  min-width: 0;
  color: #94a3b8;
  font-size: 10.5px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.library-download-link {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
  min-width: 76px;
  min-height: 30px;
  padding: 6px 10px !important;
  border: 0;
  border-radius: 8px;
  color: #fff !important;
  font: inherit;
  font-size: 11px;
  font-weight: 800;
  line-height: 1;
  text-decoration: none !important;
  cursor: pointer;
}
.library-download-link.is-available { background: #dcfce7 !important; color: #15803d !important; border: 1px solid #bbf7d0 !important; }
.library-download-link.is-available:hover { background: #bbf7d0 !important; color: #166534 !important; }
.library-download-link.is-locked { background: #fee2e2 !important; color: #b91c1c !important; border: 1px solid #fecaca !important; }
.library-download-link.is-locked:hover { background: #fecaca !important; color: #991b1b !important; }
.library-login-required-notice {
  position: fixed;
  z-index: 100000;
  opacity: 0;
  transform: translateY(4px);
  pointer-events: none;
  padding: 8px 11px;
  border-radius: 8px;
  background: #111827;
  color: #fff;
  box-shadow: 0 8px 22px rgba(15,23,42,.22);
  font-size: 11px;
  font-weight: 800;
  transition: opacity .16s ease, transform .16s ease;
}
.library-login-required-notice.show { opacity: 1; transform: translateY(0); }

@media (max-width: 760px) {
  .library-list-title-row {
    align-items: stretch;
    flex-direction: column;
    gap: 7px;
  }
  .library-list-title-row #libraryListHelp { display: none; }
  .library-list-search-actions {
    width: 100%;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 6px;
    margin-left: 0;
  }
  .library-list-search-actions .btn { white-space: nowrap; }
  .library-main-card .table-wrap { margin-top: 6px; }
  .library-table { min-width: 760px !important; }
  .library-title-line { gap: 6px; }
  .library-file-subtitle { font-size: 10px; }
}
/* v56.02.23 · 현장관리 안정화 override
   신규현장 담당자/주소 직접입력 UI를 main.css 누적영역에서 현장관리 전용으로 이동.
   동일한 regContactField grid-column 재선언 2건은 기본 규칙과 완전히 중복되어 제거. */
.site-register-form-grid #regContactField {
  grid-column: span 1 !important;
  display: flex !important;
}
.site-contact-slot.is-empty select {
  background: #f8fafc !important;
  color: #94a3b8 !important;
  cursor: default !important;
}
.site-address-entry.site-address-entry-inline-toggle {
  position: relative;
  display: block;
  min-width: 0;
}
.site-address-entry.site-address-entry-inline-toggle input {
  display: block;
  width: 100%;
  min-width: 0;
  padding-right: 58px !important;
}
.site-address-mode-toggle {
  position: absolute;
  top: 50%;
  right: 5px;
  transform: translateY(-50%);
  z-index: 2;
  min-width: 46px;
  height: 28px;
  padding: 0 8px;
  border: 1px solid #cbd5e1;
  border-radius: 8px;
  background: #f8fafc;
  color: #475569;
  font: inherit;
  font-size: 11px;
  font-weight: 800;
  line-height: 1;
  cursor: pointer;
}
.site-address-mode-toggle:hover { background: #eef2f7; color: #111827; }
.site-address-mode-toggle.active { background: #111827; border-color: #111827; color: #fff; }
.site-address-mode-guide { margin-top: 4px; font-size: 10.5px; }
@media (max-width: 760px) {
  .site-address-mode-guide { font-size: 10px; }
}

/* v56.03.53 · 현장관리 late override 정리
   v56.03.01 새현장 등록 PC 정렬 규칙을 main.css 누적영역에서 현장관리 전용 override로 이동. */
@media (min-width: 901px) {
  .site-register-form-grid .site-register-address-field { grid-column: span 2 !important; }
  .site-register-address-field .site-address-label-row {
    display: flex;
    align-items: center;
    gap: 8px;
    min-width: 0;
    margin-bottom: 6px;
  }
  .site-register-address-field .site-address-label-row label { margin: 0; flex: 0 0 auto; }
  .site-register-address-field .site-address-mode-guide {
    margin: 0 !important;
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}

/* v56.03.52 · 현장관리 late override
   v56.03.10 혼합 안정화 블록에서 현장관리 전용 규칙만 분리. */
@media (min-width: 981px) {
  #site .site-quick-detail-actions { display: none !important; }
}
/* v56.03.53 · 비용매입 late override 정리
   v56.03.01~02 비용매입 현장/거래처 선택 UI를 main.css 누적영역에서 금액관리 전용 override로 이동. */
.money-picker-input[readonly] {
  cursor: pointer;
  background: #fff;
}
.money-picker-input[readonly]:hover {
  border-color: #94a3b8;
  background: #f8fafc;
}
.money-client-picker-modal .money-client-picker-list {
  max-height: 62vh;
  overflow: auto;
}
@media (min-width: 901px) {
  #moneySiteField .money-site-picker-button { display: none !important; }
  #moneySiteField .inline-picker-row { grid-template-columns: minmax(0, 1fr) !important; }
}

#moneyClientSelectField.money-client-picker-active .money-client-native-select {
  display: none !important;
}
#moneyClientSelectField:not(.money-client-picker-active) #moneyClientPickerInput {
  display: none !important;
}
#moneyClientSelectField.money-client-picker-active #moneyClientPickerInput {
  display: block !important;
  width: 100%;
}
@media (min-width: 901px) {
  .money-client-picker-modal {
    width: min(1040px, 92vw);
  }
  .money-client-picker-modal .money-client-picker-list {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-content: start;
    gap: 10px;
    max-height: 62vh;
    overflow-y: auto;
    padding: 2px 6px 2px 2px;
  }
  .money-client-picker-modal .money-client-card {
    min-height: 108px;
    padding: 13px 14px;
  }
  .money-client-picker-modal .money-client-card .quote-address-result-sub {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
  .money-client-card-contact {
    margin-top: 7px;
    color: #64748b;
    font-size: 12px;
    line-height: 1.35;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}

/* v56.03.52 · 금액관리 late override
   v56.03.10 혼합 안정화 블록에서 매입·매출 요약카드/세금표시 규칙을 분리. */
@media (min-width: 981px) {
  .revenue-dashboard.grid-3,
  .expense-dashboard.grid-3 { grid-template-columns: repeat(3, minmax(190px, 1fr)) !important; }
  .revenue-dashboard.compact-summary-row .card-value,
  .expense-dashboard.compact-summary-row .card-value {
    max-width: none !important;
    width: 100% !important;
    overflow: visible !important;
    text-overflow: clip !important;
    font-size: 17px !important;
    letter-spacing: -.045em !important;
  }
}
.money-card-tax-badge { display:inline-flex !important; align-items:center; justify-content:center; min-height:22px; padding:3px 7px; white-space:nowrap; }
.tax-cell.tax-date-only { gap:4px; }
/* v56.03.53 · 업무관리 late override
   v56.03.02 업무목록 PC 폭 보정을 main.css 누적영역에서 업무관리 전용 override로 분리. */
@media (min-width: 901px) {
  /* 상태 열을 줄이고 현장명 열을 넓혀 한 줄 표시를 우선한다. */
  .worklog-table th:nth-child(2),
  .worklog-table td:nth-child(2) {
    width: 88px !important;
    max-width: 88px !important;
    white-space: nowrap !important;
    text-align: center !important;
  }
  .worklog-table th:nth-child(3),
  .worklog-table td:nth-child(3) {
    width: 250px !important;
    max-width: 250px !important;
    white-space: nowrap !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
  }
  .worklog-table td:nth-child(3) .worklog-site-link {
    display: block;
    max-width: 100%;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}
/* v56.03.52 · 택배관리 late override
   v56.03.10 혼합 안정화 블록에서 송장 빠른조회 전용 규칙을 분리. */
.parcel-detail-quick-tracking { display:flex !important; align-items:center; gap:7px; width:100%; min-width:0; overflow:visible !important; }
.parcel-detail-quick-tracking input { min-width:0; width:100%; height:32px; padding:5px 8px; border:1px solid #cbd5e1; border-radius:8px; background:#fff; font:inherit; font-weight:700; }
.parcel-detail-quick-tracking .btn { flex:0 0 auto; min-height:32px !important; padding:5px 10px !important; }
.parcel-detail-summary-row:has(.parcel-detail-quick-tracking) > span { overflow:visible !important; }
@media (max-width: 680px) {
  .parcel-detail-quick-tracking input { height:34px; }
}
/* v56.03.12 주소록 PC 목록 폭 안정화: 다중 대표자/긴 이메일/주소가 페이지 폭을 밀지 않도록 고정 레이아웃 */
@media (min-width: 761px) {
  #company.page.active .company-address-wrap {
    max-width: 100%;
    overflow-x: hidden;
    overflow-y: auto;
  }
  #company.page.active .company-address-wrap > table {
    width: 100% !important;
    min-width: 0 !important;
    max-width: 100% !important;
    table-layout: fixed !important;
    font-size: 12px;
  }
  #company.page.active .company-address-wrap th,
  #company.page.active .company-address-wrap td {
    min-width: 0 !important;
    padding: 7px 6px;
    line-height: 1.32;
    vertical-align: middle;
    overflow: hidden;
  }
  #company.page.active .company-address-wrap th {
    font-size: 11.5px;
    white-space: normal;
    word-break: keep-all;
  }
  #company.page.active .company-address-wrap th:nth-child(1),
  #company.page.active .company-address-wrap td:nth-child(1) { width: 15%; }
  #company.page.active .company-address-wrap th:nth-child(2),
  #company.page.active .company-address-wrap td:nth-child(2) { width: 7%; }
  #company.page.active .company-address-wrap th:nth-child(3),
  #company.page.active .company-address-wrap td:nth-child(3) { width: 13%; }
  #company.page.active .company-address-wrap th:nth-child(4),
  #company.page.active .company-address-wrap td:nth-child(4) { width: 10%; }
  #company.page.active .company-address-wrap th:nth-child(5),
  #company.page.active .company-address-wrap td:nth-child(5) { width: 8%; }
  #company.page.active .company-address-wrap th:nth-child(6),
  #company.page.active .company-address-wrap td:nth-child(6) { width: 10%; }
  #company.page.active .company-address-wrap th:nth-child(7),
  #company.page.active .company-address-wrap td:nth-child(7) { width: 12%; }
  #company.page.active .company-address-wrap th:nth-child(8),
  #company.page.active .company-address-wrap td:nth-child(8) { width: 12%; }
  #company.page.active .company-address-wrap th:nth-child(9),
  #company.page.active .company-address-wrap td:nth-child(9) { width: 13%; }

  #company.page.active .company-address-wrap td.ab-col-company,
  #company.page.active .company-address-wrap td.ab-col-representative,
  #company.page.active .company-address-wrap td.ab-col-address {
    white-space: normal;
    overflow-wrap: anywhere;
    word-break: keep-all;
  }
  #company.page.active .company-address-wrap td.ab-col-representative {
    font-size: 11.5px;
  }
  #company.page.active .company-address-wrap td.ab-col-tax-email,
  #company.page.active .company-address-wrap td.ab-col-manager-email {
    font-size: 10.5px;
    white-space: nowrap;
    text-overflow: ellipsis;
  }
  #company.page.active .company-address-wrap td.ab-col-trade,
  #company.page.active .company-address-wrap td.ab-col-business,
  #company.page.active .company-address-wrap td.ab-col-contact,
  #company.page.active .company-address-wrap td.ab-col-phone {
    white-space: nowrap;
    text-overflow: ellipsis;
  }

  .address-book-card-modal .address-book-card-layout,
  .address-book-card-modal .address-book-form-pane,
  .address-book-card-modal .address-book-preview-pane,
  .address-book-form-pane .address-book-form-grid,
  .address-book-form-pane .address-book-form-grid > .form-field {
    min-width: 0;
  }
  .address-book-form-pane .address-book-form-grid input,
  .address-book-form-pane .address-book-form-grid select,
  .address-book-form-pane .address-book-form-grid .input-button {
    min-width: 0;
    max-width: 100%;
    box-sizing: border-box;
  }
}
/* v56.03.12 자료공유 탐색 기준 단순화: 일반 자료=현장, 협력정산=협력업체 */
.share-workspace-context-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 30px;
  padding: 0 10px;
  border: 1px solid #dbe3ee;
  border-radius: 9px;
  background: #f8fafc;
  color: #475569;
  font-size: 11px;
  font-weight: 900;
  white-space: nowrap;
}
#share-create.share-workspace-settlement-mode .share-workspace-context-badge {
  border-color: #fecaca;
  background: #fff7f7;
  color: #b91c1c;
}
