:root { /* Light theme colors */ --primary-color: #2196F3; --primary-dark: #1976D2; --secondary-color: #4CAF50; --secondary-dark: #45a049; --background: #f8f9fa; --surface: #ffffff; --text-primary: #212121; --text-secondary: #666666; --border-color: #e0e0e0; --shadow-color: rgba(0, 0, 0, 0.1); --error-color: #f44336; --success-color: #4CAF50; } [data-theme="dark"] { --primary-color: #64B5F6; --primary-dark: #42A5F5; --secondary-color: #81C784; --secondary-dark: #66BB6A; --background: #121212; --surface: #1E1E1E; --text-primary: #FFFFFF; --text-secondary: #B0B0B0; --border-color: #333333; --shadow-color: rgba(0, 0, 0, 0.3); } /* Base Styles */ * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; background-color: var(--background); color: var(--text-primary); line-height: 1.6; transition: background-color 0.3s, color 0.3s; touch-action: manipulation; -webkit-tap-highlight-color: transparent; } .app-container { display: flex; flex-direction: column; min-height: 100vh; } /* Header Styles */ .app-header { background-color: var(--surface); padding: 1rem; box-shadow: 0 2px 4px var(--shadow-color); display: flex; justify-content: space-between; align-items: center; z-index: 100; } .header-left { display: flex; align-items: center; gap: 2rem; } .header-left h1 { font-size: 1.5rem; color: var(--primary-color); margin: 0; } .connection-status { display: flex; align-items: center; gap: 1rem; } .connection-form { display: flex; gap: 0.5rem; } .status { padding: 0.4rem 0.8rem; border-radius: 1rem; font-size: 0.875rem; font-weight: 500; } .status.connected { background-color: var(--success-color); color: white; } .status.disconnected { background-color: var(--error-color); color: white; } .header-right { display: flex; gap: 0.5rem; } /* Main Content */ .app-main { flex: 1; display: flex; padding: 1rem; gap: 1rem; position: relative; overflow: hidden; } .content-panel { flex: 1; display: flex; flex-direction: column; gap: 1rem; max-width: 1200px; margin: 0 auto; width: 100%; } /* Capture Section */ .capture-section { background-color: var(--surface); border-radius: 0.5rem; box-shadow: 0 2px 4px var(--shadow-color); padding: 1rem; } .toolbar { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; padding: 0.5rem; background-color: var(--surface); border-radius: 0.5rem; } .toolbar-buttons { display: grid; grid-template-columns: repeat(auto-fit, minmax(min-content, max-content)); gap: 1rem; justify-content: start; align-items: center; } .analysis-button { display: flex; justify-content: center; margin-top: 1rem; padding: 1rem; } .image-preview { position: relative; border-radius: 0.5rem; overflow: hidden; background-color: var(--background); margin: 0; padding: 1rem; } .image-container { display: inline-block; position: relative; margin: 0 auto; } #screenshotImg { display: block; width: auto; height: auto; max-width: 100%; border-radius: 0.5rem; } @media (max-width: 768px) { .toolbar-buttons { flex-direction: row; gap: 0.5rem; } } /* Claude Panel */ .claude-panel { background-color: var(--surface); border-radius: 0.5rem; box-shadow: 0 2px 4px var(--shadow-color); padding: 1rem; flex: 1; display: flex; flex-direction: column; } .panel-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; } .panel-header h2 { font-size: 1.25rem; color: var(--text-primary); } .response-content { flex: 1; overflow-y: auto; padding: 1rem; background-color: var(--background); border-radius: 0.5rem; white-space: pre-wrap; font-size: 0.9375rem; line-height: 1.6; } /* Settings Panel */ .settings-panel { position: fixed; top: 0; right: 0; bottom: 0; width: 400px; max-width: 100vw; background-color: var(--surface); box-shadow: -2px 0 4px var(--shadow-color); z-index: 1000; transform: translateX(100%); transition: transform 0.3s ease; display: flex; flex-direction: column; } .settings-panel:not(.hidden) { transform: translateX(0); } .settings-content { flex: 1; overflow-y: auto; padding: 1rem; } .settings-section { margin-bottom: 2rem; } .settings-section h3 { color: var(--text-primary); margin-bottom: 1rem; font-size: 1.1rem; } /* Form Elements */ .setting-group { margin-bottom: 1rem; } .setting-group label { display: block; margin-bottom: 0.5rem; color: var(--text-secondary); font-size: 0.875rem; } input[type="text"], input[type="password"], input[type="number"], select, textarea { width: 100%; padding: 0.75rem; border: 1px solid var(--border-color); border-radius: 0.375rem; background-color: var(--background); color: var(--text-primary); font-size: 0.9375rem; transition: border-color 0.3s, box-shadow 0.3s; } input:focus, select:focus, textarea:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1); } .input-group { position: relative; display: flex; align-items: center; } .input-group input { padding-right: 2.5rem; } .input-group .btn-icon { position: absolute; right: 0.5rem; } .range-group { display: flex; align-items: center; gap: 1rem; } input[type="range"] { flex: 1; height: 4px; -webkit-appearance: none; background: var(--primary-color); border-radius: 2px; } input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; width: 16px; height: 16px; border-radius: 50%; background: var(--primary-color); cursor: pointer; border: 2px solid var(--surface); box-shadow: 0 1px 3px var(--shadow-color); } .checkbox-label { display: flex; align-items: center; gap: 0.5rem; cursor: pointer; } /* Buttons */ .btn-primary, .btn-secondary, .btn-icon { padding: 0.75rem 1.5rem; border: none; border-radius: 0.375rem; font-size: 0.9375rem; font-weight: 500; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; transition: all 0.2s; } .btn-primary { background-color: var(--primary-color); color: white; } .btn-primary:hover { background-color: var(--primary-dark); } .btn-secondary { background-color: var(--background); color: var(--text-primary); border: 1px solid var(--border-color); } .btn-secondary:hover { background-color: var(--border-color); } .btn-icon { padding: 0.5rem; border-radius: 0.375rem; background: transparent; color: var(--text-secondary); } .btn-icon:hover { background-color: var(--background); color: var(--text-primary); } button:disabled { opacity: 0.6; cursor: not-allowed; } /* Floating Action Button */ .fab { position: fixed; right: 2rem; bottom: 2rem; width: 3.5rem; height: 3.5rem; border-radius: 50%; background-color: var(--primary-color); color: white; border: none; cursor: pointer; box-shadow: 0 2px 8px var(--shadow-color); display: flex; align-items: center; justify-content: center; font-size: 1.5rem; transition: transform 0.2s, background-color 0.2s; z-index: 900; } .fab:hover { transform: scale(1.05); background-color: var(--primary-dark); } /* Toast Notifications */ .toast-container { position: fixed; bottom: 2rem; left: 50%; transform: translateX(-50%); z-index: 1000; display: flex; flex-direction: column; gap: 0.5rem; pointer-events: none; } .toast { background-color: var(--surface); color: var(--text-primary); padding: 1rem 1.5rem; border-radius: 0.375rem; box-shadow: 0 4px 6px var(--shadow-color); display: flex; align-items: center; gap: 0.75rem; pointer-events: auto; animation: toast-in 0.3s ease; } .toast.success { border-left: 4px solid var(--success-color); } .toast.error { border-left: 4px solid var(--error-color); } /* Crop Container */ .crop-container { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, 0.9); z-index: 1000; display: flex; flex-direction: column; } .crop-wrapper { flex: 1; position: relative; overflow: hidden; display: flex; align-items: center; justify-content: center; } .crop-area { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; } .crop-area img { max-width: 100%; max-height: 100%; } .crop-actions { padding: 1rem; display: flex; justify-content: center; gap: 1rem; background-color: var(--surface); } /* Animations */ @keyframes toast-in { from { transform: translateY(100%); opacity: 0; } to { transform: translateY(0); opacity: 1; } } /* Responsive Design */ @media (max-width: 768px) { .app-header { flex-direction: column; gap: 1rem; padding: 0.75rem; } .header-left { flex-direction: column; gap: 1rem; width: 100%; } .connection-status { flex-direction: column; width: 100%; } .connection-form { width: 100%; } .connection-form input { flex: 1; } .header-right { width: 100%; justify-content: center; } .settings-panel { width: 100%; } .fab { right: 1rem; bottom: 1rem; } } /* History Panel */ .history-panel { position: fixed; top: 0; right: 0; bottom: 0; width: 400px; max-width: 100vw; background-color: var(--surface); box-shadow: -2px 0 4px var(--shadow-color); z-index: 1000; transform: translateX(100%); transition: transform 0.3s ease; display: flex; flex-direction: column; } .history-panel:not(.hidden) { transform: translateX(0); } .history-content { flex: 1; overflow-y: auto; padding: 1rem; } .history-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; color: var(--text-secondary); gap: 1rem; } .history-empty i { font-size: 3rem; } .history-item { background-color: var(--background); border-radius: 0.5rem; padding: 1rem; margin-bottom: 1rem; cursor: pointer; transition: all 0.2s; position: relative; border: 1px solid var(--border-color); } .history-item:hover { transform: translateY(-2px); box-shadow: 0 2px 8px var(--shadow-color); } .history-item[data-has-response="true"]::after { content: "Has Analysis"; position: absolute; top: 0.5rem; right: 0.5rem; background-color: var(--primary-color); color: white; padding: 0.25rem 0.5rem; border-radius: 1rem; font-size: 0.75rem; font-weight: 500; } .history-item-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; font-size: 0.875rem; color: var(--text-secondary); } .history-image { width: 100%; height: auto; border-radius: 0.25rem; margin-bottom: 1rem; } .history-response { background-color: var(--background); border-radius: 0.5rem; padding: 1rem; margin-top: 1rem; } .history-response h4 { color: var(--text-primary); margin-bottom: 0.5rem; font-size: 1rem; } .history-response pre { white-space: pre-wrap; font-family: inherit; font-size: 0.9375rem; line-height: 1.6; color: var(--text-secondary); margin: 0; } /* Utility Classes */ .hidden { display: none !important; } /* Additional Responsive Styles */ @media (max-width: 768px) { .history-panel { width: 100%; } .history-item { padding: 0.75rem; } }