Spaces:
Running
Running
| :root { | |
| color-scheme: light; | |
| --bg: #f4ead9; | |
| --ink: #2b1d14; | |
| --muted: #7b6554; | |
| --panel: #fffaf2; | |
| --line: #d9c4a6; | |
| --field: #fcf4e8; | |
| --accent: #8a4b22; | |
| --accent-2: #b88a2d; | |
| --accent-3: #6f1d1b; | |
| --shadow: 0 14px 34px rgba(62, 37, 18, 0.10); | |
| } | |
| * { | |
| box-sizing: border-box; | |
| } | |
| body { | |
| margin: 0; | |
| background: | |
| radial-gradient(circle at top left, rgba(184, 138, 45, 0.18), transparent 28%), | |
| radial-gradient(circle at top right, rgba(111, 29, 27, 0.14), transparent 24%), | |
| linear-gradient(180deg, #f8efe0 0%, var(--bg) 48%, #efe0c8 100%); | |
| color: var(--ink); | |
| font-family: Inter, ui-sans-serif, system-ui, -apple-system, sans-serif; | |
| -webkit-font-smoothing: antialiased; | |
| } | |
| h1, h2, p { | |
| margin: 0; | |
| } | |
| button, input, select, textarea { | |
| font: inherit; | |
| } | |
| /* Base Mobile Layout (Mobile-first) */ | |
| .shell { | |
| width: 100%; | |
| max-width: 1180px; | |
| margin: 0 auto; | |
| padding: 16px; | |
| } | |
| .hero { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 12px; | |
| padding: 16px 0 24px; | |
| } | |
| .eyebrow { | |
| font-size: 11px; | |
| font-weight: 800; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| color: var(--muted); | |
| margin-bottom: 4px; | |
| } | |
| h1 { | |
| font-size: clamp(36px, 10vw, 64px); | |
| line-height: 0.95; | |
| letter-spacing: -0.02em; | |
| font-family: ui-serif, Georgia, Cambria, "Times New Roman", serif; | |
| } | |
| h2 { | |
| font-size: 18px; | |
| font-weight: 700; | |
| font-family: ui-serif, Georgia, Cambria, "Times New Roman", serif; | |
| } | |
| .heroCopy { | |
| max-width: 100%; | |
| font-size: 14px; | |
| line-height: 1.5; | |
| color: var(--muted); | |
| } | |
| /* Grid Layouts - Single column by default on mobile */ | |
| .grid { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 16px; | |
| } | |
| .panel { | |
| background: linear-gradient(180deg, rgba(255, 250, 242, 0.98), rgba(248, 236, 216, 0.98)); | |
| border: 1px solid rgba(138, 75, 34, 0.18); | |
| border-radius: 12px; | |
| box-shadow: var(--shadow); | |
| overflow: hidden; | |
| } | |
| .form { | |
| display: grid; | |
| gap: 14px; | |
| padding: 16px; | |
| } | |
| .row { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 10px; | |
| } | |
| label { | |
| display: grid; | |
| gap: 6px; | |
| font-size: 12px; | |
| font-weight: 700; | |
| color: #4d3527; | |
| } | |
| .date-picker-field { | |
| display: grid; | |
| gap: 6px; | |
| } | |
| .date-picker-field > span:first-child { | |
| display: block; | |
| font-size: 12px; | |
| font-weight: 700; | |
| color: #4d3527; | |
| } | |
| .date-picker-help { | |
| font-size: 11px; | |
| line-height: 1.35; | |
| color: var(--muted); | |
| } | |
| .date-input-wrapper { | |
| position: relative; | |
| display: flex; | |
| align-items: center; | |
| } | |
| .date-text-input { | |
| flex: 1; | |
| padding-right: 44px; | |
| } | |
| .calendar-toggle-btn { | |
| position: absolute; | |
| right: 8px; | |
| background: none; | |
| border: none; | |
| font-size: 16px; | |
| cursor: pointer; | |
| padding: 4px; | |
| border-radius: 4px; | |
| transition: transform 0.15s; | |
| } | |
| .calendar-toggle-btn:hover { | |
| transform: scale(1.15); | |
| } | |
| .calendar-popover { | |
| position: absolute; | |
| top: calc(100% + 8px); | |
| right: 0; | |
| z-index: 1000; | |
| width: 280px; | |
| background: var(--panel); | |
| border: 1px solid rgba(138, 75, 34, 0.28); | |
| border-radius: 12px; | |
| padding: 12px; | |
| box-shadow: 0 10px 25px rgba(62, 37, 18, 0.15); | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| } | |
| .calendar-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| gap: 6px; | |
| } | |
| .calendar-selectors { | |
| display: flex; | |
| gap: 4px; | |
| flex: 1; | |
| } | |
| .calendar-select-field { | |
| padding: 4px 6px ; | |
| font-size: 13px ; | |
| border-radius: 6px ; | |
| background: var(--field) ; | |
| border: 1px solid rgba(138, 75, 34, 0.2) ; | |
| color: var(--ink) ; | |
| cursor: pointer; | |
| height: 28px ; | |
| } | |
| .cal-nav-btn { | |
| background: none ; | |
| border: none ; | |
| color: var(--accent) ; | |
| padding: 4px 8px ; | |
| cursor: pointer; | |
| font-size: 12px ; | |
| border-radius: 4px; | |
| transition: background 0.15s; | |
| } | |
| .cal-nav-btn:hover { | |
| background: rgba(138, 75, 34, 0.1) ; | |
| } | |
| .calendar-weekdays { | |
| display: grid; | |
| grid-template-columns: repeat(7, 1fr); | |
| text-align: center; | |
| font-size: 11px; | |
| font-weight: 700; | |
| color: var(--muted); | |
| padding-bottom: 4px; | |
| border-bottom: 1px solid rgba(138, 75, 34, 0.1); | |
| } | |
| .calendar-weekday { | |
| padding: 4px 0; | |
| } | |
| .calendar-days-grid { | |
| display: grid; | |
| grid-template-columns: repeat(7, 1fr); | |
| gap: 4px; | |
| } | |
| .calendar-day-cell { | |
| background: none ; | |
| border: none ; | |
| color: var(--ink) ; | |
| font-size: 12px ; | |
| font-weight: 500 ; | |
| height: 28px ; | |
| width: 28px ; | |
| border-radius: 50% ; | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: center ; | |
| cursor: pointer ; | |
| margin: 0 auto ; | |
| padding: 0 ; | |
| transition: background 0.15s, color 0.15s; | |
| } | |
| .calendar-day-cell:hover:not(:disabled) { | |
| background: rgba(184, 138, 45, 0.2) ; | |
| } | |
| .calendar-day-cell.selected { | |
| background: var(--accent) ; | |
| color: #fff ; | |
| font-weight: 700 ; | |
| } | |
| .calendar-day-cell.empty { | |
| cursor: default ; | |
| pointer-events: none ; | |
| } | |
| input, select, textarea { | |
| width: 100%; | |
| border: 1px solid rgba(138, 75, 34, 0.22); | |
| border-radius: 8px; | |
| background: var(--field); | |
| color: var(--ink); | |
| padding: 10px 12px; | |
| transition: border-color 0.2s, outline-color 0.2s; | |
| } | |
| input:focus, select:focus, textarea:focus { | |
| outline: 2px solid rgba(184, 138, 45, 0.35); | |
| border-color: var(--accent); | |
| } | |
| select:disabled { | |
| opacity: 0.65; | |
| cursor: not-allowed; | |
| } | |
| .notice { | |
| color: var(--muted); | |
| font-size: 12px; | |
| line-height: 1.4; | |
| } | |
| button { | |
| border: 0; | |
| border-radius: 8px; | |
| padding: 12px 16px; | |
| background: linear-gradient(135deg, var(--accent), #a95d2a 55%, var(--accent-2)); | |
| color: white; | |
| font-weight: 700; | |
| cursor: pointer; | |
| transition: opacity 0.2s, background-color 0.2s; | |
| } | |
| button:hover { | |
| background: linear-gradient(135deg, #a95d2a, #8a4b22 55%, #c49934); | |
| } | |
| button:disabled { | |
| opacity: 0.6; | |
| cursor: wait; | |
| } | |
| /* Stage & Canvas Wrapper */ | |
| .stage { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 18px; | |
| align-items: center; | |
| padding: 16px; | |
| } | |
| .canvas-wrapper { | |
| position: relative; | |
| width: min(100%, 420px); | |
| aspect-ratio: 1; | |
| justify-self: center; | |
| border-radius: 50%; | |
| background: | |
| radial-gradient(circle at center, rgba(255,255,255,0.9), rgba(251, 241, 221, 0.95) 55%, rgba(233, 210, 173, 1) 100%); | |
| box-shadow: inset 0 0 0 1px rgba(138, 75, 34, 0.14), 0 18px 34px rgba(62, 37, 18, 0.08); | |
| } | |
| canvas { | |
| width: 100%; | |
| height: 100%; | |
| display: block; | |
| } | |
| .status { | |
| border-left: 3px solid var(--accent-2); | |
| padding: 12px 16px; | |
| line-height: 1.5; | |
| font-size: 13px; | |
| color: var(--muted); | |
| } | |
| /* Reading & Chat Results */ | |
| .resultGrid { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 16px; | |
| margin-top: 16px; | |
| } | |
| .reading, .facts, .chat { | |
| padding: 20px; | |
| } | |
| .reading { | |
| display: grid; | |
| gap: 12px; | |
| line-height: 1.6; | |
| font-size: 16px; | |
| } | |
| .facts { | |
| display: grid; | |
| gap: 10px; | |
| align-content: start; | |
| } | |
| .facts div { | |
| display: flex; | |
| justify-content: space-between; | |
| gap: 12px; | |
| padding: 12px 0; | |
| border-bottom: 1px solid rgba(138, 75, 34, 0.14); | |
| } | |
| .facts span { | |
| color: var(--muted); | |
| text-align: right; | |
| font-size: 14px; | |
| } | |
| /* Chat & Messages */ | |
| .chat { | |
| display: grid; | |
| gap: 16px; | |
| } | |
| .messages { | |
| display: grid; | |
| gap: 10px; | |
| max-height: 380px; | |
| overflow-y: auto; | |
| padding-right: 4px; | |
| } | |
| .msg { | |
| max-width: 90%; | |
| border: 1px solid rgba(138, 75, 34, 0.16); | |
| border-radius: 10px; | |
| padding: 12px 16px; | |
| background: linear-gradient(180deg, rgba(255, 251, 243, 0.98), rgba(249, 238, 221, 0.98)); | |
| font-size: 14px; | |
| } | |
| .msg.you { | |
| justify-self: end; | |
| background: linear-gradient(180deg, rgba(255, 241, 221, 0.98), rgba(244, 221, 189, 0.98)); | |
| border-color: rgba(184, 138, 45, 0.25); | |
| } | |
| .msg b { | |
| display: block; | |
| font-size: 11px; | |
| text-transform: uppercase; | |
| color: var(--muted); | |
| margin-bottom: 4px; | |
| } | |
| .msg p { | |
| white-space: pre-wrap; | |
| line-height: 1.5; | |
| } | |
| .msg small { | |
| display: block; | |
| margin-top: 8px; | |
| font-size: 11px; | |
| color: var(--muted); | |
| } | |
| .ask { | |
| display: grid; | |
| grid-template-columns: 1fr; | |
| gap: 10px; | |
| } | |
| textarea { | |
| min-height: 72px; | |
| resize: vertical; | |
| } | |
| /* Loader Styles */ | |
| .loader-overlay { | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background: rgba(255, 255, 255, 0.75); | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| border-radius: 50%; | |
| z-index: 10; | |
| } | |
| .spinner { | |
| width: 48px; | |
| height: 48px; | |
| border: 3px solid var(--line); | |
| border-top-color: var(--accent); | |
| border-radius: 50%; | |
| animation: spin 0.8s linear infinite; | |
| } | |
| .msg.thinking p { | |
| color: var(--muted); | |
| font-style: italic; | |
| animation: pulse 1.4s ease-in-out infinite; | |
| } | |
| /* ─── Toast Notifications ─── */ | |
| .toast-container { | |
| position: fixed; | |
| bottom: 20px; | |
| right: 20px; | |
| display: flex; | |
| flex-direction: column; | |
| gap: 8px; | |
| z-index: 9999; | |
| pointer-events: none; | |
| } | |
| .toast { | |
| padding: 12px 18px; | |
| border-radius: 10px; | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: #fff; | |
| box-shadow: 0 4px 16px rgba(0,0,0,0.15); | |
| animation: toast-in 0.3s ease; | |
| pointer-events: auto; | |
| max-width: 280px; | |
| } | |
| .toast-success { background: #8a4b22; } | |
| .toast-error { background: #8a1f11; } | |
| .toast-info { background: #5a4335; } | |
| @keyframes toast-in { | |
| from { opacity: 0; transform: translateY(12px); } | |
| to { opacity: 1; transform: translateY(0); } | |
| } | |
| /* ─── Reading Header + Action Buttons ─── */ | |
| .reading-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| gap: 12px; | |
| flex-wrap: wrap; | |
| } | |
| .reading-actions { | |
| display: flex; | |
| gap: 6px; | |
| flex-wrap: wrap; | |
| } | |
| .btn-icon { | |
| background: transparent; | |
| border: 1px solid rgba(138, 75, 34, 0.18); | |
| color: var(--muted); | |
| font-size: 12px; | |
| font-weight: 600; | |
| padding: 5px 10px; | |
| border-radius: 6px; | |
| cursor: pointer; | |
| transition: background 0.15s, color 0.15s, border-color 0.15s; | |
| } | |
| .btn-icon:hover { | |
| background: var(--field); | |
| color: var(--ink); | |
| border-color: var(--accent); | |
| } | |
| .btn-regen:disabled { | |
| opacity: 0.5; | |
| cursor: wait; | |
| } | |
| /* ─── Chat Header + Clear ─── */ | |
| .chat-header { | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| } | |
| /* ─── Char Counter ─── */ | |
| .textarea-wrapper { | |
| position: relative; | |
| } | |
| .textarea-wrapper textarea { | |
| padding-bottom: 24px; | |
| } | |
| .char-count { | |
| position: absolute; | |
| bottom: 8px; | |
| right: 10px; | |
| font-size: 11px; | |
| color: var(--muted); | |
| pointer-events: none; | |
| } | |
| .char-warn { | |
| color: #dc2626; | |
| font-weight: 700; | |
| } | |
| /* ─── Chart Download Button ─── */ | |
| .btn-download { | |
| position: absolute; | |
| bottom: -12px; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| background: var(--panel); | |
| border: 1px solid rgba(138, 75, 34, 0.18); | |
| color: var(--muted); | |
| font-size: 11px; | |
| font-weight: 700; | |
| padding: 4px 12px; | |
| border-radius: 20px; | |
| cursor: pointer; | |
| white-space: nowrap; | |
| box-shadow: 0 2px 8px rgba(0,0,0,0.07); | |
| transition: border-color 0.15s, color 0.15s; | |
| } | |
| .btn-download:hover { | |
| border-color: var(--accent); | |
| color: var(--accent); | |
| background: var(--panel); | |
| } | |
| @keyframes spin { | |
| to { transform: rotate(360deg); } | |
| } | |
| @keyframes pulse { | |
| 0%, 100% { opacity: 0.5; } | |
| 50% { opacity: 1; } | |
| } | |
| /* ───────────────────────────────────────────────────────────────────────────── | |
| Responsive Breakpoints (Desktop scaling up from mobile baseline) | |
| ───────────────────────────────────────────────────────────────────────────── */ | |
| /* Tablet Up */ | |
| @media (min-width: 768px) { | |
| .shell { | |
| padding: 24px; | |
| } | |
| .hero { | |
| flex-direction: row; | |
| justify-content: space-between; | |
| align-items: flex-end; | |
| padding: 18px 0 28px; | |
| } | |
| .heroCopy { | |
| max-width: 430px; | |
| } | |
| .grid { | |
| grid-template-columns: 360px minmax(0, 1fr); | |
| } | |
| .row { | |
| grid-template-columns: 1fr 1fr; | |
| } | |
| .stage { | |
| grid-template-columns: minmax(240px, 320px) 1fr; | |
| padding: 20px; | |
| } | |
| .resultGrid { | |
| grid-template-columns: 1.15fr 0.85fr; | |
| } | |
| .chat { | |
| grid-column: 1 / -1; | |
| } | |
| .ask { | |
| grid-template-columns: 1fr 120px; | |
| } | |
| } | |
| /* Desktop Up */ | |
| @media (min-width: 1024px) { | |
| .grid { | |
| grid-template-columns: 430px minmax(0, 1fr); | |
| } | |
| .stage { | |
| grid-template-columns: minmax(280px, 520px) 1fr; | |
| } | |
| } | |
| /* ─── Birthplace Geocoding Autocomplete ─── */ | |
| .birthplace-container { | |
| position: relative; | |
| width: 100%; | |
| } | |
| .suggestions-dropdown { | |
| position: absolute; | |
| top: 100%; | |
| left: 0; | |
| right: 0; | |
| background: var(--panel); | |
| border: 1px solid rgba(138, 75, 34, 0.18); | |
| border-top: none; | |
| border-radius: 0 0 8px 8px; | |
| box-shadow: 0 10px 20px rgba(0, 0, 0, 0.05); | |
| max-height: 200px; | |
| overflow-y: auto; | |
| z-index: 100; | |
| padding: 4px 0; | |
| } | |
| .suggestions-status-message { | |
| position: absolute; | |
| top: 100%; | |
| left: 0; | |
| right: 0; | |
| background: var(--panel); | |
| border: 1px solid var(--line); | |
| border-top: none; | |
| border-radius: 0 0 8px 8px; | |
| box-shadow: 0 10px 20px rgba(0, 0, 0, 0.05); | |
| z-index: 100; | |
| padding: 10px 12px; | |
| font-size: 13px; | |
| color: var(--muted); | |
| text-align: left; | |
| } | |
| .suggestion-item { | |
| padding: 8px 12px; | |
| font-size: 13px; | |
| cursor: pointer; | |
| transition: background 0.15s, color 0.15s; | |
| color: var(--ink); | |
| text-align: left; | |
| } | |
| .suggestion-item:hover { | |
| background: var(--field); | |
| color: var(--accent); | |
| } | |
| /* ───────────────────────────────────────────────────────────────────────────── | |
| Claude-style Mobile UI/UX Styling | |
| ───────────────────────────────────────────────────────────────────────────── */ | |
| .mobile-shell { | |
| display: flex; | |
| flex-direction: column; | |
| height: 100vh; | |
| height: -webkit-fill-available; | |
| background: | |
| radial-gradient(circle at top left, rgba(184, 138, 45, 0.10), transparent 28%), | |
| radial-gradient(circle at bottom right, rgba(111, 29, 27, 0.10), transparent 24%), | |
| linear-gradient(180deg, #f8efe0 0%, #f4ead9 55%, #efe0c8 100%); | |
| color: #2b1d14; | |
| font-family: Inter, ui-sans-serif, system-ui, sans-serif; | |
| overflow: hidden; | |
| --keyboard-offset: 0px; | |
| } | |
| .mobile-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| padding: 12px 16px; | |
| background: rgba(255, 248, 238, 0.92); | |
| backdrop-filter: blur(12px); | |
| -webkit-backdrop-filter: blur(12px); | |
| border-bottom: 1px solid rgba(138, 75, 34, 0.12); | |
| z-index: 100; | |
| flex-shrink: 0; | |
| } | |
| .mobile-header-title { | |
| font-size: 16px; | |
| font-weight: 700; | |
| color: var(--accent-3); | |
| cursor: pointer; | |
| } | |
| .mobile-header-btn { | |
| background: rgba(255, 244, 227, 0.92); | |
| border: none; | |
| color: #6f4b33; | |
| padding: 6px 12px; | |
| border-radius: 20px; | |
| font-size: 12px; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: background 0.15s; | |
| } | |
| .mobile-header-btn:hover { | |
| background: #f0dfc5; | |
| } | |
| .mobile-status-bar { | |
| background: rgba(184, 138, 45, 0.14); | |
| padding: 4px 16px; | |
| font-size: 11px; | |
| color: #6e5644; | |
| text-align: center; | |
| border-bottom: 1px solid rgba(138, 75, 34, 0.08); | |
| flex-shrink: 0; | |
| } | |
| .mobile-main-content { | |
| flex: 1; | |
| overflow-y: auto; | |
| padding: 16px 16px 104px; | |
| display: flex; | |
| flex-direction: column; | |
| } | |
| .mobile-landing { | |
| margin: auto 0; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| text-align: center; | |
| gap: 24px; | |
| padding: 24px 8px; | |
| } | |
| .mobile-landing-copy { | |
| max-width: 320px; | |
| font-size: 14px; | |
| line-height: 1.5; | |
| color: #7b6554; | |
| } | |
| .mobile-landing-cta { | |
| min-width: 180px; | |
| } | |
| .mobile-greeting-logo { | |
| font-size: 48px; | |
| animation: pulse 2s infinite; | |
| } | |
| .mobile-landing-title { | |
| font-size: 28px; | |
| font-weight: 700; | |
| line-height: 1.2; | |
| color: #2b1d14; | |
| letter-spacing: -0.02em; | |
| } | |
| .mobile-quick-actions { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 12px; | |
| width: 100%; | |
| max-width: 480px; | |
| margin-top: 12px; | |
| } | |
| .quick-action-card { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 8px; | |
| padding: 16px; | |
| background: linear-gradient(180deg, rgba(255, 250, 242, 0.98), rgba(243, 226, 199, 0.98)); | |
| border: 1px solid rgba(138, 75, 34, 0.14); | |
| border-radius: 12px; | |
| box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03); | |
| text-align: center; | |
| cursor: pointer; | |
| transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s; | |
| } | |
| .quick-action-card:hover { | |
| transform: translateY(-2px); | |
| border-color: var(--accent); | |
| box-shadow: 0 4px 12px rgba(138, 75, 34, 0.10); | |
| } | |
| .action-emoji { | |
| font-size: 24px; | |
| } | |
| .action-text { | |
| font-size: 12px; | |
| font-weight: 600; | |
| color: #4d3527; | |
| } | |
| .mobile-chat-container { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| } | |
| .mobile-empty-state, | |
| .chat-empty-state { | |
| background: rgba(255, 248, 236, 0.98); | |
| border: 1px dashed rgba(138, 75, 34, 0.24); | |
| border-radius: 12px; | |
| color: #7b6554; | |
| font-size: 13px; | |
| line-height: 1.5; | |
| padding: 12px 14px; | |
| } | |
| .freshness-banner { | |
| background: rgba(255, 240, 214, 0.98); | |
| border: 1px solid rgba(184, 138, 45, 0.42); | |
| color: #7a431a; | |
| border-radius: 12px; | |
| font-size: 13px; | |
| line-height: 1.45; | |
| padding: 10px 12px; | |
| } | |
| .mobile-reading-card { | |
| background: linear-gradient(180deg, rgba(255, 250, 242, 0.98), rgba(247, 233, 208, 0.98)); | |
| border: 1px solid rgba(138, 75, 34, 0.14); | |
| border-radius: 12px; | |
| padding: 16px; | |
| box-shadow: 0 2px 8px rgba(0,0,0,0.03); | |
| } | |
| .mobile-reading-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 12px; | |
| border-bottom: 1px solid rgba(138, 75, 34, 0.10); | |
| padding-bottom: 8px; | |
| } | |
| .mobile-reading-header h4 { | |
| margin: 0; | |
| font-size: 14px; | |
| font-weight: 700; | |
| color: var(--accent-3); | |
| } | |
| .mobile-reading-actions { | |
| display: flex; | |
| gap: 6px; | |
| } | |
| .mobile-reading-actions button { | |
| background: rgba(255, 244, 227, 0.92); | |
| border: none; | |
| color: #6f4b33; | |
| padding: 4px 8px; | |
| font-size: 11px; | |
| font-weight: 600; | |
| border-radius: 6px; | |
| cursor: pointer; | |
| } | |
| .mobile-reading-text { | |
| font-size: 14px; | |
| line-height: 1.6; | |
| color: #4d3527; | |
| display: grid; | |
| gap: 10px; | |
| } | |
| .mobile-reading-text p, | |
| .reading-copy p { | |
| margin: 0; | |
| } | |
| .mobile-reading-meta, | |
| .reading-meta, | |
| .status-subline { | |
| color: #7b6554; | |
| font-size: 11px; | |
| font-weight: 600; | |
| letter-spacing: 0.01em; | |
| } | |
| .mobile-reading-meta, | |
| .reading-meta { | |
| margin-bottom: 10px; | |
| text-transform: uppercase; | |
| } | |
| .mobile-messages { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 12px; | |
| padding-bottom: 36px; | |
| } | |
| .mobile-msg-bubble { | |
| max-width: 85%; | |
| padding: 12px 16px; | |
| border-radius: 16px; | |
| font-size: 14px; | |
| line-height: 1.5; | |
| box-shadow: 0 1px 4px rgba(0,0,0,0.02); | |
| } | |
| .mobile-msg-bubble.you { | |
| align-self: flex-end; | |
| background: linear-gradient(180deg, rgba(255, 241, 221, 0.98), rgba(236, 207, 167, 0.98)); | |
| color: #7a431a; | |
| border-bottom-right-radius: 4px; | |
| } | |
| .mobile-msg-bubble.astrotruth { | |
| align-self: flex-start; | |
| background: linear-gradient(180deg, rgba(255, 250, 242, 0.98), rgba(247, 235, 214, 0.98)); | |
| color: #2b1d14; | |
| border: 1px solid rgba(138, 75, 34, 0.14); | |
| border-bottom-left-radius: 4px; | |
| } | |
| .bubble-sender { | |
| font-size: 10px; | |
| font-weight: 800; | |
| text-transform: uppercase; | |
| color: #8f6f57; | |
| margin-bottom: 4px; | |
| } | |
| .typing-indicator { | |
| display: inline-flex; | |
| align-items: center; | |
| gap: 4px; | |
| min-height: 18px; | |
| } | |
| .typing-indicator span { | |
| width: 6px; | |
| height: 6px; | |
| border-radius: 999px; | |
| background: #b88a2d; | |
| animation: typing-bounce 1s infinite ease-in-out; | |
| } | |
| .typing-indicator span:nth-child(2) { animation-delay: 0.12s; } | |
| .typing-indicator span:nth-child(3) { animation-delay: 0.24s; } | |
| @keyframes typing-bounce { | |
| 0%, 80%, 100% { transform: translateY(0); opacity: 0.45; } | |
| 40% { transform: translateY(-3px); opacity: 1; } | |
| } | |
| .mobile-chat-bar { | |
| background: rgba(255, 248, 238, 0.98); | |
| border-top: 1px solid rgba(138, 75, 34, 0.14); | |
| flex-shrink: 0; | |
| padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); | |
| position: fixed; | |
| left: 0; | |
| right: 0; | |
| bottom: calc(var(--keyboard-offset) + env(safe-area-inset-bottom)); | |
| z-index: 50; | |
| transition: bottom 0.18s ease; | |
| } | |
| .mobile-input-wrapper { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| background: rgba(255, 244, 227, 0.94); | |
| border-radius: 24px; | |
| padding: 4px 12px 4px 16px; | |
| border: 1px solid rgba(138, 75, 34, 0.14); | |
| } | |
| .mobile-input-wrapper textarea { | |
| flex: 1; | |
| background: transparent; | |
| border: none; | |
| outline: none; | |
| resize: none; | |
| font-size: 14px; | |
| color: #2b1d14; | |
| padding: 8px 0; | |
| min-height: auto; | |
| max-height: 80px; | |
| } | |
| .mobile-send-btn { | |
| background: var(--accent); | |
| color: white; | |
| border: none; | |
| min-width: 60px; | |
| height: 40px; | |
| border-radius: 999px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| font-size: 11px; | |
| font-weight: 700; | |
| cursor: pointer; | |
| padding: 0 14px; | |
| flex-shrink: 0; | |
| box-shadow: 0 8px 16px rgba(15, 118, 110, 0.18); | |
| } | |
| .mobile-send-btn:disabled { | |
| background: #d2c1ad; | |
| cursor: not-allowed; | |
| } | |
| /* Slide-up Drawer Modal */ | |
| .mobile-drawer-overlay { | |
| position: fixed; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| bottom: 0; | |
| background: rgba(43, 29, 20, 0.46); | |
| backdrop-filter: blur(4px); | |
| z-index: 1000; | |
| display: flex; | |
| align-items: flex-end; | |
| } | |
| .mobile-drawer { | |
| background: linear-gradient(180deg, rgba(255, 250, 242, 0.99), rgba(246, 232, 210, 0.99)); | |
| border-top-left-radius: 20px; | |
| border-top-right-radius: 20px; | |
| width: 100%; | |
| max-height: 85vh; | |
| overflow-y: auto; | |
| padding: 20px 16px 20px; | |
| box-shadow: 0 -8px 30px rgba(62, 37, 18, 0.18); | |
| animation: slide-up 0.3s ease-out; | |
| scroll-padding-bottom: 120px; | |
| } | |
| @keyframes slide-up { | |
| from { transform: translateY(100%); } | |
| to { transform: translateY(0); } | |
| } | |
| .mobile-drawer-header { | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| margin-bottom: 20px; | |
| border-bottom: 1px solid rgba(138, 75, 34, 0.10); | |
| padding-bottom: 12px; | |
| } | |
| .mobile-drawer-header h3 { | |
| margin: 0; | |
| font-size: 18px; | |
| font-weight: 700; | |
| color: #2b1d14; | |
| } | |
| .close-btn { | |
| background: rgba(255, 244, 227, 0.92); | |
| border: none; | |
| color: #6f4b33; | |
| width: 28px; | |
| height: 28px; | |
| border-radius: 50%; | |
| font-size: 14px; | |
| font-weight: 700; | |
| cursor: pointer; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| } | |
| .mobile-drawer-form { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 16px; | |
| } | |
| .mobile-drawer-form label { | |
| position: relative; | |
| } | |
| .field-error { | |
| color: #9d3b1c; | |
| font-size: 11px; | |
| font-weight: 700; | |
| line-height: 1.3; | |
| margin-top: 4px; | |
| } | |
| .drawer-note { | |
| color: #7b6554; | |
| font-size: 12px; | |
| line-height: 1.4; | |
| margin: -4px 0 0; | |
| } | |
| .mobile-drawer-row { | |
| display: grid; | |
| grid-template-columns: 1fr 1fr; | |
| gap: 12px; | |
| } | |
| .mobile-drawer-submit-btn { | |
| background: var(--accent); | |
| color: white; | |
| border: none; | |
| font-weight: 700; | |
| padding: 14px; | |
| border-radius: 12px; | |
| font-size: 15px; | |
| cursor: pointer; | |
| margin-top: 12px; | |
| position: sticky; | |
| bottom: 0; | |
| z-index: 2; | |
| box-shadow: 0 -8px 20px rgba(255, 248, 238, 0.95); | |
| } | |
| .mobile-drawer-submit-btn:disabled, | |
| .primary-cta:disabled { | |
| opacity: 0.6; | |
| cursor: not-allowed; | |
| } | |
| .chart-modal { | |
| max-height: 90vh; | |
| } | |
| .mobile-chart-modal-content { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 20px; | |
| } | |
| .mobile-facts-grid { | |
| display: flex; | |
| flex-direction: column; | |
| gap: 10px; | |
| width: 100%; | |
| } | |
| .mobile-fact-item { | |
| display: flex; | |
| justify-content: space-between; | |
| padding: 10px 0; | |
| border-bottom: 1px solid rgba(138, 75, 34, 0.10); | |
| font-size: 13px; | |
| } | |
| .mobile-fact-item b { | |
| color: #6f4b33; | |
| } | |
| .primary-cta { | |
| background: linear-gradient(135deg, var(--accent-3), var(--accent) 60%, var(--accent-2)); | |
| color: #fff; | |
| border: none; | |
| border-radius: 12px; | |
| padding: 14px 16px; | |
| font-weight: 800; | |
| box-shadow: 0 12px 24px rgba(15, 118, 110, 0.14); | |
| } | |
| .reading-copy { | |
| display: grid; | |
| gap: 12px; | |
| color: #4d3527; | |
| line-height: 1.7; | |
| font-size: 15px; | |
| } | |
| .status { | |
| display: grid; | |
| gap: 4px; | |
| } | |
| .status-subline { | |
| text-transform: uppercase; | |
| } | |
| .mobile-fact-item span { | |
| color: #2b1d14; | |
| font-weight: 600; | |
| } | |
| /* Markdown formatting styles */ | |
| .markdown-body { | |
| width: 100%; | |
| } | |
| .markdown-body p { | |
| margin: 0 0 10px 0; | |
| line-height: 1.6; | |
| } | |
| .markdown-body p:last-child { | |
| margin-bottom: 0; | |
| } | |
| .markdown-body ul { | |
| margin: 0 0 12px 20px; | |
| padding: 0; | |
| list-style-type: disc; | |
| } | |
| .markdown-body li { | |
| margin-bottom: 4px; | |
| line-height: 1.5; | |
| } | |
| .markdown-body h2, .markdown-body h3, .markdown-body h4 { | |
| margin: 16px 0 8px 0; | |
| color: var(--accent-3); | |
| font-weight: 700; | |
| line-height: 1.3; | |
| } | |
| .markdown-body h2 { font-size: 1.3em; } | |
| .markdown-body h3 { font-size: 1.15em; } | |
| .markdown-body h4 { font-size: 1.05em; } | |
| .markdown-body strong { | |
| font-weight: 700; | |
| color: var(--accent); | |
| } | |
| /* Chat bubble loading and streaming indicators */ | |
| .status-indicator { | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: var(--muted); | |
| margin-top: 4px; | |
| } | |
| .status-indicator.calculating { | |
| padding: 4px 0; | |
| } | |
| .status-indicator.streaming { | |
| padding-top: 6px; | |
| border-top: 1px dashed rgba(138, 75, 34, 0.15); | |
| margin-top: 8px; | |
| } | |
| .spinner-dot { | |
| width: 12px; | |
| height: 12px; | |
| border: 2px solid var(--line); | |
| border-top-color: var(--accent); | |
| border-radius: 50%; | |
| animation: spin 0.8s linear infinite; | |
| display: inline-block; | |
| } | |
| .pulse-dot { | |
| width: 8px; | |
| height: 8px; | |
| background-color: var(--accent-2); | |
| border-radius: 50%; | |
| animation: pulse-animation 1.2s infinite ease-in-out; | |
| display: inline-block; | |
| } | |
| @keyframes pulse-animation { | |
| 0%, 100% { | |
| transform: scale(0.75); | |
| opacity: 0.5; | |
| } | |
| 50% { | |
| transform: scale(1.15); | |
| opacity: 1; | |
| } | |
| } | |
| /* Time Picker Styling */ | |
| .time-picker-field { | |
| display: grid; | |
| gap: 6px; | |
| flex: 1; | |
| } | |
| .time-picker-field > span:first-child { | |
| display: block; | |
| font-size: 12px; | |
| font-weight: 700; | |
| color: #4d3527; | |
| } | |
| .time-select-row { | |
| display: flex; | |
| align-items: center; | |
| gap: 6px; | |
| width: 100%; | |
| } | |
| .time-select { | |
| padding: 10px 8px ; | |
| font-size: 14px ; | |
| text-align-last: center; | |
| cursor: pointer; | |
| background: var(--field) ; | |
| border: 1px solid rgba(138, 75, 34, 0.22) ; | |
| border-radius: 8px ; | |
| color: var(--ink) ; | |
| flex: 1; | |
| min-width: 0; | |
| height: 42px ; | |
| } | |
| .time-select.period-select { | |
| flex: 1.2; | |
| } | |
| .time-separator { | |
| font-weight: bold; | |
| color: var(--muted); | |
| font-size: 16px; | |
| padding: 0 2px; | |
| } | |