diff --git a/public/healthz.json b/public/healthz.json index 2d8e345..04d0f5e 100644 --- a/public/healthz.json +++ b/public/healthz.json @@ -2,7 +2,7 @@ "status": "ok", "service": "aitherboard", "version": "0.3.0", - "buildTime": "2026-02-11T10:22:29.390Z", + "buildTime": "2026-02-11T10:31:42.382Z", "gitCommit": "unknown", - "timestamp": 1770805349390 + "timestamp": 1770805902382 } \ No newline at end of file diff --git a/src/app.css b/src/app.css index d64dddc..fac8908 100644 --- a/src/app.css +++ b/src/app.css @@ -1612,6 +1612,248 @@ body::before { border-color: #00ff00 !important; } +/* Terminal Theme - Profile Page */ +[data-design-theme="terminal"] .profile-page { + background-color: #000000 !important; + color: #00ff00 !important; +} + +[data-design-theme="terminal"] .profile-header { + background-color: #000000 !important; + color: #00ff00 !important; + border-bottom: 1px solid #00ff00 !important; +} + +[data-design-theme="terminal"] .profile-name { + color: #00ff00 !important; + text-shadow: 0 0 5px rgba(0, 255, 0, 0.8) !important; + font-family: 'Courier New', 'Courier', monospace !important; +} + +[data-design-theme="terminal"] .profile-header p, +[data-design-theme="terminal"] .profile-header .text-fog-text, +[data-design-theme="terminal"] .profile-header .text-fog-text-light, +[data-design-theme="terminal"] .profile-header .text-fog-dark-text, +[data-design-theme="terminal"] .profile-header .text-fog-dark-text-light { + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; +} + +[data-design-theme="terminal"] .profile-header a, +[data-design-theme="terminal"] .profile-header .text-fog-accent, +[data-design-theme="terminal"] .profile-header .text-fog-dark-accent { + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; +} + +[data-design-theme="terminal"] .profile-header a:hover { + text-shadow: 0 0 5px rgba(0, 255, 0, 0.9) !important; + box-shadow: 0 0 5px rgba(0, 255, 0, 0.3) !important; +} + +[data-design-theme="terminal"] .npub-text, +[data-design-theme="terminal"] .npub-display code { + background-color: #000000 !important; + border-color: #00ff00 !important; + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; + font-family: 'Courier New', 'Courier', monospace !important; + box-shadow: 0 0 5px rgba(0, 255, 0, 0.3) !important; +} + +[data-design-theme="terminal"] .profile-npub-section { + border-color: #00ff00 !important; +} + +[data-design-theme="terminal"] .profile-posts { + background-color: #000000 !important; + color: #00ff00 !important; +} + +[data-design-theme="terminal"] .profile-posts .tabs { + border-bottom-color: #00ff00 !important; +} + +[data-design-theme="terminal"] .profile-posts .tabs button { + border-radius: 0 !important; + border: 1px solid transparent !important; + border-bottom: 2px solid transparent !important; + background-color: transparent !important; + color: #00ff00 !important; + font-family: 'Courier New', 'Courier', monospace !important; + text-transform: uppercase !important; + letter-spacing: 1px !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; +} + +[data-design-theme="terminal"] .profile-posts .tabs button:hover { + border-color: #00ff00 !important; + box-shadow: 0 0 5px rgba(0, 255, 0, 0.3) !important; + background-color: rgba(0, 255, 0, 0.05) !important; +} + +[data-design-theme="terminal"] .profile-posts .tabs button.border-b-2, +[data-design-theme="terminal"] .profile-posts .tabs button[class*="border-fog-accent"], +[data-design-theme="terminal"] .profile-posts .tabs button[class*="border-fog-dark-accent"] { + border-bottom-color: #00ff00 !important; + border-bottom-width: 2px !important; + box-shadow: 0 0 10px rgba(0, 255, 0, 0.5) !important; + text-shadow: 0 0 5px rgba(0, 255, 0, 0.8) !important; +} + +[data-design-theme="terminal"] .wall-section { + background-color: #000000 !important; + color: #00ff00 !important; +} + +[data-design-theme="terminal"] .wall-title { + color: #00ff00 !important; + text-shadow: 0 0 5px rgba(0, 255, 0, 0.8) !important; + font-family: 'Courier New', 'Courier', monospace !important; + text-transform: uppercase !important; + letter-spacing: 1px !important; +} + +[data-design-theme="terminal"] .wall-form { + background-color: #000000 !important; + border-color: #00ff00 !important; + color: #00ff00 !important; + box-shadow: 0 0 5px rgba(0, 255, 0, 0.3) !important; +} + +[data-design-theme="terminal"] .wall-comments-section { + background-color: #000000 !important; + color: #00ff00 !important; +} + +[data-design-theme="terminal"] .wall-comments { + background-color: #000000 !important; +} + +[data-design-theme="terminal"] .pins-list, +[data-design-theme="terminal"] .notifications-list, +[data-design-theme="terminal"] .interactions-list { + background-color: #000000 !important; + color: #00ff00 !important; +} + +[data-design-theme="terminal"] .nip05-valid { + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.8) !important; +} + +[data-design-theme="terminal"] .nip05-invalid, +[data-design-theme="terminal"] .nip05-invalid-button { + color: #ff0000 !important; + text-shadow: 0 0 3px rgba(255, 0, 0, 0.8) !important; +} + +[data-design-theme="terminal"] .nip05-invalid-button:hover { + background-color: rgba(255, 0, 0, 0.1) !important; + box-shadow: 0 0 5px rgba(255, 0, 0, 0.5) !important; +} + +[data-design-theme="terminal"] .nip05-checking { + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; +} + +/* Terminal Theme - Payment Addresses */ +[data-design-theme="terminal"] .payment-addresses { + background-color: #000000 !important; + color: #00ff00 !important; +} + +[data-design-theme="terminal"] .payment-addresses .text-fog-text-light, +[data-design-theme="terminal"] .payment-addresses .text-fog-dark-text-light, +[data-design-theme="terminal"] .payment-addresses .text-sm { + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; +} + +[data-design-theme="terminal"] .addresses-list { + background-color: #000000 !important; + color: #00ff00 !important; +} + +[data-design-theme="terminal"] .addresses-list h3 { + color: #00ff00 !important; + text-shadow: 0 0 5px rgba(0, 255, 0, 0.8) !important; + font-family: 'Courier New', 'Courier', monospace !important; + text-transform: uppercase !important; + letter-spacing: 1px !important; +} + +[data-design-theme="terminal"] .payment-event-info { + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; +} + +[data-design-theme="terminal"] .payment-event-info .text-xs, +[data-design-theme="terminal"] .payment-event-info .text-fog-text-light, +[data-design-theme="terminal"] .payment-event-info .text-fog-dark-text-light { + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; +} + +[data-design-theme="terminal"] .address-item { + background-color: #001a00 !important; + border: none !important; + color: #00ff00 !important; +} + +[data-design-theme="terminal"] .address-item .text-sm, +[data-design-theme="terminal"] .address-item .font-medium { + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; + font-family: 'Courier New', 'Courier', monospace !important; +} + +[data-design-theme="terminal"] .address-item code { + background-color: #000000 !important; + border: 1px solid #00ff00 !important; + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; + font-family: 'Courier New', 'Courier', monospace !important; + box-shadow: 0 0 5px rgba(0, 255, 0, 0.3) !important; +} + +[data-design-theme="terminal"] .address-item .bg-fog-highlight, +[data-design-theme="terminal"] .address-item .bg-fog-dark-highlight { + background-color: #000000 !important; + border: 1px solid #00ff00 !important; +} + +[data-design-theme="terminal"] .address-item button { + background-color: transparent !important; + border: 1px solid #00ff00 !important; + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; + font-family: 'Courier New', 'Courier', monospace !important; + text-transform: uppercase !important; + letter-spacing: 1px !important; + padding: 0.25rem 0.5rem !important; + border-radius: 0 !important; + box-shadow: 0 0 5px rgba(0, 255, 0, 0.3) !important; +} + +[data-design-theme="terminal"] .address-item button:hover { + background-color: rgba(0, 255, 0, 0.1) !important; + box-shadow: 0 0 10px rgba(0, 255, 0, 0.6) !important; + text-shadow: 0 0 5px rgba(0, 255, 0, 0.9) !important; +} + +[data-design-theme="terminal"] .address-item .text-fog-accent, +[data-design-theme="terminal"] .address-item .text-fog-dark-accent { + color: #00ff00 !important; + text-shadow: 0 0 3px rgba(0, 255, 0, 0.6) !important; +} + +[data-design-theme="terminal"] .address-item .hover\:underline:hover { + text-decoration: underline !important; + text-shadow: 0 0 5px rgba(0, 255, 0, 0.9) !important; +} + [data-design-theme="terminal"] .branch-name, [data-design-theme="terminal"] .branch-commit, [data-design-theme="terminal"] .branch-message, diff --git a/src/lib/components/modals/DeleteAllEventsModal.svelte b/src/lib/components/modals/DeleteAllEventsModal.svelte index f5d303c..6e75cb2 100644 --- a/src/lib/components/modals/DeleteAllEventsModal.svelte +++ b/src/lib/components/modals/DeleteAllEventsModal.svelte @@ -23,10 +23,15 @@ let publicationModalOpen = $state(false); let publicationResults = $state<{ success: string[]; failed: Array<{ relay: string; error: string }> } | null>(null); let availableRelays = $state([]); - - // Load available relays when modal opens - $effect(() => { - if (open) { + + // Track previous open state (non-reactive to avoid infinite loops) + let previousOpen = false; + + // Load available relays when modal opens (only on transition from closed to open) + $effect.pre(() => { + const wasOpen = previousOpen; + previousOpen = open; + if (open && !wasOpen) { loadAvailableRelays(); } }); @@ -137,11 +142,13 @@ // Clear the form after successful publication reason = ''; selectedRelays = new Set(); - // Close the modal after a delay and refresh the profile page + // Close the modal immediately to prevent any state issues + close(); + // Navigate to home page after a delay (to show publication status) + // Navigate away instead of reloading to avoid doom loop + // The profile page would be blank anyway since all events are deleted setTimeout(() => { - close(); - // Reload the current page to refresh the UI (profile should be blank) - window.location.reload(); + goto('/'); }, 2000); } } catch (error) { @@ -171,7 +178,10 @@ aria-labelledby="delete-all-modal-title" tabindex="-1" > -