diff --git a/src/web/public/app.js b/src/web/public/app.js
index cc7ba772..1580691b 100644
--- a/src/web/public/app.js
+++ b/src/web/public/app.js
@@ -509,17 +509,12 @@ class ClaudemanApp {
// Clear after 30 seconds to allow re-notification if loop restarts
setTimeout(() => this._shownCompletions?.delete(completionKey), 30000);
- this.showToast(`Loop completed: ${data.phrase}`, 'success');
// Update inner state to mark loop as inactive
const existing = this.innerStates.get(data.sessionId) || {};
if (existing.loop) {
existing.loop.active = false;
this.updateInnerState(data.sessionId, existing);
}
- // Show celebration animation if this is the active session
- if (data.sessionId === this.activeSessionId) {
- this.showRalphCelebration(data.phrase);
- }
});
}
@@ -2293,23 +2288,6 @@ class ClaudemanApp {
}
}
- showRalphCelebration(phrase) {
- const celebration = this.$('ralphCelebration');
- const text = this.$('ralphCelebrationText');
- if (!celebration) return;
-
- if (text) {
- text.textContent = phrase ? `${phrase}` : 'Complete!';
- }
-
- celebration.classList.add('show');
-
- // Auto-hide after 3 seconds
- setTimeout(() => {
- celebration.classList.remove('show');
- }, 3000);
- }
-
// Legacy method for backwards compatibility
getTodoIcon(status) {
return this.getRalphTaskIcon(status);
diff --git a/src/web/public/index.html b/src/web/public/index.html
index 171f1c2b..d7603cf0 100644
--- a/src/web/public/index.html
+++ b/src/web/public/index.html
@@ -152,18 +152,6 @@
-
-
diff --git a/src/web/public/styles.css b/src/web/public/styles.css
index b9f722a3..fdc84b9b 100644
--- a/src/web/public/styles.css
+++ b/src/web/public/styles.css
@@ -820,79 +820,6 @@ body {
text-decoration: line-through;
}
-/* Completion Celebration */
-.ralph-celebration {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- display: none;
- align-items: center;
- justify-content: center;
- background: rgba(10, 10, 10, 0.95);
- z-index: 10;
-}
-
-.ralph-celebration.show {
- display: flex;
- animation: ralph-celebration-in 0.3s ease-out;
-}
-
-@keyframes ralph-celebration-in {
- from { opacity: 0; }
- to { opacity: 1; }
-}
-
-.ralph-celebration-content {
- text-align: center;
-}
-
-.ralph-checkmark {
- width: 60px;
- height: 60px;
- margin: 0 auto 0.75rem;
-}
-
-.ralph-checkmark svg {
- width: 100%;
- height: 100%;
-}
-
-.ralph-checkmark-circle {
- fill: none;
- stroke: var(--green);
- stroke-width: 2;
- stroke-dasharray: 166;
- stroke-dashoffset: 166;
- animation: ralph-circle 0.6s ease-out forwards;
-}
-
-.ralph-checkmark-check {
- fill: none;
- stroke: var(--green);
- stroke-width: 3;
- stroke-linecap: round;
- stroke-linejoin: round;
- stroke-dasharray: 48;
- stroke-dashoffset: 48;
- animation: ralph-check 0.3s ease-out 0.4s forwards;
-}
-
-@keyframes ralph-circle {
- to { stroke-dashoffset: 0; }
-}
-
-@keyframes ralph-check {
- to { stroke-dashoffset: 0; }
-}
-
-.ralph-celebration-text {
- font-size: 1rem;
- font-weight: 600;
- color: var(--green);
-}
-
/* Empty state (legacy support) */
.inner-state-empty {
color: var(--text-muted);