:root { --bs-body-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif; }
[hidden] { display: none !important; }
body { font-size: .9rem; }
.container-xl { max-width: 1320px; }
.card { --bs-card-border-color: #e1e7e3; }
.metric { display: flex; align-items: baseline; flex-wrap: wrap; gap: .6rem; min-height: 29px; }
.metric small { font-size: .7rem; color: var(--bs-secondary-color); font-weight: 400; }
.project-card { transition: border-color .2s; }
.project-card.running { border-color: var(--bs-success); }
.project-symbol { height: 37px; width: 37px; display: grid; place-items: center; font: 600 18px monospace; }
.min-width-0 { min-width: 0; }
.project-description, .project-meta-label, .project-stage { font-size: .72rem; }
.project-meta-label { color: var(--bs-secondary-color); margin-bottom: 4px; }
.project-version { min-height: 20px; }
.project-version code { font-size: .75rem; color: var(--bs-success); background: var(--bs-tertiary-bg); padding: 2px 5px; border-radius: 3px; }
.project-version .unknown { color: var(--bs-secondary-color); font-family: inherit; }
.project-updated { font-size: .65rem; }
.card-progress { height: 4px; width: 100%; display: block; appearance: none; border: 0; }
.card-progress::-webkit-progress-bar { background: #edf1ee; border-radius: 3px; }
.card-progress::-webkit-progress-value { background: var(--bs-success); border-radius: 3px; }
.card-progress::-moz-progress-bar { background: var(--bs-success); }
.failed .card-progress::-webkit-progress-value { background: var(--bs-danger); }
.connection i { display: inline-block; height: 6px; width: 6px; border-radius: 50%; background: var(--bs-success); margin-right: 6px; }
.connection.offline i { background: var(--bs-warning); }
.job-select { width: auto; max-width: 100%; font-size: .75rem; }
.stage-item { display: flex; align-items: center; color: var(--bs-secondary-color); font-size: .75rem; }
.stage-item i { display: grid; place-items: center; width: 21px; height: 21px; border: 1px solid var(--bs-border-color); border-radius: 50%; font: normal 10px monospace; margin-right: 7px; }
.stage-item.complete { color: var(--bs-success); }
.stage-item.complete i { background: var(--bs-success-bg-subtle); border-color: var(--bs-success-border-subtle); }
.stage-item.current { color: var(--bs-success); font-weight: 600; }
.stage-item.current i { background: var(--bs-success); color: #fff; border-color: var(--bs-success); }
.stage-item.error { color: var(--bs-danger); }
.console-header { background: #283a33; color: #c1d1c6; }
.console-header .btn { font-size: .65rem; }
.log-output { height: 300px; overflow: auto; background: #192b24; color: #c4d8cb; padding: 18px; font: 11px/1.9 ui-monospace, SFMono-Regular, Menlo, "PingFang SC", monospace; white-space: pre-wrap; overflow-wrap: anywhere; }
table { white-space: nowrap; font-size: .78rem; }
.table>:not(caption)>*>* { padding: .9rem 1.1rem; }
.table thead th { font-weight: 500; color: var(--bs-secondary-color); font-size: .75rem; }
#activity, #history { scroll-margin-top: 85px; }
@media (max-width: 575px) { .log-output { height: 270px; font-size: 10px; } .navbar-brand { font-size: 1rem; } .metric { font-size: 1.25rem; } }
@media (prefers-reduced-motion: reduce) { * { transition: none !important; animation: none !important; } }
