tostido's picture
Add direct replica input control
e80d235 verified
Raw
History Blame Contribute Delete
12.1 kB
:root {
color-scheme: dark;
--bg: #08090a;
--panel: rgba(18, 19, 19, 0.86);
--panel-strong: rgba(26, 27, 26, 0.94);
--line: rgba(229, 197, 112, 0.26);
--line-cold: rgba(170, 184, 191, 0.22);
--text: #f4f1e8;
--muted: #a8aba6;
--gold: #dfbd62;
--gold-hot: #f4d98b;
--steel: #9fa9ac;
--black: #090a0b;
font-family:
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
sans-serif;
}
* {
box-sizing: border-box;
}
html,
body {
min-height: 100%;
margin: 0;
}
body {
min-width: 320px;
background:
linear-gradient(90deg, rgba(255, 255, 255, 0.025) 1px, transparent 1px) 0 0 / 76px 76px,
repeating-linear-gradient(
102deg,
#070808 0,
#0d0e0e 2px,
#090a0a 6px,
#111211 8px
);
color: var(--text);
overflow-x: hidden;
}
#metal {
position: fixed;
inset: 0;
width: 100vw;
height: 100vh;
pointer-events: none;
opacity: 0.62;
}
.shell {
position: relative;
z-index: 1;
width: min(1120px, calc(100% - 28px));
margin: 0 auto;
padding: clamp(28px, 7vh, 76px) 0 40px;
}
.search-stage {
min-height: min(540px, calc(100vh - 40px));
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 18px;
}
.mark {
display: inline-flex;
align-items: center;
gap: 10px;
min-height: 32px;
color: var(--text);
font-size: clamp(25px, 5vw, 54px);
font-weight: 680;
letter-spacing: 0;
text-shadow: 0 1px 0 #000, 0 0 24px rgba(244, 217, 139, 0.18);
}
.mark-dot {
width: 14px;
height: 14px;
display: inline-block;
border: 1px solid rgba(255, 231, 163, 0.8);
background:
linear-gradient(135deg, rgba(255, 237, 174, 0.96), rgba(165, 121, 34, 0.96));
box-shadow: 0 0 20px rgba(223, 189, 98, 0.42);
}
body[data-live="true"] .mark-dot {
animation: livePulse 1.4s ease-in-out infinite;
}
body[data-busy="true"] .mark {
text-shadow:
0 1px 0 #000,
0 0 18px rgba(244, 217, 139, 0.22),
0 0 42px rgba(159, 169, 172, 0.12);
}
.search-box {
width: min(760px, 100%);
min-height: 58px;
display: grid;
grid-template-columns: 1fr auto;
align-items: center;
padding: 6px;
border: 1px solid var(--line);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.08), transparent 28%),
rgba(12, 13, 13, 0.9);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.08),
0 22px 80px rgba(0, 0, 0, 0.46),
0 0 0 1px rgba(0, 0, 0, 0.7);
}
.search-box:focus-within {
border-color: rgba(244, 217, 139, 0.7);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.1),
0 24px 90px rgba(0, 0, 0, 0.54),
0 0 0 3px rgba(223, 189, 98, 0.14);
}
.search-box input {
min-width: 0;
width: 100%;
border: 0;
outline: 0;
background: transparent;
color: var(--text);
padding: 0 18px;
font: inherit;
font-size: 17px;
}
.search-box input::placeholder {
color: rgba(231, 226, 212, 0.46);
}
button {
position: relative;
min-height: 40px;
border: 1px solid rgba(255, 232, 165, 0.22);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.1), transparent),
#151615;
color: var(--text);
font: inherit;
font-size: 13px;
letter-spacing: 0;
cursor: pointer;
}
button:hover {
border-color: rgba(244, 217, 139, 0.7);
color: #fff8dc;
}
button:active {
transform: translateY(1px);
}
button[data-tip]::after {
content: attr(data-tip);
position: absolute;
left: 50%;
bottom: calc(100% + 8px);
z-index: 8;
width: min(260px, 80vw);
padding: 8px 10px;
border: 1px solid rgba(223, 189, 98, 0.34);
background: rgba(8, 9, 9, 0.96);
color: #e9e2cf;
font-size: 12px;
line-height: 1.35;
text-align: left;
white-space: normal;
box-shadow: 0 12px 38px rgba(0, 0, 0, 0.42);
opacity: 0;
transform: translate(-50%, 4px);
pointer-events: none;
transition: opacity 140ms ease, transform 140ms ease;
}
button[data-tip]:hover::after,
button[data-tip]:focus-visible::after {
opacity: 1;
transform: translate(-50%, 0);
}
[data-tip]:not(button)::after {
content: attr(data-tip);
position: absolute;
left: 50%;
bottom: calc(100% + 8px);
z-index: 8;
width: min(280px, 82vw);
padding: 8px 10px;
border: 1px solid rgba(223, 189, 98, 0.34);
background: rgba(8, 9, 9, 0.97);
color: #e9e2cf;
font-size: 12px;
line-height: 1.35;
text-align: left;
box-shadow: 0 12px 38px rgba(0, 0, 0, 0.42);
opacity: 0;
transform: translate(-50%, 4px);
pointer-events: none;
transition: opacity 140ms ease, transform 140ms ease;
}
[data-tip]:not(button):hover::after,
[data-tip]:not(button):focus-visible::after {
opacity: 1;
transform: translate(-50%, 0);
}
.search-box button {
min-width: 72px;
padding: 0 18px;
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.18), transparent 44%),
linear-gradient(135deg, #725719, #d7b75e 54%, #6b4c11);
color: #100d06;
font-weight: 720;
}
.quick-row,
.status-strip {
width: min(760px, 100%);
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
flex-wrap: wrap;
}
.quick-row button {
min-height: 34px;
padding: 0 14px;
color: var(--muted);
background: rgba(14, 15, 15, 0.74);
border-color: rgba(170, 184, 191, 0.18);
}
.quick-row button:hover {
color: var(--text);
}
.status-strip {
justify-content: center;
color: var(--muted);
font-size: 12px;
}
.status-strip span {
min-height: 28px;
display: inline-flex;
align-items: center;
padding: 0 10px;
border: 1px solid rgba(170, 184, 191, 0.14);
background: rgba(6, 7, 7, 0.46);
}
.dashboard {
width: min(900px, 100%);
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 10px;
margin-top: 4px;
}
.gauge {
position: relative;
min-height: 142px;
display: grid;
grid-template-rows: auto 1fr auto;
gap: 10px;
padding: 12px;
border: 1px solid rgba(170, 184, 191, 0.18);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.075), transparent 42%),
rgba(8, 9, 9, 0.72);
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.07),
0 16px 46px rgba(0, 0, 0, 0.24);
}
.gauge-top {
min-height: 34px;
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 8px;
}
.gauge-top span {
color: var(--muted);
font-size: 11px;
text-transform: uppercase;
}
.gauge-top strong {
color: var(--gold-hot);
font-size: 14px;
font-weight: 760;
text-align: right;
overflow-wrap: anywhere;
}
.gauge-bar {
align-self: center;
height: 12px;
overflow: hidden;
border: 1px solid rgba(170, 184, 191, 0.18);
background: rgba(2, 3, 3, 0.76);
}
.gauge-bar span {
display: block;
width: 0%;
height: 100%;
background:
linear-gradient(90deg, rgba(159, 169, 172, 0.92), rgba(244, 217, 139, 0.94));
transition: width 220ms ease;
}
.gauge-ring {
--budget: 0%;
place-self: center;
width: 72px;
height: 72px;
display: grid;
place-items: center;
border-radius: 50%;
background:
radial-gradient(circle at center, #101211 0 48%, transparent 49%),
conic-gradient(var(--gold-hot) var(--budget), rgba(170, 184, 191, 0.18) 0);
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.06);
}
.gauge-ring span {
color: var(--text);
font-size: 13px;
font-weight: 720;
}
.gauge-meta {
min-height: 34px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 6px;
align-items: end;
}
.gauge-meta.tall {
grid-template-columns: 1fr;
}
.gauge-meta span {
min-width: 0;
color: var(--muted);
font-size: 11px;
line-height: 1.32;
overflow-wrap: anywhere;
}
.dashboard[data-severity="warn"] .gauge-state {
border-color: rgba(223, 189, 98, 0.52);
}
.dashboard[data-active="true"] .gauge {
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.08),
0 18px 52px rgba(0, 0, 0, 0.26),
0 0 0 1px rgba(223, 189, 98, 0.05);
}
.dashboard[data-active="true"] .gauge-state {
border-color: rgba(244, 217, 139, 0.42);
}
.dashboard[data-busy="true"] .gauge-bar span {
background:
linear-gradient(
90deg,
rgba(159, 169, 172, 0.92),
rgba(244, 217, 139, 0.96),
rgba(159, 169, 172, 0.92)
);
background-size: 220% 100%;
animation: flowBar 1.1s linear infinite;
}
.dashboard[data-severity="danger"] .gauge-state {
border-color: rgba(255, 107, 107, 0.62);
}
.dashboard[data-severity="danger"] .gauge-state .gauge-top strong {
color: #ff9c8c;
}
.result-grid {
display: grid;
grid-template-columns: minmax(0, 1fr) 280px;
gap: 14px;
align-items: start;
}
.panel {
border: 1px solid var(--line-cold);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.055), transparent 120px),
var(--panel);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06);
}
.panel-head {
min-height: 48px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 12px 14px;
border-bottom: 1px solid rgba(170, 184, 191, 0.14);
}
.panel-head h1,
.panel-head h2 {
margin: 0;
font-size: 14px;
font-weight: 720;
}
.panel-head span {
color: var(--gold);
font-size: 12px;
white-space: nowrap;
}
pre {
min-height: 320px;
max-height: 560px;
margin: 0;
overflow: auto;
padding: 16px;
color: #dce2dc;
font-family: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;
font-size: 12px;
line-height: 1.52;
white-space: pre-wrap;
word-break: break-word;
}
.command-list {
display: grid;
gap: 8px;
padding: 12px;
}
.route-card {
margin: 12px 12px 0;
padding: 12px;
border: 1px solid rgba(223, 189, 98, 0.2);
background: rgba(8, 9, 9, 0.68);
}
.route-card h3 {
margin: 0 0 7px;
color: var(--gold-hot);
font-size: 13px;
font-weight: 720;
}
.route-card p {
margin: 0;
color: var(--muted);
font-size: 12px;
line-height: 1.45;
}
.scale-control {
display: grid;
grid-template-columns: 1fr 92px 76px;
align-items: end;
gap: 8px;
margin: 12px 12px 0;
padding: 10px;
border: 1px solid rgba(170, 184, 191, 0.18);
background: rgba(8, 9, 9, 0.72);
}
.scale-control label {
color: var(--muted);
font-size: 12px;
text-transform: uppercase;
}
.scale-control input {
min-width: 0;
height: 38px;
border: 1px solid rgba(223, 189, 98, 0.26);
outline: 0;
background: rgba(14, 15, 15, 0.92);
color: var(--text);
padding: 0 10px;
font: inherit;
font-size: 15px;
}
.scale-control input:focus {
border-color: rgba(244, 217, 139, 0.7);
box-shadow: 0 0 0 3px rgba(223, 189, 98, 0.12);
}
.scale-control button {
min-height: 38px;
padding: 0 12px;
font-weight: 720;
}
.route-actions {
display: grid;
gap: 7px;
margin-top: 12px;
}
.route-actions a,
.route-actions button {
min-height: 34px;
display: flex;
align-items: center;
padding: 0 10px;
border: 1px solid rgba(170, 184, 191, 0.18);
background: rgba(14, 15, 15, 0.8);
color: var(--text);
font-size: 12px;
text-decoration: none;
}
.route-actions a:hover,
.route-actions button:hover {
border-color: rgba(244, 217, 139, 0.62);
}
.command-list button {
width: 100%;
text-align: left;
padding: 0 12px;
background: rgba(9, 10, 10, 0.72);
}
@keyframes livePulse {
0%,
100% {
opacity: 0.72;
box-shadow: 0 0 16px rgba(223, 189, 98, 0.32);
}
50% {
opacity: 1;
box-shadow: 0 0 28px rgba(244, 217, 139, 0.62);
}
}
@keyframes flowBar {
from {
background-position: 0% 0;
}
to {
background-position: 220% 0;
}
}
@media (max-width: 820px) {
.shell {
width: min(100% - 18px, 760px);
padding-top: 24px;
}
.search-stage {
min-height: auto;
padding: 34px 0 24px;
}
.search-box {
grid-template-columns: 1fr;
gap: 6px;
}
.search-box input {
min-height: 46px;
padding: 0 12px;
}
.search-box button {
width: 100%;
}
.result-grid {
grid-template-columns: 1fr;
}
.dashboard {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.command-panel {
order: -1;
}
.command-list {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.scale-control {
grid-template-columns: 1fr 84px 70px;
}
}
@media (max-width: 520px) {
.dashboard {
grid-template-columns: 1fr;
}
}