:root{--bg: #f5f0e8;--bg-card: #faf7f0;--text: #4a3f35;--text-light: #8a7e6e;--text-dark: #2c2416;--primary: #7baf5a;--primary-light: #a8d88a;--primary-dark: #5a8a3c;--accent: #f0a040;--red: #e05555;--border: #e0d5c5;--shadow: 0 2px 8px rgba(0,0,0,.06);--radius: 12px;--radius-sm: 8px;--quality-white: #9e9e9e;--quality-green: #4caf50;--quality-blue: #2196f3;--quality-purple: #9c27b0;--quality-orange: #ff9800;--quality-red: #f44336}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;z-index:1000;display:flex;align-items:center;justify-content:center}.login-modal{background:#fff;border-radius:16px;padding:28px 24px;width:320px;max-width:90vw;text-align:center}.login-modal h3{font-size:18px;color:#4a3f35;margin-bottom:16px}.login-tabs{display:flex;border-bottom:1px solid #e0d5c5;margin-bottom:16px}.login-tabs span{flex:1;padding:10px 0;cursor:pointer;color:#8a7e6e;font-size:14px;transition:color .2s}.login-tabs span.active{color:#7baf5a;border-bottom:2px solid #7baf5a;font-weight:700}.login-form{display:flex;flex-direction:column;gap:10px}.login-form input{padding:10px 14px;border:1px solid #e0d5c5;border-radius:8px;font-size:14px;outline:none;background:#faf7f0;color:#4a3f35}.login-form input:focus{border-color:#7baf5a}.btn-primary{padding:12px;background:#7baf5a;color:#fff;border:none;border-radius:8px;font-size:15px;cursor:pointer;font-weight:700}.btn-primary:active{background:#5a8a3c}.btn-primary:disabled{background:#bbb;cursor:not-allowed}.login-bottom{margin-top:14px;display:flex;justify-content:space-around}.guest-link,.bind-link{color:#7baf5a;font-size:13px;cursor:pointer}.login-msg{margin-top:10px;font-size:13px;color:#7baf5a}.login-msg.error{color:#e05555}.toast{position:fixed;top:60px;left:50%;transform:translate(-50%);padding:10px 24px;background:#000000bf;color:#fff;border-radius:20px;font-size:13px;z-index:2000;pointer-events:none;white-space:nowrap;animation:toastIn .3s ease}@keyframes toastIn{0%{opacity:0;transform:translate(-50%) translateY(-10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}
