da5c6b2839
Build and Push Docker Images / detect-changes (push) Successful in 9s
Build and Push Docker Images / build-transit-api (push) Has been skipped
Build and Push Docker Images / build-auth-api (push) Has been skipped
Build and Push Docker Images / build-employee-api (push) Has been skipped
Build and Push Docker Images / build-error-log-api (push) Has been skipped
Build and Push Docker Images / build-admin-ui (push) Has been skipped
Build and Push Docker Images / build-monitoring-ui (push) Successful in 1m11s
Build and Push Docker Images / deploy-test-node (push) Has been skipped
783 lines
13 KiB
CSS
783 lines
13 KiB
CSS
@import url("https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Manrope:wght@400;500;600;700;800&display=swap");
|
|
:root {
|
|
font-family: Manrope, sans-serif;
|
|
color: #e7eeee;
|
|
background: #101517;
|
|
font-synthesis: none;
|
|
--bg: #101517;
|
|
--panel: #172022;
|
|
--line: #2b393a;
|
|
--muted: #91a2a1;
|
|
--mint: #8ae8c2;
|
|
--amber: #f2bd70;
|
|
--blue: #7eb7f5;
|
|
--coral: #f58d7d;
|
|
--violet: #c1a5fa;
|
|
}
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
body {
|
|
margin: 0;
|
|
min-width: 320px;
|
|
background:
|
|
radial-gradient(circle at 82% -10%, #24403b 0, transparent 32%),
|
|
linear-gradient(135deg, #101517 0%, #111b1d 54%, #182020 100%);
|
|
min-height: 100vh;
|
|
}
|
|
.app-shell {
|
|
max-width: 1440px;
|
|
margin: auto;
|
|
padding: 0 42px 70px;
|
|
}
|
|
.topbar {
|
|
height: 82px;
|
|
border-bottom: 1px solid var(--line);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
.brand {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
.brand-mark {
|
|
display: grid;
|
|
place-items: center;
|
|
width: 34px;
|
|
height: 34px;
|
|
border: 1px solid var(--mint);
|
|
color: var(--mint);
|
|
font-weight: 800;
|
|
font-size: 20px;
|
|
transform: rotate(45deg);
|
|
}
|
|
.brand-mark::first-letter {
|
|
transform: rotate(-45deg);
|
|
}
|
|
.brand strong,
|
|
.brand span {
|
|
display: block;
|
|
}
|
|
.brand strong {
|
|
font:
|
|
600 12px "DM Mono",
|
|
monospace;
|
|
letter-spacing: 0.12em;
|
|
}
|
|
.brand div span {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
margin-top: 4px;
|
|
}
|
|
.top-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 14px;
|
|
color: var(--muted);
|
|
font:
|
|
500 12px "DM Mono",
|
|
monospace;
|
|
}
|
|
.live-dot {
|
|
width: 7px;
|
|
height: 7px;
|
|
border-radius: 50%;
|
|
background: var(--mint);
|
|
box-shadow: 0 0 14px var(--mint);
|
|
}
|
|
select,
|
|
input,
|
|
textarea {
|
|
font: inherit;
|
|
color: inherit;
|
|
background: #111a1c;
|
|
border: 1px solid var(--line);
|
|
border-radius: 4px;
|
|
padding: 10px 12px;
|
|
outline: none;
|
|
}
|
|
select:focus,
|
|
input:focus,
|
|
textarea:focus {
|
|
border-color: var(--mint);
|
|
}
|
|
.top-actions select {
|
|
padding: 7px 9px;
|
|
font-size: 11px;
|
|
}
|
|
.ghost-button {
|
|
border: 1px solid var(--line);
|
|
background: transparent;
|
|
color: #d3dddd;
|
|
padding: 9px 12px;
|
|
border-radius: 4px;
|
|
cursor: pointer;
|
|
}
|
|
.ghost-button:hover {
|
|
border-color: var(--mint);
|
|
color: var(--mint);
|
|
}
|
|
.hero-row {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: end;
|
|
padding: 68px 0 38px;
|
|
}
|
|
.eyebrow {
|
|
font:
|
|
500 10px "DM Mono",
|
|
monospace;
|
|
color: var(--mint);
|
|
letter-spacing: 0.16em;
|
|
margin: 0 0 13px;
|
|
}
|
|
.hero-row h1 {
|
|
font-size: clamp(38px, 6vw, 76px);
|
|
line-height: 0.98;
|
|
letter-spacing: -0.04em;
|
|
margin: 0;
|
|
max-width: 680px;
|
|
}
|
|
.hero-copy {
|
|
color: var(--muted);
|
|
font-size: 16px;
|
|
margin: 20px 0 0;
|
|
}
|
|
.pulse-stat {
|
|
border-left: 1px solid var(--line);
|
|
padding-left: 25px;
|
|
min-width: 180px;
|
|
}
|
|
.pulse-stat span,
|
|
.pulse-stat em {
|
|
display: block;
|
|
color: var(--muted);
|
|
font:
|
|
11px "DM Mono",
|
|
monospace;
|
|
}
|
|
.pulse-stat strong {
|
|
display: block;
|
|
font-size: 52px;
|
|
line-height: 1.1;
|
|
margin: 7px 0;
|
|
color: var(--mint);
|
|
}
|
|
.pulse-stat small {
|
|
font-size: 20px;
|
|
color: var(--muted);
|
|
font-weight: 500;
|
|
}
|
|
.pulse-stat em {
|
|
font-style: normal;
|
|
}
|
|
.tabs {
|
|
display: flex;
|
|
gap: 24px;
|
|
border-bottom: 1px solid var(--line);
|
|
margin-bottom: 28px;
|
|
overflow: auto;
|
|
}
|
|
.tabs button {
|
|
white-space: nowrap;
|
|
background: none;
|
|
border: 0;
|
|
border-bottom: 2px solid transparent;
|
|
color: var(--muted);
|
|
padding: 13px 0;
|
|
cursor: pointer;
|
|
font-weight: 700;
|
|
font-size: 12px;
|
|
}
|
|
.tabs button.active,
|
|
.tabs button:hover {
|
|
color: #fff;
|
|
border-color: var(--mint);
|
|
}
|
|
.tabs b {
|
|
color: var(--coral);
|
|
margin-left: 5px;
|
|
}
|
|
.service-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(5, 1fr);
|
|
gap: 12px;
|
|
}
|
|
.service-card,
|
|
.panel {
|
|
background: rgba(23, 32, 34, 0.88);
|
|
border: 1px solid var(--line);
|
|
border-radius: 6px;
|
|
}
|
|
.service-card {
|
|
padding: 19px;
|
|
min-height: 250px;
|
|
border-top: 2px solid var(--card-color);
|
|
}
|
|
.service-card.amber {
|
|
--card-color: var(--amber);
|
|
}
|
|
.service-card.teal {
|
|
--card-color: var(--mint);
|
|
}
|
|
.service-card.blue {
|
|
--card-color: var(--blue);
|
|
}
|
|
.service-card.coral {
|
|
--card-color: var(--coral);
|
|
}
|
|
.service-card.violet {
|
|
--card-color: var(--violet);
|
|
}
|
|
.card-top {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
}
|
|
.service-icon {
|
|
display: inline-grid;
|
|
place-items: center;
|
|
width: 28px;
|
|
height: 28px;
|
|
border-radius: 3px;
|
|
font:
|
|
500 10px "DM Mono",
|
|
monospace;
|
|
background: #293332;
|
|
color: var(--card-color);
|
|
}
|
|
.card-top h3 {
|
|
font-size: 14px;
|
|
margin: 13px 0 3px;
|
|
}
|
|
.card-top p {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
margin: 0;
|
|
}
|
|
.status-pill {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
height: 22px;
|
|
border-radius: 20px;
|
|
padding: 0 8px;
|
|
font:
|
|
500 10px "DM Mono",
|
|
monospace;
|
|
text-transform: uppercase;
|
|
}
|
|
.status-pill i {
|
|
width: 6px;
|
|
height: 6px;
|
|
border-radius: 50%;
|
|
background: currentColor;
|
|
}
|
|
.status-pill.healthy {
|
|
color: var(--mint);
|
|
background: #17372f;
|
|
}
|
|
.status-pill.degraded {
|
|
color: var(--coral);
|
|
background: #3b2523;
|
|
}
|
|
.status-pill.offline {
|
|
color: #f17c76;
|
|
background: #3b2523;
|
|
}
|
|
.status-pill.checking {
|
|
color: var(--amber);
|
|
background: #3c3020;
|
|
}
|
|
.metric-line {
|
|
border-top: 1px solid var(--line);
|
|
margin-top: 25px;
|
|
padding-top: 13px;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
color: var(--muted);
|
|
font:
|
|
10px "DM Mono",
|
|
monospace;
|
|
}
|
|
.metric-line strong {
|
|
color: #e8eeee;
|
|
font-weight: 500;
|
|
}
|
|
.sparkline {
|
|
height: 45px;
|
|
display: flex;
|
|
align-items: end;
|
|
gap: 3px;
|
|
margin-top: 12px;
|
|
}
|
|
.sparkline span {
|
|
display: block;
|
|
flex: 1;
|
|
min-width: 3px;
|
|
background: var(--card-color);
|
|
opacity: 0.75;
|
|
border-radius: 1px;
|
|
}
|
|
.sparkline em {
|
|
font:
|
|
10px "DM Mono",
|
|
monospace;
|
|
color: #607170;
|
|
}
|
|
.service-card details {
|
|
margin-top: 12px;
|
|
color: var(--muted);
|
|
font-size: 10px;
|
|
}
|
|
.service-card summary {
|
|
cursor: pointer;
|
|
}
|
|
.service-card pre {
|
|
max-height: 100px;
|
|
overflow: auto;
|
|
color: #c6d5d3;
|
|
font:
|
|
10px "DM Mono",
|
|
monospace;
|
|
}
|
|
.lower-grid {
|
|
display: grid;
|
|
grid-template-columns: 1.5fr 1fr;
|
|
gap: 12px;
|
|
margin-top: 12px;
|
|
}
|
|
.panel {
|
|
padding: 25px;
|
|
}
|
|
.panel-heading {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: start;
|
|
gap: 20px;
|
|
margin-bottom: 21px;
|
|
}
|
|
.panel h2 {
|
|
font-size: 19px;
|
|
margin: 0;
|
|
letter-spacing: -0.02em;
|
|
}
|
|
.panel-count {
|
|
font:
|
|
10px "DM Mono",
|
|
monospace;
|
|
color: var(--muted);
|
|
border: 1px solid var(--line);
|
|
padding: 6px 8px;
|
|
border-radius: 3px;
|
|
white-space: nowrap;
|
|
}
|
|
.data-list {
|
|
border-top: 1px solid var(--line);
|
|
}
|
|
.data-row {
|
|
display: grid;
|
|
grid-template-columns: 10px 150px 1fr;
|
|
gap: 11px;
|
|
align-items: center;
|
|
padding: 14px 0;
|
|
border-bottom: 1px solid var(--line);
|
|
font-size: 12px;
|
|
}
|
|
.data-row > span:last-child {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
}
|
|
.service-dot {
|
|
width: 7px;
|
|
height: 7px;
|
|
border-radius: 50%;
|
|
display: inline-block;
|
|
}
|
|
.service-dot.amber {
|
|
background: var(--amber);
|
|
}
|
|
.service-dot.teal {
|
|
background: var(--mint);
|
|
}
|
|
.service-dot.blue {
|
|
background: var(--blue);
|
|
}
|
|
.service-dot.coral {
|
|
background: var(--coral);
|
|
}
|
|
.service-dot.violet {
|
|
background: var(--violet);
|
|
}
|
|
.suggestion-panel ul {
|
|
list-style: none;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
.suggestion-panel li {
|
|
padding: 13px 0;
|
|
border-top: 1px solid var(--line);
|
|
}
|
|
.suggestion-panel li strong,
|
|
.suggestion-panel li span {
|
|
display: block;
|
|
}
|
|
.suggestion-panel li strong {
|
|
font-size: 12px;
|
|
}
|
|
.suggestion-panel li span {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
line-height: 1.5;
|
|
margin-top: 5px;
|
|
}
|
|
.catalog-panel,
|
|
.incidents-panel,
|
|
.settings-panel {
|
|
min-height: 500px;
|
|
}
|
|
.catalog-block {
|
|
display: grid;
|
|
grid-template-columns: 270px 1fr;
|
|
gap: 20px;
|
|
padding: 20px 0;
|
|
border-top: 1px solid var(--line);
|
|
}
|
|
.catalog-block > div:first-child {
|
|
display: flex;
|
|
gap: 9px;
|
|
align-items: start;
|
|
}
|
|
.catalog-block p {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
margin: 7px 0 0 16px;
|
|
}
|
|
.route-chips {
|
|
display: flex;
|
|
gap: 8px;
|
|
flex-wrap: wrap;
|
|
}
|
|
.route-chips code {
|
|
font:
|
|
11px "DM Mono",
|
|
monospace;
|
|
color: #c8d8d5;
|
|
border: 1px solid var(--line);
|
|
background: #111a1c;
|
|
border-radius: 3px;
|
|
padding: 8px;
|
|
}
|
|
.table-head,
|
|
.table-row {
|
|
display: grid;
|
|
grid-template-columns: 170px 220px 1fr;
|
|
gap: 20px;
|
|
padding: 13px 0;
|
|
}
|
|
.table-head {
|
|
color: var(--muted);
|
|
font:
|
|
10px "DM Mono",
|
|
monospace;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
.table-row {
|
|
font-size: 12px;
|
|
border-bottom: 1px solid #243131;
|
|
}
|
|
.table-row time,
|
|
.table-row > span {
|
|
color: var(--muted);
|
|
font-size: 11px;
|
|
}
|
|
.table-row strong small {
|
|
display: block;
|
|
color: var(--muted);
|
|
font:
|
|
10px "DM Mono",
|
|
monospace;
|
|
font-weight: 400;
|
|
margin-top: 5px;
|
|
}
|
|
.empty,
|
|
.result-placeholder {
|
|
display: grid;
|
|
place-items: center;
|
|
text-align: center;
|
|
min-height: 250px;
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
gap: 8px;
|
|
}
|
|
.empty strong {
|
|
color: #e8eeee;
|
|
}
|
|
.lab-grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1.25fr;
|
|
gap: 12px;
|
|
}
|
|
.request-panel label,
|
|
.settings-panel label {
|
|
display: grid;
|
|
gap: 7px;
|
|
margin: 17px 0;
|
|
color: var(--muted);
|
|
font:
|
|
10px "DM Mono",
|
|
monospace;
|
|
text-transform: uppercase;
|
|
}
|
|
.request-panel select,
|
|
.request-panel textarea,
|
|
.settings-panel input {
|
|
width: 100%;
|
|
}
|
|
.request-panel textarea {
|
|
height: 130px;
|
|
resize: vertical;
|
|
}
|
|
.run-button {
|
|
width: 100%;
|
|
padding: 12px;
|
|
background: var(--mint);
|
|
color: #10201c;
|
|
border: 0;
|
|
border-radius: 4px;
|
|
font-weight: 800;
|
|
cursor: pointer;
|
|
}
|
|
.run-button:disabled {
|
|
opacity: 0.5;
|
|
cursor: wait;
|
|
}
|
|
.helper,
|
|
.settings-intro {
|
|
font-size: 11px;
|
|
line-height: 1.5;
|
|
color: var(--muted);
|
|
}
|
|
.response-code {
|
|
background: #0d1415;
|
|
border: 1px solid var(--line);
|
|
padding: 18px;
|
|
white-space: pre-wrap;
|
|
word-break: break-word;
|
|
min-height: 320px;
|
|
max-height: 520px;
|
|
overflow: auto;
|
|
color: #b8e9d6;
|
|
font:
|
|
11px "DM Mono",
|
|
monospace;
|
|
}
|
|
.connection-grid {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 0 18px;
|
|
}
|
|
.save-button {
|
|
max-width: 180px;
|
|
}
|
|
.incidents-panel .panel-heading {
|
|
align-items: center;
|
|
}
|
|
@media (max-width: 1100px) {
|
|
.service-grid {
|
|
grid-template-columns: repeat(3, 1fr);
|
|
}
|
|
.service-card:last-child {
|
|
grid-column: auto;
|
|
}
|
|
.hero-row {
|
|
align-items: start;
|
|
gap: 30px;
|
|
}
|
|
.lower-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.pulse-stat {
|
|
min-width: 150px;
|
|
}
|
|
}
|
|
.login-form {
|
|
border-top: 1px solid var(--line);
|
|
padding-top: 20px;
|
|
margin-top: 10px;
|
|
}
|
|
.login-form h3 {
|
|
font-size: 14px;
|
|
margin: 0 0 14px;
|
|
}
|
|
.login-form label {
|
|
display: grid;
|
|
gap: 7px;
|
|
margin: 12px 0;
|
|
color: var(--muted);
|
|
font: 10px "DM Mono", monospace;
|
|
text-transform: uppercase;
|
|
}
|
|
.login-form input {
|
|
width: 100%;
|
|
}
|
|
.login-error {
|
|
color: var(--coral);
|
|
font-size: 11px;
|
|
margin: 10px 0;
|
|
}
|
|
.user-info {
|
|
border-top: 1px solid var(--line);
|
|
padding-top: 20px;
|
|
margin-top: 10px;
|
|
}
|
|
.user-info h3 {
|
|
font-size: 14px;
|
|
margin: 0 0 12px;
|
|
}
|
|
.user-info p {
|
|
margin: 6px 0;
|
|
font-size: 12px;
|
|
}
|
|
.user-info button {
|
|
margin-top: 14px;
|
|
}
|
|
.docs-panel {
|
|
min-height: 500px;
|
|
}
|
|
.docs-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
|
|
gap: 16px;
|
|
}
|
|
.doc-card {
|
|
background: rgba(23, 32, 34, 0.88);
|
|
border: 1px solid var(--line);
|
|
border-radius: 6px;
|
|
padding: 20px;
|
|
border-top: 2px solid var(--card-color);
|
|
}
|
|
.doc-card.amber { --card-color: var(--amber); }
|
|
.doc-card.teal { --card-color: var(--mint); }
|
|
.doc-card.blue { --card-color: var(--blue); }
|
|
.doc-card.coral { --card-color: var(--coral); }
|
|
.doc-header {
|
|
display: flex;
|
|
gap: 12px;
|
|
align-items: start;
|
|
margin-bottom: 12px;
|
|
}
|
|
.doc-header .service-dot {
|
|
flex-shrink: 0;
|
|
margin-top: 2px;
|
|
}
|
|
.doc-header strong { display: block; font-size: 14px; }
|
|
.doc-header p { margin: 3px 0 0; color: var(--muted); font-size: 11px; }
|
|
.doc-description {
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
line-height: 1.5;
|
|
margin-bottom: 14px;
|
|
}
|
|
.doc-links {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
}
|
|
.doc-link {
|
|
color: var(--mint);
|
|
text-decoration: none;
|
|
font: 500 11px "DM Mono", monospace;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
}
|
|
.doc-link:hover { text-decoration: underline; }
|
|
.routes-detail summary {
|
|
color: var(--muted);
|
|
font: 500 10px "DM Mono", monospace;
|
|
cursor: pointer;
|
|
text-transform: uppercase;
|
|
}
|
|
.routes-detail ul {
|
|
margin: 8px 0 0;
|
|
padding-left: 18px;
|
|
font-size: 11px;
|
|
color: #c6d5d3;
|
|
}
|
|
.routes-detail li { margin: 4px 0; }
|
|
.routes-detail code {
|
|
font: 11px "DM Mono", monospace;
|
|
background: #111a1c;
|
|
padding: 2px 4px;
|
|
border-radius: 2px;
|
|
}
|
|
|
|
@media (max-width: 700px) {
|
|
.app-shell {
|
|
padding: 0 18px 40px;
|
|
}
|
|
.topbar {
|
|
height: auto;
|
|
padding: 18px 0;
|
|
align-items: start;
|
|
gap: 14px;
|
|
flex-direction: column;
|
|
}
|
|
.top-actions {
|
|
flex-wrap: wrap;
|
|
}
|
|
.hero-row {
|
|
padding: 43px 0 28px;
|
|
display: block;
|
|
}
|
|
.pulse-stat {
|
|
border-left: 0;
|
|
border-top: 1px solid var(--line);
|
|
padding: 15px 0 0;
|
|
margin-top: 28px;
|
|
}
|
|
.pulse-stat strong {
|
|
font-size: 42px;
|
|
}
|
|
.service-grid {
|
|
grid-template-columns: 1fr 1fr;
|
|
}
|
|
.service-card {
|
|
min-height: 230px;
|
|
padding: 14px;
|
|
}
|
|
.card-top {
|
|
display: block;
|
|
}
|
|
.status-pill {
|
|
margin-top: 12px;
|
|
}
|
|
.catalog-block,
|
|
.lab-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.table-head,
|
|
.table-row {
|
|
grid-template-columns: 1fr;
|
|
gap: 5px;
|
|
}
|
|
.table-head {
|
|
display: none;
|
|
}
|
|
.table-row {
|
|
padding: 15px 0;
|
|
}
|
|
.connection-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
.tabs {
|
|
gap: 18px;
|
|
}
|
|
.panel {
|
|
padding: 18px;
|
|
}
|
|
}
|