/* Pocket Confidant — Off-Brand theme. A calm, warm, journal-like aesthetic. Soft paper background, a serif voice for the companion, generous whitespace, one gentle accent. Deliberately NOT the default Gradio look. */ :root { --pc-paper: #f3eadc; /* warm paper */ --pc-paper-deep: #e8d7bc; /* slightly deeper paper for cards */ --pc-ink: #221910; /* stronger dark ink */ --pc-ink-soft: #4b3d2e; /* readable secondary text */ --pc-accent: #b07a4f; /* gentle terracotta */ --pc-accent-2: #7d8f71; /* sage, for the "private" assurance */ --pc-line: #ccb895; /* hairline */ --pc-shadow: rgba(58, 52, 43, 0.12); } /* ---- Page canvas -------------------------------------------------------- */ .gradio-container, body, .gradio-container .main { background: var(--pc-paper) !important; color: var(--pc-ink) !important; font-family: "Iowan Old Style", "Palatino Linotype", "Hoefler Text", Georgia, serif; } .gradio-container { max-width: 820px !important; margin: 0 auto !important; } /* Force the custom HTML blocks to stay legible even when Gradio injects theme wrappers or markdown defaults with their own color rules. */ #pc-masthead *, #pc-privacy *, .pc-landing-row *, .pc-explainer *, .pc-samples *, .pc-hero *, .pc-pulse *, .pc-utility-strip *, .pc-card *, .pc-week *, .pc-entry-block *, .pc-empty, .pc-submitted-entry *, .chat-history *, .chat-bubble, .chat-label, .chat-thinking, #pc-version-footer, .pc-footer, .pc-footer a { opacity: 1 !important; } /* Subtle paper grain via layered gradients (no external asset). */ body { background-image: radial-gradient(circle at 18% 12%, rgba(176,122,79,0.07), transparent 38%), radial-gradient(circle at 82% 18%, rgba(125,143,113,0.06), transparent 34%), radial-gradient(circle at 85% 80%, rgba(138,154,123,0.06), transparent 45%); background-attachment: fixed; } /* ---- Masthead ----------------------------------------------------------- */ #pc-masthead { text-align: center; padding: 28px 0 6px; } #pc-masthead .pc-title { font-size: 2.1rem; letter-spacing: 0.01em; margin: 0; color: var(--pc-ink); font-weight: 600; } #pc-masthead .pc-sub { font-size: 1.02rem; color: var(--pc-ink-soft); font-style: italic; margin-top: 4px; } /* The privacy assurance — present, tasteful, not spammy. */ #pc-privacy { text-align: center; margin: 10px auto 22px; font-size: 0.86rem; letter-spacing: 0.02em; color: var(--pc-accent-2); font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; } #pc-privacy .pc-dot { opacity: 0.55; padding: 0 8px; } /* ---- Landing hero ------------------------------------------------------- */ .pc-landing-row { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(280px, 0.9fr); gap: 20px; align-items: stretch; margin: 8px 0 22px; } .pc-hero, .pc-pulse { background: linear-gradient(180deg, #fcf6ec 0%, #ead9be 100%); border: 1px solid rgba(90, 71, 49, 0.16); border-radius: 24px; box-shadow: 0 18px 36px rgba(58, 52, 43, 0.14), inset 0 1px 0 rgba(255,255,255,0.5); color: var(--pc-ink); } .pc-hero { padding: 24px 24px 20px; } .pc-hero-kicker { font-family: ui-sans-serif, system-ui, sans-serif; text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.7rem; color: var(--pc-accent-2); margin-bottom: 10px; } .pc-hero h1 { font-size: 2.28rem; line-height: 0.98; margin: 0 0 10px; color: var(--pc-ink); } .pc-hero-line { display: inline-flex; margin: 0 0 14px; padding: 8px 12px; border-radius: 999px; background: rgba(125, 143, 113, 0.12); color: #4d5a43; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.84rem; letter-spacing: 0.02em; } .pc-hero-copy { margin: 0 0 16px; font-size: 1.04rem; line-height: 1.65; color: #2b2219; max-width: 56ch; } .pc-pill-row { display: flex; flex-wrap: wrap; gap: 10px; } .pc-pill { flex: 1 1 160px; min-width: 150px; padding: 12px 14px; border-radius: 16px; background: linear-gradient(180deg, rgba(255,253,248,0.92), rgba(245,234,214,0.98)); border: 1px solid rgba(143, 118, 87, 0.36); box-shadow: inset 0 1px 0 rgba(255,255,255,0.65); } .pc-pill-label { display: block; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.71rem; letter-spacing: 0.09em; text-transform: uppercase; color: #66745e; margin-bottom: 5px; } .pc-pill-value { display: block; color: #241d16; line-height: 1.35; font-size: 0.99rem; font-weight: 700; } .pc-pill--warm { border-left: 3px solid var(--pc-accent); } .pc-pill--accent { border-left: 3px solid #9a6440; } .pc-pill--sage { border-left: 3px solid var(--pc-accent-2); } .pc-pulse { padding: 22px 20px 18px; display: grid; gap: 14px; align-items: center; grid-template-columns: 122px minmax(0, 1fr); position: relative; } .pc-pulse::after { content: ""; position: absolute; inset: 0; border-radius: 24px; background: radial-gradient(circle at 80% 18%, rgba(255,255,255,0.28), transparent 30%); pointer-events: none; } .pc-orb-shell { position: relative; width: 112px; height: 112px; margin: 0 auto; } .pc-orb { position: absolute; inset: 16px; border-radius: 50%; background: radial-gradient(circle at 35% 30%, #fffaf1 0%, #f2d6b6 42%, #c98e63 100%); box-shadow: inset 0 0 0 1px rgba(255,255,255,0.34), 0 0 24px rgba(176,122,79,0.14); animation: pc-orb-breathe 4.8s ease-in-out infinite; } .pc-orb-ring { position: absolute; inset: 5px; border-radius: 50%; border: 1px solid rgba(138, 154, 123, 0.35); animation: pc-orb-ring 7s linear infinite; } .pc-orb-leaf { position: absolute; width: 26px; height: 12px; background: rgba(138, 154, 123, 0.7); border-radius: 999px 999px 999px 999px; top: 52px; box-shadow: 0 0 8px rgba(138,154,123,0.25); transform-origin: center center; --leaf-rotate: 0deg; animation: pc-leaf-sway 5.5s ease-in-out infinite; } .pc-orb-leaf--left { left: 0; --leaf-rotate: -28deg; } .pc-orb-leaf--right { right: 0; --leaf-rotate: 28deg; } .pc-pulse-copy { min-width: 0; } .pc-pulse-label { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--pc-accent-2); margin-bottom: 8px; } .pc-pulse-status { color: #241d16; font-size: 1.06rem; line-height: 1.52; margin-bottom: 8px; } .pc-pulse-badge { display: inline-block; padding: 4px 10px; border-radius: 999px; background: rgba(138,154,123,0.12); color: var(--pc-accent-2); font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.7rem; letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 10px; } .pc-pulse-stats { color: #4b4033; font-size: 0.92rem; line-height: 1.45; } .pc-pulse--awake .pc-orb { animation-duration: 2.8s; box-shadow: inset 0 0 0 1px rgba(255,255,255,0.4), 0 0 28px rgba(176,122,79,0.24); } .pc-pulse--awake .pc-pulse-badge { background: rgba(176,122,79,0.12); color: var(--pc-accent); } .pc-pulse--growing .pc-orb { background: radial-gradient(circle at 35% 30%, #fffaf1 0%, #d8e0c8 42%, #8a9a7b 100%); } .pc-pulse--quiet .pc-orb { background: radial-gradient(circle at 35% 30%, #fffaf1 0%, #efdfc7 42%, #cab79b 100%); } .pc-pulse--listening .pc-orb { background: radial-gradient(circle at 35% 30%, #fffaf1 0%, #f0d8b8 42%, #c98e63 100%); } @keyframes pc-orb-breathe { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.03); } } @keyframes pc-orb-ring { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } @keyframes pc-leaf-sway { 0%, 100% { transform: translateY(0) rotate(var(--leaf-rotate, 0deg)); } 50% { transform: translateY(-2px) rotate(calc(var(--leaf-rotate, 0deg) + 4deg)); } } /* ---- Utility strip / footer --------------------------------------------- */ .pc-utility-strip { display: flex; flex-wrap: wrap; gap: 8px; margin: 2px 0 14px; } .pc-utility-strip span { display: inline-flex; align-items: center; padding: 6px 10px; border-radius: 999px; background: linear-gradient(180deg, rgba(255,253,248,0.96), rgba(247,239,226,0.99)); border: 1px solid rgba(207, 191, 159, 0.96); color: #372d24; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.74rem; letter-spacing: 0.04em; } .pc-explainer { margin: 0 0 22px; padding: 20px 20px 18px; border-radius: 22px; border: 1px solid rgba(47, 37, 29, 0.22); background: radial-gradient(circle at top right, rgba(176,122,79,0.14), transparent 32%), linear-gradient(180deg, rgba(26, 21, 17, 0.84), rgba(36, 28, 22, 0.94)); box-shadow: 0 16px 30px rgba(0, 0, 0, 0.20); } .pc-explainer-kicker { font-family: ui-sans-serif, system-ui, sans-serif; text-transform: uppercase; letter-spacing: 0.14em; font-size: 0.7rem; color: #c9c0ae; margin-bottom: 12px; } .pc-explainer-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; } .pc-step { display: flex; gap: 12px; align-items: flex-start; padding: 12px 12px 11px; border-radius: 14px; background: rgba(255, 251, 242, 0.07); border: 1px solid rgba(224, 212, 189, 0.16); } .pc-step-num { width: 30px; height: 30px; border-radius: 999px; display: grid; place-items: center; background: rgba(176, 122, 79, 0.2); color: #f4eadf; font-family: ui-sans-serif, system-ui, sans-serif; font-weight: 700; flex: 0 0 auto; } .pc-step-title { color: #fff5ea; font-size: 0.98rem; font-weight: 700; line-height: 1.2; } .pc-step-copy { margin-top: 4px; color: #d3c6b2; font-size: 0.92rem; line-height: 1.45; } .pc-explainer-foot { margin-top: 12px; color: #c6bba8; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.84rem; } .pc-samples { margin: 0 0 22px; padding: 16px 18px 14px; border-radius: 22px; border: 1px solid rgba(47, 37, 29, 0.22); background: radial-gradient(circle at top left, rgba(176,122,79,0.08), transparent 28%), linear-gradient(180deg, rgba(28, 22, 18, 0.93), rgba(41, 31, 24, 0.98)); box-shadow: 0 16px 30px rgba(0, 0, 0, 0.20); } .pc-samples-kicker { font-family: ui-sans-serif, system-ui, sans-serif; text-transform: uppercase; letter-spacing: 0.14em; font-size: 0.7rem; color: #c9c0ae; margin-bottom: 10px; } .pc-samples-row { display: flex; flex-wrap: wrap; gap: 10px; } .pc-sample { display: inline-flex; align-items: center; padding: 10px 12px; border-radius: 999px; background: rgba(255, 251, 244, 0.08); border: 1px solid rgba(224, 212, 189, 0.2); color: #f1e9dd; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.86rem; letter-spacing: 0.01em; } .pc-footer { text-align: center; padding: 20px 0 12px; margin-top: 18px; border-top: 1px solid var(--pc-line); } .pc-footer a { color: var(--pc-ink-soft); text-decoration: none; font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.9rem; } .pc-footer a:hover { color: var(--pc-accent); } /* ---- Responsive --------------------------------------------------------- */ @media (max-width: 800px) { .pc-landing-row, .pc-pulse { grid-template-columns: 1fr; } .pc-explainer-grid { grid-template-columns: 1fr; } .pc-samples-row { flex-direction: column; } .pc-hero h1 { font-size: 1.9rem; } .pc-pill { min-width: 0; } } /* ---- Writing area ------------------------------------------------------- */ #pc-entry textarea { background: #fffdf8 !important; border: 1px solid var(--pc-line) !important; border-radius: 10px !important; color: var(--pc-ink) !important; font-family: "Iowan Old Style", Georgia, serif !important; font-size: 1.06rem !important; line-height: 1.6 !important; padding: 16px 18px !important; box-shadow: inset 0 1px 2px var(--pc-shadow) !important; } #pc-entry textarea::placeholder { color: #705d47 !important; font-style: italic; } #pc-entry label span, #pc-entry .gr-text-label { color: var(--pc-ink-soft) !important; } /* ---- Buttons ------------------------------------------------------------ */ button.pc-primary, #pc-submit button, .pc-primary button { background: var(--pc-accent) !important; border: none !important; color: #fdf8f0 !important; border-radius: 999px !important; font-family: ui-sans-serif, system-ui, sans-serif !important; font-weight: 600 !important; letter-spacing: 0.02em !important; padding: 10px 22px !important; box-shadow: 0 2px 6px var(--pc-shadow) !important; transition: transform 0.08s ease, filter 0.15s ease !important; } button.pc-primary:hover, #pc-submit button:hover, .pc-primary button:hover { filter: brightness(1.05) !important; transform: translateY(-1px) !important; } .pc-quiet button { background: transparent !important; border: 1px solid var(--pc-line) !important; color: var(--pc-ink-soft) !important; border-radius: 999px !important; font-family: ui-sans-serif, system-ui, sans-serif !important; } /* Model selector — keep it unobtrusive. */ #pc-model { max-width: 230px; } #pc-model label span { color: var(--pc-ink-soft) !important; font-size: 0.82rem; } /* ---- The companion's card ---------------------------------------------- */ .pc-card { background: linear-gradient(180deg, rgba(255,255,255,0.20), rgba(255,255,255,0.02)), linear-gradient(180deg, #f7ecd8 0%, var(--pc-paper-deep) 100%); border: 1px solid var(--pc-line); border-left: 4px solid var(--pc-accent); border-radius: 18px; padding: 22px 24px; margin: 8px 0 4px; box-shadow: 0 10px 24px var(--pc-shadow); } .pc-card .pc-callback { font-size: 0.92rem; color: #403326; font-style: italic; margin-bottom: 12px; padding-left: 12px; border-left: 2px solid var(--pc-line); } .pc-card .pc-callback::before { content: "↩ remembering — "; color: var(--pc-accent-2); font-style: normal; font-size: 0.8rem; } .pc-card .pc-reflection { font-size: 1.12rem; line-height: 1.65; color: #211911; margin-bottom: 14px; } .pc-card .pc-question { font-size: 1.06rem; color: #9a6240; font-style: italic; } .pc-card .pc-meta { margin-top: 14px; font-size: 0.72rem; letter-spacing: 0.03em; color: #6b5e4d; font-family: ui-sans-serif, system-ui, sans-serif; } /* ---- "This week" patterns panel ---------------------------------------- */ .pc-week { background: #fbf7ee; border: 1px dashed var(--pc-accent-2); border-radius: 12px; padding: 16px 20px; margin: 6px 0; color: #211911; font-size: 1.0rem; line-height: 1.6; } .pc-week .pc-week-head { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.74rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--pc-accent-2); margin-bottom: 8px; } /* ---- Timeline ----------------------------------------------------------- */ .pc-timeline-head { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.88rem; letter-spacing: 0.14em; text-transform: uppercase; color: #241d16; } .pc-recent-shell { margin: 0 0 14px; padding: 14px 16px 12px; border-radius: 18px; border: 1px solid rgba(90, 71, 49, 0.14); background: linear-gradient(180deg, rgba(255,253,248,0.96), rgba(244,236,223,0.98)); box-shadow: 0 10px 24px rgba(58, 52, 43, 0.08); } .pc-recent-entry { padding: 12px 0 14px; border-bottom: 1px solid rgba(90, 71, 49, 0.10); } .pc-recent-entry:last-child { border-bottom: none; padding-bottom: 4px; } .pc-timeline-shell { margin: 24px 0 4px; padding: 14px 16px 10px; border-radius: 20px; border: 1px solid rgba(90, 71, 49, 0.16); background: radial-gradient(circle at top right, rgba(176,122,79,0.08), transparent 28%), linear-gradient(180deg, rgba(255,253,248,0.92), rgba(242,233,217,0.98)); box-shadow: 0 12px 28px rgba(58, 52, 43, 0.08); } .pc-timeline-top { padding-bottom: 10px; margin-bottom: 6px; border-bottom: 1px solid rgba(90, 71, 49, 0.12); } .pc-timeline-sub { margin-top: 6px; color: var(--pc-ink-soft); font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.8rem; line-height: 1.45; } .pc-entry-block { padding: 16px 10px 18px; border-bottom: 1px solid rgba(90, 71, 49, 0.12); } .pc-entry-block .pc-date { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.72rem; letter-spacing: 0.05em; color: #9a6240; text-transform: uppercase; margin-bottom: 6px; } .pc-entry-block .pc-text { font-size: 1.06rem; line-height: 1.6; color: #1f1812; white-space: pre-wrap; } .pc-entry-block .pc-echo { margin-top: 10px; padding: 10px 14px; background: rgba(255, 251, 244, 0.74); border: 1px solid rgba(174, 146, 113, 0.18); border-radius: 12px; font-size: 0.95rem; color: #4b3e31; font-style: italic; } .pc-entry-block .pc-echo .pc-q { color: var(--pc-accent); } /* ---- Empty / onboarding state ------------------------------------------ */ .pc-empty { text-align: center; padding: 30px 24px; color: #3f3328; font-style: italic; font-size: 1.05rem; line-height: 1.7; } /* ---- Theme toggle button ----------------------------------------------- */ #pc-theme-toggle, #pc-theme-toggle button { position: fixed; top: 12px; right: 16px; z-index: 1000; background: var(--pc-paper-deep) !important; border: 1px solid var(--pc-line) !important; color: var(--pc-ink-soft) !important; border-radius: 999px !important; width: 36px !important; height: 36px !important; min-width: 36px !important; min-height: 36px !important; padding: 0 !important; font-size: 1.1rem !important; cursor: pointer !important; box-shadow: 0 2px 6px var(--pc-shadow) !important; transition: background 0.2s, color 0.2s !important; display: flex !important; align-items: center; justify-content: center; } #pc-theme-toggle:hover, #pc-theme-toggle button:hover { background: var(--pc-accent) !important; color: #fdf8f0 !important; } /* Hide Gradio footer branding to keep the off-brand feel. */ footer { display: none !important; } /* ========================================================================== DARK MODE Gradio applies .dark to or .gradio-container when the user picks dark theme. We also respect prefers-color-scheme for OS-level dark mode. ========================================================================== */ /* Dark mode — triggered by Gradio's .dark class OR OS preference */ html.dark, html.dark body, html.dark .gradio-container, html.dark .gradio-container .main, body.dark, body[data-pc-theme="dark"], .gradio-container.dark, .gradio-container[data-pc-theme="dark"] { /* Paper → deep charcoal with warm undertone */ --pc-paper: #1a1814; --pc-paper-deep: #242019; --pc-ink: #e8e0d4; --pc-ink-soft: #a89e8e; --pc-accent: #d4956a; --pc-accent-2: #8aab78; --pc-line: #3a342b; --pc-shadow: rgba(0, 0, 0, 0.35); background: var(--pc-paper) !important; color: var(--pc-ink) !important; } /* Dark paper grain */ .dark body, .dark .gradio-container, body.dark .gradio-container { background-image: radial-gradient(circle at 20% 15%, rgba(212,149,106,0.04), transparent 40%), radial-gradient(circle at 85% 80%, rgba(138,171,120,0.03), transparent 45%) !important; background-attachment: fixed !important; } /* Dark textarea */ .dark #pc-entry textarea, .dark #pc-entry textarea { background: #1e1b16 !important; border-color: var(--pc-line) !important; color: var(--pc-ink) !important; } /* Dark cards */ .dark .pc-card { background: var(--pc-paper-deep) !important; border-color: var(--pc-line) !important; box-shadow: 0 3px 10px var(--pc-shadow) !important; } /* Dark callback */ .dark .pc-card .pc-callback { color: var(--pc-ink-soft) !important; border-left-color: var(--pc-line) !important; } .dark .pc-card .pc-callback::before { color: var(--pc-accent-2) !important; } /* Dark reflection */ .dark .pc-card .pc-reflection { color: var(--pc-ink) !important; } /* Dark week panel */ .dark .pc-week { background: #1e1b16 !important; border-color: var(--pc-accent-2) !important; color: var(--pc-ink) !important; } /* Dark timeline */ .dark .pc-timeline-shell { background: radial-gradient(circle at top right, rgba(212,149,106,0.06), transparent 28%), linear-gradient(180deg, rgba(26, 21, 17, 0.96), rgba(32, 27, 21, 0.99)) !important; border-color: var(--pc-line) !important; box-shadow: 0 12px 28px rgba(0, 0, 0, 0.24) !important; } .dark .pc-recent-shell { background: radial-gradient(circle at top right, rgba(212,149,106,0.05), transparent 28%), linear-gradient(180deg, rgba(26, 21, 17, 0.96), rgba(32, 27, 21, 0.99)) !important; border-color: var(--pc-line) !important; box-shadow: 0 12px 28px rgba(0, 0, 0, 0.24) !important; } .dark .pc-recent-entry { border-bottom-color: rgba(232, 224, 212, 0.08) !important; } .dark .pc-timeline-top { border-bottom-color: rgba(232, 224, 212, 0.08) !important; } .dark .pc-timeline-head { color: #f3eadc !important; } .dark .pc-timeline-sub { color: var(--pc-ink-soft) !important; } .dark .pc-entry-block { border-bottom-color: rgba(232, 224, 212, 0.08) !important; } .dark .pc-entry-block .pc-date { color: #d4956a !important; } .dark .pc-entry-block .pc-text { color: var(--pc-ink) !important; } .dark .pc-entry-block .pc-echo { background: rgba(255, 255, 255, 0.03) !important; border-color: rgba(255, 255, 255, 0.05) !important; color: var(--pc-ink-soft) !important; } /* Dark utility strip pills */ .dark .pc-utility-strip span { background: rgba(255, 255, 255, 0.06) !important; border-color: rgba(232, 224, 212, 0.14) !important; color: var(--pc-ink) !important; } /* Dark empty state */ .dark .pc-empty { color: var(--pc-ink-soft) !important; } /* Dark model selector */ .dark #pc-model { color: var(--pc-ink) !important; } /* Dark button styles */ .dark button.pc-primary, .dark #pc-submit button, .dark .pc-primary button { background: var(--pc-accent) !important; color: #1a1814 !important; } .dark .pc-quiet button { border-color: var(--pc-line) !important; color: var(--pc-ink-soft) !important; } /* Dark theme toggle */ .dark #pc-theme-toggle, .dark #pc-theme-toggle button { background: var(--pc-paper-deep) !important; border-color: var(--pc-line) !important; color: var(--pc-ink-soft) !important; } /* OS-level dark mode fallback (when Gradio hasn't set .dark) */ @media (prefers-color-scheme: dark) { :root:not(.dark):not([data-pc-theme="dark"]) { --pc-paper: #1a1814; --pc-paper-deep: #242019; --pc-ink: #e8e0d4; --pc-ink-soft: #a89e8e; --pc-accent: #d4956a; --pc-accent-2: #8aab78; --pc-line: #3a342b; --pc-shadow: rgba(0, 0, 0, 0.35); } } /* ---- Chat Tab ----------------------------------------------------------- */ .chat-history { max-height: 480px; overflow-y: auto; padding: 8px 4px; scroll-behavior: smooth; } .chat-msg { display: flex; margin-bottom: 16px; animation: chat-fade-in 0.2s ease; } @keyframes chat-fade-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } } .chat-msg.chat-user { justify-content: flex-end; } .chat-msg.chat-companion { justify-content: flex-start; } .chat-bubble { max-width: 80%; padding: 12px 18px; border-radius: 18px; line-height: 1.55; font-size: 1.0rem; word-wrap: break-word; white-space: pre-wrap; } .chat-user .chat-bubble { background: var(--pc-accent); color: #fdf8f0; border-bottom-right-radius: 4px; } .chat-companion .chat-bubble { background: var(--pc-paper-deep); border: 1px solid var(--pc-line); color: var(--pc-ink); border-bottom-left-radius: 4px; } .chat-label { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.68rem; letter-spacing: 0.06em; text-transform: uppercase; color: #56483a; margin: 0 6px 3px; } .chat-user .chat-label { text-align: right; } .chat-thinking { text-align: center; color: #4a3e31; font-style: italic; padding: 16px 0; animation: chat-pulse 1.2s ease-in-out infinite; } @keyframes chat-pulse { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } } /* Dark mode overrides for chat */ .dark .chat-user .chat-bubble { background: var(--pc-accent); color: #1a1814; } .dark .chat-companion .chat-bubble { background: var(--pc-paper-deep); border-color: var(--pc-line); color: var(--pc-ink); } /* ---- Submitted Entry Display ------------------------------------------- */ .pc-submitted-entry { background: linear-gradient(180deg, #f5ead6 0%, var(--pc-paper-deep) 100%); border: 1px solid var(--pc-line); border-left: 3px solid var(--pc-accent); border-radius: 8px; padding: 16px 20px; margin: 12px 0; } .pc-submitted-label { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.72rem; letter-spacing: 0.08em; text-transform: uppercase; color: #8f5e3f; margin-bottom: 8px; } .pc-submitted-text { font-size: 1.05rem; line-height: 1.65; color: #211911; white-space: pre-wrap; } .pc-submitted-date { font-family: ui-sans-serif, system-ui, sans-serif; font-size: 0.72rem; color: #5e4d3e; margin-top: 8px; }