NoteJS/public/style.css
Fovway 6f79afeb7e 🎉 Добавлен мобильный боковой слайдер с календарём, поиском и тегами
- Добавлена кнопка открытия слайдера (☰) на мобильных устройствах
- Реализован удобный боковой слайдер для мобильной версии
- Слайдер содержит полностью функциональный календарь с навигацией
- Поле поиска синхронизировано с ПК версией
- Теги отображаются с количеством заметок
- Возможность закрытия слайдера кнопкой или оверлеем
- Все функции работают как в ПК версии
- Добавлена синхронизация между мобильным и ПК календарями
- Обновлена документация README с описанием мобильной версии
2025-10-19 15:54:47 +07:00

1092 lines
19 KiB
CSS
Raw 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.

body {
font-family: "Open Sans", sans-serif;
padding: 0;
margin: 0;
background: #f5f5f5;
display: flex;
justify-content: center;
align-items: flex-start;
gap: 30px;
padding: 0 15px;
}
/* Стили для Iconify иконок */
.iconify {
font-size: 16px;
vertical-align: middle;
display: inline-block;
width: 1em;
height: 1em;
}
iconify-icon {
font-size: 16px;
vertical-align: middle;
display: inline-block;
width: 1em;
height: 1em;
}
/* Стили для иконок в заголовках */
header .iconify {
font-size: 20px;
margin-right: 8px;
}
/* Стили для иконок в кнопках */
.logout-btn .iconify {
font-size: 14px;
margin-right: 6px;
}
/* Стили для иконок в секциях */
.search-title .iconify,
.tags-title .iconify {
font-size: 14px;
margin-right: 6px;
}
/* Цветные иконки */
/* Иконка поиска - синий */
.search-title .iconify[data-icon="mdi:magnify"] {
color: #2196f3;
}
/* Иконка тегов - зеленый */
.tags-title .iconify[data-icon="mdi:tag"] {
color: #4caf50;
}
/* Иконка заметок - оранжевый */
header .iconify[data-icon="mdi:note-text"] {
color: #ff9800;
}
/* Иконка пользователя - фиолетовый */
header .iconify[data-icon="mdi:account"],
.username-clickable .iconify[data-icon="mdi:account"] {
color: #9c27b0;
}
/* Иконка выхода - красный */
.logout-btn .iconify[data-icon="mdi:logout"] {
color: #f44336;
}
/* Иконка входа - синий */
header .iconify[data-icon="mdi:login"] {
color: #2196f3;
}
/* Иконка регистрации - зеленый */
header .iconify[data-icon="mdi:account-plus"] {
color: #4caf50;
}
/* Markdown кнопки - разные цвета */
.btnMarkdown .iconify[data-icon="mdi:format-bold"] {
color: #424242;
}
.btnMarkdown .iconify[data-icon="mdi:format-italic"] {
color: #757575;
}
.btnMarkdown .iconify[data-icon="mdi:format-header-1"] {
color: #1976d2;
}
.btnMarkdown .iconify[data-icon="mdi:format-list-bulleted"] {
color: #388e3c;
}
.btnMarkdown .iconify[data-icon="mdi:format-quote-close"] {
color: #f57c00;
}
.btnMarkdown .iconify[data-icon="mdi:code-tags"] {
color: #7b1fa2;
}
.btnMarkdown .iconify[data-icon="mdi:link"] {
color: #0288d1;
}
header {
font-size: 20px;
font-weight: bold;
margin-bottom: 20px;
}
.notes-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.notes-header-left {
display: flex;
flex-direction: column;
align-items: flex-start;
}
/* Стили для секции поиска в левой панели */
.search-section {
margin-top: 15px;
padding-top: 15px;
border-top: 1px solid #e0e0e0;
}
.search-header {
margin-bottom: 10px;
}
.search-title {
font-size: 12px;
font-weight: bold;
color: #333;
}
.search-container {
position: relative;
width: 100%;
}
.search-input {
width: 100%;
padding: 6px 30px 6px 10px;
border: 1px solid #ddd;
border-radius: 15px;
font-size: 12px;
background-color: #f8f9fa;
transition: all 0.3s ease;
box-sizing: border-box;
}
.search-input:focus {
outline: none;
border-color: #007bff;
background-color: white;
box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
}
.clear-search-btn {
position: absolute;
right: 6px;
top: 50%;
transform: translateY(-50%);
background: none;
border: none;
color: #999;
cursor: pointer;
font-size: 14px;
padding: 2px 4px;
border-radius: 50%;
transition: all 0.2s ease;
}
.clear-search-btn:hover {
background-color: #e9ecef;
color: #666;
}
.filter-indicator {
display: inline-block;
margin-top: 5px;
padding: 4px 10px;
background-color: #e7f3ff;
border: 1px solid #007bff;
border-radius: 15px;
font-size: 12px;
color: #007bff;
font-weight: 500;
}
.filter-indicator button {
background: none;
border: none;
color: #dc3545;
cursor: pointer;
margin-left: 8px;
font-weight: bold;
padding: 0;
font-size: 14px;
}
.filter-indicator button:hover {
color: #a71d2a;
}
.user-info {
display: flex;
align-items: center;
gap: 15px;
}
.user-info span {
font-size: 14px;
color: #666;
font-weight: 500;
}
.logout-btn {
padding: 8px 16px;
cursor: pointer;
border: 1px solid #ddd;
background-color: #f8f9fa;
border-radius: 5px;
font-size: 14px;
color: #dc3545;
transition: all 0.3s ease;
}
.logout-btn:hover {
background-color: #dc3545;
color: white;
}
.auth-link {
text-align: center;
margin-top: 15px;
font-size: 14px;
}
.auth-link a {
color: #007bff;
text-decoration: none;
font-weight: 500;
}
.auth-link a:hover {
text-decoration: underline;
}
.container {
width: 90%;
max-width: 600px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
border-radius: 8px;
padding: 15px;
margin-top: 20px;
background: white;
}
.login-form {
margin-top: 20px;
}
.form-group {
margin-bottom: 15px;
}
.form-group label {
display: block;
margin-bottom: 5px;
font-weight: bold;
}
.form-group input {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
font-size: 16px;
box-sizing: border-box;
}
.form-group input:focus {
outline: none;
border-color: #007bff;
}
.error-message {
color: #dc3545;
margin-top: 10px;
padding: 10px;
background-color: #f8d7da;
border: 1px solid #f5c6cb;
border-radius: 5px;
}
textarea {
width: 100%;
min-height: 50px;
resize: none;
border: none;
background: white;
margin-bottom: 5px;
overflow-y: hidden;
}
textarea:focus {
outline: none;
}
.save-button-container {
display: flex;
align-items: center;
gap: 10px;
}
.save-hint {
font-size: 12px;
color: #999;
font-style: italic;
}
.btnSave {
padding: 10px 20px;
cursor: pointer;
border-width: 1px;
background: white;
border-radius: 5px;
font-family: "Open Sans", sans-serif;
transition: all 0.3s ease;
font-size: 16px;
}
.btnSave:hover {
background-color: #007bff;
color: white;
border-color: #007bff;
}
.date {
font-size: 11px;
color: grey;
}
.notesHeaderBtn {
display: inline-block;
cursor: pointer;
color: black;
font-weight: bold;
margin-left: 10px;
}
.textNote {
margin-top: 10px;
white-space: pre-wrap;
position: relative;
transition: max-height 0.3s ease;
}
.textNote.collapsed {
max-height: 300px;
overflow: hidden;
}
.textNote.collapsed::after {
content: "";
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 80px;
background: linear-gradient(to bottom, transparent, white);
pointer-events: none;
}
.show-more-btn {
display: block;
width: 100%;
margin-top: 10px;
padding: 8px;
background-color: #f8f9fa;
border: 1px solid #ddd;
border-radius: 5px;
color: #007bff;
font-size: 14px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
}
.show-more-btn:hover {
background-color: #007bff;
color: white;
border-color: #007bff;
}
/* Убираем стандартные отступы для абзацев */
.textNote p {
margin: 0;
padding: 0;
}
/* Убираем маргины у заголовков */
.textNote h1,
.textNote h2,
.textNote h3,
.textNote h4,
.textNote h5,
.textNote h6 {
margin: 0;
padding: 0;
}
/* Убираем отступы у списков */
.textNote ul,
.textNote ol {
margin: 0;
padding-left: 20px;
}
/* Убираем маргины у элементов списка */
.textNote li {
margin: 0;
padding: 0;
}
/* Стили для ссылок */
.textNote a {
color: #007bff;
text-decoration: none;
}
.textNote a:hover {
text-decoration: underline;
}
/* Стили для цитат */
.textNote blockquote {
border-left: 4px solid #007bff;
padding-left: 16px;
margin: 10px 0;
color: #555;
font-style: italic;
background-color: #f8f9fa;
padding: 10px 16px;
border-radius: 0 4px 4px 0;
}
.textNote blockquote p {
margin: 0;
}
/* Стили для кода */
.textNote pre {
background-color: #f5f5f5;
padding: 10px;
border-radius: 5px;
font-size: 14px;
overflow-x: auto;
}
.textNote code {
background-color: #f5f5f5;
padding: 2px 4px;
border-radius: 5px;
font-size: 14px;
}
.notes-container {
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
padding-bottom: 60px; /* Отступ снизу для footer */
}
#notesList {
width: 100%;
display: flex;
flex-direction: column;
align-items: center;
}
.markdown-buttons {
margin-top: 10px;
margin-bottom: 10px;
}
.markdown-buttons .btnMarkdown {
padding: 5px 10px;
margin-right: 5px;
cursor: pointer;
border: 1px solid #ddd;
background-color: #f0f0f0;
border-radius: 5px;
font-size: 14px;
}
.markdown-buttons .btnMarkdown:hover {
background-color: #e0e0e0;
}
.footer {
text-align: center;
font-size: 12px;
color: #999;
position: fixed;
bottom: 0;
width: 100%;
padding: 10px 0;
}
.footer span {
font-weight: bold;
}
/* Стили для личного кабинета */
.profile-container {
margin-top: 20px;
}
.avatar-section {
text-align: center;
padding: 20px;
border-bottom: 1px solid #e0e0e0;
margin-bottom: 20px;
}
.avatar-wrapper {
margin-bottom: 15px;
display: flex;
justify-content: center;
align-items: center;
}
.avatar-preview {
width: 150px;
height: 150px;
border-radius: 50%;
object-fit: cover;
border: 3px solid #007bff;
}
.avatar-placeholder {
width: 150px;
height: 150px;
border-radius: 50%;
background-color: #e0e0e0;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 64px;
color: #999;
}
.avatar-buttons {
display: flex;
justify-content: center;
gap: 10px;
margin-top: 15px;
}
.btn-upload,
.btn-delete {
padding: 8px 16px;
cursor: pointer;
border: 1px solid #ddd;
background-color: #f8f9fa;
border-radius: 5px;
font-size: 14px;
transition: all 0.3s ease;
display: inline-block;
}
.btn-upload:hover {
background-color: #007bff;
color: white;
border-color: #007bff;
}
.btn-delete {
color: #dc3545;
}
.btn-delete:hover {
background-color: #dc3545;
color: white;
border-color: #dc3545;
}
.avatar-hint {
font-size: 12px;
color: #999;
margin-top: 10px;
}
.profile-form {
padding: 0 10px;
margin-bottom: 80px; /* Отступ снизу для последнего элемента */
}
.profile-form h3 {
margin-bottom: 15px;
color: #333;
}
.separator {
margin: 30px 0;
border: none;
border-top: 1px solid #e0e0e0;
}
.message-container {
margin-top: 20px;
margin-bottom: 80px; /* Отступ снизу, чтобы контент не обрезался футером */
padding: 10px;
border-radius: 5px;
text-align: center;
display: none;
}
.message-container.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
display: block;
}
.message-container.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
display: block;
}
.back-btn {
padding: 8px 16px;
border: 1px solid #ddd;
background-color: #f8f9fa;
border-radius: 5px;
font-size: 14px;
color: #007bff;
text-decoration: none;
transition: all 0.3s ease;
display: inline-block;
}
.back-btn:hover {
background-color: #007bff;
color: white;
border-color: #007bff;
}
.username-clickable {
cursor: pointer;
transition: color 0.3s ease;
}
.username-clickable:hover {
color: #007bff;
text-decoration: underline;
}
.center {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 600px;
height: 100%;
}
.container-leftside {
width: 200px;
height: auto;
max-width: 200px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
border-radius: 8px;
padding: 12px;
margin-top: 20px;
background: white;
}
/* Мини-календарь */
.mini-calendar {
width: 100%;
}
.calendar-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.calendar-month-year {
font-size: 13px;
font-weight: bold;
color: #333;
}
.calendar-nav {
background: none;
border: none;
font-size: 18px;
cursor: pointer;
color: #007bff;
padding: 0 3px;
transition: color 0.3s ease;
}
.calendar-nav:hover {
color: #0056b3;
}
.calendar-weekdays {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 1px;
margin-bottom: 3px;
}
.calendar-weekday {
text-align: center;
font-size: 9px;
font-weight: bold;
color: #666;
padding: 3px 0;
}
.calendar-days {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 1px;
}
.calendar-day {
aspect-ratio: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
cursor: pointer;
border-radius: 3px;
transition: all 0.2s ease;
color: #333;
padding: 1px;
font-weight: 500;
position: relative;
}
.calendar-day:hover {
background-color: #e7f3ff;
}
.calendar-day.today {
background-color: #007bff;
color: white;
font-weight: bold;
}
.calendar-day.other-month {
color: #ccc;
}
.calendar-day.selected {
background-color: #0056b3;
color: white;
font-weight: bold;
}
/* Индикатор для дней с заметками */
.calendar-day.has-notes::after {
content: "";
position: absolute;
bottom: 2px;
left: 50%;
transform: translateX(-50%);
width: 4px;
height: 4px;
background-color: #28a745;
border-radius: 50%;
}
/* Индикатор для выбранного дня с заметками */
.calendar-day.selected.has-notes::after {
background-color: #fff;
}
/* Индикатор для сегодняшнего дня с заметками */
.calendar-day.today.has-notes::after {
background-color: #fff;
}
/* Стили для секции тегов */
.tags-section {
margin-top: 15px;
padding-top: 15px;
border-top: 1px solid #e0e0e0;
}
.tags-header {
margin-bottom: 10px;
}
.tags-title {
font-size: 12px;
font-weight: bold;
color: #333;
}
.tags-container {
display: flex;
flex-wrap: wrap;
gap: 5px;
}
.tag {
display: inline-block;
padding: 4px 8px;
background-color: #e7f3ff;
color: #007bff;
border: 1px solid #007bff;
border-radius: 12px;
font-size: 10px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
user-select: none;
}
.tag:hover {
background-color: #007bff;
color: white;
}
.tag.active {
background-color: #007bff;
color: white;
font-weight: bold;
}
.tag-count {
margin-left: 4px;
font-size: 9px;
opacity: 0.8;
}
/* Стили для тегов в заметках */
.textNote .tag-in-note {
display: inline-block;
padding: 2px 6px;
background-color: #e7f3ff;
color: #007bff;
border: 1px solid #007bff;
border-radius: 8px;
font-size: 12px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
text-decoration: none;
margin: 0 2px;
}
.textNote .tag-in-note:hover {
background-color: #007bff;
color: white;
transform: translateY(-1px);
box-shadow: 0 2px 4px rgba(0, 123, 255, 0.3);
}
/* Стили для подсветки результатов поиска */
.search-highlight {
background-color: #fff3cd;
padding: 1px 2px;
border-radius: 2px;
font-weight: 500;
}
.search-highlight.current {
background-color: #ffc107;
color: #000;
}
/* Стили для мобильного меню и слайдера */
.mobile-menu-btn {
display: none;
position: fixed;
top: 15px;
left: 15px;
z-index: 999;
background: white;
border: 1px solid #ddd;
border-radius: 8px;
padding: 10px 12px;
cursor: pointer;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
}
.mobile-menu-btn:hover {
background: #f8f9fa;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
}
.mobile-menu-btn .iconify {
font-size: 24px;
color: #333;
}
/* Мобильный слайдер */
.mobile-sidebar {
display: none;
position: fixed;
top: 0;
left: -300px;
width: 280px;
height: 100vh;
background: white;
box-shadow: 2px 0 10px rgba(0, 0, 0, 0.2);
z-index: 1000;
overflow-y: auto;
transition: left 0.3s ease;
flex-direction: column;
}
.mobile-sidebar.open {
left: 0;
}
.sidebar-close-btn {
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
padding: 0;
margin: 10px 10px 10px auto;
background: #f8f9fa;
border: 1px solid #ddd;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s ease;
flex-shrink: 0;
}
.sidebar-close-btn:hover {
background: #e9ecef;
}
.sidebar-close-btn .iconify {
font-size: 20px;
color: #333;
}
.sidebar-content {
padding: 10px 12px;
overflow-y: auto;
flex: 1;
}
/* Оверлей для закрытия слайдера */
.mobile-sidebar-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 999;
opacity: 0;
transition: opacity 0.3s ease;
}
.mobile-sidebar-overlay.open {
display: block;
opacity: 1;
}
/* Мобильная адаптация */
@media (max-width: 768px) {
/* Показываем мобильное меню */
.mobile-menu-btn {
display: flex;
align-items: center;
justify-content: center;
}
/* Скрываем левый блок с календарем, поиском и тегами */
.container-leftside {
display: none !important;
}
/* На мобильных устройствах меняем направление flex и центрируем */
body {
flex-direction: column;
gap: 0;
padding: 0 10px;
justify-content: flex-start;
align-items: center;
}
/* Центральный контейнер занимает всю ширину, но центрируется */
.center {
width: 100%;
max-width: 600px;
margin: 0 auto;
margin-top: 60px;
}
/* Адаптируем контейнер заметок */
.container {
width: 100%;
max-width: none;
margin-top: 10px;
padding: 10px;
box-sizing: border-box;
}
/* Адаптируем заголовок заметок */
.notes-header {
flex-direction: column;
align-items: flex-start;
gap: 10px;
width: 100%;
}
.notes-header-left {
width: 100%;
}
.user-info {
width: 100%;
justify-content: space-between;
flex-wrap: wrap;
gap: 10px;
}
/* Адаптируем кнопки markdown */
.markdown-buttons {
display: flex;
flex-wrap: wrap;
gap: 5px;
width: 100%;
justify-content: flex-start;
}
.markdown-buttons .btnMarkdown {
flex: 0 1 auto;
min-width: auto;
margin-right: 0;
padding: 8px 12px;
font-size: 14px;
}
/* Адаптируем textarea */
textarea {
min-height: 100px;
}
/* Адаптируем кнопку сохранения */
.save-button-container {
width: 100%;
flex-direction: column;
}
.btnSave {
width: 100%;
}
/* Адаптируем footer */
.footer {
position: relative;
margin-top: 20px;
}
}