.app{max-width:600px;min-height:100vh;margin:0 auto;padding:20px}.app-header{text-align:center;padding:40px 0 20px}.app-header.compact{justify-content:space-between;align-items:center;padding:16px 0;display:flex}.app-header.compact h1{margin:0;font-size:20px}.app-header h1{color:var(--accent);letter-spacing:-1px;margin:0;font-size:48px;font-weight:700}.tagline{color:var(--text);margin-top:4px}.back-btn{padding:6px 12px;font-size:13px}.setup{flex-direction:column;gap:32px;margin-top:32px;display:flex}.difficulty-select label{color:var(--text-bright);margin-bottom:8px;font-weight:500;display:block}.difficulty-options{gap:8px;display:flex}.diff-btn{text-transform:capitalize;flex:1}.diff-btn.active{border-color:var(--accent);background:var(--accent-dim);color:var(--accent)}.mode-select{flex-direction:column;gap:12px;display:flex}.start-btn{border-color:var(--accent);background:var(--accent-dim);color:var(--accent);padding:16px;font-size:16px;font-weight:600}.start-btn.secondary{border-color:var(--border);background:var(--surface);color:var(--text-bright)}.error{border:1px solid var(--incorrect);color:var(--incorrect);background:#ef444426;border-radius:6px;margin-top:16px;padding:12px}.loading{text-align:center;color:var(--text);padding:80px 0}.trainer{margin-top:16px}.trainer-header{color:var(--text);justify-content:space-between;margin-bottom:24px;font-size:14px;display:flex}.trainer-body{flex-direction:column;align-items:center;gap:24px;display:flex}.pattern-display{font-family:var(--mono);color:var(--text-bright);letter-spacing:8px;background:var(--surface);border:1px solid var(--border);text-align:center;border-radius:8px;width:100%;padding:24px;font-size:36px}.play-btn{border-color:var(--accent);color:var(--accent);padding:14px 32px;font-size:16px}.options{grid-template-columns:1fr 1fr;gap:12px;width:100%;display:grid}.option-btn{padding:16px;font-size:20px;font-weight:600}.option-btn.correct{border-color:var(--correct);color:var(--correct);background:#22c55e26}.feedback{padding:12px;font-size:18px;font-weight:600}.feedback.correct{color:var(--correct)}.feedback.incorrect{color:var(--incorrect)}.word-trainer{margin-top:16px}.word-pattern{letter-spacing:4px;word-break:break-all;font-size:18px}.word-input-area{gap:10px;width:100%;display:flex}.word-input{font-family:var(--mono);background:var(--surface);border:1px solid var(--border);color:var(--text-bright);text-transform:uppercase;letter-spacing:2px;border-radius:6px;outline:none;flex:1;padding:12px 16px;font-size:18px}.word-input:focus{border-color:var(--accent)}.word-input::placeholder{color:var(--text);opacity:.4;text-transform:none;letter-spacing:normal}.score-panel{text-align:center;margin-top:32px}.score-panel h2{color:var(--text-bright);margin-bottom:24px}.stats-grid{grid-template-columns:1fr 1fr;gap:16px;margin-bottom:32px;display:grid}.stat{background:var(--surface);border:1px solid var(--border);border-radius:8px;flex-direction:column;gap:4px;padding:20px;display:flex}.stat-value{color:var(--accent);font-size:28px;font-weight:700}.stat-label{color:var(--text);font-size:13px}.score-actions{gap:12px;display:flex}.score-actions button{flex:1;padding:14px}.tap-input{text-align:center;margin-top:24px}.tap-target{margin-bottom:24px}.tap-letter{color:var(--text-bright);font-size:64px;font-weight:700;display:block}.tap-pattern{font-family:var(--mono);color:var(--text);letter-spacing:6px;font-size:24px}.tap-active{flex-direction:column;align-items:center;gap:16px;display:flex}.tap-dots{color:var(--accent);gap:8px;min-height:28px;font-size:20px;display:flex}.tap-result{border:1px solid var(--border);background:var(--surface);border-radius:8px;padding:20px}.tap-result.correct{border-color:var(--correct)}.tap-result.incorrect{border-color:var(--incorrect)}.tap-result p{margin-bottom:8px}.tap-result button{margin-top:12px}.tap-result-row{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.tap-result-label{color:var(--text);font-size:13px}.tap-result-pattern{font-family:var(--mono);letter-spacing:4px;color:var(--text-bright);font-size:24px}.tap-result-verdict{text-align:center;margin:12px 0;font-size:16px;font-weight:600}.tap-result.correct .tap-result-verdict{color:var(--correct)}.tap-result.incorrect .tap-result-verdict{color:var(--incorrect)}.pattern-builder{flex-direction:column;align-items:center;gap:16px;width:100%;display:flex}.pattern-display-inline{font-family:var(--mono);letter-spacing:8px;justify-content:center;align-items:center;gap:4px;min-height:48px;font-size:32px;display:flex}.built-symbol.dot{color:var(--accent)}.built-symbol.dash{color:#a855f7}.pattern-placeholder{color:var(--text);opacity:.4;letter-spacing:normal;font-size:16px}.morse-buttons{gap:16px;width:100%;display:flex}.morse-btn{border-radius:8px;flex-direction:column;flex:1;align-items:center;gap:4px;padding:20px;display:flex}.morse-btn.dot{border-color:var(--accent);color:var(--accent)}.morse-btn.dot:hover:not(:disabled){background:var(--accent-dim)}.morse-btn.dash{color:#a855f7;border-color:#a855f7}.morse-btn.dash:hover:not(:disabled){background:#a855f726}.morse-btn-symbol{font-size:28px;font-weight:700;line-height:1}.morse-btn-label{opacity:.7;font-size:13px}.pattern-actions{gap:10px;width:100%;display:flex}.pattern-actions button{flex:1;padding:12px}.key-hint{color:var(--text);opacity:.6;text-align:center;font-size:12px}.morse-key-container{flex-direction:column;align-items:center;gap:16px;width:100%;display:flex}.cw-key{border:3px solid var(--accent);background:var(--surface);width:140px;height:140px;color:var(--accent);cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:none;border-radius:50%;font-size:20px;font-weight:700;transition:transform 50ms,background 50ms,box-shadow .1s;box-shadow:0 0 #22d3ee00}.cw-key:hover{background:var(--accent-dim)}.cw-key.active{background:var(--accent);color:var(--bg);transform:scale(.93);box-shadow:0 0 30px #22d3ee66}.cw-key-hint{color:var(--text);opacity:.5;font-size:12px}.learn-mode{flex-direction:column;gap:24px;margin-top:16px;display:flex}.learn-progress{color:var(--text);justify-content:space-between;font-size:14px;display:flex}.learn-group{color:var(--text-bright);font-weight:600}.learn-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;flex-direction:column;align-items:center;gap:16px;padding:32px;display:flex}.learn-letter{color:var(--text-bright);font-size:80px;font-weight:700;line-height:1}.learn-pattern{font-family:var(--mono);color:var(--accent);letter-spacing:10px;font-size:40px}.learn-symbols{gap:12px;display:flex}.symbol{border-radius:4px;padding:4px 10px;font-size:14px;font-weight:500}.symbol.dot{background:var(--accent-dim);color:var(--accent)}.symbol.dash{color:#a855f7;background:#a855f726}.learn-group-strip{gap:8px;display:flex}.learn-group-item{flex-direction:column;flex:1;align-items:center;gap:2px;padding:10px 4px;font-size:12px;display:flex}.learn-group-item.active{border-color:var(--accent);background:var(--accent-dim)}.learn-group-letter{color:var(--text-bright);font-size:16px;font-weight:600}.learn-group-code{font-family:var(--mono);color:var(--text);letter-spacing:2px}.learn-steps{gap:16px;margin:4px 0;display:flex}.learn-step{color:var(--text);opacity:.5;font-size:13px;transition:opacity .15s}.learn-step.active{opacity:1;color:var(--accent);font-weight:600}.learn-actions{gap:10px;width:100%;display:flex}.learn-actions button{flex:1;padding:12px}.try-btn{border-color:var(--accent)!important;color:var(--accent)!important}.learn-tapping{flex-direction:column;align-items:center;gap:14px;width:100%;display:flex}.learn-tap-hint{font-family:var(--mono);color:var(--text);letter-spacing:6px;opacity:.4;font-size:20px}.learn-result{flex-direction:column;gap:10px;width:100%;display:flex}.learn-result-row{justify-content:space-between;align-items:center;display:flex}.learn-result-label{color:var(--text);font-size:13px}.learn-result-pattern{font-family:var(--mono);letter-spacing:4px;color:var(--text-bright);font-size:20px}.learn-result-accuracy{text-align:center;padding:8px 0;font-size:16px;font-weight:600}.learn-result.correct .learn-result-accuracy{color:var(--correct)}.learn-result.incorrect .learn-result-accuracy{color:var(--incorrect)}.learn-nav{gap:12px;display:flex}.learn-nav button{flex:1;padding:14px}.speed-control{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:14px 16px}.speed-header{justify-content:space-between;align-items:center;margin-bottom:8px;font-size:14px;display:flex}.speed-header label{color:var(--text-bright);font-weight:500}.speed-value{font-family:var(--mono);color:var(--accent);font-size:13px}.speed-control input[type=range]{appearance:none;background:var(--border);cursor:pointer;border-radius:3px;outline:none;width:100%;height:6px}.speed-control input[type=range]::-webkit-slider-thumb{appearance:none;background:var(--accent);border:2px solid var(--bg);cursor:pointer;border-radius:50%;width:18px;height:18px}.speed-control input[type=range]::-moz-range-thumb{background:var(--accent);border:2px solid var(--bg);cursor:pointer;border-radius:50%;width:18px;height:18px}.speed-labels{color:var(--text);justify-content:space-between;margin-top:4px;font-size:12px;display:flex}:root{--bg:#0f1117;--surface:#1a1c25;--border:#2e303a;--text:#9ca3af;--text-bright:#f3f4f6;--accent:#22d3ee;--accent-dim:#22d3ee26;--correct:#22c55e;--incorrect:#ef4444;--font:system-ui, -apple-system, sans-serif;--mono:ui-monospace, "Cascadia Code", "Fira Code", monospace;font:16px/1.5 var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased}*{box-sizing:border-box;margin:0;padding:0}body{margin:0}button{font-family:var(--font);cursor:pointer;border:1px solid var(--border);background:var(--surface);color:var(--text-bright);border-radius:6px;padding:10px 20px;font-size:14px;transition:border-color .15s,background .15s}button:hover:not(:disabled){border-color:var(--accent);background:var(--accent-dim)}button:disabled{opacity:.4;cursor:not-allowed}kbd{font-family:var(--mono);background:var(--surface);border:1px solid var(--border);border-radius:4px;padding:2px 6px;font-size:13px}
