:root{--bg: #0b0f17;--panel: #131a26;--panel-2: #1a2333;--border: #253047;--text: #e7ecf3;--muted: #8a96ad;--accent: #06c755;--accent-hover: #05a948;--danger: #ef4444;--warn: #f59e0b;--success: #10b981;--radius: 10px;--shadow: 0 8px 24px rgba(0,0,0,.35)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans TC,PingFang TC,Microsoft JhengHei,sans-serif;background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}button{font:inherit;border:1px solid var(--border);background:var(--panel-2);color:var(--text);padding:8px 14px;border-radius:var(--radius);cursor:pointer;transition:background .15s,border-color .15s}button:hover{background:#202b40}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button.primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}button.danger{color:var(--danger);border-color:#ef44444d}button.danger:hover{background:#ef44441f}button.ghost{background:transparent}input,textarea,select{font:inherit;background:var(--panel);color:var(--text);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;width:100%}input:focus,textarea:focus{outline:none;border-color:var(--accent)}label{display:block;font-size:13px;color:var(--muted);margin-bottom:6px}.field{margin-bottom:16px}.app{min-height:100%;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;justify-content:space-between;padding:14px 24px;border-bottom:1px solid var(--border);background:var(--panel)}.topbar .brand{display:flex;align-items:center;gap:10px;font-weight:700;font-size:17px}.topbar .brand .logo{width:28px;height:28px;border-radius:6px;background:var(--accent);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:12px}.container{max-width:960px;margin:0 auto;padding:32px 24px;width:100%}.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow)}.card+.card{margin-top:20px}.auth-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.auth-shell .card{width:100%;max-width:420px}h1{font-size:22px;margin:0 0 4px}h2{font-size:18px;margin:0 0 16px}h3{font-size:15px;margin:0 0 8px}.muted{color:var(--muted);font-size:13px}.list{display:flex;flex-direction:column;gap:10px}.row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius)}.row .meta{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}.row .name{font-weight:600}.row .sub{color:var(--muted);font-size:12px;word-break:break-all}.row .actions{display:flex;gap:8px;flex-shrink:0}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:600}.badge.on{background:#10b98126;color:var(--success)}.badge.off{background:#8a96ad26;color:var(--muted)}.badge.ok{background:#10b98126;color:var(--success)}.badge.fail{background:#ef444426;color:var(--danger)}.badge.warn{background:#f59e0b26;color:var(--warn)}.header-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.error{background:#ef44441a;color:#fca5a5;border:1px solid rgba(239,68,68,.3);padding:10px 12px;border-radius:var(--radius);margin-bottom:16px;font-size:14px}.hint{background:#06c75514;border:1px solid rgba(6,199,85,.25);padding:10px 12px;border-radius:var(--radius);margin-bottom:16px;font-size:13px;color:#b9f3cd}.ingest-url{display:flex;align-items:center;gap:8px;background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;word-break:break-all}.table{width:100%;border-collapse:collapse;font-size:13px}.table th,.table td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--border)}.table th{color:var(--muted);font-weight:500}.table tr:last-child td{border-bottom:none}.empty{text-align:center;color:var(--muted);padding:32px 0;font-size:14px}.back-link{color:var(--muted);font-size:13px}.back-link:hover{color:var(--accent)}.spinner{display:inline-block;width:16px;height:16px;border:2px solid rgba(255,255,255,.2);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}
