diff --git a/src/index.html b/src/index.html
index 2d3bbf4..f2610db 100644
--- a/src/index.html
+++ b/src/index.html
@@ -359,6 +359,16 @@
Choose your preferred color scheme
+
+
+
+ Adjust message density and spacing
+
+
Preview
diff --git a/src/main.js b/src/main.js
index 3f6fb5f..28b2422 100644
--- a/src/main.js
+++ b/src/main.js
@@ -146,6 +146,30 @@ function loadSavedTheme() {
applyTheme(savedTheme);
}
+// Apply view mode
+function applyViewMode(mode) {
+ const body = document.body;
+
+ // Remove all view mode classes
+ body.classList.remove('view-compact', 'view-cozy', 'view-comfortable');
+
+ // Add the selected mode
+ body.classList.add(`view-${mode}`);
+
+ // Store preference
+ localStorage.setItem('claudia-view-mode', mode);
+}
+
+// Load saved view mode
+function loadSavedViewMode() {
+ const savedMode = localStorage.getItem('claudia-view-mode') || 'cozy';
+ const viewModeSelect = document.getElementById('view-mode-select');
+ if (viewModeSelect) {
+ viewModeSelect.value = savedMode;
+ }
+ applyViewMode(savedMode);
+}
+
// Helper function to get avatar URL
async function getAvatarUrl(avatarFilename) {
if (!avatarFilename) return null;
@@ -1179,6 +1203,14 @@ function setupAppControls() {
applyTheme(e.target.value);
});
}
+
+ // Setup view mode selector
+ const viewModeSelect = document.getElementById('view-mode-select');
+ if (viewModeSelect) {
+ viewModeSelect.addEventListener('change', (e) => {
+ applyViewMode(e.target.value);
+ });
+ }
}
// Keyboard shortcuts
@@ -1573,8 +1605,9 @@ window.addEventListener('DOMContentLoaded', () => {
messageInput.focus();
setStatus('Ready');
- // Load saved theme before anything else
+ // Load saved preferences before anything else
loadSavedTheme();
+ loadSavedViewMode();
loadExistingConfig();
});
diff --git a/src/styles.css b/src/styles.css
index 163e370..e211e15 100644
--- a/src/styles.css
+++ b/src/styles.css
@@ -1324,6 +1324,128 @@ body {
cursor: pointer;
}
+/* View Mode Styles */
+
+/* Compact Mode */
+body.view-compact .messages-list {
+ gap: 10px;
+ padding: 16px;
+}
+
+body.view-compact .message-content {
+ padding: 8px 12px;
+ font-size: 13px;
+ line-height: 1.5;
+ border-radius: 10px;
+}
+
+body.view-compact .avatar-circle {
+ width: 24px;
+ height: 24px;
+}
+
+body.view-compact .character-name-indicator {
+ font-size: 10px;
+ margin-bottom: 2px;
+}
+
+body.view-compact .message-timestamp {
+ font-size: 9px;
+ margin-top: 2px;
+}
+
+body.view-compact .swipe-controls {
+ margin-top: 6px;
+ padding: 3px 6px;
+}
+
+body.view-compact .message-content h1 {
+ font-size: 1.3em;
+}
+
+body.view-compact .message-content h2 {
+ font-size: 1.2em;
+}
+
+body.view-compact .message-content h3 {
+ font-size: 1.05em;
+}
+
+body.view-compact .message-content code {
+ font-size: 0.85em;
+}
+
+/* Cozy Mode (Default) - Already defined in base styles */
+body.view-cozy .messages-list {
+ gap: 16px;
+ padding: 20px;
+}
+
+/* Comfortable Mode */
+body.view-comfortable .messages-list {
+ gap: 24px;
+ padding: 24px;
+}
+
+body.view-comfortable .message-content {
+ padding: 16px 20px;
+ font-size: 15px;
+ line-height: 1.7;
+ border-radius: 14px;
+}
+
+body.view-comfortable .avatar-circle {
+ width: 32px;
+ height: 32px;
+}
+
+body.view-comfortable .character-name-indicator {
+ font-size: 12px;
+ margin-bottom: 6px;
+}
+
+body.view-comfortable .message-timestamp {
+ font-size: 11px;
+ margin-top: 6px;
+}
+
+body.view-comfortable .swipe-controls {
+ margin-top: 10px;
+ padding: 5px 10px;
+}
+
+body.view-comfortable .message-content h1 {
+ font-size: 1.6em;
+ margin-top: 20px;
+ margin-bottom: 12px;
+}
+
+body.view-comfortable .message-content h2 {
+ font-size: 1.4em;
+ margin-top: 18px;
+ margin-bottom: 10px;
+}
+
+body.view-comfortable .message-content h3 {
+ font-size: 1.2em;
+ margin-top: 16px;
+ margin-bottom: 8px;
+}
+
+body.view-comfortable .message-content p + p {
+ margin-top: 16px;
+}
+
+body.view-comfortable .message-content code {
+ font-size: 0.95em;
+ padding: 3px 8px;
+}
+
+body.view-comfortable .message-content pre {
+ padding: 16px;
+ margin: 12px 0;
+}
+
/* Responsive */
@media (max-width: 600px) {
.messages-list {