@import "https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400;0,9..144,500;0,9..144,600;1,9..144,500&family=Inter:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap";:root{--ink:#12141c;--ink-surface:#191d27;--ink-elevated:#1f2430;--ink-line:#262b38;--paper:#ece7dc;--moss:#4fbfa0;--moss-dim:#35735f;--amber:#e8a548;--danger:#d97b6b;--text-hi:#f3f1e9;--text-lo:#9ca0ae}*{box-sizing:border-box}html,body,#root{background:var(--ink);height:100%;color:var(--text-hi);margin:0;font-family:Inter,system-ui,sans-serif}.app-shell{flex-direction:column;max-width:480px;height:100%;margin:0 auto;display:flex}h1,h2{margin:0;font-family:Fraunces,serif;font-weight:500}.screen-title{padding:20px 20px 4px;font-size:1.6rem}.screen-sub{color:var(--text-lo);padding:0 20px 18px;font-size:.85rem;line-height:1.5}.field-label{color:var(--text-lo);margin:0 0 6px;font-size:.72rem;display:block}input.field{background:var(--ink-surface);border:1px solid var(--ink-line);width:100%;color:var(--text-hi);border-radius:12px;margin-bottom:16px;padding:12px 14px;font-family:inherit;font-size:.9rem}input.field:focus{outline:2px solid var(--moss);outline-offset:1px}.field-note{color:var(--amber);margin-top:-10px;margin-bottom:18px;font-size:.76rem;line-height:1.5}.error-note{color:var(--danger);margin:-6px 0 14px;font-size:.8rem}.btn-primary{background:var(--moss);color:#0b1512;cursor:pointer;border:none;border-radius:14px;width:100%;padding:13px;font-size:.9rem;font-weight:600}.btn-primary:disabled{opacity:.6;cursor:default}.btn-secondary{color:var(--text-lo);border:1px solid var(--ink-line);cursor:pointer;background:0 0;border-radius:14px;width:100%;margin-top:10px;padding:11px;font-size:.85rem;font-weight:600}.form-body{flex-direction:column;flex:1;justify-content:center;padding:0 20px;display:flex}.top-bar{border-bottom:1px solid var(--ink-line);align-items:center;gap:10px;padding:14px 16px;display:flex}.top-bar h1{flex:1;font-size:1.2rem}.icon-btn{color:var(--text-lo);cursor:pointer;background:0 0;border:none;align-items:center;font-size:.85rem;display:flex}.rows{flex:1;overflow-y:auto}.row{border-bottom:1px solid var(--ink-line);cursor:pointer;color:inherit;align-items:center;gap:12px;padding:13px 20px;text-decoration:none;display:flex}.avatar{width:42px;height:42px;color:var(--ink);background:var(--moss-dim);border-radius:12px;flex:none;justify-content:center;align-items:center;font-family:Fraunces,serif;font-size:.95rem;font-weight:600;display:flex}.row-main{flex:1;min-width:0}.row-name{color:var(--text-hi);font-size:.94rem;font-weight:600}.row-preview{color:var(--text-lo);white-space:nowrap;text-overflow:ellipsis;margin-top:2px;font-size:.84rem;overflow:hidden}.empty-state{text-align:center;color:var(--text-lo);padding:40px 24px;font-size:.85rem;line-height:1.6}.fab{background:var(--moss);color:#0b1512;cursor:pointer;border:none;border-radius:16px;justify-content:center;align-items:center;width:52px;height:52px;font-size:1.6rem;display:flex;position:fixed;bottom:24px;right:max(20px,50vw - 220px);box-shadow:0 10px 24px -8px #4fbfa08c}.messages{flex-direction:column;flex:1;gap:4px;padding:16px;display:flex;overflow-y:auto}.bubble-row{display:flex}.bubble-row.mine{justify-content:flex-end}.bubble{max-width:76%;padding:9px 13px;font-size:.9rem;line-height:1.4}.bubble-row.theirs .bubble{background:var(--ink-elevated);color:var(--text-hi);border-radius:4px 16px 16px}.bubble-row.mine .bubble{background:var(--paper);color:#1b1a15;border-radius:16px 4px 16px 16px}.msg-time{opacity:.55;margin-top:4px;font-size:.63rem;display:block}.composer{border-top:1px solid var(--ink-line);align-items:center;gap:8px;padding:12px;display:flex}.composer input{background:var(--ink-surface);border:1px solid var(--ink-line);color:var(--text-hi);border-radius:20px;flex:1;padding:10px 14px;font-family:inherit;font-size:.88rem}.send-btn{background:var(--moss);cursor:pointer;border:none;border-radius:50%;flex:none;justify-content:center;align-items:center;width:36px;height:36px;display:flex}.status-banner{border-radius:12px;margin:12px 20px;padding:10px 14px;font-size:.8rem}.status-banner.error{background:color-mix(in srgb, var(--danger) 15%, transparent);color:var(--danger)}.status-banner.info{background:color-mix(in srgb, var(--moss) 15%, transparent);color:var(--moss)}
