/* _content/BPack.Logging.UI/BpLogPage.razor.rz.scp.css */
/* 로그 페이지 — 템플릿(BpContentLayout + BpGrid Height 100%) 그대로. 이 부품 몫은 본문 세로 배치 · 시각 한 줄 · 말줄임 · 상세뿐이다. */
.bplp-body[b-shfxpa0gcd] {
    display: flex;
    flex-direction: column;
    gap: var(--bp-space-2, 8px);
    height: 100%;
    min-height: 0;
}

.bplp-grid[b-shfxpa0gcd] {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.bplp-time[b-shfxpa0gcd] {
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.bplp-ellipsis[b-shfxpa0gcd] {
    display: block;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.bplp-detail[b-shfxpa0gcd] {
    display: grid;
    grid-template-columns: max-content minmax(0, 1fr);
    gap: 6px 12px;
    margin: 0 0 12px;
}

.bplp-detail dt[b-shfxpa0gcd] { color: var(--bp-text-secondary); }
.bplp-detail dd[b-shfxpa0gcd] { margin: 0; min-width: 0; overflow-wrap: anywhere; }

.bplp-stack[b-shfxpa0gcd] {
    margin: 0;
    padding: 10px 12px;
    max-height: 50vh;
    overflow: auto;
    background: var(--bp-bg-muted);
    border: 1px solid var(--bp-border-light);
    border-radius: var(--bp-radius-sm);
    font-family: var(--bp-font-mono);
    font-size: 12px;
    line-height: 1.5;
    white-space: pre;
}

.bplp-empty[b-shfxpa0gcd] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    padding: 24px;
    color: var(--bp-text-tertiary);
}
/* _content/BPack.Logging.UI/BpLogViewer.razor.rz.scp.css */
/* 로그 화면 패널 — BpLogPanel 의 줄 · 레벨 색을 그대로 쓰고, 칸(시각 · 레벨 · source · 메시지)과 이 부품 몫만 더한다. */
.bplv[b-ssdjf1o1gb] {
    display: flex;
    flex-direction: column;
    height: 100%;
    min-height: 0;
    container-type: inline-size;
}

.bplv[b-ssdjf1o1gb]  .bp-log-panel { flex: 1; min-height: 0; }

/* 4칸. 시각은 년월일시 한 줄(REQ-LOG-003 FR-7) — 줄바꿈하지 않는다. */
.bplv-row.bp-log-row[b-ssdjf1o1gb] {
    grid-template-columns: 23ch 3.5ch minmax(8ch, 30ch) minmax(0, 1fr);
}

.bplv-row time[b-ssdjf1o1gb] {
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.bplv-src[b-ssdjf1o1gb] {
    color: var(--bp-neutral-400);
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.bplv-row.is-debug .level[b-ssdjf1o1gb] { color: var(--bp-neutral-400); }
.bplv-row.is-debug .msg[b-ssdjf1o1gb] { color: var(--bp-neutral-400); }
.bplv-row.is-fatal .level[b-ssdjf1o1gb] {
    color: var(--bp-neutral-0);
    background: var(--bp-error);
    border-radius: var(--bp-radius-sm);
    text-align: center;
}

.bplv-msg.msg[b-ssdjf1o1gb] {
    display: flex;
    align-items: baseline;
    min-width: 0;
}

.bplv-text[b-ssdjf1o1gb] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.bplv-exc[b-ssdjf1o1gb] {
    flex: none;
    margin-left: 6px;
    padding: 0 4px;
    border: 0;
    background: transparent;
    color: var(--bp-error);
    font: inherit;
    cursor: pointer;
}

.bplv-exc:focus-visible[b-ssdjf1o1gb] { outline: 1px solid var(--bp-error); }

.bplv-row[b-ssdjf1o1gb] { cursor: pointer; }

.bplv-detail[b-ssdjf1o1gb] { margin: 0 6px 4px calc(23ch + 3.5ch + 20px); }
/* 넓으면 시각 · source 가 줄에 보인다 — 상세는 예외가 있을 때만 stack 을 보인다. */
.bplv-detail-meta[b-ssdjf1o1gb] { display: none; color: var(--bp-neutral-400); padding: 2px 0 4px; overflow-wrap: anywhere; }
.bplv-detail:not(.has-stack)[b-ssdjf1o1gb] { display: none; }

.bplv-pager[b-ssdjf1o1gb] {
    display: flex;
    align-items: center;
    margin-left: auto;
    font-family: var(--bp-font-sans, inherit);
}

.bplv-stack[b-ssdjf1o1gb] {
    margin: 0;
    padding: 6px 10px;
    background: var(--bp-neutral-900);
    border-left: 2px solid var(--bp-error);
    color: var(--bp-neutral-300);
    white-space: pre;
    overflow-x: auto;
    font-size: 0.92em;
    line-height: 1.5;
}

.bplv-filters[b-ssdjf1o1gb] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    padding: 4px 0 8px;
    border-bottom: 1px solid var(--bp-neutral-800);
    margin-bottom: 4px;
}

.bplv-label[b-ssdjf1o1gb] { color: var(--bp-neutral-400); }

.bplv-warn[b-ssdjf1o1gb] {
    margin: 4px 0;
    padding: 4px 8px;
    border: 1px solid var(--bp-warning);
    border-radius: var(--bp-radius-sm);
    color: var(--bp-warning);
}

.bplv-empty[b-ssdjf1o1gb] {
    margin: 24px auto;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    color: var(--bp-neutral-500);
}

.bplv-foot[b-ssdjf1o1gb] {
    display: flex;
    justify-content: space-between;
    gap: 8px;
    padding: 4px 12px;
    background: var(--bp-neutral-900);
    border-top: 1px solid var(--bp-neutral-800);
    color: var(--bp-neutral-400);
    font-family: var(--bp-font-mono);
    font-size: 11px;
    flex-shrink: 0;
}

.bplv-folder[b-ssdjf1o1gb] {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* 테마 연동 — BpLogPanel ThemeAware 와 같은 토큰. */
.bplv.is-theme .bplv-foot[b-ssdjf1o1gb] {
    background: var(--bp-bg-elevated);
    border-top-color: var(--bp-border-light);
    color: var(--bp-text-tertiary);
}
.bplv.is-theme .bplv-stack[b-ssdjf1o1gb] { background: var(--bp-bg-muted); color: var(--bp-text-primary); }
.bplv.is-theme .bplv-src[b-ssdjf1o1gb] { color: var(--bp-text-tertiary); }
.bplv.is-theme .bplv-filters[b-ssdjf1o1gb] { border-bottom-color: var(--bp-border-light); }

/* 좁은 폭(셸 하단 패널) — source 칸을 숨긴다. 시각은 밀리초만 빼고 한 줄. */
@container (max-width: 520px) {
    .bplv-row.bp-log-row[b-ssdjf1o1gb] { grid-template-columns: 19ch 3.5ch minmax(0, 1fr); }
    .bplv-src[b-ssdjf1o1gb] { display: none; }
    .bplv-detail[b-ssdjf1o1gb] { margin-left: 6px; }
    .bplv-detail:not(.has-stack)[b-ssdjf1o1gb] { display: block; }
    .bplv-detail-meta[b-ssdjf1o1gb] { display: block; }
}

/* 탭 · 단추 — 좁아져도 글자를 세로로 쪼개지 않는다. 좁으면 단추는 ⋯ 메뉴로(시안 ⑤). */
.bplv[b-ssdjf1o1gb]  .bp-log-tab { white-space: nowrap; }
.bplv-actions[b-ssdjf1o1gb] { display: contents; }
.bplv-more[b-ssdjf1o1gb] { display: none; }
.bplv-menu[b-ssdjf1o1gb] {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 4px;
    padding: 6px;
    min-width: 180px;
}

.bplv-foot span:first-child[b-ssdjf1o1gb] { white-space: nowrap; }

@container (max-width: 520px) {
    .bplv-actions[b-ssdjf1o1gb] { display: none; }
    .bplv-more[b-ssdjf1o1gb] { display: inline-flex; }
    .bplv[b-ssdjf1o1gb]  .bp-log-level { display: none; }
    .bplv[b-ssdjf1o1gb]  .bp-log-search { width: 120px; }
    .bplv-ms[b-ssdjf1o1gb] { display: none; }
    .bplv-folder[b-ssdjf1o1gb] { display: none; }
}

/* 바닥 줄 안의 쪽 단추 — 바닥 줄 높이에 맞추고, 콘솔(다크 고정)에서는 콘솔 표면색을 쓴다(밝은 상자가 튀지 않게). */
.bplv-foot[b-ssdjf1o1gb] { align-items: center; }
.bplv-pager[b-ssdjf1o1gb]  .bp-btn-pagination { min-width: 24px; width: 24px; height: 24px; }
.bplv:not(.is-theme) .bplv-pager[b-ssdjf1o1gb]  .bp-btn-pagination {
    background: transparent;
    color: var(--bp-neutral-300);
    border-color: var(--bp-neutral-700);
}
.bplv:not(.is-theme) .bplv-pager[b-ssdjf1o1gb]  .bp-btn-pagination:disabled { color: var(--bp-neutral-600); }
.bplv:not(.is-theme) .bplv-pager[b-ssdjf1o1gb]  .bp-btn-pagination.bp-active {
    background: var(--bp-primary-500);
    color: var(--bp-neutral-0);
}
.bplv:not(.is-theme) .bplv-pager[b-ssdjf1o1gb]  .bp-btn-pagination:hover:not(:disabled):not(.bp-active) { background: var(--bp-neutral-800); }
