/* Grateful Journal – phone-first, no page scroll, fits one screen */ /* ============================ ROOT / LAYOUT SHELL ============================ */ #root { width: 100%; height: 100dvh; overflow: hidden; display: flex; flex-direction: column; } /* ============================ PROTECTED ROUTE SPINNER ============================ */ .protected-route__loading { height: 100dvh; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1rem; background: #eef6ee; color: #9ca3af; } .protected-route__spinner { width: 28px; height: 28px; border: 3px solid #e5e7eb; border-top-color: #22c55e; border-radius: 50%; animation: spin 0.7s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } /* ============================ LOGIN PAGE ============================ */ .login-page { height: 100dvh; display: flex; align-items: center; justify-content: center; background: linear-gradient(160deg, #eef6ee 0%, #dcfce7 100%); padding: 1.5rem; overflow: hidden; } .login-page__loading { display: flex; flex-direction: column; align-items: center; gap: 1rem; color: #9ca3af; } .login-page__spinner { width: 28px; height: 28px; border: 3px solid #e5e7eb; border-top-color: #22c55e; border-radius: 50%; animation: spin 0.7s linear infinite; } .login-card { background: #fff; padding: 2rem; border-radius: 20px; border-top: 4px solid #22c55e; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.08); width: 100%; max-width: 360px; text-align: center; } .login-card__brand { margin-bottom: 1.75rem; } .login-card__title { margin: 0 0 0.375rem; font-size: 1.625rem; font-weight: 700; color: #22c55e; letter-spacing: -0.02em; font-family: "Sniglet", system-ui; } .login-card__tagline { margin: 0; color: #6b7280; font-size: 0.9375rem; } .login-card__actions { display: flex; flex-direction: column; gap: 1rem; } .login-card__error { margin: 0; padding: 0.625rem 0.75rem; color: #b91c1c; font-size: 0.875rem; background: #fef2f2; border-radius: 8px; text-align: left; } .google-sign-in-btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.75rem; width: 100%; min-height: 48px; padding: 0.75rem 1.25rem; font-size: 0.9375rem; font-weight: 500; color: #3c4043; background: #fff; border: 1px solid #dadce0; border-radius: 10px; cursor: pointer; transition: background 0.2s, box-shadow 0.2s; -webkit-tap-highlight-color: transparent; } .google-sign-in-btn:hover:not(:disabled) { background: #f8f9fa; box-shadow: 0 1px 6px rgba(0, 0, 0, 0.1); } .google-sign-in-btn:disabled { opacity: 0.7; cursor: not-allowed; } .google-sign-in-btn__logo { flex-shrink: 0; } .home-login-link { display: inline-block; margin-top: 1rem; padding: 0.75rem 1.5rem; color: #fff; background: #22c55e; border-radius: 10px; text-decoration: none; font-weight: 600; transition: background 0.2s; } .home-login-link:hover { background: #16a34a; } /* ============================ SHARED PAGE SHELL Pages fill #root (100dvh) as flex children – no page-level scroll ============================ */ .home-page, .history-page, .settings-page { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; background: #eef6ee; } /* ============================ HOME / WRITE PAGE ============================ */ .journal-container { flex: 1; min-height: 0; overflow-y: auto; scrollbar-width: none; /* Firefox */ -ms-overflow-style: none; /* IE/Edge */ display: flex; flex-direction: column; padding: 1.5rem 1.25rem 1rem; } .journal-container::-webkit-scrollbar { display: none; } .journal-card { background: #fff; border-radius: 20px; padding: 1.625rem 1.5rem; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.07); flex: 1; min-height: 0; display: flex; flex-direction: column; } .journal-date { font-size: 0.625rem; font-weight: 700; letter-spacing: 0.14em; color: #22c55e; text-transform: uppercase; font-family: "Sniglet", system-ui; margin: 0 0 1rem; } .journal-prompt { margin: 0 0 1.5rem; font-size: 1.75rem; font-weight: 700; line-height: 1.2; color: #1a1a1a; letter-spacing: -0.02em; font-family: "Sniglet", system-ui; } .journal-writing-area { flex: 1; min-height: 0; display: flex; flex-direction: column; } .journal-title-input { width: 100%; padding: 0 0 0.875rem; font-family: "Sniglet", system-ui; font-size: 1rem; font-weight: 400; color: #374151; background: transparent; border: none; border-bottom: 1px solid #e0f0e0; outline: none; transition: border-color 0.2s; } .journal-title-input::placeholder { color: #c4bfb5; } .journal-title-input:focus { border-bottom-color: #22c55e; } .journal-entry-textarea { flex: 1; min-height: 0; width: 100%; padding: 0.875rem 0; font-family: "Sniglet", system-ui; font-size: 1rem; line-height: 1.75; color: #374151; background: transparent; border: none; outline: none; resize: none; caret-color: #374151; } .journal-entry-textarea::placeholder { color: #c4bfb5; font-style: italic; } .journal-write-btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; min-height: 44px; padding: 0.625rem 1.5rem; font-size: 0.9375rem; font-weight: 600; color: #fff; background: #22c55e; border: none; border-radius: 100px; cursor: pointer; transition: all 0.2s ease; box-shadow: 0 4px 12px rgba(34, 197, 94, 0.3); font-family: "Sniglet", system-ui; white-space: nowrap; } .journal-write-btn:hover:not(:disabled) { background: #16a34a; transform: translateY(-1px); box-shadow: 0 6px 18px rgba(34, 197, 94, 0.4); } .journal-write-btn:active:not(:disabled) { transform: translateY(0); } .journal-write-btn:disabled { opacity: 0.5; cursor: not-allowed; } .journal-icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; background: transparent; border: none; border-radius: 12px; cursor: pointer; color: #9ca3af; transition: all 0.2s ease; -webkit-tap-highlight-color: transparent; } .journal-icon-btn:hover { color: #6b7280; background: rgba(0, 0, 0, 0.05); } /* ============================ BOTTOM NAVIGATION — Static flex item, always at bottom ============================ */ .bottom-nav { flex-shrink: 0; position: relative; /* NOT fixed — lives in the flex column */ background: rgba(255, 255, 255, 0.96); border-top: 1px solid rgba(0, 0, 0, 0.07); padding: 8px 12px 12px; display: flex; align-items: center; justify-content: space-around; gap: 4px; z-index: 10; } .bottom-nav-btn { display: flex; flex-direction: row; align-items: center; justify-content: center; gap: 5px; padding: 8px 14px; background: transparent; border: none; border-radius: 100px; cursor: pointer; color: #9ca3af; transition: all 0.18s ease; min-height: 44px; font-family: "Sniglet", system-ui; -webkit-tap-highlight-color: transparent; } .bottom-nav-btn svg { width: 18px; height: 18px; flex-shrink: 0; stroke-width: 2; } .bottom-nav-btn span { font-size: 0.8125rem; font-weight: 600; white-space: nowrap; display: none; } .bottom-nav-btn:hover { color: #6b7280; } .bottom-nav-btn-active { background: #22c55e; color: #fff; padding: 9px 18px; } .bottom-nav-btn-active span { display: inline; } .bottom-nav-btn-active:hover { background: #16a34a; color: #fff; } /* Brand element – hidden on mobile, shown in sidebar on desktop */ .bottom-nav-brand { display: none; } /* ============================ HISTORY PAGE ============================ */ .history-header { flex-shrink: 0; display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; padding: 1.5rem 1.25rem 0; } .history-header-text h1 { margin: 0 0 0.15rem; font-size: 1.625rem; font-weight: 700; color: #1a1a1a; letter-spacing: -0.02em; font-family: "Sniglet", system-ui; } .history-subtitle { margin: 0; font-size: 0.875rem; color: #6b7280; font-family: "Sniglet", system-ui; } .history-search-btn { width: 40px; height: 40px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; background: #fff; border: 1px solid #e5e7eb; border-radius: 50%; cursor: pointer; color: #6b7280; transition: all 0.2s ease; } .history-search-btn:hover { background: #f9fafb; color: #374151; } /* scrollable content area for history */ .history-container { flex: 1; min-height: 0; overflow-y: auto; scrollbar-width: none; -ms-overflow-style: none; padding: 1rem 1.25rem 0.5rem; } .history-container::-webkit-scrollbar { display: none; } /* Calendar */ .calendar-card { background: #fff; border-radius: 18px; padding: 1.125rem 1rem; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06); margin-bottom: 1.125rem; } .calendar-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; } .calendar-month { margin: 0; font-size: 1.0625rem; font-weight: 600; color: #1a1a1a; font-family: "Sniglet", system-ui; } .calendar-nav { display: flex; gap: 2px; } .calendar-nav-btn { width: 32px; height: 32px; display: flex; align-items: center; justify-content: center; background: transparent; border: none; border-radius: 8px; cursor: pointer; color: #9ca3af; transition: all 0.15s ease; } .calendar-nav-btn:hover { background: #f3f4f6; color: #374151; } .calendar-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; } .calendar-weekday { font-size: 0.6875rem; font-weight: 500; color: #9ca3af; text-align: center; padding: 4px 0; font-family: "Sniglet", system-ui; } .calendar-day { aspect-ratio: 1; display: flex; align-items: center; justify-content: center; font-size: 0.8125rem; font-weight: 400; color: #374151; background: transparent; border: none; border-radius: 50%; cursor: pointer; transition: all 0.15s ease; font-family: "Sniglet", system-ui; } .calendar-day-empty { cursor: default; } .calendar-day:not(.calendar-day-empty):hover { background: #f0fdf4; color: #22c55e; } .calendar-day-has-entry { background: #dcfce7; color: #22c55e; font-weight: 600; } .calendar-day-has-entry:hover { background: #bbf7d0; } .calendar-day-today { background: #22c55e; color: #fff; font-weight: 700; } .calendar-day-today:hover { background: #16a34a; } .calendar-day-selected { box-shadow: inset 0 0 0 2px #1be62c; } .calendar-day-selected:not(.calendar-day-today):not(.calendar-day-has-entry) { background: #f0fdf4; color: #1be62c; } /* Recent Entries */ .recent-entries { margin-bottom: 1rem; } .recent-entries-title { margin: 0 0 0.75rem; font-size: 0.625rem; font-weight: 700; letter-spacing: 0.12em; color: #9ca3af; text-transform: uppercase; font-family: "Sniglet", system-ui; } .entries-list { display: flex; flex-direction: column; gap: 0.625rem; } .entry-card { background: #fff; padding: 1rem 1rem 1rem 0.875rem; border-radius: 14px; border-left: 4px solid #22c55e; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05); cursor: pointer; transition: all 0.2s ease; text-align: left; width: 100%; } .entry-card:hover { transform: translateY(-2px); box-shadow: 0 5px 16px rgba(0, 0, 0, 0.09); } .entry-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.375rem; gap: 0.5rem; } .entry-date { font-size: 0.625rem; font-weight: 600; letter-spacing: 0.08em; color: #6b7280; text-transform: uppercase; font-family: "Sniglet", system-ui; } .entry-time { font-size: 0.6875rem; color: #9ca3af; font-family: "Sniglet", system-ui; } .entry-title { margin: 0 0 0.3rem; font-size: 1rem; font-weight: 600; color: #1a1a1a; line-height: 1.3; font-family: "Sniglet", system-ui; } .entry-preview { margin: 0; font-size: 0.8125rem; line-height: 1.5; color: #6b7280; font-family: "Sniglet", system-ui; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } /* ============================ SETTINGS PAGE ============================ */ .settings-header { flex-shrink: 0; padding: 1.5rem 1.25rem 0; } .settings-header-text h1 { margin: 0 0 0.2rem; font-size: 1.75rem; font-weight: 700; color: #1a1a1a; letter-spacing: -0.02em; font-family: "Sniglet", system-ui; } .settings-subtitle { margin: 0; font-size: 0.875rem; color: #6b7280; font-family: "Sniglet", system-ui; } /* scrollable content area for settings */ .settings-container { flex: 1; min-height: 0; overflow-y: auto; scrollbar-width: none; -ms-overflow-style: none; padding: 1rem 1.25rem 0.5rem; } .settings-container::-webkit-scrollbar { display: none; } /* Profile */ .settings-profile { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.25rem; background: #fff; border-radius: 18px; padding: 1rem 1.125rem; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06); } .settings-avatar { width: 52px; height: 52px; flex-shrink: 0; } .settings-avatar-img { width: 100%; height: 100%; border-radius: 50%; object-fit: cover; } .settings-avatar-placeholder { width: 100%; height: 100%; border-radius: 50%; background: linear-gradient(135deg, #f9a8d4 0%, #f472b6 100%); display: flex; align-items: center; justify-content: center; font-size: 1.25rem; font-weight: 600; color: #fff; } .settings-profile-info { flex: 1; min-width: 0; } .settings-profile-name { margin: 0 0 0.3rem; font-size: 1.0625rem; font-weight: 700; color: #1a1a1a; font-family: "Sniglet", system-ui; } .settings-profile-badge { display: inline-block; padding: 0.15rem 0.5rem; font-size: 0.625rem; font-weight: 700; letter-spacing: 0.06em; color: #fff; background: #22c55e; border-radius: 100px; font-family: "Sniglet", system-ui; text-transform: uppercase; } .settings-edit-btn { display: flex; align-items: center; justify-content: center; width: 36px; height: 36px; border-radius: 10px; border: none; background: #f0fdf4; color: #22c55e; cursor: pointer; flex-shrink: 0; transition: background 0.15s; } .settings-edit-btn:hover { background: #dcfce7; } .edit-modal-title { font-size: 1.2rem; font-weight: 700; color: #1a1a1a; margin: 0 0 1rem; text-align: center; font-family: "Sniglet", system-ui; } .edit-modal-avatar { position: relative; width: 80px; height: 80px; margin: 0 auto 0.5rem; cursor: pointer; border-radius: 50%; overflow: hidden; } .edit-modal-avatar-img { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; } .edit-modal-avatar-placeholder { width: 100%; height: 100%; border-radius: 50%; background: linear-gradient(135deg, #86efac 0%, #22c55e 100%); display: flex; align-items: center; justify-content: center; font-size: 2rem; font-weight: 700; color: #fff; font-family: "Sniglet", system-ui; } .edit-modal-avatar-overlay { position: absolute; inset: 0; background: rgba(0, 0, 0, 0.35); display: flex; align-items: center; justify-content: center; color: #fff; border-radius: 50%; } .edit-modal-remove-photo { display: block; margin: 0 auto 0.5rem; background: none; border: none; color: #ef4444; font-size: 0.75rem; cursor: pointer; padding: 0.25rem 0.5rem; } .edit-modal-remove-photo:hover { text-decoration: underline; } .edit-modal-save { flex: 1; padding: 0.65rem; border: none; border-radius: 12px; font-size: 0.9rem; font-weight: 600; font-family: inherit; cursor: pointer; background: #22c55e; color: #fff; transition: background 0.15s; } .edit-modal-save:hover:not(:disabled) { background: #16a34a; } .edit-modal-save:disabled { opacity: 0.5; cursor: not-allowed; } .settings-section { margin-bottom: 1rem; } .settings-section-title { margin: 0 0 0.5rem; font-size: 0.625rem; font-weight: 700; letter-spacing: 0.12em; color: #9ca3af; text-transform: uppercase; font-family: "Sniglet", system-ui; } .settings-card { background: #fff; border-radius: 18px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.06); overflow: hidden; } .settings-item { display: flex; align-items: center; gap: 0.875rem; padding: 0.875rem 1.125rem; background: transparent; border: none; width: 100%; text-align: left; } .settings-item-button { cursor: pointer; transition: background 0.15s ease; } .settings-item-button:hover { background: #f9fafb; } .settings-item-icon { width: 40px; height: 40px; flex-shrink: 0; display: flex; align-items: center; justify-content: center; border-radius: 10px; } .settings-item-icon-green { background: rgba(34, 197, 94, 0.12); color: #22c55e; } .settings-item-icon-gray { background: rgba(107, 114, 128, 0.1); color: #6b7280; } .settings-item-icon-orange { background: rgba(251, 146, 60, 0.12); color: #f97316; } .settings-item-icon-blue { background: rgba(59, 130, 246, 0.12); color: #3b82f6; } .settings-item-content { flex: 1; min-width: 0; } .settings-item-title { margin: 0 0 0.15rem; font-size: 0.9375rem; font-weight: 600; color: #1a1a1a; font-family: "Sniglet", system-ui; } .settings-item-subtitle { margin: 0; font-size: 0.75rem; color: #9ca3af; font-family: "Sniglet", system-ui; } .settings-item-arrow { flex-shrink: 0; color: #d1d5db; } .settings-divider { height: 1px; background: #f3f4f6; margin: 0 1.125rem; } /* Toggle */ .settings-toggle { position: relative; display: inline-block; width: 46px; height: 26px; flex-shrink: 0; } .settings-toggle input { opacity: 0; width: 0; height: 0; } .settings-toggle-slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background: #d1d5db; transition: 0.25s; border-radius: 100px; } .settings-toggle-slider:before { position: absolute; content: ""; height: 20px; width: 20px; left: 3px; bottom: 3px; background: white; transition: 0.25s; border-radius: 50%; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); } .settings-toggle input:checked + .settings-toggle-slider { background: #22c55e; } .settings-toggle input:checked + .settings-toggle-slider:before { transform: translateX(20px); } /* Theme dots */ .settings-theme-colors { display: flex; gap: 6px; margin-right: 4px; } .settings-theme-dot { width: 22px; height: 22px; border-radius: 50%; border: 2px solid rgba(0, 0, 0, 0.08); cursor: pointer; transition: all 0.2s; background: transparent; padding: 0; -webkit-tap-highlight-color: transparent; } .settings-theme-dot-beige { background: #f5f0e8; } .settings-theme-dot-dark { background: #1a1a1a; } .settings-theme-dot:hover:not(:disabled) { transform: scale(1.15); } .settings-theme-dot:disabled { opacity: 0.6; cursor: not-allowed; } /* See Tutorial */ .settings-tutorial-btn { width: 100%; display: flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.875rem 1.125rem; margin-bottom: 0.75rem; font-size: 0.9375rem; font-weight: 600; color: var(--color-primary, #22c55e); background: var(--color-surface, #fff); border: none; border-radius: 14px; cursor: pointer; transition: background 0.2s; font-family: "Sniglet", system-ui; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05); } .settings-tutorial-btn:hover { background: var(--color-accent-light, #dcfce7); } /* Clear Data */ .settings-clear-btn { width: 100%; display: flex; align-items: center; justify-content: space-between; padding: 0.875rem 1.125rem; margin-bottom: 0.75rem; font-size: 0.9375rem; font-weight: 600; color: #dc2626; background: #fff; border: none; border-radius: 14px; cursor: pointer; transition: background 0.2s; font-family: "Sniglet", system-ui; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05); } .settings-clear-btn:hover { background: #fef2f2; } /* Sign Out */ .settings-signout-btn { width: 100%; padding: 0.75rem; margin-bottom: 1rem; font-size: 0.9375rem; font-weight: 600; color: #6b7280; background: #fff; border: none; border-radius: 14px; cursor: pointer; transition: background 0.2s; font-family: "Sniglet", system-ui; box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05); } .settings-signout-btn:hover { background: #f9fafb; color: #374151; } /* Version */ .settings-version { text-align: center; font-size: 0.625rem; font-weight: 500; letter-spacing: 0.08em; color: #d1d5db; margin: 0.75rem 0 0.5rem; text-transform: uppercase; font-family: "Sniglet", system-ui; } /* ============================ ENTRY DETAIL MODAL ============================ */ /* Overlay – full-screen backdrop */ .entry-modal-overlay { position: fixed; inset: 0; z-index: 1000; background: rgba(0, 0, 0, 0.45); backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); display: flex; align-items: flex-end; justify-content: center; padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); animation: modalFadeIn 0.2s ease; } @keyframes modalFadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes modalSlideUp { from { transform: translateY(100%); } to { transform: translateY(0); } } /* Modal panel – bottom sheet on mobile, centred card on desktop */ .entry-modal { background: #fff; border-radius: 20px 20px 0 0; width: 100%; max-height: 85vh; overflow-y: auto; padding: 1.25rem 1.25rem calc(1.25rem + env(safe-area-inset-bottom)); box-shadow: 0 -4px 32px rgba(0, 0, 0, 0.12); animation: modalSlideUp 0.25s ease; -webkit-overflow-scrolling: touch; } /* Header row */ .entry-modal-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 1rem; } .entry-modal-meta { display: flex; align-items: center; gap: 0.625rem; } .entry-modal-date { font-size: 0.625rem; font-weight: 700; letter-spacing: 0.1em; color: #6b7280; text-transform: uppercase; font-family: "Sniglet", system-ui; } .entry-modal-time { font-size: 0.6875rem; color: #9ca3af; font-family: "Sniglet", system-ui; } /* Close button */ .entry-modal-close { display: flex; align-items: center; justify-content: center; width: var(--touch-min); height: var(--touch-min); border: none; border-radius: 50%; background: #f3f4f6; color: #6b7280; cursor: pointer; transition: background 0.2s, color 0.2s; flex-shrink: 0; } .entry-modal-close:hover { background: #e5e7eb; color: #374151; } /* Title */ .entry-modal-title { margin: 0 0 1rem; font-size: 1.375rem; font-weight: 700; line-height: 1.3; color: #1a1a1a; font-family: "Sniglet", system-ui; } /* Body content */ .entry-modal-content { font-family: "Sniglet", system-ui; font-size: 1rem; line-height: 1.75; color: #374151; } .entry-modal-content p { margin: 0 0 0.75rem; } .entry-modal-content p:last-child { margin-bottom: 0; } .entry-modal-empty { color: #9ca3af; font-style: italic; } /* Decrypt error state */ .entry-modal-error { display: flex; align-items: center; gap: 0.5rem; padding: 0.875rem 1rem; border-radius: 12px; background: #fef2f2; color: #b91c1c; font-size: 0.875rem; font-family: "Sniglet", system-ui; } /* E2E encrypted badge */ .entry-modal-badge { display: inline-flex; align-items: center; gap: 0.375rem; margin-top: 1.25rem; padding: 0.375rem 0.75rem; border-radius: 999px; background: var(--color-accent-light, #dcfce7); color: #15803d; font-size: 0.6875rem; font-weight: 600; letter-spacing: 0.02em; font-family: "Sniglet", system-ui; } /* ---- Responsive: tablet+ (≥ 768px) ---- */ @media (min-width: 768px) { .entry-modal-overlay { align-items: center; padding: 2rem; } .entry-modal { border-radius: 20px; max-width: 560px; max-height: 80vh; padding: 1.75rem; animation: modalScaleIn 0.2s ease; } @keyframes modalScaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } .entry-modal-title { font-size: 1.5rem; } } /* ---- Responsive: desktop (≥ 768px) ---- */ @media (min-width: 768px) { .entry-modal { max-width: 620px; padding: 2rem; } .entry-modal-content { font-size: 1.0625rem; } } /* ============================ CONFIRM DELETE MODAL ============================ */ .confirm-modal-overlay { position: fixed; inset: 0; z-index: 2000; background: rgba(0, 0, 0, 0.5); display: flex; align-items: center; justify-content: center; padding: 1.5rem; animation: fadeIn 0.15s ease; } .confirm-modal { background: #fff; border-radius: 20px; padding: 1.75rem; max-width: 380px; width: 100%; box-shadow: 0 12px 40px rgba(0, 0, 0, 0.18); text-align: center; animation: modalScaleIn 0.2s ease; } .confirm-modal-icon { font-size: 2.25rem; margin-bottom: 0.75rem; } .confirm-modal-title { font-size: 1.25rem; font-weight: 700; color: #ef4444; margin: 0 0 0.5rem; } .confirm-modal-desc { font-size: 0.85rem; color: #6b7280; margin: 0 0 1rem; line-height: 1.5; } .confirm-modal-label { font-size: 0.8rem; font-weight: 600; color: #374151; text-align: left; margin: 0 0 0.375rem; } .confirm-modal-input { width: 100%; padding: 0.625rem 0.75rem; font-size: 0.9rem; font-family: inherit; border: 1.5px solid #d1d5db; border-radius: 10px; outline: none; transition: border-color 0.15s; margin-bottom: 1rem; } .confirm-modal-input:focus { border-color: #ef4444; } .confirm-modal-actions { display: flex; gap: 0.75rem; } .confirm-modal-cancel { flex: 1; padding: 0.65rem; border: none; border-radius: 12px; font-size: 0.9rem; font-weight: 600; font-family: inherit; background: #f3f4f6; color: #374151; cursor: pointer; transition: background 0.15s; } .confirm-modal-cancel:hover:not(:disabled) { background: #e5e7eb; } .confirm-modal-delete { flex: 1; padding: 0.65rem; border: none; border-radius: 12px; font-size: 0.9rem; font-weight: 600; font-family: inherit; background: #ef4444; color: #fff; cursor: pointer; transition: background 0.15s, opacity 0.15s; } .confirm-modal-delete:hover:not(:disabled) { background: #dc2626; } .confirm-modal-delete:disabled { opacity: 0.5; cursor: not-allowed; } /* ============================ RESPONSIVE – DESKTOP (≥ 860px) Sidebar navigation + single-column content ============================ */ @media (min-width: 860px) { /* ---- Sidebar navigation ---- */ .bottom-nav { position: fixed; left: 0; top: 0; height: 100dvh; width: 232px; flex-direction: column; justify-content: flex-start; align-items: stretch; padding: 0 0.875rem 1.5rem; gap: 4px; border-top: none; border-right: 1px solid var(--color-border); background: var(--color-surface); z-index: 100; } /* Brand header in sidebar */ .bottom-nav-brand { display: block; font-family: "Sniglet", system-ui; font-size: 1.0625rem; font-weight: 700; color: var(--color-primary); padding: 1.75rem calc(0.875rem + 10px) 1.25rem; margin: 0 -0.875rem 0.5rem; border-bottom: 1px solid var(--color-border); letter-spacing: -0.01em; } /* Nav buttons become full-width rows */ .bottom-nav-btn { flex-direction: row; justify-content: flex-start; width: 100%; padding: 10px 14px; border-radius: 12px; min-height: 42px; } /* Always show labels in sidebar */ .bottom-nav-btn span { display: inline; } /* Active pill keeps green but full-width */ .bottom-nav-btn-active { padding: 10px 14px; } /* Offset all pages for the sidebar width */ .home-page, .history-page, .settings-page { margin-left: 232px; } /* ---- Write / Home page ---- */ .journal-container { padding: 2.5rem 2rem; align-items: center; } .journal-card { max-width: 760px; width: 100%; align-self: center; } /* ---- History page ---- */ .history-header { padding: 2rem 2.5rem 0; } .history-container { padding: 1.25rem 2.5rem 1.5rem; } /* ---- Settings page ---- */ .settings-header { padding: 2rem 2.5rem 0; } .settings-container { padding: 1.25rem 2.5rem 1.5rem; max-width: 720px; } } /* Desktop dark theme adjustments */ @media (min-width: 860px) { [data-theme="dark"] .bottom-nav { background: #141414; border-right-color: rgba(74, 222, 128, 0.1); } [data-theme="dark"] .bottom-nav-brand { border-bottom-color: rgba(74, 222, 128, 0.1); } } /* ============================ RESPONSIVE – WIDE DESKTOP (≥ 1100px) Two-column history: calendar left, entries right ============================ */ @media (min-width: 1100px) { /* Two-column layout: calendar left, entries right */ .history-container { display: flex; flex-direction: row; gap: 1.5rem; overflow: hidden; } .calendar-card { flex-shrink: 0; width: 320px; align-self: flex-start; margin-bottom: 0; } .recent-entries { flex: 1; min-height: 0; overflow-y: auto; scrollbar-width: none; -ms-overflow-style: none; margin-bottom: 0; } .recent-entries::-webkit-scrollbar { display: none; } } /* ============================ DARK THEME ============================ */ /* -- Page backgrounds -- */ [data-theme="dark"] .home-page, [data-theme="dark"] .history-page, [data-theme="dark"] .settings-page { background: #0f0f0f; } /* -- Cards & surfaces -- */ [data-theme="dark"] .journal-card, [data-theme="dark"] .calendar-card, [data-theme="dark"] .settings-card, [data-theme="dark"] .settings-profile, [data-theme="dark"] .entry-card { background: #1a1a1a; border-color: rgba(74, 222, 128, 0.12); box-shadow: 0 2px 16px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(74, 222, 128, 0.06); } /* -- Primary text (headings) -- */ [data-theme="dark"] .journal-prompt, [data-theme="dark"] .history-header-text h1, [data-theme="dark"] .settings-header-text h1, [data-theme="dark"] .entry-title, [data-theme="dark"] .settings-profile-name, [data-theme="dark"] .settings-item-title, [data-theme="dark"] .calendar-month { color: #e8f5e8; } /* -- Input text -- */ [data-theme="dark"] .journal-title-input, [data-theme="dark"] .journal-entry-textarea { color: #d1d5db; } [data-theme="dark"] .journal-title-input { border-bottom-color: #2a2a2a; } [data-theme="dark"] .journal-title-input:focus { border-bottom-color: #4ade80; box-shadow: 0 1px 0 0 rgba(74, 222, 128, 0.4); } /* -- Placeholder text -- */ [data-theme="dark"] .journal-title-input::placeholder, [data-theme="dark"] .journal-entry-textarea::placeholder { color: #4a5a4a; } /* -- Muted text -- */ [data-theme="dark"] .journal-date, [data-theme="dark"] .history-subtitle, [data-theme="dark"] .settings-subtitle, [data-theme="dark"] .entry-preview, [data-theme="dark"] .entry-date, [data-theme="dark"] .entry-time, [data-theme="dark"] .settings-item-subtitle, [data-theme="dark"] .settings-section-title, [data-theme="dark"] .recent-entries-title, [data-theme="dark"] .calendar-weekday { color: #7a8a7a; } /* -- Green accent text brighter in dark -- */ [data-theme="dark"] .journal-date { color: #4ade80; } [data-theme="dark"] .login-card__title { color: #4ade80; } /* -- Calendar -- */ [data-theme="dark"] .calendar-day { color: #b0b8b0; } [data-theme="dark"] .calendar-day:not(.calendar-day-empty):hover { background: rgba(74, 222, 128, 0.12); color: #4ade80; } [data-theme="dark"] .calendar-day-has-entry { background: rgba(74, 222, 128, 0.18); color: #4ade80; } [data-theme="dark"] .calendar-day-has-entry:hover { background: rgba(74, 222, 128, 0.28); } [data-theme="dark"] .calendar-day-today { background: #22c55e; color: #fff; } [data-theme="dark"] .calendar-day-today:hover { background: #16a34a; } [data-theme="dark"] .calendar-day-selected { box-shadow: inset 0 0 0 2px #4ade80; } [data-theme="dark"] .calendar-day-selected:not(.calendar-day-today):not( .calendar-day-has-entry ) { background: rgba(74, 222, 128, 0.1); color: #4ade80; } [data-theme="dark"] .calendar-nav-btn:hover { background: rgba(74, 222, 128, 0.1); color: #4ade80; } /* -- Bottom nav -- */ [data-theme="dark"] .bottom-nav { background: rgba(20, 20, 20, 0.97); border-top-color: rgba(74, 222, 128, 0.1); } [data-theme="dark"] .bottom-nav-btn { color: #5a6a5a; } [data-theme="dark"] .bottom-nav-btn:hover { color: #4ade80; background: rgba(74, 222, 128, 0.08); } [data-theme="dark"] .bottom-nav-btn-active { background: #22c55e; color: #fff; } [data-theme="dark"] .bottom-nav-btn-active:hover { background: #16a34a; color: #fff; } /* -- Write button -- */ [data-theme="dark"] .journal-write-btn { background: #22c55e; box-shadow: 0 4px 16px rgba(74, 222, 128, 0.35), 0 0 24px rgba(74, 222, 128, 0.1); } [data-theme="dark"] .journal-write-btn:hover:not(:disabled) { background: #16a34a; box-shadow: 0 6px 24px rgba(74, 222, 128, 0.45), 0 0 32px rgba(74, 222, 128, 0.15); } /* -- Home login link -- */ [data-theme="dark"] .home-login-link { background: #22c55e; box-shadow: 0 2px 12px rgba(74, 222, 128, 0.25); } /* -- Entry card green accents -- */ [data-theme="dark"] .entry-card { border-left-color: #4ade80; } [data-theme="dark"] .entry-card:hover { box-shadow: 0 6px 24px rgba(74, 222, 128, 0.12), 0 2px 8px rgba(0, 0, 0, 0.3); border-left-color: #22c55e; } /* -- Settings icon backgrounds -- */ [data-theme="dark"] .settings-item-icon-green { background: rgba(74, 222, 128, 0.12); color: #4ade80; } [data-theme="dark"] .settings-item-icon-gray { background: rgba(156, 163, 175, 0.1); color: #9ca3af; } [data-theme="dark"] .settings-item-icon-orange { background: rgba(251, 146, 60, 0.12); color: #fb923c; } [data-theme="dark"] .settings-item-icon-blue { background: rgba(96, 165, 250, 0.12); color: #60a5fa; } /* -- Settings buttons -- */ [data-theme="dark"] .settings-tutorial-btn { background: #1a1a1a; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); } [data-theme="dark"] .settings-tutorial-btn:hover { background: rgba(74, 222, 128, 0.08); } [data-theme="dark"] .settings-clear-btn { background: #1a1a1a; color: #f87171; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); } [data-theme="dark"] .settings-clear-btn:hover { background: rgba(239, 68, 68, 0.08); } [data-theme="dark"] .settings-signout-btn { background: #1a1a1a; color: #9ca3af; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); } [data-theme="dark"] .settings-signout-btn:hover { background: rgba(74, 222, 128, 0.06); color: #d1d5db; } /* -- Settings profile badge -- */ [data-theme="dark"] .settings-profile-badge { background: #16a34a; color: #fff; } [data-theme="dark"] .settings-edit-btn { background: rgba(34, 197, 94, 0.15); color: #4ade80; } [data-theme="dark"] .settings-edit-btn:hover { background: rgba(34, 197, 94, 0.25); } [data-theme="dark"] .edit-modal-title { color: #e8f5e8; } /* -- Settings divider -- */ [data-theme="dark"] .settings-divider { background: #2a2a2a; } /* -- Settings item hover -- */ [data-theme="dark"] .settings-item-button:hover { background: rgba(74, 222, 128, 0.06); } /* -- Settings toggle -- */ [data-theme="dark"] .settings-toggle-slider { background: #333; } [data-theme="dark"] .settings-toggle input:checked + .settings-toggle-slider { background: #22c55e; } /* -- Settings theme dot -- */ [data-theme="dark"] .settings-theme-dot { border-color: rgba(255, 255, 255, 0.12); } [data-theme="dark"] .settings-theme-dot-active { border-color: #4ade80; box-shadow: 0 0 0 2px #4ade80; } /* -- Settings version -- */ [data-theme="dark"] .settings-version { color: #3a3a3a; } /* -- History search button -- */ [data-theme="dark"] .history-search-btn { background: #1a1a1a; border-color: #2a2a2a; color: #7a8a7a; } [data-theme="dark"] .history-search-btn:hover { background: rgba(74, 222, 128, 0.08); border-color: #4ade80; color: #4ade80; } /* -- Spinners -- */ [data-theme="dark"] .protected-route__spinner, [data-theme="dark"] .login-page__spinner { border-color: #2a2a2a; border-top-color: #4ade80; } [data-theme="dark"] .protected-route__loading { background: #0f0f0f; color: #5a6a5a; } /* -- Icon btn hover -- */ [data-theme="dark"] .journal-icon-btn:hover { color: #4ade80; background: rgba(74, 222, 128, 0.1); } /* -- Entry modal -- */ [data-theme="dark"] .entry-modal { background: #1a1a1a; border-top-color: #4ade80; box-shadow: 0 -4px 32px rgba(0, 0, 0, 0.5), 0 -1px 0 rgba(74, 222, 128, 0.2); } [data-theme="dark"] .entry-modal-title { color: #e8f5e8; } [data-theme="dark"] .entry-modal-content { color: #b0b8b0; } [data-theme="dark"] .entry-modal-date { color: #7a8a7a; } [data-theme="dark"] .entry-modal-time { color: #5a6a5a; } [data-theme="dark"] .entry-modal-close { background: #252525; color: #7a8a7a; } [data-theme="dark"] .entry-modal-close:hover { background: rgba(74, 222, 128, 0.12); color: #4ade80; } [data-theme="dark"] .entry-modal-badge { background: rgba(74, 222, 128, 0.12); color: #4ade80; } [data-theme="dark"] .entry-modal-error { background: rgba(239, 68, 68, 0.1); color: #f87171; } [data-theme="dark"] .entry-modal-overlay { background: rgba(0, 0, 0, 0.7); } /* -- Confirm delete modal -- */ [data-theme="dark"] .confirm-modal-overlay { background: rgba(0, 0, 0, 0.7); } [data-theme="dark"] .confirm-modal { background: #1a1a1a; box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5); } [data-theme="dark"] .confirm-modal-title { color: #f87171; } [data-theme="dark"] .confirm-modal-desc { color: #7a8a7a; } [data-theme="dark"] .confirm-modal-label { color: #b0b8b0; } [data-theme="dark"] .confirm-modal-input { background: #111; border-color: #2a2a2a; color: #d1d5db; } [data-theme="dark"] .confirm-modal-input:focus { border-color: #ef4444; background: #151515; } [data-theme="dark"] .confirm-modal-cancel { background: #252525; color: #9ca3af; } [data-theme="dark"] .confirm-modal-cancel:hover:not(:disabled) { background: #333; } /* -- Login page -- */ [data-theme="dark"] .login-page { background: linear-gradient(160deg, #0f0f0f 0%, #0a2e14 50%, #0f0f0f 100%); } [data-theme="dark"] .login-card { background: #1a1a1a; border-top-color: #4ade80; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(74, 222, 128, 0.08); } [data-theme="dark"] .login-card__tagline { color: #7a8a7a; } [data-theme="dark"] .login-card__error { background: rgba(239, 68, 68, 0.1); color: #f87171; } /* -- Google sign-in btn -- */ [data-theme="dark"] .google-sign-in-btn { background: #252525; border-color: #333; color: #d1d5db; } [data-theme="dark"] .google-sign-in-btn:hover:not(:disabled) { background: #2a2a2a; border-color: rgba(74, 222, 128, 0.3); box-shadow: 0 1px 8px rgba(74, 222, 128, 0.1); } /* ============================ WELCOME MODAL ============================ */ .welcome-modal-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.55); display: flex; align-items: center; justify-content: center; z-index: 1000; padding: 1.5rem; animation: welcome-fade-in 0.3s ease; } @keyframes welcome-fade-in { from { opacity: 0; } to { opacity: 1; } } @keyframes welcome-slide-up { from { opacity: 0; transform: translateY(24px) scale(0.96); } to { opacity: 1; transform: translateY(0) scale(1); } } .welcome-modal { background: var(--color-surface, #ffffff); border-radius: 20px; padding: 2.5rem 2rem 2rem; max-width: 400px; width: 100%; text-align: center; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.25); animation: welcome-slide-up 0.35s ease; } .welcome-modal-icon { display: flex; align-items: center; justify-content: center; width: 72px; height: 72px; margin: 0 auto 1.25rem; background: var(--color-accent-light, #dcfce7); border-radius: 50%; color: var(--color-primary, #22c55e); } .welcome-modal-title { font-family: "Sniglet", system-ui; font-size: 1.375rem; font-weight: 700; color: var(--color-text, #1a1a1a); margin: 0 0 0.75rem; } .welcome-modal-text { font-family: "Sniglet", system-ui; font-size: 0.9rem; line-height: 1.6; color: var(--color-text-muted, #6b7280); margin: 0 0 1.75rem; } .welcome-modal-btn { font-family: "Sniglet", system-ui; font-size: 1rem; font-weight: 700; color: #fff; background: var(--color-primary, #22c55e); border: none; border-radius: 14px; padding: 0.875rem 2rem; width: 100%; cursor: pointer; transition: background 0.15s, transform 0.15s; } .welcome-modal-btn:hover { background: #16a34a; transform: translateY(-1px); } .welcome-modal-btn:active { transform: translateY(0); } .welcome-modal-skip { font-family: "Sniglet", system-ui; font-size: 0.8125rem; color: var(--color-text-muted, #6b7280); background: none; border: none; cursor: pointer; margin-top: 0.75rem; padding: 0.5rem 1rem; transition: color 0.15s; } .welcome-modal-skip:hover { color: var(--color-text, #1a1a1a); } /* ============================ DRIVER.JS TOUR CUSTOMIZATION ============================ */ .gj-tour-popover { font-family: "Sniglet", system-ui !important; border-radius: 16px !important; box-shadow: 0 12px 40px rgba(0, 0, 0, 0.2) !important; } .gj-tour-popover .driver-popover-title { font-family: "Sniglet", system-ui !important; font-size: 1.05rem !important; font-weight: 700 !important; color: var(--color-text, #1a1a1a) !important; } .gj-tour-popover .driver-popover-description { font-family: "Sniglet", system-ui !important; font-size: 0.85rem !important; line-height: 1.55 !important; color: var(--color-text-muted, #6b7280) !important; } .gj-tour-popover .driver-popover-progress-text { font-family: "Sniglet", system-ui !important; font-size: 0.75rem !important; color: var(--color-text-muted, #6b7280) !important; } .gj-tour-popover .driver-popover-navigation-btns button { font-family: "Sniglet", system-ui !important; border-radius: 10px !important; font-size: 0.825rem !important; padding: 0.4rem 1rem !important; font-weight: 600 !important; } .gj-tour-popover .driver-popover-next-btn { background: var(--color-primary, #22c55e) !important; color: #fff !important; border: none !important; text-shadow: none !important; } .gj-tour-popover .driver-popover-prev-btn { color: var(--color-text-muted, #6b7280) !important; border: 1px solid var(--color-border, #d4e8d4) !important; background: transparent !important; } .gj-tour-popover .driver-popover-close-btn { color: var(--color-text-muted, #6b7280) !important; outline: none !important; box-shadow: none !important; border: none !important; background: transparent !important; } .gj-tour-popover .driver-popover-close-btn:focus, .gj-tour-popover .driver-popover-close-btn:focus-visible { outline: none !important; box-shadow: none !important; border: none !important; } /* -- Dark theme: welcome modal -- */ [data-theme="dark"] .welcome-modal { background: #1a1a1a; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5); } /* -- Dark theme: driver.js -- */ [data-theme="dark"] .gj-tour-popover { background: #1a1a1a !important; border: 1px solid rgba(74, 222, 128, 0.12) !important; } [data-theme="dark"] .gj-tour-popover .driver-popover-title { color: #e8f5e8 !important; } [data-theme="dark"] .gj-tour-popover .driver-popover-description { color: #7a8a7a !important; } [data-theme="dark"] .gj-tour-popover .driver-popover-prev-btn { border-color: rgba(74, 222, 128, 0.15) !important; color: #7a8a7a !important; } [data-theme="dark"] .gj-tour-popover .driver-popover-close-btn { color: #7a8a7a !important; outline: none !important; box-shadow: none !important; border: none !important; }