*{margin:0;padding:0;box-sizing:border-box}
:root{--bg:#0a0a1a;--card:#141428;--border:#252548;--primary:#e94560;--glow:rgba(233,69,96,.4);--warn:#ffc857;--success:#4ecca3;--accent:#0f3460;--text:#eee;--dim:#777;--radius:16px}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC',sans-serif;background:var(--bg);color:var(--text);min-height:100vh;-webkit-tap-highlight-color:transparent;overflow-x:hidden}

/* 爆闪 */
#flash-overlay{position:fixed;inset:0;z-index:9999;pointer-events:none;opacity:0}
#flash-overlay.active{animation:megaFlash .4s ease-in-out 8,screenShake .1s linear infinite}
@keyframes megaFlash{0%{opacity:.9;background:#ff0033}14%{opacity:.9;background:#00ff66}28%{opacity:.9;background:#0066ff}42%{opacity:.9;background:#ffff00}57%{opacity:.9;background:#ff00ff}71%{opacity:.9;background:#00ffff}85%{opacity:.9;background:#ff6600}100%{opacity:0;background:#ff0033}}
@keyframes screenShake{0%{transform:translate(0)}25%{transform:translate(-5px,4px)}50%{transform:translate(4px,-5px)}75%{transform:translate(-3px,-3px)}100%{transform:translate(3px,5px)}}

/* 弹窗 */
.modal{position:fixed;inset:0;z-index:10000;display:flex;align-items:center;justify-content:center}
.modal.hidden{display:none}
.modal-bg{position:absolute;inset:0;background:rgba(0,0,0,.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.modal-content{position:relative;z-index:1;text-align:center;max-width:380px;width:92%;background:linear-gradient(135deg,#1a0a2e,#0f0520);border:3px solid var(--primary);border-radius:28px;padding:44px 28px 36px;animation:popIn .4s cubic-bezier(.175,.885,.32,1.275);box-shadow:0 0 80px var(--glow),0 0 160px rgba(233,69,96,.15)}
.alert-icon{font-size:56px;animation:ringBell .3s ease infinite alternate}
@keyframes ringBell{0%{transform:rotate(-15deg)}100%{transform:rotate(15deg)}}
.alert-title{font-size:20px;color:var(--primary);font-weight:700;margin:8px 0 12px}
.call-name{font-size:64px;font-weight:900;color:var(--warn);text-shadow:0 0 40px rgba(255,200,87,.7),0 0 80px rgba(233,69,96,.3);line-height:1.1;animation:numberPulse .5s ease infinite alternate}
@keyframes numberPulse{0%{transform:scale(1);text-shadow:0 0 40px rgba(255,200,87,.7)}100%{transform:scale(1.08);text-shadow:0 0 60px rgba(255,200,87,1),0 0 120px rgba(233,69,96,.5)}}
.pulse-ring{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:180px;height:180px;border:3px solid var(--primary);border-radius:50%;animation:pulseRing 1.2s ease-out infinite;pointer-events:none}
.ring2{animation-delay:.4s;border-color:var(--warn)}
.ring3{animation-delay:.8s;border-color:var(--success)}
@keyframes pulseRing{0%{transform:translate(-50%,-50%) scale(.7);opacity:1}100%{transform:translate(-50%,-50%) scale(3);opacity:0}}
@keyframes popIn{0%{transform:scale(.2) rotate(-5deg);opacity:0}100%{transform:scale(1) rotate(0);opacity:1}}
.btn-dismiss{background:var(--primary);font-size:20px;padding:16px 48px;border-radius:14px;margin-top:10px;border:none;color:#fff;font-weight:700;cursor:pointer;box-shadow:0 4px 20px var(--glow);animation:dismissPulse 1s ease infinite}
@keyframes dismissPulse{0%,100%{box-shadow:0 4px 20px var(--glow)}50%{box-shadow:0 4px 40px rgba(233,69,96,.8)}}

/* App */
.app-container{max-width:500px;margin:0 auto;padding:12px;padding-bottom:80px}
header{text-align:center;padding:20px 0 12px}
header h1{font-size:26px;background:linear-gradient(135deg,var(--warn),var(--primary));-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.subtitle{color:var(--dim);font-size:13px;margin-top:4px}
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-bottom:14px}
.card h2{font-size:16px;margin-bottom:12px}

/* 名字卡片 */
.name-card{background:linear-gradient(135deg,#0f1a3a,#1a1040);border-color:#3333aa}
.name-input-row{display:flex;gap:8px}
.name-input-row input{flex:1;padding:14px 16px;border:2px solid #4444aa;border-radius:12px;background:rgba(255,255,255,.06);color:var(--text);font-size:18px;outline:none}
.name-input-row input:focus{border-color:var(--primary)}
.name-input-row input::placeholder{color:#555}
.name-tags{margin-top:8px;display:flex;flex-wrap:wrap;gap:6px}
.hint{font-size:12px;color:var(--dim);width:100%}
.btn-add-name{padding:14px 18px;border:2px solid #4444aa;border-radius:12px;background:rgba(233,69,96,.15);color:var(--primary);font-size:20px;cursor:pointer;transition:all .2s;flex-shrink:0}
.btn-add-name:active{transform:scale(.92);background:rgba(233,69,96,.3)}
.word-tag{display:inline-flex;align-items:center;gap:6px;background:rgba(233,69,96,.12);border:1px solid rgba(233,69,96,.35);padding:5px 10px 5px 12px;border-radius:20px;font-size:14px;color:var(--primary);font-weight:600;transition:all .15s}
.word-tag.animate{animation:tagIn .3s ease}
@keyframes tagIn{0%{transform:scale(.5);opacity:0}100%{transform:scale(1);opacity:1}}
.word-tag .tag-del{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:rgba(233,69,96,.25);color:var(--primary);font-size:12px;cursor:pointer;border:none;line-height:1;transition:all .15s;flex-shrink:0}
.word-tag .tag-del:hover{background:var(--primary);color:#fff}

/* 监听卡片 */
.listen-card{text-align:center}
.listen-status{display:flex;align-items:center;justify-content:center;gap:10px;margin-bottom:16px;font-size:16px}
.status-dot{width:14px;height:14px;border-radius:50%;transition:background .3s}
.status-dot.idle{background:#555}
.status-dot.listening{background:var(--success);box-shadow:0 0 12px var(--success);animation:dotPulse 1.5s ease infinite}
.status-dot.alert{background:var(--primary);box-shadow:0 0 20px var(--primary);animation:dotBlink .3s ease infinite}
.status-dot.loading{background:var(--warn);box-shadow:0 0 12px var(--warn);animation:dotSpin 1s linear infinite}
@keyframes dotSpin{0%,100%{box-shadow:0 0 8px var(--warn)}50%{box-shadow:0 0 24px var(--warn)}}
.btn-listen.loading{background:linear-gradient(135deg,var(--warn),#e67e22);box-shadow:0 4px 20px rgba(255,200,87,.3);opacity:.85;cursor:wait}
@keyframes dotPulse{0%,100%{box-shadow:0 0 8px var(--success)}50%{box-shadow:0 0 20px var(--success)}}
@keyframes dotBlink{0%,100%{opacity:1}50%{opacity:.3}}
.btn-listen{width:100%;padding:16px;font-size:20px;font-weight:700;border:none;border-radius:14px;cursor:pointer;color:#fff;transition:all .2s}
.btn-listen.start{background:linear-gradient(135deg,var(--success),#2eaa7a);box-shadow:0 4px 20px rgba(78,204,163,.3)}
.btn-listen.stop{background:linear-gradient(135deg,var(--primary),#c0392b);box-shadow:0 4px 20px var(--glow)}
.btn-listen:active{transform:scale(.96)}
.btn-listen:disabled{background:linear-gradient(135deg,#555,#444);box-shadow:none;cursor:not-allowed;opacity:.5}
.btn-listen.stop:disabled,.btn-listen.loading:disabled{cursor:pointer;opacity:1}
.listen-tip{margin-top:12px;font-size:12px;color:var(--dim)}


/* Background warning */
.bg-warning{position:fixed;bottom:0;left:0;right:0;z-index:9000;background:linear-gradient(135deg,#ff6b35,#e94560);color:#fff;padding:12px 16px;display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:600;box-shadow:0 -4px 20px rgba(233,69,96,.5);animation:slideUp .3s ease}
.bg-warning.hidden{display:none}
@keyframes slideUp{from{transform:translateY(100%)}to{transform:translateY(0)}}
.bg-warning-close{background:none;border:none;color:#fff;font-size:18px;cursor:pointer;padding:4px 8px;opacity:.8}
.bg-warning-close:hover{opacity:1}

/* 语音日志 */
.log-card h2{display:flex;align-items:center;gap:8px}
.voice-log{max-height:320px;overflow-y:auto;background:rgba(0,0,0,.3);border-radius:10px;padding:10px;font-family:'Courier New',monospace;font-size:13px;scroll-behavior:smooth}
.log-line{padding:5px 0;border-bottom:1px solid rgba(255,255,255,.05);color:var(--dim);word-break:break-all;display:flex;align-items:baseline;gap:6px;transition:background .2s}
.log-line .time{color:#555;font-size:11px;flex-shrink:0}
.log-line .log-text{flex:1}
.log-line.final{color:#ccc}
.log-line.final .log-text{color:#e0e0e0}
.log-line.interim{color:#888;border-left:2px solid #666;padding-left:6px;background:rgba(255,255,255,.02)}
.log-line.match{color:var(--primary);font-weight:700;font-size:14px;background:rgba(233,69,96,.08);border-left:3px solid var(--primary);padding-left:8px}
.log-line.error{color:#f44336;background:rgba(244,67,54,.05);border-left:3px solid #f44336;padding-left:8px}
.empty-state{text-align:center;color:var(--dim);padding:20px;font-size:13px}

/* Settings */
.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.toggle-item{display:flex;align-items:center;justify-content:space-between;background:rgba(255,255,255,.04);padding:8px 12px;border-radius:10px;cursor:pointer;font-size:13px;transition:background .2s}
.toggle-item:hover{background:rgba(255,255,255,.08)}
.toggle-item input{display:none}
.slider{width:38px;height:22px;background:#444;border-radius:11px;position:relative;transition:background .3s;flex-shrink:0}
.slider::after{content:'';position:absolute;width:18px;height:18px;background:#fff;border-radius:50%;top:2px;left:2px;transition:transform .3s}
.toggle-item input:checked+.slider{background:var(--primary)}
.toggle-item input:checked+.slider::after{transform:translateX(16px)}

/* 提醒历史 */
.badge{background:var(--primary);color:#fff;font-size:11px;padding:2px 8px;border-radius:10px;font-weight:600}
.alert-list{max-height:200px;overflow-y:auto}
.alert-item{display:flex;align-items:center;padding:10px 12px;border-radius:10px;margin-bottom:5px;font-size:14px;background:rgba(233,69,96,.06);border:1px solid rgba(233,69,96,.15)}
.alert-item .alert-time{font-size:11px;color:var(--dim);margin-right:10px;white-space:nowrap}
.alert-item .alert-name{font-weight:700;color:var(--warn);margin-right:8px}
.alert-item .alert-original{flex:1;color:var(--dim);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.btn-clear-log{width:100%;margin-top:10px;padding:8px;font-size:13px;background:#333;border:none;color:var(--dim);border-radius:8px;cursor:pointer}

/* Toast */
.toast{position:fixed;top:20px;left:50%;transform:translateX(-50%) translateY(-100px);background:var(--card);border:1px solid var(--primary);color:var(--text);padding:12px 24px;border-radius:12px;font-size:14px;z-index:11000;box-shadow:0 4px 20px rgba(0,0,0,.5);transition:transform .3s cubic-bezier(.175,.885,.32,1.275)}
.toast.show{transform:translateX(-50%) translateY(0)}

::-webkit-scrollbar{width:3px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:#333;border-radius:2px}
.hidden{display:none!important}

/* Card divider */

/* 当前号码输入 */
.current-num-row{display:flex;align-items:center;gap:10px;margin-top:4px}
.current-num-row label{font-size:.9rem;color:rgba(255,255,255,.7);white-space:nowrap}
.current-num-row input[type=number]{width:120px;padding:6px 10px;border-radius:8px;border:1px solid rgba(255,255,255,.15);background:rgba(255,255,255,.06);color:#fff;font-size:.95rem;text-align:center;outline:none}
.current-num-row input[type=number]:focus{border-color:rgba(79,172,254,.6)}
.current-num-hint{font-size:.75rem;color:rgba(255,255,255,.4);margin-top:4px}

.card-divider{border:none;border-top:1px solid rgba(255,255,255,.08);margin:18px 0}
