:root{--forest-50:#eff5ed;--forest-100:#dce8d8;--forest-200:#c1d4bc;--forest-300:#9fbe96;--forest-400:#7ba870;--forest-500:#5c8050;--forest-600:#44633a;--forest-700:#324a2a;--forest-800:#1e3319;--forest-900:#142310;--brand:var(--forest-600);--brand-ink:var(--forest-800);--brand-tint:var(--forest-50);--brand-glow:#44633a2e;--bg:#f2f3f0;--surface:#fff;--surface-2:#f8f9f7;--surface-3:#f2f3f0;--ink:#1a1f18;--ink-2:#3a3f38;--ink-3:#6b7068;--ink-4:#9ca09a;--border:#e4e6e0;--border-2:#d4d6d0;--border-3:#c4c6c0;--success:#16a34a;--success-bg:#f0fdf4;--success-ink:#14532d;--success-mid:#bbf7d0;--warning:#d97706;--warning-bg:#fffbeb;--warning-ink:#78350f;--warning-mid:#fde68a;--danger:#dc2626;--danger-bg:#fef2f2;--danger-ink:#7f1d1d;--danger-mid:#fecaca;--info:#2563eb;--info-bg:#eff6ff;--info-ink:#1e40af;--info-mid:#bfdbfe;--font-display:"Barlow",system-ui,sans-serif;--font-body:"Public Sans",system-ui,sans-serif;--font-mono:"IBM Plex Mono","JetBrains Mono",monospace;--radius-xs:4px;--radius-sm:6px;--radius-md:10px;--radius-lg:14px;--radius-xl:18px;--radius-full:9999px;--shadow-xs:0 1px 2px #0000000a;--shadow-sm:0 1px 4px #0000000f,0 1px 2px #0000000a;--shadow-md:0 4px 12px #00000014,0 2px 4px #0000000a;--shadow-lg:0 12px 32px #0000001f,0 4px 10px #0000000f;--ease-out:cubic-bezier(.16,1,.3,1);--dur-fast:.12s;--dur-base:.2s;--focus-ring:0 0 0 3px var(--brand-glow)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{font-family:var(--font-body);background:var(--bg);color:var(--ink);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:var(--font-display);font-weight:800;letter-spacing:-.01em;margin:0;color:var(--ink)}a{color:inherit;text-decoration:none}.tnum{font-feature-settings:tabular-nums lining-nums;font-variant-numeric:tabular-nums lining-nums}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible{outline:none;box-shadow:var(--focus-ring);border-radius:var(--radius-sm)}@keyframes riseIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.reveal{animation:riseIn .5s var(--ease-out) both}