/** * Natural Language Interface Styles * Positioned in left sidebar alongside build/train controls */ .nl-interface { background: rgba(0, 0, 0, 0.85); border: 2px solid #4A90E2; border-radius: 8px; padding: 12px; margin: 10px 0; width: 100%; /* Fill left sidebar width */ box-sizing: border-box; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.5); } .nl-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1px solid rgba(74, 144, 226, 0.3); } .nl-icon { font-size: 1.5em; margin-right: 8px; } .nl-title { flex: 1; font-weight: bold; color: #4A90E2; font-size: 1.1em; } .nl-toggle-btn { background: none; border: 1px solid #4A90E2; color: #4A90E2; padding: 4px 8px; border-radius: 4px; cursor: pointer; transition: all 0.2s; } .nl-toggle-btn:hover { background: #4A90E2; color: white; } .nl-toggle-btn .toggle-icon { display: inline-block; font-size: 0.8em; } .nl-body { max-height: 600px; overflow-y: auto; transition: max-height 0.3s ease; } .nl-body.collapsed { max-height: 0; overflow: hidden; } .nl-status { display: flex; align-items: center; margin-bottom: 10px; padding: 8px; background: rgba(255, 255, 255, 0.05); border-radius: 4px; } .status-dot { width: 10px; height: 10px; border-radius: 50%; margin-right: 8px; animation: pulse 2s infinite; } .status-dot.ready { background: #2ecc71; box-shadow: 0 0 8px #2ecc71; } .status-dot.loading { background: #f39c12; box-shadow: 0 0 8px #f39c12; } .status-dot.error { background: #e74c3c; box-shadow: 0 0 8px #e74c3c; } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } #nl-status-text { color: #bbb; font-size: 0.9em; } .nl-input-container { display: flex; gap: 8px; margin-bottom: 15px; } .nl-input { flex: 1; background: rgba(255, 255, 255, 0.1); border: 1px solid #4A90E2; color: white; padding: 10px; border-radius: 4px; font-size: 0.95em; transition: all 0.2s; } .nl-input:focus { outline: none; border-color: #5dade2; background: rgba(255, 255, 255, 0.15); box-shadow: 0 0 8px rgba(74, 144, 226, 0.3); } .nl-input:disabled { opacity: 0.5; cursor: not-allowed; } .nl-input::placeholder { color: #888; } .nl-send-btn { background: linear-gradient(135deg, #4A90E2, #357ABD); border: none; color: white; padding: 10px 20px; border-radius: 4px; cursor: pointer; font-weight: bold; transition: all 0.2s; } .nl-send-btn:hover:not(:disabled) { background: linear-gradient(135deg, #5dade2, #4A90E2); transform: translateY(-2px); box-shadow: 0 4px 8px rgba(74, 144, 226, 0.4); } .nl-send-btn:active:not(:disabled) { transform: translateY(0); } .nl-send-btn:disabled { opacity: 0.5; cursor: not-allowed; } .nl-examples { background: rgba(255, 255, 255, 0.05); border: 1px solid rgba(74, 144, 226, 0.3); border-radius: 4px; padding: 10px; margin-bottom: 15px; } .examples-header { color: #4A90E2; font-weight: bold; margin-bottom: 8px; font-size: 0.9em; } .examples-list { display: flex; flex-direction: column; gap: 6px; } .example-item { background: rgba(74, 144, 226, 0.1); border: 1px solid rgba(74, 144, 226, 0.3); padding: 8px 10px; border-radius: 4px; cursor: pointer; transition: all 0.2s; color: #ccc; font-size: 0.85em; } .example-item:hover { background: rgba(74, 144, 226, 0.2); border-color: #4A90E2; transform: translateX(4px); } .nl-confirmation { background: linear-gradient(135deg, rgba(46, 204, 113, 0.1), rgba(52, 152, 219, 0.1)); border: 2px solid #2ecc71; border-radius: 6px; padding: 15px; margin-top: 15px; animation: slideIn 0.3s ease; } @keyframes slideIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } .confirmation-header { color: #2ecc71; font-weight: bold; margin-bottom: 10px; font-size: 1em; } .confirmation-content { background: rgba(0, 0, 0, 0.3); border-radius: 4px; padding: 10px; margin-bottom: 10px; } .confirmation-tool, .confirmation-params { margin-bottom: 8px; } .confirmation-tool strong, .confirmation-params strong { color: #4A90E2; } .confirmation-tool span, .confirmation-params pre { color: #ecf0f1; } #confirm-params { background: rgba(0, 0, 0, 0.4); padding: 8px; border-radius: 4px; overflow-x: auto; margin-top: 5px; font-family: 'Courier New', monospace; font-size: 0.85em; } .confirmation-buttons { display: flex; gap: 10px; } .confirm-btn { flex: 1; padding: 10px; border: none; border-radius: 4px; cursor: pointer; font-weight: bold; transition: all 0.2s; } .confirm-btn.execute { background: linear-gradient(135deg, #2ecc71, #27ae60); color: white; } .confirm-btn.execute:hover { background: linear-gradient(135deg, #27ae60, #229954); transform: translateY(-2px); box-shadow: 0 4px 8px rgba(46, 204, 113, 0.4); } .confirm-btn.cancel { background: linear-gradient(135deg, #e74c3c, #c0392b); color: white; } .confirm-btn.cancel:hover { background: linear-gradient(135deg, #c0392b, #a93226); transform: translateY(-2px); box-shadow: 0 4px 8px rgba(231, 76, 60, 0.4); } .confirm-btn:active { transform: translateY(0); } /* Responsive adjustments */ @media screen and (max-width: 768px) { .nl-interface { min-width: 280px; max-width: 100%; } .nl-input { font-size: 0.9em; } .example-item { font-size: 0.8em; } } /* Scrollbar styling for NL body */ .nl-body::-webkit-scrollbar { width: 6px; } .nl-body::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.2); border-radius: 3px; } .nl-body::-webkit-scrollbar-thumb { background: #4A90E2; border-radius: 3px; } .nl-body::-webkit-scrollbar-thumb:hover { background: #5dade2; }