Files
vServer/Backend/admin/frontend/assets/css/components/modals.css
Falknat 4b13923375 Добавление и Удаление сайта
Backend (Go):
- Добавлен полный функционал создания сайтов
- Добавлен функционал удаления сайтов
- Новые API методы в admin.go:
- Добавлен шаблон стартовой страницы
- Добавлена функция DecodeBase64

Исправления критических ошибок:
- Исправлена работа wildcard алиасов (*.domain.com) в handler.go
- Исправлены ошибки "файл не найден" при создании файлов

Frontend (JavaScript + HTML + CSS):
- Добавлена страница создания сайта
- Добавлена кнопка "Удалить сайт" в редактировании
- Мелкие доработки стилей

Build:
- Обновлён build_admin.ps1 - добавлен шаг генерации биндингов (wails generate module)

Fixes:
- #fix Wildcard алиасы (*.domain.com) теперь работают корректно
- #fix Удалён порт из host при проверке алиасов
- #fix Приоритет точных доменов над wildcard
- #fix Ошибки "файл не найден" при создании сайтов/vAccess
- #fix Секция добавления сайта теперь скрывается при навигации
2025-11-14 14:18:26 +07:00

228 lines
5.0 KiB
CSS

/* ============================================
Modals Component
Единая система модальных окон
============================================ */
/* Modal Overlay */
.modal-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.7);
backdrop-filter: var(--backdrop-blur-light);
z-index: var(--z-modal);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
pointer-events: none;
transition: opacity var(--transition-slow);
&.show {
opacity: 1;
pointer-events: auto;
.modal-window {
transform: scale(1);
}
.notification-content {
transform: scale(1);
}
}
}
/* Modal Window */
.modal-window {
background: rgba(20, 20, 40, 0.95);
backdrop-filter: var(--backdrop-blur);
border: 1px solid var(--glass-border-hover);
border-radius: var(--radius-2xl);
box-shadow: var(--shadow-lg);
min-width: 900px;
max-width: 1200px;
max-height: 85vh;
overflow: hidden;
transform: scale(0.9);
transition: transform var(--transition-slow);
}
.modal-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px var(--space-lg);
border-bottom: 1px solid var(--glass-border);
}
.modal-title {
font-size: var(--text-xl);
font-weight: var(--font-semibold);
color: var(--text-primary);
}
.modal-close-btn {
width: 32px;
height: 32px;
background: transparent;
border: none;
border-radius: var(--radius-md);
color: var(--text-secondary);
cursor: pointer;
transition: all var(--transition-base);
display: flex;
align-items: center;
justify-content: center;
&:hover {
background: rgba(239, 68, 68, 0.2);
color: var(--accent-red);
}
}
.modal-content {
padding: var(--space-lg);
max-height: 60vh;
overflow-y: auto;
}
.modal-footer {
display: flex;
justify-content: flex-end;
gap: 8px;
padding: 20px var(--space-lg);
border-top: 1px solid var(--glass-border);
}
.modal-footer .action-btn {
margin: 0;
}
/* Notification Modal */
.notification {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.6);
backdrop-filter: var(--backdrop-blur-light);
z-index: var(--z-notification);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
pointer-events: none;
transition: opacity var(--transition-slow);
&.show {
opacity: 1;
pointer-events: auto;
}
}
.notification-content {
min-width: 400px;
max-width: 500px;
padding: var(--space-xl) 40px;
background: rgba(20, 20, 40, 0.95);
backdrop-filter: var(--backdrop-blur);
border: 1px solid var(--glass-border-hover);
border-radius: var(--radius-2xl);
box-shadow: var(--shadow-lg), 0 0 40px rgba(139, 92, 246, 0.3);
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
text-align: center;
transform: scale(0.9);
transition: transform var(--transition-bounce);
}
.notification.success .notification-content {
border-color: rgba(16, 185, 129, 0.4);
box-shadow: var(--shadow-lg), 0 0 40px rgba(16, 185, 129, 0.3);
}
.notification.error .notification-content {
border-color: rgba(239, 68, 68, 0.4);
box-shadow: var(--shadow-lg), 0 0 40px rgba(239, 68, 68, 0.3);
}
.notification-icon {
font-size: 56px;
i {
display: block;
}
}
.notification.success .notification-icon {
color: var(--accent-green);
}
.notification.error .notification-icon {
color: var(--accent-red);
}
.notification-text {
font-size: var(--text-lg);
font-weight: var(--font-semibold);
color: var(--text-primary);
line-height: 1.6;
}
/* App Loader */
.app-loader {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(135deg, var(--bg-primary) 0%, var(--bg-secondary) 50%, var(--bg-tertiary) 100%);
z-index: var(--z-loader);
display: flex;
align-items: center;
justify-content: center;
opacity: 1;
transition: opacity 0.5s ease;
&.hide {
opacity: 0;
pointer-events: none;
}
}
.loader-content {
display: flex;
flex-direction: column;
align-items: center;
gap: 20px;
}
.loader-icon {
font-size: 64px;
animation: bounce 1.5s ease-in-out infinite;
}
.loader-text {
font-size: var(--text-xl);
font-weight: var(--font-semibold);
background: linear-gradient(135deg, #7c3aed 0%, #a78bfa 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.loader-spinner {
width: 40px;
height: 40px;
border: 3px solid rgba(139, 92, 246, 0.2);
border-top-color: var(--accent-purple);
border-radius: var(--radius-full);
animation: spin 0.8s linear infinite;
}