:root{font-family:Inter,system-ui,sans-serif;color:#e8edf5;background:#0e141b}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(circle at 20% 0,#1d3545 0,transparent 40%),#0e141b}header{display:flex;justify-content:space-between;align-items:center;padding:28px max(24px,calc((100% - 1180px)/2)) 18px;border-bottom:1px solid #263442}header h1{margin:4px 0;font-size:28px}.eyebrow{font-size:11px;letter-spacing:2px;color:#7bc7b3}.layout{max-width:1180px;margin:28px auto;padding:0 24px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.card{background:#151f29;border:1px solid #2b3b4c;border-radius:14px;padding:22px;box-shadow:0 12px 35px #0003}.card:nth-child(3){grid-column:1/-1}h2{font-size:17px;margin:0 0 14px}.muted{color:#9eacb9;font-size:13px}pre{background:#0b1117;border-radius:8px;padding:14px;overflow:auto;min-height:70px;color:#b9e4d1}textarea{width:100%;min-height:410px;background:#0b1117;color:#dce8f5;border:1px solid #33495b;border-radius:8px;padding:13px;font:12px ui-monospace,monospace;resize:vertical}label{display:block;color:#b7c4d0;font-size:13px;margin:14px 0}input,select{display:block;width:100%;margin-top:7px;background:#0b1117;color:#ecf3fa;border:1px solid #33495b;border-radius:8px;padding:11px}.row{display:grid;grid-template-columns:180px 1fr;gap:12px;margin-bottom:14px}button{background:#58c3a4;border:0;border-radius:8px;color:#071711;font-weight:700;padding:11px 16px;cursor:pointer;margin-top:12px}button:hover{filter:brightness(1.08)}button.ghost{background:transparent;border:1px solid #486275;color:#c6d5df;margin:0}.center{display:grid;place-items:center}.login{width:min(400px,calc(100% - 32px))}.error{background:#4c252a;color:#ffb8bd;padding:10px;border-radius:7px;font-size:13px}#save-result{margin-top:10px;color:#8bd8bd}button:disabled{opacity:.7;cursor:progress;filter:none}.spinner{display:inline-block;width:13px;height:13px;margin-right:8px;vertical-align:-2px;border:2px solid rgba(7,23,17,.35);border-top-color:#071711;border-radius:50%;animation:spin .6s linear infinite}button.ghost .spinner{border-color:rgba(198,213,223,.35);border-top-color:#c6d5df}@keyframes spin{to{transform:rotate(360deg)}}.pending{color:#e6c766}.ok{color:#8bd8bd}.error{background:#4c252a;color:#ffb8bd;padding:10px;border-radius:7px;font-size:13px}pre.ok,pre.error{background:#0b1117}pre.error{color:#ffb8bd}@media(max-width:760px){.layout{grid-template-columns:1fr}.card:nth-child(3){grid-column:auto}.row{grid-template-columns:1fr}}
