*,:after,:before{box-sizing:border-box;margin:0;padding:0}:root{--bg:#0f172a;--surface:#1e293b;--surface2:#334155;--border:#475569;--text:#f1f5f9;--text-muted:#94a3b8;--accent:#3b82f6;--accent-hover:#2563eb;--danger:#ef4444;--success:#22c55e}[data-theme=light]{--bg:#f8fafc;--surface:#ffffff;--surface2:#e2e8f0;--border:#cbd5e1;--text:#0f172a;--text-muted:#64748b}@media (min-width:769px){html{scrollbar-gutter:stable}}body,html{height:100%;background:var(--bg);font-family:system-ui,-apple-system,sans-serif;font-size:14px;overflow-x:hidden}body,button,html{color:var(--text)}button{cursor:pointer;border:1px solid var(--border);border-radius:6px;padding:6px 14px;background:var(--surface2);font-size:13px;transition:background .15s}button:hover:not(:disabled){background:var(--border)}button:disabled{opacity:.4;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}button.primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}button.danger{background:var(--danger);border-color:var(--danger);color:#fff}input,textarea{background:var(--surface);border:1px solid var(--border);border-radius:6px;color:var(--text);font-size:13px;padding:6px 10px;outline:none}input:focus,textarea:focus{border-color:var(--accent)}.app{position:relative;display:flex;flex-direction:column;min-height:100vh;padding:16px;gap:16px;max-width:100%;overflow-x:hidden}.media-error{background:#7f1d1d;border:1px solid var(--danger);color:#fecaca;padding:10px 14px;border-radius:6px;font-size:13px;cursor:pointer}.connect-screen{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;min-height:60vh}.connect-screen h1{font-size:24px;font-weight:700}.connect-screen p{color:var(--text-muted);text-align:center;max-width:380px}.room-list{max-width:540px;margin:0 auto;width:100%;display:flex;flex-direction:column;gap:16px;padding-top:28px}.room-list h2{font-size:18px}.create-form{display:flex;gap:8px}.create-form input{flex:1 1}.rooms-table{display:flex;flex-direction:column;gap:8px}.room-row{display:flex;align-items:center;justify-content:space-between;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:10px 14px}.room-row .room-name{font-weight:600}.room-row .room-id{color:var(--text-muted);font-size:12px}.room-row.room-full{opacity:.5}.room-occupancy{font-size:13px;font-weight:600;color:var(--text-muted);white-space:nowrap}.no-rooms{color:var(--text-muted);text-align:center;padding:24px 0}.room-container{display:grid;grid-template-columns:1fr 1fr;grid-gap:16px;gap:16px}@media (max-width:768px){.room-container{grid-template-columns:1fr}}.peer-indicator{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--text-muted)}.peer-dot{width:7px;height:7px;border-radius:50%;background:var(--text-muted);flex-shrink:0}.peer-indicator.connected .peer-dot{background:var(--success)}.peer-indicator.connected{color:var(--success)}.peer-indicator.reconnecting .peer-dot{background:#f59e0b}.peer-indicator.reconnecting{color:#f59e0b}.peer-indicator.disconnected .peer-dot{background:var(--danger)}.peer-indicator.disconnected{color:var(--danger)}.relay-badge{font-size:10px;font-weight:600;background:#f59e0b;color:#000;padding:1px 5px;border-radius:3px;margin-left:2px}.video-panel{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:10px}.video-panel h3{font-size:14px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.videos{display:flex;flex-direction:column;gap:8px}.video-wrapper{width:100%;height:38vh;position:relative;background:#000;border-radius:8px;overflow:hidden}.video-wrapper video{width:100%;height:100%;object-fit:contain;display:block}.video-wrapper .label{position:absolute;bottom:6px;left:8px;font-size:11px;background:rgba(0,0,0,.55);border-radius:4px;padding:2px 6px;color:#fff}.no-remote{justify-content:center;width:100%;height:38vh;background:var(--surface2);border-radius:8px}.no-remote,.video-toggle{display:flex;align-items:center;color:var(--text-muted);font-size:13px}.video-toggle{gap:6px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.video-toggle input{display:none}.video-toggle-slider{position:relative;width:32px;height:18px;background:var(--surface2);border-radius:9px;transition:background .2s}.video-toggle-slider:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;background:var(--text-muted);border-radius:50%;transition:transform .2s,background .2s}.video-toggle input:checked+.video-toggle-slider{background:#3b82f6}.video-toggle input:checked+.video-toggle-slider:after{transform:translateX(14px);background:#fff}.video-toggle i{font-size:12px}.audio-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;width:100%;height:38vh;background:var(--surface2);border-radius:8px;color:var(--text-muted);position:relative}.audio-placeholder i.fa-headset{font-size:48px;opacity:.6}.audio-placeholder span{font-size:13px}.audio-placeholder .media-controls,.fullscreen-btn{position:absolute;top:8px;right:8px}.fullscreen-btn{width:36px;height:36px;padding:0;border-radius:50%;font-size:14px;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5);border-color:transparent;color:#fff;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:10}.fullscreen-btn:hover:not(:disabled){background:rgba(0,0,0,.7)}.video-wrapper:-webkit-full-screen{width:100%;height:100%;border-radius:0;background:#000}.video-wrapper:fullscreen{width:100%;height:100%;border-radius:0;background:#000}.video-wrapper:-webkit-full-screen video{width:100%;height:100%;object-fit:contain}.video-wrapper:fullscreen video{width:100%;height:100%;object-fit:contain}.whiteboard{height:100%;background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:10px}.whiteboard h3{font-size:14px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.toolbar{flex-wrap:wrap;gap:10px}.toolbar,.toolbar-group{display:flex;align-items:center}.toolbar-group{gap:4px;border:1px solid var(--border);border-radius:8px;padding:4px;background:var(--surface2)}.color-swatch{width:22px;height:22px;border-radius:50%;border:2px solid transparent;padding:0;min-width:unset;flex-shrink:0}.color-swatch.active{border-color:var(--accent);outline:2px solid var(--accent);outline-offset:1px}.width-btn{width:32px;height:32px;display:flex;align-items:center;justify-content:center;padding:0;min-width:unset;border-radius:6px}.width-btn.active{background:var(--accent);border-color:var(--accent)}.width-dot{border-radius:50%;background:var(--text);flex-shrink:0}.tool-btn{padding:5px 12px;border-radius:6px;font-size:13px;text-transform:capitalize}.tool-btn.active{background:var(--accent);border-color:var(--accent);color:#fff}.toolbar-actions{display:flex;gap:6px;margin-left:auto}.canvas-container{position:relative;flex:1 1;min-height:0}.whiteboard-canvas{width:100%;height:100%;border-radius:8px;background:#ffffff;display:block;touch-action:none;cursor:crosshair}.sticky-note{position:absolute;border-radius:4px;box-shadow:0 2px 6px rgba(0,0,0,.15);display:flex;flex-direction:column;overflow:hidden;font-size:12px;cursor:-webkit-grab;cursor:grab;-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:none}.sticky-note-delete{position:absolute;top:2px;right:2px;width:18px;height:18px;padding:0;border:none;border-radius:50%;background:rgba(0,0,0,.15);color:#333;font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;cursor:pointer;min-width:unset}.sticky-note-delete:hover{background:rgba(0,0,0,.3)}.sticky-note-text{flex:1 1;padding:22px 6px 6px;font-size:12px;color:#1a1a1a;outline:none;overflow:hidden;word-break:break-word;cursor:text;-webkit-user-select:text;-moz-user-select:text;user-select:text}.bottom-panel{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;grid-gap:16px;gap:16px}.bottom-right{display:flex;gap:16px;min-width:0}.bottom-right .file-transfer,.bottom-right .investing-widget,.bottom-right .notepad{flex:1 1;min-width:0}@media (max-width:1024px){.bottom-right{flex-direction:column}.bottom-right .investing-widget{flex:none;width:100%}}@media (max-width:768px){.whiteboard{min-height:60vh}.bottom-panel{grid-template-columns:1fr}.notepad{width:100%}}.chat{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:10px;min-height:280px}.chat h3{font-size:14px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.messages{flex:1 1;overflow-y:auto;gap:6px;min-height:80px;padding:4px 0}.message,.messages{display:flex;flex-direction:column}.message{gap:2px}.message .sender{font-size:11px;color:var(--text-muted)}.message.self .sender{color:var(--accent);text-align:right}.message .bubble{background:var(--surface2);border-radius:8px;padding:6px 10px;max-width:80%;word-break:break-word;font-size:13px}.message.self .bubble{background:var(--accent);color:#fff;margin-left:auto}.chat-input-row,.chat-name-row{display:flex;gap:6px}.chat-input-row input{flex:1 1}.emoji-btn{width:34px;height:34px;padding:0;border-radius:6px;font-size:18px;display:flex;align-items:center;justify-content:center;min-width:unset;flex-shrink:0;line-height:1}.emoji-picker{display:flex;flex-wrap:wrap;gap:2px;padding:6px;background:var(--surface2);border:1px solid var(--border);border-radius:8px}.emoji-item{width:32px;height:32px;padding:0;border:none;border-radius:4px;background:transparent;font-size:18px;display:flex;align-items:center;justify-content:center;cursor:pointer;min-width:unset}.emoji-item:hover{background:var(--border)}.notepad{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:10px;flex:1 1;min-width:120px}.notepad h3{font-size:14px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.notepad-toolbar{display:flex;align-items:center;gap:3px;flex-wrap:wrap}.notepad-toolbar button{width:28px;height:26px;padding:0;border:none;border-radius:4px;background:transparent;color:var(--text);font-size:12px;display:flex;align-items:center;justify-content:center;cursor:pointer;min-width:unset}.notepad-toolbar button:hover{background:var(--surface2)}.notepad-toolbar-sep{width:1px;height:18px;background:var(--border);margin:0 2px;flex-shrink:0}.notepad-color-picker{position:absolute;top:100%;left:0;margin-top:4px;display:flex;gap:3px;padding:5px;background:var(--surface);border:1px solid var(--border);border-radius:6px;box-shadow:0 4px 12px rgba(0,0,0,.2);z-index:20}.notepad-color-swatch{width:18px;height:18px;border-radius:50%;padding:0;min-width:unset;cursor:pointer}.notepad-editor{flex:1 1;min-height:180px;max-height:300px;font-size:13px;padding:8px 10px;background:var(--surface);border:1px solid var(--border);border-radius:6px;color:var(--text);outline:none;overflow-y:auto;word-break:break-word;line-height:1.5}.notepad-editor:focus{border-color:var(--accent)}.notepad-editor:empty:before{content:attr(data-placeholder);color:var(--text-muted);pointer-events:none}.file-transfer{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:10px}.file-transfer h3{font-size:14px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.file-pick-row{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.file-pick-row input[type=file]{width:100%;min-width:0}.received-files{display:flex;flex-direction:column;gap:6px}.received-file{display:flex;align-items:center;justify-content:space-between;background:var(--surface2);border-radius:8px;padding:8px 12px;font-size:13px}.received-file a{color:var(--accent);text-decoration:none}.received-file a:hover{text-decoration:underline}.theme-toggle{top:12px;right:12px;width:36px;height:36px;border-radius:50%;align-items:center;justify-content:center;padding:0;font-size:18px;background:var(--surface2);border:1px solid var(--border);line-height:1;z-index:20}.media-controls,.theme-toggle{position:absolute;display:flex}.media-controls{top:8px;right:8px;flex-direction:column;gap:6px;z-index:10}.media-controls button{width:36px;height:36px;padding:0;border-radius:50%;font-size:14px;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5);border-color:transparent;color:#fff;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}.media-controls button:hover:not(:disabled){background:rgba(0,0,0,.7)}.media-controls button.off{background:var(--danger);border-color:transparent;color:#fff}.media-controls button.active{background:var(--accent);border-color:transparent;color:#fff}.copy-link-btn{font-size:13px;padding:4px 12px;border-radius:6px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.copy-link-btn .copy-label{display:inline}.hangup-btn,.leave-btn{font-size:13px;padding:4px 12px;border-radius:6px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.hangup-btn{background:var(--danger);border-color:var(--danger);color:#fff}.hangup-btn:hover:not(:disabled){background:#dc2626;border-color:#dc2626}@media (max-width:1024px){.copy-link-btn .copy-label,.hangup-label,.leave-label,.save-load-label{display:none}.copy-link-btn,.hangup-btn,.leave-btn,.save-load-btn{padding:4px 8px}}@media (max-width:768px){.theme-toggle{right:1px}.video-panel>div:first-child{padding-right:40px}}.copy-link-icon{width:32px;height:32px;padding:0;border-radius:6px;font-size:13px;display:flex;align-items:center;justify-content:center}.spinner{width:32px;height:32px;border:3px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.image-overlay{position:absolute;background:transparent;border:2px solid transparent;cursor:-webkit-grab;cursor:grab;touch-action:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.image-overlay:hover{border-color:var(--accent)}.image-overlay-delete{position:absolute;top:2px;right:2px;width:18px;height:18px;padding:0;border:none;border-radius:50%;background:rgba(0,0,0,.5);color:#fff;font-size:11px;line-height:1;display:none;align-items:center;justify-content:center;cursor:pointer;min-width:unset}.image-overlay:hover .image-overlay-delete{display:flex}.image-resize-handle{position:absolute;bottom:0;right:0;width:14px;height:14px;cursor:nwse-resize;background:var(--accent);border-radius:2px 0;opacity:0;touch-action:none}.image-overlay:hover .image-resize-handle{opacity:1}.toggle-switch{display:flex;align-items:center;gap:6px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.toggle-switch input{display:none}.toggle-slider{position:relative;width:34px;height:18px;background:var(--border);border-radius:9px;transition:background .2s;flex-shrink:0}.toggle-slider:after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;background:#fff;border-radius:50%;transition:transform .2s}.toggle-switch input:checked+.toggle-slider{background:var(--accent)}.toggle-switch input:checked+.toggle-slider:after{transform:translateX(16px)}.toggle-label{font-size:12px;color:var(--text-muted)}.save-load-btn{font-size:13px;padding:4px 12px;border-radius:6px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;z-index:100;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.modal{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;width:90%;max-width:400px;display:flex;flex-direction:column;gap:12px}.modal.modal-wide{max-width:520px}.modal h3{font-size:16px;margin:0}.modal form{display:flex;flex-direction:column;gap:10px}.modal-error{background:#7f1d1d;border:1px solid var(--danger);color:#fecaca;padding:6px 10px;border-radius:6px;font-size:13px}.modal-actions{display:flex;gap:8px;justify-content:flex-end}.password-prompt{display:flex;flex-direction:column;gap:8px;font-size:13px;padding:10px;background:var(--surface2);border-radius:8px}.password-prompt input{width:100%}.password-prompt-actions{display:flex;gap:8px}.saved-states-list{display:flex;flex-direction:column;gap:6px;max-height:320px;overflow-y:auto}.saved-state-row{display:flex;align-items:center;justify-content:space-between;gap:8px;background:var(--surface2);border-radius:8px;padding:8px 12px}.saved-state-info{display:flex;flex-direction:column;gap:2px;min-width:0}.saved-state-name{font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.saved-state-date{font-size:11px;color:var(--text-muted)}.saved-state-actions{display:flex;gap:6px;flex-shrink:0}.saved-state-actions button{padding:4px 10px;font-size:12px}.start-call-btn{font-size:13px;padding:4px 12px;border-radius:6px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap;background:var(--success);border-color:var(--success);color:#fff;font-weight:600}.start-call-btn:hover:not(:disabled){background:#16a34a;border-color:#16a34a}.start-call-btn.video{background:var(--accent);border-color:var(--accent)}.start-call-btn.video:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.call-requesting{display:flex;align-items:center;gap:8px}.call-requesting-text{font-size:13px;color:var(--text-muted);animation:pulse-text 1.5s ease-in-out infinite}@keyframes pulse-text{0%,to{opacity:1}50%{opacity:.4}}.cancel-call-btn{font-size:13px;padding:4px 12px;border-radius:6px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap}.call-incoming{display:flex;align-items:center;gap:8px}.call-incoming-text{font-size:13px;font-weight:600;color:var(--success);animation:pulse-text 1.5s ease-in-out infinite}.accept-call-btn{font-size:13px;padding:4px 12px;border-radius:6px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap;background:var(--success);border-color:var(--success);color:#fff}.accept-call-btn:hover:not(:disabled){background:#16a34a;border-color:#16a34a}.decline-call-btn{font-size:13px;padding:4px 12px;border-radius:6px;display:inline-flex;align-items:center;gap:4px;white-space:nowrap;background:var(--danger);border-color:var(--danger);color:#fff}.decline-call-btn:hover:not(:disabled){background:#dc2626;border-color:#dc2626}.call-placeholder{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;width:100%;height:calc(76vh + 8px);background:var(--surface2);border-radius:8px;color:var(--text-muted);font-size:14px}.call-incoming-actions{display:flex;gap:12px;margin-top:4px}.call-pulse{width:48px;height:48px;border-radius:50%;background:var(--accent);animation:call-ring 1.5s ease-in-out infinite}.call-pulse.incoming{background:var(--success)}@keyframes call-ring{0%{transform:scale(1);opacity:1}50%{transform:scale(1.3);opacity:.5}to{transform:scale(1);opacity:1}}@media (max-width:1024px){.accept-call-label,.cancel-call-label,.decline-call-label,.start-call-label{display:none}.accept-call-btn,.cancel-call-btn,.decline-call-btn,.start-call-btn{padding:4px 8px}}@media (max-width:768px){.call-placeholder{height:38vh}}.chat.disabled,.file-transfer.disabled{opacity:.45;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.attach-btn{width:34px;height:34px;padding:0;border-radius:6px;font-size:16px;display:flex;align-items:center;justify-content:center;min-width:unset;flex-shrink:0}.file-message .file-bubble{display:flex;align-items:center;gap:8px;font-size:13px}.file-download-link{color:var(--accent);text-decoration:none;font-weight:600;margin-left:auto}.file-download-link:hover{text-decoration:underline}.investing-widget{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:12px;display:flex;flex-direction:column;gap:8px;min-width:0;overflow:hidden}.investing-widget h3{font-size:14px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin:0}.market-header{display:flex;align-items:center;justify-content:space-between;gap:6px;flex-wrap:wrap;min-width:0}.range-switcher{display:flex;gap:2px;background:var(--surface2);border-radius:6px;padding:2px;flex-shrink:0}.range-btn{padding:2px 8px;border:none;border-radius:4px;font-size:11px;font-weight:600;background:transparent;color:var(--text-muted);min-width:unset;cursor:pointer}.range-btn.active{background:var(--accent);color:#fff}.range-btn:hover:not(.active){color:var(--text)}.market-grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:6px;gap:6px}@media (min-width:400px){.market-grid{grid-template-columns:repeat(3,1fr)}}.market-card{background:var(--surface2);border-radius:8px;padding:6px 8px;display:flex;flex-direction:column;gap:1px;min-width:0;overflow:hidden}.market-card-top{display:flex;align-items:center;justify-content:space-between;gap:4px}.market-label{font-size:11px;color:var(--text-muted);font-weight:600;text-transform:uppercase}.market-label,.market-price{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.market-price{font-size:13px;font-weight:700}.market-change{font-size:11px;font-weight:600;white-space:nowrap;flex-shrink:0}.price-up{color:#22c55e}.price-down{color:#ef4444}.sparkline{display:block;width:100%;height:24px;margin-top:2px}.template-menu{position:absolute;top:100%;right:0;margin-top:4px;background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:4px;display:flex;flex-direction:column;gap:2px;z-index:20;min-width:160px;box-shadow:0 4px 12px rgba(0,0,0,.2)}.template-menu button{text-align:left;padding:6px 10px;border:none;border-radius:6px;font-size:13px;white-space:nowrap}.template-menu button:hover{background:var(--surface2)}.remote-cursor{position:absolute;pointer-events:none;z-index:15;transform:translate(-4px,-4px);transition:left .05s linear,top .05s linear}.remote-cursor-dot{width:8px;height:8px;border-radius:50%;background:#f59e0b;border:1.5px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.3)}.remote-cursor-label{position:absolute;left:12px;top:-2px;background:#f59e0b;color:#000;font-size:10px;font-weight:600;padding:1px 5px;border-radius:3px;white-space:nowrap;box-shadow:0 1px 3px rgba(0,0,0,.2)}@media (max-width:768px){.notepad{width:100%;flex:none}.file-pick-row{flex-direction:row;align-items:center}.file-pick-row input[type=file]{flex:1 1;width:0}}