summaryrefslogtreecommitdiff
path: root/frontend/src/components/document/nodes/ContractLogFeed.css
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/components/document/nodes/ContractLogFeed.css')
-rw-r--r--frontend/src/components/document/nodes/ContractLogFeed.css346
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;
+ }
+}