.login-container{align-items:center;background:linear-gradient(135deg,#667eea,#764ba2);display:flex;justify-content:center;min-height:100vh;padding:20px}.login-card{animation:slideUp .5s ease-out;background:#fff;border-radius:16px;box-shadow:0 20px 60px #0000004d;max-width:420px;padding:40px;width:100%}.login-header{margin-bottom:30px;text-align:center}.logo-container{background:linear-gradient(135deg,#667eea,#764ba2);border-radius:16px;display:inline-flex;margin-bottom:20px;padding:15px}.logo-icon{color:#fff}.login-title{color:#1a202c;font-size:28px;font-weight:700;margin:0 0 8px}.login-subtitle{color:#718096;font-size:14px;margin:0}.error-message{align-items:center;background:#fee;border:1px solid #fcc;border-radius:8px;color:#c33;display:flex;font-size:14px;gap:8px;margin-bottom:20px;padding:12px 16px}.login-form{display:flex;flex-direction:column;gap:20px}.form-label,.login-button{align-items:center;display:flex;gap:8px}.login-button{background:linear-gradient(135deg,#667eea,#764ba2);border:none;border-radius:8px;color:#fff;cursor:pointer;font-size:16px;font-weight:600;justify-content:center;margin-top:10px;padding:14px 24px;transition:all .2s}.login-button:hover:not(:disabled){box-shadow:0 10px 20px #667eea4d;transform:translateY(-2px)}.login-button:active:not(:disabled){transform:translateY(0)}.login-button:disabled{cursor:not-allowed;opacity:.7}.spinner{animation:spin .8s linear infinite;border:2px solid #ffffff4d;border-radius:50%;border-top-color:#fff;height:16px;width:16px}.login-footer{margin-top:24px;text-align:center}.hint-text{color:#718096;font-size:13px;margin:0}.hint-text strong{color:#2d3748;font-weight:600}@media (max-width:480px){.login-card{padding:30px 24px}.login-title{font-size:24px}}.app-card{background:#fff;border-radius:12px;box-shadow:0 2px 8px #0000001a;display:flex;flex-direction:column;gap:16px;padding:20px;transition:all .3s}.app-card:hover{box-shadow:0 4px 16px #00000026;transform:translateY(-2px)}.app-card-header{align-items:flex-start;display:flex;gap:12px;justify-content:space-between}.app-info{flex:1 1;min-width:0}.app-name{color:#1a202c;font-size:20px;font-weight:700;margin:0 0 8px;word-break:break-word}.app-meta{color:#718096;display:flex;font-size:13px;gap:12px}.app-id,.app-port{font-family:Courier New,monospace}.status-indicator{align-items:center;background:#0000000d;border-radius:20px;color:#718096;color:var(--status-color,#718096);display:flex;font-size:13px;font-weight:600;gap:6px;padding:6px 12px;white-space:nowrap}.app-services{background:#f7fafc;border-radius:8px;display:flex;flex-direction:column;gap:8px;padding:12px}.service-status{align-items:center;display:flex;font-size:14px;justify-content:space-between}.service-label{color:#4a5568;font-weight:500}.service-indicator{font-size:13px;font-weight:600;gap:6px}.app-roles,.service-indicator{align-items:center;display:flex}.app-roles{flex-wrap:wrap;gap:8px}.roles-label{color:#718096;font-size:13px;font-weight:500}.roles-list{display:flex;flex-wrap:wrap;gap:6px}.roles-header{align-items:center;display:flex;justify-content:space-between;width:100%}.roles-editor{display:flex;flex-direction:column;gap:12px}.checkbox-label .checkbox-system{background:#edf2f7;border-radius:10px;color:#718096;font-size:11px;padding:2px 6px}.role-badge{border-radius:12px;font-size:12px;font-weight:600;padding:4px 10px;text-transform:capitalize}.role-admin{background:#e0e7ff;color:#4338ca}.role-user{background:#dbeafe;color:#1e40af}.role-private{background:#fce7f3;color:#9f1239}.role-superadmin{background:#f3e8ff;color:#6b21a8}.app-description{background:#f8fafc;border-radius:8px;display:flex;flex-direction:column;gap:8px;padding:12px}.description-header{align-items:center;display:flex;gap:8px;justify-content:space-between}.description-label{color:#4a5568;font-size:13px;font-weight:600;letter-spacing:.05em;text-transform:uppercase}.description-edit-btn{align-items:center;background:#e0e7ff;border:none;border-radius:6px;color:#4338ca;cursor:pointer;display:inline-flex;font-size:12px;font-weight:600;gap:6px;padding:6px 10px;transition:background .2s}.description-edit-btn:hover{background:#c7d2fe}.description-text{color:#2d3748;font-size:14px;line-height:1.5;white-space:pre-wrap;word-break:break-word}.description-empty{color:#718096;font-style:italic}.description-textarea{border:2px solid #e2e8f0;border-radius:8px;font-size:14px;line-height:1.5;min-height:100px;outline:none;padding:10px 12px;resize:vertical;transition:all .2s;width:100%}.description-textarea:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.description-textarea:disabled{background:#edf2f7;cursor:not-allowed}.description-meta{align-items:center;color:#718096;display:flex;font-size:12px;gap:8px;justify-content:flex-end}.description-counter{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.description-draft-note{color:#4a5568;font-style:italic;margin-right:auto}.description-error{background:#fed7d7;border-radius:6px;color:#c53030;font-size:13px;padding:6px 8px}.description-actions{display:flex;gap:8px}.description-cancel-btn,.description-save-btn{align-items:center;border:none;border-radius:6px;cursor:pointer;display:inline-flex;font-size:13px;font-weight:600;gap:6px;padding:8px 12px;transition:background .2s,transform .2s}.description-save-btn{background:#dcfce7;color:#166534}.description-save-btn:hover:not(:disabled){background:#bbf7d0}.description-cancel-btn{background:#e2e8f0;color:#4a5568}.description-cancel-btn:hover:not(:disabled){background:#cbd5f5}.description-cancel-btn:disabled,.description-save-btn:disabled{cursor:not-allowed;opacity:.6}.description-cancel-btn:hover:not(:disabled),.description-save-btn:hover:not(:disabled){transform:translateY(-1px)}.app-actions{border-top:1px solid #e2e8f0;display:flex;gap:8px;padding-top:8px}.action-btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:flex;flex:1 1;font-weight:600;justify-content:center;padding:10px;transition:all .2s}.action-btn:hover:not(:disabled){transform:translateY(-1px)}.action-btn:active:not(:disabled){transform:translateY(0)}.action-btn:disabled{cursor:not-allowed;opacity:.5}.action-start{background:#dcfce7;color:#16a34a}.action-start:hover:not(:disabled){background:#bbf7d0}.action-stop{background:#fee2e2;color:#dc2626}.action-stop:hover:not(:disabled){background:#fecaca}.action-restart{background:#fef3c7;color:#d97706}.action-restart:hover:not(:disabled){background:#fde68a}.action-open{background:#dbeafe;color:#2563eb;text-decoration:none}.action-open:hover{background:#bfdbfe}.action-delete{background:#ffe4e6;color:#e11d48}.action-delete:hover:not(:disabled){background:#fecdd3}.health-meta{align-items:center;color:#4a5568;display:flex;font-size:12px;gap:8px;margin-top:6px}.health-meta .badge{border-radius:9999px;font-size:11px;font-weight:700;padding:2px 8px;text-transform:capitalize}.badge-ok{background:#dcfce7;color:#166534}.badge-fail{background:#fee2e2}.badge-fail,.health-error{color:#991b1b}@media (max-width:768px){.app-card-header{flex-direction:column}.status-indicator{align-self:flex-start}.app-actions{flex-wrap:wrap}.action-btn{min-width:calc(50% - 4px)}}.modal-overlay{align-items:center;animation:fadeIn .2s;background:#0009;bottom:0;display:flex;justify-content:center;left:0;padding:20px;position:fixed;right:0;top:0;z-index:1000}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-content{animation:slideUp .3s ease-out;background:#fff;border-radius:16px;box-shadow:0 20px 60px #0000004d;max-height:90vh;max-width:600px;overflow-y:auto;width:100%}.modal-large{max-width:900px}@keyframes slideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.modal-header{align-items:center;border-bottom:1px solid #e2e8f0;display:flex;gap:16px;justify-content:space-between;padding:24px}.modal-title-group{align-items:center;color:#667eea;display:flex;gap:12px}.modal-title{color:#1a202c;font-size:24px;font-weight:700;margin:0}.modal-close{align-items:center;background:#0000;border:none;border-radius:8px;color:#718096;cursor:pointer;display:flex;justify-content:center;padding:8px;transition:all .2s}.modal-close:hover{background:#f7fafc;color:#2d3748}.modal-error{background:#fee;border:1px solid #fcc;border-radius:8px;color:#c33;font-size:14px;margin:20px 24px;padding:12px 16px}.modal-form{gap:20px;padding:24px}.form-group,.modal-form{display:flex;flex-direction:column}.form-group{gap:8px}.form-label{color:#2d3748;font-size:14px;font-weight:600}.form-input{border:2px solid #e2e8f0;border-radius:8px;font-size:15px;outline:none;padding:12px 16px;transition:all .2s}.form-input:focus{border-color:#667eea;box-shadow:0 0 0 3px #667eea1a}.form-textarea{line-height:1.5;min-height:100px;resize:vertical}.form-input:disabled{background:#f7fafc;cursor:not-allowed}.form-hint{color:#718096;font-size:13px;margin:0}.port-suggestions{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.suggestion-label{color:#718096;font-size:13px;font-weight:500}.port-btn{background:#e0e7ff;border:1px solid #c7d2fe;border-radius:6px;color:#4338ca;cursor:pointer;font-family:Courier New,monospace;font-size:13px;font-weight:600;padding:6px 12px;transition:all .2s}.port-btn:hover:not(:disabled){background:#c7d2fe}.port-btn:disabled{cursor:not-allowed;opacity:.5}.role-checkboxes{background:#f7fafc;border-radius:8px;display:flex;flex-direction:column;gap:12px;padding:12px}.checkbox-label{align-items:center;cursor:pointer;display:flex;gap:10px;-webkit-user-select:none;user-select:none}.checkbox-label input[type=checkbox]{cursor:pointer;height:18px;width:18px}.checkbox-text{color:#2d3748;font-size:14px;font-weight:500}.modal-actions{border-top:1px solid #e2e8f0;display:flex;gap:12px;justify-content:flex-end;padding-top:8px}.btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:flex;font-size:15px;font-weight:600;gap:8px;justify-content:center;padding:12px 24px;transition:all .2s}.btn:disabled{cursor:not-allowed;opacity:.5}.btn-primary{background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.btn-primary:hover:not(:disabled){box-shadow:0 6px 20px #667eea4d;transform:translateY(-2px)}.btn-secondary{background:#f7fafc;border:1px solid #e2e8f0;color:#2d3748}.btn-secondary:hover:not(:disabled){background:#edf2f7;border-color:#cbd5e0}.creation-progress{background:#f7fafc;border-top:1px solid #e2e8f0;padding:20px 24px;text-align:center}.creation-progress p{color:#4a5568;font-size:14px;margin:8px 0}.progress-detail{align-items:center;color:#718096;display:flex;font-size:13px;gap:8px;justify-content:center}.settings-content{display:flex;flex-direction:column;gap:24px;padding:24px}.create-user-form{background:#f7fafc;border:2px solid #e2e8f0;border-radius:12px;padding:20px}.settings-tabs{background:#f1f5f9;border-radius:10px;display:inline-flex;gap:8px;margin-bottom:20px;padding:6px}.settings-tab{background:#0000;border:none;border-radius:8px;color:#4a5568;cursor:pointer;font-weight:600;padding:8px 14px;transition:all .2s}.settings-tab.active{box-shadow:0 1px 3px #0f172a26}.settings-tab.active,.settings-tab:hover{background:#fff;color:#1a202c}.roles-management{display:flex;flex-direction:column;gap:16px}.create-role-form{background:#f7fafc;border:1px solid #e2e8f0;border-radius:12px;padding:16px}.roles-actions{display:flex;flex-wrap:wrap;gap:8px}.roles-system-tag{background:#e2e8f0;border-radius:12px;color:#4a5568;font-size:12px;padding:4px 8px}.roles-btn{align-items:center;border:none;border-radius:8px;cursor:pointer;display:inline-flex;font-size:13px;font-weight:600;gap:6px;padding:8px 12px;transition:transform .2s,background .2s}.roles-btn:disabled{cursor:not-allowed;opacity:.6}.roles-btn:not(:disabled):hover{transform:translateY(-1px)}.roles-btn-primary{background:#2563eb;color:#fff}.roles-btn-primary:hover:not(:disabled){background:#1d4ed8}.roles-btn-secondary{background:#e2e8f0;color:#1a202c}.roles-btn-secondary:hover:not(:disabled){background:#cbd5f5}.roles-btn-danger{background:#fee2e2;color:#b91c1c}.roles-btn-danger:hover:not(:disabled){background:#fecaca}.create-user-form h3{color:#2d3748;font-size:18px;margin:0 0 16px}.form-row{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin-bottom:16px}.form-actions{display:flex;gap:12px;justify-content:flex-end}.users-list h3{color:#2d3748;font-size:18px;margin:0 0 16px}.loading-users{align-items:center;color:#718096;display:flex;flex-direction:column;gap:12px;padding:40px}.empty-message{color:#718096;padding:40px;text-align:center}.users-table{background:#fff;border-collapse:collapse;border-radius:8px;box-shadow:0 1px 3px #0000001a;overflow:hidden;width:100%}.users-table thead{background:#f7fafc}.users-table th{color:#4a5568;font-size:13px;font-weight:600;letter-spacing:.05em;padding:12px 16px;text-align:left;text-transform:uppercase}.users-table td{border-top:1px solid #e2e8f0;color:#2d3748;font-size:14px;padding:16px}.username-cell{align-items:center;display:flex;font-weight:600;gap:8px}.current-user-badge{background:#dbeafe;border-radius:12px;color:#1e40af;font-size:11px;font-weight:600;padding:2px 8px;text-transform:uppercase}.date-cell{color:#718096;font-size:13px}.action-delete-small{align-items:center;background:#ffe4e6;border:none;border-radius:6px;color:#e11d48;cursor:pointer;display:flex;justify-content:center;padding:6px 10px;transition:all .2s}.action-delete-small:hover:not(:disabled){background:#fecdd3}.action-delete-small:disabled{cursor:not-allowed;opacity:.3}@media (max-width:768px){.modal-content{border-radius:0;max-height:100vh;max-width:100%}.form-row{grid-template-columns:1fr}.users-table{font-size:13px}.users-table td,.users-table th{padding:10px 12px}}.dashboard{background:#f7fafc;min-height:100vh}.dashboard-loading{align-items:center;color:#718096;display:flex;flex-direction:column;gap:16px;justify-content:center;min-height:100vh}.dashboard-header{align-items:center;background:#fff;box-shadow:0 2px 4px #0000000d;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;padding:20px 32px}.header-left{flex:1 1;min-width:250px}.header-logo{align-items:center;color:#667eea;display:flex;gap:16px}.header-title{color:#1a202c;font-size:24px;font-weight:700;margin:0}.header-subtitle{color:#718096;font-size:14px;margin:4px 0 0}.header-subtitle strong{color:#2d3748;font-weight:600}.header-actions{display:flex;flex-wrap:wrap;gap:12px}.header-btn{align-items:center;background:#f7fafc;border:1px solid #e2e8f0;border-radius:8px;color:#2d3748;cursor:pointer;display:flex;font-size:14px;font-weight:600;gap:8px;padding:10px 16px;transition:all .2s}.header-btn:hover:not(:disabled){background:#edf2f7;border-color:#cbd5e0}.header-btn:disabled{cursor:not-allowed;opacity:.5}.header-btn-primary{background:linear-gradient(135deg,#667eea,#764ba2);border:none;color:#fff}.header-btn-primary:hover:not(:disabled){box-shadow:0 4px 12px #667eea4d;transform:translateY(-2px)}.header-btn-logout{background:#fee;border-color:#fcc;color:#c33}.header-btn-logout:hover:not(:disabled){background:#fdd;border-color:#fbb}.dashboard-content{margin:0 auto;max-width:1400px;padding:32px}.empty-state{align-items:center;color:#718096;display:flex;flex-direction:column;justify-content:center;min-height:400px;text-align:center}.empty-state svg{margin-bottom:24px;opacity:.5}.empty-state h2{color:#2d3748;font-size:24px;margin:0 0 8px}.empty-state p{font-size:16px;margin:0 0 24px}.create-app-btn{align-items:center;background:linear-gradient(135deg,#667eea,#764ba2);border:none;border-radius:8px;color:#fff;cursor:pointer;display:flex;font-size:16px;font-weight:600;gap:8px;padding:12px 24px;transition:all .2s}.create-app-btn:hover{box-shadow:0 6px 20px #667eea4d;transform:translateY(-2px)}.apps-grid{grid-gap:24px;display:grid;gap:24px;grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.spin{animation:spin 1s linear infinite}@media (max-width:768px){.dashboard-header{padding:16px 20px}.header-actions{width:100%}.header-btn{flex:1 1;justify-content:center}.header-btn span{display:none}.dashboard-content{padding:20px}.apps-grid{grid-template-columns:1fr}}@media (max-width:480px){.header-logo{gap:12px}.header-logo svg{height:24px;width:24px}.header-title{font-size:20px}.header-subtitle{font-size:13px}}*{box-sizing:border-box}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.loading-screen{align-items:center;background:#f7fafc;display:flex;flex-direction:column;gap:20px;justify-content:center;min-height:100vh}.spinner-large{animation:spin .8s linear infinite;border:4px solid #667eea33;border-radius:50%;border-top-color:#667eea;height:48px;width:48px}.loading-screen p{color:#718096;font-size:16px;font-weight:500}@keyframes spin{to{transform:rotate(1turn)}}::-webkit-scrollbar{height:10px;width:10px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb{background:#cbd5e0;border-radius:5px}::-webkit-scrollbar-thumb:hover{background:#a0aec0}
/*# sourceMappingURL=main.16558360.css.map*/