*,:after,:before{box-sizing:border-box;margin:0;padding:0}:root{--bg:#f7f5f0;--surface:#efede8;--border:rgba(0,0,0,.1);--border-strong:rgba(0,0,0,.2);--text:#1a1916;--text-2:#6b6860;--text-3:#a8a69f;--teal:#0f6e56;--teal-light:#e1f5ee;--teal-mid:#1d9e75;--amber:#854f0b;--amber-light:#faeeda;--red:#a32d2d;--red-light:#fcebeb;--font-display:"DM Serif Display",Georgia,serif;--font-body:"DM Sans",system-ui,sans-serif;--font-mono:"DM Mono",monospace;--radius:10px;--radius-lg:16px;--accent:#1d9e75}@media (prefers-color-scheme:dark){:root{--bg:#141311;--surface:#1e1c19;--border:hsla(0,0%,100%,.08);--border-strong:hsla(0,0%,100%,.15);--text:#f0ede8;--text-2:#8c8a84;--text-3:#5a5854;--teal:#5dcaa5;--teal-light:#04342c;--teal-mid:#1d9e75;--amber:#ef9f27;--amber-light:#412402;--red:#f09595;--red-light:#501313;--accent:#5dcaa5}}html{font-size:16px;-webkit-font-smoothing:antialiased}body{background:var(--bg);color:var(--text);font-family:var(--font-body);font-weight:300;line-height:1.6;min-height:100dvh}button,input,textarea{font-family:inherit}textarea{width:100%;background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--radius);padding:14px 16px;font-size:15px;color:var(--text);font-weight:300;line-height:1.7;resize:none;transition:border-color .15s;outline:none;min-height:120px}textarea:focus{border-color:var(--teal-mid)}button{cursor:pointer;border:none;background:none;color:var(--text);font-family:var(--font-body)}a{color:inherit;text-decoration:none}.btn{display:block;width:100%;padding:14px 24px;border-radius:var(--radius);border:1px solid var(--border-strong);background:var(--surface);color:var(--text);font-size:15px;font-weight:400;text-align:center;cursor:pointer;transition:background .15s,border-color .15s}.btn:hover{background:var(--border)}.btn:active{transform:scale(.99)}.btn:disabled{opacity:.4;cursor:not-allowed;transform:none}.btn-fill{background:var(--text);color:var(--bg);border-color:var(--text)}.btn-fill:hover{opacity:.88;background:var(--text)}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes shimmer{0%,to{opacity:.3}50%{opacity:1}}.fade-up{animation:fadeUp .35s ease both}