/
valesnikov
/
pdfbookts
Обзор
Документация
Войти
/
valesnikov
/
pdfbookts
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/App.css
260 строк
4 KB
Vladimir Lesnikov
init
23 апр 2026, 11:05
Верифицирован
23 апр 2026, 11:05
bd0d27f
Код
Авторство
О чём код?
.app-wrapper { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; padding: 1rem; } .container { width: 100%; max-width: 480px; } .card { background-color: var(--card-color); border-radius: 16px; padding: 2.5rem; box-shadow: 0 10px 25px -5px rgb(0 0 0 / 50%); text-align: center; border: 1px solid var(--border-color); transition: transform 0.2s ease; } .icon-container { width: 80px; height: 80px; background-color: rgb(59 130 246 / 10%); border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 1.5rem; color: var(--accent-color); } .title { font-size: 1.5rem; font-weight: 600; margin-bottom: 0.5rem; color: var(--text-primary); } .subtitle { color: var(--text-secondary); font-size: 0.95rem; margin-bottom: 2rem; line-height: 1.5; } .upload-area { border: 2px dashed var(--border-color); border-radius: 12px; padding: 2rem; transition: all 0.3s ease; cursor: pointer; position: relative; overflow: hidden; } .upload-area:hover { border-color: var(--accent-color); background-color: rgb(59 130 246 / 5%); } .upload-area--active { border-color: var(--accent-color); background-color: rgb(59 130 246 / 12%); } .btn-primary { background-color: var(--accent-color); color: #fff; border: 0; padding: 0.75rem 1.5rem; border-radius: 8px; font-weight: 500; font-size: 1rem; cursor: pointer; transition: background-color 0.2s; display: inline-flex; align-items: center; gap: 0.5rem; margin-top: 1rem; } .btn-primary:hover:not(:disabled) { background-color: var(--accent-hover); } .btn-primary:disabled { opacity: 0.6; cursor: not-allowed; } .file-info { margin-top: 1.5rem; padding: 1rem; background-color: rgb(255 255 255 / 5%); border-radius: 8px; display: flex; align-items: center; justify-content: space-between; animation: fade-in 0.3s ease-out; } .file-details { text-align: left; overflow: hidden; } .file-name { font-weight: 500; font-size: 0.9rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 200px; display: block; } .file-size { font-size: 0.8rem; color: var(--text-secondary); margin-top: 0.25rem; } .file-actions { display: flex; align-items: center; gap: 10px; } .status-badge { font-size: 0.75rem; padding: 0.25rem 0.5rem; border-radius: 4px; background-color: var(--success-color); color: #000; font-weight: 700; } .status-badge--processing { background-color: var(--accent-color); color: #fff; animation: pulse 1.5s infinite; } .status-badge--done { background-color: var(--success-color); color: #000; } .error-message { color: var(--error-color); font-size: 0.9rem; margin-top: 1rem; background-color: rgb(239 68 68 / 10%); padding: 0.75rem; border-radius: 8px; animation: shake 0.4s ease-in-out; } .progress-container { margin-top: 1.5rem; padding: 1rem; background-color: rgb(255 255 255 / 5%); border-radius: 8px; animation: fade-in 0.3s ease-out; } .progress-bar { width: 100%; height: 8px; background-color: rgb(255 255 255 / 10%); border-radius: 4px; overflow: hidden; margin-top: 0.75rem; } .progress-fill { height: 100%; background-color: var(--accent-color); border-radius: 4px; transition: width 0.3s ease; } .progress-text { font-size: 0.85rem; color: var(--text-secondary); text-align: left; } .action-btn { background: transparent; border: 0; color: var(--text-secondary); cursor: pointer; padding: 0.5rem; border-radius: 4px; transition: color 0.2s; } .action-btn--download:hover { color: var(--accent-color); background-color: rgb(59 130 246 / 10%); } .action-btn--remove:hover { color: var(--error-color); background-color: rgb(239 68 68 / 10%); } .hidden-input { display: none; } .upload-hint { margin-top: 1rem; color: var(--text-secondary); font-size: 0.85rem; } @keyframes fade-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-5px); } 75% { transform: translateX(5px); } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.6; } }