diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..072a9f0 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "chat.tools.terminal.autoApprove": { + "docker-compose": true + } +} \ No newline at end of file diff --git a/control-service/Dockerfile b/control-service/Dockerfile index da102a9..d8e48bb 100644 --- a/control-service/Dockerfile +++ b/control-service/Dockerfile @@ -21,6 +21,9 @@ COPY control-service/public ./public # Copy media files COPY media ./media +# Copy settings file +COPY settings.json ./settings.json + EXPOSE 3001 CMD ["node", "src/server.js"] diff --git a/control-service/public/cms.html b/control-service/public/cms.html index 6fdc6af..90ee9dd 100644 --- a/control-service/public/cms.html +++ b/control-service/public/cms.html @@ -19,6 +19,7 @@ align-items: center; justify-content: center; padding: 20px; + overflow-x: hidden; } .container { @@ -187,6 +188,7 @@ gap: 20px; align-items: center; margin-top: 15px; + flex-wrap: wrap; } .location-mode label { @@ -197,6 +199,98 @@ margin-top: 10px; } + .color-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); + gap: 15px; + margin-top: 15px; + width: 100%; + } + + .color-picker-item { + display: flex; + flex-direction: column; + gap: 8px; + } + + .color-picker-item label { + font-size: 12px; + font-weight: 600; + color: #555; + margin: 0; + word-break: break-word; + } + + .color-preview { + display: flex; + align-items: center; + gap: 10px; + padding: 8px; + background: #f9f9f9; + border-radius: 6px; + border: 1px solid #eee; + } + + .color-preview input[type="color"] { + width: 50px; + height: 50px; + border: none; + cursor: pointer; + padding: 0; + } + + .color-hex { + font-size: 12px; + font-family: monospace; + color: #666; + flex: 1; + } + + .theme-buttons { + display: flex; + gap: 10px; + margin-top: 20px; + flex-wrap: wrap; + } + + .btn-secondary { + padding: 10px 16px; + background: #4a90e2; + color: white; + border: none; + border-radius: 6px; + font-size: 13px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s; + } + + .btn-secondary:hover { + background: #3a7bc8; + transform: translateY(-1px); + box-shadow: 0 4px 12px rgba(74, 144, 226, 0.3); + } + + .btn-secondary.export { + background: #10b981; + } + + .btn-secondary.export:hover { + background: #059669; + } + + .btn-secondary.import { + background: #f59e0b; + } + + .btn-secondary.import:hover { + background: #d97706; + } + + #themeFileInput { + display: none; + } + @media (max-width: 600px) { .container { padding: 20px; @@ -238,8 +332,8 @@
Shown after the guest name on idle screen
+ +Appended after guest name (e.g., " Family" displays as "Guest Family")
Displayed on hero page top bar
Primary accent color for UI
-Guest name displayed below welcome text
Audio file to loop with 1 second crossfade on loop
+Space above the video in pixels (0-500)
+Top bar background color
+Main header gradient base color
+Divider line between status and header
+Color of "WELCOME" text
+Color of guest name text
-Idle screen background
-Guest name color on idle screen
-Family suffix color on idle screen
+ +Export your current theme as a JSON file, or import a previously saved theme file.