Files
simple-file-share/style.css
2025-06-13 14:59:47 +03:00

433 lines
8.2 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Сброс и базовые стили */
* {
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; }
}