627 lines
29 KiB
CSS
627 lines
29 KiB
CSS
:root {
|
|
color-scheme: light;
|
|
font-family: "Microsoft YaHei UI", "PingFang SC", Inter, system-ui, sans-serif;
|
|
--page: #eef3f9;
|
|
--surface: #ffffff;
|
|
--surface-soft: #f7f9fc;
|
|
--line: #dce4ee;
|
|
--line-strong: #cbd7e5;
|
|
--text: #172033;
|
|
--muted: #68758b;
|
|
--primary: #2869e8;
|
|
--primary-soft: #eaf1ff;
|
|
--success: #16845b;
|
|
--success-soft: #e7f7f0;
|
|
--warning: #ba7314;
|
|
--danger: #c23f4a;
|
|
--shadow: 0 22px 60px rgba(43, 67, 101, .14), 0 4px 14px rgba(43, 67, 101, .08);
|
|
}
|
|
|
|
* { box-sizing: border-box; }
|
|
|
|
html, body { width: 100%; height: 100%; margin: 0; overflow: hidden; }
|
|
|
|
body {
|
|
display: grid;
|
|
place-items: center;
|
|
padding: 16px;
|
|
color: var(--text);
|
|
font-size: 14px;
|
|
line-height: 1.45;
|
|
background:
|
|
radial-gradient(circle at 15% 8%, rgba(74, 130, 235, .11), transparent 31%),
|
|
linear-gradient(145deg, #f7f9fc 0%, var(--page) 100%);
|
|
}
|
|
|
|
button, textarea, select { font: inherit; }
|
|
button, a, select { -webkit-tap-highlight-color: transparent; }
|
|
button, select { cursor: pointer; }
|
|
|
|
.shell {
|
|
width: min(1280px, 100%);
|
|
height: min(780px, calc(100dvh - 32px));
|
|
min-height: 620px;
|
|
overflow: hidden;
|
|
background: #f7f9fc;
|
|
border: 1px solid rgba(205, 216, 230, .9);
|
|
border-radius: 22px;
|
|
box-shadow: var(--shadow);
|
|
}
|
|
|
|
.topbar {
|
|
height: 68px;
|
|
padding: 0 22px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 20px;
|
|
background: rgba(255, 255, 255, .94);
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.topbar-main, .topbar-status, .card-heading, .button-row, .log-actions,
|
|
.server-target, .command-footer, .capability-brief { display: flex; align-items: center; }
|
|
.topbar-main { gap: 11px; min-width: 0; }
|
|
.topbar-status { gap: 9px; flex-wrap: wrap; justify-content: flex-end; }
|
|
|
|
.back-link, .product-mark, .icon-button, .result-icon {
|
|
display: inline-grid;
|
|
place-items: center;
|
|
}
|
|
.back-link, .icon-button {
|
|
width: 34px;
|
|
height: 34px;
|
|
border: 1px solid var(--line);
|
|
border-radius: 10px;
|
|
color: #4d5b71;
|
|
background: var(--surface);
|
|
text-decoration: none;
|
|
}
|
|
.back-link:hover, .icon-button:hover { color: var(--primary); border-color: #a9c1ef; background: var(--primary-soft); }
|
|
.back-link svg, .icon-button svg { width: 17px; height: 17px; }
|
|
.product-mark { width: 36px; height: 36px; border-radius: 11px; color: white; background: linear-gradient(145deg, #3a7cf0, #1d59cd); box-shadow: 0 7px 16px rgba(40, 105, 232, .22); }
|
|
.product-mark svg { width: 19px; }
|
|
.eyebrow, .section-kicker { margin: 0; color: #7a88a0; font-size: 12px; font-weight: 700; letter-spacing: .08em; }
|
|
h1 { margin: 1px 0 0; font-size: 20px; line-height: 1.15; letter-spacing: -.02em; }
|
|
h2 { margin: 1px 0 0; font-size: 17px; line-height: 1.2; }
|
|
|
|
.environment-chip, .server-state, .status-badge {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
min-height: 29px;
|
|
padding: 4px 10px;
|
|
border: 1px solid var(--line);
|
|
border-radius: 999px;
|
|
color: #58677d;
|
|
background: #f8fafc;
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
white-space: nowrap;
|
|
}
|
|
.environment-chip svg { width: 14px; }
|
|
.server-state span { width: 7px; height: 7px; border-radius: 50%; background: #9aa7b8; }
|
|
.server-state.online { color: var(--success); border-color: #b9e5d3; background: var(--success-soft); }
|
|
.server-state.online span { background: var(--success); box-shadow: 0 0 0 4px rgba(22, 132, 91, .1); }
|
|
|
|
main {
|
|
height: calc(100% - 68px);
|
|
min-height: 0;
|
|
padding: 11px;
|
|
display: grid;
|
|
grid-template-columns: 380px minmax(0, 1fr);
|
|
grid-template-rows: 116px minmax(0, 1fr) 172px;
|
|
grid-template-areas:
|
|
"pipeline pipeline"
|
|
"command execution"
|
|
"software software";
|
|
gap: 10px;
|
|
}
|
|
|
|
.card {
|
|
position: relative;
|
|
min-width: 0;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
padding: 12px 14px;
|
|
background: var(--surface);
|
|
border: 1px solid var(--line);
|
|
border-radius: 15px;
|
|
box-shadow: 0 2px 8px rgba(46, 66, 94, .045);
|
|
}
|
|
.card-heading { justify-content: space-between; gap: 12px; min-height: 32px; }
|
|
.hero-grid { grid-area: command; min-width: 0; min-height: 0; }
|
|
.hero-grid .command-card { height: 100%; }
|
|
.pipeline-card { grid-area: pipeline; }
|
|
.execution-grid { grid-area: execution; min-width: 0; min-height: 0; }
|
|
.execution-grid .log-card { width: 100%; height: 100%; }
|
|
.software-card { grid-area: software; }
|
|
|
|
.baseline-picker {
|
|
display: grid;
|
|
grid-template-columns: auto auto;
|
|
align-items: center;
|
|
column-gap: 5px;
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
}
|
|
.baseline-picker svg { grid-row: 1 / 3; width: 16px; color: var(--primary); }
|
|
.baseline-picker span { line-height: 1; }
|
|
.baseline-picker select {
|
|
max-width: 148px;
|
|
border: 0;
|
|
padding: 1px 18px 1px 0;
|
|
color: var(--text);
|
|
background: transparent;
|
|
font-size: 13px;
|
|
font-weight: 700;
|
|
outline: none;
|
|
}
|
|
|
|
.command-card { display: flex; flex-direction: column; gap: 7px; }
|
|
.command-card > label { color: #5d6b80; font-size: 13px; font-weight: 650; }
|
|
textarea {
|
|
width: 100%;
|
|
min-height: 64px;
|
|
flex: 1 1 70px;
|
|
resize: none;
|
|
padding: 9px 11px;
|
|
color: var(--text);
|
|
background: var(--surface-soft);
|
|
border: 1px solid var(--line-strong);
|
|
border-radius: 10px;
|
|
font-size: 13px;
|
|
line-height: 1.55;
|
|
outline: none;
|
|
}
|
|
textarea:focus { border-color: #79a4f4; box-shadow: 0 0 0 3px rgba(40, 105, 232, .1); background: #fff; }
|
|
.prompt-templates { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
.prompt-templates button {
|
|
min-width: 0;
|
|
padding: 5px 8px;
|
|
border: 1px solid #cbd9ef;
|
|
border-radius: 8px;
|
|
color: #3563a9;
|
|
background: #f3f7ff;
|
|
font-size: 12px;
|
|
font-weight: 700;
|
|
white-space: nowrap;
|
|
}
|
|
.capability-brief {
|
|
min-height: 50px;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
padding: 7px 9px;
|
|
border: 1px solid #dbe6f6;
|
|
border-radius: 10px;
|
|
background: #f6f9fe;
|
|
}
|
|
.capability-brief > div { min-width: 0; display: grid; gap: 1px; }
|
|
.capability-brief span { color: var(--muted); font-size: 12px; }
|
|
.capability-brief strong { overflow: hidden; text-overflow: ellipsis; color: #344157; font-size: 13px; white-space: nowrap; }
|
|
.capability-brief > svg { width: 17px; flex: 0 0 auto; color: #8fa7ca; }
|
|
.capability-target { flex: 1; }
|
|
.capability-target strong { color: var(--primary); }
|
|
.command-footer { justify-content: flex-end; gap: 8px; }
|
|
.button-row { gap: 6px; }
|
|
.button {
|
|
min-height: 33px;
|
|
padding: 6px 11px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 6px;
|
|
border-radius: 9px;
|
|
border: 1px solid transparent;
|
|
font-size: 13px;
|
|
font-weight: 750;
|
|
white-space: nowrap;
|
|
}
|
|
.button svg { width: 15px; }
|
|
.button-primary { color: white; background: var(--primary); box-shadow: 0 5px 12px rgba(40, 105, 232, .18); }
|
|
.button-secondary { color: #526178; background: #fff; border-color: var(--line-strong); }
|
|
.button:disabled, .icon-button:disabled { cursor: not-allowed; opacity: .48; }
|
|
|
|
.pipeline {
|
|
width: calc(100% - 230px);
|
|
height: 58px;
|
|
margin: 7px 0 0;
|
|
padding: 0;
|
|
display: grid;
|
|
grid-template-columns: repeat(8, minmax(0, 1fr));
|
|
list-style: none;
|
|
}
|
|
.pipeline-stage { position: relative; min-width: 0; padding-top: 2px; text-align: center; }
|
|
.pipeline-stage::after { content: ""; position: absolute; top: 14px; left: calc(50% + 15px); width: calc(100% - 30px); height: 2px; background: #dce4ee; }
|
|
.pipeline-stage:last-child::after { display: none; }
|
|
.stage-node { position: relative; z-index: 1; width: 28px; height: 28px; margin: 0 auto 1px; display: grid; place-items: center; border: 2px solid #d4deea; border-radius: 50%; color: #7b8aa0; background: #fff; }
|
|
.stage-node svg { width: 14px; }
|
|
.stage-name { display: block; overflow: hidden; text-overflow: ellipsis; font-size: 13px; line-height: 1.15; white-space: nowrap; }
|
|
.stage-state { display: block; overflow: hidden; text-overflow: ellipsis; color: var(--muted); font-size: 12px; line-height: 1.1; white-space: nowrap; }
|
|
.pipeline-stage[data-status="running"] .stage-node { color: var(--primary); border-color: var(--primary); background: var(--primary-soft); animation: pulse 1.4s infinite; }
|
|
.pipeline-stage[data-status="success"] .stage-node { color: var(--success); border-color: #65bd9e; background: var(--success-soft); }
|
|
.pipeline-stage[data-status="failed"] .stage-node, .pipeline-stage[data-status="blocked"] .stage-node { color: var(--danger); border-color: #e39aa1; background: #fff0f1; }
|
|
.pipeline-stage[data-status="canceled"] .stage-node { color: #7b8798; background: #eef1f5; }
|
|
.pipeline-stage[data-status="pending_confirmation"] .stage-node { color: var(--warning); border-color: #ecc080; background: #fff7e9; }
|
|
.pipeline-stage[data-status="success"]::after { background: #8bcdb5; }
|
|
.release-result {
|
|
position: absolute;
|
|
top: 43px;
|
|
right: 14px;
|
|
width: 210px;
|
|
min-height: 52px;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
padding: 8px 10px;
|
|
border: 1px solid var(--line);
|
|
border-radius: 11px;
|
|
background: var(--surface-soft);
|
|
}
|
|
.result-icon { width: 32px; height: 32px; flex: 0 0 auto; color: #748399; border-radius: 9px; background: #e9eef5; }
|
|
.result-icon svg { width: 17px; }
|
|
.release-result div { min-width: 0; display: grid; }
|
|
.release-result small { color: var(--muted); font-size: 12px; }
|
|
.release-result strong { overflow: hidden; text-overflow: ellipsis; font-size: 13px; white-space: nowrap; }
|
|
.release-result[data-state="success"] { border-color: #b9e5d3; background: var(--success-soft); }
|
|
.release-result[data-state="success"] .result-icon { color: var(--success); background: #d2f0e3; }
|
|
.release-result[data-state="failed"] { border-color: #efc5c9; background: #fff2f3; }
|
|
.status-legend { display: none; }
|
|
|
|
.log-card { display: grid; grid-template-rows: auto auto minmax(0, 1fr); gap: 7px; }
|
|
.log-actions { gap: 6px; }
|
|
.log-actions .icon-button { width: 31px; height: 31px; }
|
|
.status-badge { min-height: 25px; padding: 3px 9px; }
|
|
.status-badge[data-status="running"] { color: var(--primary); border-color: #b9cff7; background: var(--primary-soft); }
|
|
.status-badge[data-status="success"], .status-badge[data-status="published"] { color: var(--success); border-color: #b9e5d3; background: var(--success-soft); }
|
|
.status-badge[data-status="failed"], .status-badge[data-status="blocked"] { color: var(--danger); border-color: #efc5c9; background: #fff2f3; }
|
|
.status-badge[data-status="ready"], .status-badge[data-status="pending_confirmation"] { color: var(--warning); border-color: #efd3a8; background: #fff7e9; }
|
|
.metrics { margin: 0; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
|
|
.metrics div { min-width: 0; padding: 5px 7px; border-radius: 8px; background: var(--surface-soft); border: 1px solid #edf1f6; }
|
|
.metrics dt { color: var(--muted); font-size: 12px; }
|
|
.metrics dd { margin: 1px 0 0; overflow: hidden; text-overflow: ellipsis; font-size: 13px; font-weight: 750; white-space: nowrap; }
|
|
.log-workspace { min-height: 0; display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(220px, .9fr); gap: 8px; }
|
|
.log-stream, .log-details { min-height: 0; overflow: auto; border: 1px solid var(--line); border-radius: 10px; background: #f9fbfd; }
|
|
.log-stream { padding: 7px 9px; scrollbar-width: thin; }
|
|
.empty-state { height: 100%; min-height: 110px; display: grid; place-content: center; justify-items: center; gap: 4px; color: var(--muted); text-align: center; }
|
|
.empty-state svg { width: 24px; color: #93a3ba; }
|
|
.empty-state strong { color: #4a596f; font-size: 13px; }
|
|
.empty-state span { font-size: 12px; }
|
|
.log-entry { display: grid; grid-template-columns: 58px 9px minmax(0, 1fr); gap: 7px; padding: 5px 0; border-bottom: 1px solid #e9eef5; }
|
|
.log-entry:last-child { border-bottom: 0; }
|
|
.log-time { color: #7b889b; font: 12px/1.4 ui-monospace, Consolas, monospace; }
|
|
.log-dot { width: 7px; height: 7px; margin-top: 5px; border-radius: 50%; background: #91a0b4; }
|
|
.log-entry[data-level="success"] .log-dot { background: var(--success); }
|
|
.log-entry[data-level="error"] .log-dot { background: var(--danger); }
|
|
.log-entry[data-level="warning"] .log-dot { background: var(--warning); }
|
|
.log-copy { min-width: 0; }
|
|
.log-copy strong { font-size: 13px; }
|
|
.log-copy p { margin: 1px 0 0; color: #5b687b; font-size: 13px; overflow-wrap: anywhere; }
|
|
.log-details { display: flex; flex-direction: column; }
|
|
.inspector-tabs { display: grid; grid-template-columns: repeat(3, 1fr); border-bottom: 1px solid var(--line); background: #f2f5f9; }
|
|
.inspector-tabs button { padding: 7px 4px; border: 0; border-bottom: 2px solid transparent; color: #68768b; background: transparent; font-size: 12px; font-weight: 700; }
|
|
.inspector-tabs button.active { color: var(--primary); border-bottom-color: var(--primary); background: #fff; }
|
|
.inspector-content { min-height: 0; flex: 1; overflow: auto; padding: 7px; }
|
|
.empty-inline, .empty-table { padding: 18px; color: var(--muted); text-align: center; font-size: 12px; }
|
|
.change-item, .test-item { display: flex; gap: 7px; padding: 6px; border-bottom: 1px solid #e8edf4; }
|
|
.change-type, .test-mark { flex: 0 0 auto; height: 21px; padding: 2px 5px; border-radius: 5px; color: var(--primary); background: var(--primary-soft); font-size: 12px; }
|
|
.test-mark { width: 21px; display: grid; place-items: center; color: var(--success); background: var(--success-soft); }
|
|
.test-mark svg { width: 12px; }
|
|
.change-copy, .test-copy { min-width: 0; display: grid; }
|
|
.change-copy strong, .test-copy strong { font-size: 12px; overflow-wrap: anywhere; }
|
|
.change-copy span, .test-copy span { color: var(--muted); font-size: 12px; }
|
|
.build-output, .code-block { margin: 0; color: #26364d; font: 12px/1.55 ui-monospace, Consolas, monospace; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
|
|
.software-card { display: grid; grid-template-rows: 33px minmax(0, 1fr); gap: 5px; }
|
|
.server-target { gap: 6px; color: var(--muted); font-size: 12px; }
|
|
.server-target svg { width: 15px; color: var(--primary); }
|
|
.server-target strong { color: #3b4a61; }
|
|
.table-wrap { min-height: 0; overflow: auto; border: 1px solid var(--line); border-radius: 9px; }
|
|
table { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: 13px; }
|
|
th { position: sticky; top: 0; z-index: 1; padding: 6px 7px; color: #617086; background: #f2f5f9; text-align: left; font-weight: 750; white-space: nowrap; }
|
|
td { padding: 6px 7px; border-top: 1px solid #e8edf4; color: #4d5a6e; vertical-align: middle; }
|
|
th:nth-child(1) { width: 14%; } th:nth-child(2) { width: 13%; } th:nth-child(3) { width: 11%; }
|
|
th:nth-child(4) { width: 28%; } th:nth-child(5) { width: 8%; } th:nth-child(6) { width: 26%; }
|
|
.software-name, .file-cell { min-width: 0; display: grid; }
|
|
.software-name strong, .file-cell strong { overflow: hidden; text-overflow: ellipsis; color: #26354b; white-space: nowrap; }
|
|
.software-name span, .file-cell span { color: var(--muted); }
|
|
.file-cell > span { display: block; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
.cap-tags { display: flex; gap: 3px; flex-wrap: wrap; }
|
|
.cap-tags span { padding: 2px 5px; color: #3563a9; background: #eef4ff; border-radius: 5px; white-space: nowrap; }
|
|
.hash-value { display: inline; font-family: ui-monospace, Consolas, monospace; white-space: nowrap; }
|
|
.table-actions { display: flex; align-items: center; gap: 3px; flex-wrap: nowrap; }
|
|
.table-actions button, .table-actions a { min-width: 27px; height: 26px; padding: 3px 5px; display: inline-grid; place-items: center; border: 0; border-radius: 5px; color: #3563a9; background: #edf3ff; font-size: 12px; text-decoration: none; white-space: nowrap; }
|
|
.table-actions svg { width: 13px; height: 13px; }
|
|
.table-actions .publish-action { color: white; background: var(--primary); }
|
|
.table-actions .delete-action { color: var(--danger); background: #fff0f1; }
|
|
.table-actions .notify-action {
|
|
flex: 0 0 42px;
|
|
width: 42px;
|
|
min-width: 42px;
|
|
height: 34px;
|
|
margin-left: auto;
|
|
padding: 6px;
|
|
border-radius: 8px;
|
|
color: #fff;
|
|
background: var(--primary);
|
|
box-shadow: 0 4px 10px rgba(40, 105, 232, .2);
|
|
}
|
|
.table-actions .notify-action svg { width: 20px; height: 20px; stroke-width: 2.25; }
|
|
.table-actions .notify-action:hover { background: color-mix(in srgb, var(--primary) 86%, #132447); }
|
|
.baseline-protection { height: 26px; padding: 3px 6px; display: inline-flex; align-items: center; gap: 3px; color: var(--success); background: var(--success-soft); border-radius: 5px; font-size: 12px; white-space: nowrap; }
|
|
.baseline-protection svg { width: 13px; }
|
|
.status-badge[data-status="baseline"] { color: var(--success); border-color: #b9e5d3; background: var(--success-soft); }
|
|
|
|
.modal-backdrop { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; padding: 24px; background: rgba(31, 43, 61, .34); backdrop-filter: blur(4px); }
|
|
.modal-backdrop[hidden] { display: none; }
|
|
.modal { width: min(1040px, 100%); max-height: min(820px, calc(100dvh - 48px)); display: grid; grid-template-rows: auto minmax(0, 1fr) auto; overflow: hidden; background: #fff; border: 1px solid var(--line); border-radius: 16px; box-shadow: var(--shadow); }
|
|
.modal header, .modal footer { padding: 14px 16px; display: flex; align-items: center; justify-content: space-between; gap: 12px; border-bottom: 1px solid var(--line); }
|
|
.modal footer { justify-content: flex-end; border-top: 1px solid var(--line); border-bottom: 0; }
|
|
.modal-body { overflow: auto; padding: 16px; }
|
|
.detail-grid, .diff-columns { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
|
|
.detail-field, .diff-panel { min-width: 0; padding: 11px; border: 1px solid var(--line); border-radius: 9px; background: var(--surface-soft); }
|
|
.detail-field span { display: block; color: var(--muted); font-size: 12px; }
|
|
.detail-field strong { display: block; margin-top: 3px; overflow-wrap: anywhere; }
|
|
.diff-panel h3 { margin: 0 0 8px; font-size: 14px; }
|
|
.diff-panel p { margin: 5px 0; color: #58677c; }
|
|
.diff-panel.added { border-color: #b9e5d3; background: var(--success-soft); }
|
|
.toast-region { position: fixed; z-index: 80; right: 22px; bottom: 22px; display: grid; gap: 8px; }
|
|
.toast { max-width: 390px; padding: 10px 13px; color: #fff; background: #344258; border-radius: 9px; box-shadow: 0 10px 28px rgba(31, 43, 61, .22); font-size: 13px; }
|
|
.toast.success { background: var(--success); }
|
|
.toast.error { background: var(--danger); }
|
|
|
|
@keyframes pulse { 50% { box-shadow: 0 0 0 5px rgba(40, 105, 232, .09); } }
|
|
|
|
@media (max-width: 980px) {
|
|
body { padding: 8px; }
|
|
.shell { width: 100%; height: calc(100dvh - 16px); min-height: 560px; border-radius: 16px; }
|
|
.topbar { height: 62px; padding: 0 14px; }
|
|
.topbar-status .dashboard-chip, .environment-chip:last-child { display: none; }
|
|
main { height: calc(100% - 62px); grid-template-columns: 330px minmax(0, 1fr); grid-template-rows: 108px minmax(0, 1fr) 164px; padding: 8px; gap: 8px; }
|
|
.card { padding: 10px; }
|
|
.pipeline { width: calc(100% - 190px); }
|
|
.release-result { width: 176px; right: 10px; }
|
|
.log-workspace { grid-template-columns: 1fr; }
|
|
.log-details { display: none; }
|
|
.metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
}
|
|
|
|
@media (max-width: 720px) {
|
|
body { display: block; padding: 0; }
|
|
.shell { height: 100dvh; min-height: 0; border: 0; border-radius: 0; }
|
|
.topbar { height: 58px; }
|
|
h1 { font-size: 17px; }
|
|
.eyebrow, .topbar-status { display: none; }
|
|
main { height: calc(100% - 58px); overflow: auto; grid-template-columns: 1fr; grid-template-rows: 104px 360px 330px 190px; grid-template-areas: "pipeline" "command" "execution" "software"; }
|
|
.execution-grid { display: block; }
|
|
.execution-grid .log-card { min-height: 330px; }
|
|
.pipeline { width: 100%; }
|
|
.pipeline-card { overflow-x: auto; }
|
|
.pipeline-card .pipeline { width: 680px; }
|
|
.release-result { display: none; }
|
|
.stage-name { font-size: 11px; }
|
|
.stage-state { display: none; }
|
|
.command-card { gap: 5px; }
|
|
.command-footer p { display: none; }
|
|
.command-footer { justify-content: flex-end; }
|
|
.prompt-templates button { flex: 1; }
|
|
th:nth-child(2), td:nth-child(2), th:nth-child(3), td:nth-child(3) { display: none; }
|
|
th:nth-child(1), th:nth-child(4), th:nth-child(5), th:nth-child(6) { width: auto; }
|
|
}
|
|
|
|
body.embedded {
|
|
display: block;
|
|
padding: 0;
|
|
background: transparent;
|
|
}
|
|
body.embedded .shell {
|
|
width: 100%;
|
|
height: 100dvh;
|
|
min-height: 0;
|
|
border: 0;
|
|
border-radius: 0;
|
|
box-shadow: none;
|
|
background: #f7f9fc;
|
|
}
|
|
body.embedded .topbar { display: none; }
|
|
body.embedded main {
|
|
height: 100%;
|
|
padding: 8px;
|
|
grid-template-columns: 350px minmax(0, 1fr);
|
|
grid-template-rows: 82px minmax(0, 1fr) 204px;
|
|
gap: 8px;
|
|
}
|
|
body.embedded .card { padding: 8px 10px; border-radius: 12px; }
|
|
body.embedded .card-heading { min-height: 27px; }
|
|
body.embedded .command-card { gap: 5px; }
|
|
body.embedded textarea { min-height: 48px; padding: 7px 9px; }
|
|
body.embedded .prompt-templates button { padding: 4px 7px; }
|
|
body.embedded .capability-brief { min-height: 44px; padding: 5px 8px; }
|
|
body.embedded .pipeline { height: 48px; margin: 4px 0 0; }
|
|
body.embedded .stage-node { width: 24px; height: 24px; }
|
|
body.embedded .pipeline-stage::after { top: 12px; }
|
|
body.embedded .stage-node svg { width: 12px; }
|
|
body.embedded .stage-name { font-size: 12px; }
|
|
body.embedded .stage-state { font-size: 11px; }
|
|
body.embedded .release-result { top: 18px; min-height: 44px; padding: 5px 8px; }
|
|
body.embedded .result-icon { width: 28px; height: 28px; }
|
|
body.embedded .log-card { gap: 5px; }
|
|
body.embedded .metrics div { padding: 3px 6px; }
|
|
body.embedded .software-card { grid-template-rows: 27px minmax(0, 1fr); gap: 3px; }
|
|
body.embedded th { padding: 4px 6px; }
|
|
body.embedded table { font-size: 12.5px; }
|
|
body.embedded td { padding: 3px 6px; }
|
|
body.embedded .software-name strong,
|
|
body.embedded .file-cell strong { line-height: 1.2; }
|
|
body.embedded .software-name span,
|
|
body.embedded .file-cell span { line-height: 1.15; }
|
|
|
|
@media (max-width: 720px) {
|
|
body.embedded main {
|
|
height: 100%;
|
|
overflow: auto;
|
|
grid-template-columns: 1fr;
|
|
grid-template-rows: 96px 350px 320px 210px;
|
|
grid-template-areas: "pipeline" "command" "execution" "software";
|
|
}
|
|
body.embedded .pipeline-card { overflow-x: auto; }
|
|
body.embedded .pipeline-card .pipeline { width: 680px; }
|
|
}
|
|
|
|
/* The workbench is rendered in an iframe, so it owns a complete theme token
|
|
set instead of relying on custom properties from the parent document. */
|
|
:root[data-glass-theme="dark"] {
|
|
color-scheme: dark;
|
|
--page: #090e1c;
|
|
--surface: #171e31;
|
|
--surface-soft: #11182a;
|
|
--line: #303a55;
|
|
--line-strong: #44516d;
|
|
--text: #edf2ff;
|
|
--muted: #9ba9c0;
|
|
--primary: #7aa3ff;
|
|
--primary-soft: #1b2b53;
|
|
--success: #55d4a1;
|
|
--success-soft: #12372d;
|
|
--warning: #f2bd68;
|
|
--danger: #ff8993;
|
|
--shadow: 0 26px 70px rgba(0, 0, 0, .42), 0 4px 18px rgba(0, 0, 0, .24);
|
|
}
|
|
|
|
:root[data-glass-theme="dark"] body:not(.embedded) {
|
|
background:
|
|
radial-gradient(circle at 15% 8%, color-mix(in srgb, var(--primary) 18%, transparent), transparent 31%),
|
|
linear-gradient(145deg, #11182b 0%, var(--page) 100%);
|
|
}
|
|
|
|
:root[data-glass-theme="dark"] body.embedded { background: transparent; }
|
|
:root[data-glass-theme="dark"] .shell,
|
|
:root[data-glass-theme="dark"] body.embedded .shell {
|
|
background: color-mix(in srgb, var(--surface-soft) 86%, var(--page));
|
|
border-color: color-mix(in srgb, var(--line-strong) 78%, transparent);
|
|
}
|
|
:root[data-glass-theme="dark"] .topbar {
|
|
background: color-mix(in srgb, var(--surface) 94%, transparent);
|
|
}
|
|
:root[data-glass-theme="dark"] :is(.back-link, .icon-button, .button-secondary) {
|
|
color: var(--muted);
|
|
background: var(--surface);
|
|
border-color: var(--line-strong);
|
|
}
|
|
:root[data-glass-theme="dark"] :is(.back-link, .icon-button):hover {
|
|
color: var(--primary);
|
|
border-color: color-mix(in srgb, var(--primary) 50%, var(--line));
|
|
background: var(--primary-soft);
|
|
}
|
|
:root[data-glass-theme="dark"] :is(.eyebrow, .section-kicker) { color: var(--muted); }
|
|
:root[data-glass-theme="dark"] :is(.environment-chip, .server-state) {
|
|
color: var(--muted);
|
|
background: var(--surface-soft);
|
|
}
|
|
:root[data-glass-theme="dark"] .server-state span { background: color-mix(in srgb, var(--muted) 72%, transparent); }
|
|
:root[data-glass-theme="dark"] .server-state.online,
|
|
:root[data-glass-theme="dark"] .status-badge[data-status="baseline"] {
|
|
border-color: color-mix(in srgb, var(--success) 44%, var(--line));
|
|
background: var(--success-soft);
|
|
}
|
|
:root[data-glass-theme="dark"] .card {
|
|
box-shadow: 0 2px 10px rgba(0, 0, 0, .16);
|
|
}
|
|
:root[data-glass-theme="dark"] .command-card > label { color: var(--muted); }
|
|
:root[data-glass-theme="dark"] textarea:focus { background: var(--surface); }
|
|
:root[data-glass-theme="dark"] :is(select, option) { color: var(--text); background: var(--surface); }
|
|
:root[data-glass-theme="dark"] .prompt-templates button,
|
|
:root[data-glass-theme="dark"] .cap-tags span,
|
|
:root[data-glass-theme="dark"] .table-actions :is(button, a) {
|
|
color: var(--primary);
|
|
background: var(--primary-soft);
|
|
border-color: color-mix(in srgb, var(--primary) 34%, var(--line));
|
|
}
|
|
:root[data-glass-theme="dark"] .capability-brief {
|
|
border-color: color-mix(in srgb, var(--primary) 25%, var(--line));
|
|
background: color-mix(in srgb, var(--primary-soft) 44%, var(--surface-soft));
|
|
}
|
|
:root[data-glass-theme="dark"] .capability-brief strong { color: var(--text); }
|
|
:root[data-glass-theme="dark"] .capability-brief > svg { color: var(--primary); }
|
|
:root[data-glass-theme="dark"] .pipeline-stage::after { background: var(--line); }
|
|
:root[data-glass-theme="dark"] .stage-node {
|
|
color: var(--muted);
|
|
border-color: var(--line-strong);
|
|
background: var(--surface);
|
|
}
|
|
:root[data-glass-theme="dark"] .pipeline-stage[data-status="success"] .stage-node {
|
|
border-color: color-mix(in srgb, var(--success) 62%, var(--line));
|
|
}
|
|
:root[data-glass-theme="dark"] .pipeline-stage[data-status="failed"] .stage-node,
|
|
:root[data-glass-theme="dark"] .pipeline-stage[data-status="blocked"] .stage-node,
|
|
:root[data-glass-theme="dark"] .release-result[data-state="failed"],
|
|
:root[data-glass-theme="dark"] .status-badge[data-status="failed"],
|
|
:root[data-glass-theme="dark"] .status-badge[data-status="blocked"] {
|
|
color: var(--danger);
|
|
border-color: color-mix(in srgb, var(--danger) 44%, var(--line));
|
|
background: color-mix(in srgb, var(--danger) 12%, var(--surface));
|
|
}
|
|
:root[data-glass-theme="dark"] .pipeline-stage[data-status="canceled"] .stage-node {
|
|
color: var(--muted);
|
|
background: var(--surface-soft);
|
|
}
|
|
:root[data-glass-theme="dark"] .pipeline-stage[data-status="pending_confirmation"] .stage-node,
|
|
:root[data-glass-theme="dark"] .status-badge[data-status="ready"],
|
|
:root[data-glass-theme="dark"] .status-badge[data-status="pending_confirmation"] {
|
|
color: var(--warning);
|
|
border-color: color-mix(in srgb, var(--warning) 44%, var(--line));
|
|
background: color-mix(in srgb, var(--warning) 12%, var(--surface));
|
|
}
|
|
:root[data-glass-theme="dark"] .pipeline-stage[data-status="success"]::after {
|
|
background: color-mix(in srgb, var(--success) 64%, var(--line));
|
|
}
|
|
:root[data-glass-theme="dark"] .release-result[data-state="success"],
|
|
:root[data-glass-theme="dark"] .status-badge[data-status="success"],
|
|
:root[data-glass-theme="dark"] .status-badge[data-status="published"] {
|
|
border-color: color-mix(in srgb, var(--success) 44%, var(--line));
|
|
background: var(--success-soft);
|
|
}
|
|
:root[data-glass-theme="dark"] .result-icon {
|
|
color: var(--muted);
|
|
background: color-mix(in srgb, var(--surface-soft) 78%, var(--line));
|
|
}
|
|
:root[data-glass-theme="dark"] .release-result[data-state="success"] .result-icon {
|
|
color: var(--success);
|
|
background: color-mix(in srgb, var(--success) 18%, var(--surface));
|
|
}
|
|
:root[data-glass-theme="dark"] .metrics div { border-color: var(--line); }
|
|
:root[data-glass-theme="dark"] :is(.log-stream, .log-details) { background: var(--surface-soft); }
|
|
:root[data-glass-theme="dark"] .empty-state svg { color: var(--muted); }
|
|
:root[data-glass-theme="dark"] .empty-state strong { color: var(--text); }
|
|
:root[data-glass-theme="dark"] .log-entry,
|
|
:root[data-glass-theme="dark"] :is(.change-item, .test-item) { border-color: var(--line); }
|
|
:root[data-glass-theme="dark"] .log-time { color: var(--muted); }
|
|
:root[data-glass-theme="dark"] .log-dot { background: var(--muted); }
|
|
:root[data-glass-theme="dark"] .log-copy p { color: var(--muted); }
|
|
:root[data-glass-theme="dark"] .inspector-tabs { background: var(--surface); }
|
|
:root[data-glass-theme="dark"] .inspector-tabs button { color: var(--muted); }
|
|
:root[data-glass-theme="dark"] .inspector-tabs button.active {
|
|
color: var(--primary);
|
|
background: var(--surface-soft);
|
|
}
|
|
:root[data-glass-theme="dark"] :is(.build-output, .code-block) { color: var(--text); }
|
|
:root[data-glass-theme="dark"] .server-target strong { color: var(--text); }
|
|
:root[data-glass-theme="dark"] th { color: var(--muted); background: var(--surface); }
|
|
:root[data-glass-theme="dark"] td { color: var(--muted); border-color: var(--line); }
|
|
:root[data-glass-theme="dark"] :is(.software-name strong, .file-cell strong) { color: var(--text); }
|
|
:root[data-glass-theme="dark"] .table-actions .delete-action {
|
|
color: var(--danger);
|
|
background: color-mix(in srgb, var(--danger) 12%, var(--surface));
|
|
}
|
|
:root[data-glass-theme="dark"] .table-actions .notify-action {
|
|
color: #fff;
|
|
background: color-mix(in srgb, var(--primary) 82%, #07101e);
|
|
}
|
|
:root[data-glass-theme="dark"] .modal-backdrop { background: rgba(2, 5, 14, .68); }
|
|
:root[data-glass-theme="dark"] .modal { background: var(--surface); }
|
|
:root[data-glass-theme="dark"] .diff-panel p { color: var(--muted); }
|
|
:root[data-glass-theme="dark"] .diff-panel.added {
|
|
border-color: color-mix(in srgb, var(--success) 42%, var(--line));
|
|
}
|