/* CSS for styling */
body, html {
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
font-family: sans-serif;
}
* { user-select: none; }
*:focus { outline: none; }
.container {
display: grid;
grid-template-columns: 1fr 2fr;
grid-template-rows: 1fr 2fr;
gap: 10px;
width: 100vw;
height: 100vh;
}
.section {
background-color: #f0f0f0;
border: 1px solid #ccc;
display: flex;
flex-direction: column; /* Ensure content within sections stacks vertically */
justify-content: center;
align-items: center;
font-size: 24px;
overflow-y: auto; /* Add vertical scrolling */
}
.section.overview_control {
grid-row: 1 / span 2; /* Span the top left section across both rows */
justify-content: unset;
align-items: normal;
padding: 8px;
gap: 8px;
}
.table-wrapper {
flex-grow: 1; /* Table wrapper takes remaining space */
display: flex;
justify-content: flex-start; /* Align content to the left */
align-items: flex-start; /* Align content to the top */
flex-direction: column; /* Content arranged in a column */
overflow: auto; /* Enable scrolling within the table wrapper */
}
#myTable {
background-color: #fff;
width: 100%;
border-collapse: collapse; /* Collapse table borders */
}
#myTable th {
position: sticky;
top: 0; /* Stick the table header to the top */
background-color: #f0f0f0; /* Set background color for the sticky header */
width: 100%; /* Ensure table header takes full width */
}
.button-wrapper {
position: sticky;
top: 0; /* Stick the button wrapper to the top */
background-color: #f0f0f0; /* Set background color for the sticky wrapper */
padding: 10px; /* Add padding for spacing */
left: 10px;
}
ul {
list-style-type: none;
padding: 0;
}
.list-item {
margin-bottom: 10px;
display: flex;
align-items: center;
}
.dot {
height: 10px;
width: 10px;
border-radius: 999px;
margin-right: 10px;
}
.dot.on { background-color: green; }
.dot.off { background-color: red; }
.buttons {
margin-left: auto;
}
.dropdown {
margin-left: 10px;
}
.bottom-right {
position: relative;
display: flex;
flex-direction: row;
align-items: center; /* Align squares to the center horizontally */
gap: 8px;
}
.bottom-right p {
margin: 8px;
}
.canvas-square {
border: 5px solid black;
flex-grow: 1;
height: calc(40% - 5px);
background-color: #ccc;
position: relative;
}
.traffic-light {
width: 20px;
height: 20px;
background-color: red;
position: absolute;
bottom: 5px;
right: 5px;
}
.barrier {
width: 20px;
height: 20px;
background-color: red;
position: absolute;
bottom: 5px;
left: 5px;
}
/* Styles for the inner content of the squares */
.inner-content {
position: absolute;
inset: 8px;
}
details {
border: 1px solid #0008;
padding: 4px;
}
details summary {
user-select: none;
cursor: pointer;
}
details[open] summary {
border-bottom: 1px solid #0008;
}
input[type="range"] {
width: 100%;
}
dialog {
z-index: 999;
min-width: 320px;
text-align: center;
border-radius: 12px;
border: 1px solid #0006;
box-shadow: 0 4px 32px -12px #000a;
}
::backdrop {
background-color: #0008;
/* opacity: 0.6; */
backdrop-filter: blur(12px);
}
.blink {
animation-name: blink;
animation-duration: 150ms;
animation-direction: alternate;
animation-iteration-count: infinite;
animation-timing-function: linear;
}
@keyframes blink {
from { color: red; }
to { color: black; }
}
.padtop { margin-top: 16px; }
dialog h1 { margin-top: 0; }
button {
font-size: 1rem;
border-radius: 8px;
border: 1px solid #0004;
padding: 4px 8px;
cursor: pointer;
background-color: #0001;
}
button[disabled] {
cursor: not-allowed;
}
button:not([disabled]):active {
background-color: #0004;
}
.inputlabel {
display: flex;
gap: 8px;
align-items: stretch;
}