:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}html,body{margin:0;padding:0;min-width:320px;min-height:100%;background-color:#0f172a;color:#f8fafc}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media(prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}:root{--bg-dark: #0f172a;--bg-card: #1e293b;--text-primary: #f8fafc;--text-secondary: #94a3b8;--accent-primary: #3b82f6;--accent-secondary: #6366f1;--success: #22c55e;--warning: #eab308;--error: #ef4444;--border: #334155}body{margin:0;font-family:Inter,system-ui,-apple-system,sans-serif;background-color:#0f172a;color:var(--text-primary);-webkit-font-smoothing:antialiased;min-height:100vh}html,body{height:100%;width:100%;margin:0;padding:0;background-color:#0f172a}#root{min-height:100vh;width:100%;display:flex;flex-direction:column;background-color:#0f172a}.container{max-width:1200px;margin:0 auto;padding:2rem;width:100%;flex:1}header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:2rem;padding-bottom:1rem;border-bottom:1px solid var(--border)}.brand{display:flex;flex-direction:column;gap:1rem}.nav-tabs{display:flex;gap:.5rem;margin-top:.5rem}.nav-tab{background:none;border:1px solid #e5e7eb;border-radius:6px 6px 0 0;padding:.5rem 1rem;cursor:pointer;display:flex;align-items:center;transition:all .2s;font-size:.9rem}.nav-tab:hover{background-color:#f9fafb}.nav-tab.active{background-color:#3b82f6;color:#fff;border-color:#3b82f6}h1{font-size:1.5rem;font-weight:700;background:linear-gradient(to right,var(--accent-primary),var(--accent-secondary));-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin:0}.controls{display:flex;gap:1rem;align-items:center}button{background:var(--bg-card);border:1px solid var(--border);color:var(--text-primary);padding:.5rem 1rem;border-radius:.5rem;cursor:pointer;transition:all .2s;font-size:.875rem;display:flex;align-items:center;gap:.5rem}button:hover{background:var(--border)}button.primary{background:var(--accent-primary);border-color:var(--accent-primary)}button.primary:hover{background:var(--accent-secondary)}button.danger{border-color:var(--error);color:var(--error)}button.danger:hover{background:var(--error);color:#fff}button.logout-button{border-color:var(--text-secondary);color:var(--text-secondary)}button.logout-button:hover{background:var(--text-secondary);color:var(--bg-dark)}.loading-container{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:100vh;background-color:var(--bg-dark);color:var(--text-primary)}.loading-container .spinner{width:40px;height:40px;border:4px solid rgba(59,130,246,.3);border-radius:50%;border-top-color:var(--accent-primary);animation:spin 1s linear infinite;margin-bottom:1rem}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1.5rem;margin-bottom:2rem}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:1rem;padding:1.5rem;box-shadow:0 4px 6px -1px #0000001a}.stat-card h3{margin:0;font-size:.875rem;color:var(--text-secondary);font-weight:500}.stat-value{font-size:2rem;font-weight:700;margin-top:.5rem;color:var(--text-primary)}.stat-sub{font-size:.875rem;margin-top:.25rem}.text-green{color:var(--success)}.text-red{color:var(--error)}.charts-section{display:grid;grid-template-columns:2fr 1fr;gap:1.5rem;margin-bottom:2rem}@media(max-width:768px){.charts-section{grid-template-columns:1fr}}.chart-container{height:300px;width:100%}.table-container{overflow-x:auto;background:var(--bg-card);border-radius:1rem;border:1px solid var(--border)}table{width:100%;border-collapse:collapse;font-size:.875rem}th,td{padding:1rem;text-align:left;border-bottom:1px solid var(--border)}th{background:#0003;color:var(--text-secondary);font-weight:600}tr:last-child td{border-bottom:none}tr:hover{background:#ffffff05}.badge{padding:.25rem .5rem;border-radius:9999px;font-size:.75rem;font-weight:600}.status-200{background:#22c55e1a;color:var(--success)}.status-error{background:#ef44441a;color:var(--error)}.type-badge{background:#3b82f61a;color:var(--accent-primary)}.latency-fast{color:var(--success)}.latency-slow{color:var(--warning)}.latency-bad{color:var(--error)}.pagination{display:flex;justify-content:space-between;align-items:center;margin-top:1rem;padding:1rem;background:var(--bg-card);border-radius:.5rem;border:1px solid var(--border)}.page-info{color:var(--text-secondary);font-size:.875rem}.search-filter-container{display:flex;flex-direction:column;gap:1rem}.search-form{display:flex;width:100%}.search-input-container{display:flex;align-items:center;flex:1;background:var(--bg-dark);border:1px solid var(--border);border-radius:.5rem;padding:0 .75rem;transition:border-color .2s}.search-input-container:focus-within{border-color:var(--accent-primary)}.search-icon{color:var(--text-secondary);margin-right:.75rem}.search-input{flex:1;background:transparent;border:none;color:var(--text-primary);padding:.75rem 0;font-size:.875rem;outline:none}.search-input::placeholder{color:var(--text-secondary)}.search-button{background:var(--accent-primary);border:none;color:#fff;padding:.5rem 1rem;margin-left:.5rem;border-radius:.375rem;font-size:.875rem;cursor:pointer;transition:background-color .2s}.search-button:hover{background:var(--accent-secondary)}.filter-controls{display:flex;gap:.75rem;align-items:center}.filter-toggle-button{position:relative;display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:var(--bg-dark);border:1px solid var(--border);border-radius:.5rem;color:var(--text-primary);font-size:.875rem;cursor:pointer;transition:all .2s}.filter-toggle-button:hover{background:var(--border)}.filter-indicator{position:absolute;top:.25rem;right:.25rem;width:.5rem;height:.5rem;background:var(--accent-primary);border-radius:50%}.clear-filters-button{padding:.5rem 1rem;background:#ef44441a;border:1px solid var(--error);border-radius:.5rem;color:var(--error);font-size:.875rem;cursor:pointer;transition:all .2s}.clear-filters-button:hover{background:var(--error);color:#fff}.filters-panel{animation:slideDown .2s ease-out}.filter-row{display:flex;gap:1.5rem;flex-wrap:wrap}.filter-group{display:flex;flex-direction:column;gap:.5rem;min-width:200px}.filter-group label{font-size:.875rem;color:var(--text-secondary);font-weight:500}.filter-select{background:var(--bg-dark);border:1px solid var(--border);border-radius:.375rem;color:var(--text-primary);padding:.5rem;font-size:.875rem;outline:none;transition:border-color .2s}.filter-select:focus{border-color:var(--accent-primary)}@keyframes slideDown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}@media(max-width:768px){.search-filter-container{flex-direction:column}.filter-controls{justify-content:space-between}.filter-row{flex-direction:column;gap:1rem}.filter-group{min-width:100%}}.settings-container{max-width:1000px;margin:0 auto;padding:2rem;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#f8fafc}.settings-header{margin-bottom:2rem}.settings-header h1{display:flex;align-items:center;font-size:2rem;font-weight:700;margin-bottom:.5rem;color:#f8fafc}.back-button{background:none;border:none;cursor:pointer;margin-right:10px;padding:5px;border-radius:4px;display:flex;align-items:center;justify-content:center;transition:background-color .2s}.back-button:hover{background-color:#f0f0f0}.settings-header p{color:#6b7280;font-size:1rem}.settings-section{background-color:#1e293b;border-radius:8px;box-shadow:0 1px 3px #0000001a;overflow:hidden}.section-header{display:flex;justify-content:space-between;align-items:center;padding:1.5rem;border-bottom:1px solid #e5e7eb}.section-header h2{font-size:1.25rem;font-weight:600;color:#f8fafc;margin:0}.add-button{display:flex;align-items:center;gap:.5rem;background-color:#3b82f6;color:#fff;border:none;border-radius:6px;padding:.5rem 1rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s}.add-button:hover{background-color:#2563eb}.upstreams-list{padding:1rem}.upstream-item{border:1px solid #334155;border-radius:6px;margin-bottom:1rem;overflow:hidden}.upstream-item.enabled{border-left:4px solid #10b981}.upstream-item.disabled{border-left:4px solid #ef4444;opacity:.7}.upstream-item.new{border-left:4px solid #3b82f6}.upstream-info{display:flex;justify-content:space-between;align-items:center;padding:1rem}.upstream-details{flex:1}.upstream-name{display:flex;align-items:center;gap:.5rem;font-weight:600;margin-bottom:.5rem;color:#f8fafc}.disabled-badge{background-color:#f3f4f6;color:#6b7280;font-size:.75rem;padding:.25rem .5rem;border-radius:4px;font-weight:500}.upstream-url{display:flex;align-items:center;gap:.5rem;font-family:monospace;margin-bottom:.5rem;color:#cbd5e1;word-break:break-all}.test-button{background:none;border:none;color:#6b7280;cursor:pointer;padding:.25rem;border-radius:4px;transition:color .2s}.test-button:hover{color:#3b82f6}.upstream-meta{font-size:.875rem;color:#6b7280}.upstream-actions{display:flex;gap:.5rem}.edit-button,.delete-button{background:none;border:none;padding:.5rem;border-radius:4px;cursor:pointer;transition:background-color .2s}.edit-button{color:#3b82f6}.edit-button:hover{background-color:#eff6ff}.delete-button{color:#ef4444}.delete-button:hover{background-color:#fef2f2}.delete-button:disabled{color:#d1d5db;cursor:not-allowed}.password-form{padding:1.5rem;border-top:1px solid #e5e7eb}.password-form .form-group{margin-bottom:1rem}.password-form label{display:block;font-weight:500;margin-bottom:.5rem;color:#374151}.password-form input{width:100%;padding:.75rem;border:1px solid #d1d5db;border-radius:6px;font-size:1rem;transition:border-color .2s}.password-form input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.error-message,.success-message{padding:.75rem 1rem;margin:1rem 1.5rem;border-radius:6px;font-size:.875rem}.upstream-form{padding:1rem;background-color:#f9fafb;border-top:1px solid #e5e7eb}.form-group{margin-bottom:1rem}.form-group label{display:block;margin-bottom:.5rem;font-weight:500;color:#374151}.form-group input[type=text],.form-group input[type=number]{width:100%;padding:.75rem;border:1px solid #d1d5db;border-radius:6px;font-size:.875rem;transition:border-color .2s}.form-group input[type=text]:focus,.form-group input[type=number]:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.form-group.checkbox{display:flex;align-items:center;gap:.5rem}.form-group.checkbox input[type=checkbox]{width:1rem;height:1rem}.form-group.checkbox label{margin-bottom:0}.form-actions{display:flex;gap:.5rem;justify-content:flex-end}.save-button,.cancel-button{display:flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s;border:none}.save-button{background-color:#10b981;color:#fff}.save-button:hover{background-color:#059669}.cancel-button{background-color:#f3f4f6;color:#4b5563}.cancel-button:hover{background-color:#e5e7eb}.error-message,.success-message{padding:.75rem 1rem;border-radius:6px;margin-bottom:1rem;font-size:.875rem}.error-message{background-color:#fef2f2;color:#b91c1c;border:1px solid #fecaca}.success-message{background-color:#f0fdf4;color:#166534;border:1px solid #bbf7d0}@media(max-width:768px){.settings-container{padding:1rem}.section-header,.upstream-info{flex-direction:column;align-items:flex-start;gap:1rem}.upstream-actions{align-self:flex-end}.form-actions{flex-direction:column}}.login-container{display:flex;justify-content:center;align-items:center;min-height:100vh;background-color:#0f172a;padding:1rem}.login-card{width:100%;max-width:400px;background-color:#fff;border-radius:12px;box-shadow:0 4px 12px #0000001a;padding:2rem;margin:1rem}.login-header{display:flex;flex-direction:column;align-items:center;margin-bottom:2rem;text-align:center}.login-header h1{margin:1rem 0 .5rem;color:#1e293b;font-size:1.5rem;font-weight:600}.login-header p{color:#64748b;font-size:.875rem;margin:0}.login-form{display:flex;flex-direction:column;gap:1.5rem}.form-group{display:flex;flex-direction:column;gap:.5rem}.form-group label{font-weight:500;color:#374151;font-size:.875rem}.form-group input{padding:.75rem;border:1px solid #d1d5db;border-radius:6px;font-size:.875rem;transition:border-color .2s}.form-group input:focus{outline:none;border-color:#3b82f6;box-shadow:0 0 0 3px #3b82f61a}.form-group input:disabled{background-color:#f9fafb;cursor:not-allowed}.password-input{position:relative}.password-input input{width:100%;padding-right:2.5rem}.password-toggle{position:absolute;right:.75rem;top:50%;transform:translateY(-50%);background:none;border:none;color:#6b7280;cursor:pointer;padding:.25rem;display:flex;align-items:center;justify-content:center}.password-toggle:hover{color:#374151}.password-toggle:disabled{cursor:not-allowed;opacity:.5}.login-button{display:flex;align-items:center;justify-content:center;gap:.5rem;background-color:#3b82f6;color:#fff;border:none;border-radius:6px;padding:.75rem 1rem;font-size:.875rem;font-weight:500;cursor:pointer;transition:background-color .2s;margin-top:.5rem}.login-button:hover:not(:disabled){background-color:#2563eb}.login-button:disabled{background-color:#9ca3af;cursor:not-allowed}.error-message{display:flex;align-items:center;gap:.5rem;background-color:#fef2f2;color:#b91c1c;padding:.75rem;border-radius:6px;font-size:.875rem;border:1px solid #fecaca}.login-footer{margin-top:2rem;text-align:center;color:#6b7280;font-size:.75rem}.spinner{width:16px;height:16px;border:2px solid rgba(255,255,255,.3);border-radius:50%;border-top-color:#fff;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
