*{box-sizing:border-box}body{margin:0;font-family:Segoe UI,Roboto,Arial,sans-serif;color:#1a2230;background:#f4f6fa}.center{min-height:100vh;display:flex;align-items:center;justify-content:center}.muted{color:#6b7688}.small{font-size:12px}.error{color:#c0392b}.spacer{flex:1}.card{background:#fff;border:1px solid #e2e6ee;border-radius:10px;padding:20px;margin:0 0 18px;box-shadow:0 1px 3px #0000000a}.card h2,.card h3{margin-top:0}form.card{width:320px;display:flex;flex-direction:column;gap:10px}label{display:flex;flex-direction:column;gap:4px;font-size:13px}input,select{padding:8px 10px;border:1px solid #cbd3e1;border-radius:6px;font-size:14px;background:#fff}button{padding:8px 12px;border:0;border-radius:6px;background:#2b6cb0;color:#fff;font-size:14px;cursor:pointer}button:disabled{background:#b6c2d4;cursor:default}button.secondary{background:#e2e8f0;color:#2a3547}button.link{background:none;color:#2b6cb0;padding:0 4px;text-decoration:underline}button.active{background:#1a4b82}.app header{display:flex;align-items:center;gap:14px;padding:12px 20px;background:#fff;border-bottom:1px solid #e2e6ee;position:sticky;top:0;z-index:10}.app header nav{display:flex;gap:8px}.app header nav button{background:#eef2f8;color:#2a3547}.app header nav button.active{background:#2b6cb0;color:#fff}.env-badge{font-size:12px;font-weight:700;padding:3px 8px;border-radius:20px}header.env-prod .env-badge{background:#fde8e8;color:#c0392b}header.env-dev .env-badge{background:#e6f4ea;color:#2a7a43}main{padding:20px;max-width:min(1680px,95vw);margin:0 auto}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:10px 8px;border-bottom:1px solid #eef1f6;vertical-align:top;font-size:14px;overflow-wrap:anywhere}th{font-size:12px;text-transform:uppercase;color:#6b7688}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}code{background:#f0f2f6;padding:1px 5px;border-radius:4px;font-size:12px}.pill{display:inline-block;padding:2px 8px;border-radius:20px;font-size:12px;background:#eef2f8;color:#2a3547}.pill.ok{background:#e6f4ea;color:#2a7a43}.pill.warn{background:#fff4e0;color:#9a6a00}.pill.error{background:#fde8e8;color:#c0392b}.banner{padding:10px 14px;border-radius:8px;margin:0 0 14px;font-size:14px}.banner.ok{background:#e6f4ea;color:#2a7a43}.banner.error{background:#fde8e8;color:#c0392b}.modal-overlay{position:fixed;inset:0;background:#141a2680;display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;overflow:auto;z-index:50}.modal{background:#fff;border-radius:12px;padding:24px;width:640px;max-width:100%;box-shadow:0 10px 40px #0003}.modal h3{margin-top:0}.modal h4{margin:18px 0 6px;color:#6b7688;font-size:13px;text-transform:uppercase}.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:end}.grid2 .col2{grid-column:1 / -1}.grid2 label.checkbox{flex-direction:row;align-items:center;gap:8px}.req{color:#c0392b}.filebtn{display:inline-block;padding:8px 12px;border-radius:6px;background:#e2e8f0;color:#2a3547;cursor:pointer;font-size:14px}.confirm{margin-top:14px;padding:14px;border:1px solid #f0c674;background:#fffaf0;border-radius:8px}.clickable-row{cursor:pointer}.clickable-row:hover>td{background:#f4f7fc}.expand-row>td{background:#e8eef7;padding:10px 16px 12px 24px;box-shadow:inset 3px 0 #2b6cb0}.machine-block{padding:8px 0;border-top:1px solid #d3dcea}.machine-block:first-child{border-top:0}.machine-block code{background:#dbe4f1}.machine-meta{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:4px}.machine-meta .pill{background:#e6f0fb;color:#1a4b82}.progress{height:8px;background:#e2e8f0;border-radius:6px;margin-top:10px;overflow:hidden}.progress-bar{height:100%;background:#2b6cb0;transition:width .2s}.btn-link{display:inline-block;padding:8px 12px;border-radius:6px;background:#2b6cb0;color:#fff;font-size:14px;text-decoration:none}.busy-overlay{position:fixed;inset:0;background:#f4f6fa99;display:flex;align-items:center;justify-content:center;z-index:100}.busy-box{background:#fff;border:1px solid #e2e6ee;border-radius:10px;padding:18px 24px;display:flex;align-items:center;gap:12px;box-shadow:0 6px 24px #0000001f;font-size:14px;color:#2a3547}.spinner{width:22px;height:22px;border:3px solid #d7deea;border-top-color:#2b6cb0;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.roleblock{border:1px solid #e2e6ee;border-radius:8px;padding:12px;margin-bottom:10px}.perm{display:flex;flex-direction:column;gap:4px;align-items:flex-start}.perm span{color:#6b7688}
