:root{--color-bg:#faf8f5;--color-surface:#fff;--color-text:#1c1917;--color-accent:#6d28d9;--color-accent-600:#5b21b6;--color-accent-700:#4c1d95;--color-divider:#ebe6dd;--radius-sm:2px;--radius-md:2px;--radius-lg:3px;--font-body:Inter, system-ui, sans-serif;--font-serif:"Source Serif 4", Georgia, serif;--font-mono:"IBM Plex Mono", monospace;--paper:#faf8f5;--surface:#fff;--surface-sunken:#f3f0ea;--surface-hover:#f7f4ef;--border-subtle:#ebe6dd;--border:#dcd5c8;--border-strong:#c2b8a6;--ink-900:#1c1917;--ink-700:#44403c;--ink-500:#78716c;--ink-400:#a8a29e;--accent:#6d28d9;--accent-hover:#5b21b6;--accent-soft:#f2edfd;--accent-border:#cbb8f5;--accent-ink:#4c1d95;--ok:#2f7a57;--ok-soft:#e7f2eb;--warn:#a9690b;--warn-soft:#fbf1de;--danger:#b3261e;--danger-soft:#fbeae7;--ai:#7c3aed;--ai-soft:#f4eefe;--focus-ring:0 0 0 3px #6d28d938;--shadow-pop:0 2px 4px #1c19170a, 0 12px 32px -8px #1c19171f}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{color:#44403c;-webkit-font-smoothing:antialiased;background:#faf8f5;margin:0;font-family:Inter,system-ui,sans-serif;font-size:15px;line-height:1.6}h1,h2,h3,h4{letter-spacing:-.012em;margin:0;font-family:"Source Serif 4",Georgia,serif;font-weight:600}blockquote,dd,dl,figure,p{margin:0}a{color:#6d28d9}a:hover{color:#5b21b6}button,input,select,textarea{font:inherit;color:inherit;margin:0}input::-moz-placeholder{color:#a8a29e;opacity:1;font-style:italic}textarea::-moz-placeholder{color:#a8a29e;opacity:1;font-style:italic}input::placeholder,textarea::placeholder{color:#a8a29e;opacity:1;font-style:italic}img,svg{max-width:100%;display:block}:focus{outline:none}:focus-visible{outline-offset:2px;outline:2px solid #6d28d9}::selection{background:#eaddfb}@keyframes okpulse{0%{border-color:#2f7a57;box-shadow:0 0 0 3px #2f7a572e}70%{border-color:#2f7a57;box-shadow:0 0 0 3px #2f7a571a}to{border-color:#0000;box-shadow:0 0 0 3px #2f7a5700}}@keyframes slidein{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:none}}@keyframes fadein{0%{opacity:0}to{opacity:1}}@keyframes popin{0%{opacity:0;transform:translateY(6px)scale(.99)}to{opacity:1;transform:none}}@keyframes shimmer{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important}}
