diff --git a/resources/web/config.css b/resources/web/config.css new file mode 100644 index 0000000..47ce76d --- /dev/null +++ b/resources/web/config.css @@ -0,0 +1,477 @@ +:root { + --primary-color: #4361ee; + --secondary-color: #3a0ca3; + --success-color: #4cc9f0; + --danger-color: #f72585; + --warning-color: #ff9e00; + --light-color: #f8f9fa; + --dark-color: #212529; + --gray-color: #6c757d; + --border-radius: 8px; + --box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); + --transition: all 0.3s ease; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + line-height: 1.6; + color: var(--dark-color); + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + min-height: 100vh; + padding: 20px; +} + +.container { + max-width: 1200px; + margin: 0 auto; +} + +.header { + text-align: center; + margin-bottom: 30px; + color: white; +} + +.header h1 { + font-size: 2.5rem; + margin-bottom: 10px; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3); +} + +.header p { + font-size: 1.1rem; + opacity: 0.9; +} + +.card { + background: white; + border-radius: var(--border-radius); + box-shadow: var(--box-shadow); + margin-bottom: 25px; + overflow: hidden; + transition: var(--transition); +} + +.card:hover { + box-shadow: 0 8px 15px rgba(0, 0, 0, 0.15); +} + +.card-header { + background: var(--primary-color); + color: white; + padding: 20px; + display: flex; + justify-content: space-between; + align-items: center; +} + +.card-header h2 { + font-size: 1.5rem; + display: flex; + align-items: center; + gap: 10px; +} + +.card-body { + padding: 25px; +} + +.tabs { + display: flex; + background: var(--light-color); + border-bottom: 2px solid #dee2e6; +} + +.tab { + padding: 15px 25px; + cursor: pointer; + font-weight: 600; + color: var(--gray-color); + border-bottom: 3px solid transparent; + transition: var(--transition); +} + +.tab:hover { + color: var(--primary-color); + background: rgba(67, 97, 238, 0.05); +} + +.tab.active { + color: var(--primary-color); + border-bottom-color: var(--primary-color); + background: white; +} + +.tab-content { + display: none; + animation: fadeIn 0.5s ease; +} + +.tab-content.active { + display: block; +} + +@keyframes fadeIn { + from { opacity: 0; transform: translateY(10px); } + to { opacity: 1; transform: translateY(0); } +} + +.providers-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(350px, 1fr)); + gap: 20px; +} + +.provider-card { + background: var(--light-color); + border-radius: var(--border-radius); + padding: 20px; + border: 1px solid #dee2e6; + transition: var(--transition); + position: relative; +} + +.provider-card:hover { + border-color: var(--primary-color); + transform: translateY(-5px); +} + +.provider-header { + display: flex; + align-items: center; + margin-bottom: 20px; + gap: 15px; +} + +.provider-logo { + width: 60px; + height: 60px; + border-radius: 50%; + object-fit: contain; + background: white; + padding: 8px; + border: 2px solid var(--primary-color); + box-sizing: content-box; +} + +.provider-info h3 { + font-size: 1.3rem; + margin-bottom: 5px; +} + +.provider-info .provider-id { + color: var(--gray-color); + font-size: 0.9rem; +} + +.form-group { + margin-bottom: 20px; +} + +.form-group label { + display: block; + margin-bottom: 8px; + font-weight: 600; + color: var(--dark-color); +} + +.form-control { + width: 100%; + padding: 12px 15px; + border: 2px solid #dee2e6; + border-radius: var(--border-radius); + font-size: 1rem; + transition: var(--transition); +} + +.form-control:focus { + outline: none; + border-color: var(--primary-color); + box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.2); +} + +.btn { + padding: 12px 25px; + border: none; + border-radius: var(--border-radius); + font-size: 1rem; + font-weight: 600; + cursor: pointer; + transition: var(--transition); + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + margin-top: 5px; +} + +.btn-primary { + background: var(--primary-color); + color: white; +} + +.btn-primary:hover { + background: var(--secondary-color); + transform: translateY(-2px); +} + +.btn-danger { + background: var(--danger-color); + color: white; +} + +.btn-danger:hover { + background: #d63384; + transform: translateY(-2px); +} + +.btn-success { + background: var(--success-color); + color: white; +} + +.btn-success:hover { + background: #2dc2e3; + transform: translateY(-2px); +} + +.btn-sm { + padding: 8px 15px; + font-size: 0.9rem; +} + +.btn-group { + display: flex; + gap: 10px; + margin-top: 20px; + flex-wrap: wrap; +} + +.status-indicator { + display: inline-flex; + align-items: center; + gap: 8px; + padding: 6px 12px; + border-radius: 20px; + font-size: 0.85rem; + font-weight: 600; + margin-top: 10px; +} + +.status-success { + background: rgba(76, 201, 240, 0.2); + color: var(--success-color); +} + +.status-error { + background: rgba(247, 37, 133, 0.2); + color: var(--danger-color); +} + +.status-warning { + background: rgba(255, 158, 0, 0.2); + color: var(--warning-color); +} + +.loader { + display: inline-block; + width: 20px; + height: 20px; + border: 3px solid #f3f3f3; + border-top: 3px solid var(--primary-color); + border-radius: 50%; + animation: spin 1s linear infinite; +} + +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.alert { + padding: 15px; + border-radius: var(--border-radius); + margin-bottom: 20px; + display: flex; + align-items: center; + gap: 10px; +} + +.alert-info { + background: rgba(67, 97, 238, 0.1); + border-left: 4px solid var(--primary-color); + color: var(--primary-color); +} + +.alert-success { + background: rgba(76, 201, 240, 0.1); + border-left: 4px solid var(--success-color); + color: #0c5460; +} + +.alert-error { + background: rgba(247, 37, 133, 0.1); + border-left: 4px solid var(--danger-color); + color: var(--danger-color); +} + +.empty-state { + text-align: center; + padding: 40px; + color: var(--gray-color); +} + +.empty-state i { + font-size: 3rem; + margin-bottom: 20px; + color: #dee2e6; +} + +.config-section { + margin-bottom: 30px; +} + +.config-section h3 { + margin-bottom: 15px; + padding-bottom: 10px; + border-bottom: 2px solid #dee2e6; + color: var(--primary-color); +} + +.json-editor { + width: 100%; + min-height: 200px; + font-family: 'Courier New', monospace; + padding: 15px; + border: 2px solid #dee2e6; + border-radius: var(--border-radius); + resize: vertical; +} + +.tooltip { + position: relative; + display: inline-block; +} + +.tooltip .tooltip-text { + visibility: hidden; + width: 200px; + background-color: var(--dark-color); + color: white; + text-align: center; + border-radius: var(--border-radius); + padding: 10px; + position: absolute; + z-index: 1; + bottom: 125%; + left: 50%; + transform: translateX(-50%); + opacity: 0; + transition: opacity 0.3s; + font-size: 0.9rem; +} + +.tooltip:hover .tooltip-text { + visibility: visible; + opacity: 1; +} + +/* Special styling for provider types */ +.client-credentials-only .form-group.hide-for-client { + display: none; +} + +.client-credentials-only .no-credentials-required { + display: block; + padding: 15px; + background: rgba(76, 201, 240, 0.1); + border-radius: var(--border-radius); + border-left: 4px solid var(--success-color); + margin-bottom: 20px; +} + +.no-credentials-required { + display: none; +} + +/* Modal styles */ +.modal-overlay { + display: none; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0,0,0,0.5); + z-index: 1000; + justify-content: center; + align-items: center; +} + +.modal-content { + background: white; + padding: 30px; + border-radius: var(--border-radius); + max-width: 500px; + width: 90%; +} + +.modal-content h3 { + margin-bottom: 20px; + display: flex; + align-items: center; + gap: 10px; +} + +.modal-content p { + margin-bottom: 20px; +} + +.modal-content input[type="file"] { + margin-bottom: 20px; + width: 100%; + padding: 10px; + border: 2px solid #dee2e6; + border-radius: var(--border-radius); +} + +.modal-buttons { + justify-content: flex-end; + margin-top: 20px; +} + +@media (max-width: 768px) { + .providers-grid { + grid-template-columns: 1fr; + } + + .header h1 { + font-size: 2rem; + } + + .tabs { + flex-direction: column; + } + + .tab { + text-align: center; + } + + .btn-group { + flex-direction: column; + } + + .btn { + width: 100%; + } + + .modal-buttons { + flex-direction: column; + } +} \ No newline at end of file diff --git a/resources/web/config.html b/resources/web/config.html index 4ef256a..d4bba30 100644 --- a/resources/web/config.html +++ b/resources/web/config.html @@ -5,438 +5,7 @@
Loading providers...
@@ -503,7 +71,6 @@Select a provider from the credentials tab to configure proxy settings
@@ -569,807 +136,18 @@