From bd96333d22962ad68368806addda18d830cd0418 Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Mon, 16 Feb 2026 02:11:21 -0500 Subject: [PATCH] feat: Revamp Control Panel styling for improved aesthetics and usability --- client/src/components/ControlPanel.css | 287 +++++++++++++------------ 1 file changed, 147 insertions(+), 140 deletions(-) diff --git a/client/src/components/ControlPanel.css b/client/src/components/ControlPanel.css index 1b7933d..47a953f 100644 --- a/client/src/components/ControlPanel.css +++ b/client/src/components/ControlPanel.css @@ -2,8 +2,9 @@ height: 100%; display: flex; flex-direction: column; - background: #0f172a; - color: #e2e8f0; + background: #ffffff; + color: #1f2937; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif; } .panel-header { @@ -11,14 +12,16 @@ justify-content: space-between; align-items: center; padding: 1rem 1.5rem; - background: #1e293b; - border-bottom: 2px solid #334155; + background: #ffffff; + border-bottom: 1px solid #e5e7eb; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .panel-header h1 { - font-size: 1.5rem; - font-weight: 700; - color: #f1f5f9; + font-size: 1.25rem; + font-weight: 600; + color: #111827; + letter-spacing: -0.025em; } .connection-status { @@ -69,58 +72,54 @@ display: flex; flex: 1; overflow: hidden; + flex-direction: column; } .turtle-list { - width: 380px; - border-right: 1px solid #334155; + width: 100%; + border-bottom: 1px solid #e5e7eb; display: flex; - flex-direction: column; - background: linear-gradient(180deg, #1e293b 0%, #0f172a 100%); + flex-direction: row; + background: #f9fafb; + overflow-x: auto; + padding: 0.75rem; + gap: 0.75rem; + flex-shrink: 0; } .turtle-list h2 { - padding: 1.25rem 1.5rem; - font-size: 1rem; - font-weight: 700; - letter-spacing: 0.05em; - text-transform: uppercase; - border-bottom: 2px solid #334155; - color: #94a3b8; - background: #1e293b; + display: none; } .turtle-cards { - flex: 1; - overflow-y: auto; - padding: 1rem; - gap: 0.75rem; display: flex; - flex-direction: column; + flex-direction: row; + gap: 0.75rem; + overflow-x: auto; } .turtle-cards::-webkit-scrollbar { - width: 8px; + height: 6px; } .turtle-cards::-webkit-scrollbar-track { - background: #0f172a; - border-radius: 4px; + background: #f3f4f6; + border-radius: 3px; } .turtle-cards::-webkit-scrollbar-thumb { - background: #334155; - border-radius: 4px; + background: #d1d5db; + border-radius: 3px; } .turtle-cards::-webkit-scrollbar-thumb:hover { - background: #475569; + background: #9ca3af; } .empty-state { padding: 3rem 2rem; text-align: center; - color: #64748b; + color: #9ca3af; } .empty-state::before { @@ -134,74 +133,67 @@ .empty-state .hint { margin-top: 1rem; font-size: 0.875rem; - color: #475569; + color: #6b7280; font-style: italic; } .turtle-card { - background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%); - border: 1px solid #334155; - border-radius: 0.75rem; - padding: 1.25rem; + background: #ffffff; + border: 2px solid #e5e7eb; + border-radius: 0.5rem; + padding: 0.875rem; cursor: pointer; - transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + transition: all 0.2s ease; position: relative; - overflow: hidden; + min-width: 200px; + flex-shrink: 0; } .turtle-card::before { - content: ''; - position: absolute; - top: 0; - left: 0; - right: 0; - height: 3px; - background: linear-gradient(90deg, #3b82f6, #60a5fa); - transform: scaleX(0); - transition: transform 0.3s ease; + display: none; } .turtle-card:hover { - border-color: #60a5fa; + border-color: #3b82f6; transform: translateY(-2px); - box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3), 0 0 20px rgba(96, 165, 250, 0.1); + box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15); } .turtle-card:hover::before { - transform: scaleX(1); + display: none; } .turtle-card.selected { - border-color: #60a5fa; - background: linear-gradient(135deg, #1e3a5f 0%, #0f172a 100%); - box-shadow: 0 0 0 2px rgba(96, 165, 250, 0.2), 0 8px 24px rgba(96, 165, 250, 0.3); + border-color: #3b82f6; + background: #eff6ff; + box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); } .turtle-card.selected::before { - transform: scaleX(1); + display: none; } .turtle-header { display: flex; justify-content: space-between; align-items: center; - margin-bottom: 1rem; - padding-bottom: 0.75rem; - border-bottom: 1px solid #334155; + margin-bottom: 0.625rem; + padding-bottom: 0.625rem; + border-bottom: 1px solid #e5e7eb; } .turtle-header h3 { - font-size: 1.125rem; + font-size: 0.875rem; font-weight: 700; - color: #f1f5f9; + color: #111827; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.375rem; } .turtle-header h3::before { content: '🐢'; - font-size: 1.25rem; + font-size: 1rem; } .mode-badge { @@ -216,58 +208,58 @@ .turtle-stats { display: flex; flex-direction: column; - gap: 0.625rem; + gap: 0.375rem; } .turtle-stats .stat { display: flex; justify-content: space-between; align-items: center; - font-size: 0.875rem; - padding: 0.5rem; - background: rgba(15, 23, 42, 0.5); - border-radius: 0.375rem; - border: 1px solid rgba(51, 65, 85, 0.5); + font-size: 0.75rem; + padding: 0.375rem; + background: #f9fafb; + border-radius: 0.25rem; + border: 1px solid #e5e7eb; } .turtle-stats .label { - color: #94a3b8; + color: #6b7280; font-weight: 500; display: flex; align-items: center; - gap: 0.5rem; + gap: 0.25rem; } .turtle-stats .value { - color: #f1f5f9; + color: #111827; font-weight: 600; font-family: 'Courier New', monospace; - font-size: 0.9rem; + font-size: 0.75rem; } .turtle-details { flex: 1; padding: 1.5rem; overflow-y: auto; - background: linear-gradient(180deg, #0f172a 0%, #020617 100%); + background: #ffffff; } .turtle-details::-webkit-scrollbar { - width: 10px; + width: 8px; } .turtle-details::-webkit-scrollbar-track { - background: #0f172a; - border-radius: 5px; + background: #f3f4f6; + border-radius: 4px; } .turtle-details::-webkit-scrollbar-thumb { - background: #334155; - border-radius: 5px; + background: #d1d5db; + border-radius: 4px; } .turtle-details::-webkit-scrollbar-thumb:hover { - background: #475569; + background: #9ca3af; } .turtle-details.empty { @@ -275,16 +267,25 @@ align-items: center; justify-content: center; flex-direction: column; - color: #64748b; - font-size: 1.25rem; - gap: 1rem; + color: #9ca3af; + font-size: 1rem; + gap: 0.75rem; } .turtle-details.empty::before { - content: '👈'; - font-size: 4rem; + content: '☝️'; + font-size: 3rem; opacity: 0.5; - animation: bounce 2s infinite; + animation: bounce-up 2s infinite; +} + +@keyframes bounce-up { + 0%, 100% { + transform: translateY(0); + } + 50% { + transform: translateY(-10px); + } } @keyframes bounce { @@ -297,41 +298,41 @@ } .turtle-details h2 { - font-size: 1.5rem; - margin-bottom: 1.25rem; - color: #f1f5f9; + font-size: 1.25rem; + margin-bottom: 1.5rem; + color: #111827; font-weight: 700; display: flex; align-items: center; - gap: 0.75rem; + gap: 0.5rem; padding-bottom: 0.75rem; - border-bottom: 2px solid #334155; + border-bottom: 2px solid #e5e7eb; } .turtle-details h2::before { content: '🐢'; - font-size: 1.5rem; + font-size: 1.25rem; } .detail-section { margin-bottom: 1.25rem; - padding: 1.25rem; - background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%); - border-radius: 0.75rem; - border: 1px solid #334155; - box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); - transition: all 0.3s ease; + padding: 1rem; + background: #ffffff; + border-radius: 0.5rem; + border: 1px solid #e5e7eb; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + transition: all 0.2s ease; } .detail-section:hover { - border-color: #475569; - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2); + border-color: #d1d5db; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .detail-section h3 { - font-size: 1.125rem; + font-size: 1rem; margin-bottom: 1rem; - color: #60a5fa; + color: #3b82f6; font-weight: 700; display: flex; align-items: center; @@ -339,9 +340,10 @@ } .detail-section h4 { - font-size: 1rem; - margin: 1.5rem 0 1rem; - color: #cbd5e1; + font-size: 0.875rem; + margin: 1rem 0 0.75rem; + color: #4b5563; + font-weight: 600; } .status-grid { @@ -355,19 +357,19 @@ flex-direction: column; gap: 0.375rem; padding: 0.75rem; - background: rgba(15, 23, 42, 0.6); - border-radius: 0.5rem; - border: 1px solid rgba(51, 65, 85, 0.5); + background: #f9fafb; + border-radius: 0.375rem; + border: 1px solid #e5e7eb; transition: all 0.2s ease; } .status-item:hover { - background: rgba(30, 41, 59, 0.6); - border-color: #60a5fa; + background: #f3f4f6; + border-color: #3b82f6; } .status-item .label { - color: #94a3b8; + color: #6b7280; font-size: 0.75rem; font-weight: 600; text-transform: uppercase; @@ -375,7 +377,7 @@ } .status-item .value { - color: #f1f5f9; + color: #111827; font-weight: 700; font-family: 'Courier New', monospace; font-size: 0.95rem; @@ -389,9 +391,9 @@ } .command-btn { - padding: 0.625rem 0.75rem; + padding: 0.75rem; border: none; - border-radius: 0.375rem; + border-radius: 0.5rem; font-size: 0.8125rem; font-weight: 600; cursor: pointer; @@ -402,11 +404,12 @@ justify-content: center; gap: 0.375rem; white-space: nowrap; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); } .command-btn:hover { - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); + transform: translateY(-1px); + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15); } .command-btn:active { @@ -450,15 +453,16 @@ display: flex; flex-direction: column; align-items: center; - gap: 0.375rem; - padding: 0.75rem; - background: #1e293b; + gap: 0.5rem; + padding: 1rem; + background: #f9fafb; border-radius: 0.5rem; + border: 1px solid #e5e7eb; } .movement-row { display: flex; - gap: 0.375rem; + gap: 0.5rem; justify-content: center; } @@ -467,24 +471,25 @@ } .movement-controls button { - width: 2.75rem; - height: 2.75rem; - border: 2px solid #334155; - background: #0f172a; - color: #60a5fa; - border-radius: 0.375rem; + width: 3rem; + height: 3rem; + border: 2px solid #e5e7eb; + background: #ffffff; + color: #3b82f6; + border-radius: 0.5rem; font-size: 1.25rem; cursor: pointer; transition: all 0.2s; display: flex; align-items: center; justify-content: center; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .movement-controls button:hover { - background: #1e293b; - border-color: #60a5fa; - box-shadow: 0 0 15px rgba(96, 165, 250, 0.3); + background: #eff6ff; + border-color: #3b82f6; + box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2); transform: scale(1.05); } @@ -500,11 +505,11 @@ } .action-btn { - padding: 0.625rem 0.75rem; - border: 2px solid #334155; - background: #0f172a; - color: #60a5fa; - border-radius: 0.375rem; + padding: 0.75rem; + border: 2px solid #e5e7eb; + background: #ffffff; + color: #3b82f6; + border-radius: 0.5rem; font-size: 0.8125rem; font-weight: 600; cursor: pointer; @@ -514,12 +519,13 @@ justify-content: center; gap: 0.375rem; white-space: nowrap; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .action-btn:hover { - border-color: #60a5fa; - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(96, 165, 250, 0.2); + border-color: #3b82f6; + transform: translateY(-1px); + box-shadow: 0 2px 8px rgba(59, 130, 246, 0.2); } .action-btn.dig { @@ -571,14 +577,15 @@ align-items: center; gap: 0.625rem; padding: 0.625rem; - background: #1e293b; - border: 1px solid #334155; + background: #f9fafb; + border: 1px solid #e5e7eb; border-radius: 0.375rem; transition: all 0.2s; } .inventory-item:hover { - border-color: #60a5fa; + border-color: #3b82f6; + background: #eff6ff; transform: translateX(4px); } @@ -589,13 +596,13 @@ .item-name { flex: 1; - color: #e2e8f0; + color: #111827; font-size: 0.8125rem; text-transform: capitalize; } .item-count { - color: #94a3b8; + color: #6b7280; font-weight: 600; font-family: 'Courier New', monospace; font-size: 0.8125rem;