diff options
Diffstat (limited to 'frontend/src/components/document/nodes/ContractLogFeed.css')
| -rw-r--r-- | frontend/src/components/document/nodes/ContractLogFeed.css | 346 |
1 files changed, 346 insertions, 0 deletions
diff --git a/frontend/src/components/document/nodes/ContractLogFeed.css b/frontend/src/components/document/nodes/ContractLogFeed.css new file mode 100644 index 0000000..b5dd15d --- /dev/null +++ b/frontend/src/components/document/nodes/ContractLogFeed.css @@ -0,0 +1,346 @@ +/* ============================================ + Contract Log Feed + ============================================ */ + +.contract-log-feed { + display: flex; + flex-direction: column; + background: #1a1d23; + border: 1px solid #2d3039; + border-radius: 8px; + overflow: hidden; + margin-top: 0.5rem; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; + font-size: 13px; + max-height: 420px; + animation: logFeedSlideIn 0.25s ease-out; +} + +@keyframes logFeedSlideIn { + from { + opacity: 0; + transform: translateY(-6px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +/* ---- Header ---- */ +.contract-log-feed-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 0.5rem 0.75rem; + background: #22252b; + border-bottom: 1px solid #2d3039; +} + +.contract-log-feed-title { + display: flex; + align-items: center; + gap: 0.5rem; +} + +.contract-log-feed-name { + font-weight: 600; + font-size: 0.82rem; + color: #e5e7eb; +} + +.contract-log-feed-status { + font-size: 0.65rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.04em; + padding: 0.1rem 0.4rem; + border-radius: 8px; +} + +.contract-log-feed-status--running, +.contract-log-feed-status--starting { + background: rgba(245, 158, 11, 0.2); + color: #fbbf24; + animation: statusPulse 2s ease-in-out infinite; +} + +.contract-log-feed-status--completed { + background: rgba(16, 185, 129, 0.2); + color: #34d399; +} + +.contract-log-feed-status--failed { + background: rgba(239, 68, 68, 0.2); + color: #f87171; +} + +.contract-log-feed-status--pending, +.contract-log-feed-status--ready { + background: rgba(107, 114, 128, 0.2); + color: #9ca3af; +} + +.contract-log-feed-close { + background: none; + border: none; + color: #6b7280; + font-size: 1.1rem; + cursor: pointer; + padding: 0 0.25rem; + line-height: 1; + border-radius: 3px; + transition: color 0.15s, background 0.15s; +} + +.contract-log-feed-close:hover { + color: #e5e7eb; + background: rgba(255, 255, 255, 0.08); +} + +/* ---- Log Content ---- */ +.contract-log-feed-content { + flex: 1; + overflow-y: auto; + padding: 0.5rem 0.75rem; + min-height: 80px; + max-height: 240px; + scrollbar-width: thin; + scrollbar-color: #3a3f4b transparent; +} + +.contract-log-feed-content::-webkit-scrollbar { + width: 5px; +} + +.contract-log-feed-content::-webkit-scrollbar-thumb { + background: #3a3f4b; + border-radius: 3px; +} + +.contract-log-feed-empty { + color: #6b7280; + font-size: 0.82rem; + font-style: italic; + text-align: center; + padding: 1.5rem 0; +} + +/* ---- Log Entry ---- */ +.contract-log-entry { + display: flex; + gap: 0.5rem; + padding: 0.2rem 0; + line-height: 1.5; + animation: entryFadeIn 0.2s ease-out; +} + +@keyframes entryFadeIn { + from { opacity: 0; } + to { opacity: 1; } +} + +.contract-log-entry-time { + flex-shrink: 0; + font-size: 0.7rem; + color: #4b5563; + font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace; + line-height: 1.65; +} + +.contract-log-entry-text { + color: #d1d5db; + white-space: pre-wrap; + word-break: break-word; + font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace; + font-size: 0.78rem; +} + +.contract-log-entry--user .contract-log-entry-text { + color: #93c5fd; +} + +.contract-log-entry--user::before { + content: '>'; + color: #3b82f6; + font-weight: 700; + font-family: monospace; + flex-shrink: 0; + line-height: 1.5; +} + +.contract-log-entry--system .contract-log-entry-text { + color: #fbbf24; + font-style: italic; +} + +/* ---- Error ---- */ +.contract-log-feed-error { + padding: 0.4rem 0.75rem; + background: rgba(239, 68, 68, 0.12); + border-top: 1px solid rgba(239, 68, 68, 0.25); + color: #f87171; + font-size: 0.78rem; +} + +/* ---- Interaction Bar ---- */ +.contract-interaction-bar { + border-top: 1px solid #2d3039; + padding: 0.5rem 0.75rem; + background: #22252b; +} + +.contract-interaction-bar--disabled { + display: flex; + align-items: center; + justify-content: center; + padding: 0.6rem 0.75rem; +} + +.contract-interaction-disabled-text { + color: #6b7280; + font-size: 0.78rem; + font-style: italic; +} + +.contract-interaction-message-row { + display: flex; + align-items: flex-end; + gap: 0.4rem; + position: relative; +} + +.contract-message-input { + flex: 1; + background: #1a1d23; + border: 1px solid #3a3f4b; + border-radius: 6px; + color: #e5e7eb; + padding: 0.4rem 0.6rem; + font-size: 0.82rem; + font-family: inherit; + resize: none; + min-height: 32px; + max-height: 80px; + line-height: 1.4; + outline: none; + transition: border-color 0.15s; +} + +.contract-message-input::placeholder { + color: #4b5563; + font-size: 0.78rem; +} + +.contract-message-input:focus { + border-color: #3b82f6; +} + +.contract-message-input:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.contract-send-btn { + flex-shrink: 0; + background: #3b82f6; + color: #fff; + border: none; + border-radius: 6px; + padding: 0.4rem 0.85rem; + font-size: 0.8rem; + font-weight: 500; + cursor: pointer; + transition: background 0.15s, opacity 0.15s; + min-height: 32px; +} + +.contract-send-btn:hover:not(:disabled) { + background: #2563eb; +} + +.contract-send-btn:disabled { + opacity: 0.4; + cursor: not-allowed; +} + +.contract-sent-indicator { + position: absolute; + right: 0; + top: -1.4rem; + font-size: 0.7rem; + color: #34d399; + font-weight: 500; + animation: sentFlash 1.5s ease-out forwards; +} + +@keyframes sentFlash { + 0% { + opacity: 1; + transform: translateY(0); + } + 70% { + opacity: 1; + } + 100% { + opacity: 0; + transform: translateY(-4px); + } +} + +/* ---- Actions Row ---- */ +.contract-interaction-actions-row { + display: flex; + align-items: center; + gap: 0.5rem; + margin-top: 0.4rem; +} + +.contract-interrupt-btn { + background: transparent; + color: #ef4444; + border: 1px solid rgba(239, 68, 68, 0.3); + border-radius: 6px; + padding: 0.3rem 0.7rem; + font-size: 0.75rem; + font-weight: 500; + cursor: pointer; + transition: background 0.15s, border-color 0.15s, color 0.15s; +} + +.contract-interrupt-btn:hover:not(:disabled) { + background: rgba(239, 68, 68, 0.1); + border-color: rgba(239, 68, 68, 0.5); +} + +.contract-interrupt-btn--confirm { + background: rgba(239, 68, 68, 0.15); + border-color: #ef4444; + color: #f87171; + animation: confirmPulse 0.8s ease-in-out infinite; +} + +@keyframes confirmPulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.7; } +} + +.contract-interrupt-btn:disabled { + opacity: 0.4; + cursor: not-allowed; +} + +/* ---- Responsive ---- */ +@media (max-width: 640px) { + .contract-log-feed { + max-height: 360px; + } + + .contract-log-feed-content { + max-height: 180px; + } + + .contract-message-input::placeholder { + font-size: 0.72rem; + } +} |
