.pipeline-filters { display:flex; flex-wrap:wrap; align-items:end; gap:12px; margin-bottom:20px; }
.pipeline-filters label { display:flex; flex-direction:column; gap:7px; margin:0; min-width:0; }
.pipeline-filters .themed-select { max-width:250px; }
.pipeline-note { font-size:12px; color:var(--muted); margin:12px 0; }

/* Two last-success cards, one per pipeline. */
.pipeline-summaries { display:grid; grid-template-columns:repeat(2,1fr); gap:13px; margin-bottom:18px; }
.pipeline-summary { padding:20px; border:1px solid var(--line); border-radius:15px;
  background:linear-gradient(145deg,var(--kitty-card-top),var(--kitty-card-bottom)); }
.pipeline-summary h3 { margin:0 0 4px; font-size:15px; }
.pipeline-summary .pipeline-kicker { display:block; text-transform:uppercase; letter-spacing:.13em;
  color:#69766e; font-size:8px; font-weight:850; margin-bottom:8px; }
.pipeline-summary dl { display:grid; grid-template-columns:auto 1fr; gap:5px 14px; margin:12px 0 0; font-size:12px; }
.pipeline-summary dt { color:var(--muted); }
.pipeline-summary dd { margin:0; text-align:right; }

/* The stage rail: one dot per stage of a run, filled up to whatever it last reported. */
.stage-rail { display:flex; align-items:center; gap:4px; margin-top:6px; }
.stage-rail i { flex:1 1 0; height:3px; border-radius:2px; background:var(--kitty-divider); }
.stage-rail i.done { background:var(--kitty-accent); }
.stage-rail i.failed { background:#f87171; }
.stage-rail i.current { background:var(--kitty-accent); animation:stage-breathe 1.6s ease-in-out infinite; }
@keyframes stage-breathe { 50% { opacity:.35; } }
@media (prefers-reduced-motion:reduce){ .stage-rail i.current { animation:none; } }

.pipeline-table { min-width:1060px; }
.pipeline-table td { vertical-align:top; line-height:1.6; padding:12px 14px; }
.pipeline-table td strong,.pipeline-table td small { display:block; }
.pipeline-table td small { margin-top:4px; color:var(--muted); font-size:11px; }
.pipeline-table .badge { white-space:nowrap; }
.pipeline-table tr:hover { background:#b677ee08; }
.pipeline-table tr.is-running { background:#b677ee0d; }
/* The worker's own words. Worth reading, so give it room to wrap but cap the width. */
.pipeline-table .failure-detail { max-width:320px; white-space:normal; color:#f8a5a5; }
.plugins-table td { padding:10px 14px; line-height:1.5; }
.plugins-table td small { display:block; margin-top:3px; color:var(--muted); font-size:11px; }
#pipeline-more { margin-top:16px; }
@media(max-width:900px){ .pipeline-summaries { grid-template-columns:1fr; } }
@media(max-width:650px){ .pipeline-filters>label,.pipeline-filters .themed-select { width:100%; max-width:none; } }

/* Live console: the worker's own stage lines, appended as they land in the journal. */
.console-panel { margin-bottom:18px; }
.console-head { display:flex; justify-content:space-between; align-items:center; gap:14px; flex-wrap:wrap;
  padding:14px 18px; border-bottom:1px solid var(--line); }
.console-status { display:flex; align-items:center; gap:12px; min-width:0; }
.console-status strong { display:block; font-size:13px; }
.console-status small { display:block; color:var(--muted); font-size:11px; margin-top:2px; }
.console-dot { flex:0 0 auto; width:10px; height:10px; border-radius:50%; background:#5c6a62; box-shadow:0 0 0 3px #5c6a6222; }
.console-dot.is-live { background:var(--green); box-shadow:0 0 0 3px #68e79c22; animation:console-pulse 2.4s ease-in-out infinite; }
.console-dot.is-busy { background:var(--kitty-accent); box-shadow:0 0 0 3px #b677ee22; animation:console-pulse 1.2s ease-in-out infinite; }
.console-dot.is-paused { background:var(--amber); box-shadow:0 0 0 3px #e8bc6822; }
.console-dot.is-offline { background:var(--danger); box-shadow:0 0 0 3px #ff777722; }
@keyframes console-pulse { 50% { opacity:.35; } }
@media (prefers-reduced-motion:reduce){ .console-dot { animation:none !important; } }
.console-tools { display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.console-tools .button { padding:7px 12px; font-size:11px; }
.console-toggle { display:flex; align-items:center; gap:6px; margin:0 4px; font-size:11px; color:var(--muted); cursor:pointer; }
.console-toggle input { margin:0; accent-color:var(--kitty-accent); }
.console-chips { display:flex; gap:4px; flex-wrap:wrap; }
.console-chips button { padding:5px 9px; border-radius:99px; border:1px solid var(--line); background:#ffffff06;
  color:#a1aba4; font-size:9px; text-transform:uppercase; letter-spacing:.08em; font-weight:850; cursor:pointer; }
.console-chips button:hover { color:#d8e2dc; border-color:#3c5144; }
.console-chips button.active { color:var(--kitty-accent); border-color:#b677ee66; background:#b677ee14; }
.console-log { position:relative; height:320px; overflow:auto; padding:10px 0; background:#0a0e0c;
  font:11.5px/1.55 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; color:#c9d3cd; outline:none; }
.console-log:focus-visible { box-shadow:inset 0 0 0 1px var(--kitty-accent); }
.con-line { display:grid; grid-template-columns:78px 78px 170px 1fr; gap:12px; padding:2px 18px; white-space:nowrap; }
.con-line:hover { background:#ffffff06; }
.con-t { color:#657169; }
.con-m { color:#8a96a3; text-transform:uppercase; font-size:9.5px; letter-spacing:.06em; padding-top:1px; }
.con-m-portal,.con-m-archive { color:#9ab8ff; }
.con-m-launcher { color:#f0c674; }
.con-m-loader { color:#f5a97f; }
.con-m-server,.con-m-toolchain { color:#ee99a0; }
.con-m-api { color:#8bd5ca; }
.con-s { color:#d8e2dc; font-weight:600; overflow:hidden; text-overflow:ellipsis; }
.con-f { color:#93a09a; overflow:hidden; text-overflow:ellipsis; }
.con-line.lv-ok .con-s { color:var(--green); }
.con-line.lv-ok .con-f { color:#b9e6cc; }
.con-line.lv-error { background:#ff777710; }
.con-line.lv-error .con-s,.con-line.lv-error .con-f { color:#f8a5a5; white-space:normal; }
.con-line.lv-warn .con-s { color:var(--amber); }
.con-line.lv-progress .con-s { color:#c8b5ff; font-weight:500; }
.console-empty { position:absolute; inset:0; display:grid; place-items:center; color:#657169; font-size:11px; pointer-events:none; }
@media(max-width:900px){ .con-line { grid-template-columns:70px 64px 1fr; } .con-f { grid-column:1/-1; white-space:normal; padding-left:0; } }
