/* 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; margin-left: auto; margin-right: auto; } 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: 95vw; max-width: 1600px; min-width: 400px; padding: 20px; background-color: var(--nord3); border-radius: 8px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); margin-bottom: 20px; margin-left: auto; margin-right: auto; overflow-x: auto; } .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; }