diff --git a/simulator/static/style.css b/simulator/static/style.css index ab265d9..ca14106 100644 --- a/simulator/static/style.css +++ b/simulator/static/style.css @@ -1,69 +1,157 @@ body { margin: 0; font-family: Arial, sans-serif; - background: #111; + background: #101010; color: #eee; } main { max-width: 900px; margin: 0 auto; - padding: 24px; + padding: 18px 18px 96px; +} + +header { + text-align: center; + margin-bottom: 16px; } h1 { + margin: 0 0 8px; + font-size: 1.8rem; +} + +h2 { + margin-top: 0; +} + +#statusLine { + color: #aaa; + font-size: 0.95rem; +} + +.screen { + display: none; +} + +.screen.active { + display: block; +} + +.big-card { + background: #222; + border: 1px solid #333; + border-radius: 16px; + padding: 24px; text-align: center; + margin-bottom: 16px; +} + +.big-card p { + font-size: 4rem; + margin: 0; } .grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); - gap: 16px; + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 14px; } .card { background: #222; border: 1px solid #333; - border-radius: 12px; - padding: 18px; + border-radius: 14px; + padding: 16px; text-align: center; } .card h2 { font-size: 1rem; - margin: 0 0 12px; color: #aaa; } .card p { - font-size: 2rem; + font-size: 2.1rem; margin: 0; } -.controls { - margin-top: 24px; +.relay-row { display: flex; gap: 12px; - flex-wrap: wrap; - justify-content: center; + margin-top: 16px; +} + +.relay-pill { + flex: 1; + background: #252525; + border: 1px solid #444; + border-radius: 999px; + padding: 14px; + text-align: center; + font-size: 1.2rem; +} + +.detail-list { + background: #222; + border: 1px solid #333; + border-radius: 14px; + overflow: hidden; + margin-bottom: 18px; +} + +.detail-list div { + display: flex; + justify-content: space-between; + padding: 16px; + border-bottom: 1px solid #333; + font-size: 1.2rem; +} + +.detail-list div:last-child { + border-bottom: none; } button { - font-size: 1rem; - padding: 14px 20px; + font-size: 1.1rem; + padding: 16px 20px; border: none; - border-radius: 10px; + border-radius: 12px; background: #444; color: white; cursor: pointer; + min-width: 130px; } button:hover { background: #666; } -.status { - margin-top: 24px; - text-align: center; - color: #aaa; +#power button, +#system button { + display: block; + width: 100%; + margin-bottom: 14px; + font-size: 1.4rem; + padding: 22px; +} + +nav { + position: fixed; + left: 0; + right: 0; + bottom: 0; + background: #181818; + border-top: 1px solid #333; + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 4px; + padding: 8px; +} + +nav button { + min-width: 0; + padding: 14px 4px; + font-size: 0.9rem; + border-radius: 10px; } diff --git a/simulator/templates/index.html b/simulator/templates/index.html index b1f4d22..abdc92a 100644 --- a/simulator/templates/index.html +++ b/simulator/templates/index.html @@ -5,110 +5,153 @@ -
+
+

Xterra Dashboard

+
RS-485: -- | WiFi: --
+
-
-
-

Battery

-

--%

- --V / --A -
+
+
+

Battery

+

--%

+ -- hr runtime +
-
-

Runtime

-

-- hr

- -- Ah remaining -
+
+

Fridge A

--°F

+

Fridge B

--°F

+

Rear Seat

--°F

+

Outside

--°F

+
-
-

Fridge Zone 1

-

--°F

-
+
+ +
Fridge: --
+
+
-
-

Fridge Zone 2

-

--°F

-
+
+

Battery Detail

+
+
SOC --%
+
Voltage -- V
+
Current -- A
+
Remaining -- Ah
+
Runtime -- hr
+
Battery Temp --°F
+
+
-
-

Rear Seat

-

--°F

-
+
+

Temperatures

+
+

Fridge Zone 1

--°F

+

Fridge Zone 2

--°F

+

Rear Seat

--°F

+

Outside

--°F

+
+
-
-

Outside

-

--°F

-
-
+
+

Power Control

+ + +
-
- - - -
+
+

System

+
+
RS-485 --
+
WiFi --
+
WiFi Override --
+
+ +
+
-
-

RS-485: --

-

WiFi: --

-
-
+ - +async function enableWifi() { + await fetch('/network/wifi', { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({minutes: 10}) + }); + + loadStatus(); +} + +loadStatus(); +setInterval(loadStatus, 2000); +