/* pb-dashboard.css — 관리자 대시보드 (devplan13 / 마스터플랜 14) */

:root {
	--db-color-primary: #2962ff;
	--db-color-warning: #f9a825;
	--db-color-success: #2e7d32;
	--db-color-danger:  #c62828;
	--db-color-muted:   #6c757d;
	--db-bg-soft:       #f5f7fa;
	--db-border:        #e3e8ef;
}

.pb-dashboard .dashboard-section { margin-bottom: 18px; }
.pb-dashboard .section-title { font-size: 14px; font-weight: 600; color: #333; margin: 8px 0 8px 4px; }

/* ─── KPI 카드 그리드 (devplan26 — vpcol-* 미정의 fallback / 컴팩트 리디자인) ─── */
.pb-dashboard .pb-dashboard-kpi-grid {
	display: grid;
	grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
	gap: 10px;
}
.pb-dashboard .pb-dashboard-kpi-grid > * { min-width: 0; }
@media (max-width: 1023px){
	.pb-dashboard .pb-dashboard-kpi-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 599px){
	.pb-dashboard .pb-dashboard-kpi-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
}

/* ─── KPI 카드 ─── */
.pb-dashboard .dashboard-kpi-card {
	background: #fff;
	border: 1px solid var(--db-border);
	border-radius: 6px;
	padding: 12px 14px;
	box-shadow: 0 1px 2px rgba(0,0,0,0.03);
	transition: box-shadow .15s ease;
	display: block;
	text-decoration: none;
	color: inherit;
	min-height: 72px;
}
.pb-dashboard .dashboard-kpi-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.08); text-decoration: none; }
.pb-dashboard .dashboard-kpi-card .kpi-label  { font-size: 12px; color: var(--db-color-muted); margin-bottom: 4px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pb-dashboard .dashboard-kpi-card .kpi-label small { font-size: 10px; }
.pb-dashboard .dashboard-kpi-card .kpi-value  { font-size: 24px; font-weight: 700; line-height: 1.1; }
.pb-dashboard .dashboard-kpi-card .kpi-suffix { font-size: 11px; color: var(--db-color-muted); margin-left: 4px; }

.pb-dashboard .kpi-primary { border-left: 4px solid var(--db-color-primary); }
.pb-dashboard .kpi-primary .kpi-value { color: var(--db-color-primary); }
.pb-dashboard .kpi-warning { border-left: 4px solid var(--db-color-warning); }
.pb-dashboard .kpi-warning .kpi-value { color: var(--db-color-warning); }
.pb-dashboard .kpi-success { border-left: 4px solid var(--db-color-success); }
.pb-dashboard .kpi-success .kpi-value { color: var(--db-color-success); }
.pb-dashboard .kpi-danger  { border-left: 4px solid var(--db-color-danger); }
.pb-dashboard .kpi-danger .kpi-value  { color: var(--db-color-danger); }
.pb-dashboard .kpi-info    { border-left: 4px solid #4dabf7; }
.pb-dashboard .kpi-info .kpi-value { color: #1971c2; }
.pb-dashboard .kpi-soft    { background: #fbfdfb; }

/* ─── 알림 ─── */
.pb-dashboard .dashboard-alert {
	background: #fff;
	border: 1px solid var(--db-border);
	border-radius: 6px;
	padding: 12px 14px;
	margin-bottom: 10px;
	display: flex;
	align-items: flex-start;
	gap: 10px;
}
.pb-dashboard .dashboard-alert .alert-icon { font-size: 18px; line-height: 1; padding-top: 2px; }
.pb-dashboard .dashboard-alert .alert-body { flex: 1 1 auto; }
.pb-dashboard .dashboard-alert .alert-title { font-weight: 600; margin-bottom: 4px; }
.pb-dashboard .dashboard-alert .alert-detail { font-size: 13px; color: #555; }
.pb-dashboard .dashboard-alert .alert-actions { margin-top: 8px; display: flex; gap: 6px; flex-wrap: wrap; }
.pb-dashboard .alert-dlq { border-left: 4px solid var(--db-color-danger); background: #fff7f7; }
.pb-dashboard .alert-dlq .alert-icon { color: var(--db-color-danger); }
.pb-dashboard .alert-key { border-left: 4px solid var(--db-color-warning); background: #fffaf0; }
.pb-dashboard .alert-key .alert-icon { color: var(--db-color-warning); }

/* ─── 메트릭 패널 ─── */
.pb-dashboard .metric-panel {
	background: #fff;
	border: 1px solid var(--db-border);
	border-radius: 6px;
	padding: 14px 16px;
	margin-bottom: 12px;
}
.pb-dashboard .metric-panel-title { font-size: 13px; font-weight: 600; margin-bottom: 10px; color: #444; }
.pb-dashboard .metric-row {
	display: flex;
	justify-content: space-between;
	align-items: baseline;
	padding: 4px 0;
	border-bottom: 1px dashed var(--db-border);
}
.pb-dashboard .metric-row:last-child { border-bottom: 0; }
.pb-dashboard .metric-label { color: var(--db-color-muted); font-size: 12px; }
.pb-dashboard .metric-value { font-weight: 600; font-size: 14px; }
.pb-dashboard .metric-value.success { color: var(--db-color-success); }
.pb-dashboard .metric-value.warning { color: var(--db-color-warning); }
.pb-dashboard .metric-value.danger  { color: var(--db-color-danger); }

/* ─── 차트 패널 ─── */
.pb-dashboard .chart-panel {
	background: #fff;
	border: 1px solid var(--db-border);
	border-radius: 6px;
	padding: 14px 16px;
}
.pb-dashboard .chart-panel-title { font-size: 13px; font-weight: 600; margin-bottom: 10px; }
.pb-dashboard .chart-canvas-wrap { position: relative; height: 240px; }

/* ─── 헬스 푸터 ─── */
.pb-dashboard .dashboard-health {
	background: var(--db-bg-soft);
	border: 1px solid var(--db-border);
	border-radius: 6px;
	padding: 10px 14px;
	margin-top: 8px;
	font-size: 12px;
	color: #555;
	display: flex;
	flex-wrap: wrap;
	gap: 16px;
}
.pb-dashboard .health-line { display: inline-flex; align-items: center; gap: 6px; }
.pb-dashboard .health-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.pb-dashboard .health-ok   .health-dot { background: var(--db-color-success); }
.pb-dashboard .health-warn .health-dot { background: var(--db-color-warning); }
.pb-dashboard .health-fail .health-dot { background: var(--db-color-danger); }

/* ─── 풀 콘솔 (monitor-console) ─── */
.pb-monitor-console .filter-form { background:#fff; border:1px solid var(--db-border); border-radius:6px; padding:12px 14px; margin-bottom:12px; }
.pb-monitor-console .filter-form .form-inline { display:flex; flex-wrap:wrap; gap:8px; align-items:center; }
.pb-monitor-console .filter-form select, .pb-monitor-console .filter-form input[type=text] { min-width:120px; }
.pb-monitor-console .easytable-wrap { background:#fff; border:1px solid var(--db-border); border-radius:6px; padding:0; }
.pb-monitor-console .task-detail-panel { background:#f9fbfd; border-top:1px dashed var(--db-border); padding:12px 14px; }
.pb-monitor-console .task-detail-panel pre { max-height:240px; overflow:auto; font-size:11px; background:#fff; padding:8px; border:1px solid var(--db-border); border-radius:4px; }
.pb-monitor-console .status-badge { display:inline-block; padding:2px 8px; border-radius:10px; font-size:11px; font-weight:600; }
.pb-monitor-console .status-PENDING    { background:#e3f2fd; color:#1565c0; }
.pb-monitor-console .status-PROCESSING { background:#fff8e1; color:#a05a00; }
.pb-monitor-console .status-DONE       { background:#e8f5e9; color:#2e7d32; }
.pb-monitor-console .status-FAILED     { background:#ffebee; color:#c62828; }

/* 모바일 — KPI 카드 폰트 축소 (그리드는 .pb-dashboard-kpi-grid 미디어쿼리에서 처리) */
@media (max-width: 767px) {
	.pb-dashboard .dashboard-kpi-card .kpi-value { font-size: 20px; }
	.pb-dashboard .chart-canvas-wrap { height: 200px; }
}
