:root { --primary-color: #8e44ad; --chart-partner-color: #e15759; --chart-your-mood-color: #9b59b6; --chart-label-color: #adb5bd; --chart-grid-color: #444444; --mood-very-good: #4caf50; --mood-good: #8bc34a; --mood-neutral: #ffc107; --mood-bad: #ff9800; --mood-very-bad: #f44336; --search-icon-color: #999; } *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } body { -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; background: #121212; color: #e0e0e0; font-weight: 400; line-height: 1.5; display: flex; flex-direction: column; justify-content: flex-start; align-items: center; min-height: 100vh; margin: 0; padding: 15px; box-sizing: border-box; overflow-x: hidden; position: relative; } svg { fill: currentColor; } .container { max-width: 480px; width: 100%; margin-top: 0; margin-bottom: 0; } section.card { background: #1e1e1e; border-radius: 12px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5); border: 1px solid #333; margin-bottom: 16px; overflow: hidden; } section.card:last-of-type { margin-bottom: 0; } .card-header-flex { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 16px; } .card-header-flex #openHistoryBtn { width: 27px; height: 27px; color: #adb5bd; } .card-header-flex #openHistoryBtn svg { width: 27px; height: 27px; } #historyToggleBtn svg { display: block; width: 27px; height: 27px; } .card-header-flex .btn { margin: 0 !important; width: 27px; height: 27px; font-size: 1.125rem; padding: 0; display: inline-flex; align-items: center; justify-content: center; line-height: 1; border: none; box-shadow: none; background-color: transparent; } .card-header-flex .btn:hover { border: none !important; box-shadow: none !important; background-color: transparent !important; transform: none !important; } .card-header-wrapper { background-color: #2a2a2a; padding: 16px 24px; border-bottom: 1px solid #444; } h2.card-header { font-size: 1.125rem; font-weight: 600; color: #ffffff; margin: 0; padding: 0; border: none; line-height: 1.3; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; flex: 1; } .card-body { padding: 24px 24px 24px; } .form-group { margin-bottom: 24px; } label, .list-title, .sync-label { display: block; margin-bottom: 8px; font-weight: 600; color: #adb5bd; font-size: 0.875rem; text-transform: uppercase; letter-spacing: 0.5px; } .list-title, .sync-label { margin-bottom: 16px; } .form-control { display: block; width: 100%; padding: 12px 16px; font-size: 1rem; font-family: inherit; font-weight: 400; line-height: 1.4; color: #e0e0e0; background-color: #333; background-clip: padding-box; border: 1px solid #444; border-radius: 8px; transition: border-color 0.2s ease-in-out, box-shadow 0.2s ease-in-out; appearance: none; } .form-control:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(142, 68, 173, 0.25); } textarea.form-control { min-height: 100px; resize: vertical; } input[type="date"].form-control { position: relative; background-color: #333; color-scheme: dark; } input[type="date"]::-webkit-calendar-picker-indicator { opacity: 0.8; cursor: pointer; transition: opacity 0.2s ease; filter: invert(1); } input[type="date"]::-webkit-calendar-picker-indicator:hover { opacity: 1; } .mood-options { display: flex; flex-wrap: wrap; gap: 16px; margin-top: 8px; justify-content: space-around; } .mood-options label { display: inline-block; margin-bottom: 0; cursor: pointer; border-radius: 50%; transition: transform 0.2s ease-in-out; position: relative; text-align: center; } .mood-options input[type="radio"] { position: absolute; opacity: 0; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); } .mood-options .mood-icon-wrapper { display: flex; align-items: center; justify-content: center; padding: 8px; border-radius: 50%; border: 2px solid transparent; transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, transform 0.2s ease-in-out; width: calc(2rem + 2 * 8px + 2 * 2px); height: calc(2rem + 2 * 8px + 2 * 2px); } .mood-options .mood-icon { display: block; width: 2rem; height: 2rem; line-height: 1; transition: transform 0.15s ease; } .mood-options label:hover .mood-icon-wrapper { background-color: #444; transform: scale(1.05); } .mood-options input[type="radio"]:focus + .mood-icon-wrapper, .mood-options input[type="radio"]:focus-visible + .mood-icon-wrapper { box-shadow: 0 0 0 3px rgba(142, 68, 173, 0.25); } .mood-options input[type="radio"]:checked + .mood-icon-wrapper { background-color: #444; border-color: var(--primary-color); transform: scale(1.05); } .mood-options input[type="radio"]:checked + .mood-icon-wrapper .mood-icon { transform: scale(1.1); } .mood-very-good { color: var(--mood-very-good); } .mood-good { color: var(--mood-good); } .mood-neutral { color: var(--mood-neutral); } .mood-bad { color: var(--mood-bad); } .mood-very-bad { color: var(--mood-very-bad); } .btn { display: inline-block; font-family: inherit; font-weight: 600; font-size: 1rem; border: none; padding: 12px 24px; border-radius: 8px; cursor: pointer; text-align: center; text-decoration: none; white-space: nowrap; transition: background-color 0.2s ease-in-out, transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); user-select: none; -webkit-appearance: none; -moz-appearance: none; appearance: none; margin: 0; margin-top: 8px; } .btn + .btn { margin-left: 8px; margin-top: 8px; } .btn:not(:disabled):hover { transform: translateY(-2px); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .btn:not(:disabled):active { transform: translateY(0); box-shadow: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06); } .btn:focus { outline: none; } .btn:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(142, 68, 173, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); } .btn:disabled { background-color: #555; color: #999; cursor: not-allowed; box-shadow: none; opacity: 0.65; transform: none; } .btn-primary { background-color: var(--primary-color); color: #ffffff; } .btn-primary:not(:disabled):hover { background-color: #7d3c98; } .btn-secondary { background-color: #444; color: #e0e0e0; border: 1px solid #666; box-shadow: none; } .btn-secondary:not(:disabled):hover { background-color: #555; border-color: #777; transform: translateY(-1px); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .btn-info { background: #5bc0de; color: #ffffff; } .btn-info:hover:not(:disabled) { background: #31b0d5; } .btn-edit { background-color: #8bc34a; color: #ffffff; } .btn-edit:hover:not(:disabled) { background-color: #4caf50; } .btn-delete { background-color: #e15759; color: #ffffff; } .btn-delete:hover:not(:disabled) { background-color: #c9474a; } .btn-sync { } .btn-full-width { display: block; width: 100%; margin-top: 8px; margin-left: 0; margin-right: 0; } .btn-full-width + .btn-full-width { margin-left: 0; margin-top: 8px; } .analysis-controls { display: flex; flex-direction: column; gap: 15px; margin-bottom: 25px; } .analysis-controls .form-group { margin-bottom: 0; } .filter-container label { } .filter-buttons { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 8px; } .btn-filter { background: #444; color: #e0e0e0; border: 1px solid #666; box-shadow: none; padding: 8px 18px; font-weight: 400; border-radius: 50px; } .btn-filter:hover:not(:disabled):not(.active) { background: #555; border-color: #777; transform: none; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .btn-filter.active { background: var(--primary-color); color: #ffffff; border-color: var(--primary-color); font-weight: 600; box-shadow: var(--active-filter-button-shadow, none); } .btn-filter:focus, .btn-filter:focus-visible { box-shadow: 0 0 0 3px rgba(142, 68, 173, 0.25); } .filter-buttons .btn-filter { margin: 0; } .analysis-date-picker label { } .analysis-date-picker input[type="date"] { width: 100%; } .chart-container { margin-top: 32px; margin-bottom: 32px; position: relative; height: 320px; width: 100%; } .mood-summary { background-color: #2a2a2a; padding: 24px; border-radius: 8px; margin-top: 32px; color: #adb5bd; border: 1px solid #444; } .mood-summary p:first-child { margin: 0 0 16px 0; font-weight: 600; color: #ffffff; font-size: 1.125rem; line-height: 1.3; display: flex; justify-content: space-between; align-items: baseline; flex-wrap: wrap; gap: 4px 16px; } .mood-summary .summary-title-details { font-size: 0.875rem; font-weight: 400; color: #adb5bd; white-space: nowrap; flex-basis: 100%; } .mood-summary ul { list-style: none; padding: 0; margin: 0; } .mood-summary li { margin-bottom: 8px; display: flex; align-items: center; gap: 8px; font-size: 1rem; } .mood-summary li:last-child { margin-bottom: 0; } .mood-summary .mood-icon-small, .entry-details .mood-icon-small { width: 1.8rem; height: 1.8rem; line-height: 1; flex-shrink: 0; } .mood-summary .summary-count { font-size: 0.875rem; color: #999; margin-left: auto; white-space: nowrap; padding-left: 8px; } .summary-toggle-container { margin-top: 20px; text-align: center; } .btn-toggle-summary { width: 100%; margin: 0; margin-top: 8px; box-shadow: none; } #searchEntries { margin-bottom: 32px; } .entries-list { margin-top: 8px; margin-bottom: 24px; max-height: 400px; overflow-y: auto; border: none; border-radius: 0; padding: 2px; } .entries-list > p { text-align: center; color: #adb5bd; padding: 32px 24px; font-style: italic; background-color: #2a2a2a; border-radius: 8px; margin: 16px; } .entry-item { background-color: #2a2a2a; border-radius: 8px; border: none; padding: 8px; margin-bottom: 16px; display: flex; justify-content: space-between; align-items: flex-start; flex-wrap: wrap; gap: 8px; border-left: 5px solid #ced4da; transition: box-shadow 0.2s ease-in-out; position: relative; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); } .entry-item:last-child { margin-bottom: 0; } .entry-item:hover { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); transform: none; background-color: #333; } .entry-details { flex-grow: 1; display: flex; gap: 8px; align-items: flex-start; min-width: 0; } .entry-details .mood-icon-small { margin-top: 4px; } .entry-text { flex-grow: 1; min-width: 0; } .entry-date { font-weight: 600; color: #ffffff; display: block; margin-bottom: 4px; font-size: 1rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .entry-mood { font-style: normal; color: #adb5bd; font-size: 0.875rem; display: block; margin-bottom: 8px; } .entry-note { display: block; font-size: 0.875rem; color: #adb5bd; margin-top: 8px; background-color: #333; padding: 8px 8px; border-radius: 4px; line-height: 1.4; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; transition: all 0.2s ease-in-out; } .entry-note.expanded { white-space: pre-wrap; word-break: break-word; cursor: default; } .entry-note.expanded { white-space: pre-wrap; word-break: break-word; cursor: default; } .entry-actions { display: flex; gap: 8px; flex-shrink: 0; margin-top: 0; align-self: flex-start; padding-top: 4px; width: 100%; justify-content: flex-end; } .entry-actions .btn { padding: 4px 8px; font-size: 0.875rem; border-radius: 4px; box-shadow: none; margin: 0 !important; width: auto !important; } .entry-actions .btn + .btn { margin-left: 8px !important; } .entry-actions .edit-btn { background: #8bc34a; color: #ffffff; } .entry-actions .edit-btn:hover:not(:disabled) { background: #4caf50; } .entry-actions .delete-btn { background: #e15759; color: #ffffff; } .entry-actions .delete-btn:hover:not(:disabled) { background: #c9474a; } .pagination-controls-wrapper { text-align: center; margin-top: 24px; padding-top: 24px; border-top: 1px solid #444; } .pagination-controls { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: nowrap; } .pagination-controls .btn.btn-pagination { margin: 0 !important; padding: 8px 16px; font-size: 0.875rem; width: auto !important; } .pagination-controls .btn.btn-pagination:disabled { color: #888; border-color: transparent; background-color: transparent; opacity: 0.5; } .pagination-controls span#pageInfo { color: #adb5bd; font-size: 0.875rem; font-weight: 500; order: 0; width: auto; margin-bottom: 0; text-align: center; } .pagination-controls .btn.btn-pagination:not(:disabled):active { transform: none; box-shadow: none; background-color: #333; border-color: #444; color: #e0e0e0; } .pagination-controls .btn.btn-pagination:focus-visible { box-shadow: none; background-color: #333; border-color: #444; color: #e0e0e0; outline: none; } .pagination-controls .btn.btn-pagination:not(:disabled):hover { transform: none; box-shadow: none; background-color: #333; border-color: #444; color: #e0e0e0; } .firestore-controls { display: flex; flex-direction: column; gap: 16px; } .sync-buttons { display: flex; flex-wrap: wrap; gap: 16px; } .sync-buttons .btn { flex-grow: 1; margin: 0 !important; min-width: calc(33% - 12px); } .status, .stats { font-size: 0.875rem; color: #adb5bd; margin-top: 0; min-height: 1.4em; line-height: 1.4; } .status { font-weight: 500; margin-top: 16px; } .status:empty, .stats:empty { display: none; } .status .success, .stats .success { color: #4caf50; } .status .error, .stats .error { color: #e15759; } .dialog-overlay { z-index: 1040; position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.7); display: none; align-items: center; justify-content: center; padding: 16px; opacity: 0; transition: opacity 0.2s ease-in-out; } .dialog-overlay.visible { display: flex; opacity: 1; } .dialog-box { background-color: #1e1e1e; padding: 25px 30px; border-radius: 10px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); max-width: 450px; width: 100%; z-index: 1001; text-align: center; } .dialog-overlay.visible .dialog-box { animation: slide-in-from-bottom 0.25s ease-out forwards; } .dialog-title { font-size: 1.25rem; font-weight: 600; color: #ffffff; margin: 0 0 16px 0; line-height: 1.3; text-align: center; } .dialog-message { margin: 0 0 20px 0; font-size: 1rem; color: #adb5bd; line-height: 1.6; text-align: center; } .dialog-buttons { display: flex; justify-content: center; gap: 10px; } .dialog-buttons .btn { flex: 1; } .dialog-buttons .btn { margin: 0 !important; width: auto !important; } .toast-message { position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%); background-color: #333; color: #e0e0e0; padding: 12px 25px; border-radius: 25px; font-size: 0.95em; z-index: 1200; box-shadow: 0 3px 8px rgba(0, 0, 0, 0.2); opacity: 0; transition: opacity 0.4s ease-in-out, bottom 0.4s ease-in-out; pointer-events: none; } .toast-message.show { opacity: 1; bottom: 50px; } .loader { border: 5px solid #444; border-top: 5px solid var(--primary-color); border-radius: 50%; width: 40px; height: 40px; animation: spin 1s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .modal-overlay { display: none; position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.7); z-index: 1100; justify-content: center; align-items: center; padding: 16px; } .modal-overlay.visible { display: flex; } .modal-content { background-color: #1e1e1e; padding: 32px; border: 1px solid #333; border-radius: 12px; display: flex; flex-direction: column; align-items: center; gap: 16px; box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1); max-width: calc(500px - 32px); width: auto; text-align: center; } .modal-content p { margin: 0; font-size: 1rem; color: #adb5bd; } .modal-overlay.visible .modal-content { animation: slide-in-from-bottom 0.3s ease-out forwards; } .search-input-container { position: relative; } #searchEntries { padding-right: 40px; padding-left: 16px; } .search-icon-wrapper { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); pointer-events: none; display: flex; align-items: center; justify-content: center; color: var(--search-icon-color); } .search-icon { width: 24px; height: 24px; } #searchEntries::-webkit-search-decoration, #searchEntries::-webkit-search-cancel-button, #searchEntries::-webkit-search-results-button, #searchEntries::-webkit-search-results-decoration { -webkit-appearance: none; appearance: none; display: none; } #searchEntries::-ms-clear { display: none; width: 0; height: 0; } .mood-popup-overlay { z-index: 1030; position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.7); display: none; align-items: center; justify-content: center; padding: 16px; opacity: 0; transition: opacity 0.3s ease-in-out; } .mood-popup-overlay.visible { display: flex; opacity: 1; } .mood-popup-box { background-color: #1e1e1e; border-radius: 12px; box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1); max-width: 500px; width: 100%; position: relative; max-height: 90vh; overflow-y: auto; } .mood-popup-overlay.visible .mood-popup-box { animation: slide-in-from-bottom 0.3s ease-out forwards; } .mood-popup-close-btn { position: absolute; top: 12px; right: 12px; background: none; border: none; color: var(--primary-color); cursor: pointer; padding: 0; line-height: 0; transition: color 0.2s ease; width: 27px; height: 27px; display: flex; align-items: center; justify-content: center; border-radius: 50%; } .mood-popup-close-btn svg { width: 27px; height: 27px; } .mood-popup-close-btn:hover { background-color: #444; } .input-section-popup { margin-bottom: 0; } .input-section-popup .card-header-wrapper { } .input-section-popup .card-body { padding-bottom: 24px; } .edge-handle { position: fixed; top: 50%; right: 0; transform: translateY(-50%); width: 15px; height: 100px; background-color: #2a2a2a; border: 1px solid #444; border-right: none; border-radius: 10px 0 0 10px; box-shadow: -1px 0 3px rgba(0, 0, 0, 0.05); cursor: pointer; z-index: 1071; transition: right 0.3s ease-in-out, background-color 0.3s, border-color 0.3s; display: flex; align-items: center; justify-content: center; } .edge-panel.open + .edge-handle { right: 120px; background-color: #333; border-color: #555; } .edge-handle::after { content: ""; display: block; width: 3px; height: 40px; background-color: #666; border-radius: 2px; transition: background-color 0.3s ease-in-out; } .edge-panel.open + .edge-handle::after { background-color: #999; } .edge-panel { position: fixed; top: 10%; width: 120px; right: -120px; height: 80%; font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; background-color: #2a2a2a; border-left: 1px solid #444; border-top: 1px solid #444; border-bottom: 1px solid #444; border-right: none; border-radius: 15px 0 0 15px; box-shadow: -2px 0 10px rgba(0, 0, 0, 0.08); padding: 10px 8px 15px; box-sizing: border-box; display: flex; flex-direction: column; align-items: center; transition: right 0.3s ease-in-out; z-index: 1070; } .edge-panel.open { right: 0; } .panel-title { color: #ffffff; font-size: 0.9em; font-weight: 600; margin-bottom: 0; text-align: center; width: 100%; padding: 0 5px; box-sizing: border-box; position: relative; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .panel-title::after { content: ""; display: block; width: 80%; height: 1px; background-color: #444; margin: 8px auto 15px auto; } .panel-items { display: flex; flex-direction: column; align-items: center; gap: 18px; width: 100%; padding: 0; box-sizing: border-box; flex-grow: 1; overflow-y: auto; } .panel-item { display: flex; flex-direction: column; align-items: center; text-align: center; cursor: pointer; transition: background-color 0.2s ease; width: 100%; padding: 5px 0; border-radius: 8px; background-color: transparent; } @media (hover: hover) and (pointer: fine) { .panel-item:hover { background-color: #333; } } .panel-item:active, .panel-item:focus, .panel-item:focus-visible { outline: none !important; background-color: transparent !important; } .panel-item svg { width: 40px; height: 40px; margin-bottom: 6px; color: var(--primary-color); background-color: #333; border-radius: 10px; padding: 4px; } .panel-item span { font-size: 0.75em; color: #adb5bd; word-break: break-word; margin-top: 2px; line-height: 1.2; } .history-popup-overlay { position: fixed; inset: 0; background-color: rgba(0, 0, 0, 0.7); display: none; align-items: center; justify-content: center; z-index: 1020; padding: 16px; opacity: 0; transition: opacity 0.3s ease-in-out; } .history-popup-overlay.visible { display: flex; opacity: 1; } .history-popup-box { background-color: #1e1e1e; border-radius: 12px; box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1); max-width: 500px; width: 100%; position: relative; max-height: 90vh; display: flex; flex-direction: column; overflow: hidden; } .history-popup-overlay.visible .history-popup-box { animation: slide-in-from-bottom 0.3s ease-out forwards; } .history-popup-box .card-body { overflow-y: auto; flex-grow: 1; } .history-popup-box .card-header-wrapper { flex-shrink: 0; } @keyframes slide-in-from-bottom { from { transform: translateY(30px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }