:root{--bg: #F4EDDD;--surface: #FAF6EC;--ink: #1A1614;--muted: #6E665A;--hairline: #D9CFB8;--gold: #B08D3B;--crimson: #8A2F2A;--font-serif: "Fraunces", "Iowan Old Style", Georgia, "Times New Roman", serif;--font-sans: "General Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "SF Mono", monospace;--sp-2xs: 2px;--sp-xs: 4px;--sp-sm: 8px;--sp-md: 12px;--sp-lg: 20px;--sp-xl: 32px;--sp-2xl: 48px;--sp-3xl: 64px;--radius-sm: 4px;--radius-box: 2px;--ease-enter: cubic-bezier(.16, 1, .3, 1);--ease-exit: cubic-bezier(.4, 0, 1, 1);--dur-micro: 80ms;--dur-short: .2s;--dur-medium: .32s;--dur-long: .6s}[data-theme=dark]{--bg: #161413;--surface: #211D1B;--ink: #EDE3D0;--muted: #7C7264;--hairline: #2E2926;--gold: #D4AF6A;--crimson: #B85553}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:var(--font-sans);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-image:radial-gradient(transparent 0,rgba(0,0,0,.012) 1px,transparent 1.2px),radial-gradient(transparent 0,rgba(0,0,0,.018) 1px,transparent 1.2px);background-size:3px 3px,5px 5px;background-attachment:fixed}input,textarea,button{font:inherit;color:inherit}button{background:none;border:none;cursor:pointer}.app{max-width:640px;margin:0 auto;min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;padding:0 16px}.app__header{height:56px;display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--hairline)}.wordmark{font-family:var(--font-serif);font-weight:400;font-size:22px;letter-spacing:.04em;color:var(--gold)}.app__main{flex:1;display:flex;flex-direction:column;overflow:hidden;position:relative}.chat{flex:1;overflow-y:auto;padding:20px 4px 16px;scroll-behavior:smooth}.chat__empty{display:flex;align-items:center;justify-content:center;height:100%;font-family:var(--font-serif);font-style:italic;color:var(--muted);font-size:18px}.day-divider{display:flex;align-items:center;gap:16px;margin:32px 0 24px;color:var(--gold);font-family:var(--font-serif);font-size:22px}.day-divider:before,.day-divider:after{content:"";flex:1;height:1px;background:var(--hairline)}.msg{display:flex;gap:8px;margin:12px 0;align-items:flex-start;animation:msgEnter var(--dur-medium) var(--ease-enter) both}@keyframes msgEnter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.msg--character{flex-direction:row}.msg--friend{flex-direction:row-reverse}.msg__avatar{flex:0 0 32px;width:32px;height:32px;border-radius:50%;background:var(--surface);overflow:hidden;display:flex;align-items:center;justify-content:center;font-family:var(--font-serif);font-style:italic;font-size:13px;color:var(--muted)}.msg__avatar img{width:100%;height:100%;object-fit:cover}.msg--character .msg__avatar--primary{border:1px solid var(--gold)}.msg__column{flex:1 1 auto;max-width:88%;display:flex;flex-direction:column;gap:4px}.msg--friend .msg__column{align-items:flex-end}.msg__name{font-family:var(--font-serif);font-style:italic;font-weight:400;font-size:14px;letter-spacing:.02em;color:var(--ink);margin-bottom:2px}.msg--friend .msg__name{font-family:var(--font-sans);font-style:normal;font-weight:600;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--gold)}.msg__bubble{background:var(--surface);border:1px solid var(--hairline);border-left:3px solid var(--char-tint, var(--hairline));border-radius:var(--radius-box);padding:12px 16px;font-size:16px;line-height:1.55;color:var(--ink);word-wrap:break-word;transition:border-left-color var(--dur-long) ease-in-out}.msg--friend .msg__bubble{border-left:1px solid var(--hairline)}.msg__narration{font-style:italic;font-size:15px;color:var(--muted)}.msg__timestamp{font-family:var(--font-mono);font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums;margin-top:2px}.typing{display:inline-flex;gap:4px;padding:6px 4px}.typing__dot{width:5px;height:5px;border-radius:50%;background:var(--muted);opacity:.4;animation:typingPulse 1.2s ease-in-out infinite}.typing__dot:nth-child(2){animation-delay:.12s}.typing__dot:nth-child(3){animation-delay:.24s}@keyframes typingPulse{0%,to{opacity:.4}50%{opacity:.8}}@media (prefers-reduced-motion: reduce){.typing__dot:nth-child(2),.typing__dot:nth-child(3){display:none}.typing__dot{animation:none;opacity:.6}.msg{animation:none}}.composer{border-top:1px solid var(--hairline);padding:12px 0;display:flex;align-items:flex-end;gap:8px;background:var(--bg)}.composer__field{flex:1;background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius-box);padding:10px 14px;font-family:var(--font-sans);font-size:16px;color:var(--ink);resize:none;max-height:120px;outline:none;transition:border-color var(--dur-short)}.composer__field:focus{border-color:var(--gold)}.composer__send{flex:0 0 auto;padding:10px 14px;font-family:var(--font-serif);font-style:italic;font-size:16px;color:var(--gold);transition:opacity var(--dur-micro)}.composer__send:disabled{opacity:.4;cursor:not-allowed}.auth{max-width:360px;margin:12vh auto 0;padding:0 24px;text-align:center}.auth__brand{font-family:var(--font-serif);font-weight:400;font-size:48px;letter-spacing:.04em;color:var(--gold);margin:0 0 8px}.auth__tagline{font-family:var(--font-serif);font-style:italic;color:var(--muted);font-size:17px;margin:0 0 32px}.auth__field{width:100%;display:block;margin:12px 0;padding:12px 14px;background:var(--surface);border:1px solid var(--hairline);border-radius:var(--radius-box);font-family:var(--font-sans);font-size:16px;color:var(--ink);outline:none}.auth__field:focus{border-color:var(--gold)}.auth__button{width:100%;margin-top:12px;padding:12px;background:var(--ink);color:var(--bg);border-radius:var(--radius-box);font-family:var(--font-sans);font-size:15px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;transition:opacity var(--dur-micro)}.auth__button:disabled{opacity:.5}.auth__button--ghost{background:transparent;color:var(--muted);text-transform:none;letter-spacing:0;font-style:italic;font-family:var(--font-serif)}.auth__status{font-family:var(--font-serif);font-style:italic;color:var(--muted);margin-top:16px;font-size:15px}.auth__error{font-family:var(--font-sans);color:var(--crimson);margin-top:12px;font-size:14px}
