|
|
@@ -0,0 +1,378 @@
|
|
|
+/* Dashboard.module.css */
|
|
|
+
|
|
|
+.dashboard {
|
|
|
+ background-color: #212121;
|
|
|
+ color: #e2e8f0;
|
|
|
+ min-height: 100vh;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ font-family: monospace;
|
|
|
+}
|
|
|
+
|
|
|
+.header {
|
|
|
+ padding: 16px;
|
|
|
+ background-color: #313031;
|
|
|
+ border-bottom: 2px solid #000;
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.controlsRow {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.viewContainer {
|
|
|
+ padding: 24px;
|
|
|
+ flex-grow: 1;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+}
|
|
|
+
|
|
|
+/* --- Layout & Panel Styles --- */
|
|
|
+.grid {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: 1fr 1fr;
|
|
|
+ gap: 32px;
|
|
|
+}
|
|
|
+
|
|
|
+.panel {
|
|
|
+ background-color: #313031;
|
|
|
+ border: 1px solid #5f5f5f;
|
|
|
+ padding: 16px;
|
|
|
+ border-radius: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.panelTitle {
|
|
|
+ color: #e3e3e3;
|
|
|
+ font-size: 1.1rem;
|
|
|
+ font-weight: bold;
|
|
|
+ border-bottom: 1px solid #5f5f5f;
|
|
|
+ padding-bottom: 8px;
|
|
|
+ margin-bottom: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.machineCard {
|
|
|
+ background-color: #212121;
|
|
|
+ border: 1px solid #000;
|
|
|
+ padding: 16px;
|
|
|
+ border-radius: 4px;
|
|
|
+ margin-bottom: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.statusBadge {
|
|
|
+ width: 150px;
|
|
|
+ text-align: right;
|
|
|
+ display: inline-block;
|
|
|
+ font-weight: bold;
|
|
|
+}
|
|
|
+
|
|
|
+.graphWrapper {
|
|
|
+ flex-grow: 1;
|
|
|
+ min-height: 700px;
|
|
|
+ height: 100%;
|
|
|
+ width: 100%;
|
|
|
+ background-color: #1a1a1a;
|
|
|
+}
|
|
|
+
|
|
|
+.timelineRow {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 16px;
|
|
|
+ margin-bottom: 24px;
|
|
|
+}
|
|
|
+
|
|
|
+.timelineLabel {
|
|
|
+ width: 150px;
|
|
|
+ font-weight: bold;
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+}
|
|
|
+
|
|
|
+.timelineGraph {
|
|
|
+ flex-grow: 1;
|
|
|
+ background-color: #212121;
|
|
|
+ border: 1px solid #000;
|
|
|
+ position: relative;
|
|
|
+}
|
|
|
+
|
|
|
+/* --- USER PROVIDED FACTORIO BUTTONS --- */
|
|
|
+.panel-button {
|
|
|
+ border: none;
|
|
|
+ cursor: pointer;
|
|
|
+ position: relative;
|
|
|
+ background-color: #313031;
|
|
|
+ height: 24px;
|
|
|
+ aspect-ratio: 1;
|
|
|
+ display: inline-flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ box-shadow:
|
|
|
+ inset 8px 0px 4px -8px #000,
|
|
|
+ inset -8px 0px 4px -8px #000,
|
|
|
+ inset 0px 8px 4px -8px #000,
|
|
|
+ inset 0px -8px 4px -8px #000,
|
|
|
+ inset 0px 8px 4px -8px #fff,
|
|
|
+ inset 0px -8px 2px -8px #432400,
|
|
|
+ 0px 0px 4px 0px #000;
|
|
|
+}
|
|
|
+.panel-button:active,
|
|
|
+.panel-button.active {
|
|
|
+ box-shadow:
|
|
|
+ inset 0px 9px 2px -8px #000,
|
|
|
+ inset 8px 0px 4px -8px #563a10,
|
|
|
+ inset 8px 0px 4px -8px #563a10,
|
|
|
+ inset -8px 0px 4px -8px #563a10,
|
|
|
+ inset -8px 0px 4px -8px #563a10,
|
|
|
+ inset 0px -9px 2px -8px #fff,
|
|
|
+ 0px 0px 4px 0px #000;
|
|
|
+ background-color: #f1be64;
|
|
|
+ filter: none;
|
|
|
+ outline: 0;
|
|
|
+}
|
|
|
+.panel-button.hover,
|
|
|
+.panel-button:focus,
|
|
|
+.panel-button:hover {
|
|
|
+ color: #000;
|
|
|
+ text-decoration: none;
|
|
|
+ outline: 0;
|
|
|
+ box-shadow:
|
|
|
+ inset 8px 0px 4px -8px #000,
|
|
|
+ inset -8px 0px 4px -8px #000,
|
|
|
+ inset 0px 9px 2px -8px #fff,
|
|
|
+ inset 0px -8px 4px -8px hsl(36, 94%, 20%),
|
|
|
+ 0px 0px 4px 0px #000,
|
|
|
+ inset 0px 0px 4px 2px #f9b44b;
|
|
|
+ background-color: #e39827;
|
|
|
+ filter: drop-shadow(0 0 2px #f9b44b);
|
|
|
+}
|
|
|
+input:focus {
|
|
|
+ border: none;
|
|
|
+ filter: drop-shadow(0 0 2px #f9b44b);
|
|
|
+}
|
|
|
+.button {
|
|
|
+ background-color: #8e8e8e;
|
|
|
+ padding: 10px 12px;
|
|
|
+ font-size: 100%;
|
|
|
+ text-align: left;
|
|
|
+ color: #000;
|
|
|
+ font-weight: 600;
|
|
|
+ display: inline-block;
|
|
|
+ vertical-align: baseline;
|
|
|
+ min-width: 128px;
|
|
|
+ border: none;
|
|
|
+ line-height: inherit;
|
|
|
+ white-space: nowrap;
|
|
|
+ box-shadow:
|
|
|
+ inset 8px 0px 4px -8px #000,
|
|
|
+ inset -8px 0px 4px -8px #000,
|
|
|
+ inset 0px 10px 2px -8px #e3e3e3,
|
|
|
+ inset 0px 10px 2px -8px #282828,
|
|
|
+ inset 0px -9px 2px -8px #000,
|
|
|
+ 0px 0px 4px 0px #000;
|
|
|
+ position: relative;
|
|
|
+ margin-right: 14px;
|
|
|
+ cursor: pointer;
|
|
|
+ user-select: none;
|
|
|
+ height: 36px;
|
|
|
+ text-align: left;
|
|
|
+}
|
|
|
+.button:hover,
|
|
|
+.button.hover {
|
|
|
+ box-shadow:
|
|
|
+ inset 8px 0px 4px -8px #000,
|
|
|
+ inset -8px 0px 4px -8px #000,
|
|
|
+ inset 0px 9px 2px -8px #fff,
|
|
|
+ inset 0px 8px 4px -8px #000,
|
|
|
+ inset 0px -8px 4px -8px #000,
|
|
|
+ inset 0px -9px 2px -8px #432400,
|
|
|
+ 0px 0px 4px 0px #000,
|
|
|
+ inset 0px 0px 4px 2px #f9b44b;
|
|
|
+ background-color: #e39827;
|
|
|
+ filter: drop-shadow(0 0 2px #f9b44b);
|
|
|
+}
|
|
|
+.button:active,
|
|
|
+.button.active {
|
|
|
+ box-shadow:
|
|
|
+ inset 0px 10px 2px -8px #000,
|
|
|
+ inset 0px 9px 2px -8px #000,
|
|
|
+ inset 8px 0px 4px -8px #563a10,
|
|
|
+ inset 8px 0px 4px -8px #563a10,
|
|
|
+ inset -8px 0px 4px -8px #563a10,
|
|
|
+ inset -8px 0px 4px -8px #563a10,
|
|
|
+ inset 0px 9px 2px -8px #563a10,
|
|
|
+ inset 0px -9px 2px -8px #563a10,
|
|
|
+ inset 0px -8.5px 0px -8px #563a10,
|
|
|
+ 0px 0px 4px 0px #000;
|
|
|
+ background-color: #f1be64;
|
|
|
+}
|
|
|
+.button.disabled {
|
|
|
+ background-color: #3d3d3d;
|
|
|
+ color: #818181;
|
|
|
+ box-shadow:
|
|
|
+ inset 8px 0px 4px -8px #000,
|
|
|
+ inset -8px 0px 4px -8px #000,
|
|
|
+ inset 0px 8px 4px -8px #000,
|
|
|
+ inset 0px -6px 4px -8px #818181,
|
|
|
+ inset 0px -8px 4px -8px #000,
|
|
|
+ 0px 0px 4px 0px #000;
|
|
|
+}
|
|
|
+.button-green {
|
|
|
+ background-color: #5eb663;
|
|
|
+ padding: 10px 12px;
|
|
|
+ font-size: 100%;
|
|
|
+ color: #000;
|
|
|
+ font-weight: 600;
|
|
|
+ display: inline-block;
|
|
|
+ min-width: 128px;
|
|
|
+ border: none;
|
|
|
+ box-shadow:
|
|
|
+ inset 8px 0px 4px -8px #000,
|
|
|
+ inset -8px 0px 4px -8px #000,
|
|
|
+ inset 0px 10px 2px -8px #95df99,
|
|
|
+ inset 0px 10px 2px -8px #163218,
|
|
|
+ inset 0px -9px 2px -8px #000,
|
|
|
+ 0px 0px 4px 0px #000;
|
|
|
+ margin-right: 14px;
|
|
|
+ cursor: pointer;
|
|
|
+ user-select: none;
|
|
|
+ height: 36px;
|
|
|
+}
|
|
|
+.button-green:hover {
|
|
|
+ box-shadow:
|
|
|
+ inset 8px 0px 4px -8px #000,
|
|
|
+ inset -8px 0px 4px -8px #000,
|
|
|
+ inset 0px 9px 2px -8px #cdf1cf,
|
|
|
+ inset 0px 8px 4px -8px #000,
|
|
|
+ inset 0px -8px 4px -8px #000,
|
|
|
+ inset 0px -9px 2px -8px #432400,
|
|
|
+ 0px 0px 4px 0px #000,
|
|
|
+ inset 0px 0px 4px 2px #34be3c;
|
|
|
+ background-color: #92e897;
|
|
|
+ filter: drop-shadow(0 0 2px #34be3c);
|
|
|
+}
|
|
|
+.button-red {
|
|
|
+ background-color: #fe5a5a;
|
|
|
+ padding: 10px 12px;
|
|
|
+ font-size: 100%;
|
|
|
+ color: #000;
|
|
|
+ font-weight: 600;
|
|
|
+ display: inline-block;
|
|
|
+ min-width: 128px;
|
|
|
+ border: none;
|
|
|
+ box-shadow:
|
|
|
+ inset 8px 0px 4px -8px #000,
|
|
|
+ inset -8px 0px 4px -8px #000,
|
|
|
+ inset 0px 10px 2px -8px #fda1a1,
|
|
|
+ inset 0px 10px 2px -8px #8b0101,
|
|
|
+ inset 0px -9px 2px -8px #000,
|
|
|
+ 0px 0px 4px 0px #000;
|
|
|
+ margin-right: 14px;
|
|
|
+ cursor: pointer;
|
|
|
+ user-select: none;
|
|
|
+ height: 36px;
|
|
|
+}
|
|
|
+.button-red:hover {
|
|
|
+ box-shadow:
|
|
|
+ inset 8px 0px 4px -8px #000,
|
|
|
+ inset -8px 0px 4px -8px #000,
|
|
|
+ inset 0px 9px 2px -8px #f8eaea,
|
|
|
+ inset 0px 8px 4px -8px #000,
|
|
|
+ inset 0px -8px 4px -8px #000,
|
|
|
+ inset 0px -9px 2px -8px #432400,
|
|
|
+ 0px 0px 4px 0px #000,
|
|
|
+ inset 0px 0px 4px 2px #c35353;
|
|
|
+ background-color: #ff9b9b;
|
|
|
+ filter: drop-shadow(0 0 2px #c35353);
|
|
|
+}
|
|
|
+input[type="text"],
|
|
|
+input[type="number"] {
|
|
|
+ height: 36px;
|
|
|
+ background: #8e8e8e;
|
|
|
+ border-radius: 4px;
|
|
|
+ padding: 6px;
|
|
|
+ border: none;
|
|
|
+ box-shadow:
|
|
|
+ inset 0px 4px 1px -2px #000,
|
|
|
+ inset 0px -4px 1px -2px #c5c5c5,
|
|
|
+ inset 2px 0px 1px 0px #5f5f5f,
|
|
|
+ inset -2px 0px 1px 0px #5f5f5f,
|
|
|
+ inset 0px -2px 2px 0px #5f5f5f,
|
|
|
+ 0px 0px 4px 1px #2e2521;
|
|
|
+ outline: none;
|
|
|
+}
|
|
|
+input[type="text"]:focus,
|
|
|
+input[type="number"]:focus {
|
|
|
+ color: #000;
|
|
|
+ background: #f0dab4;
|
|
|
+ box-shadow:
|
|
|
+ inset 0px 4px 2px -2px #000,
|
|
|
+ inset 0px -1px 1px 0px #74624b,
|
|
|
+ inset 0px -4px 2px -2px #e0e0e0,
|
|
|
+ inset 2px 0px 2px 0px #a6885c,
|
|
|
+ inset -2px 0px 2px 0px #a6885c,
|
|
|
+ 0px 0px 4px 1px #2e2521;
|
|
|
+}
|
|
|
+
|
|
|
+.timelineScrollArea {
|
|
|
+ overflow-x: auto;
|
|
|
+ overflow-y: hidden;
|
|
|
+ padding-bottom: 16px;
|
|
|
+ background-color: #212121;
|
|
|
+ border: 1px solid #5f5f5f;
|
|
|
+ border-radius: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.timelineGroup {
|
|
|
+ margin-bottom: 24px;
|
|
|
+ border-bottom: 2px solid #1a1a1a;
|
|
|
+ padding: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.timelineRow {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.timelineLabel {
|
|
|
+ width: 140px;
|
|
|
+ min-width: 140px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+ font-weight: bold;
|
|
|
+ color: #e3e3e3;
|
|
|
+}
|
|
|
+
|
|
|
+.timelineGraph {
|
|
|
+ flex-grow: 1;
|
|
|
+ border-left: 1px solid #5f5f5f;
|
|
|
+ border-right: 1px solid #5f5f5f;
|
|
|
+ background-color: #1a1a1a;
|
|
|
+ position: relative;
|
|
|
+ cursor: crosshair;
|
|
|
+}
|
|
|
+
|
|
|
+.timelineGraph:hover {
|
|
|
+ background-color: #2b2b2b;
|
|
|
+}
|
|
|
+
|
|
|
+.tooltip {
|
|
|
+ position: fixed;
|
|
|
+ pointer-events: none;
|
|
|
+ background: #1a1a1a;
|
|
|
+ border: 1px solid #e39827;
|
|
|
+ color: #fff;
|
|
|
+ padding: 6px 10px;
|
|
|
+ border-radius: 4px;
|
|
|
+ font-size: 12px;
|
|
|
+ z-index: 9999;
|
|
|
+ transform: translate(-50%, -130%);
|
|
|
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.5);
|
|
|
+ white-space: nowrap;
|
|
|
+ font-family: monospace;
|
|
|
+}
|