*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;background:#0f172a;color:#e2e8f0;min-height:100vh}a{color:#38bdf8;text-decoration:none}.layout{display:flex;min-height:100vh}.sidebar{width:220px;background:#1e293b;border-right:1px solid #334155;padding:1.5rem 0;flex-shrink:0}.sidebar h2{padding:0 1.25rem 1.5rem;font-size:1rem;color:#38bdf8}.nav a{display:block;padding:.6rem 1.25rem;color:#94a3b8;transition:all .15s}.nav a:hover,.nav a.active{background:#334155;color:#e2e8f0}.main{flex:1;padding:2rem;overflow:auto}h1{font-size:1.5rem;margin-bottom:1.5rem}.card{background:#1e293b;border:1px solid #334155;border-radius:12px;padding:1.5rem;margin-bottom:1rem}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:1rem;margin-bottom:1.5rem}.stat{background:#1e293b;border:1px solid #334155;border-radius:12px;padding:1.25rem}.stat .val{font-size:1.75rem;font-weight:700;color:#38bdf8}.stat .lbl{font-size:.8rem;color:#94a3b8;margin-top:.25rem}table{width:100%;border-collapse:collapse;font-size:.9rem}th,td{text-align:left;padding:.75rem 1rem;border-bottom:1px solid #334155}th{color:#94a3b8;font-weight:500;font-size:.8rem;text-transform:uppercase}tr:hover td{background:#33415533}.btn{padding:.5rem 1rem;border:none;border-radius:8px;cursor:pointer;font-size:.85rem;display:inline-flex;align-items:center;gap:.4rem}.btn-primary{background:#2563eb;color:#fff}.btn-primary:hover{background:#1d4ed8}.btn-danger{background:#dc2626;color:#fff}.btn-danger:hover{background:#b91c1c}.btn-sm{padding:.35rem .7rem;font-size:.8rem}.btn-secondary{background:#334155;color:#e2e8f0}.btn-secondary:hover{background:#475569}input,select,textarea{width:100%;padding:.55rem .75rem;border:1px solid #475569;border-radius:8px;background:#0f172a;color:#e2e8f0;margin-bottom:.75rem;font-size:.9rem}label{display:block;font-size:.8rem;color:#94a3b8;margin-bottom:.25rem}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0008;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:#1e293b;border:1px solid #334155;border-radius:12px;padding:1.5rem;width:90%;max-width:520px;max-height:90vh;overflow-y:auto}.modal h2{margin-bottom:1rem;font-size:1.1rem}.modal-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:1rem}.badge{display:inline-block;padding:.2rem .5rem;border-radius:4px;font-size:.75rem}.badge-ok{background:#064e3b;color:#6ee7b7}.badge-off{background:#374151;color:#9ca3af}.badge-lt{background:#1e3a5f;color:#7dd3fc}.login-wrap{display:flex;align-items:center;justify-content:center;min-height:100vh}.login-box{background:#1e293b;border:1px solid #334155;border-radius:12px;padding:2rem;width:360px}.login-box h1{font-size:1.25rem;margin-bottom:1.5rem;color:#38bdf8}.error{color:#f87171;font-size:.85rem;margin-bottom:.75rem}.log-info{color:#94a3b8}.log-error{color:#f87171}.log-warn{color:#fbbf24}.toolbar{display:flex;gap:.5rem;margin-bottom:1rem;align-items:center}.toolbar h1{margin:0;flex:1}.field-hint{font-size:.8rem;color:#64748b;margin:-.5rem 0 .75rem;line-height:1.5}.field-hint code{background:#334155;padding:.1rem .35rem;border-radius:4px;font-size:.75rem}.test-result{padding:.75rem 1rem;border-radius:8px;font-size:.85rem;margin-bottom:1rem;line-height:1.5}.test-pending{background:#1e3a5f;color:#7dd3fc}.test-ok{background:#064e3b;color:#6ee7b7}.test-error{background:#7f1d1d;color:#fca5a5}.path-field{display:flex;gap:.5rem;margin-bottom:.75rem}.path-field input{flex:1;margin-bottom:0}.browse-modal{max-width:640px;width:95%}.browse-toolbar{display:flex;gap:.5rem;align-items:center;margin-bottom:.75rem;flex-wrap:wrap}.browse-path{flex:1;font-size:.8rem;color:#94a3b8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.browse-list{max-height:320px;overflow-y:auto;border:1px solid #334155;border-radius:8px;background:#0f172a}.browse-item{display:flex;align-items:center;gap:.5rem;padding:.55rem .75rem;cursor:pointer;border-bottom:1px solid #1e293b}.browse-item:hover{background:#334155}.browse-item.is-file{padding-left:1.5rem}.browse-item.is-archive{background:#1e293b33}.browse-icon{width:1.25rem;text-align:center}.browse-name{flex:1;font-size:.9rem}.browse-size{font-size:.75rem;color:#64748b}.browse-loading,.browse-empty{padding:1rem;color:#64748b;font-size:.9rem}
