@import 'katex/dist/katex.min.css'; @tailwind base; @tailwind components; @tailwind utilities; :root { --font-scale: 1; --safe-bottom: env(safe-area-inset-bottom, 0px); --safe-top: env(safe-area-inset-top, 0px); } html, body, #root { height: 100%; } body { @apply bg-neutral-bg text-neutral-text font-sans antialiased; font-size: calc(16px * var(--font-scale)); overscroll-behavior-y: none; } input, textarea, select, button { font: inherit; } /* Anti-zoom iOS: never below 16 px in inputs */ input, textarea { font-size: max(16px, 1em); } *:focus-visible { outline: 2px solid theme('colors.uqo.blue'); outline-offset: 2px; border-radius: 4px; } .scroll-thin { scrollbar-width: thin; scrollbar-color: #C5D0DB transparent; } .scroll-thin::-webkit-scrollbar { width: 6px; height: 6px; } .scroll-thin::-webkit-scrollbar-thumb { background: #C5D0DB; border-radius: 3px; } /* Markdown (prose-like, mobile first) */ .md { line-height: 1.6; word-wrap: break-word; } .md > * + * { margin-top: 0.7em; } .md h1, .md h2, .md h3, .md h4 { @apply font-semibold text-uqo-blue-dark; line-height: 1.3; margin-top: 1.1em; } .md h1 { font-size: 1.35em; } .md h2 { font-size: 1.2em; } .md h3 { font-size: 1.08em; } .md h4 { font-size: 1em; } .md p { margin: 0; } .md ul { list-style: disc; padding-left: 1.4em; } .md ol { list-style: decimal; padding-left: 1.4em; } .md li + li { margin-top: 0.25em; } .md a { @apply text-uqo-blue underline underline-offset-2; } .md blockquote { @apply border-l-4 border-uqo-blue-light pl-3 text-neutral-muted; } .md code:not(pre code) { @apply font-mono text-[0.9em] bg-neutral-surface px-1 py-0.5 rounded; } .md pre { @apply font-mono text-[0.86em] rounded-lg overflow-x-auto; } .md table { display: block; overflow-x: auto; max-width: 100%; border-collapse: collapse; font-size: 0.93em; } .md thead th { @apply bg-uqo-blue-light text-uqo-blue-dark font-semibold text-left; padding: 6px 10px; } .md td { padding: 6px 10px; border-top: 1px solid theme('colors.neutral.line'); white-space: nowrap; } .md hr { @apply border-neutral-line my-3; } .md .katex-display { overflow-x: auto; overflow-y: hidden; padding: 4px 0; margin: 0.5em 0; } .md .katex { font-size: 1.05em; } .md img { max-width: 100%; border-radius: 8px; } .shiki { padding: 12px 14px; margin: 0; background: #0f1b2a !important; color: #e6edf3; } .shiki code { counter-reset: line; } .streaming-cursor::after { content: '▍'; @apply text-uqo-blue; animation: blink 1s steps(2) infinite; margin-left: 1px; } @keyframes blink { 50% { opacity: 0; } } .progress-bar { position: relative; height: 2px; overflow: hidden; background: theme('colors.uqo.blue-light'); } .progress-bar::after { content: ''; position: absolute; left: -40%; width: 40%; height: 100%; background: theme('colors.uqo.blue'); animation: slide 1.2s ease-in-out infinite; } @keyframes slide { to { left: 100%; } } .skeleton { @apply bg-neutral-surface rounded animate-pulse; }