/*
  CCTV Backup UI polish pack
  - UI only: color, spacing, cards, buttons, forms, status chips, responsive layout
  - No PHP/PowerShell business logic changed
*/
:root {
  --ui-bg: #f3f6fb;
  --ui-bg-soft: #f8fafc;
  --ui-card: #ffffff;
  --ui-ink: #101828;
  --ui-muted: #667085;
  --ui-line: #d0d5dd;
  --ui-line-soft: #e4e7ec;
  --ui-brand: #1d4ed8;
  --ui-brand-2: #0f766e;
  --ui-danger: #b42318;
  --ui-warning: #b54708;
  --ui-success: #027a48;
  --ui-radius: 16px;
  --ui-radius-sm: 10px;
  --ui-shadow: 0 10px 30px rgba(16, 24, 40, .08);
  --ui-shadow-sm: 0 4px 14px rgba(16, 24, 40, .06);
}

html { scroll-behavior: smooth; }
body {
  background:
    radial-gradient(circle at 12% -10%, rgba(29, 78, 216, .14), transparent 30%),
    radial-gradient(circle at 90% 0%, rgba(15, 118, 110, .10), transparent 28%),
    var(--ui-bg) !important;
  color: var(--ui-ink) !important;
  min-width: 1180px;
}

/* Header */
body > .border-b.border-ops-line.bg-white {
  position: sticky;
  top: 0;
  z-index: 50;
  background: rgba(255,255,255,.92) !important;
  border-color: var(--ui-line-soft) !important;
  box-shadow: 0 1px 0 rgba(16,24,40,.05), 0 8px 24px rgba(16,24,40,.06);
  backdrop-filter: blur(14px);
}
body > .border-b > .max-w-6xl,
.max-w-6xl { max-width: 1280px !important; }
body > .border-b h1 {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: var(--ui-ink);
  letter-spacing: -.04em;
}
body > .border-b h1::before {
  content: "";
  width: 28px;
  height: 28px;
  border-radius: 9px;
  background: linear-gradient(135deg, var(--ui-brand), var(--ui-brand-2));
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.28), 0 7px 18px rgba(29,78,216,.22);
}
body > .border-b h1::after {
  content: "Backup";
  color: var(--ui-brand);
  font-weight: 800;
  margin-left: -5px;
}
body > .border-b .mono { color: var(--ui-muted); }

/* Top product menu */
body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line {
  border: 1px solid var(--ui-line-soft) !important;
  background: var(--ui-bg-soft);
  border-radius: 999px;
  padding: 4px;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.75);
  overflow: hidden;
}
body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line > a,
body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line > span {
  border-left: 0 !important;
  border-radius: 999px;
  padding: 9px 16px !important;
  transition: background .15s ease, color .15s ease, box-shadow .15s ease, transform .15s ease;
}
body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line > a:hover {
  background: #fff !important;
  color: var(--ui-brand) !important;
  box-shadow: var(--ui-shadow-sm);
}
body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line > span {
  background: var(--ui-ink) !important;
  color: #fff !important;
  box-shadow: 0 8px 18px rgba(16,24,40,.18);
}

/* Sub navigation */
.nav-item {
  margin: 10px 6px 0 0;
  padding: 12px 16px !important;
  border: 0 !important;
  border-radius: 999px 999px 0 0;
  color: var(--ui-muted) !important;
  transition: all .15s ease;
}
.nav-item:hover {
  color: var(--ui-brand) !important;
  background: rgba(29,78,216,.07);
}
.nav-item.active {
  color: var(--ui-brand) !important;
  background: #fff;
  box-shadow: 0 -1px 0 #fff, 0 8px 20px rgba(16,24,40,.06);
}

/* Page containers */
#view-new, #view-running, #view-history, #view-agents {
  padding-top: 30px !important;
  padding-bottom: 56px !important;
}
#view-new > .mb-6,
#view-history > h2,
#view-agents > .flex.items-center.justify-between.mb-6 {
  margin-bottom: 22px !important;
}
#view-new h2, #view-history h2, #view-agents h2 {
  font-size: 28px !important;
  letter-spacing: -.04em;
}
#view-new p, #view-agents p { line-height: 1.65; }

/* Cards */
.bg-ops-card.border.border-ops-line,
.source-card,
.mode-card,
.modal,
#running-content > div,
#history-content > div,
#agents-content > div,
#tl-running-content > div,
#tl-history-content > div,
#cv-running-content > div,
#cv-history-content > div {
  background: var(--ui-card) !important;
  border-color: var(--ui-line-soft) !important;
  border-radius: var(--ui-radius) !important;
  box-shadow: var(--ui-shadow-sm);
}
.bg-ops-card.border.border-ops-line {
  padding: 24px !important;
  margin-bottom: 18px !important;
}
.bg-ops-bg.border.border-ops-line,
.cred-box {
  background: #f8fafc !important;
  border-color: var(--ui-line-soft) !important;
  border-radius: var(--ui-radius-sm) !important;
}
.divider { background: var(--ui-line-soft) !important; }
.section-num {
  display: inline-flex;
  align-items: center;
  min-height: 24px;
  padding: 4px 8px;
  border-radius: 999px;
  background: rgba(29,78,216,.09);
  color: var(--ui-brand) !important;
  letter-spacing: .08em !important;
}
.label {
  color: #475467 !important;
  letter-spacing: .04em !important;
}

/* Forms */
.fld {
  min-height: 42px;
  border-color: var(--ui-line) !important;
  border-radius: 11px !important;
  background: #fff !important;
  color: var(--ui-ink) !important;
  transition: border-color .14s ease, box-shadow .14s ease, background .14s ease;
}
.fld:hover { border-color: #98a2b3 !important; }
.fld:focus {
  border-color: var(--ui-brand) !important;
  box-shadow: 0 0 0 4px rgba(29,78,216,.12) !important;
}
input::placeholder { color: #98a2b3; }
input[type="checkbox"], input[type="radio"] { accent-color: var(--ui-brand) !important; }
select.fld { cursor: pointer; }

/* Buttons */
.btn {
  min-height: 42px;
  border-radius: 11px !important;
  border-color: transparent !important;
  box-shadow: var(--ui-shadow-sm);
  transition: transform .12s ease, box-shadow .12s ease, background .12s ease, color .12s ease, border-color .12s ease;
}
.btn:hover:not(:disabled) {
  transform: translateY(-1px);
  box-shadow: var(--ui-shadow);
}
.btn-primary {
  background: linear-gradient(135deg, var(--ui-brand), #2563eb) !important;
  border-color: transparent !important;
  color: #fff !important;
}
.btn-primary:hover:not(:disabled) {
  background: linear-gradient(135deg, #1e40af, var(--ui-brand)) !important;
}
.btn-primary:disabled {
  background: #98a2b3 !important;
  color: #fff !important;
  box-shadow: none;
}
.btn-ghost {
  background: #fff !important;
  color: var(--ui-ink) !important;
  border: 1px solid var(--ui-line) !important;
}
.btn-ghost:hover:not(:disabled) {
  border-color: var(--ui-brand) !important;
  color: var(--ui-brand) !important;
}

/* Channel boxes */
.ch-box {
  border-color: var(--ui-line) !important;
  border-radius: 13px !important;
  background: #fff !important;
  box-shadow: 0 1px 2px rgba(16,24,40,.04);
}
.ch-box:hover:not(.disabled) {
  border-color: var(--ui-brand) !important;
  color: var(--ui-brand);
}
.ch-box.checked {
  background: linear-gradient(135deg, var(--ui-brand), var(--ui-brand-2)) !important;
  border-color: transparent !important;
  color: #fff !important;
  box-shadow: 0 8px 18px rgba(29,78,216,.22);
}
.ch-box.disabled {
  background: #f2f4f7 !important;
  color: #98a2b3 !important;
  border-color: #e4e7ec !important;
  box-shadow: none;
}

/* Status chips */
.pill {
  border-radius: 999px !important;
  padding: 3px 9px !important;
  line-height: 1.35;
  letter-spacing: .02em !important;
}
.pill-ok { background: #dcfae6 !important; color: var(--ui-success) !important; }
.pill-run { background: #fef0c7 !important; color: var(--ui-warning) !important; }
.pill-wait { background: #eef2f6 !important; color: #475467 !important; }
.pill-err { background: #fee4e2 !important; color: var(--ui-danger) !important; }
.pill-info { background: #dbeafe !important; color: var(--ui-brand) !important; }
.tag {
  border-radius: 999px !important;
  background: #eef4ff !important;
  border-color: #c7d7fe !important;
  color: var(--ui-brand) !important;
}
.status-dot {
  box-shadow: 0 0 0 4px rgba(16,24,40,.05);
}

/* Dynamic lists and tables */
.source-card, .mode-card {
  border-radius: 14px !important;
  box-shadow: none;
}
.source-card:hover, .mode-card:hover {
  border-color: var(--ui-brand) !important;
  box-shadow: var(--ui-shadow-sm);
}
.source-card.selected, .mode-card.selected {
  border-color: var(--ui-brand) !important;
  background: #eff6ff !important;
  box-shadow: inset 4px 0 0 var(--ui-brand), var(--ui-shadow-sm) !important;
}
table {
  border-collapse: separate !important;
  border-spacing: 0;
  width: 100%;
}
th {
  background: #f8fafc;
  color: #475467;
  font-size: 12px;
  font-weight: 700;
}
td, th { border-color: var(--ui-line-soft) !important; }
tr:hover td { background: #f8fafc; }

/* Progress grid */
.grid-cell {
  border-radius: 6px;
  width: 30px !important;
  height: 22px !important;
}
.grid-cell.done { background: var(--ui-success) !important; }
.grid-cell.downloading { background: #f79009 !important; }
.grid-cell.failed { background: var(--ui-danger) !important; }
.grid-cell.pending { background: #eaecf0 !important; }
.grid-cell.no-recording { background: #f9fafb !important; border-color: #eaecf0 !important; }

/* Toast / modal */
.toast {
  border-radius: 14px !important;
  border: 0 !important;
  box-shadow: var(--ui-shadow);
}
.toast-ok { background: #ecfdf3 !important; color: #05603a !important; }
.toast-err { background: #fef3f2 !important; color: #912018 !important; }
.modal-backdrop {
  background: rgba(16,24,40,.55) !important;
  backdrop-filter: blur(8px);
}
.modal {
  overflow: hidden;
  box-shadow: 0 24px 80px rgba(16,24,40,.28);
}
.cred-box {
  border: 1px solid #bfdbfe !important;
  background: #eff6ff !important;
  color: #1e3a8a;
}
.cred-label { color: var(--ui-brand) !important; }

/* Readability helpers */
.text-ink-500 { color: var(--ui-muted) !important; }
.text-ops-accent { color: var(--ui-brand) !important; }
.border-ops-line { border-color: var(--ui-line-soft) !important; }
.bg-ops-bg { background-color: var(--ui-bg-soft) !important; }
.bg-ops-card { background-color: var(--ui-card) !important; }
.hover\:bg-ops-bg:hover { background-color: #f8fafc !important; }

/* Scrollbar */
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: #f2f4f7; }
*::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 999px; border: 2px solid #f2f4f7; }
*::-webkit-scrollbar-thumb:hover { background: #94a3b8; }

/* Small monitor compensation */
@media (max-width: 1180px) {
  body { min-width: 0; }
  .max-w-6xl { padding-left: 18px !important; padding-right: 18px !important; }
  body > .border-b > .max-w-6xl:first-child {
    align-items: flex-start !important;
  }
  body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line {
    width: 100%;
    border-radius: 16px;
    flex-wrap: wrap;
  }
  body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line > a,
  body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line > span {
    flex: 1 1 210px;
    text-align: center;
  }
}
@media (max-width: 760px) {
  [class*="grid-cols-4"], [class*="grid-cols-2"] {
    grid-template-columns: 1fr !important;
  }
  [class*="grid-cols-8"] {
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  }
  .btn { width: 100%; }
  .flex.gap-3, .flex.gap-2 { flex-wrap: wrap; }
}

/* ============================================================
   Topbar action group  (동일 컴포넌트로 4 페이지 우측 액션 통일)
   - cctv_agent.zip 다운로드 + PotPlayer 설치 + agent-status
   ============================================================ */
.topbar-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.topbar-actions .dl-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: 32px;
  padding: 0 12px;
  font-size: 12px;
  font-weight: 600;
  font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
  letter-spacing: -.01em;
  color: var(--ui-ink) !important;
  background: #fff !important;
  border: 1px solid var(--ui-line) !important;
  border-radius: 999px !important;
  text-decoration: none !important;
  white-space: nowrap;
  box-shadow: 0 1px 2px rgba(16,24,40,.05);
  transition: all .14s ease;
  cursor: pointer;
}
.topbar-actions .dl-btn:hover:not(:disabled) {
  border-color: var(--ui-brand) !important;
  color: var(--ui-brand) !important;
  background: #fff !important;
  box-shadow: 0 4px 12px rgba(29,78,216,.15);
  transform: translateY(-1px);
}
.topbar-actions .dl-btn:disabled {
  opacity: .55;
  cursor: not-allowed;
  transform: none;
  box-shadow: none;
}
.topbar-actions .dl-btn .dl-ico {
  font-size: 11px;
  line-height: 1;
  color: var(--ui-brand);
}
.topbar-actions .dl-btn:hover .dl-ico { color: var(--ui-brand); }
.topbar-actions .dl-divider {
  width: 1px;
  height: 18px;
  background: var(--ui-line-soft);
  margin: 0 2px;
}
#agent-status {
  font-size: 12px;
  color: var(--ui-muted);
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
#agent-status .status-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
}

/* 상단 모드 세그먼트: active 상태 더 또렷하게  */
body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line > span {
  background: linear-gradient(135deg, var(--ui-ink), #1f2937) !important;
  color: #fff !important;
  letter-spacing: -.005em;
}
body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line > a {
  color: #344054 !important;
  font-weight: 600;
}

/* 상단 모드 세그먼트: 자식 메뉴 배지 색상 통일  */
body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line .pill {
  background: rgba(255,255,255,.18) !important;
  color: #fff !important;
}
body > .border-b > .max-w-6xl:first-child .flex.border.border-ops-line a .pill {
  background: #fee4e2 !important;
  color: var(--ui-danger) !important;
}

@media (max-width: 1180px) {
  .topbar-actions { width: 100%; justify-content: flex-start; }
}

/* ============================================================
   v2 헤더 레이아웃 (2026-05-19)
   - 좌상단: 로고 (a.logo-link 로 도메인 링크화)
   - 좌하단: 보조정보 (#agent-status / #global-hint / 접속IP 등 — 페이지마다 다름)
   - 우측  : 메뉴 4개 (우측 정렬)
   - 도메인 표시 span(.mono) 은 HTML 에서 제거 (4 페이지 동일 적용)
   ============================================================ */
body > .border-b > .max-w-6xl:first-child {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) auto !important;
  grid-template-areas:
    "logo menu"
    "info menu" !important;
  align-items: center !important;
  column-gap: 32px !important;
  row-gap: 6px !important;
}
body > .border-b > .max-w-6xl:first-child > .flex.items-baseline {
  grid-area: logo;
  min-width: 0;
}
body > .border-b > .max-w-6xl:first-child > .flex.border.border-ops-line {
  grid-area: menu;
  align-self: center;
  justify-self: end;
}
body > .border-b > .max-w-6xl:first-child > .flex.items-center.gap-4 {
  grid-area: info;
  margin: 0;
  font-size: 12px;
  color: var(--ui-muted);
}

/* CCTV 로고 링크화 — h1 의 ::before(아이콘) / ::after("Backup") 의사요소는 그대로 유지 */
body > .border-b a.logo-link {
  text-decoration: none !important;
  color: inherit !important;
  display: inline-flex;
  align-items: baseline;
  transition: opacity .14s ease;
}
body > .border-b a.logo-link:hover { opacity: .82; }

/* 모바일/소형 모니터 — 1열로 펼치기 */
@media (max-width: 1180px) {
  body > .border-b > .max-w-6xl:first-child {
    grid-template-columns: 1fr !important;
    grid-template-areas:
      "logo"
      "info"
      "menu" !important;
  }
  body > .border-b > .max-w-6xl:first-child > .flex.border.border-ops-line {
    justify-self: stretch;
  }
}
