:root{--bg:#0a0e0a;--panel:#0f1a0f;--border:#1a3a1a;--green:#00ff41;--green-dim:#003b0f;--green-mid:#00aa28;--amber:#ffb000;--red:#ff3030;--text:#b0ffb0;--text-dim:#3a6b3a}*{box-sizing:border-box;margin:0;padding:0}#loading-overlay{position:fixed;inset:0;background:var(--bg);display:flex;align-items:center;justify-content:center;z-index:100;transition:opacity .4s ease}#loading-overlay.hidden{opacity:0;pointer-events:none}#loading-box{display:flex;flex-direction:column;align-items:center;gap:16px;width:min(420px,90vw);padding:40px;border:1px solid var(--border);background:var(--panel)}#loading-title{font-size:12px;letter-spacing:3px;color:var(--green)}#loading-bar-wrap{width:100%;height:6px;background:var(--green-dim);border-radius:3px;overflow:hidden}#loading-bar{height:100%;width:0;background:var(--green);box-shadow:0 0 8px var(--green);border-radius:3px;transition:width .3s ease}#loading-text{font-size:10px;letter-spacing:2px;color:var(--text-dim);text-align:center;min-height:14px}#loading-note{font-size:9px;letter-spacing:1px;color:var(--text-dim);opacity:.5;text-align:center;line-height:1.7}body{background:var(--bg);color:var(--text);font-family:'Courier New',Courier,monospace;height:100vh;display:flex;flex-direction:column;overflow:hidden}#content{flex:1;display:flex;overflow:hidden}#main{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}header{border-bottom:1px solid var(--border);padding:10px 20px;display:flex;align-items:center;gap:14px;background:var(--panel)}.signal-dot{width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 6px var(--green);animation:pulse 2s infinite}@keyframes pulse{0%,100%{opacity:1}50%{opacity:.3}}header h1{font-size:13px;letter-spacing:3px;color:var(--green);text-transform:uppercase}header .subtitle{font-size:10px;color:var(--text-dim);letter-spacing:2px;margin-left:auto}#chat{flex:1;overflow-y:auto;padding:16px 20px;display:flex;flex-direction:column;gap:16px;scrollbar-width:thin;scrollbar-color:var(--border) transparent}#chat::-webkit-scrollbar{width:4px}#chat::-webkit-scrollbar-track{background:transparent}#chat::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.msg{display:flex;flex-direction:column;gap:4px;max-width:85%;animation:fadein .3s ease}@keyframes fadein{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.msg.user{align-self:flex-end;align-items:flex-end}.msg.bot{align-self:flex-start;align-items:flex-start}.msg-label{font-size:9px;letter-spacing:2px;color:var(--text-dim)}.msg-bubble{border:1px solid;border-radius:4px;padding:10px 14px}.msg.user .msg-bubble{border-color:#4a3000;background:#1a0f00}.msg.bot .msg-bubble{border-color:var(--border);background:var(--panel)}.msg-morse{font-size:13px;letter-spacing:2px;line-height:1.8;word-break:break-all}.msg.user .msg-morse{color:var(--amber)}.msg.bot .msg-morse{color:var(--green)}.msg-text{font-size:11px;color:var(--text-dim);letter-spacing:1px;font-style:italic;margin-top:4px}.thinking-dots::after{content:'.';animation:dots 1.2s infinite}@keyframes dots{0%{content:'.'}33%{content:'..'}66%{content:'...'}100%{content:''}}#input-panel{border-top:1px solid var(--border);background:var(--panel);padding:14px 20px;display:flex;flex-direction:column;gap:10px}#morse-display{min-height:28px;font-size:20px;letter-spacing:4px;color:var(--amber);text-shadow:0 0 8px var(--amber);word-break:break-all}#decoded-display{font-size:11px;color:var(--text-dim);letter-spacing:2px;min-height:16px}.key-row{display:flex;align-items:center;gap:12px}#tap-key{width:80px;height:80px;border-radius:50%;border:3px solid var(--green-mid);background:var(--green-dim);color:var(--green);font-family:inherit;font-size:11px;letter-spacing:1px;cursor:pointer;user-select:none;-webkit-user-select:none;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .05s,box-shadow .05s,transform .05s}#tap-key.active{background:var(--green);color:var(--bg);box-shadow:0 0 20px var(--green),0 0 40px rgba(0,255,65,0.3);border-color:var(--green);transform:scale(0.93)}#waveform{height:24px;display:flex;align-items:center;gap:2px}.wv-bar{width:3px;background:var(--green-dim);border-radius:1px;transition:height .1s,background .1s}.key-hints{display:flex;flex-direction:column;gap:5px;font-size:10px;color:var(--text-dim);letter-spacing:1px}.key-hints span{display:flex;gap:6px;align-items:center}.key-hints .k{border:1px solid var(--text-dim);padding:1px 5px;border-radius:3px;color:var(--text);font-size:9px}.action-row{display:flex;gap:10px;align-items:center}#send-btn,#clear-btn{padding:6px 16px;border:1px solid;background:transparent;font-family:inherit;font-size:11px;letter-spacing:2px;cursor:pointer;border-radius:3px;transition:background .15s,color .15s,box-shadow .15s}#send-btn{border-color:var(--green-mid);color:var(--green)}
#send-btn:hover:not(:disabled){background:var(--green);color:var(--bg);box-shadow:0 0 10px var(--green)}#send-btn:disabled{opacity:.3;cursor:not-allowed}#clear-btn{border-color:var(--border);color:var(--text-dim)}#clear-btn:hover{border-color:var(--red);color:var(--red)}#status{font-size:10px;letter-spacing:2px;color:var(--text-dim);margin-left:auto}#morse-ref{width:168px;flex-shrink:0;border-left:1px solid var(--border);background:var(--panel);display:flex;flex-direction:column;overflow:hidden}#morse-ref-title{font-size:9px;letter-spacing:2px;color:var(--text-dim);padding:8px 10px;border-bottom:1px solid var(--border);flex-shrink:0}#morse-ref-body{flex:1;overflow-y:auto;padding:6px;display:grid;grid-template-columns:1fr 1fr;gap:4px;align-content:start;scrollbar-width:thin;scrollbar-color:var(--border) transparent}#morse-ref-body::-webkit-scrollbar{width:3px}#morse-ref-body::-webkit-scrollbar-track{background:transparent}#morse-ref-body::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.mt-row{display:flex;align-items:baseline;gap:5px;padding:3px 5px;border:1px solid var(--green-dim);border-radius:3px}.mt-char{font-size:12px;font-weight:bold;color:var(--green);min-width:12px}.mt-code{font-size:9px;letter-spacing:1px;color:var(--amber);word-break:break-all}