335 lines
6.9 KiB
CSS
335 lines
6.9 KiB
CSS
/* Nord Polar Night Palette */
|
|
:root {
|
|
--nord0: #2E3440; /* Darkest background */
|
|
--nord1: #3B4252; /* Dark background */
|
|
--nord2: #434C5E; /* Medium background */
|
|
--nord3: #4C566A; /* Light background */
|
|
--nord4: #D8DEE9; /* Lightest text */
|
|
--nord5: #E5E9F0; /* Light text */
|
|
--nord6: #ECEFF4; /* Brightest text */
|
|
--nord7: #8FBCBB; /* Teal accent */
|
|
--nord8: #88C0D0; /* Cyan accent */
|
|
--nord9: #81A1C1; /* Blue accent */
|
|
--nord10: #5E81AC; /* Darker blue */
|
|
--nord11: #BF616A; /* Red (critical/error) */
|
|
--nord12: #D08770; /* Orange (warning) */
|
|
--nord13: #A3BE8C; /* Green (info) */
|
|
--nord14: #B48EAD; /* Purple */
|
|
--nord15: #D08770; /* Coral */
|
|
}
|
|
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
min-height: 100vh;
|
|
margin: 0;
|
|
background-color: var(--nord0);
|
|
color: var(--nord4);
|
|
padding: 20px;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.header-container {
|
|
text-align: center;
|
|
padding: 20px;
|
|
background-color: var(--nord1);
|
|
border-radius: 8px;
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
margin-bottom: 20px;
|
|
width: 80vw;
|
|
max-width: 1200px;
|
|
}
|
|
|
|
h1 {
|
|
color: var(--nord6);
|
|
margin-bottom: 10px;
|
|
}
|
|
|
|
p {
|
|
font-size: 1rem;
|
|
color: var(--nord5);
|
|
margin: 5px 0;
|
|
}
|
|
|
|
code {
|
|
background-color: var(--nord2);
|
|
padding: 3px 8px;
|
|
border-radius: 4px;
|
|
font-family: "Courier New", Courier, monospace;
|
|
font-size: 0.9rem;
|
|
color: var(--nord6);
|
|
}
|
|
|
|
#node-grid-container, #log-table-container {
|
|
width: 80vw;
|
|
max-width: 1200px;
|
|
min-width: 400px;
|
|
padding: 20px;
|
|
background-color: var(--nord3);
|
|
border-radius: 8px;
|
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.connection-grid {
|
|
display: grid;
|
|
/* grid-template-columns will be set dynamically by JavaScript */
|
|
gap: 8px;
|
|
}
|
|
|
|
.grid-row {
|
|
display: contents;
|
|
}
|
|
|
|
.grid-cell {
|
|
border: 1px solid var(--nord2);
|
|
border-radius: 6px;
|
|
padding: 8px;
|
|
text-align: center;
|
|
font-size: clamp(0.8rem, 1.5vw, 0.9rem);
|
|
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2);
|
|
transition: background-color 0.3s ease, border-color 0.3s ease, transform: 0.1s ease;
|
|
cursor: pointer;
|
|
position: relative;
|
|
overflow: hidden;
|
|
min-height: clamp(80px, 15vw, 120px);
|
|
}
|
|
|
|
.grid-cell:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.header-cell {
|
|
background-color: var(--nord2);
|
|
font-weight: bold;
|
|
color: var(--nord6);
|
|
}
|
|
|
|
.empty-cell {
|
|
background-color: transparent;
|
|
border: none;
|
|
box-shadow: none;
|
|
}
|
|
|
|
.node-uuid {
|
|
font-weight: bold;
|
|
margin-bottom: 5px;
|
|
color: var(--nord6);
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.node-status-text, .conn-status-text {
|
|
font-size: clamp(0.7rem, 1.2vw, 0.8rem);
|
|
color: var(--nord5);
|
|
}
|
|
|
|
/* Health Status Colors */
|
|
.node-healthy {
|
|
background-color: rgba(163, 190, 140, 0.2);
|
|
border-color: var(--nord13);
|
|
}
|
|
|
|
.node-warning {
|
|
background-color: rgba(208, 135, 112, 0.2);
|
|
border-color: var(--nord12);
|
|
}
|
|
|
|
.node-critical {
|
|
background-color: rgba(191, 62, 106, 0.2);
|
|
border-color: var(--nord11);
|
|
}
|
|
|
|
.node-unknown {
|
|
background-color: rgba(129, 161, 193, 0.2);
|
|
border-color: var(--nord9);
|
|
}
|
|
|
|
/* Latency Colors */
|
|
.latency-low {
|
|
background-color: rgba(163, 190, 140, 0.2);
|
|
border-color: var(--nord13);
|
|
}
|
|
|
|
.latency-medium {
|
|
background-color: rgba(208, 135, 112, 0.2);
|
|
border-color: var(--nord12);
|
|
}
|
|
|
|
.latency-high {
|
|
background-color: rgba(191, 625, 106, 0.2);
|
|
border-color: var(--nord11);
|
|
}
|
|
|
|
.latency-unavailable {
|
|
background-color: rgba(129, 161, 193, 0.2);
|
|
border-color: var(--nord9);
|
|
}
|
|
|
|
/* Tooltip styles */
|
|
.node-tooltip {
|
|
visibility: hidden;
|
|
opacity: 0;
|
|
width: clamp(180px, 20vw, 220px);
|
|
background-color: var(--nord1);
|
|
color: var(--nord4);
|
|
text-align: left;
|
|
border-radius: 6px;
|
|
padding: 10px;
|
|
position: absolute;
|
|
z-index: 1;
|
|
bottom: 20px;
|
|
left: 50%;
|
|
margin-left: clamp(-90px, -10vw, -110px);
|
|
transition: opacity 0.3s;
|
|
font-size: clamp(0.7rem, 1.2vw, 0.8rem);
|
|
white-space: normal;
|
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
|
|
}
|
|
|
|
.node-tooltip::after {
|
|
content: " ";
|
|
position: absolute;
|
|
top: 100%;
|
|
left: 50%;
|
|
margin-left: -5px;
|
|
border-width: 5px;
|
|
border-style: solid;
|
|
border-color: var(--nord1) transparent transparent transparent;
|
|
}
|
|
|
|
.grid-cell:hover .node-tooltip {
|
|
visibility: visible;
|
|
opacity: 1;
|
|
}
|
|
|
|
.node-tooltip p {
|
|
margin: 2px 0;
|
|
color: var(--nord4);
|
|
}
|
|
|
|
/* Log Table Styles */
|
|
.log-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
background-color: var(--nord2);
|
|
border-radius: 6px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.log-table th, .log-table td {
|
|
padding: 10px;
|
|
text-align: left;
|
|
border-bottom: 1px solid var(--nord3);
|
|
font-size: clamp(0.8rem, 1.2vw, 0.9rem);
|
|
}
|
|
|
|
.log-table th {
|
|
background-color: var(--nord1);
|
|
color: var(--nord6);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.log-table th.sortable:hover {
|
|
background-color: var(--nord10);
|
|
}
|
|
|
|
.log-table tr:hover {
|
|
background-color: var(--nord3);
|
|
}
|
|
|
|
.log-table .log-level {
|
|
font-weight: bold;
|
|
}
|
|
|
|
.log-level-info {
|
|
color: var(--nord13); /* Green */
|
|
}
|
|
|
|
.log-level-warning {
|
|
color: var(--nord12); /* Orange */
|
|
}
|
|
|
|
.log-level-error {
|
|
color: var(--nord11); /* Red */
|
|
}
|
|
|
|
.log-level-debug { /* Added for potential debug logs */
|
|
color: var(--nord9); /* Blue */
|
|
}
|
|
|
|
.json-toggle {
|
|
color: var(--nord8);
|
|
cursor: pointer;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.json-content {
|
|
background-color: var(--nord1);
|
|
padding: 8px;
|
|
border-radius: 4px;
|
|
font-family: "Courier New", monospace;
|
|
font-size: 0.8rem;
|
|
color: var(--nord5);
|
|
margin-top: 5px;
|
|
white-space: pre-wrap;
|
|
}
|
|
|
|
/* Filter Container Styles */
|
|
.filter-container {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 10px;
|
|
margin-top: 10px;
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.filter-container label {
|
|
color: var(--nord5);
|
|
font-size: 0.9rem;
|
|
margin-right: 5px;
|
|
}
|
|
|
|
.filter-container input[type="radio"] {
|
|
margin-right: 5px;
|
|
}
|
|
|
|
.filter-container input[type="datetime-local"], .filter-container button {
|
|
background-color: var(--nord2);
|
|
color: var(--nord5);
|
|
border: 1px solid var(--nord3);
|
|
border-radius: 4px;
|
|
padding: 5px 10px;
|
|
font-size: 0.9rem;
|
|
}
|
|
|
|
.filter-container input[type="datetime-local"]:focus, .filter-container button:focus {
|
|
outline: none;
|
|
border-color: var(--nord8);
|
|
}
|
|
|
|
.filter-container button {
|
|
background-color: var(--nord10);
|
|
cursor: pointer;
|
|
transition: background-color 0.3s ease;
|
|
}
|
|
|
|
.filter-container button:hover {
|
|
background-color: var(--nord8);
|
|
}
|
|
|
|
.filter-container fieldset {
|
|
color: var(--nord5);
|
|
border: 1px solid var(--nord3);
|
|
border-radius: 4px;
|
|
padding: 5px 10px;
|
|
}
|
|
|
|
.filter-container legend {
|
|
color: var(--nord6);
|
|
font-size: 0.9rem;
|
|
}
|