Files
NexaPG/frontend/src/styles.css
nessi 6e40d3c594 Enhance sidebar navigation icons with SVGs and update styling
Replaced text-based icons with accessible SVG icons for better visual appeal and improved semantics. Adjusted styles for sidebar buttons and icons, including dimensions, colors, and hover effects, to align with the updated design language. Added subtle animations and gradients for a more modern and polished user experience.
2026-02-12 11:09:08 +01:00

440 lines
6.9 KiB
CSS

:root {
--bg: #0b1020;
--bg2: #131a30;
--card: #1b233d;
--text: #e5edf7;
--muted: #98a6c0;
--accent: #38bdf8;
--danger: #ef4444;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: "Space Grotesk", "Segoe UI", sans-serif;
color: var(--text);
background: radial-gradient(circle at top right, #1d335f, #0b1020 55%);
overflow: hidden;
}
a {
color: var(--accent);
text-decoration: none;
}
.shell {
display: grid;
grid-template-columns: 260px 1fr;
height: 100vh;
overflow: hidden;
}
.sidebar {
background: linear-gradient(180deg, #10182f, #0a1022);
border-right: 1px solid #223056;
padding: 20px;
display: flex;
flex-direction: column;
gap: 20px;
height: 100vh;
position: sticky;
top: 0;
overflow: hidden;
}
.sidebar-nav {
display: flex;
flex-direction: column;
gap: 9px;
}
.nav-btn {
position: relative;
display: flex;
align-items: center;
gap: 12px;
padding: 11px 13px;
border: 1px solid #253962;
border-radius: 12px;
background: linear-gradient(180deg, #101a36, #0d1630);
color: #cedbf2;
transition: border-color 0.18s ease, background 0.18s ease, transform 0.18s ease, box-shadow 0.18s ease;
}
.nav-btn:hover {
border-color: #355ca6;
background: linear-gradient(180deg, #122449, #0f1e3f);
transform: translateY(-1px);
box-shadow: 0 6px 18px #07122c66;
}
.nav-btn.active {
border-color: #38bdf8;
box-shadow: inset 0 0 0 1px #38bdf84f, 0 8px 20px #0a1c4260;
background: linear-gradient(180deg, #173a6e, #112851);
color: #ecf5ff;
}
.nav-btn.active::before {
content: "";
position: absolute;
left: -1px;
top: 8px;
bottom: 8px;
width: 3px;
border-radius: 999px;
background: linear-gradient(180deg, #7dd3fc, #38bdf8);
}
.nav-icon {
width: 28px;
height: 28px;
border-radius: 8px;
display: grid;
place-items: center;
border: 1px solid #324f8a;
background: linear-gradient(180deg, #0f1e40, #0d1a37);
}
.nav-icon svg {
width: 16px;
height: 16px;
fill: none;
stroke: currentColor;
stroke-width: 1.8;
stroke-linecap: round;
stroke-linejoin: round;
}
.nav-label {
font-size: 15px;
font-weight: 650;
letter-spacing: 0.01em;
}
.profile {
margin-top: auto;
border-top: 1px solid #223056;
padding-top: 14px;
color: #d7e4fa;
}
.role {
color: var(--muted);
margin-bottom: 10px;
}
.main {
padding: 24px;
height: 100vh;
overflow-y: auto;
}
.card {
background: color-mix(in oklab, var(--card), black 10%);
border: 1px solid #2a3a66;
border-radius: 14px;
padding: 16px;
margin-bottom: 16px;
}
.grid {
display: grid;
gap: 12px;
}
.grid.two {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.grid.three {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
.stat strong {
font-size: 28px;
display: block;
}
input,
select,
button {
background: #10182f;
color: var(--text);
border: 1px solid #2b3f74;
border-radius: 10px;
padding: 10px;
}
.field {
display: grid;
gap: 6px;
}
.field label {
font-size: 13px;
color: #b9c6dc;
}
.field small {
font-size: 12px;
color: #8fa0bf;
}
.tips p {
margin: 8px 0;
color: #bfd0ea;
}
button {
cursor: pointer;
}
.logout-btn {
width: 100%;
margin-top: 8px;
border-color: #374f8f;
background: linear-gradient(180deg, #13224b, #101b3a);
}
.logout-btn:hover {
border-color: #38bdf8;
}
table {
width: 100%;
border-collapse: collapse;
font-size: 14px;
}
th,
td {
text-align: left;
border-bottom: 1px solid #223056;
padding: 8px 6px;
}
.error {
color: #fecaca;
border-color: #7f1d1d;
}
.range-picker {
display: flex;
gap: 8px;
margin-bottom: 10px;
}
.range-picker .active {
border-color: var(--accent);
}
.login-wrap {
min-height: 100vh;
display: grid;
place-items: center;
padding: 24px;
background:
radial-gradient(900px 500px at 20% 15%, #15356a44, transparent),
radial-gradient(900px 500px at 80% 90%, #1c4a7a33, transparent);
}
.login-card {
width: min(460px, 95vw);
display: grid;
gap: 10px;
border-color: #335aa4;
padding: 26px;
background: linear-gradient(180deg, #182548f0, #141f3df0);
box-shadow: 0 20px 50px #050b1f66;
backdrop-filter: blur(6px);
animation: loginEnter 0.5s ease;
}
.login-eyebrow {
font-size: 12px;
color: #a8badb;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.login-card h2 {
margin: 0;
font-size: 34px;
line-height: 1.05;
}
.login-subtitle {
margin: 0 0 2px 0;
color: #9db0d2;
font-size: 14px;
}
.input-shell {
border: 1px solid #2b3f74;
border-radius: 12px;
padding: 0;
background: #0e1731;
transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.15s ease;
}
.input-shell:focus-within {
border-color: #38bdf8;
box-shadow: 0 0 0 3px #38bdf820;
transform: translateY(-1px);
}
.input-shell input {
width: 100%;
border: 0;
outline: none;
background: transparent;
padding: 11px 12px;
font-size: 15px;
}
.login-cta {
margin-top: 4px;
font-weight: 700;
border-color: #3f74d6;
background: linear-gradient(90deg, #2e7cd4, #265fb4);
padding: 11px 12px;
}
.login-cta:hover {
border-color: #6aa8ff;
filter: brightness(1.05);
}
.login-card input:-webkit-autofill,
.login-card input:-webkit-autofill:hover,
.login-card input:-webkit-autofill:focus {
-webkit-text-fill-color: #e5edf7;
-webkit-box-shadow: 0 0 0px 1000px #0e1731 inset;
transition: background-color 9999s ease-out 0s;
}
@keyframes loginEnter {
from {
opacity: 0;
transform: translateY(8px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.query {
max-width: 400px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.overview-kv span,
.overview-metrics span {
display: block;
font-size: 12px;
color: #97a7c8;
}
.overview-kv strong,
.overview-metrics strong {
font-size: 15px;
}
.overview-metrics {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px;
}
.pill {
text-transform: uppercase;
letter-spacing: 0.04em;
}
.pill.primary {
color: #4ade80;
}
.pill.standby {
color: #f59e0b;
}
.lag-bad {
color: #ef4444;
}
.partial-warning {
margin-top: 12px;
border: 1px solid #7f1d1d;
border-radius: 10px;
padding: 10px;
color: #fecaca;
}
.partial-warning ul {
margin: 8px 0 0 18px;
}
.chart-tooltip {
background: #0f1934ee;
border: 1px solid #2f4a8b;
border-radius: 10px;
padding: 10px 12px;
min-width: 170px;
}
.chart-tooltip-time {
font-size: 12px;
color: #9cb2d8;
margin-bottom: 6px;
}
.chart-tooltip-item {
font-size: 14px;
margin: 3px 0;
}
.chart-tooltip-item.c1 {
color: #38bdf8;
}
.chart-tooltip-item.c2 {
color: #22c55e;
}
.chart-tooltip-item.c3 {
color: #f59e0b;
}
@media (max-width: 980px) {
body {
overflow: auto;
}
.shell {
grid-template-columns: 1fr;
height: auto;
overflow: visible;
}
.sidebar {
position: sticky;
top: 0;
z-index: 2;
height: auto;
}
.grid.two,
.grid.three {
grid-template-columns: 1fr;
}
.main {
height: auto;
overflow: visible;
}
}