*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--bg: #f0f4f8;--card: #ffffff;--text: #111827;--text2: #6b7280;--accent: #1d4ed8;--accent2: #1e40af;--success: #16a34a;--danger: #dc2626;--radius: 16px}body{font-family:Sora,sans-serif;background:var(--bg);color:var(--text);min-height:100vh;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}button{font-family:inherit;cursor:pointer;border:none;font-weight:600;transition:all .15s;-webkit-tap-highlight-color:transparent}.btn-main{background:var(--accent);color:#fff;border-radius:var(--radius);padding:16px 40px;font-size:20px;width:100%;letter-spacing:-.01em}.btn-main:hover{background:var(--accent2)}.btn-main:active{transform:scale(.98)}.btn-main:disabled{opacity:.5}.btn-back{background:#fff;color:var(--text2);border:2px solid #e5e7eb;border-radius:var(--radius);padding:14px 28px;font-size:16px}.btn-back:hover{border-color:var(--accent);color:var(--accent)}.keyboard-qwerty{width:100%;max-width:580px;margin:0 auto;display:flex;flex-direction:column;gap:6px}.keyboard-row{display:flex;justify-content:center;gap:5px}.key{background:#fff;border:1.5px solid #e5e7eb;border-radius:8px;width:52px;height:48px;font-size:18px;font-weight:600;color:var(--text);transition:all .1s;display:flex;align-items:center;justify-content:center;flex-shrink:0}.key:hover{border-color:var(--accent);color:var(--accent);background:#eff6ff}.key:active{transform:scale(.93);background:#dbeafe}.key-wide{width:76px;font-size:14px}.key-space{width:180px;font-size:13px;letter-spacing:.05em}.key-delete{background:#fef2f2;border-color:#fecaca;color:var(--danger);width:76px;font-size:13px}.key-delete:hover{background:var(--danger);border-color:var(--danger);color:#fff}.key-nums{background:#f3f4f6;width:64px;font-size:13px}.key-nums:hover{border-color:var(--accent);color:var(--accent);background:#eff6ff}@keyframes fadeIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.fade-in{animation:fadeIn .3s ease both}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}.pulse{animation:pulse 1.5s ease-in-out infinite}
