- Add a dispatcher web view and layout switching - Route group role updates and dispatcher hydration through the UI bridge - Refresh top bar and hide map/side panel outside operations mode
240 lines
4.5 KiB
CSS
240 lines
4.5 KiB
CSS
body {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
height: 60px;
|
|
display: grid;
|
|
grid-template-columns: auto minmax(0, 1fr) auto auto;
|
|
align-items: center;
|
|
column-gap: 16px;
|
|
padding: 0 16px;
|
|
background: transparent;
|
|
overflow: visible;
|
|
}
|
|
|
|
body::before {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 0 0 auto 0;
|
|
height: 60px;
|
|
background: linear-gradient(
|
|
90deg,
|
|
rgba(16, 22, 31, 0.96),
|
|
rgba(19, 26, 36, 0.94) 55%,
|
|
rgba(15, 20, 28, 0.96)
|
|
);
|
|
border-bottom: none;
|
|
box-shadow: none;
|
|
backdrop-filter: blur(18px);
|
|
-webkit-backdrop-filter: blur(18px);
|
|
z-index: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
body > * {
|
|
position: relative;
|
|
z-index: 1;
|
|
}
|
|
|
|
.logo {
|
|
color: var(--accent);
|
|
font-size: 15px;
|
|
font-weight: 650;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.08em;
|
|
text-shadow: 0 1px 12px rgba(0, 0, 0, 0.35);
|
|
}
|
|
|
|
.header-main {
|
|
min-width: 0;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
|
|
.title-block {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1px;
|
|
min-width: 0;
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
.title-kicker {
|
|
color: rgba(218, 227, 236, 0.56);
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.12em;
|
|
}
|
|
|
|
.title-main {
|
|
color: rgba(245, 248, 255, 0.92);
|
|
font-size: 15px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.operator-strip {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
flex: 1 1 auto;
|
|
}
|
|
|
|
.operator-strip.is-hidden,
|
|
.operator-controls.is-hidden {
|
|
display: none;
|
|
}
|
|
|
|
.operator-info {
|
|
display: flex;
|
|
flex-direction: column;
|
|
min-width: 88px;
|
|
gap: 0;
|
|
}
|
|
|
|
.operator-label {
|
|
color: rgba(218, 227, 236, 0.5);
|
|
font-size: 9px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.12em;
|
|
}
|
|
|
|
.operator-info strong {
|
|
color: rgba(245, 248, 255, 0.9);
|
|
font-size: 12px;
|
|
font-weight: 550;
|
|
}
|
|
|
|
.operator-controls {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.operator-select {
|
|
min-width: 92px;
|
|
max-width: 112px;
|
|
padding: 5px 8px;
|
|
border: 1px solid rgba(255, 255, 255, 0.14);
|
|
background: rgba(14, 20, 28, 0.96);
|
|
color: var(--text);
|
|
font-size: 11px;
|
|
}
|
|
|
|
.btn-operator {
|
|
min-width: 84px;
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.08em;
|
|
}
|
|
|
|
.mode-controls {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
justify-self: end;
|
|
}
|
|
|
|
.mode-controls.is-hidden {
|
|
display: none;
|
|
}
|
|
|
|
.controls {
|
|
display: flex;
|
|
gap: 8px;
|
|
align-items: center;
|
|
justify-self: end;
|
|
}
|
|
|
|
.mode-text {
|
|
color: rgba(233, 241, 248, 0.72);
|
|
font-size: 10px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.1em;
|
|
}
|
|
|
|
.mode-switch {
|
|
position: relative;
|
|
width: 54px;
|
|
height: 28px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.mode-switch input {
|
|
position: absolute;
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
.mode-slider {
|
|
position: relative;
|
|
width: 54px;
|
|
height: 28px;
|
|
border: 1px solid rgba(255, 255, 255, 0.14);
|
|
border-radius: 999px;
|
|
background: rgba(22, 29, 39, 0.92);
|
|
box-shadow: inset 0 1px 10px rgba(0, 0, 0, 0.22);
|
|
transition:
|
|
border-color 0.16s ease,
|
|
background 0.16s ease;
|
|
}
|
|
|
|
.mode-slider::after {
|
|
content: "";
|
|
position: absolute;
|
|
top: 3px;
|
|
left: 3px;
|
|
width: 20px;
|
|
height: 20px;
|
|
border-radius: 50%;
|
|
background: linear-gradient(
|
|
180deg,
|
|
rgba(237, 244, 251, 0.98),
|
|
rgba(189, 205, 221, 0.92)
|
|
);
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.26);
|
|
transition:
|
|
transform 0.16s ease,
|
|
background 0.16s ease;
|
|
}
|
|
|
|
.mode-switch input:checked + .mode-slider {
|
|
border-color: rgba(91, 187, 255, 0.42);
|
|
background: rgba(14, 37, 56, 0.95);
|
|
}
|
|
|
|
.mode-switch input:checked + .mode-slider::after {
|
|
transform: translateX(26px);
|
|
background: linear-gradient(
|
|
180deg,
|
|
rgba(131, 212, 255, 0.98),
|
|
rgba(72, 170, 231, 0.94)
|
|
);
|
|
}
|
|
|
|
.btn-close {
|
|
min-width: 42px;
|
|
}
|
|
|
|
body[data-mode="operations"] {
|
|
pointer-events: none;
|
|
}
|
|
|
|
body[data-mode="operations"] .logo,
|
|
body[data-mode="operations"] .title-block,
|
|
body[data-mode="operations"] .operator-strip,
|
|
body[data-mode="operations"] .operator-controls,
|
|
body[data-mode="operations"] .mode-controls,
|
|
body[data-mode="operations"] .controls,
|
|
body[data-mode="operations"] .mode-switch,
|
|
body[data-mode="operations"] .mode-switch *,
|
|
body[data-mode="operations"] button,
|
|
body[data-mode="operations"] select,
|
|
body[data-mode="operations"] label {
|
|
pointer-events: auto;
|
|
}
|