@rubys/fly-explorer
Version:
A comprehensive web-based dashboard for managing Fly.io infrastructure using Model Context Protocol (MCP) integration with flyctl
2 lines (1 loc) • 46.2 kB
CSS
.app{height:100%;display:flex;flex-direction:column}.app-header{background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;padding:1rem 2rem;box-shadow:0 2px 4px #0000001a;display:flex;justify-content:space-between;align-items:center}.app-header h1{margin:0;font-size:1.5rem;font-weight:600}.header-actions{display:flex;gap:10px}.tool-explorer-btn{background:#fff3;color:#fff;border:1px solid rgba(255,255,255,.3);padding:8px 16px;border-radius:4px;cursor:pointer;font-size:14px;transition:all .2s}.tool-explorer-btn:hover{background:#ffffff4d;transform:translateY(-1px)}.app-body{display:flex;flex:1;overflow:hidden}.sidebar{width:300px;background:#f8f9fa;border-right:1px solid #e9ecef;overflow-y:auto;padding:1rem}.sidebar-section{margin-bottom:2rem}.sidebar-section h3{margin:0 0 .5rem;font-size:.875rem;text-transform:uppercase;color:#6c757d;font-weight:600}.resource-list{list-style:none;padding:0;margin:0}.resource-list li{padding:.5rem .75rem;margin-bottom:.25rem;border-radius:.375rem;cursor:pointer;transition:background-color .2s;display:flex;justify-content:space-between;align-items:center}.resource-list li:hover{background:#e9ecef}.resource-list li.selected{background:#6366f1;color:#fff}.resource-name{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.resource-type{font-size:.75rem;opacity:.7;text-transform:uppercase}.status{font-size:.75rem;padding:.125rem .5rem;border-radius:9999px;font-weight:500}.status.deployed,.status.started,.status.running{background:#10b981;color:#fff}.status.suspended,.status.stopped{background:#f59e0b;color:#fff}.status.dead,.status.failed{background:#ef4444;color:#fff}.main-content{flex:1;overflow:hidden;padding:2rem;display:flex;flex-direction:column}.welcome{text-align:center;padding:4rem 2rem}.welcome h2{font-size:2rem;margin-bottom:1rem;color:#374151}.welcome p{font-size:1.125rem;color:#6b7280}.app-details,.org-details{flex:1;display:flex;flex-direction:column;overflow:hidden}.app-details h2,.org-details h2{margin-top:0;margin-bottom:1.5rem;color:#111827;flex-shrink:0}.org-slug{color:#6b7280;margin-bottom:2rem;font-size:.875rem}.overview-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:2rem;gap:2rem}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem;flex:1}.overview-actions{display:flex;flex-direction:column;gap:1rem;min-width:200px}.manage-apps-btn{padding:12px 20px;background:#28a745;color:#fff;border:none;border-radius:6px;font-size:14px;font-weight:500;cursor:pointer;transition:all .2s;text-align:center}.manage-apps-btn:hover{background:#218838;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.stat-card{background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;padding:1.5rem;text-align:center;box-shadow:0 1px 3px #0000001a}.stat-card h3{margin:0 0 .5rem;font-size:.875rem;color:#6b7280;text-transform:uppercase;font-weight:600}.stat-number{font-size:2rem;font-weight:700;color:#6366f1}.recent-apps h3{margin-bottom:1rem;color:#374151}.app-list{display:flex;flex-direction:column;gap:.5rem}.app-item{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;background:#fff;border:1px solid #e5e7eb;border-radius:.375rem;cursor:pointer;transition:background-color .2s}.app-item:hover{background:#f9fafb}.app-name{font-weight:500;color:#374151}.apps-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.app-card{background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;padding:1.5rem;cursor:pointer;transition:all .2s;box-shadow:0 1px 3px #0000001a}.app-card:hover{box-shadow:0 4px 6px #0000001a;transform:translateY(-1px)}.app-card h4{margin:0 0 .5rem;color:#374151}.app-card p{margin:.25rem 0;font-size:.875rem;color:#6b7280}.tabs{display:flex;gap:.5rem;border-bottom:2px solid #e5e7eb;margin-bottom:1.5rem;flex-shrink:0}.tabs button{background:none;border:none;padding:.75rem 1.5rem;font-size:.875rem;font-weight:500;color:#6b7280;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s}.tabs button:hover{color:#374151}.tabs button.active{color:#6366f1;border-bottom-color:#6366f1}.tab-content{animation:fadeIn .3s ease-in-out;flex:1;display:flex;flex-direction:column;overflow:hidden}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.machines-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.machine-card{background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;padding:1.5rem;box-shadow:0 1px 3px #0000001a;cursor:pointer;transition:all .2s}.machine-card:hover{box-shadow:0 4px 6px #0000001a;transform:translateY(-1px)}.machine-card.selected{border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a}.machine-card h4{margin:0 0 1rem;font-family:monospace;font-size:.875rem;color:#374151}.machine-card p{margin:.5rem 0;font-size:.875rem;color:#6b7280}.machine-details{padding:1rem 0}.machine-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.machine-header-info{display:flex;align-items:center;gap:1rem}.machine-header h3{margin:0;font-family:monospace;color:#374151}.machine-controls{display:flex;gap:.5rem}.control-btn{padding:.5rem 1rem;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;min-width:80px}.control-btn:disabled{cursor:not-allowed;opacity:.6}.start-btn{background:#10b981;color:#fff}.start-btn:hover:not(:disabled){background:#059669}.start-btn.disabled{background:#6b7280}.stop-btn{background:#ef4444;color:#fff}.stop-btn:hover:not(:disabled){background:#dc2626}.stop-btn.disabled{background:#6b7280}.restart-btn{background:#f59e0b;color:#fff}.restart-btn:hover:not(:disabled){background:#d97706}.machine-sections{display:flex;flex-direction:column;gap:2rem}.machine-section{background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;padding:1.5rem;box-shadow:0 1px 3px #0000001a}.machine-section h4{margin:0 0 1rem;color:#374151;font-size:1.125rem}.info-grid{display:flex;flex-direction:column;gap:.75rem}.info-item{display:flex;flex-direction:column;gap:.25rem;padding:.75rem;background:#f8f9fa;border-radius:.375rem;border:1px solid #e9ecef}.info-item label{font-weight:600;color:#6b7280;font-size:.75rem;text-transform:uppercase;letter-spacing:.05em}.info-item span{color:#374151;font-family:monospace;font-size:.875rem;word-break:break-all;line-height:1.4}.config-json{background:#f8f9fa;border:1px solid #e9ecef;border-radius:.375rem;padding:1rem;overflow-x:auto;font-size:.75rem;color:#374151;max-height:400px;overflow-y:auto}.events-list{display:flex;flex-direction:column;gap:.5rem}.event-item{display:flex;gap:1rem;align-items:center;padding:.75rem;background:#f8f9fa;border-radius:.375rem;font-size:.875rem}.event-time{color:#6b7280;min-width:150px}.event-type{font-weight:500;color:#374151;min-width:100px}.event-status{padding:.125rem .5rem;border-radius:9999px;font-size:.75rem;font-weight:500}.checks-list{display:flex;flex-direction:column;gap:.5rem}.check-item{display:flex;gap:1rem;align-items:center;padding:.75rem;background:#f8f9fa;border-radius:.375rem;font-size:.875rem}.check-name{font-weight:500;color:#374151;min-width:120px}.check-status{padding:.125rem .5rem;border-radius:9999px;font-size:.75rem;font-weight:500}.check-output{color:#6b7280;flex:1}.empty-state{text-align:center;padding:3rem 2rem;color:#6b7280}.empty-state p{margin:.5rem 0}.resource-table{display:flex;flex-direction:column;gap:1rem}.resource-item{background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;padding:1.5rem;box-shadow:0 1px 3px #0000001a}.resource-item h4{margin:0 0 .5rem;color:#374151}.resource-item p{margin:.25rem 0;font-size:.875rem;color:#6b7280}.error{color:#ef4444;font-size:.875rem;padding:.5rem}.logs-viewer{display:flex;flex-direction:column;flex:1;min-height:0}.logs-controls{margin-bottom:1rem;padding:1rem;background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;box-shadow:0 1px 3px #0000001a}.logs-filters{display:flex;gap:1rem;align-items:center;flex-wrap:wrap}.logs-filters select{padding:.5rem;border:1px solid #d1d5db;border-radius:.375rem;background:#fff;font-size:.875rem;color:#374151}.refresh-logs-btn{padding:.5rem 1rem;background:#6366f1;color:#fff;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s}.refresh-logs-btn:hover:not(:disabled){background:#5b5fef}.refresh-logs-btn:disabled{background:#9ca3af;cursor:not-allowed}.logs-container{flex:1;background:#1f2937;border:1px solid #374151;border-radius:.5rem;overflow:hidden;display:flex;flex-direction:column}.logs-loading,.logs-empty{padding:2rem;text-align:center;color:#9ca3af}.logs-empty p{margin:.5rem 0}.logs-list{flex:1;overflow-y:auto;padding:.5rem;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.75rem;line-height:1.4}.log-entry{display:flex;gap:.75rem;padding:.25rem .5rem;margin-bottom:1px;white-space:pre-wrap;word-break:break-word}.log-entry:hover{background:#ffffff0d}.log-timestamp{color:#9ca3af;min-width:80px;flex-shrink:0}.log-level{min-width:50px;flex-shrink:0;font-weight:600;text-align:center;padding:.125rem .25rem;border-radius:.25rem;font-size:.625rem}.log-level-error{background:#ef4444;color:#fff}.log-level-warn{background:#f59e0b;color:#fff}.log-level-info{background:#3b82f6;color:#fff}.log-level-debug{background:#6b7280;color:#fff}.log-message{flex:1;color:#f3f4f6}.log-error .log-message{color:#fca5a5}.log-warn .log-message{color:#fcd34d}.secrets-management{display:flex;flex-direction:column;gap:1.5rem}.secrets-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.secrets-header h3{margin:0;color:#374151}.secrets-actions{display:flex;gap:.75rem}.add-secret-btn{padding:.5rem 1rem;background:#6366f1;color:#fff;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s}.add-secret-btn:hover:not(:disabled){background:#5b5fef}.add-secret-btn:disabled{background:#9ca3af;cursor:not-allowed}.add-secret-form{background:#f8f9fa;border:1px solid #e5e7eb;border-radius:.5rem;padding:1.5rem}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem}.form-group{display:flex;flex-direction:column;gap:.5rem}.form-group label{font-weight:500;color:#374151;font-size:.875rem}.form-group input{padding:.5rem;border:1px solid #d1d5db;border-radius:.375rem;font-size:.875rem;transition:border-color .2s,box-shadow .2s}.form-group input:focus{outline:none;border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a}.form-actions{display:flex;gap:.5rem}.save-btn{padding:.5rem 1rem;background:#10b981;color:#fff;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s}.save-btn:hover:not(:disabled){background:#059669}.save-btn:disabled{background:#9ca3af;cursor:not-allowed}.cancel-btn{padding:.5rem 1rem;background:#6b7280;color:#fff;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s}.cancel-btn:hover:not(:disabled){background:#4b5563}.secrets-list{display:flex;flex-direction:column;gap:.75rem}.secret-item{display:flex;justify-content:space-between;align-items:center;background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;padding:1rem 1.5rem;box-shadow:0 1px 3px #0000001a}.secret-info h4{margin:0 0 .25rem;color:#374151;font-family:monospace}.secret-info p{margin:0;font-size:.875rem;color:#6b7280}.delete-secret-btn{padding:.375rem .75rem;background:#ef4444;color:#fff;border:none;border-radius:.375rem;font-size:.75rem;font-weight:500;cursor:pointer;transition:background-color .2s}.delete-secret-btn:hover:not(:disabled){background:#dc2626}.delete-secret-btn:disabled{background:#9ca3af;cursor:not-allowed}.success-message{padding:.75rem 1rem;background:#d1fae5;border:1px solid #10b981;border-radius:.375rem;color:#059669;font-size:.875rem;font-weight:500}.error-message{padding:.75rem 1rem;background:#fee2e2;border:1px solid #ef4444;border-radius:.375rem;color:#dc2626;font-size:.875rem;font-weight:500}.warning-message{padding:.75rem 1rem;background:#fef3c7;border:1px solid #f59e0b;border-radius:.375rem;color:#92400e;font-size:.875rem;font-weight:500}.deploy-btn{padding:.5rem 1rem;background:#8b5cf6;color:#fff;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s}.deploy-btn:hover:not(:disabled){background:#7c3aed}.deploy-btn:disabled{background:#9ca3af;cursor:not-allowed}.volumes-management{display:flex;flex-direction:column;gap:1.5rem}.volumes-header{display:flex;justify-content:space-between;align-items:center;padding-bottom:1rem;border-bottom:1px solid #e5e7eb}.volumes-header h3{margin:0;color:#374151}.add-volume-btn{padding:.5rem 1rem;background:#6366f1;color:#fff;border:none;border-radius:.375rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s}.add-volume-btn:hover:not(:disabled){background:#5b5fef}.add-volume-btn:disabled{background:#9ca3af;cursor:not-allowed}.create-volume-form{background:#f8f9fa;border:1px solid #e5e7eb;border-radius:.5rem;padding:1.5rem}.create-volume-form .form-row{display:grid;grid-template-columns:2fr 1fr 1fr;gap:1rem;margin-bottom:1rem}.volumes-list{display:flex;flex-direction:column;gap:.75rem}.volume-item{display:flex;justify-content:space-between;align-items:center;background:#fff;border:1px solid #e5e7eb;border-radius:.5rem;padding:1rem 1.5rem;box-shadow:0 1px 3px #0000001a}.volume-info h4{margin:0 0 .5rem;color:#374151;font-family:monospace}.volume-details{display:flex;gap:1.5rem;font-size:.875rem;color:#6b7280}.volume-details span{display:flex;align-items:center;gap:.25rem}.volume-actions{display:flex;gap:.5rem}.extend-volume-btn{padding:.375rem .75rem;background:#3b82f6;color:#fff;border:none;border-radius:.375rem;font-size:.75rem;font-weight:500;cursor:pointer;transition:background-color .2s}.extend-volume-btn:hover:not(:disabled){background:#2563eb}.extend-volume-btn:disabled{background:#9ca3af;cursor:not-allowed}.delete-volume-btn{padding:.375rem .75rem;background:#ef4444;color:#fff;border:none;border-radius:.375rem;font-size:.75rem;font-weight:500;cursor:pointer;transition:background-color .2s}.delete-volume-btn:hover:not(:disabled){background:#dc2626}.delete-volume-btn:disabled{background:#9ca3af;cursor:not-allowed}@media (prefers-color-scheme: dark){.sidebar{background:#1f2937;border-right-color:#374151}.sidebar-section h3{color:#9ca3af}.resource-list li:hover{background:#374151}.welcome h2,.app-details h2{color:#f3f4f6}.welcome p{color:#d1d5db}.tabs{border-bottom-color:#4b5563}.tabs button{color:#d1d5db}.tabs button:hover{color:#f3f4f6}.machine-card,.resource-item{background:#1f2937;border-color:#374151}.machine-card h4,.resource-item h4{color:#f3f4f6}.machine-card p,.resource-item p{color:#d1d5db}.logs-controls{background:#1f2937;border-color:#374151}.logs-filters select{background:#374151;border-color:#4b5563;color:#f3f4f6}.machine-header h3{color:#f3f4f6}.secrets-header{border-bottom-color:#4b5563}.secrets-header h3{color:#f3f4f6}.add-secret-form{background:#374151;border-color:#4b5563}.form-group label{color:#f3f4f6}.form-group input{background:#4b5563;border-color:#6b7280;color:#f3f4f6}.form-group input:focus{border-color:#6366f1;background:#374151}.secret-item{background:#1f2937;border-color:#374151}.secret-info h4{color:#f3f4f6}.secret-info p{color:#d1d5db}.warning-message{background:#451a03;border-color:#92400e;color:#fbbf24}.volumes-header{border-bottom-color:#4b5563}.volumes-header h3{color:#f3f4f6}.create-volume-form{background:#374151;border-color:#4b5563}.create-volume-form select{background:#4b5563;border-color:#6b7280;color:#f3f4f6}.volume-item{background:#1f2937;border-color:#374151}.volume-info h4{color:#f3f4f6}.volume-details{color:#d1d5db}}.machines-management{padding:20px}.machines-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.add-machine-btn{padding:10px 20px;background-color:#5bc0de;color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background-color .3s}.add-machine-btn:hover{background-color:#46b8da}.machine-create-form{background-color:#f9f9f9;border:1px solid #ddd;border-radius:8px;padding:20px;margin-bottom:20px}.machine-create-form h3{margin-top:0;margin-bottom:20px;color:#333}.machine-create-form .form-group{margin-bottom:15px}.machine-create-form label{display:block;margin-bottom:5px;font-weight:700;color:#555}.machine-create-form input,.machine-create-form select{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;font-size:14px}.machine-create-form .form-section{margin-top:25px;padding-top:20px;border-top:1px solid #ddd}.machine-create-form .form-section h4{margin-top:0;margin-bottom:15px;color:#444}.machine-create-form .env-var,.machine-create-form .service-config,.machine-create-form .volume-config{display:flex;gap:10px;margin-bottom:10px;align-items:center}.machine-create-form .env-var input,.machine-create-form .service-config input,.machine-create-form .volume-config input{flex:1}.machine-create-form .env-var button,.machine-create-form .service-config button,.machine-create-form .volume-config button{padding:5px 10px;background-color:#d9534f;color:#fff;border:none;border-radius:4px;cursor:pointer;white-space:nowrap}.machine-create-form .form-actions{display:flex;gap:10px;margin-top:20px}.machine-create-form .form-actions button{padding:10px 20px;border:none;border-radius:4px;cursor:pointer;font-size:14px}.machine-create-form .form-actions button[type=submit]{background-color:#5cb85c;color:#fff}.machine-create-form .form-actions button[type=submit]:hover{background-color:#4cae4c}.machine-create-form .form-actions button[type=submit]:disabled{background-color:#ccc;cursor:not-allowed}.machine-create-form .form-actions button[type=button]{background-color:#6c757d;color:#fff}.machine-create-form .form-actions button[type=button]:hover{background-color:#5a6268}.machine-lifecycle{background-color:#f8f9fa;border-radius:8px;padding:20px}.machine-lifecycle h4{margin-top:0;margin-bottom:15px;color:#333}.machine-lifecycle .lifecycle-actions{display:flex;flex-direction:column;gap:20px}.machine-lifecycle .action-group{background-color:#fff;padding:15px;border-radius:6px;border:1px solid #e0e0e0}.machine-lifecycle .action-group h5{margin-top:0;margin-bottom:10px;color:#555;font-size:14px;text-transform:uppercase;letter-spacing:.5px}.machine-lifecycle .action-group button{margin-right:10px;margin-bottom:10px;padding:8px 16px;border:none;border-radius:4px;cursor:pointer;font-size:14px;transition:all .3s}.machine-lifecycle .action-group button:disabled{background-color:#ccc;color:#666;cursor:not-allowed}.machine-lifecycle .action-group button:not(:disabled):hover{transform:translateY(-1px);box-shadow:0 2px 5px #0003}.machine-lifecycle .action-group button:not(.danger){background-color:#007bff;color:#fff}.machine-lifecycle .action-group button.danger{background-color:#dc3545;color:#fff}.machine-lifecycle .action-group button.danger:hover:not(:disabled){background-color:#c82333}.machine-lifecycle .clone-form{margin-top:20px;padding:20px;background-color:#fff;border:1px solid #ddd;border-radius:6px}.machine-lifecycle .clone-form h5{margin-top:0;margin-bottom:15px}.machine-lifecycle .clone-form .form-group{margin-bottom:15px}.machine-lifecycle .clone-form label{display:block;margin-bottom:5px;font-weight:700;color:#555}.machine-lifecycle .clone-form input{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px}.machine-lifecycle .clone-form .form-actions{display:flex;gap:10px;margin-top:15px}.machine-lifecycle .clone-form .form-actions button{padding:8px 16px;border:none;border-radius:4px;cursor:pointer}.machine-lifecycle .clone-form .form-actions button:first-child{background-color:#28a745;color:#fff}.machine-lifecycle .clone-form .form-actions button:last-child{background-color:#6c757d;color:#fff}.mcp-tool-explorer{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000}.mcp-tool-explorer>div{background:#fff;border-radius:8px;width:90%;height:90vh;max-width:1200px;max-height:800px;display:flex;flex-direction:column;overflow:hidden}.explorer-header{display:flex;justify-content:space-between;align-items:center;padding:20px;border-bottom:1px solid #ddd;background:#f8f9fa}.explorer-header h2{margin:0;color:#333}.close-btn{background:none;border:none;font-size:24px;cursor:pointer;padding:5px 10px;color:#666}.close-btn:hover{color:#333}.explorer-content{display:flex;flex:1;overflow:hidden}.tools-panel{width:400px;border-right:1px solid #ddd;display:flex;flex-direction:column;height:100%;min-height:0}.search-box{padding:15px;border-bottom:1px solid #ddd}.search-box input{width:100%;padding:8px 12px;border:1px solid #ccc;border-radius:4px;font-size:14px}.tools-list{flex:1;overflow-y:auto;padding:10px;height:0}.tool-item{padding:15px;border:1px solid #e0e0e0;border-radius:6px;margin-bottom:10px;cursor:pointer;transition:all .2s;background:#fff}.tool-item:hover{border-color:#007bff;box-shadow:0 2px 5px #0000001a}.tool-item.selected{border-color:#007bff;background:#f0f8ff}.tool-item h4{margin:0 0 8px;color:#333;font-size:14px;font-family:monospace}.tool-item p{margin:0;color:#666;font-size:13px;line-height:1.4}.tool-details{flex:1;padding:20px;overflow-y:auto}.tool-details h3{margin:0 0 10px;color:#333;font-family:monospace}.tool-description{color:#666;margin-bottom:25px;font-style:italic}.tool-form h4{margin:0 0 15px;color:#444}.parameters-form{display:flex;flex-direction:column;gap:20px;margin-bottom:25px}.parameter-group{display:flex;flex-direction:column;gap:5px}.parameter-group label{font-weight:700;color:#555;display:flex;align-items:center;gap:5px}.required{color:#d9534f}.parameter-meta{display:flex;gap:10px;font-size:12px;margin-bottom:5px}.parameter-type{background:#e9ecef;padding:2px 6px;border-radius:3px;color:#495057;font-family:monospace}.parameter-description{color:#6c757d;font-style:italic}.parameter-group input,.parameter-group select,.parameter-group textarea{padding:8px 12px;border:1px solid #ccc;border-radius:4px;font-size:14px}.parameter-group input[type=checkbox]{width:auto;margin:0}.parameter-group textarea{resize:vertical;font-family:inherit}.no-parameters{color:#6c757d;font-style:italic;margin-bottom:25px}.form-actions{margin-bottom:25px}.execute-btn{padding:12px 24px;background:#28a745;color:#fff;border:none;border-radius:4px;font-size:16px;cursor:pointer;transition:background-color .2s}.execute-btn:hover:not(:disabled){background:#218838}.execute-btn:disabled{background:#6c757d;cursor:not-allowed}.result-section{background:#f8f9fa;border:1px solid #dee2e6;border-radius:6px;padding:15px}.result-section h4{margin:0 0 10px;color:#495057}.result-output{background:#fff;border:1px solid #dee2e6;border-radius:4px;padding:12px;margin:0;overflow-x:auto;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:13px;line-height:1.4;max-height:300px;overflow-y:auto}.no-tool-selected{display:flex;align-items:center;justify-content:center;height:100%;color:#6c757d;font-style:italic}.loading{text-align:center;padding:20px;color:#6c757d}.app-management-modal{position:fixed;top:0;left:0;right:0;bottom:0;background:#000c;display:flex;align-items:center;justify-content:center;z-index:1000}.app-management-modal .modal-content{background:#fff;border-radius:8px;width:90%;max-width:600px;max-height:80vh;overflow-y:auto}.app-management-modal .modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px;border-bottom:1px solid #ddd;background:#f8f9fa;border-radius:8px 8px 0 0}.app-management-modal .modal-header h2{margin:0;color:#333}.app-management-modal .close-btn{background:none;border:none;font-size:24px;cursor:pointer;padding:5px 10px;color:#666}.app-management-modal .close-btn:hover{color:#333}.app-management-modal .tabs{display:flex;border-bottom:1px solid #ddd;background:#f8f9fa}.app-management-modal .tabs button{flex:1;padding:15px;background:none;border:none;cursor:pointer;font-size:14px;font-weight:500;color:#666;transition:all .2s}.app-management-modal .tabs button:hover{background:#e9ecef;color:#333}.app-management-modal .tabs button.active{background:#fff;color:#007bff;border-bottom:2px solid #007bff;margin-bottom:-1px}.app-management-modal .tab-content{padding:20px}.app-form{display:flex;flex-direction:column;gap:20px}.app-form h3{margin:0 0 15px;color:#333}.app-form .form-group{display:flex;flex-direction:column;gap:5px}.app-form .form-group label{font-weight:700;color:#555;display:flex;align-items:center;gap:5px}.app-form .form-group input,.app-form .form-group select{padding:10px 12px;border:1px solid #ddd;border-radius:4px;font-size:14px}.app-form .form-group input:focus,.app-form .form-group select:focus{outline:none;border-color:#007bff;box-shadow:0 0 0 2px #007bff40}.app-form .form-group small{color:#6c757d;font-size:12px;font-style:italic}.checkbox-label{flex-direction:row;align-items:center;gap:8px;cursor:pointer}.checkbox-label input[type=checkbox]{width:auto;margin:0}.form-actions{display:flex;gap:10px;margin-top:10px}.form-actions button{padding:12px 20px;border:none;border-radius:4px;font-size:14px;cursor:pointer;transition:background-color .2s}.form-actions button[type=submit]{background:#007bff;color:#fff}.form-actions button[type=submit]:hover:not(:disabled){background:#0056b3}.form-actions button[type=submit]:disabled{background:#6c757d;cursor:not-allowed}.form-actions button[type=button]{background:#6c757d;color:#fff}.form-actions button[type=button]:hover{background:#5a6268}.danger-btn{background:#dc3545;color:#fff}.danger-btn:hover:not(:disabled){background:#c82333}.warning-box{background:#fff3cd;border:1px solid #ffeaa7;border-radius:4px;padding:15px;color:#856404;margin-bottom:15px}.required{color:#dc3545}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal,.modal-content{background:#fff;border-radius:8px;width:90%;max-width:800px;height:90%;max-height:800px;display:flex;flex-direction:column;box-shadow:0 4px 16px #00000026}.platform-info-modal{max-width:1000px;max-height:900px}.chat-modal{width:800px;height:600px}.settings-modal{width:700px;max-height:80vh}.chat-body{padding:0;overflow:hidden;height:100%}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:20px;border-bottom:1px solid #e9ecef;background:#f8f9fa;border-radius:8px 8px 0 0}.header-buttons{display:flex;align-items:center;gap:10px}.modal-header h2{margin:0;color:#333;font-size:1.5rem}.modal-body{flex:1;padding:20px;overflow-y:auto;background:#fff}.close-btn{background:none;border:none;font-size:24px;cursor:pointer;padding:5px 10px;color:#666;border-radius:4px;transition:all .2s}.close-btn:hover{color:#333;background:#e9ecef}.settings-btn{background:#007bff;border:none;color:#fff;padding:8px 12px;border-radius:6px;cursor:pointer;font-size:14px;transition:background-color .2s}.settings-btn:hover{background:#0056b3}.modal-tabs{display:flex;border-bottom:1px solid #e9ecef;background:#f8f9fa}.modal-tabs button{flex:1;padding:15px 20px;background:none;border:none;cursor:pointer;font-size:14px;font-weight:500;color:#666;transition:all .2s;border-bottom:3px solid transparent}.modal-tabs button:hover{background:#e9ecef;color:#333}.modal-tabs button.active{color:#6366f1;border-bottom-color:#6366f1;background:#fff}.modal-content{flex:1;padding:20px;overflow-y:auto}.modal-footer{padding:20px;border-top:1px solid #e9ecef;background:#f8f9fa;border-radius:0 0 8px 8px;text-align:right}.loading-state{display:flex;align-items:center;justify-content:center;height:200px;color:#6c757d;font-size:1.1rem}.error-message{background:#f8d7da;color:#721c24;padding:15px;border-radius:4px;border:1px solid #f5c6cb}.section-header{margin-bottom:30px}.section-header h3{margin:0 0 8px;color:#333;font-size:1.3rem}.section-header p{margin:0;color:#666;font-size:1rem}.vm-sizes-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px}.vm-size-card{background:#fff;border:1px solid #e9ecef;border-radius:8px;padding:20px;transition:all .2s}.vm-size-card:hover{border-color:#6366f1;box-shadow:0 2px 8px #6366f126;transform:translateY(-2px)}.vm-size-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.vm-size-header h4{margin:0;color:#333;font-size:1.1rem;font-weight:600}.vm-size-price{background:#6366f1;color:#fff;padding:4px 8px;border-radius:4px;font-size:.85rem;font-weight:500}.vm-size-specs{margin-bottom:15px}.spec-item{display:flex;justify-content:space-between;margin-bottom:8px;font-size:.9rem}.spec-label{color:#666;font-weight:500}.spec-value{color:#333;font-weight:600}.spec-tier{color:#666;font-weight:400;font-size:.85rem;margin-left:4px}.vm-size-use-cases{display:flex;flex-wrap:wrap;gap:6px}.use-case{background:#f8f9fa;color:#495057;padding:4px 8px;border-radius:12px;font-size:.8rem;border:1px solid #e9ecef}.regions-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:15px}.region-card{background:#fff;border:1px solid #e9ecef;border-radius:6px;padding:15px;text-align:center;transition:all .2s}.region-card:hover{border-color:#6366f1;box-shadow:0 2px 4px #6366f126}.region-code{font-size:1.1rem;font-weight:600;color:#6366f1;margin-bottom:5px}.region-name{color:#333;font-size:.9rem;margin-bottom:5px}.region-coords{color:#666;font-size:.8rem;font-family:monospace}.platform-status{max-width:600px}.status-summary{margin-bottom:30px}.status-indicator{display:flex;align-items:center;gap:10px;font-size:1.1rem;font-weight:500}.status-dot{width:12px;height:12px;border-radius:50%;background:#22c55e}.status-indicator.operational .status-dot{background:#22c55e}.status-indicator.degraded .status-dot{background:#f59e0b}.status-indicator.outage .status-dot{background:#ef4444}.incident-info,.notices-info{margin-bottom:25px}.incident-info h4,.notices-info h4{margin:0 0 15px;color:#333;font-size:1.1rem}.incident-card,.notice-card{background:#f8f9fa;border:1px solid #e9ecef;border-radius:6px;padding:15px;margin-bottom:10px}.incident-name{font-weight:600;color:#333;margin-bottom:8px}.incident-status,.incident-impact,.incident-time{font-size:.9rem;margin-bottom:4px}.incident-status .status,.incident-impact .impact{padding:2px 6px;border-radius:3px;font-size:.8rem;font-weight:500}.incident-status .status.investigating{background:#fef3c7;color:#92400e}.incident-status .status.resolved{background:#d1fae5;color:#065f46}.incident-impact .impact.minor{background:#fef3c7;color:#92400e}.incident-impact .impact.major{background:#fee2e2;color:#991b1b}.notice-card .notice-name{font-weight:500;color:#333;margin-bottom:8px}.notice-dates{display:flex;gap:15px;font-size:.85rem;color:#666}.status-unavailable{text-align:center;padding:40px;color:#666}.btn{padding:10px 20px;border:none;border-radius:4px;cursor:pointer;font-size:.9rem;font-weight:500;transition:all .2s}.btn-primary{background:#6366f1;color:#fff}.btn-primary:hover{background:#5b5fef}.ips-management{padding:1rem}.ips-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.ips-header h3{margin:0;color:#333;font-size:1.25rem}.refresh-btn{background:#6366f1;color:#fff;border:none;padding:8px 16px;border-radius:4px;cursor:pointer;font-size:14px;transition:all .2s}.refresh-btn:hover:not(:disabled){background:#5b5fef}.refresh-btn:disabled{background:#6c757d;cursor:not-allowed}.current-ips{margin-bottom:2rem}.current-ips h4{margin:0 0 1rem;color:#333;font-size:1.1rem}.no-ips{text-align:center;padding:2rem;color:#6b7280;background:#f8f9fa;border-radius:8px;border:1px solid #e9ecef}.ip-table{border:1px solid #e9ecef;border-radius:8px;overflow:hidden;background:#fff}.ip-table-header{display:grid;grid-template-columns:2fr 1fr 1fr 120px;gap:1rem;padding:1rem;background:#f8f9fa;border-bottom:1px solid #e9ecef;font-weight:600;color:#374151;font-size:.875rem;text-transform:uppercase;letter-spacing:.05em}.ip-row{display:grid;grid-template-columns:2fr 1fr 1fr 120px;gap:1rem;padding:1rem;border-bottom:1px solid #e9ecef;align-items:center;transition:background-color .2s}.ip-row:last-child{border-bottom:none}.ip-row:hover{background:#f8f9fa}.ip-address{font-family:monospace;font-weight:500;color:#374151}.ip-type,.ip-region{color:#6b7280;font-size:.875rem}.allocate-ip-section{background:#f8f9fa;border:1px solid #e9ecef;border-radius:8px;padding:1.5rem}.allocate-ip-section h4{margin:0 0 1rem;color:#333;font-size:1.1rem}.ip-form .form-row{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1rem;margin-bottom:1rem}.ip-form .form-group{display:flex;flex-direction:column}.ip-form .form-group label{margin-bottom:.5rem;font-weight:500;color:#374151;font-size:.875rem}.ip-form .form-group select,.ip-form .form-group input{padding:.5rem;border:1px solid #d1d5db;border-radius:4px;font-size:.875rem;transition:border-color .2s}.ip-form .form-group select:focus,.ip-form .form-group input:focus{outline:none;border-color:#6366f1;box-shadow:0 0 0 3px #6366f11a}.ip-form .form-actions{display:flex;gap:.5rem}.primary-btn{background:#6366f1;color:#fff;border:none;padding:10px 20px;border-radius:4px;cursor:pointer;font-size:.875rem;font-weight:500;transition:all .2s}.primary-btn:hover:not(:disabled){background:#5b5fef}.primary-btn:disabled{background:#6c757d;cursor:not-allowed}.danger-btn.small{padding:4px 8px;font-size:.75rem}.loading{text-align:center;padding:1rem;color:#6b7280;font-style:italic}.private-badge{display:inline-block;background:#e5e7eb;color:#374151;padding:2px 6px;border-radius:10px;font-size:.7rem;font-weight:500;margin-left:6px;text-transform:uppercase;letter-spacing:.5px}.log-progress{margin-top:1rem;padding:.5rem;background:#f3f4f6;border-radius:4px;font-size:.875rem}.progress-message{color:#6b7280;padding:.25rem 0;font-style:italic;animation:fadeIn .3s ease-in}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.logs-loading{text-align:center;padding:2rem;color:#6b7280}.log-progress-entry{background:#f0f9ff;border-left:3px solid #0ea5e9;animation:pulseProgress 1.5s ease-in-out infinite}.log-level-progress{background:#0ea5e9;color:#fff}@keyframes pulseProgress{0%,to{opacity:1}50%{opacity:.7}}.chat-interface{height:100%;display:flex;flex-direction:column;background:linear-gradient(135deg,#f8fafc,#f1f5f9);border-radius:12px;overflow:hidden;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}.chat-messages-container{flex:1;overflow-y:auto;padding:1.5rem;display:flex;flex-direction:column;gap:1rem;scroll-behavior:smooth}.chat-messages-container::-webkit-scrollbar{width:8px}.chat-messages-container::-webkit-scrollbar-track{background:#f1f5f9;border-radius:4px}.chat-messages-container::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:4px;transition:background .2s}.chat-messages-container::-webkit-scrollbar-thumb:hover{background:#94a3b8}.chat-welcome{text-align:center;padding:3rem 2rem;color:#64748b}.chat-welcome h3{font-size:1.5rem;font-weight:600;color:#334155;margin-bottom:.5rem}.chat-welcome p{font-size:1rem;opacity:.8}.chat-loading{display:flex;align-items:center;gap:.75rem;padding:1rem 1.5rem;color:#64748b;font-style:italic}.chat-loading-dots{display:flex;gap:4px}.chat-loading-dot{width:6px;height:6px;background:#94a3b8;border-radius:50%;animation:loadingPulse 1.4s ease-in-out infinite}.chat-loading-dot:nth-child(1){animation-delay:-.32s}.chat-loading-dot:nth-child(2){animation-delay:-.16s}.chat-loading-dot:nth-child(3){animation-delay:0s}@keyframes loadingPulse{0%,80%,to{transform:scale(.8);opacity:.5}40%{transform:scale(1);opacity:1}}.chat-message{display:flex;margin-bottom:1rem;animation:slideInMessage .3s ease-out}@keyframes slideInMessage{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.chat-message.user{justify-content:flex-end}.chat-message.assistant{justify-content:flex-start}.chat-message-content{max-width:75%;position:relative}.chat-message-bubble{padding:.875rem 1.125rem;border-radius:1rem;font-size:.9rem;line-height:1.5;word-wrap:break-word;box-shadow:0 2px 4px #0000001a;position:relative}.chat-message.user .chat-message-bubble{background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;border-bottom-right-radius:.25rem}.chat-message.assistant .chat-message-bubble{background:#fff;color:#1f2937;border:1px solid #e5e7eb;border-bottom-left-radius:.25rem}.chat-message.error .chat-message-bubble{background:linear-gradient(135deg,#ef4444,#dc2626);color:#fff;border-bottom-left-radius:.25rem}.chat-message-timestamp{font-size:.75rem;margin-top:.375rem;opacity:.7;text-align:right}.chat-message.user .chat-message-timestamp{color:#a5b4fc}.chat-message.assistant .chat-message-timestamp{color:#6b7280;text-align:left}.chat-message.error .chat-message-timestamp{color:#fca5a5;text-align:left}.chat-formatted-content{display:flex;flex-direction:column;gap:.25rem}.chat-paragraph{margin:0;line-height:1.4}.chat-list-container{margin:0;padding:0}.chat-list-item{position:relative;padding-left:1rem;margin:0;line-height:1}.chat-list-item:before{content:"•";position:absolute;left:0;color:#6366f1;font-weight:700;top:0}.chat-numbered-item{margin:0;line-height:1;color:#374151}.chat-sub-item{position:relative;padding-left:1.5rem;margin:0;line-height:1;font-size:.95rem;color:#6b7280}.chat-sub-item:before{content:"◦";position:absolute;left:1rem;color:#9ca3af;top:0}.chat-input-container{padding:1.25rem;background:#fff;border-top:1px solid #e5e7eb;border-radius:0 0 12px 12px}.chat-input-form{display:flex;gap:.75rem;align-items:flex-end}.chat-input-wrapper{flex:1;position:relative}.chat-input{width:100%;padding:.875rem 1rem;border:2px solid #e5e7eb;border-radius:1rem;font-size:.9rem;line-height:1.5;resize:none;background:#f8fafc;transition:all .2s ease;font-family:inherit;min-height:42px;max-height:120px}.chat-input:focus{outline:none;border-color:#6366f1;background:#fff;box-shadow:0 0 0 3px #6366f11a}.chat-input:disabled{background:#f1f5f9;color:#9ca3af;cursor:not-allowed}.chat-input::placeholder{color:#9ca3af}.chat-send-button{padding:.875rem 1.25rem;background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;border:none;border-radius:1rem;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s ease;white-space:nowrap;min-width:70px;box-shadow:0 2px 4px #6366f133}.chat-send-button:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 8px #6366f14d}.chat-send-button:active{transform:translateY(0)}.chat-send-button:disabled{background:#d1d5db;color:#9ca3af;cursor:not-allowed;transform:none;box-shadow:none}.chat-input-hint{font-size:.75rem;color:#9ca3af;margin-top:.5rem;text-align:center}.chat-api-key-missing{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;padding:2rem;text-align:center;background:linear-gradient(135deg,#f8fafc,#f1f5f9);border-radius:12px}.chat-api-key-missing h2{font-size:1.5rem;font-weight:600;color:#1f2937;margin-bottom:.75rem}.chat-api-key-missing p{color:#6b7280;margin-bottom:1.5rem;max-width:400px;line-height:1.6}.chat-api-key-button{padding:.75rem 1.5rem;background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;border:none;border-radius:.5rem;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 4px #6366f133}.chat-api-key-button:hover{transform:translateY(-1px);box-shadow:0 4px 8px #6366f14d}.settings-container{max-width:600px;margin:0 auto;padding:2rem;background:linear-gradient(135deg,#f8fafc,#f1f5f9);min-height:100vh}.settings-header{text-align:center;margin-bottom:2rem}.settings-title{font-size:2rem;font-weight:700;color:#1f2937;margin:0 0 .5rem;background:linear-gradient(135deg,#6366f1,#8b5cf6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.settings-subtitle{color:#6b7280;font-size:1rem;margin:0}.settings-form{display:flex;flex-direction:column;gap:1.5rem}.settings-card{background:#fff;border-radius:16px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f;padding:2rem;border:1px solid #e5e7eb}.settings-card-header{margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid #f3f4f6}.settings-card-title{font-size:1.25rem;font-weight:600;color:#374151;margin:0}.settings-fields{display:flex;flex-direction:column;gap:1.5rem;margin-bottom:2rem}.settings-field{display:flex;flex-direction:column;gap:.5rem}.settings-label{font-weight:500;color:#374151;font-size:.875rem;display:flex;align-items:center;gap:.5rem}.settings-status-badge{background:#10b981;color:#fff;padding:.125rem .5rem;border-radius:9999px;font-size:.75rem;font-weight:500}.settings-select{width:100%;padding:.875rem 1rem;border:2px solid #e5e7eb;border-radius:12px;font-size:.9rem;background:#f8fafc;color:#374151;transition:all .2s ease}.settings-select:focus{outline:none;border-color:#6366f1;background:#fff;box-shadow:0 0 0 3px #6366f11a}.settings-input-wrapper{position:relative}.settings-input{width:100%;padding:.875rem 3rem .875rem 1rem;border:2px solid #e5e7eb;border-radius:12px;font-size:.9rem;background:#f8fafc;color:#374151;transition:all .2s ease;font-family:monospace}.settings-input:focus{outline:none;border-color:#6366f1;background:#fff;box-shadow:0 0 0 3px #6366f11a}.settings-input::placeholder{color:#9ca3af;font-family:inherit}.settings-toggle-button{position:absolute;right:.75rem;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;padding:.25rem;border-radius:4px;transition:background-color .2s}.settings-toggle-button:hover{background:#f3f4f6}.settings-help-text{font-size:.75rem;color:#6b7280;margin:0;line-height:1.4}.settings-actions{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.settings-primary-button{padding:.875rem 1.5rem;background:linear-gradient(135deg,#6366f1,#8b5cf6);color:#fff;border:none;border-radius:12px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 4px #6366f133}.settings-primary-button:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 8px #6366f14d}.settings-primary-button:disabled{background:#d1d5db;color:#9ca3af;cursor:not-allowed;transform:none;box-shadow:none}.settings-secondary-button{padding:.875rem 1.5rem;background:#fff;color:#374151;border:2px solid #e5e7eb;border-radius:12px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s ease}.settings-secondary-button:hover:not(:disabled){background:#f9fafb;border-color:#d1d5db;transform:translateY(-1px)}.settings-secondary-button:disabled{opacity:.5;cursor:not-allowed}.settings-danger-button{padding:.875rem 1.5rem;background:#dc3545;color:#fff;border:none;border-radius:12px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s ease;box-shadow:0 2px 4px #dc354533}.settings-danger-button:hover:not(:disabled){background:#c82333;transform:translateY(-1px);box-shadow:0 4px 8px #dc35454d}.settings-danger-button:disabled{opacity:.5;cursor:not-allowed}.settings-status-message{font-size:.875rem;font-weight:500;padding:.5rem 1rem;border-radius:8px;animation:fadeIn .3s ease-in}.settings-status-success{background:#d1fae5;color:#065f46;border:1px solid #10b981}.settings-status-error{background:#fee2e2;color:#991b1b;border:1px solid #ef4444}.settings-info-card{background:linear-gradient(135deg,#eff6ff,#dbeafe);border-radius:16px;padding:1.5rem;border:1px solid #bfdbfe}.settings-info-header{margin-bottom:.75rem}.settings-info-title{font-size:1rem;font-weight:600;color:#1e40af;margin:0}.settings-info-text{color:#1e40af;line-height:1.6;margin:0;font-size:.875rem}@media (prefers-color-scheme: dark){.chat-interface{background:linear-gradient(135deg,#1e293b,#0f172a)}.chat-messages-container::-webkit-scrollbar-track{background:#334155}.chat-messages-container::-webkit-scrollbar-thumb{background:#475569}.chat-messages-container::-webkit-scrollbar-thumb:hover{background:#64748b}.chat-welcome{color:#94a3b8}.chat-welcome h3{color:#f1f5f9}.chat-message.assistant .chat-message-bubble{background:#334155;color:#f1f5f9;border-color:#475569}.chat-message.assistant .chat-message-timestamp{color:#94a3b8}.chat-input-container{background:#1e293b;border-top-color:#475569}.chat-input{background:#334155;border-color:#475569;color:#f1f5f9}.chat-input:focus{background:#1e293b;border-color:#6366f1}.chat-input::placeholder{color:#94a3b8}.chat-input-hint{color:#94a3b8}.chat-api-key-missing{background:linear-gradient(135deg,#1e293b,#0f172a)}.chat-api-key-missing h2{color:#f1f5f9}.chat-api-key-missing p{color:#94a3b8}.settings-container{background:linear-gradient(135deg,#1e293b,#0f172a)}.settings-title{color:#f1f5f9}.settings-subtitle{color:#94a3b8}.settings-card{background:#334155;border-color:#475569}.settings-card-header{border-bottom-color:#475569}.settings-card-title,.settings-label{color:#f1f5f9}.settings-select,.settings-input{background:#1e293b;border-color:#475569;color:#f1f5f9}.settings-select:focus,.settings-input:focus{background:#0f172a;border-color:#6366f1}.settings-input::placeholder{color:#94a3b8}.settings-toggle-button:hover{background:#475569}.settings-help-text{color:#94a3b8}.settings-secondary-button{background:#475569;color:#f1f5f9;border-color:#64748b}.settings-secondary-button:hover:not(:disabled){background:#64748b}.settings-info-card{background:linear-gradient(135deg,#1e3a8a,#1e40af);border-color:#3b82f6}.settings-info-title{color:#dbeafe}.settings-info-text{color:#bfdbfe}}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#213547;background-color:#fff;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%}*{box-sizing:border-box}body{margin:0;padding:0;min-height:100vh}#root{height:100vh;display:flex;flex-direction:column}@media (prefers-color-scheme: dark){:root{color:#f0f0f0;background-color:#1a1a1a}}