/* Сброс и базовые стили */ * { margin: 0; padding: 0; box-sizing: border-box; } :root { /* Цветовая палитра */ --primary: #2563eb; --primary-hover: #1d4ed8; --success: #059669; --success-light: #d1fae5; --error: #dc2626; --error-light: #fee2e2; --warning: #d97706; --warning-light: #fef3c7; /* Нейтральные цвета */ --gray-50: #f9fafb; --gray-100: #f3f4f6; --gray-200: #e5e7eb; --gray-300: #d1d5db; --gray-400: #9ca3af; --gray-500: #6b7280; --gray-600: #4b5563; --gray-700: #374151; --gray-800: #1f2937; --gray-900: #111827; /* Размеры и отступы */ --border-radius: 8px; --border-radius-lg: 12px; --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); /* Шрифты */ --font-system: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; --font-mono: 'SF Mono', Monaco, Inconsolata, 'Roboto Mono', Consolas, 'Courier New', monospace; } body { font-family: var(--font-system); font-size: 15px; line-height: 1.6; color: var(--gray-700); background: var(--gray-50); min-height: 100vh; display: flex; flex-direction: column; align-items: center; padding: 2rem 1rem; } /* Контейнер */ .container { width: 100%; max-width: 720px; background: white; border-radius: var(--border-radius-lg); box-shadow: var(--shadow); overflow: hidden; } /* Заголовок */ .header { background: linear-gradient(135deg, var(--primary) 0%, var(--primary-hover) 100%); color: white; padding: 2rem; text-align: center; } .header h1 { font-size: 1.5rem; font-weight: 600; margin-bottom: 0.5rem; } .header .logout { color: rgba(255, 255, 255, 0.8); text-decoration: none; font-size: 0.9rem; transition: color 0.2s ease; } .header .logout:hover { color: white; } /* Основной контент */ .content { padding: 2rem; } /* Форма входа */ .login-form { max-width: 400px; margin: 4rem auto; background: white; padding: 2.5rem; border-radius: var(--border-radius-lg); box-shadow: var(--shadow-lg); } .login-form h3 { font-size: 1.5rem; font-weight: 600; text-align: center; margin-bottom: 2rem; color: var(--gray-800); } /* Уведомления */ .notification { padding: 1rem 1.25rem; margin-bottom: 1.5rem; border-radius: var(--border-radius); border: 1px solid; font-size: 0.9rem; font-weight: 500; display: none; animation: slideIn 0.3s ease-out; } .notification.success { background-color: var(--success-light); border-color: var(--success); color: #065f46; } .notification.error { background-color: var(--error-light); border-color: var(--error); color: #991b1b; } .notification.info { background-color: #dbeafe; border-color: var(--primary); color: #1e40af; } @keyframes slideIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } /* Поля ввода */ input[type="password"], input[type="file"] { width: 100%; padding: 0.75rem 1rem; border: 2px solid var(--gray-200); border-radius: var(--border-radius); font-size: 0.95rem; transition: all 0.2s ease; background: white; } input[type="password"]:focus, input[type="file"]:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); } input[type="password"] { margin-bottom: 1.5rem; } /* Кнопки */ button, .btn { display: inline-flex; align-items: center; justify-content: center; padding: 0.75rem 1.5rem; font-size: 0.9rem; font-weight: 500; border-radius: var(--border-radius); border: none; cursor: pointer; text-decoration: none; transition: all 0.2s ease; gap: 0.5rem; } .btn-primary { background: var(--primary); color: white; } .btn-primary:hover { background: var(--primary-hover); transform: translateY(-1px); box-shadow: var(--shadow); } .btn-secondary { background: var(--gray-100); color: var(--gray-700); border: 1px solid var(--gray-200); } .btn-secondary:hover { background: var(--gray-200); border-color: var(--gray-300); } .btn-small { padding: 0.5rem 0.75rem; font-size: 0.8rem; } .btn-danger { background: var(--error); color: white; } .btn-danger:hover { background: #b91c1c; } /* Область загрузки */ .upload-area { margin-bottom: 2rem; } .upload-zone { border: 2px dashed var(--gray-300); border-radius: var(--border-radius); padding: 2rem; text-align: center; transition: all 0.3s ease; cursor: pointer; position: relative; overflow: hidden; } .upload-zone:hover { border-color: var(--primary); background: rgba(37, 99, 235, 0.02); } .upload-zone.dragover { border-color: var(--primary); background: rgba(37, 99, 235, 0.05); transform: scale(1.02); } .file-input-hidden { position: absolute; opacity: 0; width: 100%; height: 100%; cursor: pointer; } .upload-text { color: var(--gray-500); font-size: 0.9rem; } .upload-text strong { color: var(--primary); } /* Прогресс загрузки */ .progress-container { margin-top: 1rem; display: none; } .progress-bar { width: 100%; height: 8px; background: var(--gray-200); border-radius: 4px; overflow: hidden; } .progress-fill { height: 100%; background: linear-gradient(90deg, var(--primary), var(--primary-hover)); border-radius: 4px; transition: width 0.3s ease; width: 0%; } .progress-text { font-size: 0.8rem; color: var(--gray-600); text-align: center; margin-top: 0.5rem; } /* Список файлов */ .files-list { list-style: none; } .file-item { display: flex; align-items: center; justify-content: space-between; padding: 1rem; border: 1px solid var(--gray-200); border-radius: var(--border-radius); margin-bottom: 0.75rem; background: white; transition: all 0.2s ease; } .file-item:hover { border-color: var(--gray-300); box-shadow: var(--shadow-sm); } .file-info { flex: 1; min-width: 0; } .file-name { font-weight: 500; color: var(--gray-800); margin-bottom: 0.25rem; word-break: break-all; } .file-size { font-size: 0.8rem; color: var(--gray-500); font-family: var(--font-mono); } .file-actions { display: flex; gap: 0.5rem; flex-shrink: 0; margin-left: 1rem; } .file-actions .btn { padding: 0.4rem 0.8rem; font-size: 0.8rem; } /* Пустое состояние */ .empty-state { text-align: center; padding: 3rem 2rem; color: var(--gray-500); } .empty-state svg { width: 48px; height: 48px; margin-bottom: 1rem; opacity: 0.5; } /* Адаптивность */ @media (max-width: 640px) { body { padding: 1rem 0.5rem; } .container { border-radius: 0; box-shadow: none; min-height: 100vh; } .header, .content { padding: 1.5rem; } .file-item { flex-direction: column; align-items: flex-start; gap: 1rem; } .file-actions { margin-left: 0; align-self: stretch; } .file-actions .btn { flex: 1; } .upload-zone { padding: 1.5rem 1rem; } } /* Темные акценты для интерактивных элементов */ input[type="file"]::-webkit-file-upload-button { background: var(--primary); color: white; border: none; padding: 0.5rem 1rem; border-radius: calc(var(--border-radius) - 2px); font-size: 0.8rem; font-weight: 500; cursor: pointer; margin-right: 1rem; } input[type="file"]::-webkit-file-upload-button:hover { background: var(--primary-hover); } /* Анимации */ .fade-in { animation: fadeIn 0.5s ease-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }