*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;background:#f0f2f5;color:#1f2329}.app{max-width:520px;margin:0 auto;padding:24px 16px 48px}h1{font-size:22px;margin:8px 0 4px}.sub{color:#86909c;font-size:13px;margin:0 0 20px}.card{background:#fff;border:1px solid #e5e6eb;border-radius:10px;padding:16px;margin-bottom:16px;box-shadow:0 1px 2px #0000000a}.card h2{font-size:15px;margin:0 0 12px;color:#4e5969}.row{display:flex;align-items:center;gap:10px;margin-bottom:10px;flex-wrap:wrap}.row label{min-width:72px;color:#4e5969;font-size:14px}input{flex:1;min-width:120px;padding:8px 10px;border:1px solid #d0d3d9;border-radius:6px;font-size:14px}input:focus{outline:none;border-color:#3370ff}button{padding:8px 18px;border:none;border-radius:6px;font-size:14px;cursor:pointer;background:#3370ff;color:#fff}button:hover:not(:disabled){background:#245bdb}button:disabled{opacity:.5;cursor:not-allowed}.btn-answer{background:#00b42a}.btn-answer:hover:not(:disabled){background:#009a24}.btn-reject,.btn-hangup{background:#f53f3f}.btn-reject:hover:not(:disabled),.btn-hangup:hover:not(:disabled){background:#d93737}.status{padding:4px 10px;border-radius:999px;font-size:13px;color:#fff}.status-disconnected{background:#86909c}.status-connecting{background:#ff7d00}.status-registered{background:#00b42a}.status-failed{background:#f53f3f}.error{margin-top:10px;padding:8px 10px;background:#ffece8;border:1px solid #fbaca3;border-radius:6px;color:#f53f3f;font-size:13px;word-break:break-all}.notice{margin-top:12px;padding:10px 14px;background:#e8f3ff;border:1px solid #9fd0ff;border-radius:6px;color:#0f53b4;font-size:14px;text-align:center}.hint{color:#86909c;font-size:13px}.incoming{border-color:#ff7d00}.ring{font-size:16px;margin:4px 0 12px;display:flex;align-items:center;gap:8px}.pulse{width:10px;height:10px;border-radius:50%;background:#00b42a;animation:pulse 1s ease-in-out infinite}@keyframes pulse{0%,to{box-shadow:0 0 #00b42a80}50%{box-shadow:0 0 0 8px #00b42a00}}.active{border-color:#00b42a}.timer{font-size:40px;font-weight:700;font-variant-numeric:tabular-nums;margin:8px 0 16px;text-align:center;letter-spacing:2px}.call-panel{border-width:2px;transition:border-color .2s}.call-panel.state-incoming{border-color:#ff7d00;background:#fffdf7}.call-panel.state-active{border-color:#00b42a}.call-panel.state-outgoing{border-color:#3370ff}.call-banner{display:flex;align-items:center;gap:8px;padding:10px 12px;border-radius:8px;background:#f2f3f5;font-size:16px;font-weight:600;margin-bottom:8px}.state-incoming .call-banner{background:#fff2e0}.state-active .call-banner{background:#e8ffea}.state-outgoing .call-banner{background:#e8f3ff}.call-status{color:#1f2329}.state-incoming .call-status{color:#d25e00}.state-active .call-status{color:#009a24}.state-outgoing .call-status{color:#245bdb}.call-detail{margin:0 0 14px;color:#4e5969;font-size:14px;display:flex;align-items:center;gap:10px}.timer-inline{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:1px;color:#1f2329}.btn-cancel{background:#86909c}.btn-cancel:hover:not(:disabled){background:#6b7785}.pulse-off{background:#c9cdd4;animation:none}.state-incoming .pulse{background:#ff7d00;animation:pulseOrange 1s ease-in-out infinite}@keyframes pulseOrange{0%,to{box-shadow:0 0 #ff7d0080}50%{box-shadow:0 0 0 8px #ff7d0000}}.event-log{max-height:240px;overflow-y:auto;background:#1f2329;border-radius:8px;padding:8px 10px}.log-line{font-size:12px;font-family:ui-monospace,Consolas,Courier New,monospace;color:#c9cdd4;padding:2px 0;word-break:break-all}.log-time{color:#86909c;margin-right:6px}
