*{margin:0;padding:0;box-sizing:border-box}:root{--primary-color: #2196F3;--primary-dark: #1976D2;--primary-light: #BBDEFB;--accent-color: #FF4081;--success-color: #4CAF50;--warning-color: #FF9800;--error-color: #F44336;--bg-primary: #ffffff;--bg-secondary: #f5f5f5;--bg-tertiary: #e0e0e0;--text-primary: #212121;--text-secondary: #757575;--text-tertiary: #9e9e9e;--border-color: #e0e0e0;--shadow-sm: 0 2px 4px rgba(0, 0, 0, .1);--shadow-md: 0 4px 6px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 20px rgba(0, 0, 0, .15);--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--transition: .3s ease}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,sans-serif;line-height:1.6;color:var(--text-primary);background-color:var(--bg-secondary);min-height:100vh}#app{min-height:100vh;display:flex;flex-direction:column}#main-container{flex:1;display:flex;flex-direction:column}.loading-overlay{position:fixed;inset:0;background-color:var(--bg-primary);display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:9999;transition:opacity var(--transition)}.loading-overlay.hidden{opacity:0;pointer-events:none}.loading-spinner{width:40px;height:40px;border:4px solid var(--bg-tertiary);border-top-color:var(--primary-color);border-radius:50%;animation:spin 1s linear infinite;margin-bottom:16px}@keyframes spin{to{transform:rotate(360deg)}}.error-message{text-align:center;padding:40px;max-width:500px}.error-message h2{color:var(--error-color);margin-bottom:16px}.error-message p{color:var(--text-secondary);margin-bottom:8px}.error-message button{margin-top:24px}.view{flex:1;display:none;flex-direction:column;width:100%;max-width:1200px;margin:0 auto;padding:20px}.view.active{display:flex}.home-view{align-items:center;justify-content:center;text-align:center;padding:40px 20px}.home-view h1{font-size:2.5rem;margin-bottom:10px;color:var(--primary-color)}.home-view p{font-size:1.1rem;color:var(--text-secondary);margin-bottom:40px}.home-actions{display:flex;flex-direction:column;gap:16px;width:100%;max-width:400px}.hidden{display:none!important}.help-text{margin-top:16px;font-size:.875rem;color:var(--text-secondary)}.modal-copy{margin-bottom:16px}.modal-copy-secondary{margin-bottom:16px;color:var(--text-secondary)}.room-id-input,.join-room-input{text-align:center;font-family:monospace;letter-spacing:1px}.room-id-input{font-size:1.2rem;letter-spacing:2px}.join-room-input{font-size:1.1rem}.qr-reader{width:100%;max-width:400px;margin:0 auto}.qr-scan-result{margin-top:16px;text-align:center}.qr-code-frame{display:flex;justify-content:center;align-items:center;padding:20px;background:#fff;border-radius:var(--radius-md);margin-bottom:16px}.recent-room-list{max-height:300px;overflow-y:auto;margin:16px 0}.recent-room-item{padding:12px;background:var(--bg-secondary);border-radius:var(--radius-md);margin-bottom:8px;cursor:pointer}.recent-room-id{font-family:monospace;font-weight:600;color:var(--primary-color)}.recent-room-time{font-size:.75rem;color:var(--text-secondary)}.mt-16{margin-top:16px}.chat-meta{font-size:.875rem;color:var(--text-secondary)}.empty-state{text-align:center;color:var(--text-secondary);padding:40px}.empty-state-icon{opacity:.3;margin-bottom:16px}.scroll-list{max-height:300px;overflow-y:auto}.fingerprint-modal{max-width:600px}.fingerprint-scroll{max-height:60vh;overflow-y:auto}.no-animation{animation:none!important}.chat-view{height:100vh;padding:0;max-width:none}.chat-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;background-color:var(--bg-primary);border-bottom:1px solid var(--border-color);box-shadow:var(--shadow-sm)}.chat-header h2{font-size:1.25rem;font-weight:600}.chat-header .actions{display:flex;gap:8px}.chat-messages{flex:1;overflow-y:auto;padding:20px;background-color:var(--bg-secondary)}.message{max-width:70%;margin-bottom:12px;padding:12px 16px;border-radius:var(--radius-lg);word-wrap:break-word;animation:messageIn .3s ease}@keyframes messageIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}.message.sent{background-color:var(--primary-color);color:#fff;margin-left:auto;border-bottom-right-radius:4px}.message.received{background-color:var(--bg-primary);color:var(--text-primary);margin-right:auto;border-bottom-left-radius:4px;box-shadow:var(--shadow-sm)}.message .meta{font-size:.75rem;opacity:.7;margin-top:4px}.chat-input-area{display:flex;align-items:center;padding:16px 20px;background-color:var(--bg-primary);border-top:1px solid var(--border-color);gap:12px}.chat-input-area input{flex:1;padding:12px 16px;border:1px solid var(--border-color);border-radius:var(--radius-md);font-size:1rem;outline:none;transition:border-color var(--transition)}.chat-input-area input:focus{border-color:var(--primary-color)}.chat-input-area .voice-btn{width:48px;height:48px;border-radius:50%;background-color:var(--primary-color);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background-color var(--transition)}.chat-input-area .voice-btn:hover{background-color:var(--primary-dark)}.chat-input-area .voice-btn.recording{background-color:var(--error-color);animation:pulse 1.5s ease infinite}@keyframes pulse{0%,to{transform:scale(1)}50%{transform:scale(1.1)}}.btn{padding:12px 24px;border:none;border-radius:var(--radius-md);font-size:1rem;font-weight:500;cursor:pointer;transition:all var(--transition);display:inline-flex;align-items:center;justify-content:center;gap:8px;text-decoration:none}.btn-primary{background-color:var(--primary-color);color:#fff}.btn-primary:hover{background-color:var(--primary-dark);transform:translateY(-1px);box-shadow:var(--shadow-md)}.btn-secondary{background-color:var(--bg-primary);color:var(--text-primary);border:1px solid var(--border-color)}.btn-secondary:hover{background-color:var(--bg-secondary);border-color:var(--text-tertiary)}.btn-danger{background-color:var(--error-color);color:#fff}.btn-danger:hover{background-color:#d32f2f}.btn-success{background-color:var(--success-color);color:#fff}.btn-success:hover{background-color:#388e3c}.btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.btn-icon{width:40px;height:40px;padding:0;border-radius:50%}.input-group{margin-bottom:16px;text-align:left;width:100%}.input-group label{display:block;margin-bottom:6px;font-size:.875rem;font-weight:500;color:var(--text-secondary)}.input-group input,.input-group textarea{width:100%;padding:12px;border:1px solid var(--border-color);border-radius:var(--radius-md);font-size:1rem;font-family:inherit;outline:none;transition:border-color var(--transition)}.input-group input:focus,.input-group textarea:focus{border-color:var(--primary-color)}.input-group textarea{resize:vertical;min-height:100px}.card{background-color:var(--bg-primary);border-radius:var(--radius-lg);padding:24px;box-shadow:var(--shadow-md);margin-bottom:16px}.card h3{margin-bottom:12px;color:var(--primary-color)}.modal-overlay{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;opacity:0;pointer-events:none;transition:opacity var(--transition)}.modal-overlay.active{opacity:1;pointer-events:all}.modal{background-color:var(--bg-primary);border-radius:var(--radius-lg);padding:24px;max-width:500px;width:90%;max-height:90vh;overflow-y:auto;transform:translateY(-20px);transition:transform var(--transition)}.modal-overlay.active .modal{transform:translateY(0)}.modal h2{margin-bottom:16px;color:var(--primary-color)}.modal .modal-actions{display:flex;gap:12px;margin-top:24px;justify-content:flex-end}.fingerprint-display{display:flex;flex-direction:column;align-items:center;background-color:var(--bg-secondary);padding:16px;border-radius:var(--radius-md);margin:16px 0;text-align:center}.fingerprint-display code{display:block;font-family:Courier New,monospace;font-size:.875rem;word-break:break-all;color:var(--primary-color);font-weight:600;letter-spacing:1px}.fingerprint-display .label{font-size:.75rem;color:var(--text-secondary);margin-bottom:8px;text-transform:uppercase;letter-spacing:1px}.fingerprint-header{text-align:center;margin-bottom:24px}.fingerprint-header h3{color:var(--primary-color);margin-bottom:8px;font-size:1.25rem}.fingerprint-subtitle{color:var(--text-secondary);font-size:.875rem}.fingerprint-section{background-color:var(--bg-primary);border-radius:var(--radius-md);padding:20px;margin-bottom:16px;box-shadow:var(--shadow-sm)}.fingerprint-label{display:flex;align-items:center;justify-content:center;gap:8px;font-weight:600;color:var(--text-primary);margin-bottom:16px;font-size:1rem}.fingerprint-label svg{color:var(--primary-color)}.fingerprint-value{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:16px}.fingerprint-hash{font-family:Courier New,monospace;font-size:.875rem;color:var(--primary-color);font-weight:600;letter-spacing:1px;word-break:break-all;line-height:1.8}.copy-fingerprint-btn{background:none;border:none;color:var(--text-secondary);cursor:pointer;padding:8px;border-radius:var(--radius-sm);transition:all var(--transition);display:flex;align-items:center;justify-content:center}.copy-fingerprint-btn:hover{background-color:var(--bg-secondary);color:var(--primary-color)}.fingerprint-qr{display:flex;justify-content:center;align-items:center;min-height:160px}.fingerprint-qr canvas{border-radius:var(--radius-md);padding:8px;background-color:#fff}.qr-error{color:var(--text-secondary);font-size:.875rem}.peer-fingerprints-list{display:flex;flex-direction:column;gap:12px}.no-peers-message{text-align:center;color:var(--text-secondary);font-size:.875rem;padding:20px}.peer-fingerprint-item{background-color:var(--bg-secondary);border-radius:var(--radius-md);padding:16px;border:1px solid var(--border-color);transition:all var(--transition)}.peer-fingerprint-item:hover{box-shadow:var(--shadow-md)}.peer-fingerprint-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.peer-name{font-weight:600;color:var(--text-primary);font-size:.875rem}.verification-status{font-size:.75rem;padding:4px 8px;border-radius:var(--radius-sm);font-weight:600;text-transform:uppercase;letter-spacing:.5px}.verification-status.verified{background-color:#4caf501a;color:var(--success-color)}.verification-status.unverified{background-color:#f443361a;color:var(--error-color)}.peer-fingerprint-value{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.peer-fingerprint-value .fingerprint-hash{font-size:.75rem;flex:1}.peer-fingerprint-actions{display:flex;gap:8px}.verify-peer-btn{display:flex;align-items:center;justify-content:center;gap:6px;background-color:var(--primary-color);color:#fff;border:none;padding:8px 16px;border-radius:var(--radius-sm);font-size:.875rem;font-weight:600;cursor:pointer;transition:all var(--transition)}.verify-peer-btn:hover{background-color:var(--primary-dark)}.fingerprint-help{margin-top:24px;text-align:left}.fingerprint-help details{background-color:var(--bg-primary);border-radius:var(--radius-md);padding:16px;border:1px solid var(--border-color)}.fingerprint-help summary{cursor:pointer;font-weight:600;color:var(--primary-color);user-select:none;list-style:none;display:flex;align-items:center;gap:8px}.fingerprint-help summary::-webkit-details-marker{display:none}.fingerprint-help summary:before{content:"?";display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;background-color:var(--primary-color);color:#fff;border-radius:50%;font-size:.75rem;font-weight:600}.help-content{margin-top:16px;padding-top:16px;border-top:1px solid var(--border-color)}.help-content p{margin-bottom:12px;color:var(--text-secondary);font-size:.875rem;line-height:1.6}.help-content ol{margin-left:20px;margin-bottom:12px}.help-content li{color:var(--text-secondary);font-size:.875rem;margin-bottom:8px;line-height:1.6}.help-content code{background-color:var(--bg-secondary);padding:2px 6px;border-radius:var(--radius-sm);font-family:Courier New,monospace;font-size:.875rem;color:var(--primary-color)}.help-content .security-note{display:flex;align-items:center;gap:8px;background-color:#f443361a;color:var(--error-color);padding:12px;border-radius:var(--radius-md);font-size:.875rem;margin-top:16px}.help-content .security-note svg{flex-shrink:0}.fingerprint-verification-dialog{position:fixed;inset:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:3000;animation:fadeIn .3s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fingerprint-verification-dialog .dialog-content{background-color:var(--bg-primary);border-radius:var(--radius-lg);padding:24px;max-width:500px;width:90%;box-shadow:var(--shadow-lg)}.fingerprint-verification-dialog h3{color:var(--primary-color);margin-bottom:16px;font-size:1.25rem}.fingerprint-verification-dialog p{color:var(--text-secondary);font-size:.875rem;line-height:1.6;margin-bottom:16px}.fingerprint-to-verify{background-color:var(--bg-secondary);padding:16px;border-radius:var(--radius-md);margin:16px 0;text-align:center}.fingerprint-to-verify code{display:block;margin-top:8px;font-family:Courier New,monospace;font-size:.75rem;color:var(--primary-color);word-break:break-all;line-height:1.8;letter-spacing:1px}.warning-text{background-color:#ff98001a;color:var(--warning-color);padding:12px;border-radius:var(--radius-md);font-size:.875rem;border-left:3px solid var(--warning-color)}.dialog-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:24px}.dialog-actions .cancel-btn{background-color:var(--bg-secondary);color:var(--text-primary);border:1px solid var(--border-color);padding:10px 20px;border-radius:var(--radius-sm);font-size:.875rem;font-weight:600;cursor:pointer;transition:all var(--transition)}.dialog-actions .cancel-btn:hover{background-color:var(--bg-tertiary)}.dialog-actions .confirm-btn{display:flex;align-items:center;gap:6px;background-color:var(--success-color);color:#fff;border:none;padding:10px 20px;border-radius:var(--radius-sm);font-size:.875rem;font-weight:600;cursor:pointer;transition:all var(--transition)}.dialog-actions .confirm-btn:hover{background-color:#45a049}@media (max-width: 768px){.fingerprint-value{flex-direction:column;align-items:stretch}.fingerprint-hash{font-size:.75rem;text-align:center}.peer-fingerprint-header{flex-direction:column;align-items:flex-start;gap:8px}.peer-fingerprint-value{flex-direction:column;align-items:stretch}.peer-fingerprint-actions{flex-direction:column}.verify-peer-btn{width:100%}.dialog-actions{flex-direction:column}.dialog-actions button{width:100%}.fingerprint-verification-dialog .dialog-content{width:95%;padding:20px}}.peer-list{display:flex;flex-direction:column;gap:8px}.peer-item{display:flex;align-items:center;gap:12px;padding:12px;background-color:var(--bg-secondary);border-radius:var(--radius-md);transition:background-color var(--transition)}.peer-item:hover{background-color:var(--bg-tertiary)}.peer-item .avatar{width:40px;height:40px;border-radius:50%;background-color:var(--primary-color);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:600}.peer-item .info{flex:1}.peer-item .info .name{font-weight:600;color:var(--text-primary)}.peer-item .info .status{font-size:.875rem;color:var(--text-secondary)}.peer-item .status-indicator{width:10px;height:10px;border-radius:50%;background-color:var(--success-color)}.status-indicator{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}.status-indicator.connecting{background-color:var(--warning-color);animation:pulse 1.5s ease-in-out infinite}.status-indicator.connected{background-color:var(--success-color)}.status-indicator.error{background-color:var(--error-color)}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.2)}}.qr-code{display:flex;flex-direction:column;align-items:center;gap:16px;padding:24px;background-color:var(--bg-secondary);border-radius:var(--radius-lg)}.qr-code canvas,.qr-code img{max-width:256px;height:auto}.qr-code .room-id{font-family:Courier New,monospace;font-size:.875rem;color:var(--text-secondary);word-break:break-all;text-align:center}.toast-container{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);z-index:2000;display:flex;flex-direction:column;gap:12px;align-items:center}.toast{background-color:var(--bg-primary);border-radius:var(--radius-md);padding:16px 20px;box-shadow:var(--shadow-lg);display:flex;align-items:center;gap:12px;min-width:300px;animation:toastIn .3s ease}.toast.exiting{animation:toastOut .3s ease forwards}@keyframes toastIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.toast.success{border-left:4px solid var(--success-color)}.toast.error{border-left:4px solid var(--error-color)}.toast.warning{border-left:4px solid var(--warning-color)}.toast.info{border-left:4px solid var(--primary-color)}.call-overlay{position:fixed;inset:0;background:linear-gradient(135deg,var(--primary-dark) 0%,var(--primary-color) 100%);display:flex;align-items:center;justify-content:center;z-index:2000;animation:fadeIn .3s ease}.call-container{text-align:center;color:#fff;padding:40px;max-width:400px}.video-call-container{width:min(960px,calc(100vw - 32px));max-width:none;padding:24px}.multi-call-container{width:min(1040px,calc(100vw - 32px));max-width:none}.video-call-stage{position:relative;width:100%;aspect-ratio:16 / 9;background:#00000059;border-radius:var(--radius-md);overflow:hidden;margin-bottom:20px;box-shadow:var(--shadow-lg)}.video-call-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;width:100%;max-height:min(62vh,620px);overflow-y:auto;margin-bottom:20px}.video-participant-tile{position:relative;min-height:160px;aspect-ratio:16 / 9;background:#00000059;border-radius:var(--radius-md);overflow:hidden;box-shadow:var(--shadow-md)}.remote-call-video{width:100%;height:100%;object-fit:cover;display:block;background:#111}.local-call-video{width:100%;height:100%;object-fit:cover;background:#111;display:block}.remote-video-placeholder{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#ffffffbf;font-size:.875rem;pointer-events:none}.participant-label{position:absolute;left:10px;bottom:10px;max-width:calc(100% - 56px);padding:4px 8px;background:#0000008c;color:#fff;border-radius:var(--radius-sm);font-size:.8125rem;line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.participant-end-btn{position:absolute;top:8px;right:8px;width:32px;height:32px;border:0;border-radius:50%;background:#dc2626e6;color:#fff;font-size:1.25rem;line-height:1;cursor:pointer}.call-participant-list{width:min(420px,100%);margin:0 auto 24px}.call-participant-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.18)}.call-participant-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.call-participant-row .btn{flex:0 0 auto}.video-call-container .call-avatar{display:none}.video-call-container .call-duration{margin:8px 0 20px}.call-avatar{width:120px;height:120px;margin:0 auto 24px;background:#fff3;border-radius:50%;display:flex;align-items:center;justify-content:center;animation:pulse 2s ease-in-out infinite}.call-avatar svg{color:#fff;width:64px;height:64px}.call-container h2{font-size:1.5rem;margin-bottom:8px;font-weight:600}.call-container .caller-name{font-size:1.125rem;opacity:.9;margin-bottom:16px}.call-status{font-size:.875rem;opacity:.75;margin-bottom:32px}.call-duration{font-size:2rem;font-weight:700;margin:16px 0 32px;font-family:Courier New,monospace}.call-actions{display:flex;gap:16px;justify-content:center;align-items:center}.call-actions .btn-lg{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:transform .2s ease}.call-actions .btn-lg:hover{transform:scale(1.1)}.call-actions .btn-lg:active{transform:scale(.95)}.call-actions .btn-lg.muted{background-color:var(--warning-color);color:#fff}@media (max-width: 640px){.video-call-container{width:calc(100vw - 20px);padding:16px}.local-call-video{width:100%}.video-call-grid{grid-template-columns:1fr;max-height:56vh}.call-actions{gap:10px}.call-actions .btn-lg{width:56px;height:56px}}.call-animation{position:relative;width:120px;height:120px;margin:0 auto 32px}.pulse-ring{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:100%;height:100%;border:2px solid rgba(255,255,255,.3);border-radius:50%;animation:ripple 2s ease-out infinite}.pulse-ring:nth-child(2){animation-delay:.6s}.pulse-ring:nth-child(3){animation-delay:1.2s}@keyframes ripple{0%{width:120px;height:120px;opacity:1}to{width:240px;height:240px;opacity:0}}.voice-btn.recording{background-color:var(--error-color);color:#fff;animation:recordingPulse 1.5s ease-in-out infinite}@keyframes recordingPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(1.05)}}.voice-message{max-width:70%;margin:8px 0}.voice-message.sent{margin-left:auto}.voice-message.received{margin-right:auto}.voice-message-content{background:var(--bg-primary);border-radius:var(--radius-lg);padding:12px 16px;box-shadow:var(--shadow-sm)}.voice-message.sent .voice-message-content{background:var(--primary-color);color:#fff}.voice-message-header{display:flex;align-items:center;gap:8px;margin-bottom:8px}.voice-message-icon{width:32px;height:32px;border-radius:50%;background:#0000001a;display:flex;align-items:center;justify-content:center}.voice-message.sent .voice-message-icon{background:#fff3}.voice-message-duration{font-size:.75rem;opacity:.75}.voice-message-audio{width:100%;margin-top:8px}.voice-message-audio audio{width:100%;height:36px}.voice-message-meta{font-size:.75rem;opacity:.75;margin-top:8px}.voice-waveform{display:flex;align-items:center;gap:2px;height:24px;margin:8px 0}.voice-waveform-bar{width:3px;background:#0000004d;border-radius:1.5px;animation:waveform .5s ease-in-out infinite alternate}.voice-message.sent .voice-waveform-bar{background:#ffffff80}@keyframes waveform{0%{height:4px}to{height:20px}}@media (max-width: 768px){.view{padding:16px}.home-view h1{font-size:2rem}.home-view p{font-size:1rem}.message{max-width:85%}.chat-header h2{font-size:1rem}.toast-container{top:50%;left:50%;transform:translate(-50%,-50%);max-width:90vw}.toast{min-width:auto;width:auto;max-width:90vw}.modal{width:95%;padding:20px}}@media (max-width: 480px){.view{padding:12px}.home-actions{max-width:100%}.chat-messages{padding:12px}.chat-input-area{padding:12px;gap:8px}.chat-input-area .voice-btn{width:40px;height:40px}}@media (prefers-color-scheme: dark){:root{--bg-primary: #1e1e1e;--bg-secondary: #121212;--bg-tertiary: #2c2c2c;--text-primary: #ffffff;--text-secondary: #b0b0b0;--text-tertiary: #757575;--border-color: #2c2c2c}}
