@import "tailwindcss"; @import "katex/dist/katex.min.css"; @import "highlight.js/styles/github-dark-dimmed.css"; /* ------------------------------------------------------------------ tokens */ :root { --bg: #0a0c10; --bg-elev: #0f1217; --surface: #141821; --surface-2: #1a1f2a; --border: #222838; --border-strong: #2e3650; --text: #e7e9ef; --text-2: #aab1c3; --muted: #6f778c; --accent: #6d9cff; --accent-2: #f0b35b; --accent-ink: #0a0c10; --danger: #ff6b6b; --ok: #4fd1a5; --warn: #f6c35c; --user-bubble: #1b2233; --ring: rgba(109, 156, 255, 0.45); --shadow: 0 1px 2px rgba(0,0,0,.4), 0 8px 24px -12px rgba(0,0,0,.6); --radius: 12px; --sidebar-w: 288px; --reading-w: 46rem; color-scheme: dark; } [data-theme="light"] { --bg: #f7f8fb; --bg-elev: #ffffff; --surface: #ffffff; --surface-2: #f0f2f7; --border: #e3e6ee; --border-strong: #cfd4e2; --text: #12151c; --text-2: #3f4659; --muted: #7a8296; --accent: #2f6df6; --accent-2: #c7811c; --accent-ink: #ffffff; --danger: #d6453d; --ok: #1f9d75; --warn: #b7791f; --user-bubble: #e9effd; --ring: rgba(47, 109, 246, 0.35); --shadow: 0 1px 2px rgba(16,24,40,.06), 0 8px 24px -12px rgba(16,24,40,.18); color-scheme: light; } @theme inline { --color-bg: var(--bg); --color-bg-elev: var(--bg-elev); --color-surface: var(--surface); --color-surface-2: var(--surface-2); --color-border: var(--border); --color-border-strong: var(--border-strong); --color-fg: var(--text); --color-fg-2: var(--text-2); --color-muted: var(--muted); --color-accent: var(--accent); --color-accent-2: var(--accent-2); --color-accent-ink: var(--accent-ink); --color-danger: var(--danger); --color-ok: var(--ok); --color-warn: var(--warn); --color-user: var(--user-bubble); --font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif; --font-mono: var(--font-geist-mono), ui-monospace, SFMono-Regular, Menlo, monospace; --radius-xl: var(--radius); --shadow-soft: var(--shadow); } /* ------------------------------------------------------------------ base */ html, body { height: 100%; } body { background: var(--bg); color: var(--text); font-family: var(--font-sans); font-feature-settings: "cv11", "ss01", "liga"; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overscroll-behavior-y: none; } * { scrollbar-width: thin; scrollbar-color: var(--border-strong) transparent; } *::-webkit-scrollbar { width: 8px; height: 8px; } *::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 8px; } :focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; border-radius: 6px; } ::selection { background: color-mix(in oklab, var(--accent) 35%, transparent); } button, [role="button"] { cursor: pointer; } button:disabled { cursor: not-allowed; } .safe-b { padding-bottom: env(safe-area-inset-bottom); } .safe-t { padding-top: env(safe-area-inset-top); } /* ------------------------------------------------------------------ prose (assistant markdown) */ [data-fontsize="sm"] .prose-ai { font-size: 14px; } [data-fontsize="lg"] .prose-ai { font-size: 17px; } .prose-ai { font-size: 15.5px; line-height: 1.7; color: var(--text); overflow-wrap: anywhere; } .prose-ai > * + * { margin-top: 0.85em; } .prose-ai h1, .prose-ai h2, .prose-ai h3, .prose-ai h4 { font-weight: 600; letter-spacing: -0.01em; line-height: 1.3; margin-top: 1.4em; } .prose-ai h1 { font-size: 1.45em; } .prose-ai h2 { font-size: 1.25em; } .prose-ai h3 { font-size: 1.1em; } .prose-ai h4 { font-size: 1em; color: var(--text-2); } .prose-ai p { margin: 0; } .prose-ai p + p { margin-top: 0.85em; } .prose-ai a { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; text-decoration-color: color-mix(in oklab, var(--accent) 40%, transparent); } .prose-ai a:hover { text-decoration-color: var(--accent); } .prose-ai ul, .prose-ai ol { padding-left: 1.4em; } .prose-ai ul { list-style: disc; } .prose-ai ol { list-style: decimal; } .prose-ai li { margin: 0.25em 0; } .prose-ai li > ul, .prose-ai li > ol { margin-top: 0.25em; } .prose-ai blockquote { border-left: 3px solid var(--border-strong); padding: 0.1em 1em; color: var(--text-2); margin: 0.85em 0; } .prose-ai hr { border: 0; border-top: 1px solid var(--border); margin: 1.4em 0; } .prose-ai code { font-family: var(--font-mono); font-size: 0.875em; } .prose-ai :not(pre) > code { background: var(--surface-2); border: 1px solid var(--border); padding: 0.1em 0.4em; border-radius: 6px; } .prose-ai pre { background: #0d1117; border: 1px solid var(--border); border-radius: 10px; padding: 0.9rem 1rem; overflow-x: auto; font-size: 0.85rem; line-height: 1.55; } [data-theme="light"] .prose-ai pre { background: #0f141c; } .prose-ai pre code { background: transparent; border: 0; padding: 0; } .prose-ai table { border-collapse: collapse; width: 100%; font-size: 0.92em; display: block; overflow-x: auto; } .prose-ai th, .prose-ai td { border: 1px solid var(--border); padding: 0.45em 0.7em; text-align: left; vertical-align: top; } .prose-ai th { background: var(--surface-2); font-weight: 600; } .prose-ai img { max-width: 100%; border-radius: 10px; } .prose-ai .katex-display { overflow-x: auto; overflow-y: hidden; padding: 0.3em 0; } .prose-ai sup a { text-decoration: none; } .prose-ai .code-head { display: flex; align-items: center; justify-content: space-between; font-family: var(--font-mono); font-size: 0.72rem; color: var(--muted); padding: 0.35rem 0.75rem; border: 1px solid var(--border); border-bottom: 0; border-radius: 10px 10px 0 0; background: var(--surface); } .prose-ai .code-head + pre { border-radius: 0 0 10px 10px; margin-top: 0; } /* ------------------------------------------------------------------ animations */ @keyframes fade-up { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } } @keyframes pulse-dot { 0%, 80%, 100% { transform: scale(0.6); opacity: .4; } 40% { transform: scale(1); opacity: 1; } } @keyframes shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } } .anim-fade-up { animation: fade-up .25s ease-out both; } .typing-dot { display: inline-block; width: 6px; height: 6px; border-radius: 999px; background: var(--muted); animation: pulse-dot 1.2s infinite ease-in-out; } .typing-dot:nth-child(2) { animation-delay: .15s; } .typing-dot:nth-child(3) { animation-delay: .3s; } .skeleton { background: linear-gradient(90deg, var(--surface) 25%, var(--surface-2) 50%, var(--surface) 75%); background-size: 200% 100%; animation: shimmer 1.4s infinite; } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; } } /* ------------------------------------------------------------------ utilities */ .glass { background: color-mix(in oklab, var(--bg-elev) 80%, transparent); backdrop-filter: saturate(140%) blur(12px); -webkit-backdrop-filter: saturate(140%) blur(12px); } .card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); } .input { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 0.55rem 0.8rem; color: var(--text); width: 100%; transition: border-color .15s, box-shadow .15s; } .input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--ring); } .input::placeholder { color: var(--muted); } .kbd { font-family: var(--font-mono); font-size: 0.68rem; padding: 0.05rem 0.35rem; border: 1px solid var(--border-strong); border-bottom-width: 2px; border-radius: 5px; color: var(--text-2); background: var(--surface-2); } .truncate-2 { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; } dialog::backdrop { background: rgba(0,0,0,.55); backdrop-filter: blur(4px); } dialog { color: var(--text); } textarea { resize: none; } @media print { .no-print { display: none !important; } body { background: #fff; color: #000; } .prose-ai { font-size: 11pt; } }