From e4d3947046b8078f95b704877a29debc19f85ade Mon Sep 17 00:00:00 2001 From: Warexpor Date: Fri, 21 Aug 2026 22:35:16 +0300 Subject: [PATCH 1/4] Rebuild the connected shell as a B&W signal bench around pathAggregate. --- .../assets/bricolage-latin-400-A6LyuA6R.woff2 | Bin 0 -> 22364 bytes .../assets/bricolage-latin-500-DEDBoLFO.woff2 | Bin 0 -> 22476 bytes .../assets/bricolage-latin-600-nxTgbNFE.woff2 | Bin 0 -> 22456 bytes .../ibm-plex-mono-latin-400-Dm_PoFIZ.woff2 | Bin 0 -> 14812 bytes .../ibm-plex-mono-latin-500-C_OblDzq.woff2 | Bin 0 -> 14988 bytes ...plex-serif-latin-400-italic-yImJBWyJ.woff2 | Bin 0 -> 20864 bytes client/frontend/dist/assets/index-5j6ZJn19.js | 2 - .../frontend/dist/assets/index-B_zURlVB.css | 1 + client/frontend/dist/assets/index-D0bYtgrH.js | 1 + .../frontend/dist/assets/index-coA7a2P7.css | 1 - client/frontend/dist/index.html | 4 +- client/frontend/src/App.svelte | 156 ++--- client/frontend/src/app.css | 2 +- .../assets/fonts/bricolage-latin-400.woff2 | Bin 0 -> 22364 bytes .../assets/fonts/bricolage-latin-500.woff2 | Bin 0 -> 22476 bytes .../assets/fonts/bricolage-latin-600.woff2 | Bin 0 -> 22456 bytes .../fonts/ibm-plex-mono-latin-400.woff2 | Bin 0 -> 14812 bytes .../fonts/ibm-plex-mono-latin-500.woff2 | Bin 0 -> 14988 bytes .../ibm-plex-serif-latin-400-italic.woff2 | Bin 0 -> 20864 bytes client/frontend/src/connected.css | 461 +++++++++++++++ .../src/lib/components/ChatView.svelte | 169 +++--- .../src/lib/components/ConfirmDialog.svelte | 82 +++ .../src/lib/components/PeerList.svelte | 457 ++++++++------- .../src/lib/components/SettingsView.svelte | 534 ++++++++++-------- .../src/lib/components/Sidebar.svelte | 250 ++++---- .../src/lib/components/StatusBar.svelte | 108 ---- .../src/lib/components/ThemeToggle.svelte | 45 ++ .../frontend/src/lib/components/Topbar.svelte | 191 +++++++ client/frontend/src/lib/locales/en.js | 17 +- client/frontend/src/lib/locales/ru.js | 17 +- client/frontend/src/lib/locales/zh.js | 5 + client/frontend/src/lib/sim.js | 169 ++++++ client/frontend/src/lib/stores/app.js | 4 +- client/frontend/src/main.js | 1 + 34 files changed, 1824 insertions(+), 853 deletions(-) create mode 100644 client/frontend/dist/assets/bricolage-latin-400-A6LyuA6R.woff2 create mode 100644 client/frontend/dist/assets/bricolage-latin-500-DEDBoLFO.woff2 create mode 100644 client/frontend/dist/assets/bricolage-latin-600-nxTgbNFE.woff2 create mode 100644 client/frontend/dist/assets/ibm-plex-mono-latin-400-Dm_PoFIZ.woff2 create mode 100644 client/frontend/dist/assets/ibm-plex-mono-latin-500-C_OblDzq.woff2 create mode 100644 client/frontend/dist/assets/ibm-plex-serif-latin-400-italic-yImJBWyJ.woff2 delete mode 100644 client/frontend/dist/assets/index-5j6ZJn19.js create mode 100644 client/frontend/dist/assets/index-B_zURlVB.css create mode 100644 client/frontend/dist/assets/index-D0bYtgrH.js delete mode 100644 client/frontend/dist/assets/index-coA7a2P7.css create mode 100644 client/frontend/src/assets/fonts/bricolage-latin-400.woff2 create mode 100644 client/frontend/src/assets/fonts/bricolage-latin-500.woff2 create mode 100644 client/frontend/src/assets/fonts/bricolage-latin-600.woff2 create mode 100644 client/frontend/src/assets/fonts/ibm-plex-mono-latin-400.woff2 create mode 100644 client/frontend/src/assets/fonts/ibm-plex-mono-latin-500.woff2 create mode 100644 client/frontend/src/assets/fonts/ibm-plex-serif-latin-400-italic.woff2 create mode 100644 client/frontend/src/connected.css create mode 100644 client/frontend/src/lib/components/ConfirmDialog.svelte delete mode 100644 client/frontend/src/lib/components/StatusBar.svelte create mode 100644 client/frontend/src/lib/components/ThemeToggle.svelte create mode 100644 client/frontend/src/lib/components/Topbar.svelte create mode 100644 client/frontend/src/lib/sim.js diff --git a/client/frontend/dist/assets/bricolage-latin-400-A6LyuA6R.woff2 b/client/frontend/dist/assets/bricolage-latin-400-A6LyuA6R.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ccc73da04295079bc844d0230e766cb622944c7f GIT binary patch literal 22364 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 H@rBy~ld

  1. 7WCS1ugE|L^a}0wt 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

    75CNIK|LQ=k&v}yD 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 Wm+jZ3c#rX>OWE+pg-nQ{F3fEmM~x%^ literal 0 HcmV?d00001 diff --git a/client/frontend/dist/assets/ibm-plex-serif-latin-400-italic-yImJBWyJ.woff2 b/client/frontend/dist/assets/ibm-plex-serif-latin-400-italic-yImJBWyJ.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5645b4d3b1cef856af5cf74d3843c04e40dcc31b GIT binary patch literal 20864 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 zcn+xy{for(const a of o)if(a.type==="childList")for(const r of a.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&i(r)}).observe(document,{childList:!0,subtree:!0});function n(o){const a={};return o.integrity&&(a.integrity=o.integrity),o.referrerPolicy&&(a.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?a.credentials="include":o.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function i(o){if(o.ep)return;o.ep=!0;const a=n(o);fetch(o.href,a)}})();function de(){}function Ti(t){return t()}function Gs(){return Object.create(null)}function Le(t){t.forEach(Ti)}function Gl(t){return typeof t=="function"}function dt(t,e){return t!=t?e==e:t!==e||t&&typeof t=="object"||typeof t=="function"}function Wi(t){return Object.keys(t).length===0}function Vl(t,...e){if(t==null){for(const i of e)i(void 0);return de}const n=t.subscribe(...e);return n.unsubscribe?()=>n.unsubscribe():n}function on(t){let e;return Vl(t,n=>e=n)(),e}function ve(t,e,n){t.$$.on_destroy.push(Vl(e,n))}function Ze(t,e,n){return t.set(n),e}function l(t,e){t.appendChild(e)}function K(t,e,n){t.insertBefore(e,n||null)}function F(t){t.parentNode&&t.parentNode.removeChild(t)}function c(t){return document.createElement(t)}function g(t){return document.createTextNode(t)}function h(){return g(" ")}function Ul(){return g("")}function W(t,e,n,i){return t.addEventListener(e,n,i),()=>t.removeEventListener(e,n,i)}function Gt(t){return function(e){return e.stopPropagation(),t.call(this,e)}}function s(t,e,n){n==null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n)}function Fi(t){let e;return{p(...n){e=n,e.forEach(i=>t.push(i))},r(){e.forEach(n=>t.splice(t.indexOf(n),1))}}}function Oi(t){return t===""?null:+t}function Ki(t){return Array.from(t.childNodes)}function b(t,e){e=""+e,t.data!==e&&(t.data=e)}function ie(t,e){t.value=e??""}function Vs(t,e,n,i){n==null?t.style.removeProperty(e):t.style.setProperty(e,n,"")}function xn(t,e,n){for(let i=0;ii.call(this,e))}const Kt=[],Vt=[];let Jt=[];const Bs=[],Vi=Promise.resolve();let zl=!1;function Bi(){zl||(zl=!0,Vi.then(qi))}function tl(t){Jt.push(t)}const ql=new Set;let Wt=0;function qi(){if(Wt!==0)return;const t=rn;do{try{for(;Wtt.indexOf(i)===-1?e.push(i):n.push(i)),n.forEach(i=>i()),Jt=e}const el=new Set;let vt;function Ui(){vt={r:0,c:[],p:vt}}function zi(){vt.r||Le(vt.c),vt=vt.p}function Ye(t,e){t&&t.i&&(el.delete(t),t.i(e))}function lt(t,e,n,i){if(t&&t.o){if(el.has(t))return;el.add(t),vt.c.push(()=>{el.delete(t),i&&(n&&t.d(1),i())}),t.o(e)}else i&&i()}function ft(t){return t?.length!==void 0?t:Array.from(t)}function ll(t,e){t.d(1),e.delete(t.key)}function sl(t,e,n,i,o,a,r,_,d,u,v,f){let m=t.length,j=a.length,w=m;const A={};for(;w--;)A[t[w].key]=w;const p=[],C=new Map,D=new Map,P=[];for(w=j;w--;){const I=f(o,a,w),J=n(I);let B=r.get(J);B?P.push(()=>B.p(I,e)):(B=u(J,I),B.c()),C.set(J,p[w]=B),J in A&&D.set(J,Math.abs(w-A[J]))}const k=new Set,N=new Set;function y(I){Ye(I,1),I.m(_,v),r.set(I.key,I),v=I.first,j--}for(;m&&j;){const I=p[j-1],J=t[m-1],B=I.key,S=J.key;I===J?(v=I.first,m--,j--):C.has(S)?!r.has(B)||k.has(B)?y(I):N.has(S)?m--:D.get(B)>D.get(S)?(N.add(B),y(I)):(k.add(S),m--):(d(J,r),m--)}for(;m--;){const I=t[m];C.has(I.key)||d(I,r)}for(;j;)y(p[j-1]);return Le(P),p}function Bt(t){t&&t.c()}function mt(t,e,n){const{fragment:i,after_update:o}=t.$$;i&&i.m(e,n),tl(()=>{const a=t.$$.on_mount.map(Ti).filter(Gl);t.$$.on_destroy?t.$$.on_destroy.push(...a):Le(a),t.$$.on_mount=[]}),o.forEach(tl)}function ht(t,e){const n=t.$$;n.fragment!==null&&(Hi(n.after_update),Le(n.on_destroy),n.fragment&&n.fragment.d(e),n.on_destroy=n.fragment=null,n.ctx=[])}function Xi(t,e){t.$$.dirty[0]===-1&&(Kt.push(t),Bi(),t.$$.dirty.fill(0)),t.$$.dirty[e/31|0]|=1<{const w=j.length?j[0]:m;return u.ctx&&o(u.ctx[f],u.ctx[f]=w)&&(!u.skip_bound&&u.bound[f]&&u.bound[f](w),v&&Xi(t,f)),m}):[],u.update(),v=!0,Le(u.before_update),u.fragment=i?i(u.ctx):!1,e.target){if(e.hydrate){const f=Ki(e.target);u.fragment&&u.fragment.l(f),f.forEach(F)}else u.fragment&&u.fragment.c();e.intro&&Ye(t.$$.fragment),mt(t,e.target,e.anchor),qi()}an(d)}class wt{$$=void 0;$$set=void 0;$destroy(){ht(this,1),this.$destroy=de}$on(e,n){if(!Gl(n))return de;const i=this.$$.callbacks[e]||(this.$$.callbacks[e]=[]);return i.push(n),()=>{const o=i.indexOf(n);o!==-1&&i.splice(o,1)}}$set(e){this.$$set&&!Wi(e)&&(this.$$.skip_bound=!0,this.$$set(e),this.$$.skip_bound=!1)}}const Qi="4";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(Qi);const Ft=[];function Zi(t,e){return{subscribe:$e(t,e).subscribe}}function $e(t,e=de){let n;const i=new Set;function o(_){if(dt(t,_)&&(t=_,n)){const d=!Ft.length;for(const u of i)u[1](),Ft.push(u,t);if(d){for(let u=0;u{i.delete(u),i.size===0&&n&&(n(),n=null)}}return{set:o,update:a,subscribe:r}}function $i(t,e,n){const i=!Array.isArray(t),o=i?[t]:t;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const a=e.length<2;return Zi(n,(r,_)=>{let d=!1;const u=[];let v=0,f=de;const m=()=>{if(v)return;f();const w=e(i?u[0]:u,r,_);a?r(w):f=Gl(w)?w:de},j=o.map((w,A)=>Vl(w,p=>{u[A]=p,v&=~(1<{v|=1<[...i,{id:n,msg:t,type:e}]),setTimeout(()=>{Wl.update(i=>i.filter(o=>o.id!==n))},4e3),e==="error"&&no(t)}function no(t){if(!t){nl.set(null);return}nl.set({id:++to,msg:String(t)})}function un(){nl.set(null)}function Fl(t,e){return t&&t.id?"peer:"+t.id:"room:"+(e||"network")}function _n(){return Fl(on(cn),on(ze).room)}function Ql(t,e,n,i=!1,o="sent",a=!1,r=!1){const _=++eo;let d;a?d=Fl(null,on(ze).room):i?d=_n():r?d="peer:"+t:d=Fl(null,on(ze).room),Hl.update(f=>{const m=f[d]?[...f[d]]:[];return m.push({id:i&&t.startsWith("local_")?t:_,fromID:t,nickname:e,message:n,timestamp:Date.now(),isSelf:i,status:o,system:a}),{...f,[d]:m.length>Ys?m.slice(-Ys):m}});const u=on(Ce),v=_n();!i&&!(u==="chat"&&d===v)&&Xl.update(f=>({...f,[d]:(f[d]||0)+1}))}function lo(t){Ql("system","",t,!1,"sent",!0)}function Kl(t){Xl.update(e=>{const n={...e};return delete n[t],n})}function ln(t,e){const n=_n();Hl.update(i=>{const o=i[n];return o?{...i,[n]:o.map(a=>a.id===t?{...a,status:e}:a)}:i})}const so={subscribe(t){return Hl.subscribe(e=>{t(e[_n()]||[])})}},Jl={brand:"Entangled",tagline:"Private LAN for friends — anywhere.",networks:"Networks",network_count:"{n} network(s)",create_network:"Create Network",join_network:"Join Network",connecting:"Connecting...",peer_count:"{n} peer(s)",offline_click:"Offline — click to connect",saved:"Saved",no_networks:"No saved networks",no_networks_desc:"Create or join a network to get started",settings:"Settings",network_name:"Network name",password_opt:"Password (optional)",cancel:"Cancel",create:"Create",join:"Join",leave:"Leave network",remove:"Remove saved",delete_room:"Delete network",more_actions:"More actions",copy_invite:"Copy invite",paste_invite:"Have an invite?",invite_copied:"Invite copied",invite_placeholder:"server|room|password",server_addr:"Server Address",nickname:"Nickname",server_token:"Server token",server_token_desc:"optional shared secret (ENTANGLED_TOKEN)",connect:"Connect",disconnect:"Disconnect",connected:"Connected",server:"Server",virtual_ip:"Virtual IP",na:"N/A",reconnecting:"Reconnecting...",disconnected:"Disconnected",phase_dialing:"Dialing server…",phase_auth:"Authenticating…",phase_ready:"Ready",phase_error:"Error",room_chat:"Room Chat",chat:"Chat",col_nickname:"Nickname",col_ip:"Virtual IP",col_ping:"Ping",ping_peer:"Ping",ping_sent:"Pinging {name}…",error_ping:"Ping failed: {err}",col_path:"Path",col_status:"Status",status_online:"Online",status_offline:"Offline",path_p2p:"Direct",path_relay:"Relay",path_ws:"Fallback",path_unknown:"—",path_p2p_tip:"Peer-to-peer direct connection",path_relay_tip:"Traffic routed through the server relay",path_ws_tip:"WebSocket fallback path",you:"You",me:"me",no_peers:"No peers connected",no_peers_desc:"Create or join a network, then wait for friends",network:"Network",chat_with:"Chat with {name}",room_chat_title:"Room Chat — {room}",back:"Back",no_messages:"No messages yet",no_messages_desc:"Send a message to start the conversation",type_message:"Type a message...",send:"Send",send_disabled_no_room:"Join a network to chat",msg_truncated:"Message truncated to 1000 characters",retry:"Retry",today:"Today",yesterday:"Yesterday",you_self:"You",status_connected:"Connected",status_disconnected:"Disconnected",status_reconnecting:"Reconnecting…",status_relay_degraded:"Some peers on relay",status_server:"Server: {s}",status_ip:"IP: {ip}",status_network:"Network: {room}",status_peers:"Peers: {n}",version:"Entangled v{v}",settings_title:"Settings",section_connection:"CONNECTION",section_network:"ADVANCED NETWORK",section_system:"SYSTEM",section_appearance:"APPEARANCE",advanced_warn:"Only change these if you know what they do.",reconnect_apply:"Reconnect to apply",auto_connect:"Auto Connect",auto_connect_desc:"connect to last server on startup",auto_join:"Auto Join Last Room",auto_join_desc:"join last open room after connect (password rooms need a manual join after restart)",connection_mode:"Connection",connection_direct:"Direct (P2P)",connection_relay:"Relay (server)",connection_mode_desc:"Direct prefers peer-to-peer and uses relay only when needed. Relay forces all traffic through the server.",mtu:"MTU",mtu_desc:"Packet size. Wrong values can break games or cause lag.",dns_server:"DNS Server",dns_desc:"Optional DNS for the virtual network. Leave blank for system default.",socks5:"SOCKS5 Proxy",socks5_placeholder:"e.g. 127.0.0.1:10808",socks5_desc:"Proxies signaling (WebSocket) only — not peer/relay UDP. Reconnect to apply.",stun_server:"STUN Server",stun_desc:"Helps find your public address for direct links. Reconnect to apply.",start_windows:"Start with Windows",updates:"Updates",check_updates:"Check for updates",apply_update:"Update",update_checking:"Checking for updates…",update_latest:"You are up to date.",update_available:"Update available: v{v}",update_downloading:"Downloading update… the app will restart.",update_failed:"Update failed",confirm_update:"Download and install the update? The app will restart.",error_update_check:"Update check failed: ",error_update:"Update failed: ",notif_updating:"Installing update…",ui_scale:"UI Scale",ui_scale_desc:"Scales the whole interface. Use with window resize or F11 fullscreen.",theme:"Theme",theme_dark:"Dark",theme_light:"Light",language:"Language",save:"SAVE",reset:"RESET TO DEFAULTS",language_en:"English",language_ru:"Russian",language_zh:"Chinese",copied:"Copied",dismiss_error:"Dismiss",field_required:"Required",notif_created:"Network created: {name}",notif_joined:"Joined network: {name}",notif_left:"Left network",notif_removed:"Removed: {name}",notif_deleted:"Network deleted: {name}",notif_connected:"Connected to {addr}",notif_disconnected:"Disconnected",notif_settings_saved:"Settings saved",notif_reconnect_required:"Reconnect to apply proxy / STUN / token changes",notif_auto_join_skipped:'Auto-join skipped for "{name}" — enter the password to join',notif_need_config:"Set server & nickname in Connect page first",notif_room_deleted:"Network was deleted by owner",invite_no_password:"Invite copied without password (not stored). Add it before sharing.",error_create:"Failed to create network: {err}",error_join:"Failed to join: {err}",error_leave:"Failed to leave: {err}",error_remove:"Failed to remove: {err}",error_connect:"Connection failed: {err}",error_disconnect:"Error: {err}",error_send:"Failed to send: {err}",error_not_connected:"Not connected — cannot send message",error_invalid_invite:"Invalid invite: server and room are required",error_save:"Failed to save settings: {err}",confirm_disconnect:"Disconnect from server?",confirm_leave:"Leave the current network? It stays in your saved list.",confirm_leave_remove:"Leave and remove this network from your saved list?",confirm_remove:'Remove "{name}" from saved networks? (does not delete the network for others)',confirm_delete:'Permanently delete network "{name}" for everyone?',confirm_reset:"Reset all settings to defaults?"},io={brand:"Entangled",tagline:"Частная LAN для друзей — где угодно.",networks:"Сети",network_count:"{n} сет(ь/и/ей)",create_network:"Создать сеть",join_network:"Подключиться",connecting:"Подключение...",peer_count:"{n} участник(ов)",offline_click:"Не в сети — нажмите для подключения",saved:"Сохранено",no_networks:"Нет сохранённых сетей",no_networks_desc:"Создайте или войдите в сеть, чтобы начать",settings:"Настройки",network_name:"Название сети",password_opt:"Пароль (опционально)",cancel:"Отмена",create:"Создать",join:"Войти",leave:"Покинуть сеть",remove:"Убрать из списка",delete_room:"Удалить сеть",more_actions:"Ещё действия",copy_invite:"Копировать инвайт",paste_invite:"Есть инвайт?",invite_copied:"Инвайт скопирован",invite_placeholder:"сервер|комната|пароль",server_addr:"Адрес сервера",nickname:"Псевдоним",server_token:"Токен сервера",server_token_desc:"опциональный секрет (ENTANGLED_TOKEN)",connect:"Подключиться",disconnect:"Отключиться",connected:"Подключено",server:"Сервер",virtual_ip:"Виртуальный IP",na:"Н/Д",reconnecting:"Переподключение...",disconnected:"Отключено",phase_dialing:"Подключение к серверу…",phase_auth:"Аутентификация…",phase_ready:"Готово",phase_error:"Ошибка",room_chat:"Чат комнаты",chat:"Чат",col_nickname:"Псевдоним",col_ip:"Виртуальный IP",col_ping:"Пинг",ping_peer:"Пинг",ping_sent:"Пинг {name}…",error_ping:"Пинг не удался: {err}",col_path:"Путь",col_status:"Статус",status_online:"В сети",status_offline:"Не в сети",path_p2p:"Прямой",path_relay:"Релей",path_ws:"Запасной",path_unknown:"—",path_p2p_tip:"Прямое соединение peer-to-peer",path_relay_tip:"Трафик через серверный релей",path_ws_tip:"Запасной путь через WebSocket",you:"Вы",me:"я",no_peers:"Нет подключённых участников",no_peers_desc:"Создайте или войдите в сеть и дождитесь друзей",network:"Сеть",chat_with:"Чат с {name}",room_chat_title:"Чат комнаты — {room}",back:"Назад",no_messages:"Сообщений пока нет",no_messages_desc:"Отправьте сообщение, чтобы начать разговор",type_message:"Введите сообщение...",send:"Отправить",send_disabled_no_room:"Войдите в сеть, чтобы писать",msg_truncated:"Сообщение обрезано до 1000 символов",retry:"Повторить",today:"Сегодня",yesterday:"Вчера",you_self:"Вы",status_connected:"Подключено",status_disconnected:"Отключено",status_reconnecting:"Переподключение…",status_relay_degraded:"Часть пиров через релей",status_server:"Сервер: {s}",status_ip:"IP: {ip}",status_network:"Сеть: {room}",status_peers:"Участники: {n}",version:"Entangled v{v}",settings_title:"Настройки",section_connection:"ПОДКЛЮЧЕНИЕ",section_network:"ДОП. СЕТЬ",section_system:"СИСТЕМА",section_appearance:"ВНЕШНИЙ ВИД",advanced_warn:"Меняйте только если понимаете, что делаете.",reconnect_apply:"Переподключитесь, чтобы применить",auto_connect:"Автоподключение",auto_connect_desc:"подключаться к последнему серверу при запуске",auto_join:"Автовход в комнату",auto_join_desc:"входить в последнюю открытую комнату (с паролем — вручную после перезапуска)",connection_mode:"Соединение",connection_direct:"Прямое (P2P)",connection_relay:"Релей (сервер)",connection_mode_desc:"Прямое предпочитает P2P и использует релей только при необходимости. Релей гонит весь трафик через сервер.",mtu:"MTU",mtu_desc:"Размер пакета. Неверное значение ломает игры или даёт лаги.",dns_server:"DNS-сервер",dns_desc:"Опциональный DNS виртуальной сети. Пусто — системный по умолчанию.",socks5:"SOCKS5-прокси",socks5_placeholder:"напр. 127.0.0.1:10808",socks5_desc:"Только сигнальный WebSocket, не UDP пиров/релея. Переподключитесь, чтобы применить.",stun_server:"STUN-сервер",stun_desc:"Помогает найти публичный адрес. Переподключитесь, чтобы применить.",start_windows:"Запуск с Windows",updates:"Обновления",check_updates:"Проверить обновления",apply_update:"Обновить",update_checking:"Проверка обновлений…",update_latest:"У вас актуальная версия.",update_available:"Доступно обновление: v{v}",update_downloading:"Загрузка обновления… приложение перезапустится.",update_failed:"Ошибка обновления",confirm_update:"Скачать и установить обновление? Приложение перезапустится.",error_update_check:"Не удалось проверить обновления: ",error_update:"Не удалось обновить: ",notif_updating:"Установка обновления…",ui_scale:"Масштаб UI",ui_scale_desc:"Масштабирует весь интерфейс. Вместе с изменением размера окна или F11.",theme:"Тема",theme_dark:"Тёмная",theme_light:"Светлая",language:"Язык",save:"СОХРАНИТЬ",reset:"СБРОСИТЬ",language_en:"Английский",language_ru:"Русский",language_zh:"Китайский",copied:"Скопировано",dismiss_error:"Закрыть",field_required:"Обязательно",notif_created:"Сеть создана: {name}",notif_joined:"Подключились к сети: {name}",notif_left:"Покинули сеть",notif_removed:"Удалено: {name}",notif_deleted:"Сеть удалена: {name}",notif_connected:"Подключились к {addr}",notif_disconnected:"Отключились",notif_settings_saved:"Настройки сохранены",notif_reconnect_required:"Переподключитесь, чтобы применить прокси / STUN / токен",notif_auto_join_skipped:"Автовход пропущен для «{name}» — введите пароль вручную",notif_need_config:"Укажите сервер и псевдоним на странице подключения",notif_room_deleted:"Сеть удалена владельцем",invite_no_password:"Инвайт скопирован без пароля (он не хранится). Добавьте перед отправкой.",error_create:"Не удалось создать сеть: {err}",error_join:"Не удалось подключиться: {err}",error_leave:"Не удалось покинуть: {err}",error_remove:"Не удалось удалить: {err}",error_connect:"Ошибка подключения: {err}",error_disconnect:"Ошибка: {err}",error_send:"Не удалось отправить: {err}",error_not_connected:"Нет подключения — невозможно отправить сообщение",error_invalid_invite:"Неверный инвайт: нужны сервер и комната",error_save:"Не удалось сохранить настройки: {err}",confirm_disconnect:"Отключиться от сервера?",confirm_leave:"Покинуть текущую сеть? Она останется в сохранённых.",confirm_leave_remove:"Покинуть и убрать сеть из сохранённых?",confirm_remove:'Убрать "{name}" из сохранённых? (сеть для других не удалится)',confirm_delete:'Навсегда удалить сеть "{name}" для всех?',confirm_reset:"Сбросить все настройки?"},oo={brand:"Entangled",tagline:"朋友的私人局域网 — 随时随地。",networks:"网络",network_count:"{n} 个网络",create_network:"创建网络",join_network:"加入网络",connecting:"连接中...",peer_count:"{n} 个节点",offline_click:"离线 — 点击连接",saved:"已保存",no_networks:"暂无保存的网络",no_networks_desc:"创建或加入网络以开始",settings:"设置",network_name:"网络名称",password_opt:"密码(可选)",cancel:"取消",create:"创建",join:"加入",leave:"离开网络",remove:"移除已保存",delete_room:"删除网络",more_actions:"更多操作",copy_invite:"复制邀请",paste_invite:"有邀请码?",invite_copied:"邀请已复制",invite_placeholder:"服务器|房间|密码",server_addr:"服务器地址",nickname:"昵称",server_token:"服务器令牌",server_token_desc:"可选共享密钥(ENTANGLED_TOKEN)",connect:"连接",disconnect:"断开",connected:"已连接",server:"服务器",virtual_ip:"虚拟 IP",na:"无",reconnecting:"重新连接...",disconnected:"已断开",phase_dialing:"正在连接服务器…",phase_auth:"正在验证…",phase_ready:"就绪",phase_error:"错误",room_chat:"房间聊天",chat:"聊天",col_nickname:"昵称",col_ip:"虚拟 IP",col_ping:"延迟",ping_peer:"测速",ping_sent:"正在测速 {name}…",error_ping:"测速失败: {err}",col_path:"路径",col_status:"状态",status_online:"在线",status_offline:"离线",path_p2p:"直连",path_relay:"中继",path_ws:"备用",path_unknown:"—",path_p2p_tip:"点对点直连",path_relay_tip:"经服务器中继转发",path_ws_tip:"WebSocket 备用路径",you:"你",me:"我",no_peers:"暂无连接的节点",no_peers_desc:"创建或加入网络,然后等待好友",network:"网络",chat_with:"与 {name} 聊天",room_chat_title:"房间聊天 — {room}",back:"返回",no_messages:"暂无消息",no_messages_desc:"发送一条消息开始对话",type_message:"输入消息...",send:"发送",send_disabled_no_room:"加入网络后才能聊天",msg_truncated:"消息已截断至 1000 个字符",retry:"重试",today:"今天",yesterday:"昨天",you_self:"你",status_connected:"已连接",status_disconnected:"已断开",status_reconnecting:"重新连接…",status_relay_degraded:"部分节点经中继",status_server:"服务器: {s}",status_ip:"IP: {ip}",status_network:"网络: {room}",status_peers:"节点: {n}",version:"Entangled v{v}",settings_title:"设置",section_connection:"连接",section_network:"高级网络",section_system:"系统",section_appearance:"外观",advanced_warn:"仅在了解作用时更改这些选项。",reconnect_apply:"重新连接以生效",auto_connect:"自动连接",auto_connect_desc:"启动时自动连接到上次的服务器",auto_join:"自动加入房间",auto_join_desc:"连接后自动加入上次的开放房间(有密码的房间重启后需手动加入)",connection_mode:"连接方式",connection_direct:"直连 (P2P)",connection_relay:"中继 (服务器)",connection_mode_desc:"直连优先点对点,必要时才用中继。中继模式强制全部流量经服务器。",mtu:"MTU",mtu_desc:"数据包大小。错误值可能导致游戏异常或卡顿。",dns_server:"DNS 服务器",dns_desc:"虚拟网络可选 DNS。留空则使用系统默认。",socks5:"SOCKS5 代理",socks5_placeholder:"例如 127.0.0.1:10808",socks5_desc:"仅代理信令 WebSocket,不含节点/中继 UDP。重新连接以生效。",stun_server:"STUN 服务器",stun_desc:"用于发现公网地址以便直连。重新连接以生效。",start_windows:"开机自启",updates:"更新",check_updates:"检查更新",apply_update:"更新",update_checking:"正在检查更新…",update_latest:"已是最新版本。",update_available:"有可用更新:v{v}",update_downloading:"正在下载更新…应用将重启。",update_failed:"更新失败",confirm_update:"下载并安装更新?应用将重启。",error_update_check:"检查更新失败:",error_update:"更新失败:",notif_updating:"正在安装更新…",ui_scale:"界面缩放",ui_scale_desc:"缩放整个界面。可配合窗口调整大小或 F11 全屏使用。",theme:"主题",theme_dark:"深色",theme_light:"浅色",language:"语言",save:"保存",reset:"重置为默认",language_en:"英语",language_ru:"俄语",language_zh:"中文",copied:"已复制",dismiss_error:"关闭",field_required:"必填",notif_created:"网络已创建: {name}",notif_joined:"已加入网络: {name}",notif_left:"已离开网络",notif_removed:"已删除: {name}",notif_deleted:"网络已删除: {name}",notif_connected:"已连接到 {addr}",notif_disconnected:"已断开连接",notif_settings_saved:"设置已保存",notif_reconnect_required:"请重新连接以使代理 / STUN / 令牌生效",notif_auto_join_skipped:"已跳过自动加入「{name}」— 请输入密码后手动加入",notif_need_config:"请先在连接页面设置服务器和昵称",notif_room_deleted:"网络已被所有者删除",invite_no_password:"邀请已复制但无密码(密码不存储)。分享前请自行添加。",error_create:"创建网络失败: {err}",error_join:"加入失败: {err}",error_leave:"离开失败: {err}",error_remove:"删除失败: {err}",error_connect:"连接失败: {err}",error_disconnect:"错误: {err}",error_send:"发送失败: {err}",error_not_connected:"未连接 — 无法发送消息",error_invalid_invite:"无效邀请:需要服务器和房间名",error_save:"保存设置失败: {err}",confirm_disconnect:"确定断开服务器连接?",confirm_leave:"离开当前网络?仍保留在已保存列表中。",confirm_leave_remove:"离开并从已保存列表中移除?",confirm_remove:'从已保存网络中移除 "{name}"?(不会删除他人的网络)',confirm_delete:'永久删除网络 "{name}"(对所有人)?',confirm_reset:"确定重置所有设置?"},Zl={en:Jl,ru:io,zh:oo};function ao(){const t=localStorage.getItem("entangled_locale");if(t&&Zl[t])return t;const e=navigator.language?.slice(0,2);return e==="ru"?"ru":e==="zh"?"zh":"en"}const $l=$e(ao()),kt=$i($l,t=>{const e=Zl[t]||Jl;return new Proxy(e,{get(n,i){if(typeof i=="string")return n[i]??Jl[i]??i}})});function sn(t){Zl[t]&&(localStorage.setItem("entangled_locale",t),$l.set(t))}function ne(t,e){return t?String(t).replace(/\{(\w+)\}/g,(n,i)=>e&&e[i]!=null?e[i]:`{${i}}`):""}function Hs(t,e,n){const i=t.slice();return i[62]=e[n],i}function Xs(t){let e,n,i=t[16].no_networks+"",o,a,r,_=t[16].no_networks_desc+"",d,u;return{c(){e=c("div"),n=c("div"),o=g(i),a=h(),r=c("div"),d=g(_),u=h(),s(r,"class","empty-desc svelte-1oaanap"),s(e,"class","empty-state svelte-1oaanap")},m(v,f){K(v,e,f),l(e,n),l(n,o),l(e,a),l(e,r),l(r,d),l(e,u)},p(v,f){f[0]&65536&&i!==(i=v[16].no_networks+"")&&b(o,i),f[0]&65536&&_!==(_=v[16].no_networks_desc+"")&&b(d,_)},d(v){v&&F(e)}}}function ro(t){let e=t[16].saved+"",n;return{c(){n=g(e)},m(i,o){K(i,n,o)},p(i,o){o[0]&65536&&e!==(e=i[16].saved+"")&&b(n,e)},d(i){i&&F(n)}}}function co(t){let e=t[16].offline_click+"",n;return{c(){n=g(e)},m(i,o){K(i,n,o)},p(i,o){o[0]&65536&&e!==(e=i[16].offline_click+"")&&b(n,e)},d(i){i&&F(n)}}}function uo(t){let e=ne(t[16].peer_count,{n:t[18].peerCount})+"",n;return{c(){n=g(e)},m(i,o){K(i,n,o)},p(i,o){o[0]&327680&&e!==(e=ne(i[16].peer_count,{n:i[18].peerCount})+"")&&b(n,e)},d(i){i&&F(n)}}}function _o(t){let e=t[16].connecting+"",n;return{c(){n=g(e)},m(i,o){K(i,n,o)},p(i,o){o[0]&65536&&e!==(e=i[16].connecting+"")&&b(n,e)},d(i){i&&F(n)}}}function Qs(t){let e,n,i=t[16].copy_invite+"",o,a,r,_,d=t[16].remove+"",u,v,f,m;function j(...C){return t[40](t[62],...C)}let w=t[18].room===t[62].name&&Zs(t);function A(...C){return t[42](t[62],...C)}let p=t[18].room===t[62].name&&t[18].isOwner&&$s(t);return{c(){e=c("div"),n=c("button"),o=g(i),a=h(),w&&w.c(),r=h(),_=c("button"),u=g(d),v=h(),p&&p.c(),s(n,"type","button"),s(n,"role","menuitem"),s(n,"class","menu-item svelte-1oaanap"),s(_,"type","button"),s(_,"role","menuitem"),s(_,"class","menu-item danger svelte-1oaanap"),s(e,"class","overflow-menu svelte-1oaanap"),s(e,"role","menu"),s(e,"tabindex","-1")},m(C,D){K(C,e,D),l(e,n),l(n,o),l(e,a),w&&w.m(e,null),l(e,r),l(e,_),l(_,u),l(e,v),p&&p.m(e,null),f||(m=[W(n,"click",j),W(_,"click",A),W(e,"click",Gt(t[37])),W(e,"keydown",Gt(t[38]))],f=!0)},p(C,D){t=C,D[0]&65536&&i!==(i=t[16].copy_invite+"")&&b(o,i),t[18].room===t[62].name?w?w.p(t,D):(w=Zs(t),w.c(),w.m(e,r)):w&&(w.d(1),w=null),D[0]&65536&&d!==(d=t[16].remove+"")&&b(u,d),t[18].room===t[62].name&&t[18].isOwner?p?p.p(t,D):(p=$s(t),p.c(),p.m(e,null)):p&&(p.d(1),p=null)},d(C){C&&F(e),w&&w.d(),p&&p.d(),f=!1,Le(m)}}}function Zs(t){let e,n=t[16].leave+"",i,o,a;return{c(){e=c("button"),i=g(n),s(e,"type","button"),s(e,"role","menuitem"),s(e,"class","menu-item svelte-1oaanap")},m(r,_){K(r,e,_),l(e,i),o||(a=W(e,"click",t[41]),o=!0)},p(r,_){_[0]&65536&&n!==(n=r[16].leave+"")&&b(i,n)},d(r){r&&F(e),o=!1,a()}}}function $s(t){let e,n=t[16].delete_room+"",i,o,a;function r(..._){return t[43](t[62],..._)}return{c(){e=c("button"),i=g(n),s(e,"type","button"),s(e,"role","menuitem"),s(e,"class","menu-item danger svelte-1oaanap")},m(_,d){K(_,e,d),l(e,i),o||(a=W(e,"click",r),o=!0)},p(_,d){t=_,d[0]&65536&&n!==(n=t[16].delete_room+"")&&b(i,n)},d(_){_&&F(e),o=!1,a()}}}function xs(t,e){let n,i,o,a,r,_=e[62].name+"",d,u,v,f,m,j,w,A,p,C,D,P,k,N,y,I;function J(V,Q){return V[11]===V[62].name?_o:V[18].room===V[62].name?uo:V[18].connected?ro:co}let B=J(e),S=B(e);function E(...V){return e[39](e[62],...V)}let M=e[13]===e[62].name&&Qs(e);function L(){return e[44](e[62])}function q(...V){return e[45](e[62],...V)}return{key:t,first:null,c(){n=c("div"),i=c("div"),o=h(),a=c("div"),r=c("div"),d=g(_),u=h(),v=c("div"),S.c(),f=h(),m=c("div"),j=c("button"),w=g("⋯"),D=h(),M&&M.c(),P=h(),s(i,"class","network-indicator svelte-1oaanap"),s(i,"aria-hidden","true"),ke(i,"active-dot",e[18].room===e[62].name),s(r,"class","network-name svelte-1oaanap"),s(v,"class","network-meta svelte-1oaanap"),s(a,"class","network-info svelte-1oaanap"),s(j,"type","button"),s(j,"class","menu-btn svelte-1oaanap"),s(j,"aria-haspopup","menu"),s(j,"aria-expanded",A=e[13]===e[62].name),s(j,"aria-label",p=e[16].more_actions),s(j,"title",C=e[16].more_actions),s(m,"class","row-actions svelte-1oaanap"),s(n,"class","network-item svelte-1oaanap"),s(n,"role","button"),s(n,"tabindex","0"),s(n,"aria-current",k=e[18].room===e[62].name?"true":void 0),s(n,"aria-label",N=e[62].name),ke(n,"active",e[18].room===e[62].name),ke(n,"disabled",!e[18].connected&&!e[11]),this.first=n},m(V,Q){K(V,n,Q),l(n,i),l(n,o),l(n,a),l(a,r),l(r,d),l(a,u),l(a,v),S.m(v,null),l(n,f),l(n,m),l(m,j),l(j,w),l(m,D),M&&M.m(m,null),l(n,P),y||(I=[W(j,"click",E),W(n,"click",L),W(n,"keydown",q)],y=!0)},p(V,Q){e=V,Q[0]&262145&&ke(i,"active-dot",e[18].room===e[62].name),Q[0]&1&&_!==(_=e[62].name+"")&&b(d,_),B===(B=J(e))&&S?S.p(e,Q):(S.d(1),S=B(e),S&&(S.c(),S.m(v,null))),Q[0]&8193&&A!==(A=e[13]===e[62].name)&&s(j,"aria-expanded",A),Q[0]&65536&&p!==(p=e[16].more_actions)&&s(j,"aria-label",p),Q[0]&65536&&C!==(C=e[16].more_actions)&&s(j,"title",C),e[13]===e[62].name?M?M.p(e,Q):(M=Qs(e),M.c(),M.m(m,null)):M&&(M.d(1),M=null),Q[0]&262145&&k!==(k=e[18].room===e[62].name?"true":void 0)&&s(n,"aria-current",k),Q[0]&1&&N!==(N=e[62].name)&&s(n,"aria-label",N),Q[0]&262145&&ke(n,"active",e[18].room===e[62].name),Q[0]&264192&&ke(n,"disabled",!e[18].connected&&!e[11])},d(V){V&&F(n),S.d(),M&&M.d(),y=!1,Le(I)}}}function ei(t){let e,n,i,o=t[16].create_network+"",a,r,_,d=t[16].network_name+"",u,v,f,m,j,w,A,p,C=t[16].password_opt+"",D,P,k,N,y,I,J,B,S=t[16].cancel+"",E,M,L,q=t[16].create+"",V,Q,ce,O=t[9]&&ti(t),Y=t[7]&&ni(t);return{c(){e=c("div"),n=c("div"),i=c("h3"),a=g(o),r=h(),_=c("label"),u=g(d),v=h(),f=c("input"),w=h(),O&&O.c(),A=h(),p=c("label"),D=g(C),P=h(),k=c("input"),y=h(),Y&&Y.c(),I=h(),J=c("div"),B=c("button"),E=g(S),M=h(),L=c("button"),V=g(q),s(i,"id","create-title"),s(i,"class","svelte-1oaanap"),s(_,"class","sr-only svelte-1oaanap"),s(_,"for","create-name"),s(f,"id","create-name"),s(f,"type","text"),s(f,"placeholder",m=t[16].network_name),s(f,"aria-invalid",j=!!t[9]),s(f,"class","svelte-1oaanap"),ke(f,"invalid",t[9]),s(p,"class","sr-only svelte-1oaanap"),s(p,"for","create-pass"),s(k,"id","create-pass"),s(k,"type","password"),s(k,"placeholder",N=t[16].password_opt),s(k,"class","svelte-1oaanap"),s(B,"class","btn svelte-1oaanap"),s(L,"class","btn primary svelte-1oaanap"),s(J,"class","modal-actions svelte-1oaanap"),s(n,"class","modal svelte-1oaanap"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","create-title"),s(e,"class","modal-overlay svelte-1oaanap"),s(e,"role","presentation")},m(U,z){K(U,e,z),l(e,n),l(n,i),l(i,a),l(n,r),l(n,_),l(_,u),l(n,v),l(n,f),ie(f,t[3]),l(n,w),O&&O.m(n,null),l(n,A),l(n,p),l(p,D),l(n,P),l(n,k),ie(k,t[4]),l(n,y),Y&&Y.m(n,null),l(n,I),l(n,J),l(J,B),l(B,E),l(J,M),l(J,L),l(L,V),t[49](n),Q||(ce=[W(f,"input",t[47]),W(k,"input",t[48]),W(B,"click",t[20]),W(L,"click",t[23]),W(n,"click",Gt(t[35])),W(n,"keydown",Gt(t[36])),W(e,"click",t[20]),W(e,"keydown",t[50])],Q=!0)},p(U,z){z[0]&65536&&o!==(o=U[16].create_network+"")&&b(a,o),z[0]&65536&&d!==(d=U[16].network_name+"")&&b(u,d),z[0]&65536&&m!==(m=U[16].network_name)&&s(f,"placeholder",m),z[0]&512&&j!==(j=!!U[9])&&s(f,"aria-invalid",j),z[0]&8&&f.value!==U[3]&&ie(f,U[3]),z[0]&512&&ke(f,"invalid",U[9]),U[9]?O?O.p(U,z):(O=ti(U),O.c(),O.m(n,A)):O&&(O.d(1),O=null),z[0]&65536&&C!==(C=U[16].password_opt+"")&&b(D,C),z[0]&65536&&N!==(N=U[16].password_opt)&&s(k,"placeholder",N),z[0]&16&&k.value!==U[4]&&ie(k,U[4]),U[7]?Y?Y.p(U,z):(Y=ni(U),Y.c(),Y.m(n,I)):Y&&(Y.d(1),Y=null),z[0]&65536&&S!==(S=U[16].cancel+"")&&b(E,S),z[0]&65536&&q!==(q=U[16].create+"")&&b(V,q)},d(U){U&&F(e),O&&O.d(),Y&&Y.d(),t[49](null),Q=!1,Le(ce)}}}function ti(t){let e,n;return{c(){e=c("span"),n=g(t[9]),s(e,"class","field-error svelte-1oaanap"),s(e,"role","alert")},m(i,o){K(i,e,o),l(e,n)},p(i,o){o[0]&512&&b(n,i[9])},d(i){i&&F(e)}}}function ni(t){let e,n;return{c(){e=c("div"),n=g(t[7]),s(e,"class","modal-error svelte-1oaanap"),s(e,"role","alert")},m(i,o){K(i,e,o),l(e,n)},p(i,o){o[0]&128&&b(n,i[7])},d(i){i&&F(e)}}}function li(t){let e,n,i,o=t[16].join_network+"",a,r,_,d=t[16].network_name+"",u,v,f,m,j,w,A,p,C=t[16].password_opt+"",D,P,k,N,y,I,J,B,S=t[16].cancel+"",E,M,L,q=t[16].join+"",V,Q,ce,O=t[10]&&si(t),Y=t[8]&&ii(t);return{c(){e=c("div"),n=c("div"),i=c("h3"),a=g(o),r=h(),_=c("label"),u=g(d),v=h(),f=c("input"),w=h(),O&&O.c(),A=h(),p=c("label"),D=g(C),P=h(),k=c("input"),y=h(),Y&&Y.c(),I=h(),J=c("div"),B=c("button"),E=g(S),M=h(),L=c("button"),V=g(q),s(i,"id","join-title"),s(i,"class","svelte-1oaanap"),s(_,"class","sr-only svelte-1oaanap"),s(_,"for","join-name"),s(f,"id","join-name"),s(f,"type","text"),s(f,"placeholder",m=t[16].network_name),s(f,"aria-invalid",j=!!t[10]),s(f,"class","svelte-1oaanap"),ke(f,"invalid",t[10]),s(p,"class","sr-only svelte-1oaanap"),s(p,"for","join-pass"),s(k,"id","join-pass"),s(k,"type","password"),s(k,"placeholder",N=t[16].password_opt),s(k,"class","svelte-1oaanap"),s(B,"class","btn svelte-1oaanap"),s(L,"class","btn primary svelte-1oaanap"),s(J,"class","modal-actions svelte-1oaanap"),s(n,"class","modal svelte-1oaanap"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","join-title"),s(e,"class","modal-overlay svelte-1oaanap"),s(e,"role","presentation")},m(U,z){K(U,e,z),l(e,n),l(n,i),l(i,a),l(n,r),l(n,_),l(_,u),l(n,v),l(n,f),ie(f,t[5]),l(n,w),O&&O.m(n,null),l(n,A),l(n,p),l(p,D),l(n,P),l(n,k),ie(k,t[6]),l(n,y),Y&&Y.m(n,null),l(n,I),l(n,J),l(J,B),l(B,E),l(J,M),l(J,L),l(L,V),t[54](n),Q||(ce=[W(f,"input",t[51]),W(k,"input",t[52]),W(B,"click",t[22]),W(L,"click",t[53]),W(n,"click",Gt(t[33])),W(n,"keydown",Gt(t[34])),W(e,"click",t[22]),W(e,"keydown",t[55])],Q=!0)},p(U,z){z[0]&65536&&o!==(o=U[16].join_network+"")&&b(a,o),z[0]&65536&&d!==(d=U[16].network_name+"")&&b(u,d),z[0]&65536&&m!==(m=U[16].network_name)&&s(f,"placeholder",m),z[0]&1024&&j!==(j=!!U[10])&&s(f,"aria-invalid",j),z[0]&32&&f.value!==U[5]&&ie(f,U[5]),z[0]&1024&&ke(f,"invalid",U[10]),U[10]?O?O.p(U,z):(O=si(U),O.c(),O.m(n,A)):O&&(O.d(1),O=null),z[0]&65536&&C!==(C=U[16].password_opt+"")&&b(D,C),z[0]&65536&&N!==(N=U[16].password_opt)&&s(k,"placeholder",N),z[0]&64&&k.value!==U[6]&&ie(k,U[6]),U[8]?Y?Y.p(U,z):(Y=ii(U),Y.c(),Y.m(n,I)):Y&&(Y.d(1),Y=null),z[0]&65536&&S!==(S=U[16].cancel+"")&&b(E,S),z[0]&65536&&q!==(q=U[16].join+"")&&b(V,q)},d(U){U&&F(e),O&&O.d(),Y&&Y.d(),t[54](null),Q=!1,Le(ce)}}}function si(t){let e,n;return{c(){e=c("span"),n=g(t[10]),s(e,"class","field-error svelte-1oaanap"),s(e,"role","alert")},m(i,o){K(i,e,o),l(e,n)},p(i,o){o[0]&1024&&b(n,i[10])},d(i){i&&F(e)}}}function ii(t){let e,n;return{c(){e=c("div"),n=g(t[8]),s(e,"class","modal-error svelte-1oaanap"),s(e,"role","alert")},m(i,o){K(i,e,o),l(e,n)},p(i,o){o[0]&256&&b(n,i[8])},d(i){i&&F(e)}}}function fo(t){let e,n,i,o=t[16].networks+"",a,r,_,d=ne(t[16].network_count,{n:t[0].length})+"",u,v,f,m,j=t[16].create_network+"",w,A,p,C,D=t[16].join_network+"",P,k,N,y,I=[],J=new Map,B,S,E,M=t[16].settings+"",L,q,V,Q,ce,O,Y=ft(t[0]);const U=Z=>Z[62].name;for(let Z=0;Zn(16,i=R)),ve(t,Ce,R=>n(17,o=R)),ve(t,ze,R=>n(18,a=R));let r=[],_=!1,d=!1,u="",v="",f="",m="",j="",w="",A="",p="",C="",D="",P="",k="network",N=null,y,I;fn(async()=>{n(0,r=await window.go.main.App.GetSavedRooms());const R=await window.go.main.App.LoadConfig();R.serverAddr&&(C=R.serverAddr),R.nickname&&(D=R.nickname),window.addEventListener("keydown",J),window.addEventListener("click",B)}),Mi(()=>{window.removeEventListener("keydown",J),window.removeEventListener("click",B)});function J(R){if(R.key==="Escape"){if(N){n(13,N=null);return}if(_){M();return}if(d){q();return}}}function B(){n(13,N=null)}async function S(){n(0,r=await window.go.main.App.GetSavedRooms())}function E(){n(7,j=""),n(9,A=""),n(1,_=!0),un()}function M(){n(1,_=!1),n(7,j=""),n(9,A="")}function L(){n(8,w=""),n(10,p=""),n(2,d=!0),un()}function q(){n(2,d=!1),n(8,w=""),n(10,p="")}async function V(){if(n(9,A=""),n(7,j=""),!u.trim()){n(9,A=i.field_required);return}try{await window.go.main.App.CreateRoom(u,v),ee(ne(i.notif_created,{name:u})),Ze(Ce,o="network",o),M(),n(3,u=""),n(4,v=""),await S()}catch(R){n(7,j=ne(i.error_create,{err:R})),ee(j,"error")}}async function Q(R,x){n(10,p=""),n(8,w="");const Se=R||f,Re=x!==void 0?x:m;if(!Se.trim()){n(10,p=i.field_required);return}try{await window.go.main.App.JoinRoom(Se,Re),ee(ne(i.notif_joined,{name:Se})),Ze(Ce,o="network",o),q(),n(5,f=""),n(6,m=""),await S()}catch(we){n(8,w=ne(i.error_join,{err:we})),ee(w,"error"),d||(n(5,f=Se),n(6,m=""),n(2,d=!0))}}async function ce(){if(confirm(i.confirm_leave))try{await window.go.main.App.LeaveRoom(),ee(i.notif_left),await S()}catch(R){ee(ne(i.error_leave,{err:R}),"error")}}async function O(R){const x=a.room===R;if(x){if(!confirm(i.confirm_leave_remove))return}else if(!confirm(ne(i.confirm_remove,{name:R})))return;try{x&&await window.go.main.App.LeaveRoom(),await window.go.main.App.RemoveSavedRoom(R),ee(ne(i.notif_removed,{name:R})),await S()}catch(Se){ee(ne(i.error_remove,{err:Se}),"error")}}async function Y(R){if(confirm(ne(i.confirm_delete,{name:R})))try{await window.go.main.App.DeleteRoom(R),await window.go.main.App.RemoveSavedRoom(R),ee(ne(i.notif_deleted,{name:R})),await S()}catch(x){ee(String(x),"error")}}async function U(R){try{const x=await window.go.main.App.FormatInvite(R.name,R.password||"");await window.go.main.App.CopyText(x);const Se=String(x).split("|"),Re=Se.length>=3&&Se[2]!=="";R.locked&&!Re?ee(i.invite_no_password,"info"):ee(i.invite_copied)}catch(x){ee(String(x),"error")}}async function z(){try{const R=await window.go.main.App.LoadConfig();R.serverAddr&&(C=R.serverAddr),R.nickname&&(D=R.nickname)}catch{}}async function te(R,x,Se){if(!P){n(11,P=R),n(13,N=null);try{await z();const Re=Se||C;if(!a.connected){if(!Re||!D){ee(i.notif_need_config,"error"),Ze(Ce,o="connect",o);return}const we=await window.go.main.App.Connect(Re,D);ze.set(we),await S()}await window.go.main.App.JoinRoom(R,x||""),Ze(Ce,o="network",o),await S()}catch(Re){const we=ne(i.error_join,{err:Re});ee(we,"error"),n(5,f=R),n(6,m=""),n(8,w=we),n(2,d=!0)}finally{n(11,P="")}}}function oe(R,x){(R.key==="Enter"||R.key===" ")&&(R.preventDefault(),te(x.name,x.password,x.server))}function Z(R,x){R.stopPropagation(),n(13,N=N===x?null:x)}function H(R,x){R.stopPropagation(),n(13,N=null),x()}function pe(R){zt.call(this,t,R)}function ue(R){zt.call(this,t,R)}function Ie(R){zt.call(this,t,R)}function Ne(R){zt.call(this,t,R)}function fe(R){zt.call(this,t,R)}function ye(R){zt.call(this,t,R)}const ge=(R,x)=>Z(x,R.name),je=(R,x)=>H(x,()=>U(R)),De=R=>H(R,ce),me=(R,x)=>H(x,()=>O(R.name)),le=(R,x)=>H(x,()=>Y(R.name)),We=R=>te(R.name,R.password,R.server),_e=(R,x)=>oe(x,R),he=()=>{o==="settings"?Ze(Ce,o=k,o):(n(12,k=o),Ze(Ce,o="settings",o))};function be(){u=this.value,n(3,u)}function X(){v=this.value,n(4,v)}function se(R){Vt[R?"unshift":"push"](()=>{y=R,n(14,y)})}const st=R=>R.key==="Escape"&&M();function Fe(){f=this.value,n(5,f)}function rt(){m=this.value,n(6,m)}const it=()=>Q();function re(R){Vt[R?"unshift":"push"](()=>{I=R,n(15,I)})}return[r,_,d,u,v,f,m,j,w,A,p,P,k,N,y,I,i,o,a,E,M,L,q,V,Q,ce,O,Y,U,te,oe,Z,H,pe,ue,Ie,Ne,fe,ye,ge,je,De,me,le,We,_e,he,be,X,se,st,Fe,rt,it,re,R=>R.key==="Escape"&&q()]}class vo extends wt{constructor(e){super(),gt(this,e,po,fo,dt,{},null,[-1,-1,-1])}}function oi(t,e,n){const i=t.slice();return i[24]=e[n],i}function ai(t){let e,n,i=t[5].chat+"",o,a,r,_,d,u=t[3]>0&&ri(t);return{c(){e=c("button"),n=g("[ "),o=g(i),a=g(` ] - `),u&&u.c(),s(e,"class","room-chat-btn svelte-mpjrp9"),s(e,"title",r=t[5].room_chat)},m(v,f){K(v,e,f),l(e,n),l(e,o),l(e,a),u&&u.m(e,null),_||(d=W(e,"click",t[8]),_=!0)},p(v,f){f&32&&i!==(i=v[5].chat+"")&&b(o,i),v[3]>0?u?u.p(v,f):(u=ri(v),u.c(),u.m(e,null)):u&&(u.d(1),u=null),f&32&&r!==(r=v[5].room_chat)&&s(e,"title",r)},d(v){v&&F(e),u&&u.d(),_=!1,d()}}}function ri(t){let e,n;return{c(){e=c("span"),n=g(t[3]),s(e,"class","badge svelte-mpjrp9")},m(i,o){K(i,e,o),l(e,n)},p(i,o){o&8&&b(n,i[3])},d(i){i&&F(e)}}}function ci(t){let e,n=t[5].status_relay_degraded+"",i;return{c(){e=c("span"),i=g(n),s(e,"class","relay-hint svelte-mpjrp9")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&32&&n!==(n=o[5].status_relay_degraded+"")&&b(i,n)},d(o){o&&F(e)}}}function ui(t){let e,n,i,o,a=t[5].no_peers+"",r,_,d,u=t[5].no_peers_desc+"",v,f;return{c(){e=c("div"),n=c("div"),n.textContent="[ . . . ]",i=h(),o=c("div"),r=g(a),_=h(),d=c("div"),v=g(u),f=h(),s(n,"class","empty-icon"),s(o,"class","empty-label svelte-mpjrp9"),s(d,"class","empty-desc svelte-mpjrp9"),s(e,"class","empty-peers svelte-mpjrp9")},m(m,j){K(m,e,j),l(e,n),l(e,i),l(e,o),l(o,r),l(e,_),l(e,d),l(d,v),l(e,f)},p(m,j){j&32&&a!==(a=m[5].no_peers+"")&&b(r,a),j&32&&u!==(u=m[5].no_peers_desc+"")&&b(v,u)},d(m){m&&F(e)}}}function _i(t){let e,n=t[11](t[24].id)+"",i;return{c(){e=c("span"),i=g(n),s(e,"class","badge svelte-mpjrp9")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&16&&n!==(n=o[11](o[24].id)+"")&&b(i,n)},d(o){o&&F(e)}}}function mo(t){let e;return{c(){e=g("...")},m(n,i){K(n,e,i)},p:de,d(n){n&&F(e)}}}function ho(t){let e=t[24].ping+"",n,i;return{c(){n=g(e),i=g("ms")},m(o,a){K(o,n,a),K(o,i,a)},p(o,a){a&16&&e!==(e=o[24].ping+"")&&b(n,e)},d(o){o&&(F(n),F(i))}}}function go(t){let e;return{c(){e=g("-")},m(n,i){K(n,e,i)},p:de,d(n){n&&F(e)}}}function fi(t,e){let n,i,o,a,r,_,d=(e[24].connected?e[5].status_online:e[5].status_offline)+"",u,v,f,m,j=(e[24].nickname||e[24].id)+"",w,A,p=e[11](e[24].id)>0,C,D,P=(e[24].virtualIP||e[5].na)+"",k,N,y,I,J,B=(e[24].path?e[12](e[24].path):e[5].path_unknown)+"",S,E,M,L,q,V,Q,ce,O,Y,U,z,te,oe,Z,H,pe,ue=p&&_i(e);function Ie(){return e[20](e[24])}function Ne(...me){return e[21](e[24],...me)}function fe(me,le){return me[24].connected?me[24].ping>=0&&!me[1][me[24].id]?ho:mo:go}let ye=fe(e),ge=ye(e);function je(){return e[22](e[24])}function De(){return e[23](e[24])}return{key:t,first:null,c(){n=c("div"),i=c("span"),o=c("span"),r=h(),_=c("span"),u=g(d),v=h(),f=c("span"),m=c("span"),w=g(j),A=h(),ue&&ue.c(),C=h(),D=c("span"),k=g(P),N=h(),y=c("span"),ge.c(),I=h(),J=c("span"),S=g(B),M=h(),L=c("span"),q=c("button"),V=g("[~]"),Y=h(),U=c("button"),z=g("[>]"),Z=h(),s(o,"class",a="sq "+(e[24].connected?"sq-online":"sq-offline")+" svelte-mpjrp9"),s(o,"aria-hidden","true"),s(_,"class","status-text svelte-mpjrp9"),s(i,"class","status-cell svelte-mpjrp9"),s(i,"role","cell"),s(m,"class","nickname svelte-mpjrp9"),s(f,"class","col-name"),s(f,"role","cell"),s(D,"class","col-ip clickable svelte-mpjrp9"),s(D,"role","button"),s(D,"tabindex","0"),s(y,"class","col-ping svelte-mpjrp9"),s(y,"role","cell"),ke(y,"probing",e[24].connected&&(e[24].ping<0||e[1][e[24].id])),s(J,"class","col-path svelte-mpjrp9"),s(J,"role","cell"),s(J,"title",E=e[13](e[24].path)),s(q,"class","row-btn svelte-mpjrp9"),q.disabled=Q=!e[24].connected||!!e[1][e[24].id],s(q,"title",ce=e[5].ping_peer),s(q,"aria-label",O=e[5].ping_peer),s(U,"class","row-btn svelte-mpjrp9"),s(U,"title",te=e[5].chat+" "+(e[24].nickname||e[24].id)),s(U,"aria-label",oe=e[5].chat+" "+(e[24].nickname||e[24].id)),s(L,"class","col-action svelte-mpjrp9"),s(L,"role","cell"),s(n,"class","table-row svelte-mpjrp9"),s(n,"role","row"),this.first=n},m(me,le){K(me,n,le),l(n,i),l(i,o),l(i,r),l(i,_),l(_,u),l(n,v),l(n,f),l(f,m),l(m,w),l(f,A),ue&&ue.m(f,null),l(n,C),l(n,D),l(D,k),l(n,N),l(n,y),ge.m(y,null),l(n,I),l(n,J),l(J,S),l(n,M),l(n,L),l(L,q),l(q,V),l(L,Y),l(L,U),l(U,z),l(n,Z),H||(pe=[W(D,"click",Ie),W(D,"keydown",Ne),W(q,"click",je),W(U,"click",De)],H=!0)},p(me,le){e=me,le&16&&a!==(a="sq "+(e[24].connected?"sq-online":"sq-offline")+" svelte-mpjrp9")&&s(o,"class",a),le&48&&d!==(d=(e[24].connected?e[5].status_online:e[5].status_offline)+"")&&b(u,d),le&16&&j!==(j=(e[24].nickname||e[24].id)+"")&&b(w,j),le&16&&(p=e[11](e[24].id)>0),p?ue?ue.p(e,le):(ue=_i(e),ue.c(),ue.m(f,null)):ue&&(ue.d(1),ue=null),le&48&&P!==(P=(e[24].virtualIP||e[5].na)+"")&&b(k,P),ye===(ye=fe(e))&&ge?ge.p(e,le):(ge.d(1),ge=ye(e),ge&&(ge.c(),ge.m(y,null))),le&18&&ke(y,"probing",e[24].connected&&(e[24].ping<0||e[1][e[24].id])),le&48&&B!==(B=(e[24].path?e[12](e[24].path):e[5].path_unknown)+"")&&b(S,B),le&16&&E!==(E=e[13](e[24].path))&&s(J,"title",E),le&18&&Q!==(Q=!e[24].connected||!!e[1][e[24].id])&&(q.disabled=Q),le&32&&ce!==(ce=e[5].ping_peer)&&s(q,"title",ce),le&32&&O!==(O=e[5].ping_peer)&&s(q,"aria-label",O),le&48&&te!==(te=e[5].chat+" "+(e[24].nickname||e[24].id))&&s(U,"title",te),le&48&&oe!==(oe=e[5].chat+" "+(e[24].nickname||e[24].id))&&s(U,"aria-label",oe)},d(me){me&&F(n),ue&&ue.d(),ge.d(),H=!1,Le(pe)}}}function wo(t){let e,n,i,o=(t[0].room||t[5].network)+"",a,r,_,d=(t[0].virtualIP||t[5].na)+"",u,v,f,m,j,w,A,p,C,D,P,k=t[5].col_nickname+"",N,y,I,J=t[5].col_ip+"",B,S,E,M=t[5].col_ping+"",L,q,V,Q=t[5].col_path+"",ce,O,Y,U,z,te,oe,Z,H,pe=t[5].status_online+"",ue,Ie,Ne,fe,ye=(t[6].nickname||t[5].you)+"",ge,je,De,me=t[5].me+"",le,We,_e,he=(t[0].virtualIP||t[5].na)+"",be,X,se,st,Fe,rt,it,re,Ae=[],R=new Map,x,Se,Re,we=t[0].room&&ai(t),Ee=t[2]&&ci(t),Ke=ft(t[4]);const bt=$=>$[24].id;for(let $=0;$n(5,r=E)),ve(t,Xl,E=>n(15,_=E)),ve(t,ze,E=>n(0,d=E)),ve(t,Yl,E=>n(16,u=E)),ve(t,Be,E=>n(6,v=E));let f={};function m(E){cn.set({id:E.id,nickname:E.nickname||E.id}),Kl("peer:"+E.id),Ce.set("chat")}function j(){cn.set(null),Kl("room:"+(d.room||"network")),Ce.set("chat")}async function w(E){if(E)try{await window.go.main.App.CopyText(E),ee(r.copied)}catch{}}async function A(E){if(!(!E?.id||!E.connected||f[E.id])){n(1,f={...f,[E.id]:!0});try{await window.go.main.App.PingPeer(E.id),ee(ne(r.ping_sent,{name:E.nickname||E.id}))}catch(M){ee(ne(r.error_ping,{err:M}),"error")}finally{setTimeout(()=>{const M={...f};delete M[E.id],n(1,f=M)},800)}}}function p(E){return _["peer:"+E]||0}function C(E){return E==="p2p"?r.path_p2p:E==="relay"?r.path_relay:E==="ws"?r.path_ws:r.path_unknown}function D(E){return E==="p2p"?r.path_p2p_tip:E==="relay"?r.path_relay_tip:E==="ws"?r.path_ws_tip:""}function P(E,M){(E.key==="Enter"||E.key===" ")&&(E.preventDefault(),w(M))}const k=()=>w(d.virtualIP),N=()=>w(d.virtualIP),y=E=>P(E,d.virtualIP),I=E=>w(E.virtualIP),J=(E,M)=>P(M,E.virtualIP),B=E=>A(E),S=E=>m(E);return t.$$.update=()=>{t.$$.dirty&65536&&n(4,i=[...u].sort((E,M)=>(E.nickname||"").localeCompare(M.nickname||""))),t.$$.dirty&32769&&n(3,o=_["room:"+(d.room||"network")]||0),t.$$.dirty&65536&&n(2,a=u.some(E=>E.path==="relay"||E.path==="ws"))},[d,f,a,o,i,r,v,m,j,w,A,p,C,D,P,_,u,k,N,y,I,J,B,S]}class bo extends wt{constructor(e){super(),gt(this,e,ko,wo,dt,{})}}function di(t){let e,n=t[2].status_relay_degraded+"",i,o;return{c(){e=c("span"),i=g(n),s(e,"class","degraded status-item svelte-1pzfkl"),s(e,"title",o=t[2].path_relay_tip)},m(a,r){K(a,e,r),l(e,i)},p(a,r){r&4&&n!==(n=a[2].status_relay_degraded+"")&&b(i,n),r&4&&o!==(o=a[2].path_relay_tip)&&s(e,"title",o)},d(a){a&&F(e)}}}function pi(t){let e,n=ne(t[2].status_server,{s:t[3].server})+"",i,o;return{c(){e=c("span"),i=g(n),s(e,"class","status-item status-server svelte-1pzfkl"),s(e,"title",o=t[3].server)},m(a,r){K(a,e,r),l(e,i)},p(a,r){r&12&&n!==(n=ne(a[2].status_server,{s:a[3].server})+"")&&b(i,n),r&8&&o!==(o=a[3].server)&&s(e,"title",o)},d(a){a&&F(e)}}}function vi(t){let e,n=ne(t[2].status_ip,{ip:t[3].virtualIP})+"",i,o;return{c(){e=c("span"),i=g(n),s(e,"class","status-item svelte-1pzfkl"),s(e,"title",o=t[3].virtualIP)},m(a,r){K(a,e,r),l(e,i)},p(a,r){r&12&&n!==(n=ne(a[2].status_ip,{ip:a[3].virtualIP})+"")&&b(i,n),r&8&&o!==(o=a[3].virtualIP)&&s(e,"title",o)},d(a){a&&F(e)}}}function mi(t){let e,n=ne(t[2].status_network,{room:t[3].room})+"",i,o;return{c(){e=c("span"),i=g(n),s(e,"class","status-item status-room svelte-1pzfkl"),s(e,"title",o=t[3].room)},m(a,r){K(a,e,r),l(e,i)},p(a,r){r&12&&n!==(n=ne(a[2].status_network,{room:a[3].room})+"")&&b(i,n),r&8&&o!==(o=a[3].room)&&s(e,"title",o)},d(a){a&&F(e)}}}function hi(t){let e,n=ne(t[2].status_peers,{n:t[3].peerCount})+"",i;return{c(){e=c("span"),i=g(n),s(e,"class","status-item svelte-1pzfkl")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&12&&n!==(n=ne(o[2].status_peers,{n:o[3].peerCount})+"")&&b(i,n)},d(o){o&&F(e)}}}function yo(t){let e,n,i,o,a,r,_,d,u,v,f,m,j,w,A=ne(t[2].version,{v:t[4]})+"",p,C=t[1]&&t[3].connected&&di(t),D=t[3].server&&pi(t),P=t[3].virtualIP&&vi(t),k=t[3].room&&mi(t),N=t[3].peerCount!==void 0&&hi(t);return{c(){e=c("footer"),n=c("div"),i=c("span"),o=h(),a=c("span"),r=g(t[0]),_=h(),C&&C.c(),d=h(),u=c("div"),D&&D.c(),v=h(),P&&P.c(),f=h(),k&&k.c(),m=h(),N&&N.c(),j=h(),w=c("span"),p=g(A),s(i,"class","sq svelte-1pzfkl"),s(i,"aria-hidden","true"),ke(i,"sq-connected",t[3].connected&&!t[3].reconnecting),ke(i,"sq-warn",t[3].reconnecting),s(a,"class","status-item svelte-1pzfkl"),s(a,"title",t[5]),s(n,"class","status-left svelte-1pzfkl"),s(w,"class","status-item status-ver svelte-1pzfkl"),s(u,"class","status-right svelte-1pzfkl"),s(e,"class","statusbar svelte-1pzfkl"),s(e,"role","status"),s(e,"aria-live","polite")},m(y,I){K(y,e,I),l(e,n),l(n,i),l(n,o),l(n,a),l(a,r),l(n,_),C&&C.m(n,null),l(e,d),l(e,u),D&&D.m(u,null),l(u,v),P&&P.m(u,null),l(u,f),k&&k.m(u,null),l(u,m),N&&N.m(u,null),l(u,j),l(u,w),l(w,p)},p(y,[I]){I&8&&ke(i,"sq-connected",y[3].connected&&!y[3].reconnecting),I&8&&ke(i,"sq-warn",y[3].reconnecting),I&1&&b(r,y[0]),I&32&&s(a,"title",y[5]),y[1]&&y[3].connected?C?C.p(y,I):(C=di(y),C.c(),C.m(n,null)):C&&(C.d(1),C=null),y[3].server?D?D.p(y,I):(D=pi(y),D.c(),D.m(u,v)):D&&(D.d(1),D=null),y[3].virtualIP?P?P.p(y,I):(P=vi(y),P.c(),P.m(u,f)):P&&(P.d(1),P=null),y[3].room?k?k.p(y,I):(k=mi(y),k.c(),k.m(u,m)):k&&(k.d(1),k=null),y[3].peerCount!==void 0?N?N.p(y,I):(N=hi(y),N.c(),N.m(u,j)):N&&(N.d(1),N=null),I&20&&A!==(A=ne(y[2].version,{v:y[4]})+"")&&b(p,A)},i:de,o:de,d(y){y&&F(e),C&&C.d(),D&&D.d(),P&&P.d(),k&&k.d(),N&&N.d()}}}function jo(t,e,n){let i,o,a,r,_,d;ve(t,kt,v=>n(2,r=v)),ve(t,ze,v=>n(3,_=v)),ve(t,Yl,v=>n(6,d=v));let u="1.0.0";return fn(async()=>{try{window.go?.main?.App?.GetVersion&&n(4,u=await window.go.main.App.GetVersion())}catch{}}),t.$$.update=()=>{t.$$.dirty&64&&n(1,i=(d||[]).some(v=>v.path==="relay"||v.path==="ws")),t.$$.dirty&12&&n(0,o=_.reconnecting?r.status_reconnecting:_.connected?r.status_connected:r.status_disconnected),t.$$.dirty&15&&n(5,a=i&&_.connected?r.status_relay_degraded:o)},[o,i,r,_,u,a,d]}class So extends wt{constructor(e){super(),gt(this,e,jo,yo,dt,{})}}function Eo(t){let e,n,i,o,a=t[0].server+"",r,_,d,u=t[1].server+"",v,f,m,j,w=t[0].virtual_ip+"",A,p,C,D=(t[1].virtualIP||t[0].na)+"",P,k,N,y=t[0].disconnect+"",I,J,B;function S(L,q){return L[1].reconnecting?Co:Po}let E=S(t),M=E(t);return{c(){e=c("div"),M.c(),n=h(),i=c("div"),o=c("span"),r=g(a),_=h(),d=c("span"),v=g(u),f=h(),m=c("div"),j=c("span"),A=g(w),p=h(),C=c("span"),P=g(D),k=h(),N=c("button"),I=g(y),s(d,"class","info-value svelte-1br9j49"),s(i,"class","info-line svelte-1br9j49"),s(C,"class","info-value svelte-1br9j49"),s(m,"class","info-line svelte-1br9j49"),s(N,"class","disconnect-btn svelte-1br9j49"),s(e,"class","connected-info svelte-1br9j49")},m(L,q){K(L,e,q),M.m(e,null),l(e,n),l(e,i),l(i,o),l(o,r),l(i,_),l(i,d),l(d,v),l(e,f),l(e,m),l(m,j),l(j,A),l(m,p),l(m,C),l(C,P),l(e,k),l(e,N),l(N,I),J||(B=W(N,"click",t[12]),J=!0)},p(L,q){E===(E=S(L))&&M?M.p(L,q):(M.d(1),M=E(L),M&&(M.c(),M.m(e,n))),q&1&&a!==(a=L[0].server+"")&&b(r,a),q&2&&u!==(u=L[1].server+"")&&b(v,u),q&1&&w!==(w=L[0].virtual_ip+"")&&b(A,w),q&3&&D!==(D=(L[1].virtualIP||L[0].na)+"")&&b(P,D),q&1&&y!==(y=L[0].disconnect+"")&&b(I,y)},d(L){L&&F(e),M.d(),J=!1,B()}}}function Ao(t){let e,n,i,o=t[0].brand+"",a,r,_,d=t[0].tagline+"",u,v,f,m,j=t[0].server_addr+"",w,A,p,C,D,P,k,N,y,I=t[0].nickname+"",J,B,S,E,M,L,q,V,Q=(t[5]?t[0].connecting:t[0].connect)+"",ce,O,Y,U,z,te=t[0].paste_invite+"",oe,Z,H,pe,ue=t[0].paste_invite+"",Ie,Ne,fe,ye,ge,je,De=t[0].join+"",me,le,We,_e=t[7].serverAddr&&gi(t),he=t[7].nickname&&wi(t),be=(t[5]||t[1].phase==="dialing"||t[1].phase==="auth")&&ki(t);return{c(){e=c("div"),n=c("div"),i=c("h1"),a=g(o),r=h(),_=c("p"),u=g(d),v=h(),f=c("div"),m=c("label"),w=g(j),A=h(),p=c("input"),P=h(),_e&&_e.c(),k=h(),N=c("div"),y=c("label"),J=g(I),B=h(),S=c("input"),L=h(),he&&he.c(),q=h(),V=c("button"),ce=g(Q),O=h(),be&&be.c(),Y=h(),U=c("details"),z=c("summary"),oe=g(te),Z=h(),H=c("div"),pe=c("label"),Ie=g(ue),Ne=h(),fe=c("input"),ge=h(),je=c("button"),me=g(De),s(i,"class","brand svelte-1br9j49"),s(_,"class","tagline svelte-1br9j49"),s(n,"class","brand-block svelte-1br9j49"),s(m,"for","server-input"),s(m,"class","svelte-1br9j49"),s(p,"id","server-input"),s(p,"type","text"),s(p,"placeholder","host:8080"),s(p,"aria-invalid",C=!!t[7].serverAddr),s(p,"aria-describedby",D=t[7].serverAddr?"server-err":void 0),s(p,"class","svelte-1br9j49"),ke(p,"invalid",t[7].serverAddr),s(f,"class","field svelte-1br9j49"),s(y,"for","nick-input"),s(y,"class","svelte-1br9j49"),s(S,"id","nick-input"),s(S,"type","text"),s(S,"placeholder","Player"),s(S,"aria-invalid",E=!!t[7].nickname),s(S,"aria-describedby",M=t[7].nickname?"nick-err":void 0),s(S,"class","svelte-1br9j49"),ke(S,"invalid",t[7].nickname),s(N,"class","field svelte-1br9j49"),s(V,"class","connect-btn svelte-1br9j49"),V.disabled=t[5],s(z,"class","svelte-1br9j49"),s(pe,"for","invite-input"),s(pe,"class","sr-only svelte-1br9j49"),s(fe,"id","invite-input"),s(fe,"type","text"),s(fe,"placeholder",ye=t[0].invite_placeholder),s(fe,"class","svelte-1br9j49"),s(je,"class","secondary-btn svelte-1br9j49"),je.disabled=t[5],s(H,"class","invite-block svelte-1br9j49"),s(U,"class","invite-disclosure svelte-1br9j49"),s(e,"class","connect-form svelte-1br9j49")},m(X,se){K(X,e,se),l(e,n),l(n,i),l(i,a),l(n,r),l(n,_),l(_,u),l(e,v),l(e,f),l(f,m),l(m,w),l(f,A),l(f,p),ie(p,t[2]),l(f,P),_e&&_e.m(f,null),l(e,k),l(e,N),l(N,y),l(y,J),l(N,B),l(N,S),ie(S,t[3]),l(N,L),he&&he.m(N,null),l(e,q),l(e,V),l(V,ce),l(e,O),be&&be.m(e,null),l(e,Y),l(e,U),l(U,z),l(z,oe),l(U,Z),l(U,H),l(H,pe),l(pe,Ie),l(H,Ne),l(H,fe),ie(fe,t[4]),l(H,ge),l(H,je),l(je,me),U.open=t[6],le||(We=[W(p,"input",t[13]),W(S,"input",t[14]),W(S,"keydown",t[11]),W(V,"click",t[9]),W(fe,"input",t[15]),W(je,"click",t[10]),W(U,"toggle",t[16])],le=!0)},p(X,se){se&1&&o!==(o=X[0].brand+"")&&b(a,o),se&1&&d!==(d=X[0].tagline+"")&&b(u,d),se&1&&j!==(j=X[0].server_addr+"")&&b(w,j),se&128&&C!==(C=!!X[7].serverAddr)&&s(p,"aria-invalid",C),se&128&&D!==(D=X[7].serverAddr?"server-err":void 0)&&s(p,"aria-describedby",D),se&4&&p.value!==X[2]&&ie(p,X[2]),se&128&&ke(p,"invalid",X[7].serverAddr),X[7].serverAddr?_e?_e.p(X,se):(_e=gi(X),_e.c(),_e.m(f,null)):_e&&(_e.d(1),_e=null),se&1&&I!==(I=X[0].nickname+"")&&b(J,I),se&128&&E!==(E=!!X[7].nickname)&&s(S,"aria-invalid",E),se&128&&M!==(M=X[7].nickname?"nick-err":void 0)&&s(S,"aria-describedby",M),se&8&&S.value!==X[3]&&ie(S,X[3]),se&128&&ke(S,"invalid",X[7].nickname),X[7].nickname?he?he.p(X,se):(he=wi(X),he.c(),he.m(N,null)):he&&(he.d(1),he=null),se&33&&Q!==(Q=(X[5]?X[0].connecting:X[0].connect)+"")&&b(ce,Q),se&32&&(V.disabled=X[5]),X[5]||X[1].phase==="dialing"||X[1].phase==="auth"?be?be.p(X,se):(be=ki(X),be.c(),be.m(e,Y)):be&&(be.d(1),be=null),se&1&&te!==(te=X[0].paste_invite+"")&&b(oe,te),se&1&&ue!==(ue=X[0].paste_invite+"")&&b(Ie,ue),se&1&&ye!==(ye=X[0].invite_placeholder)&&s(fe,"placeholder",ye),se&16&&fe.value!==X[4]&&ie(fe,X[4]),se&1&&De!==(De=X[0].join+"")&&b(me,De),se&32&&(je.disabled=X[5]),se&64&&(U.open=X[6])},d(X){X&&F(e),_e&&_e.d(),he&&he.d(),be&&be.d(),le=!1,Le(We)}}}function Po(t){let e,n,i,o,a=t[0].connected+"",r;return{c(){e=c("div"),n=c("span"),i=h(),o=c("span"),r=g(a),s(n,"class","sq sq-green svelte-1br9j49"),s(n,"aria-hidden","true"),s(e,"class","connected-line svelte-1br9j49"),s(e,"role","status")},m(_,d){K(_,e,d),l(e,n),l(e,i),l(e,o),l(o,r)},p(_,d){d&1&&a!==(a=_[0].connected+"")&&b(r,a)},d(_){_&&F(e)}}}function Co(t){let e,n,i,o,a=t[0].reconnecting+"",r;return{c(){e=c("div"),n=c("span"),i=h(),o=c("span"),r=g(a),s(n,"class","sq sq-warn svelte-1br9j49"),s(n,"aria-hidden","true"),s(e,"class","connected-line svelte-1br9j49"),s(e,"role","status")},m(_,d){K(_,e,d),l(e,n),l(e,i),l(e,o),l(o,r)},p(_,d){d&1&&a!==(a=_[0].reconnecting+"")&&b(r,a)},d(_){_&&F(e)}}}function gi(t){let e,n=t[7].serverAddr+"",i;return{c(){e=c("span"),i=g(n),s(e,"id","server-err"),s(e,"class","field-error svelte-1br9j49"),s(e,"role","alert")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&128&&n!==(n=o[7].serverAddr+"")&&b(i,n)},d(o){o&&F(e)}}}function wi(t){let e,n=t[7].nickname+"",i;return{c(){e=c("span"),i=g(n),s(e,"id","nick-err"),s(e,"class","field-error svelte-1br9j49"),s(e,"role","alert")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&128&&n!==(n=o[7].nickname+"")&&b(i,n)},d(o){o&&F(e)}}}function ki(t){let e,n=(t[8]||t[0].connecting)+"",i;return{c(){e=c("div"),i=g(n),s(e,"class","phase svelte-1br9j49"),s(e,"role","status")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&257&&n!==(n=(o[8]||o[0].connecting)+"")&&b(i,n)},d(o){o&&F(e)}}}function No(t){let e;function n(a,r){return a[1].connected?Eo:Ao}let i=n(t),o=i(t);return{c(){e=c("div"),o.c(),s(e,"class","connect-view svelte-1br9j49")},m(a,r){K(a,e,r),o.m(e,null)},p(a,[r]){i===(i=n(a))&&o?o.p(a,r):(o.d(1),o=i(a),o&&(o.c(),o.m(e,null)))},i:de,o:de,d(a){a&&F(e),o.d()}}}function Do(t,e,n){let i,o,a,r;ve(t,kt,y=>n(0,o=y)),ve(t,ze,y=>n(1,a=y)),ve(t,Be,y=>n(17,r=y));let _="",d="",u="",v=!1,f=!1,m={};fn(async()=>{const y=await window.go.main.App.LoadConfig();y.serverAddr&&n(2,_=y.serverAddr),y.nickname&&n(3,d=y.nickname),y&&Be.set({...r,...y}),y.autoConnect&&y.serverAddr&&y.nickname&&w()});function j(){const y={};return _.trim()||(y.serverAddr=o.field_required),d.trim()||(y.nickname=o.field_required),n(7,m=y),Object.keys(y).length===0}async function w(){if(!v&&j()){n(5,v=!0),un();try{const y=await window.go.main.App.Connect(_,d);ze.set(y),Ce.set("network"),ee(ne(o.notif_connected,{addr:_})),n(7,m={})}catch(y){ee(ne(o.error_connect,{err:y}),"error")}finally{n(5,v=!1)}}}async function A(){if(u.trim()){un();try{const y=await window.go.main.App.ParseInvite(u.trim());if(!y.server||!y.room){ee(o.error_invalid_invite,"error");return}if(n(2,_=y.server),!a.connected){if(!d.trim()){n(7,m={...m,nickname:o.field_required}),ee(o.notif_need_config,"error");return}n(5,v=!0);const I=await window.go.main.App.Connect(_,d);ze.set(I),n(5,v=!1)}await window.go.main.App.JoinRoom(y.room,y.password||""),ee(ne(o.notif_joined,{name:y.room})),Ce.set("network")}catch(y){ee(ne(o.error_join,{err:y}),"error"),n(5,v=!1)}}}function p(y){y.key==="Enter"&&(y.preventDefault(),w())}async function C(){if(confirm(o.confirm_disconnect))try{await window.go.main.App.Disconnect(),ze.set({connected:!1,reconnecting:!1,server:"",room:"",virtualIP:"",peerCount:0,isOwner:!1,phase:"idle"}),Ce.set("connect"),ee(o.notif_disconnected)}catch(y){ee(ne(o.error_disconnect,{err:y}),"error")}}function D(){_=this.value,n(2,_)}function P(){d=this.value,n(3,d)}function k(){u=this.value,n(4,u)}function N(){f=this.open,n(6,f)}return t.$$.update=()=>{t.$$.dirty&3&&n(8,i=a.phase==="dialing"?o.phase_dialing:a.phase==="auth"?o.phase_auth:a.phase==="ready"?o.phase_ready:a.phase==="error"?o.phase_error:"")},[o,a,_,d,u,v,f,m,i,w,A,p,C,D,P,k,N]}class Lo extends wt{constructor(e){super(),gt(this,e,Do,No,dt,{})}}function bi(t,e,n){const i=t.slice();return i[23]=e[n],i[25]=n,i}function yi(t){let e,n,i,o,a=t[0].no_messages+"",r,_,d,u=t[0].no_messages_desc+"",v;return{c(){e=c("div"),n=c("div"),n.textContent="[ . . . ]",i=h(),o=c("div"),r=g(a),_=h(),d=c("div"),v=g(u),s(n,"class","empty-chat-icon"),s(o,"class","empty-chat-label svelte-11c1d7e"),s(d,"class","empty-chat-desc svelte-11c1d7e"),s(e,"class","empty-chat svelte-11c1d7e")},m(f,m){K(f,e,m),l(e,n),l(e,i),l(e,o),l(o,r),l(e,_),l(e,d),l(d,v)},p(f,m){m&1&&a!==(a=f[0].no_messages+"")&&b(r,a),m&1&&u!==(u=f[0].no_messages_desc+"")&&b(v,u)},d(f){f&&F(e)}}}function ji(t){let e,n=t[12](t[23].timestamp)+"",i;return{c(){e=c("div"),i=g(n),s(e,"class","date-sep svelte-11c1d7e")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&128&&n!==(n=o[12](o[23].timestamp)+"")&&b(i,n)},d(o){o&&F(e)}}}function Io(t){let e,n,i,o=(t[23].isSelf?t[6].nickname||t[0].you_self:t[23].nickname)+"",a,r,_,d,u,v=t[23].message+"",f,m,j=t[23].status==="pending"&&Si(),w=t[23].status==="failed"&&Ei(t);return{c(){e=c("div"),n=c("div"),i=c("span"),a=g(o),r=h(),j&&j.c(),_=h(),w&&w.c(),d=h(),u=c("div"),f=g(v),m=h(),s(i,"class","msg-nick"),s(n,"class","msg-meta svelte-11c1d7e"),s(u,"class","msg-body svelte-11c1d7e"),s(e,"class","msg svelte-11c1d7e"),ke(e,"self",t[23].isSelf)},m(A,p){K(A,e,p),l(e,n),l(n,i),l(i,a),l(n,r),j&&j.m(n,null),l(n,_),w&&w.m(n,null),l(e,d),l(e,u),l(u,f),l(e,m)},p(A,p){p&193&&o!==(o=(A[23].isSelf?A[6].nickname||A[0].you_self:A[23].nickname)+"")&&b(a,o),A[23].status==="pending"?j||(j=Si(),j.c(),j.m(n,_)):j&&(j.d(1),j=null),A[23].status==="failed"?w?w.p(A,p):(w=Ei(A),w.c(),w.m(n,null)):w&&(w.d(1),w=null),p&128&&v!==(v=A[23].message+"")&&b(f,v),p&128&&ke(e,"self",A[23].isSelf)},d(A){A&&F(e),j&&j.d(),w&&w.d()}}}function Ro(t){let e,n=t[23].message+"",i;return{c(){e=c("div"),i=g(n),s(e,"class","system-line svelte-11c1d7e")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&128&&n!==(n=o[23].message+"")&&b(i,n)},d(o){o&&F(e)}}}function Si(t){let e;return{c(){e=c("span"),e.textContent="…",s(e,"class","msg-status")},m(n,i){K(n,e,i)},d(n){n&&F(e)}}}function Ei(t){let e,n=t[0].retry+"",i,o,a;function r(){return t[18](t[23])}return{c(){e=c("button"),i=g(n),s(e,"class","retry-btn svelte-11c1d7e")},m(_,d){K(_,e,d),l(e,i),o||(a=W(e,"click",r),o=!0)},p(_,d){t=_,d&1&&n!==(n=t[0].retry+"")&&b(i,n)},d(_){_&&F(e),o=!1,a()}}}function Ai(t,e){let n,i=Pi(e[23],e[25],e[7]),o,a,r=i&&ji(e);function _(v,f){return v[23].system?Ro:Io}let d=_(e),u=d(e);return{key:t,first:null,c(){n=Ul(),r&&r.c(),o=h(),u.c(),a=Ul(),this.first=n},m(v,f){K(v,n,f),r&&r.m(v,f),K(v,o,f),u.m(v,f),K(v,a,f)},p(v,f){e=v,f&128&&(i=Pi(e[23],e[25],e[7])),i?r?r.p(e,f):(r=ji(e),r.c(),r.m(o.parentNode,o)):r&&(r.d(1),r=null),d===(d=_(e))&&u?u.p(e,f):(u.d(1),u=d(e),u&&(u.c(),u.m(a.parentNode,a)))},d(v){v&&(F(n),F(o),F(a)),r&&r.d(v),u.d(v)}}}function To(t){let e,n,i,o,a,r,_,d,u,v,f,m=[],j=new Map,w,A,p,C,D,P,k,N=t[0].send+"",y,I,J,B,S=t[7].length===0&&yi(t),E=ft(t[7]);const M=L=>L[23].id;for(let L=0;Ln(15,a=S)),ve(t,kt,S=>n(0,r=S)),ve(t,cn,S=>n(16,_=S)),ve(t,Be,S=>n(6,d=S)),ve(t,Ce,S=>n(17,u=S)),ve(t,so,S=>n(7,v=S));let f="",m,j,w=!0;Gi(()=>{m&&w&&n(2,m.scrollTop=m.scrollHeight,m)});function A(){if(!m)return;w=m.scrollHeight-m.scrollTop-m.clientHeight<60}async function p(){const S=f.trim();if(!S)return;if(!a.connected){ee(r.error_not_connected,"error");return}if(!a.room){ee(r.send_disabled_no_room,"error");return}let E=S;const M=[...S];M.length>1e3&&(E=M.slice(0,1e3).join(""),ee(r.msg_truncated,"info")),n(1,f=""),j&&n(3,j.style.height="auto",j);const L="local_"+Date.now()+"_"+Math.random().toString(36).slice(2,7);Ql(L,d.nickname||r.you_self,E,!0,"pending");try{_&&_.id?await window.go.main.App.SendChat(_.id,E):await window.go.main.App.BroadcastChat(E),ln(L,"sent")}catch(q){ln(L,"failed"),ee(ne(r.error_send,{err:q}),"error")}}async function C(S){ln(S.id,"pending");try{_&&_.id?await window.go.main.App.SendChat(_.id,S.message):await window.go.main.App.BroadcastChat(S.message),ln(S.id,"sent")}catch(E){ln(S.id,"failed"),ee(ne(r.error_send,{err:E}),"error")}}function D(S){S.key==="Enter"&&!S.shiftKey&&(S.preventDefault(),p())}function P(S){const E=new Date(S),M=new Date,L=new Date(M.getFullYear(),M.getMonth(),M.getDate()),q=new Date(L-864e5),V=new Date(E.getFullYear(),E.getMonth(),E.getDate());return V.getTime()===L.getTime()?r.today:V.getTime()===q.getTime()?r.yesterday:E.toLocaleDateString([],{weekday:"long",month:"short",day:"numeric"})}function k(){j&&(n(3,j.style.height="auto",j),n(3,j.style.height=Math.min(j.scrollHeight,120)+"px",j))}function N(){cn.set(null),Ce.set("network")}const y=S=>C(S);function I(S){Vt[S?"unshift":"push"](()=>{m=S,n(2,m)})}function J(S){Vt[S?"unshift":"push"](()=>{j=S,n(3,j)})}function B(){f=this.value,n(1,f)}return t.$$.update=()=>{t.$$.dirty&131072&&u==="chat"&&Kl(_n()),t.$$.dirty&98305&&n(5,i=_?ne(r.chat_with,{name:_.nickname}):ne(r.room_chat_title,{room:a.room||r.network})),t.$$.dirty&32768&&n(4,o=a.connected&&!!a.room)},[r,f,m,j,o,i,d,v,A,p,C,D,P,k,N,a,_,u,y,I,J,B]}class Mo extends wt{constructor(e){super(),gt(this,e,Oo,To,dt,{})}}function Ci(t){let e,n=t[7].notif_reconnect_required+"",i;return{c(){e=c("p"),i=g(n),s(e,"class","reconnect-banner svelte-1pfl9w0"),s(e,"role","status")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&128&&n!==(n=o[7].notif_reconnect_required+"")&&b(i,n)},d(o){o&&F(e)}}}function Ni(t){let e,n=t[7].apply_update+"",i,o,a;return{c(){e=c("button"),i=g(n),s(e,"class","btn btn-update svelte-1pfl9w0"),s(e,"type","button"),e.disabled=t[3]},m(r,_){K(r,e,_),l(e,i),o||(a=W(e,"click",t[10]),o=!0)},p(r,_){_&128&&n!==(n=r[7].apply_update+"")&&b(i,n),_&8&&(e.disabled=r[3])},d(r){r&&F(e),o=!1,a()}}}function qo(t){let e,n=t[7].update_failed+"",i,o,a;return{c(){e=c("p"),i=g(n),o=g(": "),a=g(t[6]),s(e,"class","hint reconnect-hint svelte-1pfl9w0")},m(r,_){K(r,e,_),l(e,i),l(e,o),l(e,a)},p(r,_){_&128&&n!==(n=r[7].update_failed+"")&&b(i,n),_&64&&b(a,r[6])},d(r){r&&F(e)}}}function Uo(t){let e,n=t[7].update_downloading+"",i;return{c(){e=c("p"),i=g(n),s(e,"class","hint svelte-1pfl9w0")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&128&&n!==(n=o[7].update_downloading+"")&&b(i,n)},d(o){o&&F(e)}}}function zo(t){let e,n=ne(t[7].update_available,{v:t[5]})+"",i;return{c(){e=c("p"),i=g(n),s(e,"class","hint svelte-1pfl9w0")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&160&&n!==(n=ne(o[7].update_available,{v:o[5]})+"")&&b(i,n)},d(o){o&&F(e)}}}function Wo(t){let e,n=t[7].update_latest+"",i;return{c(){e=c("p"),i=g(n),s(e,"class","hint svelte-1pfl9w0")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&128&&n!==(n=o[7].update_latest+"")&&b(i,n)},d(o){o&&F(e)}}}function Fo(t){let e,n=t[7].update_checking+"",i;return{c(){e=c("p"),i=g(n),s(e,"class","hint svelte-1pfl9w0")},m(o,a){K(o,e,a),l(e,i)},p(o,a){a&128&&n!==(n=o[7].update_checking+"")&&b(i,n)},d(o){o&&F(e)}}}function Ko(t){let e,n,i=t[7].settings_title+"",o,a,r,_,d,u,v,f=t[7].section_connection+"",m,j,w,A,p,C=t[7].server_addr+"",D,P,k,N,y,I,J=t[7].nickname+"",B,S,E,M,L,q,V=t[7].server_token+"",Q,ce,O,Y,U,z,te=t[7].reconnect_apply+"",oe,Z,H,pe,ue=t[7].auto_connect+"",Ie,Ne,fe,ye,ge,je=t[7].auto_connect_desc+"",De,me,le,We,_e=t[7].auto_join+"",he,be,X,se,st,Fe=t[7].auto_join_desc+"",rt,it,re,Ae,R,x=t[7].section_network+"",Se,Re,we,Ee,Ke=t[7].advanced_warn+"",bt,Pe,$,ae,Je=t[7].connection_mode+"",il,xl,xe,yt,dn=t[7].connection_direct+"",ol,jt,pn=t[7].connection_relay+"",al,es,vn,mn=t[7].connection_mode_desc+"",rl,ts,St,Yt,hn=t[7].mtu+"",cl,ns,Ge,ls,gn,wn=t[7].mtu_desc+"",ul,ss,Et,Ht,kn=t[7].dns_server+"",_l,is,et,os,bn,yn=t[7].dns_desc+"",fl,as,At,Xt,jn=t[7].socks5+"",dl,rs,He,Sn,cs,En,An=t[7].socks5_desc+"",pl,us,Pt,Qt,Pn=t[7].stun_server+"",vl,_s,tt,fs,Cn,Nn=t[7].stun_desc+"",ml,ds,Xe,Ct,ps,Dn=t[7].section_system+"",hl,vs,ms,Nt,Ln,In=t[7].start_windows+"",gl,hs,pt,gs,ot,Rn,Tn=t[7].updates+"",wl,ws,ct,On=t[7].check_updates+"",kl,ks,bs,ys,Ve,Dt,js,Mn=t[7].section_appearance+"",bl,Ss,Es,ut,Zt,qn=t[7].ui_scale+"",yl,As,Qe,Un,Ps,$t,zn=(t[0].uiScale??100)+"",jl,Cs,Ns,Wn,Fn=t[7].ui_scale_desc+"",Sl,Ds,Lt,Kn,Jn=t[7].theme+"",El,Ls,at,It,qe,Is,Gn=t[7].theme_dark+"",Al,Rs,Rt,Ue,Ts,Vn=t[7].theme_light+"",Pl,Bn,Os,Tt,xt,Yn=t[7].language+"",Cl,Ms,nt,Ot,Hn=t[7].language_en+"",Nl,Mt,Xn=t[7].language_ru+"",Dl,qt,Qn=t[7].language_zh+"",Ll,qs,Us,_t,en,Zn=t[7].save+"",Il,zs,tn,$n=t[7].reset+"",Rl,Ws,nn,Fs,Tl,Ol,Ml,Ks,Te=t[2]&&Ci(t),Oe=t[4]==="available"&&Ni(t);function Js(T,G){if(T[4]==="checking")return Fo;if(T[4]==="latest")return Wo;if(T[4]==="available")return zo;if(T[4]==="downloading")return Uo;if(T[4]==="error"&&T[6])return qo}let Ut=Js(t),Me=Ut&&Ut(t);return Ol=Fi(t[28][0]),{c(){e=c("div"),n=c("h2"),o=g(i),a=h(),r=c("div"),Te&&Te.c(),_=h(),d=c("div"),u=c("div"),v=g("─── "),m=g(f),j=g(" ───"),w=h(),A=c("div"),p=c("label"),D=g(C),P=h(),k=c("input"),N=h(),y=c("div"),I=c("label"),B=g(J),S=h(),E=c("input"),M=h(),L=c("div"),q=c("label"),Q=g(V),ce=h(),O=c("input"),U=h(),z=c("p"),oe=g(te),Z=h(),H=c("label"),pe=c("span"),Ie=g(ue),Ne=h(),fe=c("input"),ye=h(),ge=c("span"),De=g(je),me=h(),le=c("label"),We=c("span"),he=g(_e),be=h(),X=c("input"),se=h(),st=c("span"),rt=g(Fe),it=h(),re=c("div"),Ae=c("div"),R=g("─── "),Se=g(x),Re=g(" ───"),we=h(),Ee=c("p"),bt=g(Ke),Pe=h(),$=c("div"),ae=c("label"),il=g(Je),xl=h(),xe=c("select"),yt=c("option"),ol=g(dn),jt=c("option"),al=g(pn),es=h(),vn=c("p"),rl=g(mn),ts=h(),St=c("div"),Yt=c("label"),cl=g(hn),ns=h(),Ge=c("input"),ls=h(),gn=c("p"),ul=g(wn),ss=h(),Et=c("div"),Ht=c("label"),_l=g(kn),is=h(),et=c("input"),os=h(),bn=c("p"),fl=g(yn),as=h(),At=c("div"),Xt=c("label"),dl=g(jn),rs=h(),He=c("input"),cs=h(),En=c("p"),pl=g(An),us=h(),Pt=c("div"),Qt=c("label"),vl=g(Pn),_s=h(),tt=c("input"),fs=h(),Cn=c("p"),ml=g(Nn),ds=h(),Xe=c("div"),Ct=c("div"),ps=g("─── "),hl=g(Dn),vs=g(" ───"),ms=h(),Nt=c("label"),Ln=c("span"),gl=g(In),hs=h(),pt=c("input"),gs=h(),ot=c("div"),Rn=c("span"),wl=g(Tn),ws=h(),ct=c("button"),kl=g(On),ks=h(),Oe&&Oe.c(),bs=h(),Me&&Me.c(),ys=h(),Ve=c("div"),Dt=c("div"),js=g("─── "),bl=g(Mn),Ss=g(" ───"),Es=h(),ut=c("div"),Zt=c("label"),yl=g(qn),As=h(),Qe=c("input"),Ps=h(),$t=c("span"),jl=g(zn),Cs=g("%"),Ns=h(),Wn=c("p"),Sl=g(Fn),Ds=h(),Lt=c("div"),Kn=c("span"),El=g(Jn),Ls=h(),at=c("div"),It=c("label"),qe=c("input"),Is=h(),Al=g(Gn),Rs=h(),Rt=c("label"),Ue=c("input"),Ts=h(),Pl=g(Vn),Os=h(),Tt=c("div"),xt=c("label"),Cl=g(Yn),Ms=h(),nt=c("select"),Ot=c("option"),Nl=g(Hn),Mt=c("option"),Dl=g(Xn),qt=c("option"),Ll=g(Qn),Us=h(),_t=c("div"),en=c("button"),Il=g(Zn),zs=h(),tn=c("button"),Rl=g($n),Ws=h(),nn=c("div"),Fs=g("v"),Tl=g(t[1]),s(n,"class","settings-title svelte-1pfl9w0"),s(u,"class","section-title svelte-1pfl9w0"),s(p,"class","setting-label svelte-1pfl9w0"),s(p,"for","cfg-server"),s(k,"id","cfg-server"),s(k,"type","text"),s(k,"placeholder","vps.example.com:8080"),s(k,"class","svelte-1pfl9w0"),s(A,"class","setting-row svelte-1pfl9w0"),s(I,"class","setting-label svelte-1pfl9w0"),s(I,"for","cfg-nick"),s(E,"id","cfg-nick"),s(E,"type","text"),s(E,"placeholder","Your nickname"),s(E,"class","svelte-1pfl9w0"),s(y,"class","setting-row svelte-1pfl9w0"),s(q,"class","setting-label svelte-1pfl9w0"),s(q,"for","cfg-token"),s(O,"id","cfg-token"),s(O,"type","password"),s(O,"placeholder",Y=t[7].server_token_desc),s(O,"class","svelte-1pfl9w0"),s(L,"class","setting-row svelte-1pfl9w0"),s(z,"class","hint reconnect-hint svelte-1pfl9w0"),s(pe,"class","setting-label svelte-1pfl9w0"),s(fe,"type","checkbox"),s(fe,"class","svelte-1pfl9w0"),s(ge,"class","toggle-label svelte-1pfl9w0"),s(H,"class","setting-row toggle-row svelte-1pfl9w0"),s(We,"class","setting-label svelte-1pfl9w0"),s(X,"type","checkbox"),s(X,"class","svelte-1pfl9w0"),s(st,"class","toggle-label svelte-1pfl9w0"),s(le,"class","setting-row toggle-row svelte-1pfl9w0"),s(d,"class","section svelte-1pfl9w0"),s(Ae,"class","section-title svelte-1pfl9w0"),s(Ee,"class","hint svelte-1pfl9w0"),s(ae,"class","setting-label svelte-1pfl9w0"),s(ae,"for","cfg-conn"),yt.__value="direct",ie(yt,yt.__value),jt.__value="relay",ie(jt,jt.__value),s(xe,"id","cfg-conn"),s(xe,"class","svelte-1pfl9w0"),t[0].connectionMode===void 0&&tl(()=>t[21].call(xe)),s($,"class","setting-row svelte-1pfl9w0"),s(vn,"class","hint svelte-1pfl9w0"),s(Yt,"class","setting-label svelte-1pfl9w0"),s(Yt,"for","cfg-mtu"),s(Ge,"id","cfg-mtu"),s(Ge,"type","number"),s(Ge,"min","576"),s(Ge,"max","9000"),s(Ge,"placeholder","1500"),s(Ge,"class","svelte-1pfl9w0"),s(St,"class","setting-row svelte-1pfl9w0"),s(gn,"class","hint svelte-1pfl9w0"),s(Ht,"class","setting-label svelte-1pfl9w0"),s(Ht,"for","cfg-dns"),s(et,"id","cfg-dns"),s(et,"type","text"),s(et,"placeholder","system default"),s(et,"class","svelte-1pfl9w0"),s(Et,"class","setting-row svelte-1pfl9w0"),s(bn,"class","hint svelte-1pfl9w0"),s(Xt,"class","setting-label svelte-1pfl9w0"),s(Xt,"for","cfg-socks"),s(He,"id","cfg-socks"),s(He,"type","text"),s(He,"placeholder",Sn=t[7].socks5_placeholder),s(He,"class","svelte-1pfl9w0"),s(At,"class","setting-row svelte-1pfl9w0"),s(En,"class","hint reconnect-hint svelte-1pfl9w0"),s(Qt,"class","setting-label svelte-1pfl9w0"),s(Qt,"for","cfg-stun"),s(tt,"id","cfg-stun"),s(tt,"type","text"),s(tt,"placeholder","stun.l.google.com:19302"),s(tt,"class","svelte-1pfl9w0"),s(Pt,"class","setting-row svelte-1pfl9w0"),s(Cn,"class","hint reconnect-hint svelte-1pfl9w0"),s(re,"class","section svelte-1pfl9w0"),s(Ct,"class","section-title svelte-1pfl9w0"),s(Ln,"class","setting-label svelte-1pfl9w0"),s(pt,"type","checkbox"),s(pt,"class","svelte-1pfl9w0"),s(Nt,"class","setting-row toggle-row svelte-1pfl9w0"),s(Rn,"class","setting-label svelte-1pfl9w0"),s(ct,"class","btn btn-check svelte-1pfl9w0"),s(ct,"type","button"),ct.disabled=t[3],s(ot,"class","setting-row update-row svelte-1pfl9w0"),s(Xe,"class","section svelte-1pfl9w0"),s(Dt,"class","section-title svelte-1pfl9w0"),s(Zt,"class","setting-label svelte-1pfl9w0"),s(Zt,"for","cfg-scale"),s(Qe,"id","cfg-scale"),s(Qe,"type","range"),s(Qe,"min","75"),s(Qe,"max","150"),s(Qe,"step","5"),Qe.value=Un=t[0].uiScale??100,s(Qe,"class","svelte-1pfl9w0"),s($t,"class","scale-value svelte-1pfl9w0"),s(ut,"class","setting-row scale-row svelte-1pfl9w0"),s(Wn,"class","hint svelte-1pfl9w0"),s(Kn,"class","setting-label svelte-1pfl9w0"),s(qe,"type","radio"),qe.__value="dark",ie(qe,qe.__value),s(It,"class","radio-option svelte-1pfl9w0"),s(Ue,"type","radio"),Ue.__value="light",ie(Ue,Ue.__value),s(Rt,"class","radio-option svelte-1pfl9w0"),s(at,"class","radio-group svelte-1pfl9w0"),s(at,"role","radiogroup"),s(at,"aria-label",Bn=t[7].theme),s(Lt,"class","setting-row radio-row svelte-1pfl9w0"),s(xt,"class","setting-label svelte-1pfl9w0"),s(xt,"for","cfg-lang"),Ot.__value="en",ie(Ot,Ot.__value),Mt.__value="ru",ie(Mt,Mt.__value),qt.__value="zh",ie(qt,qt.__value),s(nt,"id","cfg-lang"),s(nt,"class","svelte-1pfl9w0"),s(Tt,"class","setting-row svelte-1pfl9w0"),s(Ve,"class","section svelte-1pfl9w0"),s(en,"class","btn btn-save svelte-1pfl9w0"),s(tn,"class","btn btn-reset svelte-1pfl9w0"),s(nn,"class","ver svelte-1pfl9w0"),s(_t,"class","section actions-section svelte-1pfl9w0"),s(r,"class","settings-content svelte-1pfl9w0"),s(e,"class","settings-view svelte-1pfl9w0"),Ol.p(qe,Ue)},m(T,G){K(T,e,G),l(e,n),l(n,o),l(e,a),l(e,r),Te&&Te.m(r,null),l(r,_),l(r,d),l(d,u),l(u,v),l(u,m),l(u,j),l(d,w),l(d,A),l(A,p),l(p,D),l(A,P),l(A,k),ie(k,t[0].serverAddr),l(d,N),l(d,y),l(y,I),l(I,B),l(y,S),l(y,E),ie(E,t[0].nickname),l(d,M),l(d,L),l(L,q),l(q,Q),l(L,ce),l(L,O),ie(O,t[0].serverToken),l(d,U),l(d,z),l(z,oe),l(d,Z),l(d,H),l(H,pe),l(pe,Ie),l(H,Ne),l(H,fe),fe.checked=t[0].autoConnect,l(H,ye),l(H,ge),l(ge,De),l(d,me),l(d,le),l(le,We),l(We,he),l(le,be),l(le,X),X.checked=t[0].autoJoinLastRoom,l(le,se),l(le,st),l(st,rt),l(r,it),l(r,re),l(re,Ae),l(Ae,R),l(Ae,Se),l(Ae,Re),l(re,we),l(re,Ee),l(Ee,bt),l(re,Pe),l(re,$),l($,ae),l(ae,il),l($,xl),l($,xe),l(xe,yt),l(yt,ol),l(xe,jt),l(jt,al),xn(xe,t[0].connectionMode,!0),l(re,es),l(re,vn),l(vn,rl),l(re,ts),l(re,St),l(St,Yt),l(Yt,cl),l(St,ns),l(St,Ge),ie(Ge,t[0].mtu),l(re,ls),l(re,gn),l(gn,ul),l(re,ss),l(re,Et),l(Et,Ht),l(Ht,_l),l(Et,is),l(Et,et),ie(et,t[0].dnsServer),l(re,os),l(re,bn),l(bn,fl),l(re,as),l(re,At),l(At,Xt),l(Xt,dl),l(At,rs),l(At,He),ie(He,t[0].socks5Proxy),l(re,cs),l(re,En),l(En,pl),l(re,us),l(re,Pt),l(Pt,Qt),l(Qt,vl),l(Pt,_s),l(Pt,tt),ie(tt,t[0].stunServer),l(re,fs),l(re,Cn),l(Cn,ml),l(r,ds),l(r,Xe),l(Xe,Ct),l(Ct,ps),l(Ct,hl),l(Ct,vs),l(Xe,ms),l(Xe,Nt),l(Nt,Ln),l(Ln,gl),l(Nt,hs),l(Nt,pt),pt.checked=t[0].startWithWindows,l(Xe,gs),l(Xe,ot),l(ot,Rn),l(Rn,wl),l(ot,ws),l(ot,ct),l(ct,kl),l(ot,ks),Oe&&Oe.m(ot,null),l(Xe,bs),Me&&Me.m(Xe,null),l(r,ys),l(r,Ve),l(Ve,Dt),l(Dt,js),l(Dt,bl),l(Dt,Ss),l(Ve,Es),l(Ve,ut),l(ut,Zt),l(Zt,yl),l(ut,As),l(ut,Qe),l(ut,Ps),l(ut,$t),l($t,jl),l($t,Cs),l(Ve,Ns),l(Ve,Wn),l(Wn,Sl),l(Ve,Ds),l(Ve,Lt),l(Lt,Kn),l(Kn,El),l(Lt,Ls),l(Lt,at),l(at,It),l(It,qe),qe.checked=qe.__value===t[0].theme,l(It,Is),l(It,Al),l(at,Rs),l(at,Rt),l(Rt,Ue),Ue.checked=Ue.__value===t[0].theme,l(Rt,Ts),l(Rt,Pl),l(Ve,Os),l(Ve,Tt),l(Tt,xt),l(xt,Cl),l(Tt,Ms),l(Tt,nt),l(nt,Ot),l(Ot,Nl),l(nt,Mt),l(Mt,Dl),l(nt,qt),l(qt,Ll),xn(nt,t[0].lang||t[8]),l(r,Us),l(r,_t),l(_t,en),l(en,Il),l(_t,zs),l(_t,tn),l(tn,Rl),l(_t,Ws),l(_t,nn),l(nn,Fs),l(nn,Tl),Ml||(Ks=[W(k,"input",t[16]),W(E,"input",t[17]),W(O,"input",t[18]),W(fe,"change",t[19]),W(X,"change",t[20]),W(xe,"change",t[21]),W(Ge,"input",t[22]),W(et,"input",t[23]),W(He,"input",t[24]),W(tt,"input",t[25]),W(pt,"change",t[26]),W(ct,"click",t[9]),W(Qe,"input",t[13]),W(qe,"change",t[27]),W(qe,"change",t[15]),W(Ue,"change",t[29]),W(Ue,"change",t[15]),W(nt,"change",t[14]),W(en,"click",t[11]),W(tn,"click",t[12])],Ml=!0)},p(T,[G]){G&128&&i!==(i=T[7].settings_title+"")&&b(o,i),T[2]?Te?Te.p(T,G):(Te=Ci(T),Te.c(),Te.m(r,_)):Te&&(Te.d(1),Te=null),G&128&&f!==(f=T[7].section_connection+"")&&b(m,f),G&128&&C!==(C=T[7].server_addr+"")&&b(D,C),G&1&&k.value!==T[0].serverAddr&&ie(k,T[0].serverAddr),G&128&&J!==(J=T[7].nickname+"")&&b(B,J),G&1&&E.value!==T[0].nickname&&ie(E,T[0].nickname),G&128&&V!==(V=T[7].server_token+"")&&b(Q,V),G&128&&Y!==(Y=T[7].server_token_desc)&&s(O,"placeholder",Y),G&1&&O.value!==T[0].serverToken&&ie(O,T[0].serverToken),G&128&&te!==(te=T[7].reconnect_apply+"")&&b(oe,te),G&128&&ue!==(ue=T[7].auto_connect+"")&&b(Ie,ue),G&1&&(fe.checked=T[0].autoConnect),G&128&&je!==(je=T[7].auto_connect_desc+"")&&b(De,je),G&128&&_e!==(_e=T[7].auto_join+"")&&b(he,_e),G&1&&(X.checked=T[0].autoJoinLastRoom),G&128&&Fe!==(Fe=T[7].auto_join_desc+"")&&b(rt,Fe),G&128&&x!==(x=T[7].section_network+"")&&b(Se,x),G&128&&Ke!==(Ke=T[7].advanced_warn+"")&&b(bt,Ke),G&128&&Je!==(Je=T[7].connection_mode+"")&&b(il,Je),G&128&&dn!==(dn=T[7].connection_direct+"")&&b(ol,dn),G&128&&pn!==(pn=T[7].connection_relay+"")&&b(al,pn),G&1&&xn(xe,T[0].connectionMode),G&128&&mn!==(mn=T[7].connection_mode_desc+"")&&b(rl,mn),G&128&&hn!==(hn=T[7].mtu+"")&&b(cl,hn),G&1&&Oi(Ge.value)!==T[0].mtu&&ie(Ge,T[0].mtu),G&128&&wn!==(wn=T[7].mtu_desc+"")&&b(ul,wn),G&128&&kn!==(kn=T[7].dns_server+"")&&b(_l,kn),G&1&&et.value!==T[0].dnsServer&&ie(et,T[0].dnsServer),G&128&&yn!==(yn=T[7].dns_desc+"")&&b(fl,yn),G&128&&jn!==(jn=T[7].socks5+"")&&b(dl,jn),G&128&&Sn!==(Sn=T[7].socks5_placeholder)&&s(He,"placeholder",Sn),G&1&&He.value!==T[0].socks5Proxy&&ie(He,T[0].socks5Proxy),G&128&&An!==(An=T[7].socks5_desc+"")&&b(pl,An),G&128&&Pn!==(Pn=T[7].stun_server+"")&&b(vl,Pn),G&1&&tt.value!==T[0].stunServer&&ie(tt,T[0].stunServer),G&128&&Nn!==(Nn=T[7].stun_desc+"")&&b(ml,Nn),G&128&&Dn!==(Dn=T[7].section_system+"")&&b(hl,Dn),G&128&&In!==(In=T[7].start_windows+"")&&b(gl,In),G&1&&(pt.checked=T[0].startWithWindows),G&128&&Tn!==(Tn=T[7].updates+"")&&b(wl,Tn),G&128&&On!==(On=T[7].check_updates+"")&&b(kl,On),G&8&&(ct.disabled=T[3]),T[4]==="available"?Oe?Oe.p(T,G):(Oe=Ni(T),Oe.c(),Oe.m(ot,null)):Oe&&(Oe.d(1),Oe=null),Ut===(Ut=Js(T))&&Me?Me.p(T,G):(Me&&Me.d(1),Me=Ut&&Ut(T),Me&&(Me.c(),Me.m(Xe,null))),G&128&&Mn!==(Mn=T[7].section_appearance+"")&&b(bl,Mn),G&128&&qn!==(qn=T[7].ui_scale+"")&&b(yl,qn),G&1&&Un!==(Un=T[0].uiScale??100)&&(Qe.value=Un),G&1&&zn!==(zn=(T[0].uiScale??100)+"")&&b(jl,zn),G&128&&Fn!==(Fn=T[7].ui_scale_desc+"")&&b(Sl,Fn),G&128&&Jn!==(Jn=T[7].theme+"")&&b(El,Jn),G&1&&(qe.checked=qe.__value===T[0].theme),G&128&&Gn!==(Gn=T[7].theme_dark+"")&&b(Al,Gn),G&1&&(Ue.checked=Ue.__value===T[0].theme),G&128&&Vn!==(Vn=T[7].theme_light+"")&&b(Pl,Vn),G&128&&Bn!==(Bn=T[7].theme)&&s(at,"aria-label",Bn),G&128&&Yn!==(Yn=T[7].language+"")&&b(Cl,Yn),G&128&&Hn!==(Hn=T[7].language_en+"")&&b(Nl,Hn),G&128&&Xn!==(Xn=T[7].language_ru+"")&&b(Dl,Xn),G&128&&Qn!==(Qn=T[7].language_zh+"")&&b(Ll,Qn),G&257&&qs!==(qs=T[0].lang||T[8])&&xn(nt,T[0].lang||T[8]),G&128&&Zn!==(Zn=T[7].save+"")&&b(Il,Zn),G&128&&$n!==($n=T[7].reset+"")&&b(Rl,$n),G&2&&b(Tl,T[1])},i:de,o:de,d(T){T&&F(e),Te&&Te.d(),Oe&&Oe.d(),Me&&Me.d(),Ol.r(),Ml=!1,Le(Ks)}}}function Jo(t,e,n){let i,o,a;ve(t,Be,O=>n(30,i=O)),ve(t,kt,O=>n(7,o=O)),ve(t,$l,O=>n(8,a=O));let r={...i},_="1.0.0",d=!1,u=!1,v="",f="",m="";async function j(){n(3,u=!0),n(4,v="checking"),n(6,m=""),n(5,f="");try{const O=await window.go.main.App.CheckForUpdate();O?.available?(n(4,v="available"),n(5,f=O.latest||"")):n(4,v="latest")}catch(O){n(4,v="error"),n(6,m=String(O)),ee(o.error_update_check+O,"error")}finally{n(3,u=!1)}}async function w(){if(confirm(o.confirm_update)){n(3,u=!0),n(4,v="downloading"),n(6,m="");try{await window.go.main.App.ApplyUpdate(),ee(o.notif_updating,"info")}catch(O){n(4,v="error"),n(6,m=String(O)),n(3,u=!1),ee(o.error_update+O,"error")}}}async function A(){Ze(Be,i={...r},i);try{n(2,d=!!await window.go.main.App.SaveSettings(r)),r.lang&&sn(r.lang),ee(o.notif_settings_saved,"info"),d&&ee(o.notif_reconnect_required,"info")}catch(O){ee(o.error_save+O,"error")}}async function p(){if(confirm(o.confirm_reset))try{n(0,r=await window.go.main.App.ResetSettings()),Ze(Be,i={...r},i),n(2,d=!1),r.lang&&sn(r.lang),ee(o.notif_settings_saved,"info")}catch(O){ee(o.error_save+O,"error")}}function C(O){const Y=Math.min(150,Math.max(75,Number(O.target.value)||100));n(0,r.uiScale=Y,r),Ze(Be,i={...i,uiScale:Y},i)}function D(O){n(0,r.lang=O.target.value,r),sn(O.target.value)}function P(){Ze(Be,i={...i,theme:r.theme},i)}fn(async()=>{try{const O=await window.go.main.App.GetSettings();O&&(n(0,r={...r,...O}),r.connectionMode||n(0,r.connectionMode="direct",r),Ze(Be,i=r,i),r.lang&&sn(r.lang)),window.go.main.App.GetVersion&&n(1,_=await window.go.main.App.GetVersion())}catch{}});const k=[[]];function N(){r.serverAddr=this.value,n(0,r)}function y(){r.nickname=this.value,n(0,r)}function I(){r.serverToken=this.value,n(0,r)}function J(){r.autoConnect=this.checked,n(0,r)}function B(){r.autoJoinLastRoom=this.checked,n(0,r)}function S(){r.connectionMode=Ji(this),n(0,r)}function E(){r.mtu=Oi(this.value),n(0,r)}function M(){r.dnsServer=this.value,n(0,r)}function L(){r.socks5Proxy=this.value,n(0,r)}function q(){r.stunServer=this.value,n(0,r)}function V(){r.startWithWindows=this.checked,n(0,r)}function Q(){r.theme=this.__value,n(0,r)}function ce(){r.theme=this.__value,n(0,r)}return[r,_,d,u,v,f,m,o,a,j,w,A,p,C,D,P,N,y,I,J,B,S,E,M,L,q,V,Q,k,ce]}class Go extends wt{constructor(e){super(),gt(this,e,Jo,Ko,dt,{})}}function Di(t,e,n){const i=t.slice();return i[13]=e[n],i}function Vo(t){let e,n,i,o,a,r,_,d,u,v,f,m,j,w,A,p;o=new vo({});const C=[Qo,Xo,Ho,Yo],D=[];function P(k,N){return k[3]==="network"?0:k[3]==="chat"?1:k[3]==="settings"?2:3}return v=P(t),f=D[v]=C[v](t),j=new So({}),{c(){e=c("div"),n=c("div"),i=c("div"),Bt(o.$$.fragment),a=h(),r=c("div"),_=h(),d=c("main"),u=c("div"),f.c(),m=h(),Bt(j.$$.fragment),s(r,"class","drag-handle svelte-1hi7jen"),ke(r,"active",t[1]),s(i,"class","sidebar-wrapper svelte-1hi7jen"),Vs(i,"width",t[0]+"px"),s(u,"class","view-fade svelte-1hi7jen"),s(u,"key",t[3]),s(d,"class","main-area svelte-1hi7jen"),s(n,"class","layout svelte-1hi7jen"),s(e,"class","shell svelte-1hi7jen")},m(k,N){K(k,e,N),l(e,n),l(n,i),mt(o,i,null),l(i,a),l(i,r),l(n,_),l(n,d),l(d,u),D[v].m(u,null),l(e,m),mt(j,e,null),w=!0,A||(p=W(r,"mousedown",t[6]),A=!0)},p(k,N){(!w||N&2)&&ke(r,"active",k[1]),(!w||N&1)&&Vs(i,"width",k[0]+"px");let y=v;v=P(k),v===y?D[v].p(k,N):(Ui(),lt(D[y],1,1,()=>{D[y]=null}),zi(),f=D[v],f?f.p(k,N):(f=D[v]=C[v](k),f.c()),Ye(f,1),f.m(u,null)),(!w||N&8)&&s(u,"key",k[3])},i(k){w||(Ye(o.$$.fragment,k),Ye(f),Ye(j.$$.fragment,k),w=!0)},o(k){lt(o.$$.fragment,k),lt(f),lt(j.$$.fragment,k),w=!1},d(k){k&&F(e),ht(o),D[v].d(),ht(j),A=!1,p()}}}function Bo(t){let e,n,i,o;return i=new Lo({}),{c(){e=c("div"),n=c("div"),Bt(i.$$.fragment),s(n,"class","fullscreen-connect svelte-1hi7jen"),s(e,"class","shell connect-shell svelte-1hi7jen")},m(a,r){K(a,e,r),l(e,n),mt(i,n,null),o=!0},p:de,i(a){o||(Ye(i.$$.fragment,a),o=!0)},o(a){lt(i.$$.fragment,a),o=!1},d(a){a&&F(e),ht(i)}}}function Yo(t){let e,n,i;return{c(){e=c("div"),n=g("Unknown view: "),i=g(t[3]),s(e,"class","unknown-view svelte-1hi7jen")},m(o,a){K(o,e,a),l(e,n),l(e,i)},p(o,a){a&8&&b(i,o[3])},i:de,o:de,d(o){o&&F(e)}}}function Ho(t){let e,n;return e=new Go({}),{c(){Bt(e.$$.fragment)},m(i,o){mt(e,i,o),n=!0},p:de,i(i){n||(Ye(e.$$.fragment,i),n=!0)},o(i){lt(e.$$.fragment,i),n=!1},d(i){ht(e,i)}}}function Xo(t){let e,n;return e=new Mo({}),{c(){Bt(e.$$.fragment)},m(i,o){mt(e,i,o),n=!0},p:de,i(i){n||(Ye(e.$$.fragment,i),n=!0)},o(i){lt(e.$$.fragment,i),n=!1},d(i){ht(e,i)}}}function Qo(t){let e,n;return e=new bo({}),{c(){Bt(e.$$.fragment)},m(i,o){mt(e,i,o),n=!0},p:de,i(i){n||(Ye(e.$$.fragment,i),n=!0)},o(i){lt(e.$$.fragment,i),n=!1},d(i){ht(e,i)}}}function Li(t){let e,n,i=t[4].msg+"",o,a,r,_=t[2].dismiss_error+"",d,u,v,f;return{c(){e=c("div"),n=c("span"),o=g(i),a=h(),r=c("button"),d=g(_),s(n,"class","error-strip-msg svelte-1hi7jen"),s(r,"type","button"),s(r,"class","error-strip-dismiss svelte-1hi7jen"),s(r,"aria-label",u=t[2].dismiss_error),s(e,"class","error-strip svelte-1hi7jen"),s(e,"role","alert")},m(m,j){K(m,e,j),l(e,n),l(n,o),l(e,a),l(e,r),l(r,d),v||(f=W(r,"click",un),v=!0)},p(m,j){j&16&&i!==(i=m[4].msg+"")&&b(o,i),j&4&&_!==(_=m[2].dismiss_error+"")&&b(d,_),j&4&&u!==(u=m[2].dismiss_error)&&s(r,"aria-label",u)},d(m){m&&F(e),v=!1,f()}}}function Ii(t,e){let n,i,o=e[13].type==="error"?"!":">",a,r,_=e[13].msg+"",d,u,v;return{key:t,first:null,c(){n=c("div"),i=c("span"),a=g(o),r=h(),d=g(_),u=h(),s(i,"class","notif-icon svelte-1hi7jen"),s(n,"class",v="notification "+e[13].type+" svelte-1hi7jen"),s(n,"role","status"),this.first=n},m(f,m){K(f,n,m),l(n,i),l(i,a),l(n,r),l(n,d),l(n,u)},p(f,m){e=f,m&32&&o!==(o=e[13].type==="error"?"!":">")&&b(a,o),m&32&&_!==(_=e[13].msg+"")&&b(d,_),m&32&&v!==(v="notification "+e[13].type+" svelte-1hi7jen")&&s(n,"class",v)},d(f){f&&F(n)}}}function Zo(t){let e,n,i,o,a,r,_,d,u=[],v=new Map,f,m;const j=[Bo,Vo],w=[];function A(P,k){return P[3]==="connect"?0:1}a=A(t),r=w[a]=j[a](t);let p=t[4]&&Li(t),C=ft(t[5]);const D=P=>P[13].id;for(let P=0;P{w[N]=null}),zi(),r=w[a],r?r.p(P,k):(r=w[a]=j[a](P),r.c()),Ye(r,1),r.m(_.parentNode,_)),P[4]?p?p.p(P,k):(p=Li(P),p.c(),p.m(d.parentNode,d)):p&&(p.d(1),p=null),k&32&&(C=ft(P[5]),u=sl(u,k,D,1,P,C,v,f.parentNode,ll,Ii,f,Di))},i(P){m||(Ye(r),m=!0)},o(P){lt(r),m=!1},d(P){P&&(F(e),F(n),F(i),F(o),F(_),F(d),F(f)),w[a].d(P),p&&p.d(P);for(let k=0;kn(2,i=p)),ve(t,Be,p=>n(7,o=p)),ve(t,Ce,p=>n(3,a=p)),ve(t,nl,p=>n(4,r=p)),ve(t,Wl,p=>n(5,_=p));let d=220,u=!1,v,f,m=!0;function j(p){n(1,u=!0),v=p.clientX,f=d,document.addEventListener("mousemove",w),document.addEventListener("mouseup",A),p.preventDefault()}function w(p){if(!u)return;const C=f+(p.clientX-v);n(0,d=Math.max(140,Math.min(400,C)))}function A(){n(1,u=!1),document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",A)}return fn(async()=>{window.addEventListener("keydown",Ri);try{const p=await window.go.main.App.LoadConfig();p&&(Be.set({...o,...p}),p.lang&&sn(p.lang))}catch{}window.runtime?.EventsOn&&(window.runtime.EventsOn("status_changed",p=>{m&&(ze.set(p),!p.connected&&!p.reconnecting&&Ce.set("connect"))}),window.runtime.EventsOn("peers_changed",p=>{m&&Yl.set(p||[])}),window.runtime.EventsOn("error",p=>{m&&ee(p,"error")}),window.runtime.EventsOn("chat_message",p=>{m&&Ql(p.fromID,p.nickname,p.message,!1,"sent",!1,!!p.isDM)}),window.runtime.EventsOn("system_chat",p=>{m&&lo(p.message||"")}),window.runtime.EventsOn("room_deleted",p=>{m&&(ee(i.notif_room_deleted,"error"),Ce.set("network"))}),window.runtime.EventsOn("auto_join_skipped",p=>{if(!m)return;const C=p?.room||"";ee(ne(i.notif_auto_join_skipped,{name:C}),"info")}))}),Mi(()=>{m=!1,window.removeEventListener("keydown",Ri),document.removeEventListener("mousemove",w),document.removeEventListener("mouseup",A),window.runtime?.EventsOff&&(window.runtime.EventsOff("status_changed"),window.runtime.EventsOff("peers_changed"),window.runtime.EventsOff("error"),window.runtime.EventsOff("chat_message"),window.runtime.EventsOff("system_chat"),window.runtime.EventsOff("room_deleted"),window.runtime.EventsOff("auto_join_skipped"))}),t.$$.update=()=>{if(t.$$.dirty&128){const p=$o(o.uiScale)/100;document.documentElement.style.zoom=String(p)}t.$$.dirty&128&&(o.theme==="light"?document.documentElement.classList.add("light-theme"):document.documentElement.classList.remove("light-theme"))},[d,u,i,a,r,_,j,o]}class ea extends wt{constructor(e){super(),gt(this,e,xo,Zo,dt,{})}}new ea({target:document.getElementById("app")}); diff --git a/client/frontend/dist/assets/index-B_zURlVB.css b/client/frontend/dist/assets/index-B_zURlVB.css new file mode 100644 index 0000000..6f8bea0 --- /dev/null +++ b/client/frontend/dist/assets/index-B_zURlVB.css @@ -0,0 +1 @@ +.modal-overlay.svelte-1g1nook.svelte-1g1nook{position:fixed;inset:0;background:color-mix(in srgb,var(--bg, #0a0a0a) 55%,transparent);display:flex;align-items:center;justify-content:center;z-index:200}.modal.svelte-1g1nook.svelte-1g1nook{background:var(--surface, #141414);border:1px solid var(--border, #2a2a2a);border-radius:var(--radius, 2px);padding:20px;width:340px;display:flex;flex-direction:column;gap:16px}.modal.svelte-1g1nook p.svelte-1g1nook{color:var(--text, #f5f5f5);font-size:14px;line-height:1.45}.modal-actions.svelte-1g1nook.svelte-1g1nook{display:flex;gap:8px;justify-content:flex-end}.sidebar.svelte-5bd3jz.svelte-5bd3jz{width:100%;height:100%;background:transparent;display:flex;flex-direction:column;flex-shrink:0}.sidebar-header.svelte-5bd3jz.svelte-5bd3jz{padding:14px 14px 8px}.sidebar-meta.svelte-5bd3jz.svelte-5bd3jz{font-size:11px;font-family:var(--font-mono);color:var(--muted);margin-top:4px}.sidebar-actions.svelte-5bd3jz.svelte-5bd3jz{padding:8px 12px 12px;display:flex;flex-direction:column;gap:6px}.sidebar-actions.svelte-5bd3jz .bezel.svelte-5bd3jz{width:100%}.sidebar-actions.svelte-5bd3jz .bezel.svelte-5bd3jz:disabled{opacity:.45;cursor:not-allowed}.network-list.svelte-5bd3jz.svelte-5bd3jz{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 0 12px;border-top:1px solid var(--border)}.network-item.svelte-5bd3jz.svelte-5bd3jz{display:flex;align-items:center;padding:10px 12px;min-height:44px;cursor:pointer;gap:10px;border-bottom:1px solid var(--border);transition:background var(--dur-fast, .15s) var(--ease-out, ease);position:relative}.network-item.svelte-5bd3jz.svelte-5bd3jz:hover,.network-item.svelte-5bd3jz.svelte-5bd3jz:focus-visible{background:var(--bg-hover)}.network-item.active.svelte-5bd3jz.svelte-5bd3jz{background:var(--surface-2)}.network-item.disabled.svelte-5bd3jz.svelte-5bd3jz{opacity:.55}.tick.svelte-5bd3jz.svelte-5bd3jz{width:6px;height:6px;flex-shrink:0;background:var(--text-dim)}.tick.on.svelte-5bd3jz.svelte-5bd3jz{background:var(--text)}.network-info.svelte-5bd3jz.svelte-5bd3jz{flex:1;min-width:0}.network-name.svelte-5bd3jz.svelte-5bd3jz{font-size:13px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.network-meta.svelte-5bd3jz.svelte-5bd3jz{font-size:11px;font-family:var(--font-mono);color:var(--muted);line-height:1.4}.row-actions.svelte-5bd3jz.svelte-5bd3jz{position:relative;flex-shrink:0}.menu-btn.svelte-5bd3jz.svelte-5bd3jz{background:none;border:1px solid transparent;color:var(--muted);cursor:pointer;font-size:16px;line-height:1;width:32px;height:32px;border-radius:var(--radius);display:flex;align-items:center;justify-content:center}.menu-btn.svelte-5bd3jz.svelte-5bd3jz:hover,.menu-btn[aria-expanded=true].svelte-5bd3jz.svelte-5bd3jz{color:var(--text);border-color:var(--border);background:var(--surface)}.overflow-menu.svelte-5bd3jz.svelte-5bd3jz{position:absolute;right:0;top:100%;z-index:20;min-width:168px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;flex-direction:column;box-shadow:0 8px 24px #00000047}.menu-item.svelte-5bd3jz.svelte-5bd3jz{background:none;border:none;text-align:left;padding:10px 12px;min-height:36px;color:var(--text);font-size:13px;cursor:pointer}.menu-item.svelte-5bd3jz.svelte-5bd3jz:hover{background:var(--bg-hover)}.menu-item.danger.svelte-5bd3jz.svelte-5bd3jz{color:var(--error)}.menu-item.danger.svelte-5bd3jz.svelte-5bd3jz:hover{background:color-mix(in srgb,var(--error) 12%,transparent)}.empty-desc.svelte-5bd3jz.svelte-5bd3jz{margin-top:6px;font-size:12px;color:var(--text-dim)}.empty-state.svelte-5bd3jz.svelte-5bd3jz{padding:16px 12px;text-align:left;color:var(--muted);font-size:13px}.modal-overlay.svelte-5bd3jz.svelte-5bd3jz{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 55%,transparent);display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-5bd3jz.svelte-5bd3jz{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;width:340px;max-height:80vh;overflow-y:auto;display:flex;flex-direction:column;gap:10px;box-shadow:0 12px 40px #00000047}.modal.svelte-5bd3jz h3.svelte-5bd3jz{font-size:1.05rem;color:var(--text);font-weight:600;letter-spacing:-.02em}.modal.svelte-5bd3jz input.invalid.svelte-5bd3jz{border-color:var(--error)}.field-error.svelte-5bd3jz.svelte-5bd3jz,.modal-error.svelte-5bd3jz.svelte-5bd3jz{font-size:12px;color:var(--error)}.modal-error.svelte-5bd3jz.svelte-5bd3jz{padding:8px;border:1px solid var(--error);border-radius:var(--radius);background:color-mix(in srgb,var(--error) 10%,transparent)}.modal-actions.svelte-5bd3jz.svelte-5bd3jz{display:flex;gap:8px;justify-content:flex-end;margin-top:6px}.sr-only.svelte-5bd3jz.svelte-5bd3jz{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.peer-view.svelte-1hijv9g.svelte-1hijv9g{display:flex;flex-direction:column;height:100%;padding:12px 16px 20px;overflow:auto;min-height:0}.section-head.svelte-1hijv9g.svelte-1hijv9g{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:10px}.section-head.svelte-1hijv9g h2.svelte-1hijv9g{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);margin:2px 0 0}.section-hint.svelte-1hijv9g.svelte-1hijv9g{color:var(--muted);font-size:13px;margin:0 0 10px}.section-hint.fault.svelte-1hijv9g.svelte-1hijv9g{color:var(--fault)}.scope-face.svelte-1hijv9g.svelte-1hijv9g{position:relative;flex:1;min-height:0;border:1px solid var(--border);background-color:var(--bg);background-image:repeating-linear-gradient(to right,var(--graticule) 0 1px,transparent 1px 48px),repeating-linear-gradient(to bottom,var(--graticule) 0 1px,transparent 1px 28px)}.channel-head.svelte-1hijv9g.svelte-1hijv9g,.peer-row.svelte-1hijv9g.svelte-1hijv9g{display:grid;grid-template-columns:36px minmax(0,1.3fr) 118px 128px 56px auto;gap:10px;align-items:center;padding:0 12px}.channel-head.svelte-1hijv9g.svelte-1hijv9g{min-height:28px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface) 82%,transparent);font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.stack.svelte-1hijv9g.svelte-1hijv9g{display:flex;flex-direction:column}.peer-row.svelte-1hijv9g.svelte-1hijv9g{min-height:44px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg) 55%,transparent)}.self-row.svelte-1hijv9g.svelte-1hijv9g{opacity:.88}.ch.svelte-1hijv9g.svelte-1hijv9g{font-family:var(--font-mono);font-size:11px;color:var(--muted)}.nickname.svelte-1hijv9g.svelte-1hijv9g{color:var(--text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.self-tag.svelte-1hijv9g.svelte-1hijv9g{margin-left:6px;font-size:11px;color:var(--muted);font-weight:400;letter-spacing:.06em;text-transform:uppercase}.peer-ip.svelte-1hijv9g.svelte-1hijv9g{font-family:var(--font-mono);font-size:12px;color:var(--muted);background:none;border:0;padding:0;cursor:pointer;text-align:left}.peer-ip.svelte-1hijv9g.svelte-1hijv9g:hover{color:var(--text)}.col-ping.svelte-1hijv9g.svelte-1hijv9g{font-family:var(--font-mono);font-size:12px;color:var(--muted)}.col-ping.probing.svelte-1hijv9g.svelte-1hijv9g{color:var(--text)}.col-path.svelte-1hijv9g.svelte-1hijv9g{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;font-family:var(--font-mono);color:var(--muted);min-width:0}.col-path.live.svelte-1hijv9g.svelte-1hijv9g{color:var(--live)}.col-path.fault.svelte-1hijv9g.svelte-1hijv9g{color:var(--fault)}.col-path.idle.svelte-1hijv9g.svelte-1hijv9g{color:var(--muted)}.trace.svelte-1hijv9g.svelte-1hijv9g{width:36px;height:10px;flex-shrink:0}.trace.svelte-1hijv9g line.svelte-1hijv9g,.trace.svelte-1hijv9g circle.svelte-1hijv9g{fill:currentColor;stroke:currentColor;stroke-width:1}.peer-actions.svelte-1hijv9g.svelte-1hijv9g{display:flex;gap:6px;justify-content:flex-end}.badge.svelte-1hijv9g.svelte-1hijv9g{display:inline-block;min-width:16px;padding:0 5px;margin-left:6px;background:var(--fault);color:#fff;font-size:10px;line-height:16px;text-align:center;border-radius:var(--radius)}.empty.svelte-1hijv9g.svelte-1hijv9g{padding:20px 12px;color:var(--muted);background:color-mix(in srgb,var(--bg) 70%,transparent)}.empty-label.svelte-1hijv9g.svelte-1hijv9g{color:var(--text);margin-bottom:4px;font-weight:500}.empty-desc.svelte-1hijv9g.svelte-1hijv9g{font-family:var(--font-serif);font-style:italic;font-size:13px;margin:0}.btn-sm.svelte-1hijv9g.svelte-1hijv9g{min-height:28px;padding:4px 10px;font-size:12px}@media (max-width: 720px){.channel-head.svelte-1hijv9g.svelte-1hijv9g,.peer-row.svelte-1hijv9g.svelte-1hijv9g{grid-template-columns:28px minmax(0,1fr) auto}.channel-head.svelte-1hijv9g span.svelte-1hijv9g:nth-child(3),.channel-head.svelte-1hijv9g span.svelte-1hijv9g:nth-child(4),.channel-head.svelte-1hijv9g span.svelte-1hijv9g:nth-child(5),.peer-ip.svelte-1hijv9g.svelte-1hijv9g,.col-path.svelte-1hijv9g.svelte-1hijv9g,.col-ping.svelte-1hijv9g.svelte-1hijv9g{display:none}}.topbar.svelte-w9vfv6.svelte-w9vfv6{flex-shrink:0;border-bottom:1px solid var(--border);background:var(--surface)}.topbar-row.svelte-w9vfv6.svelte-w9vfv6{display:flex;align-items:stretch;gap:0;min-height:64px}.cell.svelte-w9vfv6.svelte-w9vfv6{display:flex;flex-direction:column;justify-content:center;gap:4px;padding:10px 16px;border-right:1px solid var(--border);min-width:0;text-align:left}button.cell.svelte-w9vfv6.svelte-w9vfv6{background:none;border-top:0;border-bottom:0;border-left:0;cursor:pointer;font:inherit;color:inherit}button.cell.svelte-w9vfv6:hover .cell-value.svelte-w9vfv6{color:var(--muted)}button.cell.svelte-w9vfv6.svelte-w9vfv6:disabled{cursor:default;opacity:1}button.cell.svelte-w9vfv6:disabled:hover .cell-value.svelte-w9vfv6{color:var(--text)}.room.svelte-w9vfv6.svelte-w9vfv6{flex:1.4 1 140px}.vip.svelte-w9vfv6.svelte-w9vfv6{flex:1 1 148px}.path.svelte-w9vfv6.svelte-w9vfv6{flex:1.2 1 180px}.peers.svelte-w9vfv6.svelte-w9vfv6{flex:0 0 72px}.cell-value.svelte-w9vfv6.svelte-w9vfv6{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.15}.cell-value.mono.svelte-w9vfv6.svelte-w9vfv6{font-family:var(--font-mono);font-weight:500;letter-spacing:0;font-size:1rem}.cell-value.live.svelte-w9vfv6.svelte-w9vfv6{color:var(--live)}.cell-value.fault.svelte-w9vfv6.svelte-w9vfv6{color:var(--fault)}.path-row.svelte-w9vfv6.svelte-w9vfv6{display:flex;align-items:center;gap:8px;min-width:0}.leds.svelte-w9vfv6.svelte-w9vfv6{display:flex;gap:4px;flex-shrink:0}.actions.svelte-w9vfv6.svelte-w9vfv6{display:flex;align-items:center;gap:8px;padding:0 12px;margin-left:auto;flex-shrink:0}.connect-view.svelte-1br9j49.svelte-1br9j49{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:32px 24px}.connect-form.svelte-1br9j49.svelte-1br9j49,.connected-info.svelte-1br9j49.svelte-1br9j49{width:min(360px,100%);display:flex;flex-direction:column;gap:16px;animation:svelte-1br9j49-connectIn .45s cubic-bezier(.16,1,.3,1) both}@keyframes svelte-1br9j49-connectIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.brand-block.svelte-1br9j49.svelte-1br9j49{text-align:center;margin-bottom:12px}.brand.svelte-1br9j49.svelte-1br9j49{font-family:var(--font-display);font-size:clamp(36px,7vw,48px);font-weight:400;letter-spacing:.02em;text-transform:uppercase;color:var(--text-bright);line-height:1.05}.tagline.svelte-1br9j49.svelte-1br9j49{margin-top:10px;font-size:var(--font-size-sm);color:var(--text-secondary);text-transform:none;letter-spacing:.02em;line-height:1.45}.field.svelte-1br9j49.svelte-1br9j49{display:flex;flex-direction:column;gap:7px}label.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em}input.svelte-1br9j49.svelte-1br9j49{background:#111111d9;border:1px solid var(--border-light);color:var(--text-bright);padding:13px 14px;min-height:44px;font-family:var(--font-mono);font-size:var(--font-size);transition:border-color .15s ease,background .15s ease}input.svelte-1br9j49.svelte-1br9j49::placeholder{color:var(--text-dim)}input.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){border-color:var(--border-hover)}input.svelte-1br9j49.svelte-1br9j49:focus{outline:none;border-color:var(--text-bright);background:#141414f2}input.invalid.svelte-1br9j49.svelte-1br9j49{border-color:var(--error)}.field-error.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--error)}.connect-btn.svelte-1br9j49.svelte-1br9j49,.disconnect-btn.svelte-1br9j49.svelte-1br9j49,.secondary-btn.svelte-1br9j49.svelte-1br9j49{border:none;padding:15px 18px;min-height:48px;font-family:var(--font-mono);font-size:var(--font-size);cursor:pointer;text-transform:uppercase;letter-spacing:.12em;font-weight:600;transition:background .15s ease,border-color .15s ease,transform .12s ease}.connect-btn.svelte-1br9j49.svelte-1br9j49{margin-top:4px;background:var(--accent);color:var(--accent-ink)}.connect-btn.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){background:var(--accent-hover);transform:translateY(-1px)}.connect-btn.svelte-1br9j49.svelte-1br9j49:active:not(:disabled){transform:translateY(0)}.connect-btn.svelte-1br9j49.svelte-1br9j49:disabled{opacity:.45;cursor:not-allowed;transform:none}.secondary-btn.svelte-1br9j49.svelte-1br9j49{background:transparent;color:var(--text-primary);border:1px solid var(--border-light);font-weight:500;letter-spacing:.08em}.secondary-btn.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){border-color:var(--accent);color:var(--text-bright)}.disconnect-btn.svelte-1br9j49.svelte-1br9j49{background:transparent;color:var(--error);border:1px solid var(--error);font-weight:500}.phase.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--text-muted);text-align:center;letter-spacing:.04em}.invite-disclosure.svelte-1br9j49.svelte-1br9j49{margin-top:8px;border-top:1px solid var(--border);padding-top:14px}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49{cursor:pointer;color:var(--text-muted);font-size:var(--font-size-sm);list-style:none;min-height:36px;display:flex;align-items:center;justify-content:center;transition:color .15s ease}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49:hover{color:var(--text-secondary)}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49::-webkit-details-marker{display:none}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49:before{content:"+";margin-right:8px;color:var(--text-dim)}.invite-disclosure[open].svelte-1br9j49 summary.svelte-1br9j49:before{content:"−"}.invite-block.svelte-1br9j49.svelte-1br9j49{display:flex;flex-direction:column;gap:10px;margin-top:12px}.connected-line.svelte-1br9j49.svelte-1br9j49{display:flex;align-items:center;gap:8px;color:var(--text-bright)}.info-line.svelte-1br9j49.svelte-1br9j49{display:flex;justify-content:space-between;font-size:var(--font-size-sm);color:var(--text-secondary)}.info-value.svelte-1br9j49.svelte-1br9j49{color:var(--text-primary);font-family:var(--font-mono)}.sq.svelte-1br9j49.svelte-1br9j49{width:8px;height:8px;display:inline-block}.sq-green.svelte-1br9j49.svelte-1br9j49{background:var(--success)}.sq-warn.svelte-1br9j49.svelte-1br9j49{background:var(--warning)}.sr-only.svelte-1br9j49.svelte-1br9j49{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.light-theme input.svelte-1br9j49.svelte-1br9j49{background:#ffffffa6}.light-theme input.svelte-1br9j49.svelte-1br9j49:focus{background:#ffffffe6}.chat-view.svelte-16e4bfd.svelte-16e4bfd{display:flex;flex-direction:column;height:100%;flex:1;padding:12px 14px;min-height:0;background:var(--surface)}.section-head.svelte-16e4bfd.svelte-16e4bfd{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:8px;padding-bottom:10px;border-bottom:1px solid var(--border);flex-shrink:0}.section-head.svelte-16e4bfd h2.svelte-16e4bfd{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);margin:2px 0 0}.chat-messages.svelte-16e4bfd.svelte-16e4bfd{flex:1;overflow-y:auto;min-height:0;padding:4px 0 12px;font-family:var(--font-mono);font-size:12px}.empty.svelte-16e4bfd.svelte-16e4bfd{padding:12px 2px;color:var(--muted);font-family:var(--font-sans)}.empty-label.svelte-16e4bfd.svelte-16e4bfd{color:var(--text);margin-bottom:4px;font-weight:500}.empty-desc.svelte-16e4bfd.svelte-16e4bfd{font-family:var(--font-serif);font-style:italic;font-size:13px;margin:0}.date-sep.svelte-16e4bfd.svelte-16e4bfd{text-align:left;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:14px 0 8px;font-family:var(--font-sans)}.system-line.svelte-16e4bfd.svelte-16e4bfd{font-size:12px;color:var(--muted);margin:6px 0}.msg.svelte-16e4bfd.svelte-16e4bfd{margin-bottom:8px}.msg-meta.svelte-16e4bfd.svelte-16e4bfd{font-size:11px;color:var(--muted);margin-bottom:2px;display:flex;gap:8px;align-items:baseline}.msg.self.svelte-16e4bfd .msg-nick.svelte-16e4bfd{color:var(--text)}.msg-time.svelte-16e4bfd.svelte-16e4bfd{color:var(--text-dim)}.msg-nick.svelte-16e4bfd.svelte-16e4bfd{color:var(--text);font-weight:500}.msg-body.svelte-16e4bfd.svelte-16e4bfd{color:var(--text);white-space:pre-wrap;word-break:break-word;line-height:1.45}.msg.failed.svelte-16e4bfd .msg-body.svelte-16e4bfd{color:var(--fault)}.retry-btn.svelte-16e4bfd.svelte-16e4bfd{margin-left:auto;background:transparent;border:none;color:var(--fault);cursor:pointer;font-size:11px;font-family:inherit}.composer.svelte-16e4bfd.svelte-16e4bfd{display:flex;gap:8px;padding:10px 0 0;border-top:1px solid var(--border);flex-shrink:0;align-items:flex-end}textarea.svelte-16e4bfd.svelte-16e4bfd{flex:1;resize:none;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);padding:8px 10px;font-family:var(--font-sans);font-size:14px;min-height:40px;line-height:1.4}textarea.svelte-16e4bfd.svelte-16e4bfd:disabled{opacity:.5}.settings-view.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;flex-direction:column;height:100%;padding:12px 16px 0;min-height:0}.section-head.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:12px;flex-shrink:0}.section-head.svelte-1wpqlpo h2.svelte-1wpqlpo{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);margin:2px 0 0}.settings-content.svelte-1wpqlpo.svelte-1wpqlpo{flex:1;overflow-y:auto;min-height:0;display:flex;flex-direction:column;gap:8px;padding-bottom:12px}.reconnect-banner.svelte-1wpqlpo.svelte-1wpqlpo{background:var(--surface-2);border:1px solid var(--hairline);color:var(--text);padding:10px 12px;border-radius:var(--radius);font-size:13px}.toggle-row.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;align-items:flex-start;gap:10px;margin:10px 0;cursor:pointer}.toggle-title.svelte-1wpqlpo.svelte-1wpqlpo{display:block;font-size:13px;font-weight:600;color:var(--text)}.toggle-label.svelte-1wpqlpo.svelte-1wpqlpo{display:block;color:var(--muted);font-size:12px;margin-top:2px}input[type=checkbox].svelte-1wpqlpo.svelte-1wpqlpo{width:16px;height:16px;margin-top:2px;accent-color:var(--cta)}.scale-row.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;align-items:center;gap:12px}.scale-row.svelte-1wpqlpo input[type=range].svelte-1wpqlpo{flex:1;accent-color:var(--cta)}.scale-value.svelte-1wpqlpo.svelte-1wpqlpo{min-width:44px;text-align:right;color:var(--muted);font-family:var(--font-mono);font-size:13px}.theme-row.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 0 16px}.update-row.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0}.ver.svelte-1wpqlpo.svelte-1wpqlpo{color:var(--muted);font-size:12px;font-family:var(--font-mono)}.commit-plate.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;justify-content:flex-end;gap:8px;padding:12px 0 16px;flex-shrink:0;border-top:1px solid var(--border);background:var(--bg)}.shell.svelte-8tj0mu{display:flex;flex-direction:column;height:100%;width:100%;position:relative;z-index:1;min-height:0}.connect-shell.svelte-8tj0mu{z-index:1}.layout.svelte-8tj0mu{display:flex;flex:1;min-height:0;position:relative}.fullscreen-connect.svelte-8tj0mu{display:flex;flex:1;width:100%;align-items:center;justify-content:center;min-height:0}.sidebar-wrapper.svelte-8tj0mu{position:relative;flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;min-height:0}.drag-handle.svelte-8tj0mu{position:absolute;top:0;right:-3px;width:6px;height:100%;cursor:col-resize;z-index:10;background:transparent;transition:background var(--dur-mid, .28s) var(--ease-out, ease)}.drag-handle.svelte-8tj0mu:hover,.drag-handle.active.svelte-8tj0mu,.drag-handle.svelte-8tj0mu:focus-visible{background:var(--border-hover)}.main-area.svelte-8tj0mu{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg);min-width:0;min-height:0}.workspace.svelte-8tj0mu{flex:1;display:flex;min-height:0;min-width:0}.peer-pane.svelte-8tj0mu,.settings-pane.svelte-8tj0mu{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}.peer-pane[hidden].svelte-8tj0mu,.chat-pane[hidden].svelte-8tj0mu,.settings-pane[hidden].svelte-8tj0mu{display:none!important}.chat-pane.svelte-8tj0mu{flex:0 0 42%;max-width:480px;min-width:280px;min-height:0;display:flex;flex-direction:column;border-left:1px solid var(--border)}.error-strip.svelte-8tj0mu{position:fixed;left:16px;right:16px;bottom:16px;z-index:1100;display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--surface-2, var(--bg-raised, #111));border:1px solid var(--fault, var(--error, #c41e1e));border-radius:var(--radius, 2px);color:var(--fault, var(--error, #c41e1e));font-size:var(--font-size-sm, 13px)}.error-strip-msg.svelte-8tj0mu{flex:1;min-width:0;word-break:break-word}.error-strip-dismiss.svelte-8tj0mu{flex-shrink:0;min-height:32px;padding:4px 10px;border:1px solid var(--fault, var(--error, #c41e1e));border-radius:var(--radius, 2px);background:transparent;color:var(--fault, var(--error, #c41e1e));cursor:pointer;font-family:inherit;font-size:13px;text-transform:none}.error-strip-dismiss.svelte-8tj0mu:hover{background:color-mix(in srgb,var(--fault, #c41e1e) 12%,transparent)}.notification.svelte-8tj0mu{position:fixed;top:16px;right:16px;padding:12px 16px;font-size:13px;font-weight:500;z-index:1000;background:var(--surface-2, var(--bg-raised, #111));border:1px solid var(--border, #2a2a2a);border-radius:var(--radius, 2px);color:var(--text, var(--text-bright, #f5f5f5));max-width:min(360px,calc(100vw - 2rem))}.notification.error.svelte-8tj0mu{border-color:var(--fault, var(--error, #c41e1e));color:var(--fault, var(--error, #c41e1e))}.space-bg,.space-bg:before,.space-bg:after,.space-dust,.space-dust:before{position:fixed;pointer-events:none;z-index:0}.space-bg{inset:0;background:radial-gradient(ellipse 85% 65% at 50% 36%,rgba(255,255,255,.045) 0%,transparent 55%),radial-gradient(ellipse 120% 80% at 50% 100%,rgba(255,255,255,.03) 0%,transparent 50%),radial-gradient(ellipse 100% 100% at 50% 50%,#0a0a0a,#050505 70%,#000)}.space-bg:before{content:"";position:absolute;inset:0;opacity:.8;background:radial-gradient(1.2px 1.2px at 5% 10%,rgba(255,255,255,.55) 0%,transparent 100%),radial-gradient(1px 1px at 12% 32%,rgba(255,255,255,.35) 0%,transparent 100%),radial-gradient(1px 1px at 18% 68%,rgba(255,255,255,.32) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 25% 45%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 32% 18%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 38% 78%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 45% 15%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 52% 58%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 58% 28%,rgba(255,255,255,.26) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 65% 10%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 72% 72%,rgba(255,255,255,.35) 0%,transparent 100%),radial-gradient(1px 1px at 78% 40%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 85% 65%,rgba(255,255,255,.48) 0%,transparent 100%),radial-gradient(1px 1px at 90% 22%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 94% 88%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1px 1px at 8% 88%,rgba(255,255,255,.26) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 30% 92%,rgba(255,255,255,.4) 0%,transparent 100%),radial-gradient(1px 1px at 48% 42%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1px 1px at 62% 88%,rgba(255,255,255,.32) 0%,transparent 100%),radial-gradient(1px 1px at 88% 52%,rgba(255,255,255,.26) 0%,transparent 100%)}.space-bg:after{content:"";position:absolute;inset:0;background-image:radial-gradient(1.5px 1.5px at 8% 18%,rgba(255,255,255,.7) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 48% 38%,rgba(255,255,255,.6) 0%,transparent 100%),radial-gradient(1.5px 1.5px at 88% 28%,rgba(255,255,255,.65) 0%,transparent 100%),radial-gradient(1px 1px at 22% 55%,rgba(255,255,255,.45) 0%,transparent 100%),radial-gradient(1px 1px at 70% 60%,rgba(255,255,255,.4) 0%,transparent 100%);animation:twinkle 9s ease-in-out infinite alternate;opacity:.5}@keyframes twinkle{0%{opacity:.2}45%{opacity:.5}to{opacity:.25}}.space-dust{inset:0;background:radial-gradient(ellipse 80% 70% at 50% 45%,transparent 42%,rgba(0,0,0,.62) 100%);opacity:1}.space-dust:before{content:"";position:absolute;inset:0;opacity:.32;background:radial-gradient(.5px .5px at 20% 30%,rgba(255,255,255,.4) 0%,transparent 100%),radial-gradient(.5px .5px at 40% 60%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(.5px .5px at 60% 25%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(.5px .5px at 75% 70%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(.5px .5px at 88% 40%,rgba(255,255,255,.3) 0%,transparent 100%)}.light-theme .space-bg,.light-theme .space-bg:before,.light-theme .space-bg:after,.light-theme .space-dust,.light-theme .space-dust:before{display:none!important}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/bricolage-latin-400-A6LyuA6R.woff2) format("woff2")}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/bricolage-latin-500-DEDBoLFO.woff2) format("woff2")}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:600;font-display:swap;src:url(/assets/bricolage-latin-600-nxTgbNFE.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/ibm-plex-mono-latin-400-Dm_PoFIZ.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/ibm-plex-mono-latin-500-C_OblDzq.woff2) format("woff2")}@font-face{font-family:"IBM Plex Serif";font-style:italic;font-weight:400;font-display:swap;src:url(/assets/ibm-plex-serif-latin-400-italic-yImJBWyJ.woff2) format("woff2")}html[data-app=connected]{color-scheme:dark;--bg: #0a0a0a;--surface: #141414;--surface-2: #1a1a1a;--border: #2a2a2a;--hairline: #3a3a3a;--muted: #8a8a8a;--text: #f5f5f5;--cta: #ffffff;--cta-fill: #ffffff;--cta-ink: #0a0a0a;--caution: #a3a3a3;--danger: #f5f5f5;--live: #2fbf62;--fault: #e23d3d;--radius: 2px;--graticule: #262626;--font-sans: "Bricolage Grotesque", "Segoe UI", sans-serif;--font-serif: "IBM Plex Serif", Georgia, serif;--font-mono: "IBM Plex Mono", Consolas, monospace;--switch-track: #1a1a1a;--switch-thumb: #f5f5f5;--switch-icon-on: #0a0a0a;--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-inout: cubic-bezier(.4, 0, .2, 1);--dur-fast: .15s;--dur-mid: .28s;--dur-slow: .42s;--bg-deep: var(--bg);--bg-primary: var(--bg);--bg-surface: var(--surface);--bg-raised: var(--surface-2);--bg-hover: #222;--bg-active: #262626;--border-deep: var(--border);--border-light: var(--hairline);--border-hover: var(--hairline);--text-bright: var(--text);--text-primary: var(--text);--text-secondary: var(--muted);--text-muted: var(--muted);--text-dim: #5c5c5c;--accent: var(--cta-fill);--accent-hover: #e8e8e8;--accent-ink: var(--cta-ink);--success: var(--live);--warning: var(--caution);--error: var(--fault);--focus-ring: var(--cta);--font-size: 14px;--font-size-sm: 13px;--font-size-xs: 12px;--line-height: 1.5}html[data-app=connected][data-theme=light]{color-scheme:light;--bg: #ffffff;--surface: #f7f7f7;--surface-2: #eeeeee;--border: #d4d4d4;--hairline: #b8b8b8;--muted: #5c5c5c;--text: #111111;--cta: #111111;--cta-fill: #111111;--cta-ink: #ffffff;--caution: #5c5c5c;--danger: #111111;--live: #1a8f45;--fault: #c41e1e;--switch-track: #e6e6e6;--switch-thumb: #111111;--switch-icon-on: #ffffff;--bg-hover: #ececec;--bg-active: #e4e4e4;--text-dim: #9a9a9a;--accent-hover: #2a2a2a;--error: var(--fault);--graticule: #d8d8d8}@media (prefers-reduced-motion: reduce){html[data-app=connected]{--dur-fast: .01ms;--dur-mid: .01ms;--dur-slow: .01ms}}html[data-app=connected],html[data-app=connected] body,html[data-app=connected] #app{font-family:var(--font-sans);font-size:var(--font-size);color:var(--text);background:var(--bg)}html[data-app=connected] input,html[data-app=connected] textarea,html[data-app=connected] button,html[data-app=connected] select{font-family:inherit;font-size:inherit}html[data-app=connected] ::selection{background:color-mix(in srgb,var(--text) 18%,transparent);color:var(--text)}html[data-app=connected] :focus-visible{outline:2px solid var(--text);outline-offset:2px}html[data-app=connected] .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--text-dim)}html[data-app=connected] .dot-live{background:var(--live)}html[data-app=connected] .dot-fault{background:var(--fault)}html[data-app=connected] .dot-idle{background:var(--text-dim)}html[data-app=connected] .btn{border:1px solid var(--border);background:transparent;color:var(--text);padding:8px 14px;min-height:36px;border-radius:var(--radius);cursor:pointer;font-weight:500;font-size:13px;letter-spacing:0;text-transform:none;display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-sans);transition:background var(--dur-mid) var(--ease-out),border-color var(--dur-mid) var(--ease-out),color var(--dur-mid) var(--ease-out),opacity var(--dur-mid) var(--ease-out)}html[data-app=connected] .btn:hover:not(:disabled){border-color:var(--hairline);background:var(--surface-2)}html[data-app=connected] .btn:disabled{opacity:.45;cursor:not-allowed}html[data-app=connected] .btn-ghost{border-color:var(--border);color:var(--muted)}html[data-app=connected] .btn-ghost:hover:not(:disabled){color:var(--text)}html[data-app=connected] .btn-quiet{border-color:transparent;color:var(--muted)}html[data-app=connected] .btn-quiet:hover:not(:disabled){border-color:var(--border);color:var(--text);background:transparent}html[data-app=connected] .btn-cta,html[data-app=connected] .btn.primary,html[data-app=connected] .btn-save{background:var(--cta-fill);color:var(--cta-ink);border-color:var(--cta-fill);font-weight:600}html[data-app=connected] .btn-cta:hover:not(:disabled),html[data-app=connected] .btn.primary:hover:not(:disabled),html[data-app=connected] .btn-save:hover:not(:disabled){background:color-mix(in srgb,var(--cta-fill) 88%,var(--cta-ink))}html[data-app=connected] .btn.danger{color:var(--fault);border-color:color-mix(in srgb,var(--fault) 45%,var(--border))}html[data-app=connected] .card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}html[data-app=connected] .card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;padding:10px 14px;background:var(--surface-2)}html[data-app=connected] .card-disclosure{flex:1;min-width:0;display:flex;align-items:center;gap:10px;background:transparent;border:none;padding:0;cursor:pointer;text-align:left;color:inherit;font:inherit;min-height:28px}html[data-app=connected] .card-title{font-size:13px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--text)}html[data-app=connected] .card-body{display:grid;grid-template-rows:1fr;border-top:1px solid var(--border);transition:grid-template-rows var(--dur-slow) var(--ease-out),border-color var(--dur-mid) var(--ease-out)}html[data-app=connected] .card-body.collapsed{grid-template-rows:0fr;border-top-color:transparent}html[data-app=connected] .card-body-inner{overflow:hidden;min-height:0}html[data-app=connected] .card-body-pad{padding:14px 16px 16px}html[data-app=connected] .collapse-chevron{color:var(--muted);width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;font-size:10px;transition:transform var(--dur-mid) var(--ease-out);flex-shrink:0}html[data-app=connected] .collapse-chevron.collapsed{transform:rotate(-90deg)}html[data-app=connected] .field{margin-bottom:12px}html[data-app=connected] .field label,html[data-app=connected] .setting-label{display:block;font-size:12px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--muted);margin-bottom:4px}html[data-app=connected] .field input,html[data-app=connected] .field select,html[data-app=connected] .field textarea,html[data-app=connected] .settings-view input[type=text],html[data-app=connected] .settings-view input[type=password],html[data-app=connected] .settings-view input[type=number],html[data-app=connected] .settings-view select,html[data-app=connected] .modal input{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);padding:8px 10px;min-height:36px;font-size:13px;font-family:var(--font-mono)}html[data-app=connected] .hint{color:var(--muted);font-size:13px;margin:0 0 12px;max-width:65ch;line-height:1.45}html[data-app=connected] .theme-switch{--ts-thumb: 28px;--ts-inset: 3px;--ts-travel: 36px;position:relative;width:calc(var(--ts-thumb) + var(--ts-inset) * 2 + var(--ts-travel));height:calc(var(--ts-thumb) + var(--ts-inset) * 2);padding:0;border:1px solid var(--border);border-radius:999px;background:transparent;cursor:pointer;flex-shrink:0;box-sizing:border-box;min-width:62px;min-height:34px}html[data-app=connected] .theme-switch:hover{border-color:var(--hairline)}html[data-app=connected] .theme-switch-track{position:absolute;inset:0;border-radius:inherit;overflow:hidden}html[data-app=connected] .theme-switch-thumb{position:absolute;top:50%;left:var(--ts-inset);width:var(--ts-thumb);height:var(--ts-thumb);border-radius:50%;background:var(--switch-thumb);border:1px solid var(--border);transform:translate3d(0,-50%,0);z-index:2;pointer-events:none}html[data-app=connected] .theme-switch.is-dark .theme-switch-thumb{transform:translate3d(var(--ts-travel),-50%,0)}html[data-app=connected] .theme-switch-icon{position:absolute;top:50%;width:var(--ts-thumb);height:var(--ts-thumb);display:flex;align-items:center;justify-content:center;color:var(--muted);opacity:.4;transform:translateY(-50%) scale(.92);z-index:3;pointer-events:none}html[data-app=connected] .theme-switch-icon svg{display:block;width:16px;height:16px}html[data-app=connected] .theme-switch-sun{left:var(--ts-inset)}html[data-app=connected] .theme-switch-moon{left:calc(var(--ts-inset) + var(--ts-travel))}html[data-app=connected] .theme-switch:not(.is-dark) .theme-switch-sun,html[data-app=connected] .theme-switch.is-dark .theme-switch-moon{color:var(--switch-icon-on);opacity:1;transform:translateY(-50%) scale(1)}html[data-app=connected] .label-track{display:block;font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);line-height:1.2}html[data-app=connected] .led{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--text-dim);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 18%,transparent)}html[data-app=connected] .led.on.live{background:var(--live)}html[data-app=connected] .led.on.fault{background:var(--fault)}html[data-app=connected] .led.on.idle{background:var(--text)}html[data-app=connected] .bezel{border:1px solid var(--border);background:transparent;color:var(--text);min-height:32px;padding:4px 10px;border-radius:var(--radius);font-size:11px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;font-family:var(--font-sans)}html[data-app=connected] .bezel:hover:not(:disabled){border-color:var(--hairline);background:var(--surface-2)}html[data-app=connected] .bezel.active{background:var(--text);color:var(--bg);border-color:var(--text)}@font-face{font-family:Bungee;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/bungee-latin-Dfnurram.woff2) format("woff2")}:root{--bg-deep: #000000;--bg-primary: #050505;--bg-surface: #0a0a0a;--bg-raised: #111111;--bg-hover: #181818;--bg-active: #1f1f1f;--border-deep: #111111;--border: #1c1c1c;--border-light: #2a2a2a;--border-hover: #3d3d3d;--text-bright: #f5f5f5;--text-primary: #c8c8c8;--text-secondary: #8a8a8a;--text-muted: #5c5c5c;--text-dim: #3a3a3a;--accent: #f0f0f0;--accent-hover: #ffffff;--accent-ink: #000000;--success: #9a9a9a;--warning: #c8c8c8;--error: #c45c5c;--focus-ring: #f0f0f0;--sidebar-width: 220px;--font-display: "Bungee", ui-sans-serif, system-ui, sans-serif;--font-mono: ui-monospace, "Cascadia Code", "SF Mono", Consolas, "Liberation Mono", monospace;--font-size: 12px;--font-size-sm: 11px;--font-size-xs: 10px;--line-height: 1.6}.light-theme{--bg-deep: #f5f5f5;--bg-primary: #f0f0f0;--bg-surface: #e8e8e8;--bg-raised: #e0e0e0;--bg-hover: #d8d8d8;--bg-active: #cfcfcf;--border-deep: #d0d0d0;--border: #cccccc;--border-light: #bbbbbb;--border-hover: #999999;--text-bright: #111111;--text-primary: #222222;--text-secondary: #555555;--text-muted: #888888;--text-dim: #aaaaaa;--accent: #000000;--accent-hover: #222222;--accent-ink: #f5f5f5;--success: #555555;--warning: #333333;--error: #b33a3a;--focus-ring: #000000}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body,#app{height:100%;width:100%;overflow:hidden;color:var(--text-primary);font-family:var(--font-mono);font-size:var(--font-size);line-height:var(--line-height);-webkit-font-smoothing:antialiased;user-select:auto}html,body{background:var(--bg-deep)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border)}::-webkit-scrollbar-thumb:hover{background:var(--border-hover)}::-webkit-scrollbar-corner{background:transparent}::selection{background:#ffffff1a;color:var(--text-bright)}input,textarea,button,select{font-family:var(--font-mono);font-size:var(--font-size)}input:focus-visible,textarea:focus-visible,select:focus-visible,button:focus-visible,[tabindex]:focus-visible,.network-item:focus-visible,.clickable:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}button{cursor:pointer;border:none;background:none;color:inherit}a{color:var(--text-bright);text-decoration:none}a:hover{text-decoration:underline}.btn{padding:8px 12px;min-height:36px;border:1px solid var(--border);background:var(--bg-raised);color:var(--text-primary);cursor:pointer;font-size:var(--font-size-sm);text-align:center;font-family:var(--font-mono);transition:background .1s ease,opacity .1s ease}.btn:hover:not(:disabled){background:var(--bg-hover)}.btn.primary,.btn-save{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:500}.btn.primary:hover,.btn-save:hover{background:var(--accent-hover)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.danger{color:var(--error);border-color:var(--error)}.empty-state{padding:16px;text-align:center;color:var(--text-muted);font-size:var(--font-size-sm)} diff --git a/client/frontend/dist/assets/index-D0bYtgrH.js b/client/frontend/dist/assets/index-D0bYtgrH.js new file mode 100644 index 0000000..d92a806 --- /dev/null +++ b/client/frontend/dist/assets/index-D0bYtgrH.js @@ -0,0 +1 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))i(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const c of r.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&i(c)}).observe(document,{childList:!0,subtree:!0});function n(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(o){if(o.ep)return;o.ep=!0;const r=n(o);fetch(o.href,r)}})();function Ee(){}function so(e){return e()}function gi(){return Object.create(null)}function Ne(e){e.forEach(so)}function ws(e){return typeof e=="function"}function ot(e,t){return e!=e?t==t:e!==t||e&&typeof e=="object"||typeof e=="function"}function co(e){return Object.keys(e).length===0}function ks(e,...t){if(e==null){for(const i of t)i(void 0);return Ee}const n=e.subscribe(...t);return n.unsubscribe?()=>n.unsubscribe():n}function nn(e){let t;return ks(e,n=>t=n)(),t}function _e(e,t,n){e.$$.on_destroy.push(ks(t,n))}function gt(e,t,n){return e.set(n),t}function l(e,t){e.appendChild(t)}function H(e,t,n){e.insertBefore(t,n||null)}function G(e){e.parentNode&&e.parentNode.removeChild(e)}function a(e){return document.createElement(e)}function jl(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}function y(e){return document.createTextNode(e)}function m(){return y(" ")}function Al(){return y("")}function F(e,t,n,i){return e.addEventListener(t,n,i),()=>e.removeEventListener(t,n,i)}function bt(e){return function(t){return t.stopPropagation(),e.call(this,t)}}function s(e,t,n){n==null?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}function io(e){return e===""?null:+e}function uo(e){return Array.from(e.childNodes)}function j(e,t){t=""+t,e.data!==t&&(e.data=t)}function fe(e,t){e.value=t??""}function bi(e,t,n,i){n==null?e.style.removeProperty(t):e.style.setProperty(t,n,"")}function Sl(e,t,n){for(let i=0;ii.call(this,t))}const tn=[],sn=[];let ln=[];const wi=[],po=Promise.resolve();let _s=!1;function mo(){_s||(_s=!0,po.then(ao))}function El(e){ln.push(e)}const fs=new Set;let xt=0;function ao(){if(xt!==0)return;const e=fn;do{try{for(;xte.indexOf(i)===-1?t.push(i):n.push(i)),n.forEach(i=>i()),ln=t}const Cl=new Set;let Et;function go(){Et={r:0,c:[],p:Et}}function bo(){Et.r||Ne(Et.c),Et=Et.p}function Oe(e,t){e&&e.i&&(Cl.delete(e),e.i(t))}function Ge(e,t,n,i){if(e&&e.o){if(Cl.has(e))return;Cl.add(e),Et.c.push(()=>{Cl.delete(e),i&&(n&&e.d(1),i())}),e.o(t)}else i&&i()}function wt(e){return e?.length!==void 0?e:Array.from(e)}function Nl(e,t){e.d(1),t.delete(e.key)}function zl(e,t,n,i,o,r,c,u,d,_,v,p){let g=e.length,h=r.length,C=g;const b={};for(;C--;)b[e[C].key]=C;const k=[],S=new Map,P=new Map,R=[];for(C=h;C--;){const M=p(o,r,C),J=n(M);let V=c.get(J);V?R.push(()=>V.p(M,t)):(V=_(J,M),V.c()),S.set(J,k[C]=V),J in b&&P.set(J,Math.abs(C-b[J]))}const w=new Set,L=new Set;function D(M){Oe(M,1),M.m(u,v),c.set(M.key,M),v=M.first,h--}for(;g&&h;){const M=k[h-1],J=e[g-1],V=M.key,f=J.key;M===J?(v=M.first,g--,h--):S.has(f)?!c.has(V)||w.has(V)?D(M):L.has(f)?g--:P.get(V)>P.get(f)?(L.add(V),D(M)):(w.add(f),g--):(d(J,c),g--)}for(;g--;){const M=e[g];S.has(M.key)||d(M,c)}for(;h;)D(k[h-1]);return Ne(R),k}function xe(e){e&&e.c()}function Ve(e,t,n){const{fragment:i,after_update:o}=e.$$;i&&i.m(t,n),El(()=>{const r=e.$$.on_mount.map(so).filter(ws);e.$$.on_destroy?e.$$.on_destroy.push(...r):Ne(r),e.$$.on_mount=[]}),o.forEach(El)}function Ye(e,t){const n=e.$$;n.fragment!==null&&(ho(n.after_update),Ne(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}function wo(e,t){e.$$.dirty[0]===-1&&(tn.push(e),mo(),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<{const C=h.length?h[0]:g;return _.ctx&&o(_.ctx[p],_.ctx[p]=C)&&(!_.skip_bound&&_.bound[p]&&_.bound[p](C),v&&wo(e,p)),g}):[],_.update(),v=!0,Ne(_.before_update),_.fragment=i?i(_.ctx):!1,t.target){if(t.hydrate){const p=uo(t.target);_.fragment&&_.fragment.l(p),p.forEach(G)}else _.fragment&&_.fragment.c();t.intro&&Oe(e.$$.fragment),Ve(e,t.target,t.anchor),ao()}dn(d)}class pt{$$=void 0;$$set=void 0;$destroy(){Ye(this,1),this.$destroy=Ee}$on(t,n){if(!ws(n))return Ee;const i=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return i.push(n),()=>{const o=i.indexOf(n);o!==-1&&i.splice(o,1)}}$set(t){this.$$set&&!co(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const ko="4",en=[];function yo(e,t){return{subscribe:Xe(e,t).subscribe}}function Xe(e,t=Ee){let n;const i=new Set;function o(u){if(ot(e,u)&&(e=u,n)){const d=!en.length;for(const _ of i)_[1](),en.push(_,e);if(d){for(let _=0;_{i.delete(_),i.size===0&&n&&(n(),n=null)}}return{set:o,update:r,subscribe:c}}function jo(e,t,n){const i=!Array.isArray(e),o=i?[e]:e;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const r=t.length<2;return yo(n,(c,u)=>{let d=!1;const _=[];let v=0,p=Ee;const g=()=>{if(v)return;p();const C=t(i?_[0]:_,c,u);r?c(C):p=ws(C)?C:Ee},h=o.map((C,b)=>ks(C,k=>{_[b]=k,v&=~(1<{v|=1<[...i,{id:n,msg:e,type:t}]),setTimeout(()=>{ms.update(i=>i.filter(o=>o.id!==n))},4e3),t==="error"&&Eo(e)}function Eo(e){if(!e){Pl.set(null);return}Pl.set({id:++Ao,msg:String(e)})}function _n(){Pl.set(null)}function vs(e,t){return e&&e.id?"peer:"+e.id:"room:"+(t||"network")}function pn(){return vs(nn(Ll),nn(We).room)}function Cs(e,t,n,i=!1,o="sent",r=!1,c=!1){const u=++Co;let d;r?d=vs(null,nn(We).room):i?d=pn():c?d="peer:"+e:d=vs(null,nn(We).room),js.update(v=>{const p=v[d]?[...v[d]]:[];return p.push({id:i&&e.startsWith("local_")?e:u,fromID:e,nickname:t,message:n,timestamp:Date.now(),isSelf:i,status:o,system:r}),{...v,[d]:p.length>ki?p.slice(-ki):p}});const _=pn();!i&&!(nn(Pt)&&d===_)&&Ss.update(v=>({...v,[d]:(v[d]||0)+1}))}function Po(e){Cs("system","",e,!1,"sent",!0)}function hs(e){Ss.update(t=>{const n={...t};return delete n[e],n})}function cn(e,t){const n=pn();js.update(i=>{const o=i[n];return o?{...i,[n]:o.map(r=>r.id===e?{...r,status:t}:r)}:i})}const Lo={subscribe(e){return js.subscribe(t=>{e(t[pn()]||[])})}};typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(ko);const gs={brand:"Entangled",tagline:"Private LAN for friends — anywhere.",networks:"Networks",network_count:"{n} network(s)",create_network:"Create Network",join_network:"Join Network",connecting:"Connecting...",peer_count:"{n} peer(s)",offline_click:"Offline — click to connect",saved:"Saved",no_networks:"No saved networks",no_networks_desc:"Create or join a network to get started",settings:"Settings",network_name:"Network name",password_opt:"Password (optional)",cancel:"Cancel",create:"Create",join:"Join",leave:"Leave network",remove:"Remove saved",delete_room:"Delete network",more_actions:"More actions",copy_invite:"Copy invite",paste_invite:"Have an invite?",invite_copied:"Invite copied",invite_placeholder:"server|room|password",server_addr:"Server Address",nickname:"Nickname",server_token:"Server token",server_token_desc:"optional shared secret (ENTANGLED_TOKEN)",connect:"Connect",disconnect:"Disconnect",connected:"Connected",server:"Server",virtual_ip:"Virtual IP",na:"N/A",reconnecting:"Reconnecting...",disconnected:"Disconnected",phase_dialing:"Dialing server…",phase_auth:"Authenticating…",phase_ready:"Ready",phase_error:"Error",room_chat:"Room Chat",chat:"Chat",close_chat:"Close",channels:"Channels",col_ch:"Ch",col_nickname:"Nickname",col_ip:"Virtual IP",col_ping:"Ping",ping_peer:"Ping",ping_sent:"Pinging {name}…",error_ping:"Ping failed: {err}",col_path:"Path",col_status:"Status",status_online:"Online",status_offline:"Offline",path_p2p:"Direct",path_relay:"Relay",path_ws:"Fallback",path_unknown:"—",path_p2p_tip:"Peer-to-peer direct connection",path_relay_tip:"Traffic routed through the server relay",path_ws_tip:"WebSocket fallback path",you:"You",me:"me",no_peers:"No peers connected",no_peers_desc:"Create or join a network, then wait for friends",peers_list:"Peers",network:"Network",chat_with:"Chat with {name}",room_chat_title:"Room Chat — {room}",back:"Back",no_messages:"No messages yet",no_messages_desc:"Send a message to start the conversation",type_message:"Type a message...",send:"Send",send_disabled_no_room:"Join a network to chat",msg_truncated:"Message truncated to 1000 characters",retry:"Retry",today:"Today",yesterday:"Yesterday",you_self:"You",status_connected:"Connected",status_disconnected:"Disconnected",status_reconnecting:"Reconnecting…",status_relay_degraded:"Some peers on relay",status_direct:"Direct",status_server:"Server: {s}",status_ip:"IP: {ip}",status_network:"Network: {room}",status_peers:"Peers: {n}",version:"Entangled v{v}",settings_title:"Settings",section_connection:"Connection",section_network:"Advanced network",section_system:"System",section_appearance:"Appearance",advanced_warn:"Only change these if you know what they do.",reconnect_apply:"Reconnect to apply",auto_connect:"Auto Connect",auto_connect_desc:"connect to last server on startup",auto_join:"Auto Join Last Room",auto_join_desc:"join last open room after connect (password rooms need a manual join after restart)",connection_mode:"Connection",connection_direct:"Direct (P2P)",connection_relay:"Relay (server)",connection_mode_desc:"Direct prefers peer-to-peer and uses relay only when needed. Relay forces all traffic through the server.",mtu:"MTU",mtu_desc:"Packet size. Wrong values can break games or cause lag.",dns_server:"DNS Server",dns_desc:"Optional DNS for the virtual network. Leave blank for system default.",socks5:"SOCKS5 Proxy",socks5_placeholder:"e.g. 127.0.0.1:10808",socks5_desc:"Proxies signaling (WebSocket) only — not peer/relay UDP. Reconnect to apply.",stun_server:"STUN Server",stun_desc:"Helps find your public address for direct links. Reconnect to apply.",start_windows:"Start with Windows",updates:"Updates",check_updates:"Check for updates",apply_update:"Update",update_checking:"Checking for updates…",update_latest:"You are up to date.",update_available:"Update available: v{v}",update_downloading:"Downloading update… the app will restart.",update_failed:"Update failed",confirm_update:"Download and install the update? The app will restart.",error_update_check:"Update check failed: ",error_update:"Update failed: ",notif_updating:"Installing update…",ui_scale:"UI Scale",ui_scale_desc:"Scales the whole interface. Use with window resize or F11 fullscreen.",theme:"Theme",theme_dark:"Dark",theme_light:"Light",language:"Language",save:"Save",reset:"Reset to defaults",language_en:"English",language_ru:"Russian",language_zh:"Chinese",copied:"Copied",dismiss_error:"Dismiss",field_required:"Required",notif_created:"Network created: {name}",notif_joined:"Joined network: {name}",notif_left:"Left network",notif_removed:"Removed: {name}",notif_deleted:"Network deleted: {name}",notif_connected:"Connected to {addr}",notif_disconnected:"Disconnected",notif_settings_saved:"Settings saved",notif_reconnect_required:"Reconnect to apply proxy / STUN / token changes",notif_auto_join_skipped:'Auto-join skipped for "{name}" — enter the password to join',notif_need_config:"Set server & nickname in Connect page first",notif_room_deleted:"Network was deleted by owner",invite_no_password:"Invite copied without password (not stored). Add it before sharing.",error_create:"Failed to create network: {err}",error_join:"Failed to join: {err}",error_leave:"Failed to leave: {err}",error_remove:"Failed to remove: {err}",error_connect:"Connection failed: {err}",error_disconnect:"Error: {err}",error_send:"Failed to send: {err}",error_not_connected:"Not connected — cannot send message",error_invalid_invite:"Invalid invite: server and room are required",error_save:"Failed to save settings: {err}",confirm_disconnect:"Disconnect from server?",confirm_leave:"Leave the current network? It stays in your saved list.",confirm_leave_remove:"Leave and remove this network from your saved list?",confirm_remove:'Remove "{name}" from saved networks? (does not delete the network for others)',confirm_delete:'Permanently delete network "{name}" for everyone?',confirm_reset:"Reset all settings to defaults?"},Do={brand:"Entangled",tagline:"Частная LAN для друзей — где угодно.",networks:"Сети",network_count:"{n} сет(ь/и/ей)",create_network:"Создать сеть",join_network:"Подключиться",connecting:"Подключение...",peer_count:"{n} участник(ов)",offline_click:"Не в сети — нажмите для подключения",saved:"Сохранено",no_networks:"Нет сохранённых сетей",no_networks_desc:"Создайте или войдите в сеть, чтобы начать",settings:"Настройки",network_name:"Название сети",password_opt:"Пароль (опционально)",cancel:"Отмена",create:"Создать",join:"Войти",leave:"Покинуть сеть",remove:"Убрать из списка",delete_room:"Удалить сеть",more_actions:"Ещё действия",copy_invite:"Копировать инвайт",paste_invite:"Есть инвайт?",invite_copied:"Инвайт скопирован",invite_placeholder:"сервер|комната|пароль",server_addr:"Адрес сервера",nickname:"Псевдоним",server_token:"Токен сервера",server_token_desc:"опциональный секрет (ENTANGLED_TOKEN)",connect:"Подключиться",disconnect:"Отключиться",connected:"Подключено",server:"Сервер",virtual_ip:"Виртуальный IP",na:"Н/Д",reconnecting:"Переподключение...",disconnected:"Отключено",phase_dialing:"Подключение к серверу…",phase_auth:"Аутентификация…",phase_ready:"Готово",phase_error:"Ошибка",room_chat:"Чат комнаты",chat:"Чат",close_chat:"Закрыть",channels:"Каналы",col_ch:"Кн",col_nickname:"Псевдоним",col_ip:"Виртуальный IP",col_ping:"Пинг",ping_peer:"Пинг",ping_sent:"Пинг {name}…",error_ping:"Пинг не удался: {err}",col_path:"Путь",col_status:"Статус",status_online:"В сети",status_offline:"Не в сети",path_p2p:"Прямой",path_relay:"Релей",path_ws:"Запасной",path_unknown:"—",path_p2p_tip:"Прямое соединение peer-to-peer",path_relay_tip:"Трафик через серверный релей",path_ws_tip:"Запасной путь через WebSocket",you:"Вы",me:"я",no_peers:"Нет подключённых участников",no_peers_desc:"Создайте или войдите в сеть и дождитесь друзей",peers_list:"Участники",network:"Сеть",chat_with:"Чат с {name}",room_chat_title:"Чат комнаты — {room}",back:"Назад",no_messages:"Сообщений пока нет",no_messages_desc:"Отправьте сообщение, чтобы начать разговор",type_message:"Введите сообщение...",send:"Отправить",send_disabled_no_room:"Войдите в сеть, чтобы писать",msg_truncated:"Сообщение обрезано до 1000 символов",retry:"Повторить",today:"Сегодня",yesterday:"Вчера",you_self:"Вы",status_connected:"Подключено",status_disconnected:"Отключено",status_reconnecting:"Переподключение…",status_relay_degraded:"Часть пиров через релей",status_direct:"Прямое",status_server:"Сервер: {s}",status_ip:"IP: {ip}",status_network:"Сеть: {room}",status_peers:"Участники: {n}",version:"Entangled v{v}",settings_title:"Настройки",section_connection:"Подключение",section_network:"Доп. сеть",section_system:"Система",section_appearance:"Внешний вид",advanced_warn:"Меняйте только если понимаете, что делаете.",reconnect_apply:"Переподключитесь, чтобы применить",auto_connect:"Автоподключение",auto_connect_desc:"подключаться к последнему серверу при запуске",auto_join:"Автовход в комнату",auto_join_desc:"входить в последнюю открытую комнату (с паролем — вручную после перезапуска)",connection_mode:"Соединение",connection_direct:"Прямое (P2P)",connection_relay:"Релей (сервер)",connection_mode_desc:"Прямое предпочитает P2P и использует релей только при необходимости. Релей гонит весь трафик через сервер.",mtu:"MTU",mtu_desc:"Размер пакета. Неверное значение ломает игры или даёт лаги.",dns_server:"DNS-сервер",dns_desc:"Опциональный DNS виртуальной сети. Пусто — системный по умолчанию.",socks5:"SOCKS5-прокси",socks5_placeholder:"напр. 127.0.0.1:10808",socks5_desc:"Только сигнальный WebSocket, не UDP пиров/релея. Переподключитесь, чтобы применить.",stun_server:"STUN-сервер",stun_desc:"Помогает найти публичный адрес. Переподключитесь, чтобы применить.",start_windows:"Запуск с Windows",updates:"Обновления",check_updates:"Проверить обновления",apply_update:"Обновить",update_checking:"Проверка обновлений…",update_latest:"У вас актуальная версия.",update_available:"Доступно обновление: v{v}",update_downloading:"Загрузка обновления… приложение перезапустится.",update_failed:"Ошибка обновления",confirm_update:"Скачать и установить обновление? Приложение перезапустится.",error_update_check:"Не удалось проверить обновления: ",error_update:"Не удалось обновить: ",notif_updating:"Установка обновления…",ui_scale:"Масштаб UI",ui_scale_desc:"Масштабирует весь интерфейс. Вместе с изменением размера окна или F11.",theme:"Тема",theme_dark:"Тёмная",theme_light:"Светлая",language:"Язык",save:"Сохранить",reset:"Сбросить",language_en:"Английский",language_ru:"Русский",language_zh:"Китайский",copied:"Скопировано",dismiss_error:"Закрыть",field_required:"Обязательно",notif_created:"Сеть создана: {name}",notif_joined:"Подключились к сети: {name}",notif_left:"Покинули сеть",notif_removed:"Удалено: {name}",notif_deleted:"Сеть удалена: {name}",notif_connected:"Подключились к {addr}",notif_disconnected:"Отключились",notif_settings_saved:"Настройки сохранены",notif_reconnect_required:"Переподключитесь, чтобы применить прокси / STUN / токен",notif_auto_join_skipped:"Автовход пропущен для «{name}» — введите пароль вручную",notif_need_config:"Укажите сервер и псевдоним на странице подключения",notif_room_deleted:"Сеть удалена владельцем",invite_no_password:"Инвайт скопирован без пароля (он не хранится). Добавьте перед отправкой.",error_create:"Не удалось создать сеть: {err}",error_join:"Не удалось подключиться: {err}",error_leave:"Не удалось покинуть: {err}",error_remove:"Не удалось удалить: {err}",error_connect:"Ошибка подключения: {err}",error_disconnect:"Ошибка: {err}",error_send:"Не удалось отправить: {err}",error_not_connected:"Нет подключения — невозможно отправить сообщение",error_invalid_invite:"Неверный инвайт: нужны сервер и комната",error_save:"Не удалось сохранить настройки: {err}",confirm_disconnect:"Отключиться от сервера?",confirm_leave:"Покинуть текущую сеть? Она останется в сохранённых.",confirm_leave_remove:"Покинуть и убрать сеть из сохранённых?",confirm_remove:'Убрать "{name}" из сохранённых? (сеть для других не удалится)',confirm_delete:'Навсегда удалить сеть "{name}" для всех?',confirm_reset:"Сбросить все настройки?"},No={brand:"Entangled",tagline:"朋友的私人局域网 — 随时随地。",networks:"网络",network_count:"{n} 个网络",create_network:"创建网络",join_network:"加入网络",connecting:"连接中...",peer_count:"{n} 个节点",offline_click:"离线 — 点击连接",saved:"已保存",no_networks:"暂无保存的网络",no_networks_desc:"创建或加入网络以开始",settings:"设置",network_name:"网络名称",password_opt:"密码(可选)",cancel:"取消",create:"创建",join:"加入",leave:"离开网络",remove:"移除已保存",delete_room:"删除网络",more_actions:"更多操作",copy_invite:"复制邀请",paste_invite:"有邀请码?",invite_copied:"邀请已复制",invite_placeholder:"服务器|房间|密码",server_addr:"服务器地址",nickname:"昵称",server_token:"服务器令牌",server_token_desc:"可选共享密钥(ENTANGLED_TOKEN)",connect:"连接",disconnect:"断开",connected:"已连接",server:"服务器",virtual_ip:"虚拟 IP",na:"无",reconnecting:"重新连接...",disconnected:"已断开",phase_dialing:"正在连接服务器…",phase_auth:"正在验证…",phase_ready:"就绪",phase_error:"错误",room_chat:"房间聊天",chat:"聊天",close_chat:"关闭",channels:"通道",col_ch:"通",col_nickname:"昵称",col_ip:"虚拟 IP",col_ping:"延迟",ping_peer:"测速",ping_sent:"正在测速 {name}…",error_ping:"测速失败: {err}",col_path:"路径",col_status:"状态",status_online:"在线",status_offline:"离线",path_p2p:"直连",path_relay:"中继",path_ws:"备用",path_unknown:"—",path_p2p_tip:"点对点直连",path_relay_tip:"经服务器中继转发",path_ws_tip:"WebSocket 备用路径",you:"你",me:"我",no_peers:"暂无连接的节点",no_peers_desc:"创建或加入网络,然后等待好友",peers_list:"节点",network:"网络",chat_with:"与 {name} 聊天",room_chat_title:"房间聊天 — {room}",back:"返回",no_messages:"暂无消息",no_messages_desc:"发送一条消息开始对话",type_message:"输入消息...",send:"发送",send_disabled_no_room:"加入网络后才能聊天",msg_truncated:"消息已截断至 1000 个字符",retry:"重试",today:"今天",yesterday:"昨天",you_self:"你",status_connected:"已连接",status_disconnected:"已断开",status_reconnecting:"重新连接…",status_relay_degraded:"部分节点经中继",status_direct:"直连",status_server:"服务器: {s}",status_ip:"IP: {ip}",status_network:"网络: {room}",status_peers:"节点: {n}",version:"Entangled v{v}",settings_title:"设置",section_connection:"连接",section_network:"高级网络",section_system:"系统",section_appearance:"外观",advanced_warn:"仅在了解作用时更改这些选项。",reconnect_apply:"重新连接以生效",auto_connect:"自动连接",auto_connect_desc:"启动时自动连接到上次的服务器",auto_join:"自动加入房间",auto_join_desc:"连接后自动加入上次的开放房间(有密码的房间重启后需手动加入)",connection_mode:"连接方式",connection_direct:"直连 (P2P)",connection_relay:"中继 (服务器)",connection_mode_desc:"直连优先点对点,必要时才用中继。中继模式强制全部流量经服务器。",mtu:"MTU",mtu_desc:"数据包大小。错误值可能导致游戏异常或卡顿。",dns_server:"DNS 服务器",dns_desc:"虚拟网络可选 DNS。留空则使用系统默认。",socks5:"SOCKS5 代理",socks5_placeholder:"例如 127.0.0.1:10808",socks5_desc:"仅代理信令 WebSocket,不含节点/中继 UDP。重新连接以生效。",stun_server:"STUN 服务器",stun_desc:"用于发现公网地址以便直连。重新连接以生效。",start_windows:"开机自启",updates:"更新",check_updates:"检查更新",apply_update:"更新",update_checking:"正在检查更新…",update_latest:"已是最新版本。",update_available:"有可用更新:v{v}",update_downloading:"正在下载更新…应用将重启。",update_failed:"更新失败",confirm_update:"下载并安装更新?应用将重启。",error_update_check:"检查更新失败:",error_update:"更新失败:",notif_updating:"正在安装更新…",ui_scale:"界面缩放",ui_scale_desc:"缩放整个界面。可配合窗口调整大小或 F11 全屏使用。",theme:"主题",theme_dark:"深色",theme_light:"浅色",language:"语言",save:"保存",reset:"重置为默认",language_en:"英语",language_ru:"俄语",language_zh:"中文",copied:"已复制",dismiss_error:"关闭",field_required:"必填",notif_created:"网络已创建: {name}",notif_joined:"已加入网络: {name}",notif_left:"已离开网络",notif_removed:"已删除: {name}",notif_deleted:"网络已删除: {name}",notif_connected:"已连接到 {addr}",notif_disconnected:"已断开连接",notif_settings_saved:"设置已保存",notif_reconnect_required:"请重新连接以使代理 / STUN / 令牌生效",notif_auto_join_skipped:"已跳过自动加入「{name}」— 请输入密码后手动加入",notif_need_config:"请先在连接页面设置服务器和昵称",notif_room_deleted:"网络已被所有者删除",invite_no_password:"邀请已复制但无密码(密码不存储)。分享前请自行添加。",error_create:"创建网络失败: {err}",error_join:"加入失败: {err}",error_leave:"离开失败: {err}",error_remove:"删除失败: {err}",error_connect:"连接失败: {err}",error_disconnect:"错误: {err}",error_send:"发送失败: {err}",error_not_connected:"未连接 — 无法发送消息",error_invalid_invite:"无效邀请:需要服务器和房间名",error_save:"保存设置失败: {err}",confirm_disconnect:"确定断开服务器连接?",confirm_leave:"离开当前网络?仍保留在已保存列表中。",confirm_leave_remove:"离开并从已保存列表中移除?",confirm_remove:'从已保存网络中移除 "{name}"?(不会删除他人的网络)',confirm_delete:'永久删除网络 "{name}"(对所有人)?',confirm_reset:"确定重置所有设置?"},As={en:gs,ru:Do,zh:No};function zo(){const e=localStorage.getItem("entangled_locale");if(e&&As[e])return e;const t=navigator.language?.slice(0,2);return t==="ru"?"ru":t==="zh"?"zh":"en"}const Es=Xe(zo()),mt=jo(Es,e=>{const t=As[e]||gs;return new Proxy(t,{get(n,i){if(typeof i=="string")return n[i]??gs[i]??i}})});function un(e){As[e]&&(localStorage.setItem("entangled_locale",e),Es.set(e))}function ge(e,t){return e?String(e).replace(/\{(\w+)\}/g,(n,i)=>t&&t[i]!=null?t[i]:`{${i}}`):""}function yi(e){let t,n,i,o,r,c,u,d=e[4].cancel+"",_,v,p,g=(e[2]||e[4].disconnect)+"",h,C,b;return{c(){t=a("div"),n=a("div"),i=a("p"),o=y(e[1]),r=m(),c=a("div"),u=a("button"),_=y(d),v=m(),p=a("button"),h=y(g),s(i,"id","confirm-msg"),s(i,"class","svelte-1g1nook"),s(u,"type","button"),s(u,"class","btn"),s(p,"type","button"),s(p,"class","btn"),Z(p,"danger",e[3]),Z(p,"btn-cta",!e[3]),s(c,"class","modal-actions svelte-1g1nook"),s(n,"class","modal svelte-1g1nook"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","confirm-msg"),s(t,"class","modal-overlay svelte-1g1nook"),s(t,"role","presentation")},m(k,S){H(k,t,S),l(t,n),l(n,i),l(i,o),l(n,r),l(n,c),l(c,u),l(u,_),l(c,v),l(c,p),l(p,h),C||(b=[F(u,"click",e[5]),F(p,"click",e[6]),F(n,"click",bt(e[10])),F(n,"keydown",bt(e[11])),F(t,"click",e[5]),F(t,"keydown",e[7])],C=!0)},p(k,S){S&2&&j(o,k[1]),S&16&&d!==(d=k[4].cancel+"")&&j(_,d),S&20&&g!==(g=(k[2]||k[4].disconnect)+"")&&j(h,g),S&8&&Z(p,"danger",k[3]),S&8&&Z(p,"btn-cta",!k[3])},d(k){k&&G(t),C=!1,Ne(b)}}}function Io(e){let t,n=e[0]&&yi(e);return{c(){n&&n.c(),t=Al()},m(i,o){n&&n.m(i,o),H(i,t,o)},p(i,[o]){i[0]?n?n.p(i,o):(n=yi(i),n.c(),n.m(t.parentNode,t)):n&&(n.d(1),n=null)},i:Ee,o:Ee,d(i){i&&G(t),n&&n.d(i)}}}function Mo(e,t,n){let i;_e(e,mt,b=>n(4,i=b));let{open:o=!1}=t,{message:r=""}=t,{confirmLabel:c=""}=t,{danger:u=!1}=t,{onConfirm:d=()=>{}}=t,{onCancel:_=()=>{}}=t;function v(){_()}function p(){d()}function g(b){b.key==="Escape"&&v()}function h(b){ht.call(this,e,b)}function C(b){ht.call(this,e,b)}return e.$$set=b=>{"open"in b&&n(0,o=b.open),"message"in b&&n(1,r=b.message),"confirmLabel"in b&&n(2,c=b.confirmLabel),"danger"in b&&n(3,u=b.danger),"onConfirm"in b&&n(8,d=b.onConfirm),"onCancel"in b&&n(9,_=b.onCancel)},[o,r,c,u,i,v,p,g,d,_,h,C]}class Ps extends pt{constructor(t){super(),_t(this,t,Mo,Io,ot,{open:0,message:1,confirmLabel:2,danger:3,onConfirm:8,onCancel:9})}}function ji(e,t,n){const i=e.slice();return i[63]=t[n],i}function Si(e){let t,n,i=e[16].no_networks+"",o,r,c,u=e[16].no_networks_desc+"",d,_;return{c(){t=a("div"),n=a("div"),o=y(i),r=m(),c=a("div"),d=y(u),_=m(),s(c,"class","empty-desc svelte-5bd3jz"),s(t,"class","empty-state svelte-5bd3jz")},m(v,p){H(v,t,p),l(t,n),l(n,o),l(t,r),l(t,c),l(c,d),l(t,_)},p(v,p){p[0]&65536&&i!==(i=v[16].no_networks+"")&&j(o,i),p[0]&65536&&u!==(u=v[16].no_networks_desc+"")&&j(d,u)},d(v){v&&G(t)}}}function To(e){let t=e[16].saved+"",n;return{c(){n=y(t)},m(i,o){H(i,n,o)},p(i,o){o[0]&65536&&t!==(t=i[16].saved+"")&&j(n,t)},d(i){i&&G(n)}}}function Ro(e){let t=e[16].offline_click+"",n;return{c(){n=y(t)},m(i,o){H(i,n,o)},p(i,o){o[0]&65536&&t!==(t=i[16].offline_click+"")&&j(n,t)},d(i){i&&G(n)}}}function qo(e){let t=ge(e[16].peer_count,{n:e[17].peerCount})+"",n;return{c(){n=y(t)},m(i,o){H(i,n,o)},p(i,o){o[0]&196608&&t!==(t=ge(i[16].peer_count,{n:i[17].peerCount})+"")&&j(n,t)},d(i){i&&G(n)}}}function Oo(e){let t=e[16].connecting+"",n;return{c(){n=y(t)},m(i,o){H(i,n,o)},p(i,o){o[0]&65536&&t!==(t=i[16].connecting+"")&&j(n,t)},d(i){i&&G(n)}}}function Ci(e){let t,n,i=e[16].copy_invite+"",o,r,c,u,d=e[16].remove+"",_,v,p,g;function h(...S){return e[39](e[63],...S)}let C=e[17].room===e[63].name&&Ai(e);function b(...S){return e[41](e[63],...S)}let k=e[17].room===e[63].name&&e[17].isOwner&&Ei(e);return{c(){t=a("div"),n=a("button"),o=y(i),r=m(),C&&C.c(),c=m(),u=a("button"),_=y(d),v=m(),k&&k.c(),s(n,"type","button"),s(n,"role","menuitem"),s(n,"class","menu-item svelte-5bd3jz"),s(u,"type","button"),s(u,"role","menuitem"),s(u,"class","menu-item danger svelte-5bd3jz"),s(t,"class","overflow-menu svelte-5bd3jz"),s(t,"role","menu"),s(t,"tabindex","-1")},m(S,P){H(S,t,P),l(t,n),l(n,o),l(t,r),C&&C.m(t,null),l(t,c),l(t,u),l(u,_),l(t,v),k&&k.m(t,null),p||(g=[F(n,"click",h),F(u,"click",b),F(t,"click",bt(e[36])),F(t,"keydown",bt(e[37]))],p=!0)},p(S,P){e=S,P[0]&65536&&i!==(i=e[16].copy_invite+"")&&j(o,i),e[17].room===e[63].name?C?C.p(e,P):(C=Ai(e),C.c(),C.m(t,c)):C&&(C.d(1),C=null),P[0]&65536&&d!==(d=e[16].remove+"")&&j(_,d),e[17].room===e[63].name&&e[17].isOwner?k?k.p(e,P):(k=Ei(e),k.c(),k.m(t,null)):k&&(k.d(1),k=null)},d(S){S&&G(t),C&&C.d(),k&&k.d(),p=!1,Ne(g)}}}function Ai(e){let t,n=e[16].leave+"",i,o,r;return{c(){t=a("button"),i=y(n),s(t,"type","button"),s(t,"role","menuitem"),s(t,"class","menu-item svelte-5bd3jz")},m(c,u){H(c,t,u),l(t,i),o||(r=F(t,"click",e[40]),o=!0)},p(c,u){u[0]&65536&&n!==(n=c[16].leave+"")&&j(i,n)},d(c){c&&G(t),o=!1,r()}}}function Ei(e){let t,n=e[16].delete_room+"",i,o,r;function c(...u){return e[42](e[63],...u)}return{c(){t=a("button"),i=y(n),s(t,"type","button"),s(t,"role","menuitem"),s(t,"class","menu-item danger svelte-5bd3jz")},m(u,d){H(u,t,d),l(t,i),o||(r=F(t,"click",c),o=!0)},p(u,d){e=u,d[0]&65536&&n!==(n=e[16].delete_room+"")&&j(i,n)},d(u){u&&G(t),o=!1,r()}}}function Pi(e,t){let n,i,o,r,c,u=t[63].name+"",d,_,v,p,g,h,C,b,k,S,P,R,w,L,D,M;function J(X,Y){return X[11]===X[63].name?Oo:X[17].room===X[63].name?qo:X[17].connected?To:Ro}let V=J(t),f=V(t);function q(...X){return t[38](t[63],...X)}let B=t[12]===t[63].name&&Ci(t);function U(){return t[43](t[63])}function T(...X){return t[44](t[63],...X)}return{key:e,first:null,c(){n=a("div"),i=a("span"),o=m(),r=a("div"),c=a("div"),d=y(u),_=m(),v=a("div"),f.c(),p=m(),g=a("div"),h=a("button"),C=y("⋯"),P=m(),B&&B.c(),R=m(),s(i,"class","tick svelte-5bd3jz"),s(i,"aria-hidden","true"),Z(i,"on",t[17].room===t[63].name),s(c,"class","network-name svelte-5bd3jz"),s(v,"class","network-meta svelte-5bd3jz"),s(r,"class","network-info svelte-5bd3jz"),s(h,"type","button"),s(h,"class","menu-btn svelte-5bd3jz"),s(h,"aria-haspopup","menu"),s(h,"aria-expanded",b=t[12]===t[63].name),s(h,"aria-label",k=t[16].more_actions),s(h,"title",S=t[16].more_actions),s(g,"class","row-actions svelte-5bd3jz"),s(n,"class","network-item svelte-5bd3jz"),s(n,"role","button"),s(n,"tabindex","0"),s(n,"aria-current",w=t[17].room===t[63].name?"true":void 0),s(n,"aria-label",L=t[63].name),Z(n,"active",t[17].room===t[63].name),Z(n,"disabled",!t[17].connected&&!t[11]),this.first=n},m(X,Y){H(X,n,Y),l(n,i),l(n,o),l(n,r),l(r,c),l(c,d),l(r,_),l(r,v),f.m(v,null),l(n,p),l(n,g),l(g,h),l(h,C),l(g,P),B&&B.m(g,null),l(n,R),D||(M=[F(h,"click",q),F(n,"click",U),F(n,"keydown",T)],D=!0)},p(X,Y){t=X,Y[0]&131073&&Z(i,"on",t[17].room===t[63].name),Y[0]&1&&u!==(u=t[63].name+"")&&j(d,u),V===(V=J(t))&&f?f.p(t,Y):(f.d(1),f=V(t),f&&(f.c(),f.m(v,null))),Y[0]&4097&&b!==(b=t[12]===t[63].name)&&s(h,"aria-expanded",b),Y[0]&65536&&k!==(k=t[16].more_actions)&&s(h,"aria-label",k),Y[0]&65536&&S!==(S=t[16].more_actions)&&s(h,"title",S),t[12]===t[63].name?B?B.p(t,Y):(B=Ci(t),B.c(),B.m(g,null)):B&&(B.d(1),B=null),Y[0]&131073&&w!==(w=t[17].room===t[63].name?"true":void 0)&&s(n,"aria-current",w),Y[0]&1&&L!==(L=t[63].name)&&s(n,"aria-label",L),Y[0]&131073&&Z(n,"active",t[17].room===t[63].name),Y[0]&133120&&Z(n,"disabled",!t[17].connected&&!t[11])},d(X){X&&G(n),f.d(),B&&B.d(),D=!1,Ne(M)}}}function Li(e){let t,n,i,o=e[16].create_network+"",r,c,u,d=e[16].network_name+"",_,v,p,g,h,C,b,k,S=e[16].password_opt+"",P,R,w,L,D,M,J,V,f=e[16].cancel+"",q,B,U,T=e[16].create+"",X,Y,ne,x=e[9]&&Di(e),N=e[7]&&Ni(e);return{c(){t=a("div"),n=a("div"),i=a("h3"),r=y(o),c=m(),u=a("label"),_=y(d),v=m(),p=a("input"),C=m(),x&&x.c(),b=m(),k=a("label"),P=y(S),R=m(),w=a("input"),D=m(),N&&N.c(),M=m(),J=a("div"),V=a("button"),q=y(f),B=m(),U=a("button"),X=y(T),s(i,"id","create-title"),s(i,"class","svelte-5bd3jz"),s(u,"class","sr-only svelte-5bd3jz"),s(u,"for","create-name"),s(p,"id","create-name"),s(p,"type","text"),s(p,"placeholder",g=e[16].network_name),s(p,"aria-invalid",h=!!e[9]),s(p,"class","svelte-5bd3jz"),Z(p,"invalid",e[9]),s(k,"class","sr-only svelte-5bd3jz"),s(k,"for","create-pass"),s(w,"id","create-pass"),s(w,"type","password"),s(w,"placeholder",L=e[16].password_opt),s(V,"class","btn"),s(U,"class","btn primary"),s(J,"class","modal-actions svelte-5bd3jz"),s(n,"class","modal svelte-5bd3jz"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","create-title"),s(t,"class","modal-overlay svelte-5bd3jz"),s(t,"role","presentation")},m(A,K){H(A,t,K),l(t,n),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(n,v),l(n,p),fe(p,e[3]),l(n,C),x&&x.m(n,null),l(n,b),l(n,k),l(k,P),l(n,R),l(n,w),fe(w,e[4]),l(n,D),N&&N.m(n,null),l(n,M),l(n,J),l(J,V),l(V,q),l(J,B),l(J,U),l(U,X),e[47](n),Y||(ne=[F(p,"input",e[45]),F(w,"input",e[46]),F(V,"click",e[19]),F(U,"click",e[22]),F(n,"click",bt(e[34])),F(n,"keydown",bt(e[35])),F(t,"click",e[19]),F(t,"keydown",e[48])],Y=!0)},p(A,K){K[0]&65536&&o!==(o=A[16].create_network+"")&&j(r,o),K[0]&65536&&d!==(d=A[16].network_name+"")&&j(_,d),K[0]&65536&&g!==(g=A[16].network_name)&&s(p,"placeholder",g),K[0]&512&&h!==(h=!!A[9])&&s(p,"aria-invalid",h),K[0]&8&&p.value!==A[3]&&fe(p,A[3]),K[0]&512&&Z(p,"invalid",A[9]),A[9]?x?x.p(A,K):(x=Di(A),x.c(),x.m(n,b)):x&&(x.d(1),x=null),K[0]&65536&&S!==(S=A[16].password_opt+"")&&j(P,S),K[0]&65536&&L!==(L=A[16].password_opt)&&s(w,"placeholder",L),K[0]&16&&w.value!==A[4]&&fe(w,A[4]),A[7]?N?N.p(A,K):(N=Ni(A),N.c(),N.m(n,M)):N&&(N.d(1),N=null),K[0]&65536&&f!==(f=A[16].cancel+"")&&j(q,f),K[0]&65536&&T!==(T=A[16].create+"")&&j(X,T)},d(A){A&&G(t),x&&x.d(),N&&N.d(),e[47](null),Y=!1,Ne(ne)}}}function Di(e){let t,n;return{c(){t=a("span"),n=y(e[9]),s(t,"class","field-error svelte-5bd3jz"),s(t,"role","alert")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o[0]&512&&j(n,i[9])},d(i){i&&G(t)}}}function Ni(e){let t,n;return{c(){t=a("div"),n=y(e[7]),s(t,"class","modal-error svelte-5bd3jz"),s(t,"role","alert")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o[0]&128&&j(n,i[7])},d(i){i&&G(t)}}}function zi(e){let t,n,i,o=e[16].join_network+"",r,c,u,d=e[16].network_name+"",_,v,p,g,h,C,b,k,S=e[16].password_opt+"",P,R,w,L,D,M,J,V,f=e[16].cancel+"",q,B,U,T=e[16].join+"",X,Y,ne,x=e[10]&&Ii(e),N=e[8]&&Mi(e);return{c(){t=a("div"),n=a("div"),i=a("h3"),r=y(o),c=m(),u=a("label"),_=y(d),v=m(),p=a("input"),C=m(),x&&x.c(),b=m(),k=a("label"),P=y(S),R=m(),w=a("input"),D=m(),N&&N.c(),M=m(),J=a("div"),V=a("button"),q=y(f),B=m(),U=a("button"),X=y(T),s(i,"id","join-title"),s(i,"class","svelte-5bd3jz"),s(u,"class","sr-only svelte-5bd3jz"),s(u,"for","join-name"),s(p,"id","join-name"),s(p,"type","text"),s(p,"placeholder",g=e[16].network_name),s(p,"aria-invalid",h=!!e[10]),s(p,"class","svelte-5bd3jz"),Z(p,"invalid",e[10]),s(k,"class","sr-only svelte-5bd3jz"),s(k,"for","join-pass"),s(w,"id","join-pass"),s(w,"type","password"),s(w,"placeholder",L=e[16].password_opt),s(V,"class","btn"),s(U,"class","btn primary"),s(J,"class","modal-actions svelte-5bd3jz"),s(n,"class","modal svelte-5bd3jz"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","join-title"),s(t,"class","modal-overlay svelte-5bd3jz"),s(t,"role","presentation")},m(A,K){H(A,t,K),l(t,n),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(n,v),l(n,p),fe(p,e[5]),l(n,C),x&&x.m(n,null),l(n,b),l(n,k),l(k,P),l(n,R),l(n,w),fe(w,e[6]),l(n,D),N&&N.m(n,null),l(n,M),l(n,J),l(J,V),l(V,q),l(J,B),l(J,U),l(U,X),e[52](n),Y||(ne=[F(p,"input",e[49]),F(w,"input",e[50]),F(V,"click",e[21]),F(U,"click",e[51]),F(n,"click",bt(e[32])),F(n,"keydown",bt(e[33])),F(t,"click",e[21]),F(t,"keydown",e[53])],Y=!0)},p(A,K){K[0]&65536&&o!==(o=A[16].join_network+"")&&j(r,o),K[0]&65536&&d!==(d=A[16].network_name+"")&&j(_,d),K[0]&65536&&g!==(g=A[16].network_name)&&s(p,"placeholder",g),K[0]&1024&&h!==(h=!!A[10])&&s(p,"aria-invalid",h),K[0]&32&&p.value!==A[5]&&fe(p,A[5]),K[0]&1024&&Z(p,"invalid",A[10]),A[10]?x?x.p(A,K):(x=Ii(A),x.c(),x.m(n,b)):x&&(x.d(1),x=null),K[0]&65536&&S!==(S=A[16].password_opt+"")&&j(P,S),K[0]&65536&&L!==(L=A[16].password_opt)&&s(w,"placeholder",L),K[0]&64&&w.value!==A[6]&&fe(w,A[6]),A[8]?N?N.p(A,K):(N=Mi(A),N.c(),N.m(n,M)):N&&(N.d(1),N=null),K[0]&65536&&f!==(f=A[16].cancel+"")&&j(q,f),K[0]&65536&&T!==(T=A[16].join+"")&&j(X,T)},d(A){A&&G(t),x&&x.d(),N&&N.d(),e[52](null),Y=!1,Ne(ne)}}}function Ii(e){let t,n;return{c(){t=a("span"),n=y(e[10]),s(t,"class","field-error svelte-5bd3jz"),s(t,"role","alert")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o[0]&1024&&j(n,i[10])},d(i){i&&G(t)}}}function Mi(e){let t,n;return{c(){t=a("div"),n=y(e[8]),s(t,"class","modal-error svelte-5bd3jz"),s(t,"role","alert")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o[0]&256&&j(n,i[8])},d(i){i&&G(t)}}}function Uo(e){let t,n,i,o=e[16].networks+"",r,c,u,d=ge(e[16].network_count,{n:e[0].length})+"",_,v,p,g,h=e[16].create_network+"",C,b,k,S,P=e[16].join_network+"",R,w,L,D,M=[],J=new Map,V,f,q,B,U,T,X,Y,ne=wt(e[0]);const x=O=>O[63].name;for(let O=0;On(16,i=z)),_e(e,Ue,z=>n(58,o=z)),_e(e,We,z=>n(17,r=z));let c=[],u=!1,d=!1,_="",v="",p="",g="",h="",C="",b="",k="",S="",P="",R="",w=null,L,D,M=null;Dl(async()=>{n(0,c=await window.go.main.App.GetSavedRooms());const z=await window.go.main.App.LoadConfig();z.serverAddr&&(S=z.serverAddr),z.nickname&&(P=z.nickname),window.addEventListener("keydown",J),window.addEventListener("click",V)}),oo(()=>{window.removeEventListener("keydown",J),window.removeEventListener("click",V)});function J(z){if(z.key==="Escape"){if(w){n(12,w=null);return}if(u){B();return}if(d){T();return}}}function V(){n(12,w=null)}async function f(){n(0,c=await window.go.main.App.GetSavedRooms())}function q(){n(7,h=""),n(9,b=""),n(1,u=!0),_n()}function B(){n(1,u=!1),n(7,h=""),n(9,b="")}function U(){n(8,C=""),n(10,k=""),n(2,d=!0),_n()}function T(){n(2,d=!1),n(8,C=""),n(10,k="")}async function X(){if(n(9,b=""),n(7,h=""),!_.trim()){n(9,b=i.field_required);return}try{await window.go.main.App.CreateRoom(_,v),ae(ge(i.notif_created,{name:_})),gt(Ue,o="network",o),B(),n(3,_=""),n(4,v=""),await f()}catch(z){n(7,h=ge(i.error_create,{err:z})),ae(h,"error")}}async function Y(z,ee){n(10,k=""),n(8,C="");const be=z||p,Ce=ee!==void 0?ee:g;if(!be.trim()){n(10,k=i.field_required);return}try{await window.go.main.App.JoinRoom(be,Ce),ae(ge(i.notif_joined,{name:be})),gt(Ue,o="network",o),T(),n(5,p=""),n(6,g=""),await f()}catch(qe){n(8,C=ge(i.error_join,{err:qe})),ae(C,"error"),d||(n(5,p=be),n(6,g=""),n(2,d=!0))}}async function ne(){n(15,M={message:i.confirm_leave,confirmLabel:i.leave,run:async()=>{try{await window.go.main.App.LeaveRoom(),ae(i.notif_left),await f()}catch(z){ae(ge(i.error_leave,{err:z}),"error")}}})}async function x(z){const ee=r.room===z;n(15,M={message:ee?i.confirm_leave_remove:ge(i.confirm_remove,{name:z}),confirmLabel:i.remove,danger:!0,run:async()=>{try{ee&&await window.go.main.App.LeaveRoom(),await window.go.main.App.RemoveSavedRoom(z),ae(ge(i.notif_removed,{name:z})),await f()}catch(be){ae(ge(i.error_remove,{err:be}),"error")}}})}async function N(z){n(15,M={message:ge(i.confirm_delete,{name:z}),confirmLabel:i.delete_room,danger:!0,run:async()=>{try{await window.go.main.App.DeleteRoom(z),await window.go.main.App.RemoveSavedRoom(z),ae(ge(i.notif_deleted,{name:z})),await f()}catch(ee){ae(String(ee),"error")}}})}async function A(z){try{const ee=await window.go.main.App.FormatInvite(z.name,z.password||"");await window.go.main.App.CopyText(ee);const be=String(ee).split("|"),Ce=be.length>=3&&be[2]!=="";z.locked&&!Ce?ae(i.invite_no_password,"info"):ae(i.invite_copied)}catch(ee){ae(String(ee),"error")}}async function K(){try{const z=await window.go.main.App.LoadConfig();z.serverAddr&&(S=z.serverAddr),z.nickname&&(P=z.nickname)}catch{}}async function O(z,ee,be){if(!R){n(11,R=z),n(12,w=null);try{await K();const Ce=be||S;if(!r.connected){if(!Ce||!P){ae(i.notif_need_config,"error"),gt(Ue,o="connect",o);return}const qe=await window.go.main.App.Connect(Ce,P);We.set(qe),await f()}await window.go.main.App.JoinRoom(z,ee||""),gt(Ue,o="network",o),await f()}catch(Ce){const qe=ge(i.error_join,{err:Ce});ae(qe,"error"),n(5,p=z),n(6,g=""),n(8,C=qe),n(2,d=!0)}finally{n(11,R="")}}}function I(z,ee){(z.key==="Enter"||z.key===" ")&&(z.preventDefault(),O(ee.name,ee.password,ee.server))}function le(z,ee){z.stopPropagation(),n(12,w=w===ee?null:ee)}function re(z,ee){z.stopPropagation(),n(12,w=null),ee()}function ye(z){ht.call(this,e,z)}function ke(z){ht.call(this,e,z)}function ze(z){ht.call(this,e,z)}function je(z){ht.call(this,e,z)}function ce(z){ht.call(this,e,z)}function Ae(z){ht.call(this,e,z)}const Te=(z,ee)=>le(ee,z.name),ue=(z,ee)=>re(ee,()=>A(z)),te=z=>re(z,ne),Ie=(z,ee)=>re(ee,()=>x(z.name)),Pe=(z,ee)=>re(ee,()=>N(z.name)),Re=z=>O(z.name,z.password,z.server),ve=(z,ee)=>I(ee,z);function we(){_=this.value,n(3,_)}function he(){v=this.value,n(4,v)}function $(z){sn[z?"unshift":"push"](()=>{L=z,n(13,L)})}const oe=z=>z.key==="Escape"&&B();function Ze(){p=this.value,n(5,p)}function De(){g=this.value,n(6,g)}const pe=()=>Y();function Le(z){sn[z?"unshift":"push"](()=>{D=z,n(14,D)})}return[c,u,d,_,v,p,g,h,C,b,k,R,w,L,D,M,i,r,q,B,U,T,X,Y,ne,x,N,A,O,I,le,re,ye,ke,ze,je,ce,Ae,Te,ue,te,Ie,Pe,Re,ve,we,he,$,oe,Ze,De,pe,Le,z=>z.key==="Escape"&&T(),async()=>{const z=M?.run;n(15,M=null),z&&await z()},()=>n(15,M=null)]}class Fo extends pt{constructor(t){super(),_t(this,t,Wo,Uo,ot,{},null,[-1,-1,-1])}}function Ti(e,t,n){const i=e.slice();i[23]=t[n],i[26]=n;const o=Vo(i[23]);return i[24]=o,i}function Ri(e){let t,n=e[5].room_chat+"",i,o,r,c,u=e[3]>0&&qi(e);return{c(){t=a("button"),i=y(n),o=m(),u&&u.c(),s(t,"type","button"),s(t,"class","bezel")},m(d,_){H(d,t,_),l(t,i),l(t,o),u&&u.m(t,null),r||(c=F(t,"click",e[8]),r=!0)},p(d,_){_&32&&n!==(n=d[5].room_chat+"")&&j(i,n),d[3]>0?u?u.p(d,_):(u=qi(d),u.c(),u.m(t,null)):u&&(u.d(1),u=null)},d(d){d&&G(t),u&&u.d(),r=!1,c()}}}function qi(e){let t,n;return{c(){t=a("span"),n=y(e[3]),s(t,"class","badge svelte-1hijv9g")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o&8&&j(n,i[3])},d(i){i&&G(t)}}}function Oi(e){let t,n=e[5].status_relay_degraded+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","section-hint fault svelte-1hijv9g")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&32&&n!==(n=o[5].status_relay_degraded+"")&&j(i,n)},d(o){o&&G(t)}}}function Ui(e){let t,n,i=e[5].no_peers+"",o,r,c,u=e[5].no_peers_desc+"",d,_;return{c(){t=a("div"),n=a("div"),o=y(i),r=m(),c=a("p"),d=y(u),_=m(),s(n,"class","empty-label svelte-1hijv9g"),s(c,"class","empty-desc svelte-1hijv9g"),s(t,"class","empty svelte-1hijv9g")},m(v,p){H(v,t,p),l(t,n),l(n,o),l(t,r),l(t,c),l(c,d),l(t,_)},p(v,p){p&32&&i!==(i=v[5].no_peers+"")&&j(o,i),p&32&&u!==(u=v[5].no_peers_desc+"")&&j(d,u)},d(v){v&&G(t)}}}function Wi(e){let t,n=e[11](e[23].id)+"",i;return{c(){t=a("span"),i=y(n),s(t,"class","badge svelte-1hijv9g")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&16&&n!==(n=o[11](o[23].id)+"")&&j(i,n)},d(o){o&&G(t)}}}function Ko(e){let t;return{c(){t=y("…")},m(n,i){H(n,t,i)},p:Ee,d(n){n&&G(t)}}}function Jo(e){let t=e[23].ping+"",n,i;return{c(){n=y(t),i=y("ms")},m(o,r){H(o,n,r),H(o,i,r)},p(o,r){r&16&&t!==(t=o[23].ping+"")&&j(n,t)},d(o){o&&(G(n),G(i))}}}function Bo(e){let t;return{c(){t=y("—")},m(n,i){H(n,t,i)},p:Ee,d(n){n&&G(t)}}}function Fi(e,t){let n,i,o=bs(t[26]+1)+"",r,c,u,d=(t[23].nickname||t[23].id)+"",_,v,p=t[11](t[23].id)>0,g,h,C=(t[23].virtualIP||t[5].na)+"",b,k,S,P,R,w,L,D,M=(t[23].connected&&t[23].path?t[12](t[23].path):t[5].path_unknown)+"",J,V,f,q,B,U,T,X=t[5].ping_peer+"",Y,ne,x,N,A=t[5].chat+"",K,O,I,le,re=p&&Wi(t);function ye(){return t[19](t[23])}function ke(...ue){return t[20](t[23],...ue)}function ze(ue,te){return ue[23].connected?ue[23].ping>=0&&!ue[2][ue[23].id]?Jo:Ko:Bo}let je=ze(t),ce=je(t);function Ae(){return t[21](t[23])}function Te(){return t[22](t[23])}return{key:e,first:null,c(){n=a("article"),i=a("span"),r=y(o),c=m(),u=a("div"),_=y(d),v=m(),re&&re.c(),g=m(),h=a("button"),b=y(C),k=m(),S=a("span"),P=jl("svg"),R=jl("line"),w=jl("circle"),L=jl("circle"),D=m(),J=y(M),f=m(),q=a("span"),ce.c(),B=m(),U=a("div"),T=a("button"),Y=y(X),x=m(),N=a("button"),K=y(A),O=m(),s(i,"class","ch svelte-1hijv9g"),s(u,"class","nickname svelte-1hijv9g"),s(h,"type","button"),s(h,"class","peer-ip svelte-1hijv9g"),s(R,"x1","3"),s(R,"y1","5"),s(R,"x2","37"),s(R,"y2","5"),s(R,"class","svelte-1hijv9g"),s(w,"cx","5"),s(w,"cy","5"),s(w,"r","2"),s(w,"class","svelte-1hijv9g"),s(L,"cx","35"),s(L,"cy","5"),s(L,"r","2"),s(L,"class","svelte-1hijv9g"),s(P,"class","trace svelte-1hijv9g"),s(P,"viewBox","0 0 40 10"),s(P,"aria-hidden","true"),s(S,"class","col-path svelte-1hijv9g"),s(S,"title",V=t[13](t[23].path)),Z(S,"live",t[24]==="live"),Z(S,"fault",t[24]==="fault"),Z(S,"idle",t[24]==="idle"),s(q,"class","col-ping svelte-1hijv9g"),Z(q,"probing",t[23].connected&&(t[23].ping<0||t[2][t[23].id])),s(T,"class","btn btn-ghost btn-sm svelte-1hijv9g"),T.disabled=ne=!t[23].connected||!!t[2][t[23].id],s(N,"class","btn btn-ghost btn-sm svelte-1hijv9g"),s(U,"class","peer-actions svelte-1hijv9g"),s(n,"class","peer-row svelte-1hijv9g"),s(n,"role","listitem"),this.first=n},m(ue,te){H(ue,n,te),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(u,v),re&&re.m(u,null),l(n,g),l(n,h),l(h,b),l(n,k),l(n,S),l(S,P),l(P,R),l(P,w),l(P,L),l(S,D),l(S,J),l(n,f),l(n,q),ce.m(q,null),l(n,B),l(n,U),l(U,T),l(T,Y),l(U,x),l(U,N),l(N,K),l(n,O),I||(le=[F(h,"click",ye),F(h,"keydown",ke),F(T,"click",Ae),F(N,"click",Te)],I=!0)},p(ue,te){t=ue,te&16&&o!==(o=bs(t[26]+1)+"")&&j(r,o),te&16&&d!==(d=(t[23].nickname||t[23].id)+"")&&j(_,d),te&16&&(p=t[11](t[23].id)>0),p?re?re.p(t,te):(re=Wi(t),re.c(),re.m(u,null)):re&&(re.d(1),re=null),te&48&&C!==(C=(t[23].virtualIP||t[5].na)+"")&&j(b,C),te&48&&M!==(M=(t[23].connected&&t[23].path?t[12](t[23].path):t[5].path_unknown)+"")&&j(J,M),te&16&&V!==(V=t[13](t[23].path))&&s(S,"title",V),te&16&&Z(S,"live",t[24]==="live"),te&16&&Z(S,"fault",t[24]==="fault"),te&16&&Z(S,"idle",t[24]==="idle"),je===(je=ze(t))&&ce?ce.p(t,te):(ce.d(1),ce=je(t),ce&&(ce.c(),ce.m(q,null))),te&20&&Z(q,"probing",t[23].connected&&(t[23].ping<0||t[2][t[23].id])),te&32&&X!==(X=t[5].ping_peer+"")&&j(Y,X),te&20&&ne!==(ne=!t[23].connected||!!t[2][t[23].id])&&(T.disabled=ne),te&32&&A!==(A=t[5].chat+"")&&j(K,A)},d(ue){ue&&G(n),re&&re.d(),ce.d(),I=!1,Ne(le)}}}function Go(e){let t,n,i,o,r=e[5].channels+"",c,u,d,_=(e[1].room||e[5].peers_list)+"",v,p,g,h,C,b,k,S=e[5].col_ch+"",P,R,w,L=e[5].col_nickname+"",D,M,J,V=e[5].col_ip+"",f,q,B,U=e[5].col_path+"",T,X,Y,ne=e[5].col_ping+"",x,N,A,K,O,I,le,re,ye,ke=(e[6].nickname||e[5].you)+"",ze,je,ce,Ae=e[5].me+"",Te,ue,te,Ie=(e[1].virtualIP||e[5].na)+"",Pe,Re,ve,we=e[5].path_unknown+"",he,$,oe,Ze,De,pe,Le=[],et=new Map,se,de,z,ee=e[1].room&&Ri(e),be=e[0]==="relay"&&Oi(e),Ce=wt(e[4]);const qe=ie=>ie[23].id;for(let ie=0;ien(5,r=f)),_e(e,Ss,f=>n(15,c=f)),_e(e,We,f=>n(1,u=f)),_e(e,ps,f=>n(16,d=f)),_e(e,Be,f=>n(6,_=f));let{pathAggregate:v="disconnected"}=t,p={};function g(f){Ll.set({id:f.id,nickname:f.nickname||f.id}),hs("peer:"+f.id),Pt.set(!0)}function h(){Ll.set(null),hs("room:"+(u.room||"network")),Pt.set(!0)}async function C(f){if(f)try{await window.go.main.App.CopyText(f),ae(r.copied)}catch{}}async function b(f){if(!(!f?.id||!f.connected||p[f.id])){n(2,p={...p,[f.id]:!0});try{await window.go.main.App.PingPeer(f.id),ae(ge(r.ping_sent,{name:f.nickname||f.id}))}catch(q){ae(ge(r.error_ping,{err:q}),"error")}finally{setTimeout(()=>{const q={...p};delete q[f.id],n(2,p=q)},800)}}}function k(f){return c["peer:"+f]||0}function S(f){return f==="p2p"?r.path_p2p:f==="relay"?r.path_relay:f==="ws"?r.path_ws:r.path_unknown}function P(f){return f==="p2p"?r.path_p2p_tip:f==="relay"?r.path_relay_tip:f==="ws"?r.path_ws_tip:""}function R(f,q){(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),C(q))}const w=()=>C(u.virtualIP),L=f=>R(f,u.virtualIP),D=f=>C(f.virtualIP),M=(f,q)=>R(q,f.virtualIP),J=f=>b(f),V=f=>g(f);return e.$$set=f=>{"pathAggregate"in f&&n(0,v=f.pathAggregate)},e.$$.update=()=>{e.$$.dirty&65536&&n(4,i=[...d].sort((f,q)=>(f.nickname||"").localeCompare(q.nickname||""))),e.$$.dirty&32770&&n(3,o=c["room:"+(u.room||"network")]||0)},[v,u,p,o,i,r,_,g,h,C,b,k,S,P,R,c,d,w,L,D,M,J,V]}class Xo extends pt{constructor(t){super(),_t(this,t,Yo,Go,ot,{pathAggregate:0})}}function Zo(e){let t,n,i,o,r,c,u,d,_,v,p,g;return{c(){t=a("button"),n=a("span"),i=m(),o=a("span"),o.innerHTML='',r=m(),c=a("span"),c.innerHTML='',u=m(),d=a("span"),s(n,"class","theme-switch-track"),s(o,"class","theme-switch-icon theme-switch-sun"),s(o,"aria-hidden","true"),s(c,"class","theme-switch-icon theme-switch-moon"),s(c,"aria-hidden","true"),s(d,"class","theme-switch-thumb"),s(t,"type","button"),s(t,"class","theme-switch"),s(t,"aria-label",_=e[1]?e[2].theme_light:e[2].theme_dark),s(t,"title",v=e[2].theme),Z(t,"is-dark",e[1]),Z(t,"is-chrome",e[0])},m(h,C){H(h,t,C),l(t,n),l(t,i),l(t,o),l(t,r),l(t,c),l(t,u),l(t,d),p||(g=F(t,"click",e[3]),p=!0)},p(h,[C]){C&6&&_!==(_=h[1]?h[2].theme_light:h[2].theme_dark)&&s(t,"aria-label",_),C&4&&v!==(v=h[2].theme)&&s(t,"title",v),C&2&&Z(t,"is-dark",h[1]),C&1&&Z(t,"is-chrome",h[0])},i:Ee,o:Ee,d(h){h&&G(t),p=!1,g()}}}function Qo(e,t,n){let i,o,r;_e(e,Be,_=>n(4,o=_)),_e(e,mt,_=>n(2,r=_));let{chrome:c=!1}=t;async function u(_){Be.update(v=>({...v,theme:_}));try{const v=nn(Be);await window.go.main.App.SaveSettings({...v,theme:_})}catch{}}function d(){u(i?"light":"dark")}return e.$$set=_=>{"chrome"in _&&n(0,c=_.chrome)},e.$$.update=()=>{e.$$.dirty&16&&n(1,i=(o.theme||"dark")!=="light")},[c,i,r,d,o]}class ro extends pt{constructor(t){super(),_t(this,t,Qo,Zo,ot,{chrome:0})}}function $o(e){let t,n,i,o,r=e[0].network+"",c,u,d,_=(e[6].room||e[0].network)+"",v,p,g,h,C,b=e[0].virtual_ip+"",k,S,P,R=(e[6].virtualIP||e[0].na)+"",w,L,D,M,J,V,f=e[0].col_path+"",q,B,U,T,X,Y,ne,x,N,A,K,O,I,le,re,ye=e[0].peers_list+"",ke,ze,je,ce=e[6].peerCount+"",Ae,Te,ue,te,Ie,Pe,Re=e[0].settings+"",ve,we,he,$=e[0].disconnect+"",oe,Ze,De,pe,Le,et;return te=new ro({props:{chrome:!0}}),De=new Ps({props:{open:e[1],message:e[0].confirm_disconnect,confirmLabel:e[0].disconnect,danger:!0,onConfirm:e[11],onCancel:e[14]}}),{c(){t=a("header"),n=a("div"),i=a("button"),o=a("span"),c=y(r),u=m(),d=a("span"),v=y(_),g=m(),h=a("button"),C=a("span"),k=y(b),S=m(),P=a("span"),w=y(R),M=m(),J=a("div"),V=a("span"),q=y(f),B=m(),U=a("span"),T=a("span"),X=a("span"),Y=m(),ne=a("span"),x=m(),N=a("span"),A=m(),K=a("span"),O=y(e[2]),I=m(),le=a("div"),re=a("span"),ke=y(ye),ze=m(),je=a("span"),Ae=y(ce),Te=m(),ue=a("div"),xe(te.$$.fragment),Ie=m(),Pe=a("button"),ve=y(Re),we=m(),he=a("button"),oe=y($),Ze=m(),xe(De.$$.fragment),s(o,"class","label-track"),s(d,"class","cell-value svelte-w9vfv6"),s(i,"type","button"),s(i,"class","cell room svelte-w9vfv6"),s(i,"title",p=e[0].network),s(C,"class","label-track"),s(P,"class","cell-value mono svelte-w9vfv6"),s(h,"type","button"),s(h,"class","cell vip svelte-w9vfv6"),h.disabled=L=!e[6].virtualIP,s(h,"title",D=e[0].virtual_ip),s(V,"class","label-track"),s(X,"class","led live"),Z(X,"on",e[5]),s(ne,"class","led fault"),Z(ne,"on",e[4]),s(N,"class","led idle"),Z(N,"on",e[3]),s(T,"class","leds svelte-w9vfv6"),s(T,"aria-hidden","true"),s(K,"class","cell-value svelte-w9vfv6"),Z(K,"live",e[5]),Z(K,"fault",e[4]),s(U,"class","path-row svelte-w9vfv6"),s(J,"class","cell path svelte-w9vfv6"),s(J,"role","status"),s(J,"aria-live","polite"),s(re,"class","label-track"),s(je,"class","cell-value mono svelte-w9vfv6"),s(le,"class","cell peers svelte-w9vfv6"),s(Pe,"type","button"),s(Pe,"class","bezel"),Z(Pe,"active",e[7]==="settings"),s(he,"type","button"),s(he,"class","bezel"),s(ue,"class","actions svelte-w9vfv6"),s(n,"class","topbar-row svelte-w9vfv6"),s(t,"class","topbar svelte-w9vfv6")},m(se,de){H(se,t,de),l(t,n),l(n,i),l(i,o),l(o,c),l(i,u),l(i,d),l(d,v),l(n,g),l(n,h),l(h,C),l(C,k),l(h,S),l(h,P),l(P,w),l(n,M),l(n,J),l(J,V),l(V,q),l(J,B),l(J,U),l(U,T),l(T,X),l(T,Y),l(T,ne),l(T,x),l(T,N),l(U,A),l(U,K),l(K,O),l(n,I),l(n,le),l(le,re),l(re,ke),l(le,ze),l(le,je),l(je,Ae),l(n,Te),l(n,ue),Ve(te,ue,null),l(ue,Ie),l(ue,Pe),l(Pe,ve),l(ue,we),l(ue,he),l(he,oe),H(se,Ze,de),Ve(De,se,de),pe=!0,Le||(et=[F(i,"click",e[8]),F(h,"click",e[10]),F(Pe,"click",e[9]),F(he,"click",e[13])],Le=!0)},p(se,[de]){(!pe||de&1)&&r!==(r=se[0].network+"")&&j(c,r),(!pe||de&65)&&_!==(_=(se[6].room||se[0].network)+"")&&j(v,_),(!pe||de&1&&p!==(p=se[0].network))&&s(i,"title",p),(!pe||de&1)&&b!==(b=se[0].virtual_ip+"")&&j(k,b),(!pe||de&65)&&R!==(R=(se[6].virtualIP||se[0].na)+"")&&j(w,R),(!pe||de&64&&L!==(L=!se[6].virtualIP))&&(h.disabled=L),(!pe||de&1&&D!==(D=se[0].virtual_ip))&&s(h,"title",D),(!pe||de&1)&&f!==(f=se[0].col_path+"")&&j(q,f),(!pe||de&32)&&Z(X,"on",se[5]),(!pe||de&16)&&Z(ne,"on",se[4]),(!pe||de&8)&&Z(N,"on",se[3]),(!pe||de&4)&&j(O,se[2]),(!pe||de&32)&&Z(K,"live",se[5]),(!pe||de&16)&&Z(K,"fault",se[4]),(!pe||de&1)&&ye!==(ye=se[0].peers_list+"")&&j(ke,ye),(!pe||de&64)&&ce!==(ce=se[6].peerCount+"")&&j(Ae,ce),(!pe||de&1)&&Re!==(Re=se[0].settings+"")&&j(ve,Re),(!pe||de&128)&&Z(Pe,"active",se[7]==="settings"),(!pe||de&1)&&$!==($=se[0].disconnect+"")&&j(oe,$);const z={};de&2&&(z.open=se[1]),de&1&&(z.message=se[0].confirm_disconnect),de&1&&(z.confirmLabel=se[0].disconnect),de&2&&(z.onCancel=se[14]),De.$set(z)},i(se){pe||(Oe(te.$$.fragment,se),Oe(De.$$.fragment,se),pe=!0)},o(se){Ge(te.$$.fragment,se),Ge(De.$$.fragment,se),pe=!1},d(se){se&&(G(t),G(Ze)),Ye(te),Ye(De,se),Le=!1,Ne(et)}}}function xo(e,t,n){let i,o,r,c,u,d,_;_e(e,mt,P=>n(0,u=P)),_e(e,We,P=>n(6,d=P)),_e(e,Ue,P=>n(7,_=P));let{pathAggregate:v="disconnected"}=t;function p(){Ue.set("network")}function g(){Ue.set(_==="settings"?"network":"settings")}async function h(){if(d.virtualIP)try{await window.go.main.App.CopyText(d.virtualIP),ae(u.copied)}catch{}}let C=!1;async function b(){n(1,C=!1);try{await window.go.main.App.Disconnect(),We.set({connected:!1,reconnecting:!1,server:"",room:"",virtualIP:"",peerCount:0,isOwner:!1,phase:"idle"}),Pt.set(!1),Ue.set("connect"),ae(u.notif_disconnected)}catch(P){ae(ge(u.error_disconnect,{err:P}),"error")}}const k=()=>n(1,C=!0),S=()=>n(1,C=!1);return e.$$set=P=>{"pathAggregate"in P&&n(12,v=P.pathAggregate)},e.$$.update=()=>{e.$$.dirty&4096&&n(5,i=v==="direct"),e.$$.dirty&4096&&n(4,o=v==="relay"||v==="reconnecting"),e.$$.dirty&4096&&n(3,r=v==="disconnected"),e.$$.dirty&4097&&n(2,c=v==="reconnecting"?u.status_reconnecting:v==="relay"?u.status_relay_degraded:v==="direct"?u.status_direct:u.status_disconnected)},[u,C,c,r,o,i,d,_,p,g,h,b,v,k,S]}class ea extends pt{constructor(t){super(),_t(this,t,xo,$o,ot,{pathAggregate:12})}}function ta(e){let t,n,i,o,r=e[0].server+"",c,u,d,_=e[1].server+"",v,p,g,h,C=e[0].virtual_ip+"",b,k,S,P=(e[1].virtualIP||e[0].na)+"",R,w,L,D=e[0].disconnect+"",M,J,V;function f(U,T){return U[1].reconnecting?sa:la}let q=f(e),B=q(e);return{c(){t=a("div"),B.c(),n=m(),i=a("div"),o=a("span"),c=y(r),u=m(),d=a("span"),v=y(_),p=m(),g=a("div"),h=a("span"),b=y(C),k=m(),S=a("span"),R=y(P),w=m(),L=a("button"),M=y(D),s(d,"class","info-value svelte-1br9j49"),s(i,"class","info-line svelte-1br9j49"),s(S,"class","info-value svelte-1br9j49"),s(g,"class","info-line svelte-1br9j49"),s(L,"class","disconnect-btn svelte-1br9j49"),s(t,"class","connected-info svelte-1br9j49")},m(U,T){H(U,t,T),B.m(t,null),l(t,n),l(t,i),l(i,o),l(o,c),l(i,u),l(i,d),l(d,v),l(t,p),l(t,g),l(g,h),l(h,b),l(g,k),l(g,S),l(S,R),l(t,w),l(t,L),l(L,M),J||(V=F(L,"click",e[12]),J=!0)},p(U,T){q===(q=f(U))&&B?B.p(U,T):(B.d(1),B=q(U),B&&(B.c(),B.m(t,n))),T&1&&r!==(r=U[0].server+"")&&j(c,r),T&2&&_!==(_=U[1].server+"")&&j(v,_),T&1&&C!==(C=U[0].virtual_ip+"")&&j(b,C),T&3&&P!==(P=(U[1].virtualIP||U[0].na)+"")&&j(R,P),T&1&&D!==(D=U[0].disconnect+"")&&j(M,D)},d(U){U&&G(t),B.d(),J=!1,V()}}}function na(e){let t,n,i,o=e[0].brand+"",r,c,u,d=e[0].tagline+"",_,v,p,g,h=e[0].server_addr+"",C,b,k,S,P,R,w,L,D,M=e[0].nickname+"",J,V,f,q,B,U,T,X,Y=(e[5]?e[0].connecting:e[0].connect)+"",ne,x,N,A,K,O=e[0].paste_invite+"",I,le,re,ye,ke=e[0].paste_invite+"",ze,je,ce,Ae,Te,ue,te=e[0].join+"",Ie,Pe,Re,ve=e[7].serverAddr&&Ki(e),we=e[7].nickname&&Ji(e),he=(e[5]||e[1].phase==="dialing"||e[1].phase==="auth")&&Bi(e);return{c(){t=a("div"),n=a("div"),i=a("h1"),r=y(o),c=m(),u=a("p"),_=y(d),v=m(),p=a("div"),g=a("label"),C=y(h),b=m(),k=a("input"),R=m(),ve&&ve.c(),w=m(),L=a("div"),D=a("label"),J=y(M),V=m(),f=a("input"),U=m(),we&&we.c(),T=m(),X=a("button"),ne=y(Y),x=m(),he&&he.c(),N=m(),A=a("details"),K=a("summary"),I=y(O),le=m(),re=a("div"),ye=a("label"),ze=y(ke),je=m(),ce=a("input"),Te=m(),ue=a("button"),Ie=y(te),s(i,"class","brand svelte-1br9j49"),s(u,"class","tagline svelte-1br9j49"),s(n,"class","brand-block svelte-1br9j49"),s(g,"for","server-input"),s(g,"class","svelte-1br9j49"),s(k,"id","server-input"),s(k,"type","text"),s(k,"placeholder","host:8080"),s(k,"aria-invalid",S=!!e[7].serverAddr),s(k,"aria-describedby",P=e[7].serverAddr?"server-err":void 0),s(k,"class","svelte-1br9j49"),Z(k,"invalid",e[7].serverAddr),s(p,"class","field svelte-1br9j49"),s(D,"for","nick-input"),s(D,"class","svelte-1br9j49"),s(f,"id","nick-input"),s(f,"type","text"),s(f,"placeholder","Player"),s(f,"aria-invalid",q=!!e[7].nickname),s(f,"aria-describedby",B=e[7].nickname?"nick-err":void 0),s(f,"class","svelte-1br9j49"),Z(f,"invalid",e[7].nickname),s(L,"class","field svelte-1br9j49"),s(X,"class","connect-btn svelte-1br9j49"),X.disabled=e[5],s(K,"class","svelte-1br9j49"),s(ye,"for","invite-input"),s(ye,"class","sr-only svelte-1br9j49"),s(ce,"id","invite-input"),s(ce,"type","text"),s(ce,"placeholder",Ae=e[0].invite_placeholder),s(ce,"class","svelte-1br9j49"),s(ue,"class","secondary-btn svelte-1br9j49"),ue.disabled=e[5],s(re,"class","invite-block svelte-1br9j49"),s(A,"class","invite-disclosure svelte-1br9j49"),s(t,"class","connect-form svelte-1br9j49")},m($,oe){H($,t,oe),l(t,n),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(t,v),l(t,p),l(p,g),l(g,C),l(p,b),l(p,k),fe(k,e[2]),l(p,R),ve&&ve.m(p,null),l(t,w),l(t,L),l(L,D),l(D,J),l(L,V),l(L,f),fe(f,e[3]),l(L,U),we&&we.m(L,null),l(t,T),l(t,X),l(X,ne),l(t,x),he&&he.m(t,null),l(t,N),l(t,A),l(A,K),l(K,I),l(A,le),l(A,re),l(re,ye),l(ye,ze),l(re,je),l(re,ce),fe(ce,e[4]),l(re,Te),l(re,ue),l(ue,Ie),A.open=e[6],Pe||(Re=[F(k,"input",e[13]),F(f,"input",e[14]),F(f,"keydown",e[11]),F(X,"click",e[9]),F(ce,"input",e[15]),F(ue,"click",e[10]),F(A,"toggle",e[16])],Pe=!0)},p($,oe){oe&1&&o!==(o=$[0].brand+"")&&j(r,o),oe&1&&d!==(d=$[0].tagline+"")&&j(_,d),oe&1&&h!==(h=$[0].server_addr+"")&&j(C,h),oe&128&&S!==(S=!!$[7].serverAddr)&&s(k,"aria-invalid",S),oe&128&&P!==(P=$[7].serverAddr?"server-err":void 0)&&s(k,"aria-describedby",P),oe&4&&k.value!==$[2]&&fe(k,$[2]),oe&128&&Z(k,"invalid",$[7].serverAddr),$[7].serverAddr?ve?ve.p($,oe):(ve=Ki($),ve.c(),ve.m(p,null)):ve&&(ve.d(1),ve=null),oe&1&&M!==(M=$[0].nickname+"")&&j(J,M),oe&128&&q!==(q=!!$[7].nickname)&&s(f,"aria-invalid",q),oe&128&&B!==(B=$[7].nickname?"nick-err":void 0)&&s(f,"aria-describedby",B),oe&8&&f.value!==$[3]&&fe(f,$[3]),oe&128&&Z(f,"invalid",$[7].nickname),$[7].nickname?we?we.p($,oe):(we=Ji($),we.c(),we.m(L,null)):we&&(we.d(1),we=null),oe&33&&Y!==(Y=($[5]?$[0].connecting:$[0].connect)+"")&&j(ne,Y),oe&32&&(X.disabled=$[5]),$[5]||$[1].phase==="dialing"||$[1].phase==="auth"?he?he.p($,oe):(he=Bi($),he.c(),he.m(t,N)):he&&(he.d(1),he=null),oe&1&&O!==(O=$[0].paste_invite+"")&&j(I,O),oe&1&&ke!==(ke=$[0].paste_invite+"")&&j(ze,ke),oe&1&&Ae!==(Ae=$[0].invite_placeholder)&&s(ce,"placeholder",Ae),oe&16&&ce.value!==$[4]&&fe(ce,$[4]),oe&1&&te!==(te=$[0].join+"")&&j(Ie,te),oe&32&&(ue.disabled=$[5]),oe&64&&(A.open=$[6])},d($){$&&G(t),ve&&ve.d(),we&&we.d(),he&&he.d(),Pe=!1,Ne(Re)}}}function la(e){let t,n,i,o,r=e[0].connected+"",c;return{c(){t=a("div"),n=a("span"),i=m(),o=a("span"),c=y(r),s(n,"class","sq sq-green svelte-1br9j49"),s(n,"aria-hidden","true"),s(t,"class","connected-line svelte-1br9j49"),s(t,"role","status")},m(u,d){H(u,t,d),l(t,n),l(t,i),l(t,o),l(o,c)},p(u,d){d&1&&r!==(r=u[0].connected+"")&&j(c,r)},d(u){u&&G(t)}}}function sa(e){let t,n,i,o,r=e[0].reconnecting+"",c;return{c(){t=a("div"),n=a("span"),i=m(),o=a("span"),c=y(r),s(n,"class","sq sq-warn svelte-1br9j49"),s(n,"aria-hidden","true"),s(t,"class","connected-line svelte-1br9j49"),s(t,"role","status")},m(u,d){H(u,t,d),l(t,n),l(t,i),l(t,o),l(o,c)},p(u,d){d&1&&r!==(r=u[0].reconnecting+"")&&j(c,r)},d(u){u&&G(t)}}}function Ki(e){let t,n=e[7].serverAddr+"",i;return{c(){t=a("span"),i=y(n),s(t,"id","server-err"),s(t,"class","field-error svelte-1br9j49"),s(t,"role","alert")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&128&&n!==(n=o[7].serverAddr+"")&&j(i,n)},d(o){o&&G(t)}}}function Ji(e){let t,n=e[7].nickname+"",i;return{c(){t=a("span"),i=y(n),s(t,"id","nick-err"),s(t,"class","field-error svelte-1br9j49"),s(t,"role","alert")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&128&&n!==(n=o[7].nickname+"")&&j(i,n)},d(o){o&&G(t)}}}function Bi(e){let t,n=(e[8]||e[0].connecting)+"",i;return{c(){t=a("div"),i=y(n),s(t,"class","phase svelte-1br9j49"),s(t,"role","status")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&257&&n!==(n=(o[8]||o[0].connecting)+"")&&j(i,n)},d(o){o&&G(t)}}}function ia(e){let t;function n(r,c){return r[1].connected?ta:na}let i=n(e),o=i(e);return{c(){t=a("div"),o.c(),s(t,"class","connect-view svelte-1br9j49")},m(r,c){H(r,t,c),o.m(t,null)},p(r,[c]){i===(i=n(r))&&o?o.p(r,c):(o.d(1),o=i(r),o&&(o.c(),o.m(t,null)))},i:Ee,o:Ee,d(r){r&&G(t),o.d()}}}function oa(e,t,n){let i,o,r,c;_e(e,mt,D=>n(0,o=D)),_e(e,We,D=>n(1,r=D)),_e(e,Be,D=>n(17,c=D));let u="",d="",_="",v=!1,p=!1,g={};Dl(async()=>{const D=await window.go.main.App.LoadConfig();D.serverAddr&&n(2,u=D.serverAddr),D.nickname&&n(3,d=D.nickname),D&&Be.set({...c,...D}),D.autoConnect&&D.serverAddr&&D.nickname&&C()});function h(){const D={};return u.trim()||(D.serverAddr=o.field_required),d.trim()||(D.nickname=o.field_required),n(7,g=D),Object.keys(D).length===0}async function C(){if(!v&&h()){n(5,v=!0),_n();try{const D=await window.go.main.App.Connect(u,d);We.set(D),Ue.set("network"),ae(ge(o.notif_connected,{addr:u})),n(7,g={})}catch(D){ae(ge(o.error_connect,{err:D}),"error")}finally{n(5,v=!1)}}}async function b(){if(_.trim()){_n();try{const D=await window.go.main.App.ParseInvite(_.trim());if(!D.server||!D.room){ae(o.error_invalid_invite,"error");return}if(n(2,u=D.server),!r.connected){if(!d.trim()){n(7,g={...g,nickname:o.field_required}),ae(o.notif_need_config,"error");return}n(5,v=!0);const M=await window.go.main.App.Connect(u,d);We.set(M),n(5,v=!1)}await window.go.main.App.JoinRoom(D.room,D.password||""),ae(ge(o.notif_joined,{name:D.room})),Ue.set("network")}catch(D){ae(ge(o.error_join,{err:D}),"error"),n(5,v=!1)}}}function k(D){D.key==="Enter"&&(D.preventDefault(),C())}async function S(){if(confirm(o.confirm_disconnect))try{await window.go.main.App.Disconnect(),We.set({connected:!1,reconnecting:!1,server:"",room:"",virtualIP:"",peerCount:0,isOwner:!1,phase:"idle"}),Ue.set("connect"),ae(o.notif_disconnected)}catch(D){ae(ge(o.error_disconnect,{err:D}),"error")}}function P(){u=this.value,n(2,u)}function R(){d=this.value,n(3,d)}function w(){_=this.value,n(4,_)}function L(){p=this.open,n(6,p)}return e.$$.update=()=>{e.$$.dirty&3&&n(8,i=r.phase==="dialing"?o.phase_dialing:r.phase==="auth"?o.phase_auth:r.phase==="ready"?o.phase_ready:r.phase==="error"?o.phase_error:"")},[o,r,u,d,_,v,p,g,i,C,b,k,S,P,R,w,L]}class aa extends pt{constructor(t){super(),_t(this,t,oa,ia,ot,{})}}function Gi(e,t,n){const i=e.slice();return i[23]=t[n],i[25]=n,i}function Hi(e){let t,n,i=e[0].no_messages+"",o,r,c,u=e[0].no_messages_desc+"",d;return{c(){t=a("div"),n=a("div"),o=y(i),r=m(),c=a("p"),d=y(u),s(n,"class","empty-label svelte-16e4bfd"),s(c,"class","empty-desc svelte-16e4bfd"),s(t,"class","empty svelte-16e4bfd")},m(_,v){H(_,t,v),l(t,n),l(n,o),l(t,r),l(t,c),l(c,d)},p(_,v){v&1&&i!==(i=_[0].no_messages+"")&&j(o,i),v&1&&u!==(u=_[0].no_messages_desc+"")&&j(d,u)},d(_){_&&G(t)}}}function Vi(e){let t,n=e[12](e[23].timestamp)+"",i;return{c(){t=a("div"),i=y(n),s(t,"class","date-sep svelte-16e4bfd")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&128&&n!==(n=o[12](o[23].timestamp)+"")&&j(i,n)},d(o){o&&G(t)}}}function ra(e){let t,n,i,o=new Date(e[23].timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+"",r,c,u,d=(e[23].isSelf?e[6].nickname||e[0].you_self:e[23].nickname)+"",_,v,p,g,h,C=e[23].message+"",b,k,S=e[23].status==="pending"&&Yi(),P=e[23].status==="failed"&&Xi(e);return{c(){t=a("div"),n=a("div"),i=a("span"),r=y(o),c=m(),u=a("span"),_=y(d),v=m(),S&&S.c(),p=m(),P&&P.c(),g=m(),h=a("div"),b=y(C),k=m(),s(i,"class","msg-time svelte-16e4bfd"),s(u,"class","msg-nick svelte-16e4bfd"),s(n,"class","msg-meta svelte-16e4bfd"),s(h,"class","msg-body svelte-16e4bfd"),s(t,"class","msg svelte-16e4bfd"),Z(t,"self",e[23].isSelf),Z(t,"failed",e[23].status==="failed")},m(R,w){H(R,t,w),l(t,n),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(n,v),S&&S.m(n,null),l(n,p),P&&P.m(n,null),l(t,g),l(t,h),l(h,b),l(t,k)},p(R,w){w&128&&o!==(o=new Date(R[23].timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+"")&&j(r,o),w&193&&d!==(d=(R[23].isSelf?R[6].nickname||R[0].you_self:R[23].nickname)+"")&&j(_,d),R[23].status==="pending"?S||(S=Yi(),S.c(),S.m(n,p)):S&&(S.d(1),S=null),R[23].status==="failed"?P?P.p(R,w):(P=Xi(R),P.c(),P.m(n,null)):P&&(P.d(1),P=null),w&128&&C!==(C=R[23].message+"")&&j(b,C),w&128&&Z(t,"self",R[23].isSelf),w&128&&Z(t,"failed",R[23].status==="failed")},d(R){R&&G(t),S&&S.d(),P&&P.d()}}}function ca(e){let t,n=e[23].message+"",i;return{c(){t=a("div"),i=y(n),s(t,"class","system-line svelte-16e4bfd")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&128&&n!==(n=o[23].message+"")&&j(i,n)},d(o){o&&G(t)}}}function Yi(e){let t;return{c(){t=a("span"),t.textContent="…",s(t,"class","msg-status")},m(n,i){H(n,t,i)},d(n){n&&G(t)}}}function Xi(e){let t,n=e[0].retry+"",i,o,r;function c(){return e[18](e[23])}return{c(){t=a("button"),i=y(n),s(t,"class","retry-btn svelte-16e4bfd")},m(u,d){H(u,t,d),l(t,i),o||(r=F(t,"click",c),o=!0)},p(u,d){e=u,d&1&&n!==(n=e[0].retry+"")&&j(i,n)},d(u){u&&G(t),o=!1,r()}}}function Zi(e,t){let n,i=Qi(t[23],t[25],t[7]),o,r,c=i&&Vi(t);function u(v,p){return v[23].system?ca:ra}let d=u(t),_=d(t);return{key:e,first:null,c(){n=Al(),c&&c.c(),o=m(),_.c(),r=Al(),this.first=n},m(v,p){H(v,n,p),c&&c.m(v,p),H(v,o,p),_.m(v,p),H(v,r,p)},p(v,p){t=v,p&128&&(i=Qi(t[23],t[25],t[7])),i?c?c.p(t,p):(c=Vi(t),c.c(),c.m(o.parentNode,o)):c&&(c.d(1),c=null),d===(d=u(t))&&_?_.p(t,p):(_.d(1),_=d(t),_&&(_.c(),_.m(r.parentNode,r)))},d(v){v&&(G(n),G(o),G(r)),c&&c.d(v),_.d(v)}}}function ua(e){let t,n,i,o,r=e[0].chat+"",c,u,d,_,v,p,g=e[0].close_chat+"",h,C,b,k,S=[],P=new Map,R,w,L,D,M,J,V,f,q=e[0].send+"",B,U,T,X,Y=e[7].length===0&&Hi(e),ne=wt(e[7]);const x=N=>N[23].id;for(let N=0;Nn(15,r=f)),_e(e,mt,f=>n(0,c=f)),_e(e,Ll,f=>n(16,u=f)),_e(e,Be,f=>n(6,d=f)),_e(e,Pt,f=>n(17,_=f)),_e(e,Lo,f=>n(7,v=f));let p="",g,h,C=!0;_o(()=>{g&&C&&n(2,g.scrollTop=g.scrollHeight,g)});function b(){if(!g)return;C=g.scrollHeight-g.scrollTop-g.clientHeight<60}async function k(){const f=p.trim();if(!f)return;if(!r.connected){ae(c.error_not_connected,"error");return}if(!r.room){ae(c.send_disabled_no_room,"error");return}let q=f;const B=[...f];B.length>1e3&&(q=B.slice(0,1e3).join(""),ae(c.msg_truncated,"info")),n(1,p=""),h&&n(3,h.style.height="auto",h);const U="local_"+Date.now()+"_"+Math.random().toString(36).slice(2,7);Cs(U,d.nickname||c.you_self,q,!0,"pending");try{u&&u.id?await window.go.main.App.SendChat(u.id,q):await window.go.main.App.BroadcastChat(q),cn(U,"sent")}catch(T){cn(U,"failed"),ae(ge(c.error_send,{err:T}),"error")}}async function S(f){cn(f.id,"pending");try{u&&u.id?await window.go.main.App.SendChat(u.id,f.message):await window.go.main.App.BroadcastChat(f.message),cn(f.id,"sent")}catch(q){cn(f.id,"failed"),ae(ge(c.error_send,{err:q}),"error")}}function P(f){f.key==="Enter"&&!f.shiftKey&&(f.preventDefault(),k())}function R(f){const q=new Date(f),B=new Date,U=new Date(B.getFullYear(),B.getMonth(),B.getDate()),T=new Date(U-864e5),X=new Date(q.getFullYear(),q.getMonth(),q.getDate());return X.getTime()===U.getTime()?c.today:X.getTime()===T.getTime()?c.yesterday:q.toLocaleDateString([],{weekday:"long",month:"short",day:"numeric"})}function w(){h&&(n(3,h.style.height="auto",h),n(3,h.style.height=Math.min(h.scrollHeight,120)+"px",h))}function L(){Pt.set(!1)}const D=f=>S(f);function M(f){sn[f?"unshift":"push"](()=>{g=f,n(2,g)})}function J(f){sn[f?"unshift":"push"](()=>{h=f,n(3,h)})}function V(){p=this.value,n(1,p)}return e.$$.update=()=>{e.$$.dirty&131072&&_&&hs(pn()),e.$$.dirty&98305&&n(5,i=u?ge(c.chat_with,{name:u.nickname}):ge(c.room_chat_title,{room:r.room||c.network})),e.$$.dirty&32768&&n(4,o=r.connected&&!!r.room)},[c,p,g,h,o,i,d,v,b,k,S,P,R,w,L,r,u,_,D,M,J,V]}class fa extends pt{constructor(t){super(),_t(this,t,da,ua,ot,{})}}function $i(e){let t,n=e[9].notif_reconnect_required+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","reconnect-banner svelte-1wpqlpo"),s(t,"role","status")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&512&&n!==(n=o[9].notif_reconnect_required+"")&&j(i,n)},d(o){o&&G(t)}}}function xi(e){let t,n=e[9].apply_update+"",i,o,r;return{c(){t=a("button"),i=y(n),s(t,"class","btn btn-cta"),s(t,"type","button"),t.disabled=e[3]},m(c,u){H(c,t,u),l(t,i),o||(r=F(t,"click",e[12]),o=!0)},p(c,u){u[0]&512&&n!==(n=c[9].apply_update+"")&&j(i,n),u[0]&8&&(t.disabled=c[3])},d(c){c&&G(t),o=!1,r()}}}function _a(e){let t,n=e[9].update_failed+"",i,o,r;return{c(){t=a("p"),i=y(n),o=y(": "),r=y(e[6]),s(t,"class","hint reconnect-hint")},m(c,u){H(c,t,u),l(t,i),l(t,o),l(t,r)},p(c,u){u[0]&512&&n!==(n=c[9].update_failed+"")&&j(i,n),u[0]&64&&j(r,c[6])},d(c){c&&G(t)}}}function pa(e){let t,n=e[9].update_downloading+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","hint")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&512&&n!==(n=o[9].update_downloading+"")&&j(i,n)},d(o){o&&G(t)}}}function ma(e){let t,n=ge(e[9].update_available,{v:e[5]})+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","hint")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&544&&n!==(n=ge(o[9].update_available,{v:o[5]})+"")&&j(i,n)},d(o){o&&G(t)}}}function va(e){let t,n=e[9].update_latest+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","hint")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&512&&n!==(n=o[9].update_latest+"")&&j(i,n)},d(o){o&&G(t)}}}function ha(e){let t,n=e[9].update_checking+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","hint")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&512&&n!==(n=o[9].update_checking+"")&&j(i,n)},d(o){o&&G(t)}}}function ga(e){let t,n,i,o,r=e[9].settings+"",c,u,d,_=e[9].settings_title+"",v,p,g,h,C,b,k,S,P,R,w,L,D,M,J=e[9].section_connection+"",V,f,q,B,U,T,X,Y,ne=e[9].server_addr+"",x,N,A,K,O,I,le=e[9].nickname+"",re,ye,ke,ze,je,ce,Ae=e[9].server_token+"",Te,ue,te,Ie,Pe,Re,ve=e[9].reconnect_apply+"",we,he,$,oe,Ze,De,pe,Le=e[9].auto_connect+"",et,se,de,z=e[9].auto_connect_desc+"",ee,be,Ce,qe,Me,ie,me,He=e[9].auto_join+"",Il,Ls,mn,vn=e[9].auto_join_desc+"",Ml,Ds,Lt,hn,tt,kt,Ns,gn,bn=e[9].section_network+"",Tl,wn,zs,Dt,kn,Se,yn,jn=e[9].advanced_warn+"",Rl,Is,Nt,Sn,Cn=e[9].connection_mode+"",ql,Ms,at,zt,An=e[9].connection_direct+"",Ol,It,En=e[9].connection_relay+"",Ul,Ts,Pn,Ln=e[9].connection_mode_desc+"",Wl,Rs,Mt,Dn,Nn=e[9].mtu+"",Fl,qs,Qe,Os,zn,In=e[9].mtu_desc+"",Kl,Us,Tt,Mn,Tn=e[9].dns_server+"",Jl,Ws,rt,Fs,Rn,qn=e[9].dns_desc+"",Bl,Ks,Rt,On,Un=e[9].socks5+"",Gl,Js,nt,Wn,Bs,Fn,Kn=e[9].socks5_desc+"",Hl,Gs,qt,Jn,Bn=e[9].stun_server+"",Vl,Hs,ct,Vs,Gn,Hn=e[9].stun_desc+"",Yl,Ys,Ot,Vn,lt,yt,Xs,Yn,Xn=e[9].section_system+"",Xl,Zn,Zs,Ut,Qn,ut,Wt,jt,Qs,$n,xn=e[9].start_windows+"",Zl,$s,dt,el,tl=e[9].updates+"",Ql,xs,vt,nl=e[9].check_updates+"",$l,ei,ti,ni,Ft,ll,st,St,li,sl,il=e[9].section_appearance+"",xl,ol,si,Kt,al,it,Jt,rl,cl=e[9].ui_scale+"",es,ii,Bt,$e,ul,oi,on,dl=(e[0].uiScale??100)+"",ts,ai,ri,fl,_l=e[9].ui_scale_desc+"",ns,ci,Gt,pl,ml=e[9].theme+"",ls,ui,Ht,di,Vt,vl,hl=e[9].language+"",ss,fi,ft,Yt,gl=e[9].language_en+"",is,Xt,bl=e[9].language_ru+"",os,Zt,wl=e[9].language_zh+"",as,_i,pi,Qt,an,kl=e[9].reset+"",rs,mi,rn,yl=e[9].save+"",cs,us,Ct,Q,ds,vi,Fe=e[2]&&$i(e),Ke=e[4]==="available"&&xi(e);function hi(E,W){if(E[4]==="checking")return ha;if(E[4]==="latest")return va;if(E[4]==="available")return ma;if(E[4]==="downloading")return pa;if(E[4]==="error"&&E[6])return _a}let $t=hi(e),Je=$t&&$t(e);return Ht=new ro({}),Ct=new Ps({props:{open:!!e[7],message:e[7]?.message||"",confirmLabel:e[7]?.confirmLabel||e[9].save,danger:!!e[7]?.danger,onConfirm:e[34],onCancel:e[35]}}),{c(){t=a("div"),n=a("div"),i=a("div"),o=a("span"),c=y(r),u=m(),d=a("h2"),v=y(_),p=m(),g=a("span"),h=y("v"),C=y(e[1]),b=m(),k=a("div"),Fe&&Fe.c(),S=m(),P=a("article"),R=a("div"),w=a("button"),L=a("span"),L.textContent="▼",D=m(),M=a("span"),V=y(J),q=m(),B=a("div"),U=a("div"),T=a("div"),X=a("div"),Y=a("label"),x=y(ne),N=m(),A=a("input"),K=m(),O=a("div"),I=a("label"),re=y(le),ye=m(),ke=a("input"),ze=m(),je=a("div"),ce=a("label"),Te=y(Ae),ue=m(),te=a("input"),Pe=m(),Re=a("p"),we=y(ve),he=m(),$=a("label"),oe=a("input"),Ze=m(),De=a("span"),pe=a("span"),et=y(Le),se=m(),de=a("span"),ee=y(z),be=m(),Ce=a("label"),qe=a("input"),Me=m(),ie=a("span"),me=a("span"),Il=y(He),Ls=m(),mn=a("span"),Ml=y(vn),Ds=m(),Lt=a("article"),hn=a("div"),tt=a("button"),kt=a("span"),kt.textContent="▼",Ns=m(),gn=a("span"),Tl=y(bn),zs=m(),Dt=a("div"),kn=a("div"),Se=a("div"),yn=a("p"),Rl=y(jn),Is=m(),Nt=a("div"),Sn=a("label"),ql=y(Cn),Ms=m(),at=a("select"),zt=a("option"),Ol=y(An),It=a("option"),Ul=y(En),Ts=m(),Pn=a("p"),Wl=y(Ln),Rs=m(),Mt=a("div"),Dn=a("label"),Fl=y(Nn),qs=m(),Qe=a("input"),Os=m(),zn=a("p"),Kl=y(In),Us=m(),Tt=a("div"),Mn=a("label"),Jl=y(Tn),Ws=m(),rt=a("input"),Fs=m(),Rn=a("p"),Bl=y(qn),Ks=m(),Rt=a("div"),On=a("label"),Gl=y(Un),Js=m(),nt=a("input"),Bs=m(),Fn=a("p"),Hl=y(Kn),Gs=m(),qt=a("div"),Jn=a("label"),Vl=y(Bn),Hs=m(),ct=a("input"),Vs=m(),Gn=a("p"),Yl=y(Hn),Ys=m(),Ot=a("article"),Vn=a("div"),lt=a("button"),yt=a("span"),yt.textContent="▼",Xs=m(),Yn=a("span"),Xl=y(Xn),Zs=m(),Ut=a("div"),Qn=a("div"),ut=a("div"),Wt=a("label"),jt=a("input"),Qs=m(),$n=a("span"),Zl=y(xn),$s=m(),dt=a("div"),el=a("span"),Ql=y(tl),xs=m(),vt=a("button"),$l=y(nl),ei=m(),Ke&&Ke.c(),ti=m(),Je&&Je.c(),ni=m(),Ft=a("article"),ll=a("div"),st=a("button"),St=a("span"),St.textContent="▼",li=m(),sl=a("span"),xl=y(il),si=m(),Kt=a("div"),al=a("div"),it=a("div"),Jt=a("div"),rl=a("label"),es=y(cl),ii=m(),Bt=a("div"),$e=a("input"),oi=m(),on=a("span"),ts=y(dl),ai=y("%"),ri=m(),fl=a("p"),ns=y(_l),ci=m(),Gt=a("div"),pl=a("span"),ls=y(ml),ui=m(),xe(Ht.$$.fragment),di=m(),Vt=a("div"),vl=a("label"),ss=y(hl),fi=m(),ft=a("select"),Yt=a("option"),is=y(gl),Xt=a("option"),os=y(bl),Zt=a("option"),as=y(wl),pi=m(),Qt=a("div"),an=a("button"),rs=y(kl),mi=m(),rn=a("button"),cs=y(yl),us=m(),xe(Ct.$$.fragment),s(o,"class","label-track"),s(d,"class","svelte-1wpqlpo"),s(g,"class","ver svelte-1wpqlpo"),s(n,"class","section-head svelte-1wpqlpo"),s(L,"class","collapse-chevron"),s(L,"aria-hidden","true"),Z(L,"collapsed",!e[8].connection),s(M,"class","card-title"),s(w,"type","button"),s(w,"class","card-disclosure"),s(w,"aria-expanded",f=e[8].connection),s(R,"class","card-head"),s(Y,"for","cfg-server"),s(A,"id","cfg-server"),s(A,"type","text"),s(A,"placeholder","vps.example.com:8080"),s(X,"class","field"),s(I,"for","cfg-nick"),s(ke,"id","cfg-nick"),s(ke,"type","text"),s(ke,"placeholder","Your nickname"),s(O,"class","field"),s(ce,"for","cfg-token"),s(te,"id","cfg-token"),s(te,"type","password"),s(te,"placeholder",Ie=e[9].server_token_desc),s(je,"class","field"),s(Re,"class","hint reconnect-hint"),s(oe,"type","checkbox"),s(oe,"class","svelte-1wpqlpo"),s(pe,"class","toggle-title svelte-1wpqlpo"),s(de,"class","toggle-label svelte-1wpqlpo"),s($,"class","toggle-row svelte-1wpqlpo"),s(qe,"type","checkbox"),s(qe,"class","svelte-1wpqlpo"),s(me,"class","toggle-title svelte-1wpqlpo"),s(mn,"class","toggle-label svelte-1wpqlpo"),s(Ce,"class","toggle-row svelte-1wpqlpo"),s(T,"class","card-body-pad"),s(U,"class","card-body-inner"),s(B,"class","card-body"),Z(B,"collapsed",!e[8].connection),s(P,"class","card"),s(kt,"class","collapse-chevron"),s(kt,"aria-hidden","true"),Z(kt,"collapsed",!e[8].network),s(gn,"class","card-title"),s(tt,"type","button"),s(tt,"class","card-disclosure"),s(tt,"aria-expanded",wn=e[8].network),s(hn,"class","card-head"),s(yn,"class","hint"),s(Sn,"for","cfg-conn"),zt.__value="direct",fe(zt,zt.__value),It.__value="relay",fe(It,It.__value),s(at,"id","cfg-conn"),e[0].connectionMode===void 0&&El(()=>e[26].call(at)),s(Nt,"class","field"),s(Pn,"class","hint"),s(Dn,"for","cfg-mtu"),s(Qe,"id","cfg-mtu"),s(Qe,"type","number"),s(Qe,"min","576"),s(Qe,"max","9000"),s(Qe,"placeholder","1500"),s(Mt,"class","field"),s(zn,"class","hint"),s(Mn,"for","cfg-dns"),s(rt,"id","cfg-dns"),s(rt,"type","text"),s(rt,"placeholder","system default"),s(Tt,"class","field"),s(Rn,"class","hint"),s(On,"for","cfg-socks"),s(nt,"id","cfg-socks"),s(nt,"type","text"),s(nt,"placeholder",Wn=e[9].socks5_placeholder),s(Rt,"class","field"),s(Fn,"class","hint reconnect-hint"),s(Jn,"for","cfg-stun"),s(ct,"id","cfg-stun"),s(ct,"type","text"),s(ct,"placeholder","stun.l.google.com:19302"),s(qt,"class","field"),s(Gn,"class","hint reconnect-hint"),s(Se,"class","card-body-pad"),s(kn,"class","card-body-inner"),s(Dt,"class","card-body"),Z(Dt,"collapsed",!e[8].network),s(Lt,"class","card"),s(yt,"class","collapse-chevron"),s(yt,"aria-hidden","true"),Z(yt,"collapsed",!e[8].system),s(Yn,"class","card-title"),s(lt,"type","button"),s(lt,"class","card-disclosure"),s(lt,"aria-expanded",Zn=e[8].system),s(Vn,"class","card-head"),s(jt,"type","checkbox"),s(jt,"class","svelte-1wpqlpo"),s($n,"class","toggle-title svelte-1wpqlpo"),s(Wt,"class","toggle-row svelte-1wpqlpo"),s(el,"class","toggle-title svelte-1wpqlpo"),s(vt,"class","btn btn-ghost"),s(vt,"type","button"),vt.disabled=e[3],s(dt,"class","update-row svelte-1wpqlpo"),s(ut,"class","card-body-pad"),s(Qn,"class","card-body-inner"),s(Ut,"class","card-body"),Z(Ut,"collapsed",!e[8].system),s(Ot,"class","card"),s(St,"class","collapse-chevron"),s(St,"aria-hidden","true"),Z(St,"collapsed",!e[8].appearance),s(sl,"class","card-title"),s(st,"type","button"),s(st,"class","card-disclosure"),s(st,"aria-expanded",ol=e[8].appearance),s(ll,"class","card-head"),s(rl,"for","cfg-scale"),s($e,"id","cfg-scale"),s($e,"type","range"),s($e,"min","75"),s($e,"max","150"),s($e,"step","5"),$e.value=ul=e[0].uiScale??100,s($e,"class","svelte-1wpqlpo"),s(on,"class","scale-value svelte-1wpqlpo"),s(Bt,"class","scale-row svelte-1wpqlpo"),s(Jt,"class","field"),s(fl,"class","hint"),s(pl,"class","toggle-title svelte-1wpqlpo"),s(Gt,"class","theme-row svelte-1wpqlpo"),s(vl,"for","cfg-lang"),Yt.__value="en",fe(Yt,Yt.__value),Xt.__value="ru",fe(Xt,Xt.__value),Zt.__value="zh",fe(Zt,Zt.__value),s(ft,"id","cfg-lang"),s(Vt,"class","field"),s(it,"class","card-body-pad"),s(al,"class","card-body-inner"),s(Kt,"class","card-body"),Z(Kt,"collapsed",!e[8].appearance),s(Ft,"class","card"),s(k,"class","settings-content svelte-1wpqlpo"),s(an,"class","btn btn-ghost"),s(rn,"class","btn btn-cta"),s(Qt,"class","commit-plate svelte-1wpqlpo"),s(t,"class","settings-view svelte-1wpqlpo")},m(E,W){H(E,t,W),l(t,n),l(n,i),l(i,o),l(o,c),l(i,u),l(i,d),l(d,v),l(n,p),l(n,g),l(g,h),l(g,C),l(t,b),l(t,k),Fe&&Fe.m(k,null),l(k,S),l(k,P),l(P,R),l(R,w),l(w,L),l(w,D),l(w,M),l(M,V),l(P,q),l(P,B),l(B,U),l(U,T),l(T,X),l(X,Y),l(Y,x),l(X,N),l(X,A),fe(A,e[0].serverAddr),l(T,K),l(T,O),l(O,I),l(I,re),l(O,ye),l(O,ke),fe(ke,e[0].nickname),l(T,ze),l(T,je),l(je,ce),l(ce,Te),l(je,ue),l(je,te),fe(te,e[0].serverToken),l(T,Pe),l(T,Re),l(Re,we),l(T,he),l(T,$),l($,oe),oe.checked=e[0].autoConnect,l($,Ze),l($,De),l(De,pe),l(pe,et),l(De,se),l(De,de),l(de,ee),l(T,be),l(T,Ce),l(Ce,qe),qe.checked=e[0].autoJoinLastRoom,l(Ce,Me),l(Ce,ie),l(ie,me),l(me,Il),l(ie,Ls),l(ie,mn),l(mn,Ml),l(k,Ds),l(k,Lt),l(Lt,hn),l(hn,tt),l(tt,kt),l(tt,Ns),l(tt,gn),l(gn,Tl),l(Lt,zs),l(Lt,Dt),l(Dt,kn),l(kn,Se),l(Se,yn),l(yn,Rl),l(Se,Is),l(Se,Nt),l(Nt,Sn),l(Sn,ql),l(Nt,Ms),l(Nt,at),l(at,zt),l(zt,Ol),l(at,It),l(It,Ul),Sl(at,e[0].connectionMode,!0),l(Se,Ts),l(Se,Pn),l(Pn,Wl),l(Se,Rs),l(Se,Mt),l(Mt,Dn),l(Dn,Fl),l(Mt,qs),l(Mt,Qe),fe(Qe,e[0].mtu),l(Se,Os),l(Se,zn),l(zn,Kl),l(Se,Us),l(Se,Tt),l(Tt,Mn),l(Mn,Jl),l(Tt,Ws),l(Tt,rt),fe(rt,e[0].dnsServer),l(Se,Fs),l(Se,Rn),l(Rn,Bl),l(Se,Ks),l(Se,Rt),l(Rt,On),l(On,Gl),l(Rt,Js),l(Rt,nt),fe(nt,e[0].socks5Proxy),l(Se,Bs),l(Se,Fn),l(Fn,Hl),l(Se,Gs),l(Se,qt),l(qt,Jn),l(Jn,Vl),l(qt,Hs),l(qt,ct),fe(ct,e[0].stunServer),l(Se,Vs),l(Se,Gn),l(Gn,Yl),l(k,Ys),l(k,Ot),l(Ot,Vn),l(Vn,lt),l(lt,yt),l(lt,Xs),l(lt,Yn),l(Yn,Xl),l(Ot,Zs),l(Ot,Ut),l(Ut,Qn),l(Qn,ut),l(ut,Wt),l(Wt,jt),jt.checked=e[0].startWithWindows,l(Wt,Qs),l(Wt,$n),l($n,Zl),l(ut,$s),l(ut,dt),l(dt,el),l(el,Ql),l(dt,xs),l(dt,vt),l(vt,$l),l(dt,ei),Ke&&Ke.m(dt,null),l(ut,ti),Je&&Je.m(ut,null),l(k,ni),l(k,Ft),l(Ft,ll),l(ll,st),l(st,St),l(st,li),l(st,sl),l(sl,xl),l(Ft,si),l(Ft,Kt),l(Kt,al),l(al,it),l(it,Jt),l(Jt,rl),l(rl,es),l(Jt,ii),l(Jt,Bt),l(Bt,$e),l(Bt,oi),l(Bt,on),l(on,ts),l(on,ai),l(it,ri),l(it,fl),l(fl,ns),l(it,ci),l(it,Gt),l(Gt,pl),l(pl,ls),l(Gt,ui),Ve(Ht,Gt,null),l(it,di),l(it,Vt),l(Vt,vl),l(vl,ss),l(Vt,fi),l(Vt,ft),l(ft,Yt),l(Yt,is),l(ft,Xt),l(Xt,os),l(ft,Zt),l(Zt,as),Sl(ft,e[0].lang||e[10]),l(t,pi),l(t,Qt),l(Qt,an),l(an,rs),l(Qt,mi),l(Qt,rn),l(rn,cs),H(E,us,W),Ve(Ct,E,W),Q=!0,ds||(vi=[F(w,"click",e[19]),F(A,"input",e[20]),F(ke,"input",e[21]),F(te,"input",e[22]),F(oe,"change",e[23]),F(qe,"change",e[24]),F(tt,"click",e[25]),F(at,"change",e[26]),F(Qe,"input",e[27]),F(rt,"input",e[28]),F(nt,"input",e[29]),F(ct,"input",e[30]),F(lt,"click",e[31]),F(jt,"change",e[32]),F(vt,"click",e[11]),F(st,"click",e[33]),F($e,"input",e[15]),F(ft,"change",e[16]),F(an,"click",e[14]),F(rn,"click",e[13])],ds=!0)},p(E,W){(!Q||W[0]&512)&&r!==(r=E[9].settings+"")&&j(c,r),(!Q||W[0]&512)&&_!==(_=E[9].settings_title+"")&&j(v,_),(!Q||W[0]&2)&&j(C,E[1]),E[2]?Fe?Fe.p(E,W):(Fe=$i(E),Fe.c(),Fe.m(k,S)):Fe&&(Fe.d(1),Fe=null),(!Q||W[0]&256)&&Z(L,"collapsed",!E[8].connection),(!Q||W[0]&512)&&J!==(J=E[9].section_connection+"")&&j(V,J),(!Q||W[0]&256&&f!==(f=E[8].connection))&&s(w,"aria-expanded",f),(!Q||W[0]&512)&&ne!==(ne=E[9].server_addr+"")&&j(x,ne),W[0]&1&&A.value!==E[0].serverAddr&&fe(A,E[0].serverAddr),(!Q||W[0]&512)&&le!==(le=E[9].nickname+"")&&j(re,le),W[0]&1&&ke.value!==E[0].nickname&&fe(ke,E[0].nickname),(!Q||W[0]&512)&&Ae!==(Ae=E[9].server_token+"")&&j(Te,Ae),(!Q||W[0]&512&&Ie!==(Ie=E[9].server_token_desc))&&s(te,"placeholder",Ie),W[0]&1&&te.value!==E[0].serverToken&&fe(te,E[0].serverToken),(!Q||W[0]&512)&&ve!==(ve=E[9].reconnect_apply+"")&&j(we,ve),W[0]&1&&(oe.checked=E[0].autoConnect),(!Q||W[0]&512)&&Le!==(Le=E[9].auto_connect+"")&&j(et,Le),(!Q||W[0]&512)&&z!==(z=E[9].auto_connect_desc+"")&&j(ee,z),W[0]&1&&(qe.checked=E[0].autoJoinLastRoom),(!Q||W[0]&512)&&He!==(He=E[9].auto_join+"")&&j(Il,He),(!Q||W[0]&512)&&vn!==(vn=E[9].auto_join_desc+"")&&j(Ml,vn),(!Q||W[0]&256)&&Z(B,"collapsed",!E[8].connection),(!Q||W[0]&256)&&Z(kt,"collapsed",!E[8].network),(!Q||W[0]&512)&&bn!==(bn=E[9].section_network+"")&&j(Tl,bn),(!Q||W[0]&256&&wn!==(wn=E[8].network))&&s(tt,"aria-expanded",wn),(!Q||W[0]&512)&&jn!==(jn=E[9].advanced_warn+"")&&j(Rl,jn),(!Q||W[0]&512)&&Cn!==(Cn=E[9].connection_mode+"")&&j(ql,Cn),(!Q||W[0]&512)&&An!==(An=E[9].connection_direct+"")&&j(Ol,An),(!Q||W[0]&512)&&En!==(En=E[9].connection_relay+"")&&j(Ul,En),W[0]&1&&Sl(at,E[0].connectionMode),(!Q||W[0]&512)&&Ln!==(Ln=E[9].connection_mode_desc+"")&&j(Wl,Ln),(!Q||W[0]&512)&&Nn!==(Nn=E[9].mtu+"")&&j(Fl,Nn),W[0]&1&&io(Qe.value)!==E[0].mtu&&fe(Qe,E[0].mtu),(!Q||W[0]&512)&&In!==(In=E[9].mtu_desc+"")&&j(Kl,In),(!Q||W[0]&512)&&Tn!==(Tn=E[9].dns_server+"")&&j(Jl,Tn),W[0]&1&&rt.value!==E[0].dnsServer&&fe(rt,E[0].dnsServer),(!Q||W[0]&512)&&qn!==(qn=E[9].dns_desc+"")&&j(Bl,qn),(!Q||W[0]&512)&&Un!==(Un=E[9].socks5+"")&&j(Gl,Un),(!Q||W[0]&512&&Wn!==(Wn=E[9].socks5_placeholder))&&s(nt,"placeholder",Wn),W[0]&1&&nt.value!==E[0].socks5Proxy&&fe(nt,E[0].socks5Proxy),(!Q||W[0]&512)&&Kn!==(Kn=E[9].socks5_desc+"")&&j(Hl,Kn),(!Q||W[0]&512)&&Bn!==(Bn=E[9].stun_server+"")&&j(Vl,Bn),W[0]&1&&ct.value!==E[0].stunServer&&fe(ct,E[0].stunServer),(!Q||W[0]&512)&&Hn!==(Hn=E[9].stun_desc+"")&&j(Yl,Hn),(!Q||W[0]&256)&&Z(Dt,"collapsed",!E[8].network),(!Q||W[0]&256)&&Z(yt,"collapsed",!E[8].system),(!Q||W[0]&512)&&Xn!==(Xn=E[9].section_system+"")&&j(Xl,Xn),(!Q||W[0]&256&&Zn!==(Zn=E[8].system))&&s(lt,"aria-expanded",Zn),W[0]&1&&(jt.checked=E[0].startWithWindows),(!Q||W[0]&512)&&xn!==(xn=E[9].start_windows+"")&&j(Zl,xn),(!Q||W[0]&512)&&tl!==(tl=E[9].updates+"")&&j(Ql,tl),(!Q||W[0]&512)&&nl!==(nl=E[9].check_updates+"")&&j($l,nl),(!Q||W[0]&8)&&(vt.disabled=E[3]),E[4]==="available"?Ke?Ke.p(E,W):(Ke=xi(E),Ke.c(),Ke.m(dt,null)):Ke&&(Ke.d(1),Ke=null),$t===($t=hi(E))&&Je?Je.p(E,W):(Je&&Je.d(1),Je=$t&&$t(E),Je&&(Je.c(),Je.m(ut,null))),(!Q||W[0]&256)&&Z(Ut,"collapsed",!E[8].system),(!Q||W[0]&256)&&Z(St,"collapsed",!E[8].appearance),(!Q||W[0]&512)&&il!==(il=E[9].section_appearance+"")&&j(xl,il),(!Q||W[0]&256&&ol!==(ol=E[8].appearance))&&s(st,"aria-expanded",ol),(!Q||W[0]&512)&&cl!==(cl=E[9].ui_scale+"")&&j(es,cl),(!Q||W[0]&1&&ul!==(ul=E[0].uiScale??100))&&($e.value=ul),(!Q||W[0]&1)&&dl!==(dl=(E[0].uiScale??100)+"")&&j(ts,dl),(!Q||W[0]&512)&&_l!==(_l=E[9].ui_scale_desc+"")&&j(ns,_l),(!Q||W[0]&512)&&ml!==(ml=E[9].theme+"")&&j(ls,ml),(!Q||W[0]&512)&&hl!==(hl=E[9].language+"")&&j(ss,hl),(!Q||W[0]&512)&&gl!==(gl=E[9].language_en+"")&&j(is,gl),(!Q||W[0]&512)&&bl!==(bl=E[9].language_ru+"")&&j(os,bl),(!Q||W[0]&512)&&wl!==(wl=E[9].language_zh+"")&&j(as,wl),(!Q||W[0]&1025&&_i!==(_i=E[0].lang||E[10]))&&Sl(ft,E[0].lang||E[10]),(!Q||W[0]&256)&&Z(Kt,"collapsed",!E[8].appearance),(!Q||W[0]&512)&&kl!==(kl=E[9].reset+"")&&j(rs,kl),(!Q||W[0]&512)&&yl!==(yl=E[9].save+"")&&j(cs,yl);const At={};W[0]&128&&(At.open=!!E[7]),W[0]&128&&(At.message=E[7]?.message||""),W[0]&640&&(At.confirmLabel=E[7]?.confirmLabel||E[9].save),W[0]&128&&(At.danger=!!E[7]?.danger),W[0]&128&&(At.onConfirm=E[34]),W[0]&128&&(At.onCancel=E[35]),Ct.$set(At)},i(E){Q||(Oe(Ht.$$.fragment,E),Oe(Ct.$$.fragment,E),Q=!0)},o(E){Ge(Ht.$$.fragment,E),Ge(Ct.$$.fragment,E),Q=!1},d(E){E&&(G(t),G(us)),Fe&&Fe.d(),Ke&&Ke.d(),Je&&Je.d(),Ye(Ht),Ye(Ct,E),ds=!1,Ne(vi)}}}function ba(e,t,n){let i,o,r;_e(e,Be,I=>n(18,i=I)),_e(e,mt,I=>n(9,o=I)),_e(e,Es,I=>n(10,r=I));let c={...i},u="1.0.0",d=!1,_=!1,v="",p="",g="",h=null;async function C(){n(3,_=!0),n(4,v="checking"),n(6,g=""),n(5,p="");try{const I=await window.go.main.App.CheckForUpdate();I?.available?(n(4,v="available"),n(5,p=I.latest||"")):n(4,v="latest")}catch(I){n(4,v="error"),n(6,g=String(I)),ae(o.error_update_check+I,"error")}finally{n(3,_=!1)}}async function b(){n(7,h={message:o.confirm_update,confirmLabel:o.apply_update,run:async()=>{n(3,_=!0),n(4,v="downloading"),n(6,g="");try{await window.go.main.App.ApplyUpdate(),ae(o.notif_updating,"info")}catch(I){n(4,v="error"),n(6,g=String(I)),n(3,_=!1),ae(o.error_update+I,"error")}}})}async function k(){gt(Be,i={...c},i);try{n(2,d=!!await window.go.main.App.SaveSettings(c)),c.lang&&un(c.lang),ae(o.notif_settings_saved,"info"),d&&ae(o.notif_reconnect_required,"info")}catch(I){ae(o.error_save+I,"error")}}async function S(){n(7,h={message:o.confirm_reset,confirmLabel:o.reset,danger:!0,run:async()=>{try{n(0,c=await window.go.main.App.ResetSettings()),gt(Be,i={...c},i),n(2,d=!1),c.lang&&un(c.lang),ae(o.notif_settings_saved,"info")}catch(I){ae(o.error_save+I,"error")}}})}function P(I){const le=Math.min(150,Math.max(75,Number(I.target.value)||100));n(0,c.uiScale=le,c),gt(Be,i={...i,uiScale:le},i)}function R(I){n(0,c.lang=I.target.value,c),un(I.target.value)}let w={connection:!0,network:!1,system:!1,appearance:!0};function L(I){n(8,w={...w,[I]:!w[I]})}Dl(async()=>{try{const I=await window.go.main.App.GetSettings();if(I){const le=i.theme||I.theme;n(0,c={...c,...I,theme:le}),c.connectionMode||n(0,c.connectionMode="direct",c),gt(Be,i={...c,theme:le},i),c.lang&&un(c.lang)}window.go.main.App.GetVersion&&n(1,u=await window.go.main.App.GetVersion())}catch{}});const D=()=>L("connection");function M(){c.serverAddr=this.value,n(0,c),n(18,i)}function J(){c.nickname=this.value,n(0,c),n(18,i)}function V(){c.serverToken=this.value,n(0,c),n(18,i)}function f(){c.autoConnect=this.checked,n(0,c),n(18,i)}function q(){c.autoJoinLastRoom=this.checked,n(0,c),n(18,i)}const B=()=>L("network");function U(){c.connectionMode=fo(this),n(0,c),n(18,i)}function T(){c.mtu=io(this.value),n(0,c),n(18,i)}function X(){c.dnsServer=this.value,n(0,c),n(18,i)}function Y(){c.socks5Proxy=this.value,n(0,c),n(18,i)}function ne(){c.stunServer=this.value,n(0,c),n(18,i)}const x=()=>L("system");function N(){c.startWithWindows=this.checked,n(0,c),n(18,i)}const A=()=>L("appearance"),K=async()=>{const I=h?.run;n(7,h=null),I&&await I()},O=()=>n(7,h=null);return e.$$.update=()=>{e.$$.dirty[0]&262145&&i.theme&&c.theme!==i.theme&&n(0,c.theme=i.theme,c)},[c,u,d,_,v,p,g,h,w,o,r,C,b,k,S,P,R,L,i,D,M,J,V,f,q,B,U,T,X,Y,ne,x,N,A,K,O]}class wa extends pt{constructor(t){super(),_t(this,t,ba,ga,ot,{},null,[-1,-1])}}function eo(e,t,n){const i=e.slice();return i[17]=t[n],i}function ka(e){let t,n,i,o,r,c,u,d,_,v,p,g,h,C,b,k,S,P,R,w,L,D,M,J,V;return n=new ea({props:{pathAggregate:e[3]}}),c=new Fo({}),h=new Xo({props:{pathAggregate:e[3]}}),S=new fa({}),L=new wa({}),{c(){t=a("div"),xe(n.$$.fragment),i=m(),o=a("div"),r=a("div"),xe(c.$$.fragment),u=m(),d=a("div"),_=m(),v=a("main"),p=a("div"),g=a("div"),xe(h.$$.fragment),b=m(),k=a("div"),xe(S.$$.fragment),R=m(),w=a("div"),xe(L.$$.fragment),s(d,"class","drag-handle svelte-8tj0mu"),Z(d,"active",e[2]),s(r,"class","sidebar-wrapper svelte-8tj0mu"),bi(r,"width",e[1]+"px"),s(g,"class","peer-pane svelte-8tj0mu"),g.hidden=C=e[0]==="settings",s(k,"class","chat-pane svelte-8tj0mu"),k.hidden=P=e[0]==="settings"||!e[5],s(w,"class","settings-pane svelte-8tj0mu"),w.hidden=D=e[0]!=="settings",s(p,"class","workspace svelte-8tj0mu"),s(v,"class","main-area svelte-8tj0mu"),s(o,"class","layout svelte-8tj0mu"),s(t,"class","shell bench svelte-8tj0mu")},m(f,q){H(f,t,q),Ve(n,t,null),l(t,i),l(t,o),l(o,r),Ve(c,r,null),l(r,u),l(r,d),l(o,_),l(o,v),l(v,p),l(p,g),Ve(h,g,null),l(p,b),l(p,k),Ve(S,k,null),l(p,R),l(p,w),Ve(L,w,null),M=!0,J||(V=F(d,"mousedown",e[8]),J=!0)},p(f,q){const B={};q&8&&(B.pathAggregate=f[3]),n.$set(B),(!M||q&4)&&Z(d,"active",f[2]),(!M||q&2)&&bi(r,"width",f[1]+"px");const U={};q&8&&(U.pathAggregate=f[3]),h.$set(U),(!M||q&1&&C!==(C=f[0]==="settings"))&&(g.hidden=C),(!M||q&33&&P!==(P=f[0]==="settings"||!f[5]))&&(k.hidden=P),(!M||q&1&&D!==(D=f[0]!=="settings"))&&(w.hidden=D)},i(f){M||(Oe(n.$$.fragment,f),Oe(c.$$.fragment,f),Oe(h.$$.fragment,f),Oe(S.$$.fragment,f),Oe(L.$$.fragment,f),M=!0)},o(f){Ge(n.$$.fragment,f),Ge(c.$$.fragment,f),Ge(h.$$.fragment,f),Ge(S.$$.fragment,f),Ge(L.$$.fragment,f),M=!1},d(f){f&&G(t),Ye(n),Ye(c),Ye(h),Ye(S),Ye(L),J=!1,V()}}}function ya(e){let t,n,i,o,r,c,u,d;return u=new aa({}),{c(){t=a("div"),n=m(),i=a("div"),o=m(),r=a("div"),c=a("div"),xe(u.$$.fragment),s(t,"class","space-bg"),s(t,"aria-hidden","true"),s(i,"class","space-dust"),s(i,"aria-hidden","true"),s(c,"class","fullscreen-connect svelte-8tj0mu"),s(r,"class","shell connect-shell svelte-8tj0mu")},m(_,v){H(_,t,v),H(_,n,v),H(_,i,v),H(_,o,v),H(_,r,v),l(r,c),Ve(u,c,null),d=!0},p:Ee,i(_){d||(Oe(u.$$.fragment,_),d=!0)},o(_){Ge(u.$$.fragment,_),d=!1},d(_){_&&(G(t),G(n),G(i),G(o),G(r)),Ye(u)}}}function to(e){let t,n,i=e[6].msg+"",o,r,c,u=e[4].dismiss_error+"",d,_,v,p;return{c(){t=a("div"),n=a("span"),o=y(i),r=m(),c=a("button"),d=y(u),s(n,"class","error-strip-msg svelte-8tj0mu"),s(c,"type","button"),s(c,"class","error-strip-dismiss svelte-8tj0mu"),s(c,"aria-label",_=e[4].dismiss_error),s(t,"class","error-strip svelte-8tj0mu"),s(t,"role","alert")},m(g,h){H(g,t,h),l(t,n),l(n,o),l(t,r),l(t,c),l(c,d),v||(p=F(c,"click",_n),v=!0)},p(g,h){h&64&&i!==(i=g[6].msg+"")&&j(o,i),h&16&&u!==(u=g[4].dismiss_error+"")&&j(d,u),h&16&&_!==(_=g[4].dismiss_error)&&s(c,"aria-label",_)},d(g){g&&G(t),v=!1,p()}}}function no(e,t){let n,i=t[17].msg+"",o,r,c;return{key:e,first:null,c(){n=a("div"),o=y(i),r=m(),s(n,"class",c="notification "+t[17].type+" svelte-8tj0mu"),s(n,"role","status"),this.first=n},m(u,d){H(u,n,d),l(n,o),l(n,r)},p(u,d){t=u,d&128&&i!==(i=t[17].msg+"")&&j(o,i),d&128&&c!==(c="notification "+t[17].type+" svelte-8tj0mu")&&s(n,"class",c)},d(u){u&&G(n)}}}function ja(e){let t,n,i,o,r=[],c=new Map,u,d;const _=[ya,ka],v=[];function p(b,k){return b[0]==="connect"?0:1}t=p(e),n=v[t]=_[t](e);let g=e[6]&&to(e),h=wt(e[7]);const C=b=>b[17].id;for(let b=0;b{v[S]=null}),bo(),n=v[t],n?n.p(b,k):(n=v[t]=_[t](b),n.c()),Oe(n,1),n.m(i.parentNode,i)),b[6]?g?g.p(b,k):(g=to(b),g.c(),g.m(o.parentNode,o)):g&&(g.d(1),g=null),k&128&&(h=wt(b[7]),r=zl(r,k,C,1,b,h,c,u.parentNode,Nl,no,u,eo))},i(b){d||(Oe(n),d=!0)},o(b){Ge(n),d=!1},d(b){b&&(G(i),G(o),G(u)),v[t].d(b),g&&g.d(b);for(let k=0;ki.connected&&(i.path==="relay"||i.path==="ws"))?"relay":"direct":"disconnected"}async function lo(e){if(e.key==="F11"){e.preventDefault();try{await window.runtime?.WindowIsFullscreen?.()?window.runtime.WindowUnfullscreen():window.runtime.WindowFullscreen()}catch{}}}function Aa(e,t,n){let i,o,r,c,u,d,_,v,p;_e(e,mt,w=>n(4,o=w)),_e(e,Be,w=>n(9,r=w)),_e(e,ps,w=>n(10,c=w)),_e(e,We,w=>n(11,u=w)),_e(e,Ue,w=>n(0,d=w)),_e(e,Pt,w=>n(5,_=w)),_e(e,Pl,w=>n(6,v=w)),_e(e,ms,w=>n(7,p=w));let g=220,h=!1,C,b,k=!0;function S(w){n(2,h=!0),C=w.clientX,b=g,document.addEventListener("mousemove",P),document.addEventListener("mouseup",R),w.preventDefault()}function P(w){if(!h)return;const L=b+(w.clientX-C);n(1,g=Math.max(140,Math.min(400,L)))}function R(){n(2,h=!1),document.removeEventListener("mousemove",P),document.removeEventListener("mouseup",R)}return Dl(async()=>{window.addEventListener("keydown",lo);try{const w=await window.go.main.App.LoadConfig();w&&(Be.set({...r,...w}),w.lang&&un(w.lang))}catch{}window.runtime?.EventsOn&&(window.runtime.EventsOn("status_changed",w=>{k&&(We.set(w),!w.connected&&!w.reconnecting&&Ue.set("connect"))}),window.runtime.EventsOn("peers_changed",w=>{k&&ps.set(w||[])}),window.runtime.EventsOn("error",w=>{k&&ae(w,"error")}),window.runtime.EventsOn("chat_message",w=>{k&&Cs(w.fromID,w.nickname,w.message,!1,"sent",!1,!!w.isDM)}),window.runtime.EventsOn("system_chat",w=>{k&&Po(w.message||"")}),window.runtime.EventsOn("room_deleted",w=>{k&&(ae(o.notif_room_deleted,"error"),Ue.set("network"))}),window.runtime.EventsOn("auto_join_skipped",w=>{if(!k)return;const L=w?.room||"";ae(ge(o.notif_auto_join_skipped,{name:L}),"info")}))}),oo(()=>{k=!1,window.removeEventListener("keydown",lo),document.removeEventListener("mousemove",P),document.removeEventListener("mouseup",R),window.runtime?.EventsOff&&(window.runtime.EventsOff("status_changed"),window.runtime.EventsOff("peers_changed"),window.runtime.EventsOff("error"),window.runtime.EventsOff("chat_message"),window.runtime.EventsOff("system_chat"),window.runtime.EventsOff("room_deleted"),window.runtime.EventsOff("auto_join_skipped"))}),e.$$.update=()=>{if(e.$$.dirty&512){const w=Sa(r.uiScale)/100;document.documentElement.style.zoom=String(w)}if(e.$$.dirty&513){const w=document.documentElement,L=r.theme==="light";w.classList.toggle("light-theme",L),w.dataset.theme=L?"light":"dark",w.dataset.app=d==="connect"?"connect":"connected"}e.$$.dirty&3072&&n(3,i=Ca(u,c))},[d,g,h,i,o,_,v,p,S,r,c,u]}class Ea extends pt{constructor(t){super(),_t(this,t,Aa,ja,ot,{})}}new Ea({target:document.getElementById("app")}); diff --git a/client/frontend/dist/assets/index-coA7a2P7.css b/client/frontend/dist/assets/index-coA7a2P7.css deleted file mode 100644 index 43570b8..0000000 --- a/client/frontend/dist/assets/index-coA7a2P7.css +++ /dev/null @@ -1 +0,0 @@ -.sidebar.svelte-1oaanap.svelte-1oaanap{width:100%;height:100%;background:var(--bg-surface);display:flex;flex-direction:column;flex-shrink:0}.sidebar-header.svelte-1oaanap.svelte-1oaanap{padding:12px;border-bottom:1px solid var(--border)}.sidebar-header.svelte-1oaanap h2.svelte-1oaanap{font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--text-secondary);font-weight:600}.sidebar-meta.svelte-1oaanap.svelte-1oaanap{font-size:var(--font-size-xs);color:var(--text-muted);margin-top:4px}.sidebar-actions.svelte-1oaanap.svelte-1oaanap{padding:8px;display:flex;flex-direction:column;gap:6px;border-bottom:1px solid var(--border)}.sidebar-actions.svelte-1oaanap .btn.svelte-1oaanap{min-height:36px;padding:8px 10px}.network-list.svelte-1oaanap.svelte-1oaanap{flex:1;overflow-y:auto;overflow-x:hidden;padding:4px 0}.network-item.svelte-1oaanap.svelte-1oaanap{display:flex;align-items:center;padding:10px 12px;min-height:44px;cursor:pointer;gap:8px;border-bottom:1px solid var(--border-deep);transition:background .12s ease,opacity .12s ease;position:relative}.network-item.svelte-1oaanap.svelte-1oaanap:hover,.network-item.svelte-1oaanap.svelte-1oaanap:focus-visible{background:var(--bg-hover)}.network-item.active.svelte-1oaanap.svelte-1oaanap{background:var(--bg-active)}.network-item.disabled.svelte-1oaanap.svelte-1oaanap{opacity:.55}.network-indicator.svelte-1oaanap.svelte-1oaanap{width:4px;height:12px;background:var(--text-muted);flex-shrink:0}.network-indicator.active-dot.svelte-1oaanap.svelte-1oaanap{background:var(--accent)}.network-info.svelte-1oaanap.svelte-1oaanap{flex:1;min-width:0}.network-name.svelte-1oaanap.svelte-1oaanap{font-size:var(--font-size);color:var(--text-bright);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.network-meta.svelte-1oaanap.svelte-1oaanap{font-size:var(--font-size-xs);color:var(--text-secondary);line-height:1.4}.row-actions.svelte-1oaanap.svelte-1oaanap{position:relative;flex-shrink:0}.menu-btn.svelte-1oaanap.svelte-1oaanap{background:none;border:1px solid transparent;color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);font-size:16px;line-height:1;width:32px;height:32px;display:flex;align-items:center;justify-content:center}.menu-btn.svelte-1oaanap.svelte-1oaanap:hover,.menu-btn[aria-expanded=true].svelte-1oaanap.svelte-1oaanap{color:var(--text-bright);border-color:var(--border);background:var(--bg-raised)}.overflow-menu.svelte-1oaanap.svelte-1oaanap{position:absolute;right:0;top:100%;z-index:20;min-width:160px;background:var(--bg-raised);border:1px solid var(--border);display:flex;flex-direction:column;box-shadow:0 4px 12px #00000059}.menu-item.svelte-1oaanap.svelte-1oaanap{background:none;border:none;text-align:left;padding:10px 12px;min-height:36px;color:var(--text-primary);font-family:var(--font-mono);font-size:var(--font-size-sm);cursor:pointer}.menu-item.svelte-1oaanap.svelte-1oaanap:hover{background:var(--bg-hover);color:var(--text-bright)}.menu-item.danger.svelte-1oaanap.svelte-1oaanap{color:var(--error)}.menu-item.danger.svelte-1oaanap.svelte-1oaanap:hover{background:#c45c5c1f}.empty-desc.svelte-1oaanap.svelte-1oaanap{margin-top:6px;font-size:var(--font-size-xs);color:var(--text-dim)}.empty-state.svelte-1oaanap.svelte-1oaanap{padding:16px;text-align:center;color:var(--text-muted);font-size:var(--font-size-sm)}.sidebar-footer.svelte-1oaanap.svelte-1oaanap{padding:8px;border-top:1px solid var(--border)}.settings-btn.svelte-1oaanap.svelte-1oaanap{width:100%;min-height:36px}.modal-overlay.svelte-1oaanap.svelte-1oaanap{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:100;animation:svelte-1oaanap-fadeIn .12s ease-out}@keyframes svelte-1oaanap-fadeIn{0%{opacity:0}to{opacity:1}}.modal.svelte-1oaanap.svelte-1oaanap{background:var(--bg-surface);border:1px solid var(--border);padding:20px;width:320px;max-height:80vh;overflow-y:auto;display:flex;flex-direction:column;gap:10px}.modal.svelte-1oaanap h3.svelte-1oaanap{font-size:var(--font-size);color:var(--text-bright);font-weight:500;text-transform:uppercase;letter-spacing:.5px}.modal.svelte-1oaanap input.svelte-1oaanap{padding:10px;min-height:40px;border:1px solid var(--border);background:var(--bg-primary);color:var(--text-primary);font-size:var(--font-size);font-family:var(--font-mono)}.modal.svelte-1oaanap input.invalid.svelte-1oaanap{border-color:var(--error)}.field-error.svelte-1oaanap.svelte-1oaanap,.modal-error.svelte-1oaanap.svelte-1oaanap{font-size:var(--font-size-xs);color:var(--error)}.modal-error.svelte-1oaanap.svelte-1oaanap{padding:8px;border:1px solid var(--error);background:#c45c5c14}.modal-actions.svelte-1oaanap.svelte-1oaanap{display:flex;gap:6px;justify-content:flex-end}.modal-actions.svelte-1oaanap .btn.svelte-1oaanap{min-height:36px;padding:8px 12px}.sr-only.svelte-1oaanap.svelte-1oaanap{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.peer-view.svelte-mpjrp9.svelte-mpjrp9{display:flex;flex-direction:column;height:100%}.peer-header.svelte-mpjrp9.svelte-mpjrp9{padding:12px 16px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;background:var(--bg-surface);flex-wrap:wrap}.peer-header.svelte-mpjrp9 h2.svelte-mpjrp9{font-size:var(--font-size);font-weight:500;color:var(--text-bright);text-transform:uppercase;letter-spacing:.5px}.ip-badge.svelte-mpjrp9.svelte-mpjrp9{padding:4px 8px;min-height:28px;background:var(--bg-raised);font-size:var(--font-size-xs);font-family:var(--font-mono);color:var(--text-secondary);border:1px solid var(--border);cursor:pointer}.ip-badge.svelte-mpjrp9.svelte-mpjrp9:hover{border-color:var(--border-hover);color:var(--text-bright)}.room-chat-btn.svelte-mpjrp9.svelte-mpjrp9{margin-left:auto;background:transparent;border:1px solid var(--border);color:var(--text-secondary);font-family:var(--font-mono);font-size:var(--font-size-xs);padding:6px 10px;min-height:32px;cursor:pointer;position:relative}.room-chat-btn.svelte-mpjrp9.svelte-mpjrp9:hover{color:var(--text-bright);border-color:var(--border-hover)}.relay-hint.svelte-mpjrp9.svelte-mpjrp9{font-size:var(--font-size-xs);color:var(--text-muted)}.badge.svelte-mpjrp9.svelte-mpjrp9{display:inline-block;min-width:14px;padding:0 4px;margin-left:4px;background:var(--accent);color:var(--accent-ink);font-size:10px;line-height:14px;text-align:center}.peer-table.svelte-mpjrp9.svelte-mpjrp9{flex:1;overflow:auto;min-height:0;min-width:0}.table-row.svelte-mpjrp9.svelte-mpjrp9{display:grid;grid-template-columns:minmax(56px,72px) minmax(72px,1fr) minmax(88px,110px) minmax(48px,70px) minmax(52px,72px) minmax(64px,80px);gap:8px;align-items:center;padding:10px 16px;min-height:40px;border-bottom:1px solid var(--border-deep);font-size:var(--font-size-sm);min-width:520px}.table-header-row.svelte-mpjrp9.svelte-mpjrp9{color:var(--text-muted);text-transform:uppercase;font-size:var(--font-size-xs);letter-spacing:.4px}.self-row.svelte-mpjrp9.svelte-mpjrp9{background:var(--bg-surface)}.nickname.svelte-mpjrp9.svelte-mpjrp9{color:var(--text-bright);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.self-tag.svelte-mpjrp9.svelte-mpjrp9{margin-left:6px;font-size:var(--font-size-xs);color:var(--text-muted)}.col-ip.svelte-mpjrp9.svelte-mpjrp9,.col-ping.svelte-mpjrp9.svelte-mpjrp9,.col-path.svelte-mpjrp9.svelte-mpjrp9{font-family:var(--font-mono);color:var(--text-secondary)}.col-ping.probing.svelte-mpjrp9.svelte-mpjrp9{color:var(--text-bright)}.clickable.svelte-mpjrp9.svelte-mpjrp9{cursor:pointer}.clickable.svelte-mpjrp9.svelte-mpjrp9:hover{color:var(--text-bright)}.status-cell.svelte-mpjrp9.svelte-mpjrp9{display:flex;align-items:center;gap:6px}.status-text.svelte-mpjrp9.svelte-mpjrp9{font-size:var(--font-size-xs);color:var(--text-secondary)}.sq.svelte-mpjrp9.svelte-mpjrp9{width:8px;height:8px;display:inline-block;flex-shrink:0}.sq-online.svelte-mpjrp9.svelte-mpjrp9{background:var(--success)}.sq-offline.svelte-mpjrp9.svelte-mpjrp9{background:var(--text-dim)}.col-action.svelte-mpjrp9.svelte-mpjrp9{display:flex;gap:2px;justify-content:flex-end}.row-btn.svelte-mpjrp9.svelte-mpjrp9{background:transparent;border:none;color:var(--text-muted);cursor:pointer;font-family:var(--font-mono);min-width:32px;min-height:32px;padding:0}.row-btn.svelte-mpjrp9.svelte-mpjrp9:hover:not(:disabled){color:var(--text-bright)}.row-btn.svelte-mpjrp9.svelte-mpjrp9:disabled{opacity:.35;cursor:not-allowed}.empty-peers.svelte-mpjrp9.svelte-mpjrp9{padding:48px 24px;text-align:center;color:var(--text-muted)}.empty-label.svelte-mpjrp9.svelte-mpjrp9{color:var(--text-secondary);margin:8px 0 4px}.empty-desc.svelte-mpjrp9.svelte-mpjrp9{font-size:var(--font-size-xs)}.statusbar.svelte-1pzfkl{min-height:var(--statusbar-height);background:var(--bg-deep);border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;gap:12px;padding:4px 12px;font-size:var(--font-size-xs);color:var(--text-secondary);flex-shrink:0;font-family:var(--font-mono);z-index:1;position:relative;min-width:0}.status-left.svelte-1pzfkl,.status-right.svelte-1pzfkl{display:flex;align-items:center;gap:8px 14px;min-width:0;flex-wrap:wrap}.status-left.svelte-1pzfkl{flex:0 1 auto}.status-right.svelte-1pzfkl{flex:1 1 auto;justify-content:flex-end;opacity:.85}.status-item.svelte-1pzfkl{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:36ch}.status-server.svelte-1pzfkl{max-width:28ch}.status-room.svelte-1pzfkl{max-width:22ch}.status-ver.svelte-1pzfkl{flex-shrink:0;max-width:none}.degraded.svelte-1pzfkl{color:var(--warning)}.sq.svelte-1pzfkl{display:inline-block;width:7px;height:7px;background:var(--error);vertical-align:middle;flex-shrink:0}.sq.sq-connected.svelte-1pzfkl{background:var(--success)}.sq.sq-warn.svelte-1pzfkl{background:var(--warning)}.connect-view.svelte-1br9j49.svelte-1br9j49{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:32px 24px}.connect-form.svelte-1br9j49.svelte-1br9j49,.connected-info.svelte-1br9j49.svelte-1br9j49{width:min(360px,100%);display:flex;flex-direction:column;gap:16px;animation:svelte-1br9j49-connectIn .45s cubic-bezier(.16,1,.3,1) both}@keyframes svelte-1br9j49-connectIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.brand-block.svelte-1br9j49.svelte-1br9j49{text-align:center;margin-bottom:12px}.brand.svelte-1br9j49.svelte-1br9j49{font-family:var(--font-display);font-size:clamp(36px,7vw,48px);font-weight:400;letter-spacing:.02em;text-transform:uppercase;color:var(--text-bright);line-height:1.05}.tagline.svelte-1br9j49.svelte-1br9j49{margin-top:10px;font-size:var(--font-size-sm);color:var(--text-secondary);text-transform:none;letter-spacing:.02em;line-height:1.45}.field.svelte-1br9j49.svelte-1br9j49{display:flex;flex-direction:column;gap:7px}label.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em}input.svelte-1br9j49.svelte-1br9j49{background:#111111d9;border:1px solid var(--border-light);color:var(--text-bright);padding:13px 14px;min-height:44px;font-family:var(--font-mono);font-size:var(--font-size);transition:border-color .15s ease,background .15s ease}input.svelte-1br9j49.svelte-1br9j49::placeholder{color:var(--text-dim)}input.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){border-color:var(--border-hover)}input.svelte-1br9j49.svelte-1br9j49:focus{outline:none;border-color:var(--text-bright);background:#141414f2}input.invalid.svelte-1br9j49.svelte-1br9j49{border-color:var(--error)}.field-error.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--error)}.connect-btn.svelte-1br9j49.svelte-1br9j49,.disconnect-btn.svelte-1br9j49.svelte-1br9j49,.secondary-btn.svelte-1br9j49.svelte-1br9j49{border:none;padding:15px 18px;min-height:48px;font-family:var(--font-mono);font-size:var(--font-size);cursor:pointer;text-transform:uppercase;letter-spacing:.12em;font-weight:600;transition:background .15s ease,border-color .15s ease,transform .12s ease}.connect-btn.svelte-1br9j49.svelte-1br9j49{margin-top:4px;background:var(--accent);color:var(--accent-ink)}.connect-btn.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){background:var(--accent-hover);transform:translateY(-1px)}.connect-btn.svelte-1br9j49.svelte-1br9j49:active:not(:disabled){transform:translateY(0)}.connect-btn.svelte-1br9j49.svelte-1br9j49:disabled{opacity:.45;cursor:not-allowed;transform:none}.secondary-btn.svelte-1br9j49.svelte-1br9j49{background:transparent;color:var(--text-primary);border:1px solid var(--border-light);font-weight:500;letter-spacing:.08em}.secondary-btn.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){border-color:var(--accent);color:var(--text-bright)}.disconnect-btn.svelte-1br9j49.svelte-1br9j49{background:transparent;color:var(--error);border:1px solid var(--error);font-weight:500}.phase.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--text-muted);text-align:center;letter-spacing:.04em}.invite-disclosure.svelte-1br9j49.svelte-1br9j49{margin-top:8px;border-top:1px solid var(--border);padding-top:14px}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49{cursor:pointer;color:var(--text-muted);font-size:var(--font-size-sm);list-style:none;min-height:36px;display:flex;align-items:center;justify-content:center;transition:color .15s ease}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49:hover{color:var(--text-secondary)}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49::-webkit-details-marker{display:none}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49:before{content:"+";margin-right:8px;color:var(--text-dim)}.invite-disclosure[open].svelte-1br9j49 summary.svelte-1br9j49:before{content:"−"}.invite-block.svelte-1br9j49.svelte-1br9j49{display:flex;flex-direction:column;gap:10px;margin-top:12px}.connected-line.svelte-1br9j49.svelte-1br9j49{display:flex;align-items:center;gap:8px;color:var(--text-bright)}.info-line.svelte-1br9j49.svelte-1br9j49{display:flex;justify-content:space-between;font-size:var(--font-size-sm);color:var(--text-secondary)}.info-value.svelte-1br9j49.svelte-1br9j49{color:var(--text-primary);font-family:var(--font-mono)}.sq.svelte-1br9j49.svelte-1br9j49{width:8px;height:8px;display:inline-block}.sq-green.svelte-1br9j49.svelte-1br9j49{background:var(--success)}.sq-warn.svelte-1br9j49.svelte-1br9j49{background:var(--warning)}.sr-only.svelte-1br9j49.svelte-1br9j49{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.light-theme input.svelte-1br9j49.svelte-1br9j49{background:#ffffffa6}.light-theme input.svelte-1br9j49.svelte-1br9j49:focus{background:#ffffffe6}.chat-view.svelte-11c1d7e.svelte-11c1d7e{display:flex;flex-direction:column;height:100%}.chat-header.svelte-11c1d7e.svelte-11c1d7e{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--bg-surface)}.back-btn.svelte-11c1d7e.svelte-11c1d7e{width:28px;height:28px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border);color:var(--text-secondary);cursor:pointer;font-family:var(--font-mono)}.chat-title.svelte-11c1d7e.svelte-11c1d7e{color:var(--text-bright);font-size:var(--font-size)}.chat-messages.svelte-11c1d7e.svelte-11c1d7e{flex:1;overflow-y:auto;padding:16px;min-height:0}.empty-chat.svelte-11c1d7e.svelte-11c1d7e{text-align:center;padding:40px 16px;color:var(--text-muted)}.empty-chat-label.svelte-11c1d7e.svelte-11c1d7e{color:var(--text-secondary);margin:8px 0 4px}.empty-chat-desc.svelte-11c1d7e.svelte-11c1d7e{font-size:var(--font-size-xs)}.date-sep.svelte-11c1d7e.svelte-11c1d7e{text-align:center;font-size:var(--font-size-xs);color:var(--text-dim);margin:12px 0}.system-line.svelte-11c1d7e.svelte-11c1d7e{text-align:center;font-size:var(--font-size-xs);color:var(--text-muted);margin:8px 0}.msg.svelte-11c1d7e.svelte-11c1d7e{margin-bottom:10px;max-width:80%}.msg.self.svelte-11c1d7e.svelte-11c1d7e{margin-left:auto;text-align:right}.msg-meta.svelte-11c1d7e.svelte-11c1d7e{font-size:var(--font-size-xs);color:var(--text-muted);margin-bottom:2px}.msg-body.svelte-11c1d7e.svelte-11c1d7e{display:inline-block;padding:8px 10px;background:var(--bg-raised);border:1px solid var(--border);color:var(--text-primary);white-space:pre-wrap;word-break:break-word;text-align:left}.msg.self.svelte-11c1d7e .msg-body.svelte-11c1d7e{background:var(--bg-active)}.retry-btn.svelte-11c1d7e.svelte-11c1d7e{margin-left:6px;background:transparent;border:none;color:var(--error);cursor:pointer;font-size:var(--font-size-xs)}.chat-input-area.svelte-11c1d7e.svelte-11c1d7e{display:flex;gap:8px;padding:12px 16px;border-top:1px solid var(--border);background:var(--bg-surface)}textarea.svelte-11c1d7e.svelte-11c1d7e{flex:1;resize:none;background:var(--bg-raised);border:1px solid var(--border);color:var(--text-primary);padding:8px 10px;font-family:var(--font-mono);font-size:var(--font-size);min-height:36px}textarea.svelte-11c1d7e.svelte-11c1d7e:disabled{opacity:.5}.send-btn.svelte-11c1d7e.svelte-11c1d7e{background:var(--accent);color:var(--accent-ink);border:none;padding:0 16px;cursor:pointer;font-family:var(--font-mono);text-transform:uppercase}.send-btn.svelte-11c1d7e.svelte-11c1d7e:disabled{opacity:.4;cursor:not-allowed}.settings-view.svelte-1pfl9w0.svelte-1pfl9w0{display:flex;flex-direction:column;height:100%;padding:24px 32px}.settings-content.svelte-1pfl9w0.svelte-1pfl9w0{flex:1;overflow-y:auto;min-height:0;height:0}.settings-title.svelte-1pfl9w0.svelte-1pfl9w0{font-size:var(--font-size);color:var(--text-bright);text-transform:uppercase;letter-spacing:1px;font-weight:500;margin-bottom:20px}.reconnect-banner.svelte-1pfl9w0.svelte-1pfl9w0{background:var(--bg-raised);border:1px solid var(--border-hover);color:var(--text-bright);padding:10px 12px;margin-bottom:16px;font-size:var(--font-size-sm)}.section.svelte-1pfl9w0.svelte-1pfl9w0{margin-bottom:24px}.section-title.svelte-1pfl9w0.svelte-1pfl9w0{font-size:var(--font-size-xs);color:var(--text-muted);letter-spacing:1px}.hint.svelte-1pfl9w0.svelte-1pfl9w0{font-size:var(--font-size-xs);color:var(--text-muted);margin:6px 0 12px;line-height:1.4}.reconnect-hint.svelte-1pfl9w0.svelte-1pfl9w0{color:var(--text-secondary)}.setting-row.svelte-1pfl9w0.svelte-1pfl9w0{display:flex;align-items:center;gap:12px;margin-bottom:10px;min-height:32px}.setting-label.svelte-1pfl9w0.svelte-1pfl9w0{min-width:140px;color:var(--text-secondary);font-size:var(--font-size-sm)}.toggle-label.svelte-1pfl9w0.svelte-1pfl9w0{color:var(--text-muted);font-size:var(--font-size-xs)}input[type=text].svelte-1pfl9w0.svelte-1pfl9w0,input[type=password].svelte-1pfl9w0.svelte-1pfl9w0,input[type=number].svelte-1pfl9w0.svelte-1pfl9w0,select.svelte-1pfl9w0.svelte-1pfl9w0{flex:1;background:var(--bg-raised);border:1px solid var(--border);color:var(--text-primary);padding:8px 10px;min-height:36px;font-family:var(--font-mono);font-size:var(--font-size-sm)}input[type=checkbox].svelte-1pfl9w0.svelte-1pfl9w0{width:18px;height:18px}.radio-group.svelte-1pfl9w0.svelte-1pfl9w0{display:flex;gap:12px}.radio-option.svelte-1pfl9w0.svelte-1pfl9w0{display:flex;align-items:center;gap:6px;color:var(--text-secondary);font-size:var(--font-size-sm);min-height:32px}.scale-row.svelte-1pfl9w0 input[type=range].svelte-1pfl9w0{flex:1;min-width:120px;accent-color:var(--accent)}.scale-value.svelte-1pfl9w0.svelte-1pfl9w0{min-width:44px;text-align:right;color:var(--text-secondary);font-size:var(--font-size-sm);font-family:var(--font-mono)}.actions-section.svelte-1pfl9w0.svelte-1pfl9w0{display:flex;gap:8px;align-items:center}.actions-section.svelte-1pfl9w0 .btn.svelte-1pfl9w0{min-height:36px;padding:8px 14px}.update-row.svelte-1pfl9w0.svelte-1pfl9w0{flex-wrap:wrap}.update-row.svelte-1pfl9w0 .btn.svelte-1pfl9w0{min-height:36px;padding:8px 14px}.btn-check.svelte-1pfl9w0.svelte-1pfl9w0,.btn-update.svelte-1pfl9w0.svelte-1pfl9w0{background:var(--bg-raised);border:1px solid var(--border);color:var(--text-primary);font-family:var(--font-mono);font-size:var(--font-size-sm);cursor:pointer}.btn-check.svelte-1pfl9w0.svelte-1pfl9w0:hover:not(:disabled),.btn-update.svelte-1pfl9w0.svelte-1pfl9w0:hover:not(:disabled){border-color:var(--border-hover);color:var(--text-bright)}.btn-check.svelte-1pfl9w0.svelte-1pfl9w0:disabled,.btn-update.svelte-1pfl9w0.svelte-1pfl9w0:disabled{opacity:.5;cursor:default}.ver.svelte-1pfl9w0.svelte-1pfl9w0{margin-left:auto;color:var(--text-dim);font-size:var(--font-size-xs)}.shell.svelte-1hi7jen{display:flex;flex-direction:column;height:100%;width:100%;position:relative;z-index:1;min-height:0}.connect-shell.svelte-1hi7jen{z-index:1}.layout.svelte-1hi7jen{display:flex;flex:1;min-height:0;position:relative}.fullscreen-connect.svelte-1hi7jen{display:flex;flex:1;width:100%;align-items:center;justify-content:center;min-height:0}.sidebar-wrapper.svelte-1hi7jen{position:relative;flex-shrink:0;background:var(--bg-surface);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;min-height:0}.drag-handle.svelte-1hi7jen{position:absolute;top:0;right:-3px;width:6px;height:100%;cursor:col-resize;z-index:10;background:transparent;transition:background .1s}.drag-handle.svelte-1hi7jen:hover,.drag-handle.active.svelte-1hi7jen,.drag-handle.svelte-1hi7jen:focus-visible{background:var(--border-hover)}.main-area.svelte-1hi7jen{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg-primary);min-width:0;min-height:0}.view-fade.svelte-1hi7jen{flex:1;display:flex;flex-direction:column;min-height:0;min-width:0;animation:svelte-1hi7jen-viewIn .2s ease-out}@keyframes svelte-1hi7jen-viewIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.unknown-view.svelte-1hi7jen{padding:40px;color:var(--text-muted)}.error-strip.svelte-1hi7jen{position:fixed;left:12px;right:12px;bottom:calc(var(--statusbar-height) + 12px);z-index:1100;display:flex;align-items:center;gap:12px;padding:10px 14px;background:var(--bg-raised);border:1px solid var(--error);color:var(--error);font-size:var(--font-size-sm)}.error-strip-msg.svelte-1hi7jen{flex:1;min-width:0;word-break:break-word}.error-strip-dismiss.svelte-1hi7jen{flex-shrink:0;min-height:32px;padding:4px 10px;border:1px solid var(--error);background:transparent;color:var(--error);cursor:pointer;font-family:var(--font-mono);font-size:var(--font-size-xs);text-transform:uppercase}.error-strip-dismiss.svelte-1hi7jen:hover{background:#c45c5c1f}.notification.svelte-1hi7jen{position:fixed;top:12px;right:12px;padding:6px 12px;font-size:var(--font-size-sm);z-index:1000;background:var(--bg-raised);border:1px solid var(--border);color:var(--text-primary);animation:svelte-1hi7jen-slideIn .15s ease-out}.notification.error.svelte-1hi7jen{border-color:var(--error);color:var(--error)}.notification.info.svelte-1hi7jen{border-color:var(--border)}.notif-icon.svelte-1hi7jen{margin-right:6px;font-weight:700}@keyframes svelte-1hi7jen-slideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.space-bg,.space-bg:before,.space-bg:after,.space-dust,.space-dust:before{position:fixed;pointer-events:none;z-index:0}.space-bg{inset:0;background:radial-gradient(ellipse 85% 65% at 50% 36%,rgba(255,255,255,.045) 0%,transparent 55%),radial-gradient(ellipse 120% 80% at 50% 100%,rgba(255,255,255,.03) 0%,transparent 50%),radial-gradient(ellipse 100% 100% at 50% 50%,#0a0a0a,#050505 70%,#000)}.space-bg:before{content:"";position:absolute;inset:0;opacity:.8;background:radial-gradient(1.2px 1.2px at 5% 10%,rgba(255,255,255,.55) 0%,transparent 100%),radial-gradient(1px 1px at 12% 32%,rgba(255,255,255,.35) 0%,transparent 100%),radial-gradient(1px 1px at 18% 68%,rgba(255,255,255,.32) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 25% 45%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 32% 18%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 38% 78%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 45% 15%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 52% 58%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 58% 28%,rgba(255,255,255,.26) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 65% 10%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 72% 72%,rgba(255,255,255,.35) 0%,transparent 100%),radial-gradient(1px 1px at 78% 40%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 85% 65%,rgba(255,255,255,.48) 0%,transparent 100%),radial-gradient(1px 1px at 90% 22%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 94% 88%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1px 1px at 8% 88%,rgba(255,255,255,.26) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 30% 92%,rgba(255,255,255,.4) 0%,transparent 100%),radial-gradient(1px 1px at 48% 42%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1px 1px at 62% 88%,rgba(255,255,255,.32) 0%,transparent 100%),radial-gradient(1px 1px at 88% 52%,rgba(255,255,255,.26) 0%,transparent 100%)}.space-bg:after{content:"";position:absolute;inset:0;background-image:radial-gradient(1.5px 1.5px at 8% 18%,rgba(255,255,255,.7) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 48% 38%,rgba(255,255,255,.6) 0%,transparent 100%),radial-gradient(1.5px 1.5px at 88% 28%,rgba(255,255,255,.65) 0%,transparent 100%),radial-gradient(1px 1px at 22% 55%,rgba(255,255,255,.45) 0%,transparent 100%),radial-gradient(1px 1px at 70% 60%,rgba(255,255,255,.4) 0%,transparent 100%);animation:twinkle 9s ease-in-out infinite alternate;opacity:.5}@keyframes twinkle{0%{opacity:.2}45%{opacity:.5}to{opacity:.25}}.space-dust{inset:0;background:radial-gradient(ellipse 80% 70% at 50% 45%,transparent 42%,rgba(0,0,0,.62) 100%);opacity:1}.space-dust:before{content:"";position:absolute;inset:0;opacity:.32;background:radial-gradient(.5px .5px at 20% 30%,rgba(255,255,255,.4) 0%,transparent 100%),radial-gradient(.5px .5px at 40% 60%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(.5px .5px at 60% 25%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(.5px .5px at 75% 70%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(.5px .5px at 88% 40%,rgba(255,255,255,.3) 0%,transparent 100%)}.light-theme .space-bg,.light-theme .space-bg:before,.light-theme .space-bg:after,.light-theme .space-dust,.light-theme .space-dust:before{display:none!important}@font-face{font-family:Bungee;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/bungee-latin-Dfnurram.woff2) format("woff2")}:root{--bg-deep: #000000;--bg-primary: #050505;--bg-surface: #0a0a0a;--bg-raised: #111111;--bg-hover: #181818;--bg-active: #1f1f1f;--border-deep: #111111;--border: #1c1c1c;--border-light: #2a2a2a;--border-hover: #3d3d3d;--text-bright: #f5f5f5;--text-primary: #c8c8c8;--text-secondary: #8a8a8a;--text-muted: #5c5c5c;--text-dim: #3a3a3a;--accent: #f0f0f0;--accent-hover: #ffffff;--accent-ink: #000000;--success: #9a9a9a;--warning: #c8c8c8;--error: #c45c5c;--focus-ring: #f0f0f0;--sidebar-width: 220px;--statusbar-height: 28px;--font-display: "Bungee", ui-sans-serif, system-ui, sans-serif;--font-mono: ui-monospace, "Cascadia Code", "SF Mono", Consolas, "Liberation Mono", monospace;--font-size: 12px;--font-size-sm: 11px;--font-size-xs: 10px;--line-height: 1.6}.light-theme{--bg-deep: #f5f5f5;--bg-primary: #f0f0f0;--bg-surface: #e8e8e8;--bg-raised: #e0e0e0;--bg-hover: #d8d8d8;--bg-active: #cfcfcf;--border-deep: #d0d0d0;--border: #cccccc;--border-light: #bbbbbb;--border-hover: #999999;--text-bright: #111111;--text-primary: #222222;--text-secondary: #555555;--text-muted: #888888;--text-dim: #aaaaaa;--accent: #000000;--accent-hover: #222222;--accent-ink: #f5f5f5;--success: #555555;--warning: #333333;--error: #b33a3a;--focus-ring: #000000}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body,#app{height:100%;width:100%;overflow:hidden;color:var(--text-primary);font-family:var(--font-mono);font-size:var(--font-size);line-height:var(--line-height);-webkit-font-smoothing:antialiased;user-select:auto}html,body{background:var(--bg-deep)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border)}::-webkit-scrollbar-thumb:hover{background:var(--border-hover)}::-webkit-scrollbar-corner{background:transparent}::selection{background:#ffffff1a;color:var(--text-bright)}input,textarea,button,select{font-family:var(--font-mono);font-size:var(--font-size)}input:focus-visible,textarea:focus-visible,select:focus-visible,button:focus-visible,[tabindex]:focus-visible,.network-item:focus-visible,.clickable:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}button{cursor:pointer;border:none;background:none;color:inherit}a{color:var(--text-bright);text-decoration:none}a:hover{text-decoration:underline}.btn{padding:8px 12px;min-height:36px;border:1px solid var(--border);background:var(--bg-raised);color:var(--text-primary);cursor:pointer;font-size:var(--font-size-sm);text-align:center;font-family:var(--font-mono);transition:background .1s ease,opacity .1s ease}.btn:hover:not(:disabled){background:var(--bg-hover)}.btn.primary,.btn-save{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:500}.btn.primary:hover,.btn-save:hover{background:var(--accent-hover)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.danger{color:var(--error);border-color:var(--error)}.empty-state{padding:16px;text-align:center;color:var(--text-muted);font-size:var(--font-size-sm)} diff --git a/client/frontend/dist/index.html b/client/frontend/dist/index.html index da5e5ee..2d4f28e 100644 --- a/client/frontend/dist/index.html +++ b/client/frontend/dist/index.html @@ -7,8 +7,8 @@ Entangled VPN - - + +

    diff --git a/client/frontend/src/App.svelte b/client/frontend/src/App.svelte index 5c46983..6929c83 100644 --- a/client/frontend/src/App.svelte +++ b/client/frontend/src/App.svelte @@ -1,10 +1,10 @@ - - - {#if $view === 'connect'} + +
    {:else} -
    +
    + +
    -
    - {#if $view === 'network'} - - {:else if $view === 'chat'} +
    + + +
    - -
    {/if} @@ -179,7 +194,6 @@ {#each $notifications as notif (notif.id)}
    - {notif.type === 'error' ? '!' : '>'} {notif.msg}
    {/each} @@ -214,7 +228,7 @@ .sidebar-wrapper { position: relative; flex-shrink: 0; - background: var(--bg-surface); + background: var(--surface); border-right: 1px solid var(--border); display: flex; flex-direction: column; @@ -229,7 +243,7 @@ cursor: col-resize; z-index: 10; background: transparent; - transition: background 0.1s; + transition: background var(--dur-mid, 280ms) var(--ease-out, ease); } .drag-handle:hover, .drag-handle.active, .drag-handle:focus-visible { background: var(--border-hover); @@ -239,40 +253,50 @@ display: flex; flex-direction: column; overflow: hidden; - background: var(--bg-primary); + background: var(--bg); min-width: 0; min-height: 0; } - .view-fade { + .workspace { flex: 1; display: flex; - flex-direction: column; min-height: 0; min-width: 0; - animation: viewIn 0.2s ease-out; } - @keyframes viewIn { - 0% { opacity: 0; transform: translateY(8px); } - 100% { opacity: 1; transform: translateY(0); } + .peer-pane, .settings-pane { + flex: 1; + min-width: 0; + min-height: 0; + display: flex; + flex-direction: column; } - .unknown-view { - padding: 40px; - color: var(--text-muted); + .peer-pane[hidden], .chat-pane[hidden], .settings-pane[hidden] { + display: none !important; + } + .chat-pane { + flex: 0 0 42%; + max-width: 480px; + min-width: 280px; + min-height: 0; + display: flex; + flex-direction: column; + border-left: 1px solid var(--border); } .error-strip { position: fixed; - left: 12px; - right: 12px; - bottom: calc(var(--statusbar-height) + 12px); + left: 16px; + right: 16px; + bottom: 16px; z-index: 1100; display: flex; align-items: center; gap: 12px; - padding: 10px 14px; - background: var(--bg-raised); - border: 1px solid var(--error); - color: var(--error); - font-size: var(--font-size-sm); + padding: 12px 14px; + background: var(--surface-2, var(--bg-raised, #111)); + border: 1px solid var(--fault, var(--error, #c41e1e)); + border-radius: var(--radius, 2px); + color: var(--fault, var(--error, #c41e1e)); + font-size: var(--font-size-sm, 13px); } .error-strip-msg { flex: 1; @@ -283,42 +307,34 @@ flex-shrink: 0; min-height: 32px; padding: 4px 10px; - border: 1px solid var(--error); + border: 1px solid var(--fault, var(--error, #c41e1e)); + border-radius: var(--radius, 2px); background: transparent; - color: var(--error); + color: var(--fault, var(--error, #c41e1e)); cursor: pointer; - font-family: var(--font-mono); - font-size: var(--font-size-xs); - text-transform: uppercase; + font-family: inherit; + font-size: 13px; + text-transform: none; } .error-strip-dismiss:hover { - background: rgba(196, 92, 92, 0.12); + background: color-mix(in srgb, var(--fault, #c41e1e) 12%, transparent); } .notification { position: fixed; - top: 12px; - right: 12px; - padding: 6px 12px; - font-size: var(--font-size-sm); + top: 16px; + right: 16px; + padding: 12px 16px; + font-size: 13px; + font-weight: 500; z-index: 1000; - background: var(--bg-raised); - border: 1px solid var(--border); - color: var(--text-primary); - animation: slideIn 0.15s ease-out; + background: var(--surface-2, var(--bg-raised, #111)); + border: 1px solid var(--border, #2a2a2a); + border-radius: var(--radius, 2px); + color: var(--text, var(--text-bright, #f5f5f5)); + max-width: min(360px, calc(100vw - 2rem)); } .notification.error { - border-color: var(--error); - color: var(--error); - } - .notification.info { - border-color: var(--border); - } - .notif-icon { - margin-right: 6px; - font-weight: 700; - } - @keyframes slideIn { - from { transform: translateX(100%); opacity: 0; } - to { transform: translateX(0); opacity: 1; } + border-color: var(--fault, var(--error, #c41e1e)); + color: var(--fault, var(--error, #c41e1e)); } diff --git a/client/frontend/src/app.css b/client/frontend/src/app.css index 8e245a1..b334195 100644 --- a/client/frontend/src/app.css +++ b/client/frontend/src/app.css @@ -1,4 +1,5 @@ @import './space.css'; +@import './connected.css'; @font-face { font-family: 'Bungee'; @@ -32,7 +33,6 @@ --error: #c45c5c; --focus-ring: #f0f0f0; --sidebar-width: 220px; - --statusbar-height: 28px; --font-display: 'Bungee', ui-sans-serif, system-ui, sans-serif; --font-mono: ui-monospace, 'Cascadia Code', 'SF Mono', Consolas, 'Liberation Mono', monospace; --font-size: 12px; diff --git a/client/frontend/src/assets/fonts/bricolage-latin-400.woff2 b/client/frontend/src/assets/fonts/bricolage-latin-400.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ccc73da04295079bc844d0230e766cb622944c7f GIT binary patch literal 22364 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 H@rBy~ld

    1. 7WCS1ugE|L^a}0wt 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

      75CNIK|LQ=k&v}yD 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 Wm+jZ3c#rX>OWE+pg-nQ{F3fEmM~x%^ literal 0 HcmV?d00001 diff --git a/client/frontend/src/assets/fonts/ibm-plex-serif-latin-400-italic.woff2 b/client/frontend/src/assets/fonts/ibm-plex-serif-latin-400-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..5645b4d3b1cef856af5cf74d3843c04e40dcc31b GIT binary patch literal 20864 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 import { afterUpdate } from 'svelte' import { - chatMessages, chatTarget, status, view, settings, + chatMessages, chatTarget, status, chatOpen, settings, addNotification, addChatMessage, updateMessageStatus, markThreadRead, activeThreadKey } from '../stores/app.js' import { t, fmt } from '../locales/index.js' @@ -12,7 +12,7 @@ let isNearBottom = true $: { - if ($view === 'chat') { + if ($chatOpen) { markThreadRead(activeThreadKey()) } } @@ -116,8 +116,7 @@ } function closeChat() { - chatTarget.set(null) - view.set('network') + chatOpen.set(false) } $: title = $chatTarget @@ -127,17 +126,19 @@

      -
      - - {title} +
      +
      + {$t.chat} +

      {title}

      +
      +
      {#if $chatMessages.length === 0} -
      -
      [ . . . ]
      -
      {$t.no_messages}
      -
      {$t.no_messages_desc}
      +
      +
      {$t.no_messages}
      +

      {$t.no_messages_desc}

      {/if} {#each $chatMessages as msg, i (msg.id)} @@ -147,8 +148,9 @@ {#if msg.system}
      {msg.message}
      {:else} -
      +
      + {new Date(msg.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false })} {msg.isSelf ? ($settings.nickname || $t.you_self) : msg.nickname} {#if msg.status === 'pending'}{/if} {#if msg.status === 'failed'} @@ -161,17 +163,18 @@ {/each}
      -
      +
      - +
      @@ -180,114 +183,112 @@ display: flex; flex-direction: column; height: 100%; + flex: 1; + padding: 12px 14px 12px; + min-height: 0; + background: var(--surface); } - .chat-header { + .section-head { display: flex; - align-items: center; - gap: 10px; - padding: 12px 16px; + align-items: flex-end; + justify-content: space-between; + gap: 12px; + margin-bottom: 8px; + padding-bottom: 10px; border-bottom: 1px solid var(--border); - background: var(--bg-surface); - } - .back-btn { - width: 28px; - height: 28px; - display: flex; - align-items: center; - justify-content: center; - background: transparent; - border: 1px solid var(--border); - color: var(--text-secondary); - cursor: pointer; - font-family: var(--font-mono); + flex-shrink: 0; } - .chat-title { - color: var(--text-bright); - font-size: var(--font-size); + .section-head h2 { + font-size: 1.05rem; + font-weight: 600; + letter-spacing: -0.03em; + color: var(--text); + margin: 2px 0 0; } .chat-messages { flex: 1; overflow-y: auto; - padding: 16px; min-height: 0; + padding: 4px 0 12px; + font-family: var(--font-mono); + font-size: 12px; } - .empty-chat { - text-align: center; - padding: 40px 16px; - color: var(--text-muted); + .empty { + padding: 12px 2px; + color: var(--muted); + font-family: var(--font-sans); + } + .empty-label { color: var(--text); margin-bottom: 4px; font-weight: 500; } + .empty-desc { + font-family: var(--font-serif); + font-style: italic; + font-size: 13px; + margin: 0; } - .empty-chat-label { color: var(--text-secondary); margin: 8px 0 4px; } - .empty-chat-desc { font-size: var(--font-size-xs); } .date-sep { - text-align: center; - font-size: var(--font-size-xs); - color: var(--text-dim); - margin: 12px 0; + text-align: left; + font-size: 10px; + letter-spacing: 0.12em; + text-transform: uppercase; + color: var(--muted); + margin: 14px 0 8px; + font-family: var(--font-sans); } .system-line { - text-align: center; - font-size: var(--font-size-xs); - color: var(--text-muted); - margin: 8px 0; + font-size: 12px; + color: var(--muted); + margin: 6px 0; } .msg { - margin-bottom: 10px; - max-width: 80%; + margin-bottom: 8px; } - .msg.self { margin-left: auto; text-align: right; } .msg-meta { - font-size: var(--font-size-xs); - color: var(--text-muted); + font-size: 11px; + color: var(--muted); margin-bottom: 2px; + display: flex; + gap: 8px; + align-items: baseline; } + .msg.self .msg-nick { color: var(--text); } + .msg-time { color: var(--text-dim); } + .msg-nick { color: var(--text); font-weight: 500; } .msg-body { - display: inline-block; - padding: 8px 10px; - background: var(--bg-raised); - border: 1px solid var(--border); - color: var(--text-primary); + color: var(--text); white-space: pre-wrap; word-break: break-word; - text-align: left; - } - .msg.self .msg-body { - background: var(--bg-active); + line-height: 1.45; } + .msg.failed .msg-body { color: var(--fault); } .retry-btn { - margin-left: 6px; + margin-left: auto; background: transparent; border: none; - color: var(--error); + color: var(--fault); cursor: pointer; - font-size: var(--font-size-xs); + font-size: 11px; + font-family: inherit; } - .chat-input-area { + .composer { display: flex; gap: 8px; - padding: 12px 16px; + padding: 10px 0 0; border-top: 1px solid var(--border); - background: var(--bg-surface); + flex-shrink: 0; + align-items: flex-end; } textarea { flex: 1; resize: none; - background: var(--bg-raised); + background: var(--bg); border: 1px solid var(--border); - color: var(--text-primary); + border-radius: var(--radius); + color: var(--text); padding: 8px 10px; - font-family: var(--font-mono); - font-size: var(--font-size); - min-height: 36px; + font-family: var(--font-sans); + font-size: 14px; + min-height: 40px; + line-height: 1.4; } textarea:disabled { opacity: 0.5; } - .send-btn { - background: var(--accent); - color: var(--accent-ink); - border: none; - padding: 0 16px; - cursor: pointer; - font-family: var(--font-mono); - text-transform: uppercase; - } - .send-btn:disabled { opacity: 0.4; cursor: not-allowed; } diff --git a/client/frontend/src/lib/components/ConfirmDialog.svelte b/client/frontend/src/lib/components/ConfirmDialog.svelte new file mode 100644 index 0000000..d96db05 --- /dev/null +++ b/client/frontend/src/lib/components/ConfirmDialog.svelte @@ -0,0 +1,82 @@ + + +{#if open} + +{/if} + + diff --git a/client/frontend/src/lib/components/PeerList.svelte b/client/frontend/src/lib/components/PeerList.svelte index 8107a91..7769360 100644 --- a/client/frontend/src/lib/components/PeerList.svelte +++ b/client/frontend/src/lib/components/PeerList.svelte @@ -1,23 +1,24 @@
      -
      -

      {$status.room || $t.network}

      - +
      +
      + {$t.channels} +

      {$status.room || $t.peers_list}

      +
      {#if $status.room} - {/if} - {#if anyRelay} - {$t.status_relay_degraded} - {/if}
      + {#if pathAggregate === 'relay'} +

      {$t.status_relay_degraded}

      + {/if} -
      -
      - - {$t.col_nickname} - {$t.col_ip} - {$t.col_ping} - {$t.col_path} - +
      + +
      +
      + {chIndex(0)} +
      + {$settings.nickname || $t.you} + {$t.me} +
      + + {$t.path_unknown} + + +
      -
      - - - {$t.status_online} - - - {$settings.nickname || $t.you} - {$t.me} - - copyIP($status.virtualIP)} - on:keydown={(e) => onIpKey(e, $status.virtualIP)} - >{$status.virtualIP || $t.na} - - - - - -
      - - {#each sortedPeers as peer (peer.id)} -
      - - - {peer.connected ? $t.status_online : $t.status_offline} - - - {peer.nickname || peer.id} - {#if peerUnread(peer.id) > 0}{peerUnread(peer.id)}{/if} - - copyIP(peer.virtualIP)} - on:keydown={(e) => onIpKey(e, peer.virtualIP)} - >{peer.virtualIP || $t.na} - - {#if !peer.connected} - - - {:else if peer.ping >= 0 && !pinging[peer.id]} - {peer.ping}ms - {:else} - ... - {/if} - - {peer.path ? pathLabel(peer.path) : $t.path_unknown} - - + {#each sortedPeers as peer, i (peer.id)} + {@const kind = peerDot(peer)} +
      + {chIndex(i + 1)} +
      + {peer.nickname || peer.id} + {#if peerUnread(peer.id) > 0}{peerUnread(peer.id)}{/if} +
      - -
      - {:else} -
      -
      [ . . . ]
      -
      {$t.no_peers}
      -
      {$t.no_peers_desc}
      -
      - {/each} + type="button" + class="peer-ip" + on:click={() => copyIP(peer.virtualIP)} + on:keydown={(e) => onIpKey(e, peer.virtualIP)} + >{peer.virtualIP || $t.na} + + + {peer.connected && peer.path ? pathLabel(peer.path) : $t.path_unknown} + + + {#if !peer.connected} + — + {:else if peer.ping >= 0 && !pinging[peer.id]} + {peer.ping}ms + {:else} + … + {/if} + +
      + + +
      + + {:else} +
      +
      {$t.no_peers}
      +

      {$t.no_peers_desc}

      +
      + {/each} +
      @@ -181,144 +194,176 @@ display: flex; flex-direction: column; height: 100%; + padding: 12px 16px 20px; + overflow: auto; + min-height: 0; } - .peer-header { - padding: 12px 16px; - border-bottom: 1px solid var(--border); + .section-head { display: flex; - align-items: center; - gap: 10px; - background: var(--bg-surface); - flex-wrap: wrap; + align-items: flex-end; + justify-content: space-between; + gap: 12px; + margin-bottom: 10px; } - .peer-header h2 { - font-size: var(--font-size); - font-weight: 500; - color: var(--text-bright); - text-transform: uppercase; - letter-spacing: 0.5px; + .section-head h2 { + font-size: 1.05rem; + font-weight: 600; + letter-spacing: -0.03em; + color: var(--text); + margin: 2px 0 0; } - .ip-badge { - padding: 4px 8px; - min-height: 28px; - background: var(--bg-raised); - font-size: var(--font-size-xs); - font-family: var(--font-mono); - color: var(--text-secondary); - border: 1px solid var(--border); - cursor: pointer; + .section-hint { + color: var(--muted); + font-size: 13px; + margin: 0 0 10px; } - .ip-badge:hover { border-color: var(--border-hover); color: var(--text-bright); } - .room-chat-btn { - margin-left: auto; - background: transparent; - border: 1px solid var(--border); - color: var(--text-secondary); - font-family: var(--font-mono); - font-size: var(--font-size-xs); - padding: 6px 10px; - min-height: 32px; - cursor: pointer; + .section-hint.fault { color: var(--fault); } + .scope-face { position: relative; - } - .room-chat-btn:hover { color: var(--text-bright); border-color: var(--border-hover); } - .relay-hint { - font-size: var(--font-size-xs); - color: var(--text-muted); - } - .badge { - display: inline-block; - min-width: 14px; - padding: 0 4px; - margin-left: 4px; - background: var(--accent); - color: var(--accent-ink); - font-size: 10px; - line-height: 14px; - text-align: center; - } - .peer-table { flex: 1; - overflow: auto; min-height: 0; - min-width: 0; + border: 1px solid var(--border); + background-color: var(--bg); + background-image: + repeating-linear-gradient( + to right, + var(--graticule) 0 1px, + transparent 1px 48px + ), + repeating-linear-gradient( + to bottom, + var(--graticule) 0 1px, + transparent 1px 28px + ); } - .table-row { + .channel-head, + .peer-row { display: grid; - grid-template-columns: minmax(56px, 72px) minmax(72px, 1fr) minmax(88px, 110px) minmax(48px, 70px) minmax(52px, 72px) minmax(64px, 80px); - gap: 8px; + grid-template-columns: 36px minmax(0, 1.3fr) 118px 128px 56px auto; + gap: 10px; align-items: center; - padding: 10px 16px; - min-height: 40px; - border-bottom: 1px solid var(--border-deep); - font-size: var(--font-size-sm); - min-width: 520px; - } - .table-header-row { - color: var(--text-muted); + padding: 0 12px; + } + .channel-head { + min-height: 28px; + border-bottom: 1px solid var(--border); + background: color-mix(in srgb, var(--surface) 82%, transparent); + font-size: 10px; + font-weight: 500; + letter-spacing: 0.12em; text-transform: uppercase; - font-size: var(--font-size-xs); - letter-spacing: 0.4px; + color: var(--muted); + } + .stack { + display: flex; + flex-direction: column; + } + .peer-row { + min-height: 44px; + border-bottom: 1px solid var(--border); + background: color-mix(in srgb, var(--bg) 55%, transparent); + } + .self-row { opacity: 0.88; } + .ch { + font-family: var(--font-mono); + font-size: 11px; + color: var(--muted); + } + .nickname { + color: var(--text); + font-weight: 500; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } - .self-row { background: var(--bg-surface); } - .nickname { color: var(--text-bright); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .self-tag { margin-left: 6px; - font-size: var(--font-size-xs); - color: var(--text-muted); + font-size: 11px; + color: var(--muted); + font-weight: 400; + letter-spacing: 0.06em; + text-transform: uppercase; } - .col-ip, .col-ping, .col-path { + .peer-ip { font-family: var(--font-mono); - color: var(--text-secondary); + font-size: 12px; + color: var(--muted); + background: none; + border: 0; + padding: 0; + cursor: pointer; + text-align: left; } - .col-ping.probing { color: var(--text-bright); } - .clickable { cursor: pointer; } - .clickable:hover { color: var(--text-bright); } - .status-cell { - display: flex; + .peer-ip:hover { color: var(--text); } + .col-ping { + font-family: var(--font-mono); + font-size: 12px; + color: var(--muted); + } + .col-ping.probing { color: var(--text); } + .col-path { + display: inline-flex; align-items: center; gap: 6px; + font-size: 12px; + font-weight: 500; + font-family: var(--font-mono); + color: var(--muted); + min-width: 0; } - .status-text { - font-size: var(--font-size-xs); - color: var(--text-secondary); - } - .sq { - width: 8px; - height: 8px; - display: inline-block; + .col-path.live { color: var(--live); } + .col-path.fault { color: var(--fault); } + .col-path.idle { color: var(--muted); } + .trace { + width: 36px; + height: 10px; flex-shrink: 0; } - .sq-online { background: var(--success); } - .sq-offline { background: var(--text-dim); } - .col-action { + .trace line, + .trace circle { + fill: currentColor; + stroke: currentColor; + stroke-width: 1; + } + .peer-actions { display: flex; - gap: 2px; + gap: 6px; justify-content: flex-end; } - .row-btn { - background: transparent; - border: none; - color: var(--text-muted); - cursor: pointer; - font-family: var(--font-mono); - min-width: 32px; - min-height: 32px; - padding: 0; + .badge { + display: inline-block; + min-width: 16px; + padding: 0 5px; + margin-left: 6px; + background: var(--fault); + color: #fff; + font-size: 10px; + line-height: 16px; + text-align: center; + border-radius: var(--radius); } - .row-btn:hover:not(:disabled) { color: var(--text-bright); } - .row-btn:disabled { - opacity: 0.35; - cursor: not-allowed; + .empty { + padding: 20px 12px; + color: var(--muted); + background: color-mix(in srgb, var(--bg) 70%, transparent); } - .empty-peers { - padding: 48px 24px; - text-align: center; - color: var(--text-muted); + .empty-label { color: var(--text); margin-bottom: 4px; font-weight: 500; } + .empty-desc { + font-family: var(--font-serif); + font-style: italic; + font-size: 13px; + margin: 0; + } + .btn-sm { + min-height: 28px; + padding: 4px 10px; + font-size: 12px; } - .empty-label { - color: var(--text-secondary); - margin: 8px 0 4px; + @media (max-width: 720px) { + .channel-head, .peer-row { grid-template-columns: 28px minmax(0, 1fr) auto; } + .channel-head span:nth-child(3), + .channel-head span:nth-child(4), + .channel-head span:nth-child(5), + .peer-ip, .col-path, .col-ping { display: none; } } - .empty-desc { font-size: var(--font-size-xs); } diff --git a/client/frontend/src/lib/components/SettingsView.svelte b/client/frontend/src/lib/components/SettingsView.svelte index 16909ea..fa95410 100644 --- a/client/frontend/src/lib/components/SettingsView.svelte +++ b/client/frontend/src/lib/components/SettingsView.svelte @@ -2,6 +2,8 @@ import { onMount } from 'svelte' import { settings, addNotification } from '../stores/app.js' import { t, setLang, currentLang, fmt } from '../locales/index.js' + import ThemeToggle from './ThemeToggle.svelte' + import ConfirmDialog from './ConfirmDialog.svelte' let cfg = { ...$settings } let version = '1.0.0' @@ -10,6 +12,7 @@ let updateStatus = '' // '', 'checking', 'latest', 'available', 'downloading', 'error' let updateLatest = '' let updateError = '' + let pending = null async function checkForUpdate() { updateBusy = true @@ -34,18 +37,23 @@ } async function applyUpdate() { - if (!confirm($t.confirm_update)) return - updateBusy = true - updateStatus = 'downloading' - updateError = '' - try { - await window.go.main.App.ApplyUpdate() - addNotification($t.notif_updating, 'info') - } catch (e) { - updateStatus = 'error' - updateError = String(e) - updateBusy = false - addNotification($t.error_update + e, 'error') + pending = { + message: $t.confirm_update, + confirmLabel: $t.apply_update, + run: async () => { + updateBusy = true + updateStatus = 'downloading' + updateError = '' + try { + await window.go.main.App.ApplyUpdate() + addNotification($t.notif_updating, 'info') + } catch (e) { + updateStatus = 'error' + updateError = String(e) + updateBusy = false + addNotification($t.error_update + e, 'error') + } + }, } } @@ -64,15 +72,21 @@ } async function resetDefaults() { - if (!confirm($t.confirm_reset)) return - try { - cfg = await window.go.main.App.ResetSettings() - $settings = { ...cfg } - needsReconnect = false - if (cfg.lang) setLang(cfg.lang) - addNotification($t.notif_settings_saved, 'info') - } catch (e) { - addNotification($t.error_save + e, 'error') + pending = { + message: $t.confirm_reset, + confirmLabel: $t.reset, + danger: true, + run: async () => { + try { + cfg = await window.go.main.App.ResetSettings() + $settings = { ...cfg } + needsReconnect = false + if (cfg.lang) setLang(cfg.lang) + addNotification($t.notif_settings_saved, 'info') + } catch (e) { + addNotification($t.error_save + e, 'error') + } + }, } } @@ -87,17 +101,24 @@ setLang(e.target.value) } - function onThemeChange() { - $settings = { ...$settings, theme: cfg.theme } + $: if ($settings.theme && cfg.theme !== $settings.theme) { + cfg.theme = $settings.theme + } + + let open = { connection: true, network: false, system: false, appearance: true } + + function toggle(key) { + open = { ...open, [key]: !open[key] } } onMount(async () => { try { const saved = await window.go.main.App.GetSettings() if (saved) { - cfg = { ...cfg, ...saved } + const theme = $settings.theme || saved.theme + cfg = { ...cfg, ...saved, theme } if (!cfg.connectionMode) cfg.connectionMode = 'direct' - $settings = cfg + $settings = { ...cfg, theme } if (cfg.lang) setLang(cfg.lang) } if (window.go.main.App.GetVersion) { @@ -108,272 +129,315 @@
      -

      {$t.settings_title}

      +
      +
      + {$t.settings} +

      {$t.settings_title}

      +
      + v{version} +
      {#if needsReconnect}

      {$t.notif_reconnect_required}

      {/if} -
      -
      ─── {$t.section_connection} ───
      - -
      - - -
      - -
      - - -
      -
      - - +
      +
      +
      -

      {$t.reconnect_apply}

      - - - - -
      - -
      -
      ─── {$t.section_network} ───
      -

      {$t.advanced_warn}

      - -
      - - +
      +
      +
      +
      + + +
      +
      + + +
      +
      + + +
      +

      {$t.reconnect_apply}

      + + +
      +
      -

      {$t.connection_mode_desc}

      + -
      - - +
      +
      +
      -

      {$t.mtu_desc}

      - -
      - - +
      +
      +
      +

      {$t.advanced_warn}

      +
      + + +
      +

      {$t.connection_mode_desc}

      +
      + + +
      +

      {$t.mtu_desc}

      +
      + + +
      +

      {$t.dns_desc}

      +
      + + +
      +

      {$t.socks5_desc}

      +
      + + +
      +

      {$t.stun_desc}

      +
      +
      -

      {$t.dns_desc}

      +
      -
      - - +
      +
      +
      -

      {$t.socks5_desc}

      - -
      - - +
      +
      +
      + +
      + {$t.updates} + + {#if updateStatus === 'available'} + + {/if} +
      + {#if updateStatus === 'checking'} +

      {$t.update_checking}

      + {:else if updateStatus === 'latest'} +

      {$t.update_latest}

      + {:else if updateStatus === 'available'} +

      {fmt($t.update_available, { v: updateLatest })}

      + {:else if updateStatus === 'downloading'} +

      {$t.update_downloading}

      + {:else if updateStatus === 'error' && updateError} +

      {$t.update_failed}: {updateError}

      + {/if} +
      +
      -

      {$t.stun_desc}

      -
      - -
      -
      ─── {$t.section_system} ───
      +
      - - -
      - {$t.updates} - - {#if updateStatus === 'available'} - - {/if} -
      - {#if updateStatus === 'checking'} -

      {$t.update_checking}

      - {:else if updateStatus === 'latest'} -

      {$t.update_latest}

      - {:else if updateStatus === 'available'} -

      {fmt($t.update_available, { v: updateLatest })}

      - {:else if updateStatus === 'downloading'} -

      {$t.update_downloading}

      - {:else if updateStatus === 'error' && updateError} -

      {$t.update_failed}: {updateError}

      - {/if} -
      - -
      -
      ─── {$t.section_appearance} ───
      - -
      - - - {cfg.uiScale ?? 100}%
      -

      {$t.ui_scale_desc}

      - -
      - {$t.theme} -
      - - +
      +
      +
      +
      + +
      + + {cfg.uiScale ?? 100}% +
      +
      +

      {$t.ui_scale_desc}

      +
      + {$t.theme} + +
      +
      + + +
      +
      - -
      - - -
      +
      -
      - - -
      v{version}
      +
      + +
      -
      + + { + const run = pending?.run + pending = null + if (run) await run() + }} + onCancel={() => (pending = null)} +/> diff --git a/client/frontend/src/lib/components/Sidebar.svelte b/client/frontend/src/lib/components/Sidebar.svelte index 8eec7ea..edef38a 100644 --- a/client/frontend/src/lib/components/Sidebar.svelte +++ b/client/frontend/src/lib/components/Sidebar.svelte @@ -1,7 +1,8 @@ - -
      -
      - - {statusLabel} - {#if anyRelay && $status.connected} - {$t.status_relay_degraded} - {/if} -
      -
      - {#if $status.server} - {fmt($t.status_server, { s: $status.server })} - {/if} - {#if $status.virtualIP} - {fmt($t.status_ip, { ip: $status.virtualIP })} - {/if} - {#if $status.room} - {fmt($t.status_network, { room: $status.room })} - {/if} - {#if $status.peerCount !== undefined} - {fmt($t.status_peers, { n: $status.peerCount })} - {/if} - {fmt($t.version, { v: version })} -
      -
      - - diff --git a/client/frontend/src/lib/components/ThemeToggle.svelte b/client/frontend/src/lib/components/ThemeToggle.svelte new file mode 100644 index 0000000..6b767ef --- /dev/null +++ b/client/frontend/src/lib/components/ThemeToggle.svelte @@ -0,0 +1,45 @@ + + + diff --git a/client/frontend/src/lib/components/Topbar.svelte b/client/frontend/src/lib/components/Topbar.svelte new file mode 100644 index 0000000..e026cb2 --- /dev/null +++ b/client/frontend/src/lib/components/Topbar.svelte @@ -0,0 +1,191 @@ + + +
      +
      + + +
      + {$t.col_path} + + + {pathLabel} + +
      +
      + {$t.peers_list} + {$status.peerCount} +
      +
      + + + +
      +
      +
      + + (askDisconnect = false)} +/> + + diff --git a/client/frontend/src/lib/locales/en.js b/client/frontend/src/lib/locales/en.js index 21406d4..4793802 100644 --- a/client/frontend/src/lib/locales/en.js +++ b/client/frontend/src/lib/locales/en.js @@ -43,6 +43,9 @@ export default { phase_error: "Error", room_chat: "Room Chat", chat: "Chat", + close_chat: "Close", + channels: "Channels", + col_ch: "Ch", col_nickname: "Nickname", col_ip: "Virtual IP", col_ping: "Ping", @@ -64,6 +67,7 @@ export default { me: "me", no_peers: "No peers connected", no_peers_desc: "Create or join a network, then wait for friends", + peers_list: "Peers", network: "Network", chat_with: "Chat with {name}", room_chat_title: "Room Chat — {room}", @@ -82,16 +86,17 @@ export default { status_disconnected: "Disconnected", status_reconnecting: "Reconnecting…", status_relay_degraded: "Some peers on relay", + status_direct: "Direct", status_server: "Server: {s}", status_ip: "IP: {ip}", status_network: "Network: {room}", status_peers: "Peers: {n}", version: "Entangled v{v}", settings_title: "Settings", - section_connection: "CONNECTION", - section_network: "ADVANCED NETWORK", - section_system: "SYSTEM", - section_appearance: "APPEARANCE", + section_connection: "Connection", + section_network: "Advanced network", + section_system: "System", + section_appearance: "Appearance", advanced_warn: "Only change these if you know what they do.", reconnect_apply: "Reconnect to apply", auto_connect: "Auto Connect", @@ -130,8 +135,8 @@ export default { theme_dark: "Dark", theme_light: "Light", language: "Language", - save: "SAVE", - reset: "RESET TO DEFAULTS", + save: "Save", + reset: "Reset to defaults", language_en: "English", language_ru: "Russian", language_zh: "Chinese", diff --git a/client/frontend/src/lib/locales/ru.js b/client/frontend/src/lib/locales/ru.js index c065042..a57083d 100644 --- a/client/frontend/src/lib/locales/ru.js +++ b/client/frontend/src/lib/locales/ru.js @@ -43,6 +43,9 @@ export default { phase_error: "Ошибка", room_chat: "Чат комнаты", chat: "Чат", + close_chat: "Закрыть", + channels: "Каналы", + col_ch: "Кн", col_nickname: "Псевдоним", col_ip: "Виртуальный IP", col_ping: "Пинг", @@ -64,6 +67,7 @@ export default { me: "я", no_peers: "Нет подключённых участников", no_peers_desc: "Создайте или войдите в сеть и дождитесь друзей", + peers_list: "Участники", network: "Сеть", chat_with: "Чат с {name}", room_chat_title: "Чат комнаты — {room}", @@ -82,16 +86,17 @@ export default { status_disconnected: "Отключено", status_reconnecting: "Переподключение…", status_relay_degraded: "Часть пиров через релей", + status_direct: "Прямое", status_server: "Сервер: {s}", status_ip: "IP: {ip}", status_network: "Сеть: {room}", status_peers: "Участники: {n}", version: "Entangled v{v}", settings_title: "Настройки", - section_connection: "ПОДКЛЮЧЕНИЕ", - section_network: "ДОП. СЕТЬ", - section_system: "СИСТЕМА", - section_appearance: "ВНЕШНИЙ ВИД", + section_connection: "Подключение", + section_network: "Доп. сеть", + section_system: "Система", + section_appearance: "Внешний вид", advanced_warn: "Меняйте только если понимаете, что делаете.", reconnect_apply: "Переподключитесь, чтобы применить", auto_connect: "Автоподключение", @@ -130,8 +135,8 @@ export default { theme_dark: "Тёмная", theme_light: "Светлая", language: "Язык", - save: "СОХРАНИТЬ", - reset: "СБРОСИТЬ", + save: "Сохранить", + reset: "Сбросить", language_en: "Английский", language_ru: "Русский", language_zh: "Китайский", diff --git a/client/frontend/src/lib/locales/zh.js b/client/frontend/src/lib/locales/zh.js index fb52d3e..7930513 100644 --- a/client/frontend/src/lib/locales/zh.js +++ b/client/frontend/src/lib/locales/zh.js @@ -43,6 +43,9 @@ export default { phase_error: "错误", room_chat: "房间聊天", chat: "聊天", + close_chat: "关闭", + channels: "通道", + col_ch: "通", col_nickname: "昵称", col_ip: "虚拟 IP", col_ping: "延迟", @@ -64,6 +67,7 @@ export default { me: "我", no_peers: "暂无连接的节点", no_peers_desc: "创建或加入网络,然后等待好友", + peers_list: "节点", network: "网络", chat_with: "与 {name} 聊天", room_chat_title: "房间聊天 — {room}", @@ -82,6 +86,7 @@ export default { status_disconnected: "已断开", status_reconnecting: "重新连接…", status_relay_degraded: "部分节点经中继", + status_direct: "直连", status_server: "服务器: {s}", status_ip: "IP: {ip}", status_network: "网络: {room}", diff --git a/client/frontend/src/lib/sim.js b/client/frontend/src/lib/sim.js new file mode 100644 index 0000000..b67b17e --- /dev/null +++ b/client/frontend/src/lib/sim.js @@ -0,0 +1,169 @@ +import { status, view, peers, settings, addChatMessage } from './stores/app.js' + +const SIM = import.meta.env.DEV && !window.go +const jumpConnected = SIM && new URLSearchParams(location.search).has('connected') + +const cfg = { + serverAddr: 'sim.local:8080', + nickname: 'Ada', + autoConnect: false, + autoJoinLastRoom: false, + startWithWindows: false, + connectionMode: 'direct', + mtu: 1500, + dnsServer: '', + socks5Proxy: '', + stunServer: 'stun.l.google.com:19302', + uiScale: 100, + theme: 'dark', + lang: 'en', + serverToken: '', +} + +let rooms = [ + { name: 'nightwatch', password: '', server: 'sim.local:8080', locked: false }, + { name: 'lan-party', password: 'secret', server: 'sim.local:8080', locked: true }, +] + +const simPeers = [ + { + id: 'peer-bob', + nickname: 'Bob', + virtualIP: '10.242.0.3', + connected: true, + ping: 18, + path: 'p2p', + }, + { + id: 'peer-cy', + nickname: 'Cy', + virtualIP: '10.242.0.4', + connected: true, + ping: 84, + path: 'relay', + }, +] + +function connectedStatus(room = 'nightwatch') { + return { + connected: true, + reconnecting: false, + server: 'sim.local:8080', + room, + virtualIP: '10.242.0.2', + peerCount: simPeers.filter((p) => p.connected).length, + isOwner: room === 'nightwatch', + phase: 'ready', + } +} + +function enterConnected(room) { + status.set(connectedStatus(room)) + peers.set(simPeers.map((p) => ({ ...p }))) + view.set('network') +} + +if (SIM) { + window.go = { + main: { + App: { + LoadConfig: async () => ({ ...cfg }), + GetSettings: async () => ({ ...cfg }), + SaveSettings: async (next) => { + Object.assign(cfg, next) + return false + }, + ResetSettings: async () => { + cfg.theme = 'dark' + cfg.uiScale = 100 + cfg.lang = 'en' + return { ...cfg } + }, + GetVersion: async () => '1.3.1-sim', + GetSavedRooms: async () => rooms.slice(), + CreateRoom: async (name, password) => { + rooms = [...rooms, { name, password: password || '', server: cfg.serverAddr, locked: !!password }] + enterConnected(name) + }, + JoinRoom: async (name) => { + enterConnected(name) + }, + LeaveRoom: async () => { + status.set({ ...connectedStatus(''), room: '', peerCount: 0, isOwner: false, connected: true }) + }, + RemoveSavedRoom: async (name) => { + rooms = rooms.filter((r) => r.name !== name) + }, + DeleteRoom: async (name) => { + rooms = rooms.filter((r) => r.name !== name) + status.set({ ...connectedStatus(''), room: '', peerCount: 0, isOwner: false, connected: true }) + }, + FormatInvite: async (name, password) => `sim.local:8080|${name}|${password || ''}`, + ParseInvite: async (raw) => { + const [server, room, password] = String(raw).split('|') + return { server, room, password } + }, + CopyText: async (text) => { + try { + await navigator.clipboard.writeText(String(text)) + } catch (_) {} + }, + Connect: async (serverAddr, nickname) => { + cfg.serverAddr = serverAddr + cfg.nickname = nickname + const s = connectedStatus('nightwatch') + s.server = serverAddr + peers.set(simPeers.map((p) => ({ ...p }))) + return s + }, + Disconnect: async () => { + status.set({ + connected: false, + reconnecting: false, + server: '', + room: '', + virtualIP: '', + peerCount: 0, + isOwner: false, + phase: 'idle', + }) + peers.set([]) + }, + SendChat: async (peerId, message) => { + const peer = simPeers.find((p) => p.id === peerId) + if (peer) { + addChatMessage(peer.id, peer.nickname, `ack: ${message}`, false, 'sent', false, true) + } + }, + BroadcastChat: async (message) => { + const peer = simPeers[0] + if (peer) { + addChatMessage(peer.id, peer.nickname, `heard: ${message}`, false, 'sent', false, false) + } + }, + PingPeer: async (peerId) => { + const i = simPeers.findIndex((p) => p.id === peerId) + if (i >= 0) { + simPeers[i] = { ...simPeers[i], ping: 12 + Math.floor(Math.random() * 40) } + peers.set(simPeers.map((p) => ({ ...p }))) + } + }, + CheckForUpdate: async () => ({ available: false, latest: '1.3.1-sim' }), + ApplyUpdate: async () => {}, + }, + }, + } + window.runtime = { + EventsOn() {}, + EventsOff() {}, + WindowIsFullscreen: async () => false, + WindowFullscreen() {}, + WindowUnfullscreen() {}, + } + + settings.set({ ...cfg }) + if (jumpConnected) { + enterConnected() + addChatMessage('peer-bob', 'Bob', 'Sim is live — tweak away.', false, 'sent') + } +} diff --git a/client/frontend/src/lib/stores/app.js b/client/frontend/src/lib/stores/app.js index c3ab8f6..1f735e7 100644 --- a/client/frontend/src/lib/stores/app.js +++ b/client/frontend/src/lib/stores/app.js @@ -24,6 +24,7 @@ export const status = writable({ export const peers = writable([]) export const view = writable('connect') +export const chatOpen = writable(false) export const notifications = writable([]) export const durableError = writable(null) export const chatThreads = writable({}) @@ -97,9 +98,8 @@ export function addChatMessage(fromID, nickname, message, isSelf = false, delive } }) - const viewing = get(view) const active = activeThreadKey() - if (!isSelf && !(viewing === 'chat' && storeKey === active)) { + if (!isSelf && !(get(chatOpen) && storeKey === active)) { unread.update(u => ({ ...u, [storeKey]: (u[storeKey] || 0) + 1 })) } } diff --git a/client/frontend/src/main.js b/client/frontend/src/main.js index 5bb8247..9b81b96 100644 --- a/client/frontend/src/main.js +++ b/client/frontend/src/main.js @@ -1,3 +1,4 @@ +import './lib/sim.js' import App from './App.svelte' import './app.css' From a2535d14f40634f64354041398b73eeb4a652ef3 Mon Sep 17 00:00:00 2001 From: Warexpor Date: Fri, 21 Aug 2026 22:44:48 +0300 Subject: [PATCH 2/4] Apply PRODUCT-safe connected-shell finish fixes after the signal-bench review. Open the chat pane on enterConnected and Connect/Join, close it on disconnect so ?connected=1 matches Comp A. Add a tracked Entangled wordmark, a 7-tick PATH bar from pathAggregate, and a RELAY count from connected relay/ws peers. Enlarge VIP and PATH type with existing IBM Plex Mono. Swap Unicode craft icons for stroke SVG. Drop section-head kickers. Dismissed from the review (not in code): Comp A footer crypto/engine/throughput claims (PRODUCT forbids inventing crypto; chrome stays one row), a new VFD/seven-segment webfont (scale existing mono instead), extra chromatic accents beyond --live/--fault. --- client/frontend/dist/assets/index-BKDyV7g3.js | 1 + .../frontend/dist/assets/index-B_zURlVB.css | 1 - .../frontend/dist/assets/index-CoV4PMmG.css | 1 + client/frontend/dist/assets/index-D0bYtgrH.js | 1 - client/frontend/dist/index.html | 4 +- client/frontend/src/App.svelte | 4 +- client/frontend/src/connected.css | 6 +- .../src/lib/components/ChatView.svelte | 9 +-- .../src/lib/components/ConnectView.svelte | 5 +- .../src/lib/components/PeerList.svelte | 9 +-- .../src/lib/components/SettingsView.svelte | 33 ++++++--- .../src/lib/components/Sidebar.svelte | 13 +++- .../frontend/src/lib/components/Topbar.svelte | 73 +++++++++++++++++-- client/frontend/src/lib/sim.js | 4 +- 14 files changed, 128 insertions(+), 36 deletions(-) create mode 100644 client/frontend/dist/assets/index-BKDyV7g3.js delete mode 100644 client/frontend/dist/assets/index-B_zURlVB.css create mode 100644 client/frontend/dist/assets/index-CoV4PMmG.css delete mode 100644 client/frontend/dist/assets/index-D0bYtgrH.js diff --git a/client/frontend/dist/assets/index-BKDyV7g3.js b/client/frontend/dist/assets/index-BKDyV7g3.js new file mode 100644 index 0000000..2c07a7f --- /dev/null +++ b/client/frontend/dist/assets/index-BKDyV7g3.js @@ -0,0 +1 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))o(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const c of r.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&o(c)}).observe(document,{childList:!0,subtree:!0});function n(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function o(i){if(i.ep)return;i.ep=!0;const r=n(i);fetch(i.href,r)}})();function Pe(){}function li(e){return e()}function po(){return Object.create(null)}function Re(e){e.forEach(li)}function bs(e){return typeof e=="function"}function pt(e,t){return e!=e?t==t:e!==t||e&&typeof e=="object"||typeof e=="function"}function ri(e){return Object.keys(e).length===0}function ks(e,...t){if(e==null){for(const o of t)o(void 0);return Pe}const n=e.subscribe(...t);return n.unsubscribe?()=>n.unsubscribe():n}function fn(e){let t;return ks(e,n=>t=n)(),t}function pe(e,t,n){e.$$.on_destroy.push(ks(t,n))}function Et(e,t,n){return e.set(n),t}function l(e,t){e.appendChild(t)}function Y(e,t,n){e.insertBefore(t,n||null)}function V(e){e.parentNode&&e.parentNode.removeChild(e)}function ci(e,t){for(let n=0;ne.removeEventListener(t,n,o)}function Dt(e){return function(t){return t.stopPropagation(),e.call(this,t)}}function s(e,t,n){n==null?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}function si(e){return e===""?null:+e}function ui(e){return Array.from(e.childNodes)}function j(e,t){t=""+t,e.data!==t&&(e.data=t)}function _e(e,t){e.value=t??""}function vo(e,t,n,o){n==null?e.style.removeProperty(t):e.style.setProperty(t,n,"")}function Al(e,t,n){for(let o=0;oo.call(this,t))}const un=[],_n=[];let dn=[];const mo=[],_i=Promise.resolve();let ds=!1;function pi(){ds||(ds=!0,_i.then(ii))}function Pl(e){dn.push(e)}const fs=new Set;let rn=0;function ii(){if(rn!==0)return;const e=wn;do{try{for(;rne.indexOf(o)===-1?t.push(o):n.push(o)),n.forEach(o=>o()),dn=t}const Ll=new Set;let zt;function hi(){zt={r:0,c:[],p:zt}}function gi(){zt.r||Re(zt.c),zt=zt.p}function qe(e,t){e&&e.i&&(Ll.delete(e),e.i(t))}function $e(e,t,n,o){if(e&&e.o){if(Ll.has(e))return;Ll.add(e),zt.c.push(()=>{Ll.delete(e),o&&(n&&e.d(1),o())}),e.o(t)}else o&&o()}function _t(e){return e?.length!==void 0?e:Array.from(e)}function Tl(e,t){e.d(1),t.delete(e.key)}function Il(e,t,n,o,i,r,c,u,f,_,m,d){let h=e.length,g=r.length,C=h;const w={};for(;C--;)w[e[C].key]=C;const b=[],S=new Map,L=new Map,R=[];for(C=g;C--;){const M=d(i,r,C),J=n(M);let H=c.get(J);H?R.push(()=>H.p(M,t)):(H=_(J,M),H.c()),S.set(J,b[C]=H),J in w&&L.set(J,Math.abs(C-w[J]))}const D=new Set,y=new Set;function E(M){qe(M,1),M.m(u,m),c.set(M.key,M),m=M.first,g--}for(;h&&g;){const M=b[g-1],J=e[h-1],H=M.key,p=J.key;M===J?(m=M.first,h--,g--):S.has(p)?!c.has(H)||D.has(H)?E(M):y.has(p)?h--:L.get(H)>L.get(p)?(y.add(H),E(M)):(D.add(p),h--):(f(J,c),h--)}for(;h--;){const M=e[h];S.has(M.key)||f(M,c)}for(;g;)E(b[g-1]);return Re(R),b}function ot(e){e&&e.c()}function xe(e,t,n){const{fragment:o,after_update:i}=e.$$;o&&o.m(t,n),Pl(()=>{const r=e.$$.on_mount.map(li).filter(bs);e.$$.on_destroy?e.$$.on_destroy.push(...r):Re(r),e.$$.on_mount=[]}),i.forEach(Pl)}function et(e,t){const n=e.$$;n.fragment!==null&&(mi(n.after_update),Re(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}function bi(e,t){e.$$.dirty[0]===-1&&(un.push(e),pi(),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<{const C=g.length?g[0]:h;return _.ctx&&i(_.ctx[d],_.ctx[d]=C)&&(!_.skip_bound&&_.bound[d]&&_.bound[d](C),m&&bi(e,d)),h}):[],_.update(),m=!0,Re(_.before_update),_.fragment=o?o(_.ctx):!1,t.target){if(t.hydrate){const d=ui(t.target);_.fragment&&_.fragment.l(d),d.forEach(V)}else _.fragment&&_.fragment.c();t.intro&&qe(e.$$.fragment),xe(e,t.target,t.anchor),ii()}kn(f)}class yt{$$=void 0;$$set=void 0;$destroy(){et(this,1),this.$destroy=Pe}$on(t,n){if(!bs(n))return Pe;const o=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return o.push(n),()=>{const i=o.indexOf(n);i!==-1&&o.splice(i,1)}}$set(t){this.$$set&&!ri(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const ki="4",cn=[];function wi(e,t){return{subscribe:tt(e,t).subscribe}}function tt(e,t=Pe){let n;const o=new Set;function i(u){if(pt(e,u)&&(e=u,n)){const f=!cn.length;for(const _ of o)_[1](),cn.push(_,e);if(f){for(let _=0;_{o.delete(_),o.size===0&&n&&(n(),n=null)}}return{set:i,update:r,subscribe:c}}function yi(e,t,n){const o=!Array.isArray(e),i=o?[e]:e;if(!i.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const r=t.length<2;return wi(n,(c,u)=>{let f=!1;const _=[];let m=0,d=Pe;const h=()=>{if(m)return;d();const C=t(o?_[0]:_,c,u);r?c(C):d=bs(C)?C:Pe},g=i.map((C,w)=>ks(C,b=>{_[w]=b,m&=~(1<{m|=1<[...o,{id:n,msg:e,type:t}]),setTimeout(()=>{ps.update(o=>o.filter(i=>i.id!==n))},4e3),t==="error"&&Ai(e)}function Ai(e){if(!e){Dl.set(null);return}Dl.set({id:++Ci,msg:String(e)})}function yn(){Dl.set(null)}function vs(e,t){return e&&e.id?"peer:"+e.id:"room:"+(t||"network")}function jn(){return vs(fn(Nl),fn(Fe).room)}function Ss(e,t,n,o=!1,i="sent",r=!1,c=!1){const u=++Si;let f;r?f=vs(null,fn(Fe).room):o?f=jn():c?f="peer:"+e:f=vs(null,fn(Fe).room),ys.update(m=>{const d=m[f]?[...m[f]]:[];return d.push({id:o&&e.startsWith("local_")?e:u,fromID:e,nickname:t,message:n,timestamp:Date.now(),isSelf:o,status:i,system:r}),{...m,[f]:d.length>ho?d.slice(-ho):d}});const _=jn();!o&&!(fn(it)&&f===_)&&js.update(m=>({...m,[f]:(m[f]||0)+1}))}function Li(e){Ss("system","",e,!1,"sent",!0)}function ms(e){js.update(t=>{const n={...t};return delete n[e],n})}function gn(e,t){const n=jn();ys.update(o=>{const i=o[n];return i?{...o,[n]:i.map(r=>r.id===e?{...r,status:t}:r)}:o})}const Ei={subscribe(e){return ys.subscribe(t=>{e(t[jn()]||[])})}};typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(ki);const hs={brand:"Entangled",tagline:"Private LAN for friends — anywhere.",networks:"Networks",network_count:"{n} network(s)",create_network:"Create Network",join_network:"Join Network",connecting:"Connecting...",peer_count:"{n} peer(s)",offline_click:"Offline — click to connect",saved:"Saved",no_networks:"No saved networks",no_networks_desc:"Create or join a network to get started",settings:"Settings",network_name:"Network name",password_opt:"Password (optional)",cancel:"Cancel",create:"Create",join:"Join",leave:"Leave network",remove:"Remove saved",delete_room:"Delete network",more_actions:"More actions",copy_invite:"Copy invite",paste_invite:"Have an invite?",invite_copied:"Invite copied",invite_placeholder:"server|room|password",server_addr:"Server Address",nickname:"Nickname",server_token:"Server token",server_token_desc:"optional shared secret (ENTANGLED_TOKEN)",connect:"Connect",disconnect:"Disconnect",connected:"Connected",server:"Server",virtual_ip:"Virtual IP",na:"N/A",reconnecting:"Reconnecting...",disconnected:"Disconnected",phase_dialing:"Dialing server…",phase_auth:"Authenticating…",phase_ready:"Ready",phase_error:"Error",room_chat:"Room Chat",chat:"Chat",close_chat:"Close",channels:"Channels",col_ch:"Ch",col_nickname:"Nickname",col_ip:"Virtual IP",col_ping:"Ping",ping_peer:"Ping",ping_sent:"Pinging {name}…",error_ping:"Ping failed: {err}",col_path:"Path",col_status:"Status",status_online:"Online",status_offline:"Offline",path_p2p:"Direct",path_relay:"Relay",path_ws:"Fallback",path_unknown:"—",path_p2p_tip:"Peer-to-peer direct connection",path_relay_tip:"Traffic routed through the server relay",path_ws_tip:"WebSocket fallback path",you:"You",me:"me",no_peers:"No peers connected",no_peers_desc:"Create or join a network, then wait for friends",peers_list:"Peers",network:"Network",chat_with:"Chat with {name}",room_chat_title:"Room Chat — {room}",back:"Back",no_messages:"No messages yet",no_messages_desc:"Send a message to start the conversation",type_message:"Type a message...",send:"Send",send_disabled_no_room:"Join a network to chat",msg_truncated:"Message truncated to 1000 characters",retry:"Retry",today:"Today",yesterday:"Yesterday",you_self:"You",status_connected:"Connected",status_disconnected:"Disconnected",status_reconnecting:"Reconnecting…",status_relay_degraded:"Some peers on relay",status_direct:"Direct",status_server:"Server: {s}",status_ip:"IP: {ip}",status_network:"Network: {room}",status_peers:"Peers: {n}",version:"Entangled v{v}",settings_title:"Settings",section_connection:"Connection",section_network:"Advanced network",section_system:"System",section_appearance:"Appearance",advanced_warn:"Only change these if you know what they do.",reconnect_apply:"Reconnect to apply",auto_connect:"Auto Connect",auto_connect_desc:"connect to last server on startup",auto_join:"Auto Join Last Room",auto_join_desc:"join last open room after connect (password rooms need a manual join after restart)",connection_mode:"Connection",connection_direct:"Direct (P2P)",connection_relay:"Relay (server)",connection_mode_desc:"Direct prefers peer-to-peer and uses relay only when needed. Relay forces all traffic through the server.",mtu:"MTU",mtu_desc:"Packet size. Wrong values can break games or cause lag.",dns_server:"DNS Server",dns_desc:"Optional DNS for the virtual network. Leave blank for system default.",socks5:"SOCKS5 Proxy",socks5_placeholder:"e.g. 127.0.0.1:10808",socks5_desc:"Proxies signaling (WebSocket) only — not peer/relay UDP. Reconnect to apply.",stun_server:"STUN Server",stun_desc:"Helps find your public address for direct links. Reconnect to apply.",start_windows:"Start with Windows",updates:"Updates",check_updates:"Check for updates",apply_update:"Update",update_checking:"Checking for updates…",update_latest:"You are up to date.",update_available:"Update available: v{v}",update_downloading:"Downloading update… the app will restart.",update_failed:"Update failed",confirm_update:"Download and install the update? The app will restart.",error_update_check:"Update check failed: ",error_update:"Update failed: ",notif_updating:"Installing update…",ui_scale:"UI Scale",ui_scale_desc:"Scales the whole interface. Use with window resize or F11 fullscreen.",theme:"Theme",theme_dark:"Dark",theme_light:"Light",language:"Language",save:"Save",reset:"Reset to defaults",language_en:"English",language_ru:"Russian",language_zh:"Chinese",copied:"Copied",dismiss_error:"Dismiss",field_required:"Required",notif_created:"Network created: {name}",notif_joined:"Joined network: {name}",notif_left:"Left network",notif_removed:"Removed: {name}",notif_deleted:"Network deleted: {name}",notif_connected:"Connected to {addr}",notif_disconnected:"Disconnected",notif_settings_saved:"Settings saved",notif_reconnect_required:"Reconnect to apply proxy / STUN / token changes",notif_auto_join_skipped:'Auto-join skipped for "{name}" — enter the password to join',notif_need_config:"Set server & nickname in Connect page first",notif_room_deleted:"Network was deleted by owner",invite_no_password:"Invite copied without password (not stored). Add it before sharing.",error_create:"Failed to create network: {err}",error_join:"Failed to join: {err}",error_leave:"Failed to leave: {err}",error_remove:"Failed to remove: {err}",error_connect:"Connection failed: {err}",error_disconnect:"Error: {err}",error_send:"Failed to send: {err}",error_not_connected:"Not connected — cannot send message",error_invalid_invite:"Invalid invite: server and room are required",error_save:"Failed to save settings: {err}",confirm_disconnect:"Disconnect from server?",confirm_leave:"Leave the current network? It stays in your saved list.",confirm_leave_remove:"Leave and remove this network from your saved list?",confirm_remove:'Remove "{name}" from saved networks? (does not delete the network for others)',confirm_delete:'Permanently delete network "{name}" for everyone?',confirm_reset:"Reset all settings to defaults?"},Pi={brand:"Entangled",tagline:"Частная LAN для друзей — где угодно.",networks:"Сети",network_count:"{n} сет(ь/и/ей)",create_network:"Создать сеть",join_network:"Подключиться",connecting:"Подключение...",peer_count:"{n} участник(ов)",offline_click:"Не в сети — нажмите для подключения",saved:"Сохранено",no_networks:"Нет сохранённых сетей",no_networks_desc:"Создайте или войдите в сеть, чтобы начать",settings:"Настройки",network_name:"Название сети",password_opt:"Пароль (опционально)",cancel:"Отмена",create:"Создать",join:"Войти",leave:"Покинуть сеть",remove:"Убрать из списка",delete_room:"Удалить сеть",more_actions:"Ещё действия",copy_invite:"Копировать инвайт",paste_invite:"Есть инвайт?",invite_copied:"Инвайт скопирован",invite_placeholder:"сервер|комната|пароль",server_addr:"Адрес сервера",nickname:"Псевдоним",server_token:"Токен сервера",server_token_desc:"опциональный секрет (ENTANGLED_TOKEN)",connect:"Подключиться",disconnect:"Отключиться",connected:"Подключено",server:"Сервер",virtual_ip:"Виртуальный IP",na:"Н/Д",reconnecting:"Переподключение...",disconnected:"Отключено",phase_dialing:"Подключение к серверу…",phase_auth:"Аутентификация…",phase_ready:"Готово",phase_error:"Ошибка",room_chat:"Чат комнаты",chat:"Чат",close_chat:"Закрыть",channels:"Каналы",col_ch:"Кн",col_nickname:"Псевдоним",col_ip:"Виртуальный IP",col_ping:"Пинг",ping_peer:"Пинг",ping_sent:"Пинг {name}…",error_ping:"Пинг не удался: {err}",col_path:"Путь",col_status:"Статус",status_online:"В сети",status_offline:"Не в сети",path_p2p:"Прямой",path_relay:"Релей",path_ws:"Запасной",path_unknown:"—",path_p2p_tip:"Прямое соединение peer-to-peer",path_relay_tip:"Трафик через серверный релей",path_ws_tip:"Запасной путь через WebSocket",you:"Вы",me:"я",no_peers:"Нет подключённых участников",no_peers_desc:"Создайте или войдите в сеть и дождитесь друзей",peers_list:"Участники",network:"Сеть",chat_with:"Чат с {name}",room_chat_title:"Чат комнаты — {room}",back:"Назад",no_messages:"Сообщений пока нет",no_messages_desc:"Отправьте сообщение, чтобы начать разговор",type_message:"Введите сообщение...",send:"Отправить",send_disabled_no_room:"Войдите в сеть, чтобы писать",msg_truncated:"Сообщение обрезано до 1000 символов",retry:"Повторить",today:"Сегодня",yesterday:"Вчера",you_self:"Вы",status_connected:"Подключено",status_disconnected:"Отключено",status_reconnecting:"Переподключение…",status_relay_degraded:"Часть пиров через релей",status_direct:"Прямое",status_server:"Сервер: {s}",status_ip:"IP: {ip}",status_network:"Сеть: {room}",status_peers:"Участники: {n}",version:"Entangled v{v}",settings_title:"Настройки",section_connection:"Подключение",section_network:"Доп. сеть",section_system:"Система",section_appearance:"Внешний вид",advanced_warn:"Меняйте только если понимаете, что делаете.",reconnect_apply:"Переподключитесь, чтобы применить",auto_connect:"Автоподключение",auto_connect_desc:"подключаться к последнему серверу при запуске",auto_join:"Автовход в комнату",auto_join_desc:"входить в последнюю открытую комнату (с паролем — вручную после перезапуска)",connection_mode:"Соединение",connection_direct:"Прямое (P2P)",connection_relay:"Релей (сервер)",connection_mode_desc:"Прямое предпочитает P2P и использует релей только при необходимости. Релей гонит весь трафик через сервер.",mtu:"MTU",mtu_desc:"Размер пакета. Неверное значение ломает игры или даёт лаги.",dns_server:"DNS-сервер",dns_desc:"Опциональный DNS виртуальной сети. Пусто — системный по умолчанию.",socks5:"SOCKS5-прокси",socks5_placeholder:"напр. 127.0.0.1:10808",socks5_desc:"Только сигнальный WebSocket, не UDP пиров/релея. Переподключитесь, чтобы применить.",stun_server:"STUN-сервер",stun_desc:"Помогает найти публичный адрес. Переподключитесь, чтобы применить.",start_windows:"Запуск с Windows",updates:"Обновления",check_updates:"Проверить обновления",apply_update:"Обновить",update_checking:"Проверка обновлений…",update_latest:"У вас актуальная версия.",update_available:"Доступно обновление: v{v}",update_downloading:"Загрузка обновления… приложение перезапустится.",update_failed:"Ошибка обновления",confirm_update:"Скачать и установить обновление? Приложение перезапустится.",error_update_check:"Не удалось проверить обновления: ",error_update:"Не удалось обновить: ",notif_updating:"Установка обновления…",ui_scale:"Масштаб UI",ui_scale_desc:"Масштабирует весь интерфейс. Вместе с изменением размера окна или F11.",theme:"Тема",theme_dark:"Тёмная",theme_light:"Светлая",language:"Язык",save:"Сохранить",reset:"Сбросить",language_en:"Английский",language_ru:"Русский",language_zh:"Китайский",copied:"Скопировано",dismiss_error:"Закрыть",field_required:"Обязательно",notif_created:"Сеть создана: {name}",notif_joined:"Подключились к сети: {name}",notif_left:"Покинули сеть",notif_removed:"Удалено: {name}",notif_deleted:"Сеть удалена: {name}",notif_connected:"Подключились к {addr}",notif_disconnected:"Отключились",notif_settings_saved:"Настройки сохранены",notif_reconnect_required:"Переподключитесь, чтобы применить прокси / STUN / токен",notif_auto_join_skipped:"Автовход пропущен для «{name}» — введите пароль вручную",notif_need_config:"Укажите сервер и псевдоним на странице подключения",notif_room_deleted:"Сеть удалена владельцем",invite_no_password:"Инвайт скопирован без пароля (он не хранится). Добавьте перед отправкой.",error_create:"Не удалось создать сеть: {err}",error_join:"Не удалось подключиться: {err}",error_leave:"Не удалось покинуть: {err}",error_remove:"Не удалось удалить: {err}",error_connect:"Ошибка подключения: {err}",error_disconnect:"Ошибка: {err}",error_send:"Не удалось отправить: {err}",error_not_connected:"Нет подключения — невозможно отправить сообщение",error_invalid_invite:"Неверный инвайт: нужны сервер и комната",error_save:"Не удалось сохранить настройки: {err}",confirm_disconnect:"Отключиться от сервера?",confirm_leave:"Покинуть текущую сеть? Она останется в сохранённых.",confirm_leave_remove:"Покинуть и убрать сеть из сохранённых?",confirm_remove:'Убрать "{name}" из сохранённых? (сеть для других не удалится)',confirm_delete:'Навсегда удалить сеть "{name}" для всех?',confirm_reset:"Сбросить все настройки?"},Di={brand:"Entangled",tagline:"朋友的私人局域网 — 随时随地。",networks:"网络",network_count:"{n} 个网络",create_network:"创建网络",join_network:"加入网络",connecting:"连接中...",peer_count:"{n} 个节点",offline_click:"离线 — 点击连接",saved:"已保存",no_networks:"暂无保存的网络",no_networks_desc:"创建或加入网络以开始",settings:"设置",network_name:"网络名称",password_opt:"密码(可选)",cancel:"取消",create:"创建",join:"加入",leave:"离开网络",remove:"移除已保存",delete_room:"删除网络",more_actions:"更多操作",copy_invite:"复制邀请",paste_invite:"有邀请码?",invite_copied:"邀请已复制",invite_placeholder:"服务器|房间|密码",server_addr:"服务器地址",nickname:"昵称",server_token:"服务器令牌",server_token_desc:"可选共享密钥(ENTANGLED_TOKEN)",connect:"连接",disconnect:"断开",connected:"已连接",server:"服务器",virtual_ip:"虚拟 IP",na:"无",reconnecting:"重新连接...",disconnected:"已断开",phase_dialing:"正在连接服务器…",phase_auth:"正在验证…",phase_ready:"就绪",phase_error:"错误",room_chat:"房间聊天",chat:"聊天",close_chat:"关闭",channels:"通道",col_ch:"通",col_nickname:"昵称",col_ip:"虚拟 IP",col_ping:"延迟",ping_peer:"测速",ping_sent:"正在测速 {name}…",error_ping:"测速失败: {err}",col_path:"路径",col_status:"状态",status_online:"在线",status_offline:"离线",path_p2p:"直连",path_relay:"中继",path_ws:"备用",path_unknown:"—",path_p2p_tip:"点对点直连",path_relay_tip:"经服务器中继转发",path_ws_tip:"WebSocket 备用路径",you:"你",me:"我",no_peers:"暂无连接的节点",no_peers_desc:"创建或加入网络,然后等待好友",peers_list:"节点",network:"网络",chat_with:"与 {name} 聊天",room_chat_title:"房间聊天 — {room}",back:"返回",no_messages:"暂无消息",no_messages_desc:"发送一条消息开始对话",type_message:"输入消息...",send:"发送",send_disabled_no_room:"加入网络后才能聊天",msg_truncated:"消息已截断至 1000 个字符",retry:"重试",today:"今天",yesterday:"昨天",you_self:"你",status_connected:"已连接",status_disconnected:"已断开",status_reconnecting:"重新连接…",status_relay_degraded:"部分节点经中继",status_direct:"直连",status_server:"服务器: {s}",status_ip:"IP: {ip}",status_network:"网络: {room}",status_peers:"节点: {n}",version:"Entangled v{v}",settings_title:"设置",section_connection:"连接",section_network:"高级网络",section_system:"系统",section_appearance:"外观",advanced_warn:"仅在了解作用时更改这些选项。",reconnect_apply:"重新连接以生效",auto_connect:"自动连接",auto_connect_desc:"启动时自动连接到上次的服务器",auto_join:"自动加入房间",auto_join_desc:"连接后自动加入上次的开放房间(有密码的房间重启后需手动加入)",connection_mode:"连接方式",connection_direct:"直连 (P2P)",connection_relay:"中继 (服务器)",connection_mode_desc:"直连优先点对点,必要时才用中继。中继模式强制全部流量经服务器。",mtu:"MTU",mtu_desc:"数据包大小。错误值可能导致游戏异常或卡顿。",dns_server:"DNS 服务器",dns_desc:"虚拟网络可选 DNS。留空则使用系统默认。",socks5:"SOCKS5 代理",socks5_placeholder:"例如 127.0.0.1:10808",socks5_desc:"仅代理信令 WebSocket,不含节点/中继 UDP。重新连接以生效。",stun_server:"STUN 服务器",stun_desc:"用于发现公网地址以便直连。重新连接以生效。",start_windows:"开机自启",updates:"更新",check_updates:"检查更新",apply_update:"更新",update_checking:"正在检查更新…",update_latest:"已是最新版本。",update_available:"有可用更新:v{v}",update_downloading:"正在下载更新…应用将重启。",update_failed:"更新失败",confirm_update:"下载并安装更新?应用将重启。",error_update_check:"检查更新失败:",error_update:"更新失败:",notif_updating:"正在安装更新…",ui_scale:"界面缩放",ui_scale_desc:"缩放整个界面。可配合窗口调整大小或 F11 全屏使用。",theme:"主题",theme_dark:"深色",theme_light:"浅色",language:"语言",save:"保存",reset:"重置为默认",language_en:"英语",language_ru:"俄语",language_zh:"中文",copied:"已复制",dismiss_error:"关闭",field_required:"必填",notif_created:"网络已创建: {name}",notif_joined:"已加入网络: {name}",notif_left:"已离开网络",notif_removed:"已删除: {name}",notif_deleted:"网络已删除: {name}",notif_connected:"已连接到 {addr}",notif_disconnected:"已断开连接",notif_settings_saved:"设置已保存",notif_reconnect_required:"请重新连接以使代理 / STUN / 令牌生效",notif_auto_join_skipped:"已跳过自动加入「{name}」— 请输入密码后手动加入",notif_need_config:"请先在连接页面设置服务器和昵称",notif_room_deleted:"网络已被所有者删除",invite_no_password:"邀请已复制但无密码(密码不存储)。分享前请自行添加。",error_create:"创建网络失败: {err}",error_join:"加入失败: {err}",error_leave:"离开失败: {err}",error_remove:"删除失败: {err}",error_connect:"连接失败: {err}",error_disconnect:"错误: {err}",error_send:"发送失败: {err}",error_not_connected:"未连接 — 无法发送消息",error_invalid_invite:"无效邀请:需要服务器和房间名",error_save:"保存设置失败: {err}",confirm_disconnect:"确定断开服务器连接?",confirm_leave:"离开当前网络?仍保留在已保存列表中。",confirm_leave_remove:"离开并从已保存列表中移除?",confirm_remove:'从已保存网络中移除 "{name}"?(不会删除他人的网络)',confirm_delete:'永久删除网络 "{name}"(对所有人)?',confirm_reset:"确定重置所有设置?"},Cs={en:hs,ru:Pi,zh:Di};function Ni(){const e=localStorage.getItem("entangled_locale");if(e&&Cs[e])return e;const t=navigator.language?.slice(0,2);return t==="ru"?"ru":t==="zh"?"zh":"en"}const As=tt(Ni()),jt=yi(As,e=>{const t=Cs[e]||hs;return new Proxy(t,{get(n,o){if(typeof o=="string")return n[o]??hs[o]??o}})});function bn(e){Cs[e]&&(localStorage.setItem("entangled_locale",e),As.set(e))}function ke(e,t){return e?String(e).replace(/\{(\w+)\}/g,(n,o)=>t&&t[o]!=null?t[o]:`{${o}}`):""}function go(e){let t,n,o,i,r,c,u,f=e[4].cancel+"",_,m,d,h=(e[2]||e[4].disconnect)+"",g,C,w;return{c(){t=a("div"),n=a("div"),o=a("p"),i=k(e[1]),r=v(),c=a("div"),u=a("button"),_=k(f),m=v(),d=a("button"),g=k(h),s(o,"id","confirm-msg"),s(o,"class","svelte-1g1nook"),s(u,"type","button"),s(u,"class","btn"),s(d,"type","button"),s(d,"class","btn"),X(d,"danger",e[3]),X(d,"btn-cta",!e[3]),s(c,"class","modal-actions svelte-1g1nook"),s(n,"class","modal svelte-1g1nook"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","confirm-msg"),s(t,"class","modal-overlay svelte-1g1nook"),s(t,"role","presentation")},m(b,S){Y(b,t,S),l(t,n),l(n,o),l(o,i),l(n,r),l(n,c),l(c,u),l(u,_),l(c,m),l(c,d),l(d,g),C||(w=[W(u,"click",e[5]),W(d,"click",e[6]),W(n,"click",Dt(e[10])),W(n,"keydown",Dt(e[11])),W(t,"click",e[5]),W(t,"keydown",e[7])],C=!0)},p(b,S){S&2&&j(i,b[1]),S&16&&f!==(f=b[4].cancel+"")&&j(_,f),S&20&&h!==(h=(b[2]||b[4].disconnect)+"")&&j(g,h),S&8&&X(d,"danger",b[3]),S&8&&X(d,"btn-cta",!b[3])},d(b){b&&V(t),C=!1,Re(w)}}}function Mi(e){let t,n=e[0]&&go(e);return{c(){n&&n.c(),t=El()},m(o,i){n&&n.m(o,i),Y(o,t,i)},p(o,[i]){o[0]?n?n.p(o,i):(n=go(o),n.c(),n.m(t.parentNode,t)):n&&(n.d(1),n=null)},i:Pe,o:Pe,d(o){o&&V(t),n&&n.d(o)}}}function Ti(e,t,n){let o;pe(e,jt,w=>n(4,o=w));let{open:i=!1}=t,{message:r=""}=t,{confirmLabel:c=""}=t,{danger:u=!1}=t,{onConfirm:f=()=>{}}=t,{onCancel:_=()=>{}}=t;function m(){_()}function d(){f()}function h(w){w.key==="Escape"&&m()}function g(w){Lt.call(this,e,w)}function C(w){Lt.call(this,e,w)}return e.$$set=w=>{"open"in w&&n(0,i=w.open),"message"in w&&n(1,r=w.message),"confirmLabel"in w&&n(2,c=w.confirmLabel),"danger"in w&&n(3,u=w.danger),"onConfirm"in w&&n(8,f=w.onConfirm),"onCancel"in w&&n(9,_=w.onCancel)},[i,r,c,u,o,m,d,h,f,_,g,C]}class Ls extends yt{constructor(t){super(),wt(this,t,Ti,Mi,pt,{open:0,message:1,confirmLabel:2,danger:3,onConfirm:8,onCancel:9})}}function bo(e,t,n){const o=e.slice();return o[63]=t[n],o}function ko(e){let t,n,o=e[16].no_networks+"",i,r,c,u=e[16].no_networks_desc+"",f,_;return{c(){t=a("div"),n=a("div"),i=k(o),r=v(),c=a("div"),f=k(u),_=v(),s(c,"class","empty-desc svelte-1vrsv4c"),s(t,"class","empty-state svelte-1vrsv4c")},m(m,d){Y(m,t,d),l(t,n),l(n,i),l(t,r),l(t,c),l(c,f),l(t,_)},p(m,d){d[0]&65536&&o!==(o=m[16].no_networks+"")&&j(i,o),d[0]&65536&&u!==(u=m[16].no_networks_desc+"")&&j(f,u)},d(m){m&&V(t)}}}function Ii(e){let t=e[16].saved+"",n;return{c(){n=k(t)},m(o,i){Y(o,n,i)},p(o,i){i[0]&65536&&t!==(t=o[16].saved+"")&&j(n,t)},d(o){o&&V(n)}}}function Ri(e){let t=e[16].offline_click+"",n;return{c(){n=k(t)},m(o,i){Y(o,n,i)},p(o,i){i[0]&65536&&t!==(t=o[16].offline_click+"")&&j(n,t)},d(o){o&&V(n)}}}function Oi(e){let t=ke(e[16].peer_count,{n:e[17].peerCount})+"",n;return{c(){n=k(t)},m(o,i){Y(o,n,i)},p(o,i){i[0]&196608&&t!==(t=ke(o[16].peer_count,{n:o[17].peerCount})+"")&&j(n,t)},d(o){o&&V(n)}}}function zi(e){let t=e[16].connecting+"",n;return{c(){n=k(t)},m(o,i){Y(o,n,i)},p(o,i){i[0]&65536&&t!==(t=o[16].connecting+"")&&j(n,t)},d(o){o&&V(n)}}}function wo(e){let t,n,o=e[16].copy_invite+"",i,r,c,u,f=e[16].remove+"",_,m,d,h;function g(...S){return e[39](e[63],...S)}let C=e[17].room===e[63].name&&yo(e);function w(...S){return e[41](e[63],...S)}let b=e[17].room===e[63].name&&e[17].isOwner&&jo(e);return{c(){t=a("div"),n=a("button"),i=k(o),r=v(),C&&C.c(),c=v(),u=a("button"),_=k(f),m=v(),b&&b.c(),s(n,"type","button"),s(n,"role","menuitem"),s(n,"class","menu-item svelte-1vrsv4c"),s(u,"type","button"),s(u,"role","menuitem"),s(u,"class","menu-item danger svelte-1vrsv4c"),s(t,"class","overflow-menu svelte-1vrsv4c"),s(t,"role","menu"),s(t,"tabindex","-1")},m(S,L){Y(S,t,L),l(t,n),l(n,i),l(t,r),C&&C.m(t,null),l(t,c),l(t,u),l(u,_),l(t,m),b&&b.m(t,null),d||(h=[W(n,"click",g),W(u,"click",w),W(t,"click",Dt(e[36])),W(t,"keydown",Dt(e[37]))],d=!0)},p(S,L){e=S,L[0]&65536&&o!==(o=e[16].copy_invite+"")&&j(i,o),e[17].room===e[63].name?C?C.p(e,L):(C=yo(e),C.c(),C.m(t,c)):C&&(C.d(1),C=null),L[0]&65536&&f!==(f=e[16].remove+"")&&j(_,f),e[17].room===e[63].name&&e[17].isOwner?b?b.p(e,L):(b=jo(e),b.c(),b.m(t,null)):b&&(b.d(1),b=null)},d(S){S&&V(t),C&&C.d(),b&&b.d(),d=!1,Re(h)}}}function yo(e){let t,n=e[16].leave+"",o,i,r;return{c(){t=a("button"),o=k(n),s(t,"type","button"),s(t,"role","menuitem"),s(t,"class","menu-item svelte-1vrsv4c")},m(c,u){Y(c,t,u),l(t,o),i||(r=W(t,"click",e[40]),i=!0)},p(c,u){u[0]&65536&&n!==(n=c[16].leave+"")&&j(o,n)},d(c){c&&V(t),i=!1,r()}}}function jo(e){let t,n=e[16].delete_room+"",o,i,r;function c(...u){return e[42](e[63],...u)}return{c(){t=a("button"),o=k(n),s(t,"type","button"),s(t,"role","menuitem"),s(t,"class","menu-item danger svelte-1vrsv4c")},m(u,f){Y(u,t,f),l(t,o),i||(r=W(t,"click",c),i=!0)},p(u,f){e=u,f[0]&65536&&n!==(n=e[16].delete_room+"")&&j(o,n)},d(u){u&&V(t),i=!1,r()}}}function So(e,t){let n,o,i,r,c,u=t[63].name+"",f,_,m,d,h,g,C,w,b,S,L,R,D,y,E,M,J,H,p;function T(G,O){return G[11]===G[63].name?zi:G[17].room===G[63].name?Oi:G[17].connected?Ii:Ri}let Z=T(t),z=Z(t);function I(...G){return t[38](t[63],...G)}let U=t[12]===t[63].name&&wo(t);function le(){return t[43](t[63])}function oe(...G){return t[44](t[63],...G)}return{key:e,first:null,c(){n=a("div"),o=a("span"),i=v(),r=a("div"),c=a("div"),f=k(u),_=v(),m=a("div"),z.c(),d=v(),h=a("div"),g=a("button"),C=Pt("svg"),w=Pt("circle"),b=Pt("circle"),S=Pt("circle"),y=v(),U&&U.c(),E=v(),s(o,"class","tick svelte-1vrsv4c"),s(o,"aria-hidden","true"),X(o,"on",t[17].room===t[63].name),s(c,"class","network-name svelte-1vrsv4c"),s(m,"class","network-meta svelte-1vrsv4c"),s(r,"class","network-info svelte-1vrsv4c"),s(w,"cx","3.5"),s(w,"cy","8"),s(w,"r","0.9"),s(b,"cx","8"),s(b,"cy","8"),s(b,"r","0.9"),s(S,"cx","12.5"),s(S,"cy","8"),s(S,"r","0.9"),s(C,"viewBox","0 0 16 16"),s(C,"fill","none"),s(C,"stroke","currentColor"),s(C,"stroke-width","1.8"),s(C,"stroke-linecap","round"),s(C,"aria-hidden","true"),s(C,"class","svelte-1vrsv4c"),s(g,"type","button"),s(g,"class","menu-btn svelte-1vrsv4c"),s(g,"aria-haspopup","menu"),s(g,"aria-expanded",L=t[12]===t[63].name),s(g,"aria-label",R=t[16].more_actions),s(g,"title",D=t[16].more_actions),s(h,"class","row-actions svelte-1vrsv4c"),s(n,"class","network-item svelte-1vrsv4c"),s(n,"role","button"),s(n,"tabindex","0"),s(n,"aria-current",M=t[17].room===t[63].name?"true":void 0),s(n,"aria-label",J=t[63].name),X(n,"active",t[17].room===t[63].name),X(n,"disabled",!t[17].connected&&!t[11]),this.first=n},m(G,O){Y(G,n,O),l(n,o),l(n,i),l(n,r),l(r,c),l(c,f),l(r,_),l(r,m),z.m(m,null),l(n,d),l(n,h),l(h,g),l(g,C),l(C,w),l(C,b),l(C,S),l(h,y),U&&U.m(h,null),l(n,E),H||(p=[W(g,"click",I),W(n,"click",le),W(n,"keydown",oe)],H=!0)},p(G,O){t=G,O[0]&131073&&X(o,"on",t[17].room===t[63].name),O[0]&1&&u!==(u=t[63].name+"")&&j(f,u),Z===(Z=T(t))&&z?z.p(t,O):(z.d(1),z=Z(t),z&&(z.c(),z.m(m,null))),O[0]&4097&&L!==(L=t[12]===t[63].name)&&s(g,"aria-expanded",L),O[0]&65536&&R!==(R=t[16].more_actions)&&s(g,"aria-label",R),O[0]&65536&&D!==(D=t[16].more_actions)&&s(g,"title",D),t[12]===t[63].name?U?U.p(t,O):(U=wo(t),U.c(),U.m(h,null)):U&&(U.d(1),U=null),O[0]&131073&&M!==(M=t[17].room===t[63].name?"true":void 0)&&s(n,"aria-current",M),O[0]&1&&J!==(J=t[63].name)&&s(n,"aria-label",J),O[0]&131073&&X(n,"active",t[17].room===t[63].name),O[0]&133120&&X(n,"disabled",!t[17].connected&&!t[11])},d(G){G&&V(n),z.d(),U&&U.d(),H=!1,Re(p)}}}function Co(e){let t,n,o,i=e[16].create_network+"",r,c,u,f=e[16].network_name+"",_,m,d,h,g,C,w,b,S=e[16].password_opt+"",L,R,D,y,E,M,J,H,p=e[16].cancel+"",T,Z,z,I=e[16].create+"",U,le,oe,G=e[9]&&Ao(e),O=e[7]&&Lo(e);return{c(){t=a("div"),n=a("div"),o=a("h3"),r=k(i),c=v(),u=a("label"),_=k(f),m=v(),d=a("input"),C=v(),G&&G.c(),w=v(),b=a("label"),L=k(S),R=v(),D=a("input"),E=v(),O&&O.c(),M=v(),J=a("div"),H=a("button"),T=k(p),Z=v(),z=a("button"),U=k(I),s(o,"id","create-title"),s(o,"class","svelte-1vrsv4c"),s(u,"class","sr-only svelte-1vrsv4c"),s(u,"for","create-name"),s(d,"id","create-name"),s(d,"type","text"),s(d,"placeholder",h=e[16].network_name),s(d,"aria-invalid",g=!!e[9]),s(d,"class","svelte-1vrsv4c"),X(d,"invalid",e[9]),s(b,"class","sr-only svelte-1vrsv4c"),s(b,"for","create-pass"),s(D,"id","create-pass"),s(D,"type","password"),s(D,"placeholder",y=e[16].password_opt),s(H,"class","btn"),s(z,"class","btn primary"),s(J,"class","modal-actions svelte-1vrsv4c"),s(n,"class","modal svelte-1vrsv4c"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","create-title"),s(t,"class","modal-overlay svelte-1vrsv4c"),s(t,"role","presentation")},m(N,B){Y(N,t,B),l(t,n),l(n,o),l(o,r),l(n,c),l(n,u),l(u,_),l(n,m),l(n,d),_e(d,e[3]),l(n,C),G&&G.m(n,null),l(n,w),l(n,b),l(b,L),l(n,R),l(n,D),_e(D,e[4]),l(n,E),O&&O.m(n,null),l(n,M),l(n,J),l(J,H),l(H,T),l(J,Z),l(J,z),l(z,U),e[47](n),le||(oe=[W(d,"input",e[45]),W(D,"input",e[46]),W(H,"click",e[19]),W(z,"click",e[22]),W(n,"click",Dt(e[34])),W(n,"keydown",Dt(e[35])),W(t,"click",e[19]),W(t,"keydown",e[48])],le=!0)},p(N,B){B[0]&65536&&i!==(i=N[16].create_network+"")&&j(r,i),B[0]&65536&&f!==(f=N[16].network_name+"")&&j(_,f),B[0]&65536&&h!==(h=N[16].network_name)&&s(d,"placeholder",h),B[0]&512&&g!==(g=!!N[9])&&s(d,"aria-invalid",g),B[0]&8&&d.value!==N[3]&&_e(d,N[3]),B[0]&512&&X(d,"invalid",N[9]),N[9]?G?G.p(N,B):(G=Ao(N),G.c(),G.m(n,w)):G&&(G.d(1),G=null),B[0]&65536&&S!==(S=N[16].password_opt+"")&&j(L,S),B[0]&65536&&y!==(y=N[16].password_opt)&&s(D,"placeholder",y),B[0]&16&&D.value!==N[4]&&_e(D,N[4]),N[7]?O?O.p(N,B):(O=Lo(N),O.c(),O.m(n,M)):O&&(O.d(1),O=null),B[0]&65536&&p!==(p=N[16].cancel+"")&&j(T,p),B[0]&65536&&I!==(I=N[16].create+"")&&j(U,I)},d(N){N&&V(t),G&&G.d(),O&&O.d(),e[47](null),le=!1,Re(oe)}}}function Ao(e){let t,n;return{c(){t=a("span"),n=k(e[9]),s(t,"class","field-error svelte-1vrsv4c"),s(t,"role","alert")},m(o,i){Y(o,t,i),l(t,n)},p(o,i){i[0]&512&&j(n,o[9])},d(o){o&&V(t)}}}function Lo(e){let t,n;return{c(){t=a("div"),n=k(e[7]),s(t,"class","modal-error svelte-1vrsv4c"),s(t,"role","alert")},m(o,i){Y(o,t,i),l(t,n)},p(o,i){i[0]&128&&j(n,o[7])},d(o){o&&V(t)}}}function Eo(e){let t,n,o,i=e[16].join_network+"",r,c,u,f=e[16].network_name+"",_,m,d,h,g,C,w,b,S=e[16].password_opt+"",L,R,D,y,E,M,J,H,p=e[16].cancel+"",T,Z,z,I=e[16].join+"",U,le,oe,G=e[10]&&Po(e),O=e[8]&&Do(e);return{c(){t=a("div"),n=a("div"),o=a("h3"),r=k(i),c=v(),u=a("label"),_=k(f),m=v(),d=a("input"),C=v(),G&&G.c(),w=v(),b=a("label"),L=k(S),R=v(),D=a("input"),E=v(),O&&O.c(),M=v(),J=a("div"),H=a("button"),T=k(p),Z=v(),z=a("button"),U=k(I),s(o,"id","join-title"),s(o,"class","svelte-1vrsv4c"),s(u,"class","sr-only svelte-1vrsv4c"),s(u,"for","join-name"),s(d,"id","join-name"),s(d,"type","text"),s(d,"placeholder",h=e[16].network_name),s(d,"aria-invalid",g=!!e[10]),s(d,"class","svelte-1vrsv4c"),X(d,"invalid",e[10]),s(b,"class","sr-only svelte-1vrsv4c"),s(b,"for","join-pass"),s(D,"id","join-pass"),s(D,"type","password"),s(D,"placeholder",y=e[16].password_opt),s(H,"class","btn"),s(z,"class","btn primary"),s(J,"class","modal-actions svelte-1vrsv4c"),s(n,"class","modal svelte-1vrsv4c"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","join-title"),s(t,"class","modal-overlay svelte-1vrsv4c"),s(t,"role","presentation")},m(N,B){Y(N,t,B),l(t,n),l(n,o),l(o,r),l(n,c),l(n,u),l(u,_),l(n,m),l(n,d),_e(d,e[5]),l(n,C),G&&G.m(n,null),l(n,w),l(n,b),l(b,L),l(n,R),l(n,D),_e(D,e[6]),l(n,E),O&&O.m(n,null),l(n,M),l(n,J),l(J,H),l(H,T),l(J,Z),l(J,z),l(z,U),e[52](n),le||(oe=[W(d,"input",e[49]),W(D,"input",e[50]),W(H,"click",e[21]),W(z,"click",e[51]),W(n,"click",Dt(e[32])),W(n,"keydown",Dt(e[33])),W(t,"click",e[21]),W(t,"keydown",e[53])],le=!0)},p(N,B){B[0]&65536&&i!==(i=N[16].join_network+"")&&j(r,i),B[0]&65536&&f!==(f=N[16].network_name+"")&&j(_,f),B[0]&65536&&h!==(h=N[16].network_name)&&s(d,"placeholder",h),B[0]&1024&&g!==(g=!!N[10])&&s(d,"aria-invalid",g),B[0]&32&&d.value!==N[5]&&_e(d,N[5]),B[0]&1024&&X(d,"invalid",N[10]),N[10]?G?G.p(N,B):(G=Po(N),G.c(),G.m(n,w)):G&&(G.d(1),G=null),B[0]&65536&&S!==(S=N[16].password_opt+"")&&j(L,S),B[0]&65536&&y!==(y=N[16].password_opt)&&s(D,"placeholder",y),B[0]&64&&D.value!==N[6]&&_e(D,N[6]),N[8]?O?O.p(N,B):(O=Do(N),O.c(),O.m(n,M)):O&&(O.d(1),O=null),B[0]&65536&&p!==(p=N[16].cancel+"")&&j(T,p),B[0]&65536&&I!==(I=N[16].join+"")&&j(U,I)},d(N){N&&V(t),G&&G.d(),O&&O.d(),e[52](null),le=!1,Re(oe)}}}function Po(e){let t,n;return{c(){t=a("span"),n=k(e[10]),s(t,"class","field-error svelte-1vrsv4c"),s(t,"role","alert")},m(o,i){Y(o,t,i),l(t,n)},p(o,i){i[0]&1024&&j(n,o[10])},d(o){o&&V(t)}}}function Do(e){let t,n;return{c(){t=a("div"),n=k(e[8]),s(t,"class","modal-error svelte-1vrsv4c"),s(t,"role","alert")},m(o,i){Y(o,t,i),l(t,n)},p(o,i){i[0]&256&&j(n,o[8])},d(o){o&&V(t)}}}function Ui(e){let t,n,o,i=e[16].networks+"",r,c,u,f=ke(e[16].network_count,{n:e[0].length})+"",_,m,d,h,g=e[16].create_network+"",C,w,b,S,L=e[16].join_network+"",R,D,y,E,M=[],J=new Map,H,p,T,Z,z,I,U,le,oe=_t(e[0]);const G=F=>F[63].name;for(let F=0;Fn(16,o=P)),pe(e,We,P=>n(58,i=P)),pe(e,Fe,P=>n(17,r=P));let c=[],u=!1,f=!1,_="",m="",d="",h="",g="",C="",w="",b="",S="",L="",R="",D=null,y,E,M=null;Ml(async()=>{n(0,c=await window.go.main.App.GetSavedRooms());const P=await window.go.main.App.LoadConfig();P.serverAddr&&(S=P.serverAddr),P.nickname&&(L=P.nickname),window.addEventListener("keydown",J),window.addEventListener("click",H)}),oi(()=>{window.removeEventListener("keydown",J),window.removeEventListener("click",H)});function J(P){if(P.key==="Escape"){if(D){n(12,D=null);return}if(u){Z();return}if(f){I();return}}}function H(){n(12,D=null)}async function p(){n(0,c=await window.go.main.App.GetSavedRooms())}function T(){n(7,g=""),n(9,w=""),n(1,u=!0),yn()}function Z(){n(1,u=!1),n(7,g=""),n(9,w="")}function z(){n(8,C=""),n(10,b=""),n(2,f=!0),yn()}function I(){n(2,f=!1),n(8,C=""),n(10,b="")}async function U(){if(n(9,w=""),n(7,g=""),!_.trim()){n(9,w=o.field_required);return}try{await window.go.main.App.CreateRoom(_,m),se(ke(o.notif_created,{name:_})),Et(We,i="network",i),Z(),n(3,_=""),n(4,m=""),await p()}catch(P){n(7,g=ke(o.error_create,{err:P})),se(g,"error")}}async function le(P,ee){n(10,b=""),n(8,C="");const Ce=P||d,me=ee!==void 0?ee:h;if(!Ce.trim()){n(10,b=o.field_required);return}try{await window.go.main.App.JoinRoom(Ce,me),se(ke(o.notif_joined,{name:Ce})),Et(We,i="network",i),I(),n(5,d=""),n(6,h=""),await p()}catch(te){n(8,C=ke(o.error_join,{err:te})),se(C,"error"),f||(n(5,d=Ce),n(6,h=""),n(2,f=!0))}}async function oe(){n(15,M={message:o.confirm_leave,confirmLabel:o.leave,run:async()=>{try{await window.go.main.App.LeaveRoom(),se(o.notif_left),await p()}catch(P){se(ke(o.error_leave,{err:P}),"error")}}})}async function G(P){const ee=r.room===P;n(15,M={message:ee?o.confirm_leave_remove:ke(o.confirm_remove,{name:P}),confirmLabel:o.remove,danger:!0,run:async()=>{try{ee&&await window.go.main.App.LeaveRoom(),await window.go.main.App.RemoveSavedRoom(P),se(ke(o.notif_removed,{name:P})),await p()}catch(Ce){se(ke(o.error_remove,{err:Ce}),"error")}}})}async function O(P){n(15,M={message:ke(o.confirm_delete,{name:P}),confirmLabel:o.delete_room,danger:!0,run:async()=>{try{await window.go.main.App.DeleteRoom(P),await window.go.main.App.RemoveSavedRoom(P),se(ke(o.notif_deleted,{name:P})),await p()}catch(ee){se(String(ee),"error")}}})}async function N(P){try{const ee=await window.go.main.App.FormatInvite(P.name,P.password||"");await window.go.main.App.CopyText(ee);const Ce=String(ee).split("|"),me=Ce.length>=3&&Ce[2]!=="";P.locked&&!me?se(o.invite_no_password,"info"):se(o.invite_copied)}catch(ee){se(String(ee),"error")}}async function B(){try{const P=await window.go.main.App.LoadConfig();P.serverAddr&&(S=P.serverAddr),P.nickname&&(L=P.nickname)}catch{}}async function F(P,ee,Ce){if(!R){n(11,R=P),n(12,D=null);try{await B();const me=Ce||S;if(!r.connected){if(!me||!L){se(o.notif_need_config,"error"),Et(We,i="connect",i);return}const te=await window.go.main.App.Connect(me,L);Fe.set(te),await p()}await window.go.main.App.JoinRoom(P,ee||""),Et(We,i="network",i),await p()}catch(me){const te=ke(o.error_join,{err:me});se(te,"error"),n(5,d=P),n(6,h=""),n(8,C=te),n(2,f=!0)}finally{n(11,R="")}}}function q(P,ee){(P.key==="Enter"||P.key===" ")&&(P.preventDefault(),F(ee.name,ee.password,ee.server))}function ne(P,ee){P.stopPropagation(),n(12,D=D===ee?null:ee)}function ie(P,ee){P.stopPropagation(),n(12,D=null),ee()}function ye(P){Lt.call(this,e,P)}function Me(P){Lt.call(this,e,P)}function Te(P){Lt.call(this,e,P)}function ge(P){Lt.call(this,e,P)}function fe(P){Lt.call(this,e,P)}function De(P){Lt.call(this,e,P)}const Se=(P,ee)=>ne(ee,P.name),re=(P,ee)=>ie(ee,()=>N(P)),ce=P=>ie(P,oe),Ke=(P,ee)=>ie(ee,()=>G(P.name)),Le=(P,ee)=>ie(ee,()=>O(P.name)),Ee=P=>F(P.name,P.password,P.server),je=(P,ee)=>q(ee,P);function we(){_=this.value,n(3,_)}function ve(){m=this.value,n(4,m)}function x(P){_n[P?"unshift":"push"](()=>{y=P,n(13,y)})}const ae=P=>P.key==="Escape"&&Z();function nt(){d=this.value,n(5,d)}function Ne(){h=this.value,n(6,h)}const Be=()=>le();function He(P){_n[P?"unshift":"push"](()=>{E=P,n(14,E)})}return[c,u,f,_,m,d,h,g,C,w,b,R,D,y,E,M,o,r,T,Z,z,I,U,le,oe,G,O,N,F,q,ne,ie,ye,Me,Te,ge,fe,De,Se,re,ce,Ke,Le,Ee,je,we,ve,x,ae,nt,Ne,Be,He,P=>P.key==="Escape"&&I(),async()=>{const P=M?.run;n(15,M=null),P&&await P()},()=>n(15,M=null)]}class Wi extends yt{constructor(t){super(),wt(this,t,qi,Ui,pt,{},null,[-1,-1,-1])}}function No(e,t,n){const o=e.slice();o[23]=t[n],o[26]=n;const i=Gi(o[23]);return o[24]=i,o}function Mo(e){let t,n=e[5].room_chat+"",o,i,r,c,u=e[3]>0&&To(e);return{c(){t=a("button"),o=k(n),i=v(),u&&u.c(),s(t,"type","button"),s(t,"class","bezel")},m(f,_){Y(f,t,_),l(t,o),l(t,i),u&&u.m(t,null),r||(c=W(t,"click",e[8]),r=!0)},p(f,_){_&32&&n!==(n=f[5].room_chat+"")&&j(o,n),f[3]>0?u?u.p(f,_):(u=To(f),u.c(),u.m(t,null)):u&&(u.d(1),u=null)},d(f){f&&V(t),u&&u.d(),r=!1,c()}}}function To(e){let t,n;return{c(){t=a("span"),n=k(e[3]),s(t,"class","badge svelte-1ywbfno")},m(o,i){Y(o,t,i),l(t,n)},p(o,i){i&8&&j(n,o[3])},d(o){o&&V(t)}}}function Io(e){let t,n=e[5].status_relay_degraded+"",o;return{c(){t=a("p"),o=k(n),s(t,"class","section-hint fault svelte-1ywbfno")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r&32&&n!==(n=i[5].status_relay_degraded+"")&&j(o,n)},d(i){i&&V(t)}}}function Ro(e){let t,n,o=e[5].no_peers+"",i,r,c,u=e[5].no_peers_desc+"",f,_;return{c(){t=a("div"),n=a("div"),i=k(o),r=v(),c=a("p"),f=k(u),_=v(),s(n,"class","empty-label svelte-1ywbfno"),s(c,"class","empty-desc svelte-1ywbfno"),s(t,"class","empty svelte-1ywbfno")},m(m,d){Y(m,t,d),l(t,n),l(n,i),l(t,r),l(t,c),l(c,f),l(t,_)},p(m,d){d&32&&o!==(o=m[5].no_peers+"")&&j(i,o),d&32&&u!==(u=m[5].no_peers_desc+"")&&j(f,u)},d(m){m&&V(t)}}}function Oo(e){let t,n=e[11](e[23].id)+"",o;return{c(){t=a("span"),o=k(n),s(t,"class","badge svelte-1ywbfno")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r&16&&n!==(n=i[11](i[23].id)+"")&&j(o,n)},d(i){i&&V(t)}}}function Fi(e){let t;return{c(){t=k("…")},m(n,o){Y(n,t,o)},p:Pe,d(n){n&&V(t)}}}function Ki(e){let t=e[23].ping+"",n,o;return{c(){n=k(t),o=k("ms")},m(i,r){Y(i,n,r),Y(i,o,r)},p(i,r){r&16&&t!==(t=i[23].ping+"")&&j(n,t)},d(i){i&&(V(n),V(o))}}}function Bi(e){let t;return{c(){t=k("—")},m(n,o){Y(n,t,o)},p:Pe,d(n){n&&V(t)}}}function zo(e,t){let n,o,i=gs(t[26]+1)+"",r,c,u,f=(t[23].nickname||t[23].id)+"",_,m,d=t[11](t[23].id)>0,h,g,C=(t[23].virtualIP||t[5].na)+"",w,b,S,L,R,D,y,E,M=(t[23].connected&&t[23].path?t[12](t[23].path):t[5].path_unknown)+"",J,H,p,T,Z,z,I,U=t[5].ping_peer+"",le,oe,G,O,N=t[5].chat+"",B,F,q,ne,ie=d&&Oo(t);function ye(){return t[19](t[23])}function Me(...re){return t[20](t[23],...re)}function Te(re,ce){return re[23].connected?re[23].ping>=0&&!re[2][re[23].id]?Ki:Fi:Bi}let ge=Te(t),fe=ge(t);function De(){return t[21](t[23])}function Se(){return t[22](t[23])}return{key:e,first:null,c(){n=a("article"),o=a("span"),r=k(i),c=v(),u=a("div"),_=k(f),m=v(),ie&&ie.c(),h=v(),g=a("button"),w=k(C),b=v(),S=a("span"),L=Pt("svg"),R=Pt("line"),D=Pt("circle"),y=Pt("circle"),E=v(),J=k(M),p=v(),T=a("span"),fe.c(),Z=v(),z=a("div"),I=a("button"),le=k(U),G=v(),O=a("button"),B=k(N),F=v(),s(o,"class","ch svelte-1ywbfno"),s(u,"class","nickname svelte-1ywbfno"),s(g,"type","button"),s(g,"class","peer-ip svelte-1ywbfno"),s(R,"x1","3"),s(R,"y1","5"),s(R,"x2","37"),s(R,"y2","5"),s(R,"class","svelte-1ywbfno"),s(D,"cx","5"),s(D,"cy","5"),s(D,"r","2"),s(D,"class","svelte-1ywbfno"),s(y,"cx","35"),s(y,"cy","5"),s(y,"r","2"),s(y,"class","svelte-1ywbfno"),s(L,"class","trace svelte-1ywbfno"),s(L,"viewBox","0 0 40 10"),s(L,"aria-hidden","true"),s(S,"class","col-path svelte-1ywbfno"),s(S,"title",H=t[13](t[23].path)),X(S,"live",t[24]==="live"),X(S,"fault",t[24]==="fault"),X(S,"idle",t[24]==="idle"),s(T,"class","col-ping svelte-1ywbfno"),X(T,"probing",t[23].connected&&(t[23].ping<0||t[2][t[23].id])),s(I,"class","btn btn-ghost btn-sm svelte-1ywbfno"),I.disabled=oe=!t[23].connected||!!t[2][t[23].id],s(O,"class","btn btn-ghost btn-sm svelte-1ywbfno"),s(z,"class","peer-actions svelte-1ywbfno"),s(n,"class","peer-row svelte-1ywbfno"),s(n,"role","listitem"),this.first=n},m(re,ce){Y(re,n,ce),l(n,o),l(o,r),l(n,c),l(n,u),l(u,_),l(u,m),ie&&ie.m(u,null),l(n,h),l(n,g),l(g,w),l(n,b),l(n,S),l(S,L),l(L,R),l(L,D),l(L,y),l(S,E),l(S,J),l(n,p),l(n,T),fe.m(T,null),l(n,Z),l(n,z),l(z,I),l(I,le),l(z,G),l(z,O),l(O,B),l(n,F),q||(ne=[W(g,"click",ye),W(g,"keydown",Me),W(I,"click",De),W(O,"click",Se)],q=!0)},p(re,ce){t=re,ce&16&&i!==(i=gs(t[26]+1)+"")&&j(r,i),ce&16&&f!==(f=(t[23].nickname||t[23].id)+"")&&j(_,f),ce&16&&(d=t[11](t[23].id)>0),d?ie?ie.p(t,ce):(ie=Oo(t),ie.c(),ie.m(u,null)):ie&&(ie.d(1),ie=null),ce&48&&C!==(C=(t[23].virtualIP||t[5].na)+"")&&j(w,C),ce&48&&M!==(M=(t[23].connected&&t[23].path?t[12](t[23].path):t[5].path_unknown)+"")&&j(J,M),ce&16&&H!==(H=t[13](t[23].path))&&s(S,"title",H),ce&16&&X(S,"live",t[24]==="live"),ce&16&&X(S,"fault",t[24]==="fault"),ce&16&&X(S,"idle",t[24]==="idle"),ge===(ge=Te(t))&&fe?fe.p(t,ce):(fe.d(1),fe=ge(t),fe&&(fe.c(),fe.m(T,null))),ce&20&&X(T,"probing",t[23].connected&&(t[23].ping<0||t[2][t[23].id])),ce&32&&U!==(U=t[5].ping_peer+"")&&j(le,U),ce&20&&oe!==(oe=!t[23].connected||!!t[2][t[23].id])&&(I.disabled=oe),ce&32&&N!==(N=t[5].chat+"")&&j(B,N)},d(re){re&&V(n),ie&&ie.d(),fe.d(),q=!1,Re(ne)}}}function Hi(e){let t,n,o,i=e[5].channels+"",r,c,u=(e[1].room||e[5].peers_list)+"",f,_,m,d,h,g,C,w=e[5].col_ch+"",b,S,L,R=e[5].col_nickname+"",D,y,E,M=e[5].col_ip+"",J,H,p,T=e[5].col_path+"",Z,z,I,U=e[5].col_ping+"",le,oe,G,O,N,B,F,q,ne,ie=(e[6].nickname||e[5].you)+"",ye,Me,Te,ge=e[5].me+"",fe,De,Se,re=(e[1].virtualIP||e[5].na)+"",ce,Ke,Le,Ee=e[5].path_unknown+"",je,we,ve,x,ae,nt,Ne=[],Be=new Map,He,at,Ie,be=e[1].room&&Mo(e),P=e[0]==="relay"&&Io(e),ee=_t(e[4]);const Ce=te=>te[23].id;for(let te=0;ten(5,r=p)),pe(e,js,p=>n(15,c=p)),pe(e,Fe,p=>n(1,u=p)),pe(e,_s,p=>n(16,f=p)),pe(e,Ze,p=>n(6,_=p));let{pathAggregate:m="disconnected"}=t,d={};function h(p){Nl.set({id:p.id,nickname:p.nickname||p.id}),ms("peer:"+p.id),it.set(!0)}function g(){Nl.set(null),ms("room:"+(u.room||"network")),it.set(!0)}async function C(p){if(p)try{await window.go.main.App.CopyText(p),se(r.copied)}catch{}}async function w(p){if(!(!p?.id||!p.connected||d[p.id])){n(2,d={...d,[p.id]:!0});try{await window.go.main.App.PingPeer(p.id),se(ke(r.ping_sent,{name:p.nickname||p.id}))}catch(T){se(ke(r.error_ping,{err:T}),"error")}finally{setTimeout(()=>{const T={...d};delete T[p.id],n(2,d=T)},800)}}}function b(p){return c["peer:"+p]||0}function S(p){return p==="p2p"?r.path_p2p:p==="relay"?r.path_relay:p==="ws"?r.path_ws:r.path_unknown}function L(p){return p==="p2p"?r.path_p2p_tip:p==="relay"?r.path_relay_tip:p==="ws"?r.path_ws_tip:""}function R(p,T){(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),C(T))}const D=()=>C(u.virtualIP),y=p=>R(p,u.virtualIP),E=p=>C(p.virtualIP),M=(p,T)=>R(T,p.virtualIP),J=p=>w(p),H=p=>h(p);return e.$$set=p=>{"pathAggregate"in p&&n(0,m=p.pathAggregate)},e.$$.update=()=>{e.$$.dirty&65536&&n(4,o=[...f].sort((p,T)=>(p.nickname||"").localeCompare(T.nickname||""))),e.$$.dirty&32770&&n(3,i=c["room:"+(u.room||"network")]||0)},[m,u,d,i,o,r,_,h,g,C,w,b,S,L,R,c,f,D,y,E,M,J,H]}class Yi extends yt{constructor(t){super(),wt(this,t,Vi,Hi,pt,{pathAggregate:0})}}function Xi(e){let t,n,o,i,r,c,u,f,_,m,d,h;return{c(){t=a("button"),n=a("span"),o=v(),i=a("span"),i.innerHTML='',r=v(),c=a("span"),c.innerHTML='',u=v(),f=a("span"),s(n,"class","theme-switch-track"),s(i,"class","theme-switch-icon theme-switch-sun"),s(i,"aria-hidden","true"),s(c,"class","theme-switch-icon theme-switch-moon"),s(c,"aria-hidden","true"),s(f,"class","theme-switch-thumb"),s(t,"type","button"),s(t,"class","theme-switch"),s(t,"aria-label",_=e[1]?e[2].theme_light:e[2].theme_dark),s(t,"title",m=e[2].theme),X(t,"is-dark",e[1]),X(t,"is-chrome",e[0])},m(g,C){Y(g,t,C),l(t,n),l(t,o),l(t,i),l(t,r),l(t,c),l(t,u),l(t,f),d||(h=W(t,"click",e[3]),d=!0)},p(g,[C]){C&6&&_!==(_=g[1]?g[2].theme_light:g[2].theme_dark)&&s(t,"aria-label",_),C&4&&m!==(m=g[2].theme)&&s(t,"title",m),C&2&&X(t,"is-dark",g[1]),C&1&&X(t,"is-chrome",g[0])},i:Pe,o:Pe,d(g){g&&V(t),d=!1,h()}}}function Zi(e,t,n){let o,i,r;pe(e,Ze,_=>n(4,i=_)),pe(e,jt,_=>n(2,r=_));let{chrome:c=!1}=t;async function u(_){Ze.update(m=>({...m,theme:_}));try{const m=fn(Ze);await window.go.main.App.SaveSettings({...m,theme:_})}catch{}}function f(){u(o?"light":"dark")}return e.$$set=_=>{"chrome"in _&&n(0,c=_.chrome)},e.$$.update=()=>{e.$$.dirty&16&&n(1,o=(i.theme||"dark")!=="light")},[c,o,r,f,i]}class ai extends yt{constructor(t){super(),wt(this,t,Zi,Xi,pt,{chrome:0})}}function Uo(e,t,n){const o=e.slice();return o[18]=t[n],o[20]=n,o}function qo(e){let t;return{c(){t=a("span"),s(t,"class","seg svelte-10p19bf"),X(t,"on",e[20]n(1,f=y)),pe(e,Fe,y=>n(8,_=y)),pe(e,We,y=>n(9,m=y));let{pathAggregate:d="disconnected"}=t,{relayCount:h=0}=t;const g={direct:{n:7,tone:"live"},relay:{n:5,tone:"fault"},reconnecting:{n:3,tone:"fault"},disconnected:{n:0,tone:"idle"}};function C(){We.set("network")}function w(){We.set(m==="settings"?"network":"settings")}async function b(){if(_.virtualIP)try{await window.go.main.App.CopyText(_.virtualIP),se(f.copied)}catch{}}let S=!1;async function L(){n(2,S=!1);try{await window.go.main.App.Disconnect(),Fe.set({connected:!1,reconnecting:!1,server:"",room:"",virtualIP:"",peerCount:0,isOwner:!1,phase:"idle"}),it.set(!1),We.set("connect"),se(f.notif_disconnected)}catch(y){se(ke(f.error_disconnect,{err:y}),"error")}}const R=()=>n(2,S=!0),D=()=>n(2,S=!1);return e.$$set=y=>{"pathAggregate"in y&&n(14,d=y.pathAggregate),"relayCount"in y&&n(0,h=y.relayCount)},e.$$.update=()=>{e.$$.dirty&16384&&n(7,o=d==="direct"),e.$$.dirty&16384&&n(6,i=d==="relay"||d==="reconnecting"),e.$$.dirty&16384&&n(5,r=d==="disconnected"),e.$$.dirty&16384&&n(4,c=g[d]||g.disconnected),e.$$.dirty&16386&&n(3,u=d==="reconnecting"?f.status_reconnecting:d==="relay"?f.status_relay_degraded:d==="direct"?f.status_direct:f.status_disconnected)},[h,f,S,u,c,r,i,o,_,m,C,w,b,L,d,R,D]}class xi extends yt{constructor(t){super(),wt(this,t,$i,Qi,pt,{pathAggregate:14,relayCount:0})}}function ea(e){let t,n,o,i,r=e[0].server+"",c,u,f,_=e[1].server+"",m,d,h,g,C=e[0].virtual_ip+"",w,b,S,L=(e[1].virtualIP||e[0].na)+"",R,D,y,E=e[0].disconnect+"",M,J,H;function p(z,I){return z[1].reconnecting?la:na}let T=p(e),Z=T(e);return{c(){t=a("div"),Z.c(),n=v(),o=a("div"),i=a("span"),c=k(r),u=v(),f=a("span"),m=k(_),d=v(),h=a("div"),g=a("span"),w=k(C),b=v(),S=a("span"),R=k(L),D=v(),y=a("button"),M=k(E),s(f,"class","info-value svelte-1br9j49"),s(o,"class","info-line svelte-1br9j49"),s(S,"class","info-value svelte-1br9j49"),s(h,"class","info-line svelte-1br9j49"),s(y,"class","disconnect-btn svelte-1br9j49"),s(t,"class","connected-info svelte-1br9j49")},m(z,I){Y(z,t,I),Z.m(t,null),l(t,n),l(t,o),l(o,i),l(i,c),l(o,u),l(o,f),l(f,m),l(t,d),l(t,h),l(h,g),l(g,w),l(h,b),l(h,S),l(S,R),l(t,D),l(t,y),l(y,M),J||(H=W(y,"click",e[12]),J=!0)},p(z,I){T===(T=p(z))&&Z?Z.p(z,I):(Z.d(1),Z=T(z),Z&&(Z.c(),Z.m(t,n))),I&1&&r!==(r=z[0].server+"")&&j(c,r),I&2&&_!==(_=z[1].server+"")&&j(m,_),I&1&&C!==(C=z[0].virtual_ip+"")&&j(w,C),I&3&&L!==(L=(z[1].virtualIP||z[0].na)+"")&&j(R,L),I&1&&E!==(E=z[0].disconnect+"")&&j(M,E)},d(z){z&&V(t),Z.d(),J=!1,H()}}}function ta(e){let t,n,o,i=e[0].brand+"",r,c,u,f=e[0].tagline+"",_,m,d,h,g=e[0].server_addr+"",C,w,b,S,L,R,D,y,E,M=e[0].nickname+"",J,H,p,T,Z,z,I,U,le=(e[5]?e[0].connecting:e[0].connect)+"",oe,G,O,N,B,F=e[0].paste_invite+"",q,ne,ie,ye,Me=e[0].paste_invite+"",Te,ge,fe,De,Se,re,ce=e[0].join+"",Ke,Le,Ee,je=e[7].serverAddr&&Fo(e),we=e[7].nickname&&Ko(e),ve=(e[5]||e[1].phase==="dialing"||e[1].phase==="auth")&&Bo(e);return{c(){t=a("div"),n=a("div"),o=a("h1"),r=k(i),c=v(),u=a("p"),_=k(f),m=v(),d=a("div"),h=a("label"),C=k(g),w=v(),b=a("input"),R=v(),je&&je.c(),D=v(),y=a("div"),E=a("label"),J=k(M),H=v(),p=a("input"),z=v(),we&&we.c(),I=v(),U=a("button"),oe=k(le),G=v(),ve&&ve.c(),O=v(),N=a("details"),B=a("summary"),q=k(F),ne=v(),ie=a("div"),ye=a("label"),Te=k(Me),ge=v(),fe=a("input"),Se=v(),re=a("button"),Ke=k(ce),s(o,"class","brand svelte-1br9j49"),s(u,"class","tagline svelte-1br9j49"),s(n,"class","brand-block svelte-1br9j49"),s(h,"for","server-input"),s(h,"class","svelte-1br9j49"),s(b,"id","server-input"),s(b,"type","text"),s(b,"placeholder","host:8080"),s(b,"aria-invalid",S=!!e[7].serverAddr),s(b,"aria-describedby",L=e[7].serverAddr?"server-err":void 0),s(b,"class","svelte-1br9j49"),X(b,"invalid",e[7].serverAddr),s(d,"class","field svelte-1br9j49"),s(E,"for","nick-input"),s(E,"class","svelte-1br9j49"),s(p,"id","nick-input"),s(p,"type","text"),s(p,"placeholder","Player"),s(p,"aria-invalid",T=!!e[7].nickname),s(p,"aria-describedby",Z=e[7].nickname?"nick-err":void 0),s(p,"class","svelte-1br9j49"),X(p,"invalid",e[7].nickname),s(y,"class","field svelte-1br9j49"),s(U,"class","connect-btn svelte-1br9j49"),U.disabled=e[5],s(B,"class","svelte-1br9j49"),s(ye,"for","invite-input"),s(ye,"class","sr-only svelte-1br9j49"),s(fe,"id","invite-input"),s(fe,"type","text"),s(fe,"placeholder",De=e[0].invite_placeholder),s(fe,"class","svelte-1br9j49"),s(re,"class","secondary-btn svelte-1br9j49"),re.disabled=e[5],s(ie,"class","invite-block svelte-1br9j49"),s(N,"class","invite-disclosure svelte-1br9j49"),s(t,"class","connect-form svelte-1br9j49")},m(x,ae){Y(x,t,ae),l(t,n),l(n,o),l(o,r),l(n,c),l(n,u),l(u,_),l(t,m),l(t,d),l(d,h),l(h,C),l(d,w),l(d,b),_e(b,e[2]),l(d,R),je&&je.m(d,null),l(t,D),l(t,y),l(y,E),l(E,J),l(y,H),l(y,p),_e(p,e[3]),l(y,z),we&&we.m(y,null),l(t,I),l(t,U),l(U,oe),l(t,G),ve&&ve.m(t,null),l(t,O),l(t,N),l(N,B),l(B,q),l(N,ne),l(N,ie),l(ie,ye),l(ye,Te),l(ie,ge),l(ie,fe),_e(fe,e[4]),l(ie,Se),l(ie,re),l(re,Ke),N.open=e[6],Le||(Ee=[W(b,"input",e[13]),W(p,"input",e[14]),W(p,"keydown",e[11]),W(U,"click",e[9]),W(fe,"input",e[15]),W(re,"click",e[10]),W(N,"toggle",e[16])],Le=!0)},p(x,ae){ae&1&&i!==(i=x[0].brand+"")&&j(r,i),ae&1&&f!==(f=x[0].tagline+"")&&j(_,f),ae&1&&g!==(g=x[0].server_addr+"")&&j(C,g),ae&128&&S!==(S=!!x[7].serverAddr)&&s(b,"aria-invalid",S),ae&128&&L!==(L=x[7].serverAddr?"server-err":void 0)&&s(b,"aria-describedby",L),ae&4&&b.value!==x[2]&&_e(b,x[2]),ae&128&&X(b,"invalid",x[7].serverAddr),x[7].serverAddr?je?je.p(x,ae):(je=Fo(x),je.c(),je.m(d,null)):je&&(je.d(1),je=null),ae&1&&M!==(M=x[0].nickname+"")&&j(J,M),ae&128&&T!==(T=!!x[7].nickname)&&s(p,"aria-invalid",T),ae&128&&Z!==(Z=x[7].nickname?"nick-err":void 0)&&s(p,"aria-describedby",Z),ae&8&&p.value!==x[3]&&_e(p,x[3]),ae&128&&X(p,"invalid",x[7].nickname),x[7].nickname?we?we.p(x,ae):(we=Ko(x),we.c(),we.m(y,null)):we&&(we.d(1),we=null),ae&33&&le!==(le=(x[5]?x[0].connecting:x[0].connect)+"")&&j(oe,le),ae&32&&(U.disabled=x[5]),x[5]||x[1].phase==="dialing"||x[1].phase==="auth"?ve?ve.p(x,ae):(ve=Bo(x),ve.c(),ve.m(t,O)):ve&&(ve.d(1),ve=null),ae&1&&F!==(F=x[0].paste_invite+"")&&j(q,F),ae&1&&Me!==(Me=x[0].paste_invite+"")&&j(Te,Me),ae&1&&De!==(De=x[0].invite_placeholder)&&s(fe,"placeholder",De),ae&16&&fe.value!==x[4]&&_e(fe,x[4]),ae&1&&ce!==(ce=x[0].join+"")&&j(Ke,ce),ae&32&&(re.disabled=x[5]),ae&64&&(N.open=x[6])},d(x){x&&V(t),je&&je.d(),we&&we.d(),ve&&ve.d(),Le=!1,Re(Ee)}}}function na(e){let t,n,o,i,r=e[0].connected+"",c;return{c(){t=a("div"),n=a("span"),o=v(),i=a("span"),c=k(r),s(n,"class","sq sq-green svelte-1br9j49"),s(n,"aria-hidden","true"),s(t,"class","connected-line svelte-1br9j49"),s(t,"role","status")},m(u,f){Y(u,t,f),l(t,n),l(t,o),l(t,i),l(i,c)},p(u,f){f&1&&r!==(r=u[0].connected+"")&&j(c,r)},d(u){u&&V(t)}}}function la(e){let t,n,o,i,r=e[0].reconnecting+"",c;return{c(){t=a("div"),n=a("span"),o=v(),i=a("span"),c=k(r),s(n,"class","sq sq-warn svelte-1br9j49"),s(n,"aria-hidden","true"),s(t,"class","connected-line svelte-1br9j49"),s(t,"role","status")},m(u,f){Y(u,t,f),l(t,n),l(t,o),l(t,i),l(i,c)},p(u,f){f&1&&r!==(r=u[0].reconnecting+"")&&j(c,r)},d(u){u&&V(t)}}}function Fo(e){let t,n=e[7].serverAddr+"",o;return{c(){t=a("span"),o=k(n),s(t,"id","server-err"),s(t,"class","field-error svelte-1br9j49"),s(t,"role","alert")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r&128&&n!==(n=i[7].serverAddr+"")&&j(o,n)},d(i){i&&V(t)}}}function Ko(e){let t,n=e[7].nickname+"",o;return{c(){t=a("span"),o=k(n),s(t,"id","nick-err"),s(t,"class","field-error svelte-1br9j49"),s(t,"role","alert")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r&128&&n!==(n=i[7].nickname+"")&&j(o,n)},d(i){i&&V(t)}}}function Bo(e){let t,n=(e[8]||e[0].connecting)+"",o;return{c(){t=a("div"),o=k(n),s(t,"class","phase svelte-1br9j49"),s(t,"role","status")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r&257&&n!==(n=(i[8]||i[0].connecting)+"")&&j(o,n)},d(i){i&&V(t)}}}function sa(e){let t;function n(r,c){return r[1].connected?ea:ta}let o=n(e),i=o(e);return{c(){t=a("div"),i.c(),s(t,"class","connect-view svelte-1br9j49")},m(r,c){Y(r,t,c),i.m(t,null)},p(r,[c]){o===(o=n(r))&&i?i.p(r,c):(i.d(1),i=o(r),i&&(i.c(),i.m(t,null)))},i:Pe,o:Pe,d(r){r&&V(t),i.d()}}}function oa(e,t,n){let o,i,r,c;pe(e,jt,E=>n(0,i=E)),pe(e,Fe,E=>n(1,r=E)),pe(e,Ze,E=>n(17,c=E));let u="",f="",_="",m=!1,d=!1,h={};Ml(async()=>{const E=await window.go.main.App.LoadConfig();E.serverAddr&&n(2,u=E.serverAddr),E.nickname&&n(3,f=E.nickname),E&&Ze.set({...c,...E}),E.autoConnect&&E.serverAddr&&E.nickname&&C()});function g(){const E={};return u.trim()||(E.serverAddr=i.field_required),f.trim()||(E.nickname=i.field_required),n(7,h=E),Object.keys(E).length===0}async function C(){if(!m&&g()){n(5,m=!0),yn();try{const E=await window.go.main.App.Connect(u,f);Fe.set(E),We.set("network"),it.set(!0),se(ke(i.notif_connected,{addr:u})),n(7,h={})}catch(E){se(ke(i.error_connect,{err:E}),"error")}finally{n(5,m=!1)}}}async function w(){if(_.trim()){yn();try{const E=await window.go.main.App.ParseInvite(_.trim());if(!E.server||!E.room){se(i.error_invalid_invite,"error");return}if(n(2,u=E.server),!r.connected){if(!f.trim()){n(7,h={...h,nickname:i.field_required}),se(i.notif_need_config,"error");return}n(5,m=!0);const M=await window.go.main.App.Connect(u,f);Fe.set(M),n(5,m=!1)}await window.go.main.App.JoinRoom(E.room,E.password||""),se(ke(i.notif_joined,{name:E.room})),We.set("network"),it.set(!0)}catch(E){se(ke(i.error_join,{err:E}),"error"),n(5,m=!1)}}}function b(E){E.key==="Enter"&&(E.preventDefault(),C())}async function S(){if(confirm(i.confirm_disconnect))try{await window.go.main.App.Disconnect(),Fe.set({connected:!1,reconnecting:!1,server:"",room:"",virtualIP:"",peerCount:0,isOwner:!1,phase:"idle"}),it.set(!1),We.set("connect"),se(i.notif_disconnected)}catch(E){se(ke(i.error_disconnect,{err:E}),"error")}}function L(){u=this.value,n(2,u)}function R(){f=this.value,n(3,f)}function D(){_=this.value,n(4,_)}function y(){d=this.open,n(6,d)}return e.$$.update=()=>{e.$$.dirty&3&&n(8,o=r.phase==="dialing"?i.phase_dialing:r.phase==="auth"?i.phase_auth:r.phase==="ready"?i.phase_ready:r.phase==="error"?i.phase_error:"")},[i,r,u,f,_,m,d,h,o,C,w,b,S,L,R,D,y]}class ia extends yt{constructor(t){super(),wt(this,t,oa,sa,pt,{})}}function Ho(e,t,n){const o=e.slice();return o[23]=t[n],o[25]=n,o}function Jo(e){let t,n,o=e[0].no_messages+"",i,r,c,u=e[0].no_messages_desc+"",f;return{c(){t=a("div"),n=a("div"),i=k(o),r=v(),c=a("p"),f=k(u),s(n,"class","empty-label svelte-19atdil"),s(c,"class","empty-desc svelte-19atdil"),s(t,"class","empty svelte-19atdil")},m(_,m){Y(_,t,m),l(t,n),l(n,i),l(t,r),l(t,c),l(c,f)},p(_,m){m&1&&o!==(o=_[0].no_messages+"")&&j(i,o),m&1&&u!==(u=_[0].no_messages_desc+"")&&j(f,u)},d(_){_&&V(t)}}}function Go(e){let t,n=e[12](e[23].timestamp)+"",o;return{c(){t=a("div"),o=k(n),s(t,"class","date-sep svelte-19atdil")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r&128&&n!==(n=i[12](i[23].timestamp)+"")&&j(o,n)},d(i){i&&V(t)}}}function aa(e){let t,n,o,i=new Date(e[23].timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+"",r,c,u,f=(e[23].isSelf?e[6].nickname||e[0].you_self:e[23].nickname)+"",_,m,d,h,g,C=e[23].message+"",w,b,S=e[23].status==="pending"&&Vo(),L=e[23].status==="failed"&&Yo(e);return{c(){t=a("div"),n=a("div"),o=a("span"),r=k(i),c=v(),u=a("span"),_=k(f),m=v(),S&&S.c(),d=v(),L&&L.c(),h=v(),g=a("div"),w=k(C),b=v(),s(o,"class","msg-time svelte-19atdil"),s(u,"class","msg-nick svelte-19atdil"),s(n,"class","msg-meta svelte-19atdil"),s(g,"class","msg-body svelte-19atdil"),s(t,"class","msg svelte-19atdil"),X(t,"self",e[23].isSelf),X(t,"failed",e[23].status==="failed")},m(R,D){Y(R,t,D),l(t,n),l(n,o),l(o,r),l(n,c),l(n,u),l(u,_),l(n,m),S&&S.m(n,null),l(n,d),L&&L.m(n,null),l(t,h),l(t,g),l(g,w),l(t,b)},p(R,D){D&128&&i!==(i=new Date(R[23].timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+"")&&j(r,i),D&193&&f!==(f=(R[23].isSelf?R[6].nickname||R[0].you_self:R[23].nickname)+"")&&j(_,f),R[23].status==="pending"?S||(S=Vo(),S.c(),S.m(n,d)):S&&(S.d(1),S=null),R[23].status==="failed"?L?L.p(R,D):(L=Yo(R),L.c(),L.m(n,null)):L&&(L.d(1),L=null),D&128&&C!==(C=R[23].message+"")&&j(w,C),D&128&&X(t,"self",R[23].isSelf),D&128&&X(t,"failed",R[23].status==="failed")},d(R){R&&V(t),S&&S.d(),L&&L.d()}}}function ra(e){let t,n=e[23].message+"",o;return{c(){t=a("div"),o=k(n),s(t,"class","system-line svelte-19atdil")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r&128&&n!==(n=i[23].message+"")&&j(o,n)},d(i){i&&V(t)}}}function Vo(e){let t;return{c(){t=a("span"),t.textContent="…",s(t,"class","msg-status")},m(n,o){Y(n,t,o)},d(n){n&&V(t)}}}function Yo(e){let t,n=e[0].retry+"",o,i,r;function c(){return e[18](e[23])}return{c(){t=a("button"),o=k(n),s(t,"class","retry-btn svelte-19atdil")},m(u,f){Y(u,t,f),l(t,o),i||(r=W(t,"click",c),i=!0)},p(u,f){e=u,f&1&&n!==(n=e[0].retry+"")&&j(o,n)},d(u){u&&V(t),i=!1,r()}}}function Xo(e,t){let n,o=Zo(t[23],t[25],t[7]),i,r,c=o&&Go(t);function u(m,d){return m[23].system?ra:aa}let f=u(t),_=f(t);return{key:e,first:null,c(){n=El(),c&&c.c(),i=v(),_.c(),r=El(),this.first=n},m(m,d){Y(m,n,d),c&&c.m(m,d),Y(m,i,d),_.m(m,d),Y(m,r,d)},p(m,d){t=m,d&128&&(o=Zo(t[23],t[25],t[7])),o?c?c.p(t,d):(c=Go(t),c.c(),c.m(i.parentNode,i)):c&&(c.d(1),c=null),f===(f=u(t))&&_?_.p(t,d):(_.d(1),_=f(t),_&&(_.c(),_.m(r.parentNode,r)))},d(m){m&&(V(n),V(i),V(r)),c&&c.d(m),_.d(m)}}}function ca(e){let t,n,o,i,r,c,u=e[0].close_chat+"",f,_,m,d,h=[],g=new Map,C,w,b,S,L,R,D,y,E=e[0].send+"",M,J,H,p,T=e[7].length===0&&Jo(e),Z=_t(e[7]);const z=I=>I[23].id;for(let I=0;In(15,r=p)),pe(e,jt,p=>n(0,c=p)),pe(e,Nl,p=>n(16,u=p)),pe(e,Ze,p=>n(6,f=p)),pe(e,it,p=>n(17,_=p)),pe(e,Ei,p=>n(7,m=p));let d="",h,g,C=!0;di(()=>{h&&C&&n(2,h.scrollTop=h.scrollHeight,h)});function w(){if(!h)return;C=h.scrollHeight-h.scrollTop-h.clientHeight<60}async function b(){const p=d.trim();if(!p)return;if(!r.connected){se(c.error_not_connected,"error");return}if(!r.room){se(c.send_disabled_no_room,"error");return}let T=p;const Z=[...p];Z.length>1e3&&(T=Z.slice(0,1e3).join(""),se(c.msg_truncated,"info")),n(1,d=""),g&&n(3,g.style.height="auto",g);const z="local_"+Date.now()+"_"+Math.random().toString(36).slice(2,7);Ss(z,f.nickname||c.you_self,T,!0,"pending");try{u&&u.id?await window.go.main.App.SendChat(u.id,T):await window.go.main.App.BroadcastChat(T),gn(z,"sent")}catch(I){gn(z,"failed"),se(ke(c.error_send,{err:I}),"error")}}async function S(p){gn(p.id,"pending");try{u&&u.id?await window.go.main.App.SendChat(u.id,p.message):await window.go.main.App.BroadcastChat(p.message),gn(p.id,"sent")}catch(T){gn(p.id,"failed"),se(ke(c.error_send,{err:T}),"error")}}function L(p){p.key==="Enter"&&!p.shiftKey&&(p.preventDefault(),b())}function R(p){const T=new Date(p),Z=new Date,z=new Date(Z.getFullYear(),Z.getMonth(),Z.getDate()),I=new Date(z-864e5),U=new Date(T.getFullYear(),T.getMonth(),T.getDate());return U.getTime()===z.getTime()?c.today:U.getTime()===I.getTime()?c.yesterday:T.toLocaleDateString([],{weekday:"long",month:"short",day:"numeric"})}function D(){g&&(n(3,g.style.height="auto",g),n(3,g.style.height=Math.min(g.scrollHeight,120)+"px",g))}function y(){it.set(!1)}const E=p=>S(p);function M(p){_n[p?"unshift":"push"](()=>{h=p,n(2,h)})}function J(p){_n[p?"unshift":"push"](()=>{g=p,n(3,g)})}function H(){d=this.value,n(1,d)}return e.$$.update=()=>{e.$$.dirty&131072&&_&&ms(jn()),e.$$.dirty&98305&&n(5,o=u?ke(c.chat_with,{name:u.nickname}):ke(c.room_chat_title,{room:r.room||c.network})),e.$$.dirty&32768&&n(4,i=r.connected&&!!r.room)},[c,d,h,g,i,o,f,m,w,b,S,L,R,D,y,r,u,_,E,M,J,H]}class fa extends yt{constructor(t){super(),wt(this,t,ua,ca,pt,{})}}function Qo(e){let t,n=e[9].notif_reconnect_required+"",o;return{c(){t=a("p"),o=k(n),s(t,"class","reconnect-banner svelte-zmj6k4"),s(t,"role","status")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r[0]&512&&n!==(n=i[9].notif_reconnect_required+"")&&j(o,n)},d(i){i&&V(t)}}}function $o(e){let t,n=e[9].apply_update+"",o,i,r;return{c(){t=a("button"),o=k(n),s(t,"class","btn btn-cta"),s(t,"type","button"),t.disabled=e[3]},m(c,u){Y(c,t,u),l(t,o),i||(r=W(t,"click",e[12]),i=!0)},p(c,u){u[0]&512&&n!==(n=c[9].apply_update+"")&&j(o,n),u[0]&8&&(t.disabled=c[3])},d(c){c&&V(t),i=!1,r()}}}function da(e){let t,n=e[9].update_failed+"",o,i,r;return{c(){t=a("p"),o=k(n),i=k(": "),r=k(e[6]),s(t,"class","hint reconnect-hint")},m(c,u){Y(c,t,u),l(t,o),l(t,i),l(t,r)},p(c,u){u[0]&512&&n!==(n=c[9].update_failed+"")&&j(o,n),u[0]&64&&j(r,c[6])},d(c){c&&V(t)}}}function _a(e){let t,n=e[9].update_downloading+"",o;return{c(){t=a("p"),o=k(n),s(t,"class","hint")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r[0]&512&&n!==(n=i[9].update_downloading+"")&&j(o,n)},d(i){i&&V(t)}}}function pa(e){let t,n=ke(e[9].update_available,{v:e[5]})+"",o;return{c(){t=a("p"),o=k(n),s(t,"class","hint")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r[0]&544&&n!==(n=ke(i[9].update_available,{v:i[5]})+"")&&j(o,n)},d(i){i&&V(t)}}}function va(e){let t,n=e[9].update_latest+"",o;return{c(){t=a("p"),o=k(n),s(t,"class","hint")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r[0]&512&&n!==(n=i[9].update_latest+"")&&j(o,n)},d(i){i&&V(t)}}}function ma(e){let t,n=e[9].update_checking+"",o;return{c(){t=a("p"),o=k(n),s(t,"class","hint")},m(i,r){Y(i,t,r),l(t,o)},p(i,r){r[0]&512&&n!==(n=i[9].update_checking+"")&&j(o,n)},d(i){i&&V(t)}}}function ha(e){let t,n,o,i=e[9].settings_title+"",r,c,u,f,_,m,d,h,g,C,w,b,S,L,R=e[9].section_connection+"",D,y,E,M,J,H,p,T,Z=e[9].server_addr+"",z,I,U,le,oe,G,O=e[9].nickname+"",N,B,F,q,ne,ie,ye=e[9].server_token+"",Me,Te,ge,fe,De,Se,re=e[9].reconnect_apply+"",ce,Ke,Le,Ee,je,we,ve,x=e[9].auto_connect+"",ae,nt,Ne,Be=e[9].auto_connect_desc+"",He,at,Ie,be,P,ee,Ce,me=e[9].auto_join+"",te,de,ze,St=e[9].auto_join_desc+"",Nt,rt,he,Ct,Qe,Je,Oe,$,ue=e[9].section_network+"",Ge,Ue,pn,Ut,Sn,Ae,Cn,An=e[9].advanced_warn+"",Rl,Es,qt,Ln,En=e[9].connection_mode+"",Ol,Ps,vt,Wt,Pn=e[9].connection_direct+"",zl,Ft,Dn=e[9].connection_relay+"",Ul,Ds,Nn,Mn=e[9].connection_mode_desc+"",ql,Ns,Kt,Tn,In=e[9].mtu+"",Wl,Ms,lt,Ts,Rn,On=e[9].mtu_desc+"",Fl,Is,Bt,zn,Un=e[9].dns_server+"",Kl,Rs,mt,Os,qn,Wn=e[9].dns_desc+"",Bl,zs,Ht,Fn,Kn=e[9].socks5+"",Hl,Us,ct,Bn,qs,Hn,Jn=e[9].socks5_desc+"",Jl,Ws,Jt,Gn,Vn=e[9].stun_server+"",Gl,Fs,ht,Ks,Yn,Xn=e[9].stun_desc+"",Vl,Bs,Gt,Zn,ut,Mt,Hs,Qn,$n=e[9].section_system+"",Yl,xn,Js,Vt,el,gt,Yt,Tt,Gs,tl,nl=e[9].start_windows+"",Xl,Vs,bt,ll,sl=e[9].updates+"",Zl,Ys,At,ol=e[9].check_updates+"",Ql,Xs,Zs,Qs,Xt,il,ft,It,$s,al,rl=e[9].section_appearance+"",$l,cl,xs,Zt,ul,dt,Qt,fl,dl=e[9].ui_scale+"",xl,eo,$t,st,_l,to,vn,pl=(e[0].uiScale??100)+"",es,no,lo,vl,ml=e[9].ui_scale_desc+"",ts,so,xt,hl,gl=e[9].theme+"",ns,oo,en,io,tn,bl,kl=e[9].language+"",ls,ao,kt,nn,wl=e[9].language_en+"",ss,ln,yl=e[9].language_ru+"",os,sn,jl=e[9].language_zh+"",is,ro,co,on,mn,Sl=e[9].reset+"",as,uo,hn,Cl=e[9].save+"",rs,cs,Rt,Q,us,fo,Ve=e[2]&&Qo(e),Ye=e[4]==="available"&&$o(e);function _o(A,K){if(A[4]==="checking")return ma;if(A[4]==="latest")return va;if(A[4]==="available")return pa;if(A[4]==="downloading")return _a;if(A[4]==="error"&&A[6])return da}let an=_o(e),Xe=an&&an(e);return en=new ai({}),Rt=new Ls({props:{open:!!e[7],message:e[7]?.message||"",confirmLabel:e[7]?.confirmLabel||e[9].save,danger:!!e[7]?.danger,onConfirm:e[34],onCancel:e[35]}}),{c(){t=a("div"),n=a("div"),o=a("h2"),r=k(i),c=v(),u=a("span"),f=k("v"),_=k(e[1]),m=v(),d=a("div"),Ve&&Ve.c(),h=v(),g=a("article"),C=a("div"),w=a("button"),b=a("span"),b.innerHTML='',S=v(),L=a("span"),D=k(R),E=v(),M=a("div"),J=a("div"),H=a("div"),p=a("div"),T=a("label"),z=k(Z),I=v(),U=a("input"),le=v(),oe=a("div"),G=a("label"),N=k(O),B=v(),F=a("input"),q=v(),ne=a("div"),ie=a("label"),Me=k(ye),Te=v(),ge=a("input"),De=v(),Se=a("p"),ce=k(re),Ke=v(),Le=a("label"),Ee=a("input"),je=v(),we=a("span"),ve=a("span"),ae=k(x),nt=v(),Ne=a("span"),He=k(Be),at=v(),Ie=a("label"),be=a("input"),P=v(),ee=a("span"),Ce=a("span"),te=k(me),de=v(),ze=a("span"),Nt=k(St),rt=v(),he=a("article"),Ct=a("div"),Qe=a("button"),Je=a("span"),Je.innerHTML='',Oe=v(),$=a("span"),Ge=k(ue),pn=v(),Ut=a("div"),Sn=a("div"),Ae=a("div"),Cn=a("p"),Rl=k(An),Es=v(),qt=a("div"),Ln=a("label"),Ol=k(En),Ps=v(),vt=a("select"),Wt=a("option"),zl=k(Pn),Ft=a("option"),Ul=k(Dn),Ds=v(),Nn=a("p"),ql=k(Mn),Ns=v(),Kt=a("div"),Tn=a("label"),Wl=k(In),Ms=v(),lt=a("input"),Ts=v(),Rn=a("p"),Fl=k(On),Is=v(),Bt=a("div"),zn=a("label"),Kl=k(Un),Rs=v(),mt=a("input"),Os=v(),qn=a("p"),Bl=k(Wn),zs=v(),Ht=a("div"),Fn=a("label"),Hl=k(Kn),Us=v(),ct=a("input"),qs=v(),Hn=a("p"),Jl=k(Jn),Ws=v(),Jt=a("div"),Gn=a("label"),Gl=k(Vn),Fs=v(),ht=a("input"),Ks=v(),Yn=a("p"),Vl=k(Xn),Bs=v(),Gt=a("article"),Zn=a("div"),ut=a("button"),Mt=a("span"),Mt.innerHTML='',Hs=v(),Qn=a("span"),Yl=k($n),Js=v(),Vt=a("div"),el=a("div"),gt=a("div"),Yt=a("label"),Tt=a("input"),Gs=v(),tl=a("span"),Xl=k(nl),Vs=v(),bt=a("div"),ll=a("span"),Zl=k(sl),Ys=v(),At=a("button"),Ql=k(ol),Xs=v(),Ye&&Ye.c(),Zs=v(),Xe&&Xe.c(),Qs=v(),Xt=a("article"),il=a("div"),ft=a("button"),It=a("span"),It.innerHTML='',$s=v(),al=a("span"),$l=k(rl),xs=v(),Zt=a("div"),ul=a("div"),dt=a("div"),Qt=a("div"),fl=a("label"),xl=k(dl),eo=v(),$t=a("div"),st=a("input"),to=v(),vn=a("span"),es=k(pl),no=k("%"),lo=v(),vl=a("p"),ts=k(ml),so=v(),xt=a("div"),hl=a("span"),ns=k(gl),oo=v(),ot(en.$$.fragment),io=v(),tn=a("div"),bl=a("label"),ls=k(kl),ao=v(),kt=a("select"),nn=a("option"),ss=k(wl),ln=a("option"),os=k(yl),sn=a("option"),is=k(jl),co=v(),on=a("div"),mn=a("button"),as=k(Sl),uo=v(),hn=a("button"),rs=k(Cl),cs=v(),ot(Rt.$$.fragment),s(o,"class","svelte-zmj6k4"),s(u,"class","ver svelte-zmj6k4"),s(n,"class","section-head svelte-zmj6k4"),s(b,"class","collapse-chevron"),s(b,"aria-hidden","true"),X(b,"collapsed",!e[8].connection),s(L,"class","card-title"),s(w,"type","button"),s(w,"class","card-disclosure"),s(w,"aria-expanded",y=e[8].connection),s(C,"class","card-head"),s(T,"for","cfg-server"),s(U,"id","cfg-server"),s(U,"type","text"),s(U,"placeholder","vps.example.com:8080"),s(p,"class","field"),s(G,"for","cfg-nick"),s(F,"id","cfg-nick"),s(F,"type","text"),s(F,"placeholder","Your nickname"),s(oe,"class","field"),s(ie,"for","cfg-token"),s(ge,"id","cfg-token"),s(ge,"type","password"),s(ge,"placeholder",fe=e[9].server_token_desc),s(ne,"class","field"),s(Se,"class","hint reconnect-hint"),s(Ee,"type","checkbox"),s(Ee,"class","svelte-zmj6k4"),s(ve,"class","toggle-title svelte-zmj6k4"),s(Ne,"class","toggle-label svelte-zmj6k4"),s(Le,"class","toggle-row svelte-zmj6k4"),s(be,"type","checkbox"),s(be,"class","svelte-zmj6k4"),s(Ce,"class","toggle-title svelte-zmj6k4"),s(ze,"class","toggle-label svelte-zmj6k4"),s(Ie,"class","toggle-row svelte-zmj6k4"),s(H,"class","card-body-pad"),s(J,"class","card-body-inner"),s(M,"class","card-body"),X(M,"collapsed",!e[8].connection),s(g,"class","card"),s(Je,"class","collapse-chevron"),s(Je,"aria-hidden","true"),X(Je,"collapsed",!e[8].network),s($,"class","card-title"),s(Qe,"type","button"),s(Qe,"class","card-disclosure"),s(Qe,"aria-expanded",Ue=e[8].network),s(Ct,"class","card-head"),s(Cn,"class","hint"),s(Ln,"for","cfg-conn"),Wt.__value="direct",_e(Wt,Wt.__value),Ft.__value="relay",_e(Ft,Ft.__value),s(vt,"id","cfg-conn"),e[0].connectionMode===void 0&&Pl(()=>e[26].call(vt)),s(qt,"class","field"),s(Nn,"class","hint"),s(Tn,"for","cfg-mtu"),s(lt,"id","cfg-mtu"),s(lt,"type","number"),s(lt,"min","576"),s(lt,"max","9000"),s(lt,"placeholder","1500"),s(Kt,"class","field"),s(Rn,"class","hint"),s(zn,"for","cfg-dns"),s(mt,"id","cfg-dns"),s(mt,"type","text"),s(mt,"placeholder","system default"),s(Bt,"class","field"),s(qn,"class","hint"),s(Fn,"for","cfg-socks"),s(ct,"id","cfg-socks"),s(ct,"type","text"),s(ct,"placeholder",Bn=e[9].socks5_placeholder),s(Ht,"class","field"),s(Hn,"class","hint reconnect-hint"),s(Gn,"for","cfg-stun"),s(ht,"id","cfg-stun"),s(ht,"type","text"),s(ht,"placeholder","stun.l.google.com:19302"),s(Jt,"class","field"),s(Yn,"class","hint reconnect-hint"),s(Ae,"class","card-body-pad"),s(Sn,"class","card-body-inner"),s(Ut,"class","card-body"),X(Ut,"collapsed",!e[8].network),s(he,"class","card"),s(Mt,"class","collapse-chevron"),s(Mt,"aria-hidden","true"),X(Mt,"collapsed",!e[8].system),s(Qn,"class","card-title"),s(ut,"type","button"),s(ut,"class","card-disclosure"),s(ut,"aria-expanded",xn=e[8].system),s(Zn,"class","card-head"),s(Tt,"type","checkbox"),s(Tt,"class","svelte-zmj6k4"),s(tl,"class","toggle-title svelte-zmj6k4"),s(Yt,"class","toggle-row svelte-zmj6k4"),s(ll,"class","toggle-title svelte-zmj6k4"),s(At,"class","btn btn-ghost"),s(At,"type","button"),At.disabled=e[3],s(bt,"class","update-row svelte-zmj6k4"),s(gt,"class","card-body-pad"),s(el,"class","card-body-inner"),s(Vt,"class","card-body"),X(Vt,"collapsed",!e[8].system),s(Gt,"class","card"),s(It,"class","collapse-chevron"),s(It,"aria-hidden","true"),X(It,"collapsed",!e[8].appearance),s(al,"class","card-title"),s(ft,"type","button"),s(ft,"class","card-disclosure"),s(ft,"aria-expanded",cl=e[8].appearance),s(il,"class","card-head"),s(fl,"for","cfg-scale"),s(st,"id","cfg-scale"),s(st,"type","range"),s(st,"min","75"),s(st,"max","150"),s(st,"step","5"),st.value=_l=e[0].uiScale??100,s(st,"class","svelte-zmj6k4"),s(vn,"class","scale-value svelte-zmj6k4"),s($t,"class","scale-row svelte-zmj6k4"),s(Qt,"class","field"),s(vl,"class","hint"),s(hl,"class","toggle-title svelte-zmj6k4"),s(xt,"class","theme-row svelte-zmj6k4"),s(bl,"for","cfg-lang"),nn.__value="en",_e(nn,nn.__value),ln.__value="ru",_e(ln,ln.__value),sn.__value="zh",_e(sn,sn.__value),s(kt,"id","cfg-lang"),s(tn,"class","field"),s(dt,"class","card-body-pad"),s(ul,"class","card-body-inner"),s(Zt,"class","card-body"),X(Zt,"collapsed",!e[8].appearance),s(Xt,"class","card"),s(d,"class","settings-content svelte-zmj6k4"),s(mn,"class","btn btn-ghost"),s(hn,"class","btn btn-cta"),s(on,"class","commit-plate svelte-zmj6k4"),s(t,"class","settings-view svelte-zmj6k4")},m(A,K){Y(A,t,K),l(t,n),l(n,o),l(o,r),l(n,c),l(n,u),l(u,f),l(u,_),l(t,m),l(t,d),Ve&&Ve.m(d,null),l(d,h),l(d,g),l(g,C),l(C,w),l(w,b),l(w,S),l(w,L),l(L,D),l(g,E),l(g,M),l(M,J),l(J,H),l(H,p),l(p,T),l(T,z),l(p,I),l(p,U),_e(U,e[0].serverAddr),l(H,le),l(H,oe),l(oe,G),l(G,N),l(oe,B),l(oe,F),_e(F,e[0].nickname),l(H,q),l(H,ne),l(ne,ie),l(ie,Me),l(ne,Te),l(ne,ge),_e(ge,e[0].serverToken),l(H,De),l(H,Se),l(Se,ce),l(H,Ke),l(H,Le),l(Le,Ee),Ee.checked=e[0].autoConnect,l(Le,je),l(Le,we),l(we,ve),l(ve,ae),l(we,nt),l(we,Ne),l(Ne,He),l(H,at),l(H,Ie),l(Ie,be),be.checked=e[0].autoJoinLastRoom,l(Ie,P),l(Ie,ee),l(ee,Ce),l(Ce,te),l(ee,de),l(ee,ze),l(ze,Nt),l(d,rt),l(d,he),l(he,Ct),l(Ct,Qe),l(Qe,Je),l(Qe,Oe),l(Qe,$),l($,Ge),l(he,pn),l(he,Ut),l(Ut,Sn),l(Sn,Ae),l(Ae,Cn),l(Cn,Rl),l(Ae,Es),l(Ae,qt),l(qt,Ln),l(Ln,Ol),l(qt,Ps),l(qt,vt),l(vt,Wt),l(Wt,zl),l(vt,Ft),l(Ft,Ul),Al(vt,e[0].connectionMode,!0),l(Ae,Ds),l(Ae,Nn),l(Nn,ql),l(Ae,Ns),l(Ae,Kt),l(Kt,Tn),l(Tn,Wl),l(Kt,Ms),l(Kt,lt),_e(lt,e[0].mtu),l(Ae,Ts),l(Ae,Rn),l(Rn,Fl),l(Ae,Is),l(Ae,Bt),l(Bt,zn),l(zn,Kl),l(Bt,Rs),l(Bt,mt),_e(mt,e[0].dnsServer),l(Ae,Os),l(Ae,qn),l(qn,Bl),l(Ae,zs),l(Ae,Ht),l(Ht,Fn),l(Fn,Hl),l(Ht,Us),l(Ht,ct),_e(ct,e[0].socks5Proxy),l(Ae,qs),l(Ae,Hn),l(Hn,Jl),l(Ae,Ws),l(Ae,Jt),l(Jt,Gn),l(Gn,Gl),l(Jt,Fs),l(Jt,ht),_e(ht,e[0].stunServer),l(Ae,Ks),l(Ae,Yn),l(Yn,Vl),l(d,Bs),l(d,Gt),l(Gt,Zn),l(Zn,ut),l(ut,Mt),l(ut,Hs),l(ut,Qn),l(Qn,Yl),l(Gt,Js),l(Gt,Vt),l(Vt,el),l(el,gt),l(gt,Yt),l(Yt,Tt),Tt.checked=e[0].startWithWindows,l(Yt,Gs),l(Yt,tl),l(tl,Xl),l(gt,Vs),l(gt,bt),l(bt,ll),l(ll,Zl),l(bt,Ys),l(bt,At),l(At,Ql),l(bt,Xs),Ye&&Ye.m(bt,null),l(gt,Zs),Xe&&Xe.m(gt,null),l(d,Qs),l(d,Xt),l(Xt,il),l(il,ft),l(ft,It),l(ft,$s),l(ft,al),l(al,$l),l(Xt,xs),l(Xt,Zt),l(Zt,ul),l(ul,dt),l(dt,Qt),l(Qt,fl),l(fl,xl),l(Qt,eo),l(Qt,$t),l($t,st),l($t,to),l($t,vn),l(vn,es),l(vn,no),l(dt,lo),l(dt,vl),l(vl,ts),l(dt,so),l(dt,xt),l(xt,hl),l(hl,ns),l(xt,oo),xe(en,xt,null),l(dt,io),l(dt,tn),l(tn,bl),l(bl,ls),l(tn,ao),l(tn,kt),l(kt,nn),l(nn,ss),l(kt,ln),l(ln,os),l(kt,sn),l(sn,is),Al(kt,e[0].lang||e[10]),l(t,co),l(t,on),l(on,mn),l(mn,as),l(on,uo),l(on,hn),l(hn,rs),Y(A,cs,K),xe(Rt,A,K),Q=!0,us||(fo=[W(w,"click",e[19]),W(U,"input",e[20]),W(F,"input",e[21]),W(ge,"input",e[22]),W(Ee,"change",e[23]),W(be,"change",e[24]),W(Qe,"click",e[25]),W(vt,"change",e[26]),W(lt,"input",e[27]),W(mt,"input",e[28]),W(ct,"input",e[29]),W(ht,"input",e[30]),W(ut,"click",e[31]),W(Tt,"change",e[32]),W(At,"click",e[11]),W(ft,"click",e[33]),W(st,"input",e[15]),W(kt,"change",e[16]),W(mn,"click",e[14]),W(hn,"click",e[13])],us=!0)},p(A,K){(!Q||K[0]&512)&&i!==(i=A[9].settings_title+"")&&j(r,i),(!Q||K[0]&2)&&j(_,A[1]),A[2]?Ve?Ve.p(A,K):(Ve=Qo(A),Ve.c(),Ve.m(d,h)):Ve&&(Ve.d(1),Ve=null),(!Q||K[0]&256)&&X(b,"collapsed",!A[8].connection),(!Q||K[0]&512)&&R!==(R=A[9].section_connection+"")&&j(D,R),(!Q||K[0]&256&&y!==(y=A[8].connection))&&s(w,"aria-expanded",y),(!Q||K[0]&512)&&Z!==(Z=A[9].server_addr+"")&&j(z,Z),K[0]&1&&U.value!==A[0].serverAddr&&_e(U,A[0].serverAddr),(!Q||K[0]&512)&&O!==(O=A[9].nickname+"")&&j(N,O),K[0]&1&&F.value!==A[0].nickname&&_e(F,A[0].nickname),(!Q||K[0]&512)&&ye!==(ye=A[9].server_token+"")&&j(Me,ye),(!Q||K[0]&512&&fe!==(fe=A[9].server_token_desc))&&s(ge,"placeholder",fe),K[0]&1&&ge.value!==A[0].serverToken&&_e(ge,A[0].serverToken),(!Q||K[0]&512)&&re!==(re=A[9].reconnect_apply+"")&&j(ce,re),K[0]&1&&(Ee.checked=A[0].autoConnect),(!Q||K[0]&512)&&x!==(x=A[9].auto_connect+"")&&j(ae,x),(!Q||K[0]&512)&&Be!==(Be=A[9].auto_connect_desc+"")&&j(He,Be),K[0]&1&&(be.checked=A[0].autoJoinLastRoom),(!Q||K[0]&512)&&me!==(me=A[9].auto_join+"")&&j(te,me),(!Q||K[0]&512)&&St!==(St=A[9].auto_join_desc+"")&&j(Nt,St),(!Q||K[0]&256)&&X(M,"collapsed",!A[8].connection),(!Q||K[0]&256)&&X(Je,"collapsed",!A[8].network),(!Q||K[0]&512)&&ue!==(ue=A[9].section_network+"")&&j(Ge,ue),(!Q||K[0]&256&&Ue!==(Ue=A[8].network))&&s(Qe,"aria-expanded",Ue),(!Q||K[0]&512)&&An!==(An=A[9].advanced_warn+"")&&j(Rl,An),(!Q||K[0]&512)&&En!==(En=A[9].connection_mode+"")&&j(Ol,En),(!Q||K[0]&512)&&Pn!==(Pn=A[9].connection_direct+"")&&j(zl,Pn),(!Q||K[0]&512)&&Dn!==(Dn=A[9].connection_relay+"")&&j(Ul,Dn),K[0]&1&&Al(vt,A[0].connectionMode),(!Q||K[0]&512)&&Mn!==(Mn=A[9].connection_mode_desc+"")&&j(ql,Mn),(!Q||K[0]&512)&&In!==(In=A[9].mtu+"")&&j(Wl,In),K[0]&1&&si(lt.value)!==A[0].mtu&&_e(lt,A[0].mtu),(!Q||K[0]&512)&&On!==(On=A[9].mtu_desc+"")&&j(Fl,On),(!Q||K[0]&512)&&Un!==(Un=A[9].dns_server+"")&&j(Kl,Un),K[0]&1&&mt.value!==A[0].dnsServer&&_e(mt,A[0].dnsServer),(!Q||K[0]&512)&&Wn!==(Wn=A[9].dns_desc+"")&&j(Bl,Wn),(!Q||K[0]&512)&&Kn!==(Kn=A[9].socks5+"")&&j(Hl,Kn),(!Q||K[0]&512&&Bn!==(Bn=A[9].socks5_placeholder))&&s(ct,"placeholder",Bn),K[0]&1&&ct.value!==A[0].socks5Proxy&&_e(ct,A[0].socks5Proxy),(!Q||K[0]&512)&&Jn!==(Jn=A[9].socks5_desc+"")&&j(Jl,Jn),(!Q||K[0]&512)&&Vn!==(Vn=A[9].stun_server+"")&&j(Gl,Vn),K[0]&1&&ht.value!==A[0].stunServer&&_e(ht,A[0].stunServer),(!Q||K[0]&512)&&Xn!==(Xn=A[9].stun_desc+"")&&j(Vl,Xn),(!Q||K[0]&256)&&X(Ut,"collapsed",!A[8].network),(!Q||K[0]&256)&&X(Mt,"collapsed",!A[8].system),(!Q||K[0]&512)&&$n!==($n=A[9].section_system+"")&&j(Yl,$n),(!Q||K[0]&256&&xn!==(xn=A[8].system))&&s(ut,"aria-expanded",xn),K[0]&1&&(Tt.checked=A[0].startWithWindows),(!Q||K[0]&512)&&nl!==(nl=A[9].start_windows+"")&&j(Xl,nl),(!Q||K[0]&512)&&sl!==(sl=A[9].updates+"")&&j(Zl,sl),(!Q||K[0]&512)&&ol!==(ol=A[9].check_updates+"")&&j(Ql,ol),(!Q||K[0]&8)&&(At.disabled=A[3]),A[4]==="available"?Ye?Ye.p(A,K):(Ye=$o(A),Ye.c(),Ye.m(bt,null)):Ye&&(Ye.d(1),Ye=null),an===(an=_o(A))&&Xe?Xe.p(A,K):(Xe&&Xe.d(1),Xe=an&&an(A),Xe&&(Xe.c(),Xe.m(gt,null))),(!Q||K[0]&256)&&X(Vt,"collapsed",!A[8].system),(!Q||K[0]&256)&&X(It,"collapsed",!A[8].appearance),(!Q||K[0]&512)&&rl!==(rl=A[9].section_appearance+"")&&j($l,rl),(!Q||K[0]&256&&cl!==(cl=A[8].appearance))&&s(ft,"aria-expanded",cl),(!Q||K[0]&512)&&dl!==(dl=A[9].ui_scale+"")&&j(xl,dl),(!Q||K[0]&1&&_l!==(_l=A[0].uiScale??100))&&(st.value=_l),(!Q||K[0]&1)&&pl!==(pl=(A[0].uiScale??100)+"")&&j(es,pl),(!Q||K[0]&512)&&ml!==(ml=A[9].ui_scale_desc+"")&&j(ts,ml),(!Q||K[0]&512)&&gl!==(gl=A[9].theme+"")&&j(ns,gl),(!Q||K[0]&512)&&kl!==(kl=A[9].language+"")&&j(ls,kl),(!Q||K[0]&512)&&wl!==(wl=A[9].language_en+"")&&j(ss,wl),(!Q||K[0]&512)&&yl!==(yl=A[9].language_ru+"")&&j(os,yl),(!Q||K[0]&512)&&jl!==(jl=A[9].language_zh+"")&&j(is,jl),(!Q||K[0]&1025&&ro!==(ro=A[0].lang||A[10]))&&Al(kt,A[0].lang||A[10]),(!Q||K[0]&256)&&X(Zt,"collapsed",!A[8].appearance),(!Q||K[0]&512)&&Sl!==(Sl=A[9].reset+"")&&j(as,Sl),(!Q||K[0]&512)&&Cl!==(Cl=A[9].save+"")&&j(rs,Cl);const Ot={};K[0]&128&&(Ot.open=!!A[7]),K[0]&128&&(Ot.message=A[7]?.message||""),K[0]&640&&(Ot.confirmLabel=A[7]?.confirmLabel||A[9].save),K[0]&128&&(Ot.danger=!!A[7]?.danger),K[0]&128&&(Ot.onConfirm=A[34]),K[0]&128&&(Ot.onCancel=A[35]),Rt.$set(Ot)},i(A){Q||(qe(en.$$.fragment,A),qe(Rt.$$.fragment,A),Q=!0)},o(A){$e(en.$$.fragment,A),$e(Rt.$$.fragment,A),Q=!1},d(A){A&&(V(t),V(cs)),Ve&&Ve.d(),Ye&&Ye.d(),Xe&&Xe.d(),et(en),et(Rt,A),us=!1,Re(fo)}}}function ga(e,t,n){let o,i,r;pe(e,Ze,q=>n(18,o=q)),pe(e,jt,q=>n(9,i=q)),pe(e,As,q=>n(10,r=q));let c={...o},u="1.0.0",f=!1,_=!1,m="",d="",h="",g=null;async function C(){n(3,_=!0),n(4,m="checking"),n(6,h=""),n(5,d="");try{const q=await window.go.main.App.CheckForUpdate();q?.available?(n(4,m="available"),n(5,d=q.latest||"")):n(4,m="latest")}catch(q){n(4,m="error"),n(6,h=String(q)),se(i.error_update_check+q,"error")}finally{n(3,_=!1)}}async function w(){n(7,g={message:i.confirm_update,confirmLabel:i.apply_update,run:async()=>{n(3,_=!0),n(4,m="downloading"),n(6,h="");try{await window.go.main.App.ApplyUpdate(),se(i.notif_updating,"info")}catch(q){n(4,m="error"),n(6,h=String(q)),n(3,_=!1),se(i.error_update+q,"error")}}})}async function b(){Et(Ze,o={...c},o);try{n(2,f=!!await window.go.main.App.SaveSettings(c)),c.lang&&bn(c.lang),se(i.notif_settings_saved,"info"),f&&se(i.notif_reconnect_required,"info")}catch(q){se(i.error_save+q,"error")}}async function S(){n(7,g={message:i.confirm_reset,confirmLabel:i.reset,danger:!0,run:async()=>{try{n(0,c=await window.go.main.App.ResetSettings()),Et(Ze,o={...c},o),n(2,f=!1),c.lang&&bn(c.lang),se(i.notif_settings_saved,"info")}catch(q){se(i.error_save+q,"error")}}})}function L(q){const ne=Math.min(150,Math.max(75,Number(q.target.value)||100));n(0,c.uiScale=ne,c),Et(Ze,o={...o,uiScale:ne},o)}function R(q){n(0,c.lang=q.target.value,c),bn(q.target.value)}let D={connection:!0,network:!1,system:!1,appearance:!0};function y(q){n(8,D={...D,[q]:!D[q]})}Ml(async()=>{try{const q=await window.go.main.App.GetSettings();if(q){const ne=o.theme||q.theme;n(0,c={...c,...q,theme:ne}),c.connectionMode||n(0,c.connectionMode="direct",c),Et(Ze,o={...c,theme:ne},o),c.lang&&bn(c.lang)}window.go.main.App.GetVersion&&n(1,u=await window.go.main.App.GetVersion())}catch{}});const E=()=>y("connection");function M(){c.serverAddr=this.value,n(0,c),n(18,o)}function J(){c.nickname=this.value,n(0,c),n(18,o)}function H(){c.serverToken=this.value,n(0,c),n(18,o)}function p(){c.autoConnect=this.checked,n(0,c),n(18,o)}function T(){c.autoJoinLastRoom=this.checked,n(0,c),n(18,o)}const Z=()=>y("network");function z(){c.connectionMode=fi(this),n(0,c),n(18,o)}function I(){c.mtu=si(this.value),n(0,c),n(18,o)}function U(){c.dnsServer=this.value,n(0,c),n(18,o)}function le(){c.socks5Proxy=this.value,n(0,c),n(18,o)}function oe(){c.stunServer=this.value,n(0,c),n(18,o)}const G=()=>y("system");function O(){c.startWithWindows=this.checked,n(0,c),n(18,o)}const N=()=>y("appearance"),B=async()=>{const q=g?.run;n(7,g=null),q&&await q()},F=()=>n(7,g=null);return e.$$.update=()=>{e.$$.dirty[0]&262145&&o.theme&&c.theme!==o.theme&&n(0,c.theme=o.theme,c)},[c,u,f,_,m,d,h,g,D,i,r,C,w,b,S,L,R,y,o,E,M,J,H,p,T,Z,z,I,U,le,oe,G,O,N,B,F]}class ba extends yt{constructor(t){super(),wt(this,t,ga,ha,pt,{},null,[-1,-1])}}function xo(e,t,n){const o=e.slice();return o[18]=t[n],o}function ka(e){let t,n,o,i,r,c,u,f,_,m,d,h,g,C,w,b,S,L,R,D,y,E,M,J,H;return n=new xi({props:{pathAggregate:e[4],relayCount:e[3]}}),c=new Wi({}),g=new Yi({props:{pathAggregate:e[4]}}),S=new fa({}),y=new ba({}),{c(){t=a("div"),ot(n.$$.fragment),o=v(),i=a("div"),r=a("div"),ot(c.$$.fragment),u=v(),f=a("div"),_=v(),m=a("main"),d=a("div"),h=a("div"),ot(g.$$.fragment),w=v(),b=a("div"),ot(S.$$.fragment),R=v(),D=a("div"),ot(y.$$.fragment),s(f,"class","drag-handle svelte-8tj0mu"),X(f,"active",e[2]),s(r,"class","sidebar-wrapper svelte-8tj0mu"),vo(r,"width",e[1]+"px"),s(h,"class","peer-pane svelte-8tj0mu"),h.hidden=C=e[0]==="settings",s(b,"class","chat-pane svelte-8tj0mu"),b.hidden=L=e[0]==="settings"||!e[6],s(D,"class","settings-pane svelte-8tj0mu"),D.hidden=E=e[0]!=="settings",s(d,"class","workspace svelte-8tj0mu"),s(m,"class","main-area svelte-8tj0mu"),s(i,"class","layout svelte-8tj0mu"),s(t,"class","shell bench svelte-8tj0mu")},m(p,T){Y(p,t,T),xe(n,t,null),l(t,o),l(t,i),l(i,r),xe(c,r,null),l(r,u),l(r,f),l(i,_),l(i,m),l(m,d),l(d,h),xe(g,h,null),l(d,w),l(d,b),xe(S,b,null),l(d,R),l(d,D),xe(y,D,null),M=!0,J||(H=W(f,"mousedown",e[9]),J=!0)},p(p,T){const Z={};T&16&&(Z.pathAggregate=p[4]),T&8&&(Z.relayCount=p[3]),n.$set(Z),(!M||T&4)&&X(f,"active",p[2]),(!M||T&2)&&vo(r,"width",p[1]+"px");const z={};T&16&&(z.pathAggregate=p[4]),g.$set(z),(!M||T&1&&C!==(C=p[0]==="settings"))&&(h.hidden=C),(!M||T&65&&L!==(L=p[0]==="settings"||!p[6]))&&(b.hidden=L),(!M||T&1&&E!==(E=p[0]!=="settings"))&&(D.hidden=E)},i(p){M||(qe(n.$$.fragment,p),qe(c.$$.fragment,p),qe(g.$$.fragment,p),qe(S.$$.fragment,p),qe(y.$$.fragment,p),M=!0)},o(p){$e(n.$$.fragment,p),$e(c.$$.fragment,p),$e(g.$$.fragment,p),$e(S.$$.fragment,p),$e(y.$$.fragment,p),M=!1},d(p){p&&V(t),et(n),et(c),et(g),et(S),et(y),J=!1,H()}}}function wa(e){let t,n,o,i,r,c,u,f;return u=new ia({}),{c(){t=a("div"),n=v(),o=a("div"),i=v(),r=a("div"),c=a("div"),ot(u.$$.fragment),s(t,"class","space-bg"),s(t,"aria-hidden","true"),s(o,"class","space-dust"),s(o,"aria-hidden","true"),s(c,"class","fullscreen-connect svelte-8tj0mu"),s(r,"class","shell connect-shell svelte-8tj0mu")},m(_,m){Y(_,t,m),Y(_,n,m),Y(_,o,m),Y(_,i,m),Y(_,r,m),l(r,c),xe(u,c,null),f=!0},p:Pe,i(_){f||(qe(u.$$.fragment,_),f=!0)},o(_){$e(u.$$.fragment,_),f=!1},d(_){_&&(V(t),V(n),V(o),V(i),V(r)),et(u)}}}function ei(e){let t,n,o=e[7].msg+"",i,r,c,u=e[5].dismiss_error+"",f,_,m,d;return{c(){t=a("div"),n=a("span"),i=k(o),r=v(),c=a("button"),f=k(u),s(n,"class","error-strip-msg svelte-8tj0mu"),s(c,"type","button"),s(c,"class","error-strip-dismiss svelte-8tj0mu"),s(c,"aria-label",_=e[5].dismiss_error),s(t,"class","error-strip svelte-8tj0mu"),s(t,"role","alert")},m(h,g){Y(h,t,g),l(t,n),l(n,i),l(t,r),l(t,c),l(c,f),m||(d=W(c,"click",yn),m=!0)},p(h,g){g&128&&o!==(o=h[7].msg+"")&&j(i,o),g&32&&u!==(u=h[5].dismiss_error+"")&&j(f,u),g&32&&_!==(_=h[5].dismiss_error)&&s(c,"aria-label",_)},d(h){h&&V(t),m=!1,d()}}}function ti(e,t){let n,o=t[18].msg+"",i,r,c;return{key:e,first:null,c(){n=a("div"),i=k(o),r=v(),s(n,"class",c="notification "+t[18].type+" svelte-8tj0mu"),s(n,"role","status"),this.first=n},m(u,f){Y(u,n,f),l(n,i),l(n,r)},p(u,f){t=u,f&256&&o!==(o=t[18].msg+"")&&j(i,o),f&256&&c!==(c="notification "+t[18].type+" svelte-8tj0mu")&&s(n,"class",c)},d(u){u&&V(n)}}}function ya(e){let t,n,o,i,r=[],c=new Map,u,f;const _=[wa,ka],m=[];function d(w,b){return w[0]==="connect"?0:1}t=d(e),n=m[t]=_[t](e);let h=e[7]&&ei(e),g=_t(e[8]);const C=w=>w[18].id;for(let w=0;w{m[S]=null}),gi(),n=m[t],n?n.p(w,b):(n=m[t]=_[t](w),n.c()),qe(n,1),n.m(o.parentNode,o)),w[7]?h?h.p(w,b):(h=ei(w),h.c(),h.m(i.parentNode,i)):h&&(h.d(1),h=null),b&256&&(g=_t(w[8]),r=Il(r,b,C,1,w,g,c,u.parentNode,Tl,ti,u,xo))},i(w){f||(qe(n),f=!0)},o(w){$e(n),f=!1},d(w){w&&(V(o),V(i),V(u)),m[t].d(w),h&&h.d(w);for(let b=0;bo.connected&&(o.path==="relay"||o.path==="ws"))?"relay":"direct":"disconnected"}async function ni(e){if(e.key==="F11"){e.preventDefault();try{await window.runtime?.WindowIsFullscreen?.()?window.runtime.WindowUnfullscreen():window.runtime.WindowFullscreen()}catch{}}}function Ca(e,t,n){let o,i,r,c,u,f,_,m,d,h;pe(e,jt,y=>n(5,r=y)),pe(e,Ze,y=>n(10,c=y)),pe(e,_s,y=>n(11,u=y)),pe(e,Fe,y=>n(12,f=y)),pe(e,We,y=>n(0,_=y)),pe(e,it,y=>n(6,m=y)),pe(e,Dl,y=>n(7,d=y)),pe(e,ps,y=>n(8,h=y));let g=220,C=!1,w,b,S=!0;function L(y){n(2,C=!0),w=y.clientX,b=g,document.addEventListener("mousemove",R),document.addEventListener("mouseup",D),y.preventDefault()}function R(y){if(!C)return;const E=b+(y.clientX-w);n(1,g=Math.max(140,Math.min(400,E)))}function D(){n(2,C=!1),document.removeEventListener("mousemove",R),document.removeEventListener("mouseup",D)}return Ml(async()=>{window.addEventListener("keydown",ni);try{const y=await window.go.main.App.LoadConfig();y&&(Ze.set({...c,...y}),y.lang&&bn(y.lang))}catch{}window.runtime?.EventsOn&&(window.runtime.EventsOn("status_changed",y=>{S&&(Fe.set(y),!y.connected&&!y.reconnecting&&(it.set(!1),We.set("connect")))}),window.runtime.EventsOn("peers_changed",y=>{S&&_s.set(y||[])}),window.runtime.EventsOn("error",y=>{S&&se(y,"error")}),window.runtime.EventsOn("chat_message",y=>{S&&Ss(y.fromID,y.nickname,y.message,!1,"sent",!1,!!y.isDM)}),window.runtime.EventsOn("system_chat",y=>{S&&Li(y.message||"")}),window.runtime.EventsOn("room_deleted",y=>{S&&(se(r.notif_room_deleted,"error"),We.set("network"))}),window.runtime.EventsOn("auto_join_skipped",y=>{if(!S)return;const E=y?.room||"";se(ke(r.notif_auto_join_skipped,{name:E}),"info")}))}),oi(()=>{S=!1,window.removeEventListener("keydown",ni),document.removeEventListener("mousemove",R),document.removeEventListener("mouseup",D),window.runtime?.EventsOff&&(window.runtime.EventsOff("status_changed"),window.runtime.EventsOff("peers_changed"),window.runtime.EventsOff("error"),window.runtime.EventsOff("chat_message"),window.runtime.EventsOff("system_chat"),window.runtime.EventsOff("room_deleted"),window.runtime.EventsOff("auto_join_skipped"))}),e.$$.update=()=>{if(e.$$.dirty&1024){const y=ja(c.uiScale)/100;document.documentElement.style.zoom=String(y)}if(e.$$.dirty&1025){const y=document.documentElement,E=c.theme==="light";y.classList.toggle("light-theme",E),y.dataset.theme=E?"light":"dark",y.dataset.app=_==="connect"?"connect":"connected"}e.$$.dirty&6144&&n(4,o=Sa(f,u)),e.$$.dirty&2048&&n(3,i=(u||[]).filter(y=>y.connected&&(y.path==="relay"||y.path==="ws")).length)},[_,g,C,i,o,r,m,d,h,L,c,u,f]}class Aa extends yt{constructor(t){super(),wt(this,t,Ca,ya,pt,{})}}new Aa({target:document.getElementById("app")}); diff --git a/client/frontend/dist/assets/index-B_zURlVB.css b/client/frontend/dist/assets/index-B_zURlVB.css deleted file mode 100644 index 6f8bea0..0000000 --- a/client/frontend/dist/assets/index-B_zURlVB.css +++ /dev/null @@ -1 +0,0 @@ -.modal-overlay.svelte-1g1nook.svelte-1g1nook{position:fixed;inset:0;background:color-mix(in srgb,var(--bg, #0a0a0a) 55%,transparent);display:flex;align-items:center;justify-content:center;z-index:200}.modal.svelte-1g1nook.svelte-1g1nook{background:var(--surface, #141414);border:1px solid var(--border, #2a2a2a);border-radius:var(--radius, 2px);padding:20px;width:340px;display:flex;flex-direction:column;gap:16px}.modal.svelte-1g1nook p.svelte-1g1nook{color:var(--text, #f5f5f5);font-size:14px;line-height:1.45}.modal-actions.svelte-1g1nook.svelte-1g1nook{display:flex;gap:8px;justify-content:flex-end}.sidebar.svelte-5bd3jz.svelte-5bd3jz{width:100%;height:100%;background:transparent;display:flex;flex-direction:column;flex-shrink:0}.sidebar-header.svelte-5bd3jz.svelte-5bd3jz{padding:14px 14px 8px}.sidebar-meta.svelte-5bd3jz.svelte-5bd3jz{font-size:11px;font-family:var(--font-mono);color:var(--muted);margin-top:4px}.sidebar-actions.svelte-5bd3jz.svelte-5bd3jz{padding:8px 12px 12px;display:flex;flex-direction:column;gap:6px}.sidebar-actions.svelte-5bd3jz .bezel.svelte-5bd3jz{width:100%}.sidebar-actions.svelte-5bd3jz .bezel.svelte-5bd3jz:disabled{opacity:.45;cursor:not-allowed}.network-list.svelte-5bd3jz.svelte-5bd3jz{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 0 12px;border-top:1px solid var(--border)}.network-item.svelte-5bd3jz.svelte-5bd3jz{display:flex;align-items:center;padding:10px 12px;min-height:44px;cursor:pointer;gap:10px;border-bottom:1px solid var(--border);transition:background var(--dur-fast, .15s) var(--ease-out, ease);position:relative}.network-item.svelte-5bd3jz.svelte-5bd3jz:hover,.network-item.svelte-5bd3jz.svelte-5bd3jz:focus-visible{background:var(--bg-hover)}.network-item.active.svelte-5bd3jz.svelte-5bd3jz{background:var(--surface-2)}.network-item.disabled.svelte-5bd3jz.svelte-5bd3jz{opacity:.55}.tick.svelte-5bd3jz.svelte-5bd3jz{width:6px;height:6px;flex-shrink:0;background:var(--text-dim)}.tick.on.svelte-5bd3jz.svelte-5bd3jz{background:var(--text)}.network-info.svelte-5bd3jz.svelte-5bd3jz{flex:1;min-width:0}.network-name.svelte-5bd3jz.svelte-5bd3jz{font-size:13px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.network-meta.svelte-5bd3jz.svelte-5bd3jz{font-size:11px;font-family:var(--font-mono);color:var(--muted);line-height:1.4}.row-actions.svelte-5bd3jz.svelte-5bd3jz{position:relative;flex-shrink:0}.menu-btn.svelte-5bd3jz.svelte-5bd3jz{background:none;border:1px solid transparent;color:var(--muted);cursor:pointer;font-size:16px;line-height:1;width:32px;height:32px;border-radius:var(--radius);display:flex;align-items:center;justify-content:center}.menu-btn.svelte-5bd3jz.svelte-5bd3jz:hover,.menu-btn[aria-expanded=true].svelte-5bd3jz.svelte-5bd3jz{color:var(--text);border-color:var(--border);background:var(--surface)}.overflow-menu.svelte-5bd3jz.svelte-5bd3jz{position:absolute;right:0;top:100%;z-index:20;min-width:168px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;flex-direction:column;box-shadow:0 8px 24px #00000047}.menu-item.svelte-5bd3jz.svelte-5bd3jz{background:none;border:none;text-align:left;padding:10px 12px;min-height:36px;color:var(--text);font-size:13px;cursor:pointer}.menu-item.svelte-5bd3jz.svelte-5bd3jz:hover{background:var(--bg-hover)}.menu-item.danger.svelte-5bd3jz.svelte-5bd3jz{color:var(--error)}.menu-item.danger.svelte-5bd3jz.svelte-5bd3jz:hover{background:color-mix(in srgb,var(--error) 12%,transparent)}.empty-desc.svelte-5bd3jz.svelte-5bd3jz{margin-top:6px;font-size:12px;color:var(--text-dim)}.empty-state.svelte-5bd3jz.svelte-5bd3jz{padding:16px 12px;text-align:left;color:var(--muted);font-size:13px}.modal-overlay.svelte-5bd3jz.svelte-5bd3jz{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 55%,transparent);display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-5bd3jz.svelte-5bd3jz{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;width:340px;max-height:80vh;overflow-y:auto;display:flex;flex-direction:column;gap:10px;box-shadow:0 12px 40px #00000047}.modal.svelte-5bd3jz h3.svelte-5bd3jz{font-size:1.05rem;color:var(--text);font-weight:600;letter-spacing:-.02em}.modal.svelte-5bd3jz input.invalid.svelte-5bd3jz{border-color:var(--error)}.field-error.svelte-5bd3jz.svelte-5bd3jz,.modal-error.svelte-5bd3jz.svelte-5bd3jz{font-size:12px;color:var(--error)}.modal-error.svelte-5bd3jz.svelte-5bd3jz{padding:8px;border:1px solid var(--error);border-radius:var(--radius);background:color-mix(in srgb,var(--error) 10%,transparent)}.modal-actions.svelte-5bd3jz.svelte-5bd3jz{display:flex;gap:8px;justify-content:flex-end;margin-top:6px}.sr-only.svelte-5bd3jz.svelte-5bd3jz{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.peer-view.svelte-1hijv9g.svelte-1hijv9g{display:flex;flex-direction:column;height:100%;padding:12px 16px 20px;overflow:auto;min-height:0}.section-head.svelte-1hijv9g.svelte-1hijv9g{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:10px}.section-head.svelte-1hijv9g h2.svelte-1hijv9g{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);margin:2px 0 0}.section-hint.svelte-1hijv9g.svelte-1hijv9g{color:var(--muted);font-size:13px;margin:0 0 10px}.section-hint.fault.svelte-1hijv9g.svelte-1hijv9g{color:var(--fault)}.scope-face.svelte-1hijv9g.svelte-1hijv9g{position:relative;flex:1;min-height:0;border:1px solid var(--border);background-color:var(--bg);background-image:repeating-linear-gradient(to right,var(--graticule) 0 1px,transparent 1px 48px),repeating-linear-gradient(to bottom,var(--graticule) 0 1px,transparent 1px 28px)}.channel-head.svelte-1hijv9g.svelte-1hijv9g,.peer-row.svelte-1hijv9g.svelte-1hijv9g{display:grid;grid-template-columns:36px minmax(0,1.3fr) 118px 128px 56px auto;gap:10px;align-items:center;padding:0 12px}.channel-head.svelte-1hijv9g.svelte-1hijv9g{min-height:28px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface) 82%,transparent);font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.stack.svelte-1hijv9g.svelte-1hijv9g{display:flex;flex-direction:column}.peer-row.svelte-1hijv9g.svelte-1hijv9g{min-height:44px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg) 55%,transparent)}.self-row.svelte-1hijv9g.svelte-1hijv9g{opacity:.88}.ch.svelte-1hijv9g.svelte-1hijv9g{font-family:var(--font-mono);font-size:11px;color:var(--muted)}.nickname.svelte-1hijv9g.svelte-1hijv9g{color:var(--text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.self-tag.svelte-1hijv9g.svelte-1hijv9g{margin-left:6px;font-size:11px;color:var(--muted);font-weight:400;letter-spacing:.06em;text-transform:uppercase}.peer-ip.svelte-1hijv9g.svelte-1hijv9g{font-family:var(--font-mono);font-size:12px;color:var(--muted);background:none;border:0;padding:0;cursor:pointer;text-align:left}.peer-ip.svelte-1hijv9g.svelte-1hijv9g:hover{color:var(--text)}.col-ping.svelte-1hijv9g.svelte-1hijv9g{font-family:var(--font-mono);font-size:12px;color:var(--muted)}.col-ping.probing.svelte-1hijv9g.svelte-1hijv9g{color:var(--text)}.col-path.svelte-1hijv9g.svelte-1hijv9g{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;font-family:var(--font-mono);color:var(--muted);min-width:0}.col-path.live.svelte-1hijv9g.svelte-1hijv9g{color:var(--live)}.col-path.fault.svelte-1hijv9g.svelte-1hijv9g{color:var(--fault)}.col-path.idle.svelte-1hijv9g.svelte-1hijv9g{color:var(--muted)}.trace.svelte-1hijv9g.svelte-1hijv9g{width:36px;height:10px;flex-shrink:0}.trace.svelte-1hijv9g line.svelte-1hijv9g,.trace.svelte-1hijv9g circle.svelte-1hijv9g{fill:currentColor;stroke:currentColor;stroke-width:1}.peer-actions.svelte-1hijv9g.svelte-1hijv9g{display:flex;gap:6px;justify-content:flex-end}.badge.svelte-1hijv9g.svelte-1hijv9g{display:inline-block;min-width:16px;padding:0 5px;margin-left:6px;background:var(--fault);color:#fff;font-size:10px;line-height:16px;text-align:center;border-radius:var(--radius)}.empty.svelte-1hijv9g.svelte-1hijv9g{padding:20px 12px;color:var(--muted);background:color-mix(in srgb,var(--bg) 70%,transparent)}.empty-label.svelte-1hijv9g.svelte-1hijv9g{color:var(--text);margin-bottom:4px;font-weight:500}.empty-desc.svelte-1hijv9g.svelte-1hijv9g{font-family:var(--font-serif);font-style:italic;font-size:13px;margin:0}.btn-sm.svelte-1hijv9g.svelte-1hijv9g{min-height:28px;padding:4px 10px;font-size:12px}@media (max-width: 720px){.channel-head.svelte-1hijv9g.svelte-1hijv9g,.peer-row.svelte-1hijv9g.svelte-1hijv9g{grid-template-columns:28px minmax(0,1fr) auto}.channel-head.svelte-1hijv9g span.svelte-1hijv9g:nth-child(3),.channel-head.svelte-1hijv9g span.svelte-1hijv9g:nth-child(4),.channel-head.svelte-1hijv9g span.svelte-1hijv9g:nth-child(5),.peer-ip.svelte-1hijv9g.svelte-1hijv9g,.col-path.svelte-1hijv9g.svelte-1hijv9g,.col-ping.svelte-1hijv9g.svelte-1hijv9g{display:none}}.topbar.svelte-w9vfv6.svelte-w9vfv6{flex-shrink:0;border-bottom:1px solid var(--border);background:var(--surface)}.topbar-row.svelte-w9vfv6.svelte-w9vfv6{display:flex;align-items:stretch;gap:0;min-height:64px}.cell.svelte-w9vfv6.svelte-w9vfv6{display:flex;flex-direction:column;justify-content:center;gap:4px;padding:10px 16px;border-right:1px solid var(--border);min-width:0;text-align:left}button.cell.svelte-w9vfv6.svelte-w9vfv6{background:none;border-top:0;border-bottom:0;border-left:0;cursor:pointer;font:inherit;color:inherit}button.cell.svelte-w9vfv6:hover .cell-value.svelte-w9vfv6{color:var(--muted)}button.cell.svelte-w9vfv6.svelte-w9vfv6:disabled{cursor:default;opacity:1}button.cell.svelte-w9vfv6:disabled:hover .cell-value.svelte-w9vfv6{color:var(--text)}.room.svelte-w9vfv6.svelte-w9vfv6{flex:1.4 1 140px}.vip.svelte-w9vfv6.svelte-w9vfv6{flex:1 1 148px}.path.svelte-w9vfv6.svelte-w9vfv6{flex:1.2 1 180px}.peers.svelte-w9vfv6.svelte-w9vfv6{flex:0 0 72px}.cell-value.svelte-w9vfv6.svelte-w9vfv6{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.15}.cell-value.mono.svelte-w9vfv6.svelte-w9vfv6{font-family:var(--font-mono);font-weight:500;letter-spacing:0;font-size:1rem}.cell-value.live.svelte-w9vfv6.svelte-w9vfv6{color:var(--live)}.cell-value.fault.svelte-w9vfv6.svelte-w9vfv6{color:var(--fault)}.path-row.svelte-w9vfv6.svelte-w9vfv6{display:flex;align-items:center;gap:8px;min-width:0}.leds.svelte-w9vfv6.svelte-w9vfv6{display:flex;gap:4px;flex-shrink:0}.actions.svelte-w9vfv6.svelte-w9vfv6{display:flex;align-items:center;gap:8px;padding:0 12px;margin-left:auto;flex-shrink:0}.connect-view.svelte-1br9j49.svelte-1br9j49{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:32px 24px}.connect-form.svelte-1br9j49.svelte-1br9j49,.connected-info.svelte-1br9j49.svelte-1br9j49{width:min(360px,100%);display:flex;flex-direction:column;gap:16px;animation:svelte-1br9j49-connectIn .45s cubic-bezier(.16,1,.3,1) both}@keyframes svelte-1br9j49-connectIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.brand-block.svelte-1br9j49.svelte-1br9j49{text-align:center;margin-bottom:12px}.brand.svelte-1br9j49.svelte-1br9j49{font-family:var(--font-display);font-size:clamp(36px,7vw,48px);font-weight:400;letter-spacing:.02em;text-transform:uppercase;color:var(--text-bright);line-height:1.05}.tagline.svelte-1br9j49.svelte-1br9j49{margin-top:10px;font-size:var(--font-size-sm);color:var(--text-secondary);text-transform:none;letter-spacing:.02em;line-height:1.45}.field.svelte-1br9j49.svelte-1br9j49{display:flex;flex-direction:column;gap:7px}label.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em}input.svelte-1br9j49.svelte-1br9j49{background:#111111d9;border:1px solid var(--border-light);color:var(--text-bright);padding:13px 14px;min-height:44px;font-family:var(--font-mono);font-size:var(--font-size);transition:border-color .15s ease,background .15s ease}input.svelte-1br9j49.svelte-1br9j49::placeholder{color:var(--text-dim)}input.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){border-color:var(--border-hover)}input.svelte-1br9j49.svelte-1br9j49:focus{outline:none;border-color:var(--text-bright);background:#141414f2}input.invalid.svelte-1br9j49.svelte-1br9j49{border-color:var(--error)}.field-error.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--error)}.connect-btn.svelte-1br9j49.svelte-1br9j49,.disconnect-btn.svelte-1br9j49.svelte-1br9j49,.secondary-btn.svelte-1br9j49.svelte-1br9j49{border:none;padding:15px 18px;min-height:48px;font-family:var(--font-mono);font-size:var(--font-size);cursor:pointer;text-transform:uppercase;letter-spacing:.12em;font-weight:600;transition:background .15s ease,border-color .15s ease,transform .12s ease}.connect-btn.svelte-1br9j49.svelte-1br9j49{margin-top:4px;background:var(--accent);color:var(--accent-ink)}.connect-btn.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){background:var(--accent-hover);transform:translateY(-1px)}.connect-btn.svelte-1br9j49.svelte-1br9j49:active:not(:disabled){transform:translateY(0)}.connect-btn.svelte-1br9j49.svelte-1br9j49:disabled{opacity:.45;cursor:not-allowed;transform:none}.secondary-btn.svelte-1br9j49.svelte-1br9j49{background:transparent;color:var(--text-primary);border:1px solid var(--border-light);font-weight:500;letter-spacing:.08em}.secondary-btn.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){border-color:var(--accent);color:var(--text-bright)}.disconnect-btn.svelte-1br9j49.svelte-1br9j49{background:transparent;color:var(--error);border:1px solid var(--error);font-weight:500}.phase.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--text-muted);text-align:center;letter-spacing:.04em}.invite-disclosure.svelte-1br9j49.svelte-1br9j49{margin-top:8px;border-top:1px solid var(--border);padding-top:14px}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49{cursor:pointer;color:var(--text-muted);font-size:var(--font-size-sm);list-style:none;min-height:36px;display:flex;align-items:center;justify-content:center;transition:color .15s ease}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49:hover{color:var(--text-secondary)}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49::-webkit-details-marker{display:none}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49:before{content:"+";margin-right:8px;color:var(--text-dim)}.invite-disclosure[open].svelte-1br9j49 summary.svelte-1br9j49:before{content:"−"}.invite-block.svelte-1br9j49.svelte-1br9j49{display:flex;flex-direction:column;gap:10px;margin-top:12px}.connected-line.svelte-1br9j49.svelte-1br9j49{display:flex;align-items:center;gap:8px;color:var(--text-bright)}.info-line.svelte-1br9j49.svelte-1br9j49{display:flex;justify-content:space-between;font-size:var(--font-size-sm);color:var(--text-secondary)}.info-value.svelte-1br9j49.svelte-1br9j49{color:var(--text-primary);font-family:var(--font-mono)}.sq.svelte-1br9j49.svelte-1br9j49{width:8px;height:8px;display:inline-block}.sq-green.svelte-1br9j49.svelte-1br9j49{background:var(--success)}.sq-warn.svelte-1br9j49.svelte-1br9j49{background:var(--warning)}.sr-only.svelte-1br9j49.svelte-1br9j49{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.light-theme input.svelte-1br9j49.svelte-1br9j49{background:#ffffffa6}.light-theme input.svelte-1br9j49.svelte-1br9j49:focus{background:#ffffffe6}.chat-view.svelte-16e4bfd.svelte-16e4bfd{display:flex;flex-direction:column;height:100%;flex:1;padding:12px 14px;min-height:0;background:var(--surface)}.section-head.svelte-16e4bfd.svelte-16e4bfd{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:8px;padding-bottom:10px;border-bottom:1px solid var(--border);flex-shrink:0}.section-head.svelte-16e4bfd h2.svelte-16e4bfd{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);margin:2px 0 0}.chat-messages.svelte-16e4bfd.svelte-16e4bfd{flex:1;overflow-y:auto;min-height:0;padding:4px 0 12px;font-family:var(--font-mono);font-size:12px}.empty.svelte-16e4bfd.svelte-16e4bfd{padding:12px 2px;color:var(--muted);font-family:var(--font-sans)}.empty-label.svelte-16e4bfd.svelte-16e4bfd{color:var(--text);margin-bottom:4px;font-weight:500}.empty-desc.svelte-16e4bfd.svelte-16e4bfd{font-family:var(--font-serif);font-style:italic;font-size:13px;margin:0}.date-sep.svelte-16e4bfd.svelte-16e4bfd{text-align:left;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:14px 0 8px;font-family:var(--font-sans)}.system-line.svelte-16e4bfd.svelte-16e4bfd{font-size:12px;color:var(--muted);margin:6px 0}.msg.svelte-16e4bfd.svelte-16e4bfd{margin-bottom:8px}.msg-meta.svelte-16e4bfd.svelte-16e4bfd{font-size:11px;color:var(--muted);margin-bottom:2px;display:flex;gap:8px;align-items:baseline}.msg.self.svelte-16e4bfd .msg-nick.svelte-16e4bfd{color:var(--text)}.msg-time.svelte-16e4bfd.svelte-16e4bfd{color:var(--text-dim)}.msg-nick.svelte-16e4bfd.svelte-16e4bfd{color:var(--text);font-weight:500}.msg-body.svelte-16e4bfd.svelte-16e4bfd{color:var(--text);white-space:pre-wrap;word-break:break-word;line-height:1.45}.msg.failed.svelte-16e4bfd .msg-body.svelte-16e4bfd{color:var(--fault)}.retry-btn.svelte-16e4bfd.svelte-16e4bfd{margin-left:auto;background:transparent;border:none;color:var(--fault);cursor:pointer;font-size:11px;font-family:inherit}.composer.svelte-16e4bfd.svelte-16e4bfd{display:flex;gap:8px;padding:10px 0 0;border-top:1px solid var(--border);flex-shrink:0;align-items:flex-end}textarea.svelte-16e4bfd.svelte-16e4bfd{flex:1;resize:none;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);padding:8px 10px;font-family:var(--font-sans);font-size:14px;min-height:40px;line-height:1.4}textarea.svelte-16e4bfd.svelte-16e4bfd:disabled{opacity:.5}.settings-view.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;flex-direction:column;height:100%;padding:12px 16px 0;min-height:0}.section-head.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:12px;flex-shrink:0}.section-head.svelte-1wpqlpo h2.svelte-1wpqlpo{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);margin:2px 0 0}.settings-content.svelte-1wpqlpo.svelte-1wpqlpo{flex:1;overflow-y:auto;min-height:0;display:flex;flex-direction:column;gap:8px;padding-bottom:12px}.reconnect-banner.svelte-1wpqlpo.svelte-1wpqlpo{background:var(--surface-2);border:1px solid var(--hairline);color:var(--text);padding:10px 12px;border-radius:var(--radius);font-size:13px}.toggle-row.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;align-items:flex-start;gap:10px;margin:10px 0;cursor:pointer}.toggle-title.svelte-1wpqlpo.svelte-1wpqlpo{display:block;font-size:13px;font-weight:600;color:var(--text)}.toggle-label.svelte-1wpqlpo.svelte-1wpqlpo{display:block;color:var(--muted);font-size:12px;margin-top:2px}input[type=checkbox].svelte-1wpqlpo.svelte-1wpqlpo{width:16px;height:16px;margin-top:2px;accent-color:var(--cta)}.scale-row.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;align-items:center;gap:12px}.scale-row.svelte-1wpqlpo input[type=range].svelte-1wpqlpo{flex:1;accent-color:var(--cta)}.scale-value.svelte-1wpqlpo.svelte-1wpqlpo{min-width:44px;text-align:right;color:var(--muted);font-family:var(--font-mono);font-size:13px}.theme-row.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 0 16px}.update-row.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0}.ver.svelte-1wpqlpo.svelte-1wpqlpo{color:var(--muted);font-size:12px;font-family:var(--font-mono)}.commit-plate.svelte-1wpqlpo.svelte-1wpqlpo{display:flex;justify-content:flex-end;gap:8px;padding:12px 0 16px;flex-shrink:0;border-top:1px solid var(--border);background:var(--bg)}.shell.svelte-8tj0mu{display:flex;flex-direction:column;height:100%;width:100%;position:relative;z-index:1;min-height:0}.connect-shell.svelte-8tj0mu{z-index:1}.layout.svelte-8tj0mu{display:flex;flex:1;min-height:0;position:relative}.fullscreen-connect.svelte-8tj0mu{display:flex;flex:1;width:100%;align-items:center;justify-content:center;min-height:0}.sidebar-wrapper.svelte-8tj0mu{position:relative;flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;min-height:0}.drag-handle.svelte-8tj0mu{position:absolute;top:0;right:-3px;width:6px;height:100%;cursor:col-resize;z-index:10;background:transparent;transition:background var(--dur-mid, .28s) var(--ease-out, ease)}.drag-handle.svelte-8tj0mu:hover,.drag-handle.active.svelte-8tj0mu,.drag-handle.svelte-8tj0mu:focus-visible{background:var(--border-hover)}.main-area.svelte-8tj0mu{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg);min-width:0;min-height:0}.workspace.svelte-8tj0mu{flex:1;display:flex;min-height:0;min-width:0}.peer-pane.svelte-8tj0mu,.settings-pane.svelte-8tj0mu{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}.peer-pane[hidden].svelte-8tj0mu,.chat-pane[hidden].svelte-8tj0mu,.settings-pane[hidden].svelte-8tj0mu{display:none!important}.chat-pane.svelte-8tj0mu{flex:0 0 42%;max-width:480px;min-width:280px;min-height:0;display:flex;flex-direction:column;border-left:1px solid var(--border)}.error-strip.svelte-8tj0mu{position:fixed;left:16px;right:16px;bottom:16px;z-index:1100;display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--surface-2, var(--bg-raised, #111));border:1px solid var(--fault, var(--error, #c41e1e));border-radius:var(--radius, 2px);color:var(--fault, var(--error, #c41e1e));font-size:var(--font-size-sm, 13px)}.error-strip-msg.svelte-8tj0mu{flex:1;min-width:0;word-break:break-word}.error-strip-dismiss.svelte-8tj0mu{flex-shrink:0;min-height:32px;padding:4px 10px;border:1px solid var(--fault, var(--error, #c41e1e));border-radius:var(--radius, 2px);background:transparent;color:var(--fault, var(--error, #c41e1e));cursor:pointer;font-family:inherit;font-size:13px;text-transform:none}.error-strip-dismiss.svelte-8tj0mu:hover{background:color-mix(in srgb,var(--fault, #c41e1e) 12%,transparent)}.notification.svelte-8tj0mu{position:fixed;top:16px;right:16px;padding:12px 16px;font-size:13px;font-weight:500;z-index:1000;background:var(--surface-2, var(--bg-raised, #111));border:1px solid var(--border, #2a2a2a);border-radius:var(--radius, 2px);color:var(--text, var(--text-bright, #f5f5f5));max-width:min(360px,calc(100vw - 2rem))}.notification.error.svelte-8tj0mu{border-color:var(--fault, var(--error, #c41e1e));color:var(--fault, var(--error, #c41e1e))}.space-bg,.space-bg:before,.space-bg:after,.space-dust,.space-dust:before{position:fixed;pointer-events:none;z-index:0}.space-bg{inset:0;background:radial-gradient(ellipse 85% 65% at 50% 36%,rgba(255,255,255,.045) 0%,transparent 55%),radial-gradient(ellipse 120% 80% at 50% 100%,rgba(255,255,255,.03) 0%,transparent 50%),radial-gradient(ellipse 100% 100% at 50% 50%,#0a0a0a,#050505 70%,#000)}.space-bg:before{content:"";position:absolute;inset:0;opacity:.8;background:radial-gradient(1.2px 1.2px at 5% 10%,rgba(255,255,255,.55) 0%,transparent 100%),radial-gradient(1px 1px at 12% 32%,rgba(255,255,255,.35) 0%,transparent 100%),radial-gradient(1px 1px at 18% 68%,rgba(255,255,255,.32) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 25% 45%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 32% 18%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 38% 78%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 45% 15%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 52% 58%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 58% 28%,rgba(255,255,255,.26) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 65% 10%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 72% 72%,rgba(255,255,255,.35) 0%,transparent 100%),radial-gradient(1px 1px at 78% 40%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 85% 65%,rgba(255,255,255,.48) 0%,transparent 100%),radial-gradient(1px 1px at 90% 22%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 94% 88%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1px 1px at 8% 88%,rgba(255,255,255,.26) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 30% 92%,rgba(255,255,255,.4) 0%,transparent 100%),radial-gradient(1px 1px at 48% 42%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1px 1px at 62% 88%,rgba(255,255,255,.32) 0%,transparent 100%),radial-gradient(1px 1px at 88% 52%,rgba(255,255,255,.26) 0%,transparent 100%)}.space-bg:after{content:"";position:absolute;inset:0;background-image:radial-gradient(1.5px 1.5px at 8% 18%,rgba(255,255,255,.7) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 48% 38%,rgba(255,255,255,.6) 0%,transparent 100%),radial-gradient(1.5px 1.5px at 88% 28%,rgba(255,255,255,.65) 0%,transparent 100%),radial-gradient(1px 1px at 22% 55%,rgba(255,255,255,.45) 0%,transparent 100%),radial-gradient(1px 1px at 70% 60%,rgba(255,255,255,.4) 0%,transparent 100%);animation:twinkle 9s ease-in-out infinite alternate;opacity:.5}@keyframes twinkle{0%{opacity:.2}45%{opacity:.5}to{opacity:.25}}.space-dust{inset:0;background:radial-gradient(ellipse 80% 70% at 50% 45%,transparent 42%,rgba(0,0,0,.62) 100%);opacity:1}.space-dust:before{content:"";position:absolute;inset:0;opacity:.32;background:radial-gradient(.5px .5px at 20% 30%,rgba(255,255,255,.4) 0%,transparent 100%),radial-gradient(.5px .5px at 40% 60%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(.5px .5px at 60% 25%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(.5px .5px at 75% 70%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(.5px .5px at 88% 40%,rgba(255,255,255,.3) 0%,transparent 100%)}.light-theme .space-bg,.light-theme .space-bg:before,.light-theme .space-bg:after,.light-theme .space-dust,.light-theme .space-dust:before{display:none!important}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/bricolage-latin-400-A6LyuA6R.woff2) format("woff2")}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/bricolage-latin-500-DEDBoLFO.woff2) format("woff2")}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:600;font-display:swap;src:url(/assets/bricolage-latin-600-nxTgbNFE.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/ibm-plex-mono-latin-400-Dm_PoFIZ.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/ibm-plex-mono-latin-500-C_OblDzq.woff2) format("woff2")}@font-face{font-family:"IBM Plex Serif";font-style:italic;font-weight:400;font-display:swap;src:url(/assets/ibm-plex-serif-latin-400-italic-yImJBWyJ.woff2) format("woff2")}html[data-app=connected]{color-scheme:dark;--bg: #0a0a0a;--surface: #141414;--surface-2: #1a1a1a;--border: #2a2a2a;--hairline: #3a3a3a;--muted: #8a8a8a;--text: #f5f5f5;--cta: #ffffff;--cta-fill: #ffffff;--cta-ink: #0a0a0a;--caution: #a3a3a3;--danger: #f5f5f5;--live: #2fbf62;--fault: #e23d3d;--radius: 2px;--graticule: #262626;--font-sans: "Bricolage Grotesque", "Segoe UI", sans-serif;--font-serif: "IBM Plex Serif", Georgia, serif;--font-mono: "IBM Plex Mono", Consolas, monospace;--switch-track: #1a1a1a;--switch-thumb: #f5f5f5;--switch-icon-on: #0a0a0a;--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-inout: cubic-bezier(.4, 0, .2, 1);--dur-fast: .15s;--dur-mid: .28s;--dur-slow: .42s;--bg-deep: var(--bg);--bg-primary: var(--bg);--bg-surface: var(--surface);--bg-raised: var(--surface-2);--bg-hover: #222;--bg-active: #262626;--border-deep: var(--border);--border-light: var(--hairline);--border-hover: var(--hairline);--text-bright: var(--text);--text-primary: var(--text);--text-secondary: var(--muted);--text-muted: var(--muted);--text-dim: #5c5c5c;--accent: var(--cta-fill);--accent-hover: #e8e8e8;--accent-ink: var(--cta-ink);--success: var(--live);--warning: var(--caution);--error: var(--fault);--focus-ring: var(--cta);--font-size: 14px;--font-size-sm: 13px;--font-size-xs: 12px;--line-height: 1.5}html[data-app=connected][data-theme=light]{color-scheme:light;--bg: #ffffff;--surface: #f7f7f7;--surface-2: #eeeeee;--border: #d4d4d4;--hairline: #b8b8b8;--muted: #5c5c5c;--text: #111111;--cta: #111111;--cta-fill: #111111;--cta-ink: #ffffff;--caution: #5c5c5c;--danger: #111111;--live: #1a8f45;--fault: #c41e1e;--switch-track: #e6e6e6;--switch-thumb: #111111;--switch-icon-on: #ffffff;--bg-hover: #ececec;--bg-active: #e4e4e4;--text-dim: #9a9a9a;--accent-hover: #2a2a2a;--error: var(--fault);--graticule: #d8d8d8}@media (prefers-reduced-motion: reduce){html[data-app=connected]{--dur-fast: .01ms;--dur-mid: .01ms;--dur-slow: .01ms}}html[data-app=connected],html[data-app=connected] body,html[data-app=connected] #app{font-family:var(--font-sans);font-size:var(--font-size);color:var(--text);background:var(--bg)}html[data-app=connected] input,html[data-app=connected] textarea,html[data-app=connected] button,html[data-app=connected] select{font-family:inherit;font-size:inherit}html[data-app=connected] ::selection{background:color-mix(in srgb,var(--text) 18%,transparent);color:var(--text)}html[data-app=connected] :focus-visible{outline:2px solid var(--text);outline-offset:2px}html[data-app=connected] .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--text-dim)}html[data-app=connected] .dot-live{background:var(--live)}html[data-app=connected] .dot-fault{background:var(--fault)}html[data-app=connected] .dot-idle{background:var(--text-dim)}html[data-app=connected] .btn{border:1px solid var(--border);background:transparent;color:var(--text);padding:8px 14px;min-height:36px;border-radius:var(--radius);cursor:pointer;font-weight:500;font-size:13px;letter-spacing:0;text-transform:none;display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-sans);transition:background var(--dur-mid) var(--ease-out),border-color var(--dur-mid) var(--ease-out),color var(--dur-mid) var(--ease-out),opacity var(--dur-mid) var(--ease-out)}html[data-app=connected] .btn:hover:not(:disabled){border-color:var(--hairline);background:var(--surface-2)}html[data-app=connected] .btn:disabled{opacity:.45;cursor:not-allowed}html[data-app=connected] .btn-ghost{border-color:var(--border);color:var(--muted)}html[data-app=connected] .btn-ghost:hover:not(:disabled){color:var(--text)}html[data-app=connected] .btn-quiet{border-color:transparent;color:var(--muted)}html[data-app=connected] .btn-quiet:hover:not(:disabled){border-color:var(--border);color:var(--text);background:transparent}html[data-app=connected] .btn-cta,html[data-app=connected] .btn.primary,html[data-app=connected] .btn-save{background:var(--cta-fill);color:var(--cta-ink);border-color:var(--cta-fill);font-weight:600}html[data-app=connected] .btn-cta:hover:not(:disabled),html[data-app=connected] .btn.primary:hover:not(:disabled),html[data-app=connected] .btn-save:hover:not(:disabled){background:color-mix(in srgb,var(--cta-fill) 88%,var(--cta-ink))}html[data-app=connected] .btn.danger{color:var(--fault);border-color:color-mix(in srgb,var(--fault) 45%,var(--border))}html[data-app=connected] .card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}html[data-app=connected] .card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;padding:10px 14px;background:var(--surface-2)}html[data-app=connected] .card-disclosure{flex:1;min-width:0;display:flex;align-items:center;gap:10px;background:transparent;border:none;padding:0;cursor:pointer;text-align:left;color:inherit;font:inherit;min-height:28px}html[data-app=connected] .card-title{font-size:13px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--text)}html[data-app=connected] .card-body{display:grid;grid-template-rows:1fr;border-top:1px solid var(--border);transition:grid-template-rows var(--dur-slow) var(--ease-out),border-color var(--dur-mid) var(--ease-out)}html[data-app=connected] .card-body.collapsed{grid-template-rows:0fr;border-top-color:transparent}html[data-app=connected] .card-body-inner{overflow:hidden;min-height:0}html[data-app=connected] .card-body-pad{padding:14px 16px 16px}html[data-app=connected] .collapse-chevron{color:var(--muted);width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;font-size:10px;transition:transform var(--dur-mid) var(--ease-out);flex-shrink:0}html[data-app=connected] .collapse-chevron.collapsed{transform:rotate(-90deg)}html[data-app=connected] .field{margin-bottom:12px}html[data-app=connected] .field label,html[data-app=connected] .setting-label{display:block;font-size:12px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--muted);margin-bottom:4px}html[data-app=connected] .field input,html[data-app=connected] .field select,html[data-app=connected] .field textarea,html[data-app=connected] .settings-view input[type=text],html[data-app=connected] .settings-view input[type=password],html[data-app=connected] .settings-view input[type=number],html[data-app=connected] .settings-view select,html[data-app=connected] .modal input{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);padding:8px 10px;min-height:36px;font-size:13px;font-family:var(--font-mono)}html[data-app=connected] .hint{color:var(--muted);font-size:13px;margin:0 0 12px;max-width:65ch;line-height:1.45}html[data-app=connected] .theme-switch{--ts-thumb: 28px;--ts-inset: 3px;--ts-travel: 36px;position:relative;width:calc(var(--ts-thumb) + var(--ts-inset) * 2 + var(--ts-travel));height:calc(var(--ts-thumb) + var(--ts-inset) * 2);padding:0;border:1px solid var(--border);border-radius:999px;background:transparent;cursor:pointer;flex-shrink:0;box-sizing:border-box;min-width:62px;min-height:34px}html[data-app=connected] .theme-switch:hover{border-color:var(--hairline)}html[data-app=connected] .theme-switch-track{position:absolute;inset:0;border-radius:inherit;overflow:hidden}html[data-app=connected] .theme-switch-thumb{position:absolute;top:50%;left:var(--ts-inset);width:var(--ts-thumb);height:var(--ts-thumb);border-radius:50%;background:var(--switch-thumb);border:1px solid var(--border);transform:translate3d(0,-50%,0);z-index:2;pointer-events:none}html[data-app=connected] .theme-switch.is-dark .theme-switch-thumb{transform:translate3d(var(--ts-travel),-50%,0)}html[data-app=connected] .theme-switch-icon{position:absolute;top:50%;width:var(--ts-thumb);height:var(--ts-thumb);display:flex;align-items:center;justify-content:center;color:var(--muted);opacity:.4;transform:translateY(-50%) scale(.92);z-index:3;pointer-events:none}html[data-app=connected] .theme-switch-icon svg{display:block;width:16px;height:16px}html[data-app=connected] .theme-switch-sun{left:var(--ts-inset)}html[data-app=connected] .theme-switch-moon{left:calc(var(--ts-inset) + var(--ts-travel))}html[data-app=connected] .theme-switch:not(.is-dark) .theme-switch-sun,html[data-app=connected] .theme-switch.is-dark .theme-switch-moon{color:var(--switch-icon-on);opacity:1;transform:translateY(-50%) scale(1)}html[data-app=connected] .label-track{display:block;font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);line-height:1.2}html[data-app=connected] .led{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--text-dim);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 18%,transparent)}html[data-app=connected] .led.on.live{background:var(--live)}html[data-app=connected] .led.on.fault{background:var(--fault)}html[data-app=connected] .led.on.idle{background:var(--text)}html[data-app=connected] .bezel{border:1px solid var(--border);background:transparent;color:var(--text);min-height:32px;padding:4px 10px;border-radius:var(--radius);font-size:11px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;font-family:var(--font-sans)}html[data-app=connected] .bezel:hover:not(:disabled){border-color:var(--hairline);background:var(--surface-2)}html[data-app=connected] .bezel.active{background:var(--text);color:var(--bg);border-color:var(--text)}@font-face{font-family:Bungee;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/bungee-latin-Dfnurram.woff2) format("woff2")}:root{--bg-deep: #000000;--bg-primary: #050505;--bg-surface: #0a0a0a;--bg-raised: #111111;--bg-hover: #181818;--bg-active: #1f1f1f;--border-deep: #111111;--border: #1c1c1c;--border-light: #2a2a2a;--border-hover: #3d3d3d;--text-bright: #f5f5f5;--text-primary: #c8c8c8;--text-secondary: #8a8a8a;--text-muted: #5c5c5c;--text-dim: #3a3a3a;--accent: #f0f0f0;--accent-hover: #ffffff;--accent-ink: #000000;--success: #9a9a9a;--warning: #c8c8c8;--error: #c45c5c;--focus-ring: #f0f0f0;--sidebar-width: 220px;--font-display: "Bungee", ui-sans-serif, system-ui, sans-serif;--font-mono: ui-monospace, "Cascadia Code", "SF Mono", Consolas, "Liberation Mono", monospace;--font-size: 12px;--font-size-sm: 11px;--font-size-xs: 10px;--line-height: 1.6}.light-theme{--bg-deep: #f5f5f5;--bg-primary: #f0f0f0;--bg-surface: #e8e8e8;--bg-raised: #e0e0e0;--bg-hover: #d8d8d8;--bg-active: #cfcfcf;--border-deep: #d0d0d0;--border: #cccccc;--border-light: #bbbbbb;--border-hover: #999999;--text-bright: #111111;--text-primary: #222222;--text-secondary: #555555;--text-muted: #888888;--text-dim: #aaaaaa;--accent: #000000;--accent-hover: #222222;--accent-ink: #f5f5f5;--success: #555555;--warning: #333333;--error: #b33a3a;--focus-ring: #000000}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body,#app{height:100%;width:100%;overflow:hidden;color:var(--text-primary);font-family:var(--font-mono);font-size:var(--font-size);line-height:var(--line-height);-webkit-font-smoothing:antialiased;user-select:auto}html,body{background:var(--bg-deep)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border)}::-webkit-scrollbar-thumb:hover{background:var(--border-hover)}::-webkit-scrollbar-corner{background:transparent}::selection{background:#ffffff1a;color:var(--text-bright)}input,textarea,button,select{font-family:var(--font-mono);font-size:var(--font-size)}input:focus-visible,textarea:focus-visible,select:focus-visible,button:focus-visible,[tabindex]:focus-visible,.network-item:focus-visible,.clickable:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}button{cursor:pointer;border:none;background:none;color:inherit}a{color:var(--text-bright);text-decoration:none}a:hover{text-decoration:underline}.btn{padding:8px 12px;min-height:36px;border:1px solid var(--border);background:var(--bg-raised);color:var(--text-primary);cursor:pointer;font-size:var(--font-size-sm);text-align:center;font-family:var(--font-mono);transition:background .1s ease,opacity .1s ease}.btn:hover:not(:disabled){background:var(--bg-hover)}.btn.primary,.btn-save{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:500}.btn.primary:hover,.btn-save:hover{background:var(--accent-hover)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.danger{color:var(--error);border-color:var(--error)}.empty-state{padding:16px;text-align:center;color:var(--text-muted);font-size:var(--font-size-sm)} diff --git a/client/frontend/dist/assets/index-CoV4PMmG.css b/client/frontend/dist/assets/index-CoV4PMmG.css new file mode 100644 index 0000000..2f4806e --- /dev/null +++ b/client/frontend/dist/assets/index-CoV4PMmG.css @@ -0,0 +1 @@ +.modal-overlay.svelte-1g1nook.svelte-1g1nook{position:fixed;inset:0;background:color-mix(in srgb,var(--bg, #0a0a0a) 55%,transparent);display:flex;align-items:center;justify-content:center;z-index:200}.modal.svelte-1g1nook.svelte-1g1nook{background:var(--surface, #141414);border:1px solid var(--border, #2a2a2a);border-radius:var(--radius, 2px);padding:20px;width:340px;display:flex;flex-direction:column;gap:16px}.modal.svelte-1g1nook p.svelte-1g1nook{color:var(--text, #f5f5f5);font-size:14px;line-height:1.45}.modal-actions.svelte-1g1nook.svelte-1g1nook{display:flex;gap:8px;justify-content:flex-end}.sidebar.svelte-1vrsv4c.svelte-1vrsv4c{width:100%;height:100%;background:transparent;display:flex;flex-direction:column;flex-shrink:0}.sidebar-header.svelte-1vrsv4c.svelte-1vrsv4c{padding:14px 14px 8px}.sidebar-meta.svelte-1vrsv4c.svelte-1vrsv4c{font-size:11px;font-family:var(--font-mono);color:var(--muted);margin-top:4px}.sidebar-actions.svelte-1vrsv4c.svelte-1vrsv4c{padding:8px 12px 12px;display:flex;flex-direction:column;gap:6px}.sidebar-actions.svelte-1vrsv4c .bezel.svelte-1vrsv4c{width:100%}.sidebar-actions.svelte-1vrsv4c .bezel.svelte-1vrsv4c:disabled{opacity:.45;cursor:not-allowed}.network-list.svelte-1vrsv4c.svelte-1vrsv4c{flex:1;overflow-y:auto;overflow-x:hidden;padding:0 0 12px;border-top:1px solid var(--border)}.network-item.svelte-1vrsv4c.svelte-1vrsv4c{display:flex;align-items:center;padding:10px 12px;min-height:44px;cursor:pointer;gap:10px;border-bottom:1px solid var(--border);transition:background var(--dur-fast, .15s) var(--ease-out, ease);position:relative}.network-item.svelte-1vrsv4c.svelte-1vrsv4c:hover,.network-item.svelte-1vrsv4c.svelte-1vrsv4c:focus-visible{background:var(--bg-hover)}.network-item.active.svelte-1vrsv4c.svelte-1vrsv4c{background:var(--surface-2)}.network-item.disabled.svelte-1vrsv4c.svelte-1vrsv4c{opacity:.55}.tick.svelte-1vrsv4c.svelte-1vrsv4c{width:6px;height:6px;flex-shrink:0;background:var(--text-dim)}.tick.on.svelte-1vrsv4c.svelte-1vrsv4c{background:var(--text)}.network-info.svelte-1vrsv4c.svelte-1vrsv4c{flex:1;min-width:0}.network-name.svelte-1vrsv4c.svelte-1vrsv4c{font-size:13px;font-weight:500;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.network-meta.svelte-1vrsv4c.svelte-1vrsv4c{font-size:11px;font-family:var(--font-mono);color:var(--muted);line-height:1.4}.row-actions.svelte-1vrsv4c.svelte-1vrsv4c{position:relative;flex-shrink:0}.menu-btn.svelte-1vrsv4c.svelte-1vrsv4c{background:none;border:1px solid transparent;color:var(--muted);cursor:pointer;font-size:16px;line-height:1;width:32px;height:32px;border-radius:var(--radius);display:flex;align-items:center;justify-content:center}.menu-btn.svelte-1vrsv4c svg.svelte-1vrsv4c{width:16px;height:16px;display:block}.menu-btn.svelte-1vrsv4c.svelte-1vrsv4c:hover,.menu-btn[aria-expanded=true].svelte-1vrsv4c.svelte-1vrsv4c{color:var(--text);border-color:var(--border);background:var(--surface)}.overflow-menu.svelte-1vrsv4c.svelte-1vrsv4c{position:absolute;right:0;top:100%;z-index:20;min-width:168px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);display:flex;flex-direction:column;box-shadow:0 8px 24px #00000047}.menu-item.svelte-1vrsv4c.svelte-1vrsv4c{background:none;border:none;text-align:left;padding:10px 12px;min-height:36px;color:var(--text);font-size:13px;cursor:pointer}.menu-item.svelte-1vrsv4c.svelte-1vrsv4c:hover{background:var(--bg-hover)}.menu-item.danger.svelte-1vrsv4c.svelte-1vrsv4c{color:var(--error)}.menu-item.danger.svelte-1vrsv4c.svelte-1vrsv4c:hover{background:color-mix(in srgb,var(--error) 12%,transparent)}.empty-desc.svelte-1vrsv4c.svelte-1vrsv4c{margin-top:6px;font-size:12px;color:var(--text-dim)}.empty-state.svelte-1vrsv4c.svelte-1vrsv4c{padding:16px 12px;text-align:left;color:var(--muted);font-size:13px}.modal-overlay.svelte-1vrsv4c.svelte-1vrsv4c{position:fixed;inset:0;background:color-mix(in srgb,var(--bg) 55%,transparent);display:flex;align-items:center;justify-content:center;z-index:100}.modal.svelte-1vrsv4c.svelte-1vrsv4c{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px;width:340px;max-height:80vh;overflow-y:auto;display:flex;flex-direction:column;gap:10px;box-shadow:0 12px 40px #00000047}.modal.svelte-1vrsv4c h3.svelte-1vrsv4c{font-size:1.05rem;color:var(--text);font-weight:600;letter-spacing:-.02em}.modal.svelte-1vrsv4c input.invalid.svelte-1vrsv4c{border-color:var(--error)}.field-error.svelte-1vrsv4c.svelte-1vrsv4c,.modal-error.svelte-1vrsv4c.svelte-1vrsv4c{font-size:12px;color:var(--error)}.modal-error.svelte-1vrsv4c.svelte-1vrsv4c{padding:8px;border:1px solid var(--error);border-radius:var(--radius);background:color-mix(in srgb,var(--error) 10%,transparent)}.modal-actions.svelte-1vrsv4c.svelte-1vrsv4c{display:flex;gap:8px;justify-content:flex-end;margin-top:6px}.sr-only.svelte-1vrsv4c.svelte-1vrsv4c{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.peer-view.svelte-1ywbfno.svelte-1ywbfno{display:flex;flex-direction:column;height:100%;padding:12px 16px 20px;overflow:auto;min-height:0}.section-head.svelte-1ywbfno.svelte-1ywbfno{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}.section-head.svelte-1ywbfno h2.svelte-1ywbfno{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);margin:0}.section-hint.svelte-1ywbfno.svelte-1ywbfno{color:var(--muted);font-size:13px;margin:0 0 10px}.section-hint.fault.svelte-1ywbfno.svelte-1ywbfno{color:var(--fault)}.scope-face.svelte-1ywbfno.svelte-1ywbfno{position:relative;flex:1;min-height:0;border:1px solid var(--border);background-color:var(--bg);background-image:repeating-linear-gradient(to right,var(--graticule) 0 1px,transparent 1px 48px),repeating-linear-gradient(to bottom,var(--graticule) 0 1px,transparent 1px 28px)}.channel-head.svelte-1ywbfno.svelte-1ywbfno,.peer-row.svelte-1ywbfno.svelte-1ywbfno{display:grid;grid-template-columns:36px minmax(0,1.3fr) 118px 128px 56px auto;gap:10px;align-items:center;padding:0 12px}.channel-head.svelte-1ywbfno.svelte-1ywbfno{min-height:28px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--surface) 82%,transparent);font-size:10px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.stack.svelte-1ywbfno.svelte-1ywbfno{display:flex;flex-direction:column}.peer-row.svelte-1ywbfno.svelte-1ywbfno{min-height:44px;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg) 55%,transparent)}.self-row.svelte-1ywbfno.svelte-1ywbfno{opacity:.88}.ch.svelte-1ywbfno.svelte-1ywbfno{font-family:var(--font-mono);font-size:11px;color:var(--muted)}.nickname.svelte-1ywbfno.svelte-1ywbfno{color:var(--text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.self-tag.svelte-1ywbfno.svelte-1ywbfno{margin-left:6px;font-size:11px;color:var(--muted);font-weight:400;letter-spacing:.06em;text-transform:uppercase}.peer-ip.svelte-1ywbfno.svelte-1ywbfno{font-family:var(--font-mono);font-size:12px;color:var(--muted);background:none;border:0;padding:0;cursor:pointer;text-align:left}.peer-ip.svelte-1ywbfno.svelte-1ywbfno:hover{color:var(--text)}.col-ping.svelte-1ywbfno.svelte-1ywbfno{font-family:var(--font-mono);font-size:12px;color:var(--muted)}.col-ping.probing.svelte-1ywbfno.svelte-1ywbfno{color:var(--text)}.col-path.svelte-1ywbfno.svelte-1ywbfno{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;font-family:var(--font-mono);color:var(--muted);min-width:0}.col-path.live.svelte-1ywbfno.svelte-1ywbfno{color:var(--live)}.col-path.fault.svelte-1ywbfno.svelte-1ywbfno{color:var(--fault)}.col-path.idle.svelte-1ywbfno.svelte-1ywbfno{color:var(--muted)}.trace.svelte-1ywbfno.svelte-1ywbfno{width:36px;height:10px;flex-shrink:0}.trace.svelte-1ywbfno line.svelte-1ywbfno,.trace.svelte-1ywbfno circle.svelte-1ywbfno{fill:currentColor;stroke:currentColor;stroke-width:1}.peer-actions.svelte-1ywbfno.svelte-1ywbfno{display:flex;gap:6px;justify-content:flex-end}.badge.svelte-1ywbfno.svelte-1ywbfno{display:inline-block;min-width:16px;padding:0 5px;margin-left:6px;background:var(--fault);color:#fff;font-size:10px;line-height:16px;text-align:center;border-radius:var(--radius)}.empty.svelte-1ywbfno.svelte-1ywbfno{padding:20px 12px;color:var(--muted);background:color-mix(in srgb,var(--bg) 70%,transparent)}.empty-label.svelte-1ywbfno.svelte-1ywbfno{color:var(--text);margin-bottom:4px;font-weight:500}.empty-desc.svelte-1ywbfno.svelte-1ywbfno{font-family:var(--font-serif);font-style:italic;font-size:13px;margin:0}.btn-sm.svelte-1ywbfno.svelte-1ywbfno{min-height:28px;padding:4px 10px;font-size:12px}@media (max-width: 720px){.channel-head.svelte-1ywbfno.svelte-1ywbfno,.peer-row.svelte-1ywbfno.svelte-1ywbfno{grid-template-columns:28px minmax(0,1fr) auto}.channel-head.svelte-1ywbfno span.svelte-1ywbfno:nth-child(3),.channel-head.svelte-1ywbfno span.svelte-1ywbfno:nth-child(4),.channel-head.svelte-1ywbfno span.svelte-1ywbfno:nth-child(5),.peer-ip.svelte-1ywbfno.svelte-1ywbfno,.col-path.svelte-1ywbfno.svelte-1ywbfno,.col-ping.svelte-1ywbfno.svelte-1ywbfno{display:none}}.topbar.svelte-10p19bf.svelte-10p19bf{flex-shrink:0;border-bottom:1px solid var(--border);background:var(--surface)}.topbar-row.svelte-10p19bf.svelte-10p19bf{display:flex;align-items:stretch;gap:0;min-height:72px}.cell.svelte-10p19bf.svelte-10p19bf{display:flex;flex-direction:column;justify-content:center;gap:4px;padding:10px 16px;border-right:1px solid var(--border);min-width:0;text-align:left}button.cell.svelte-10p19bf.svelte-10p19bf{background:none;border-top:0;border-bottom:0;border-left:0;cursor:pointer;font:inherit;color:inherit}button.cell.svelte-10p19bf:hover .cell-value.svelte-10p19bf{color:var(--muted)}button.cell.svelte-10p19bf.svelte-10p19bf:disabled{cursor:default;opacity:1}button.cell.svelte-10p19bf:disabled:hover .cell-value.svelte-10p19bf{color:var(--text)}.brand.svelte-10p19bf.svelte-10p19bf{flex:0 0 auto;justify-content:center;padding-right:18px}.wordmark.svelte-10p19bf.svelte-10p19bf{font-size:11px;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--text);line-height:1.2}.room.svelte-10p19bf.svelte-10p19bf{flex:1.4 1 140px}.vip.svelte-10p19bf.svelte-10p19bf{flex:1 1 168px}.path.svelte-10p19bf.svelte-10p19bf{flex:1.4 1 200px}.peers.svelte-10p19bf.svelte-10p19bf{flex:0 0 72px}.cell-value.svelte-10p19bf.svelte-10p19bf{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.15}.cell-value.mono.svelte-10p19bf.svelte-10p19bf{font-family:var(--font-mono);font-weight:500;letter-spacing:0;font-size:1rem}.vip-value.svelte-10p19bf.svelte-10p19bf{font-size:1.35rem;font-weight:500;letter-spacing:.02em}.path-value.svelte-10p19bf.svelte-10p19bf{font-family:var(--font-mono);font-size:1.22rem;font-weight:500;letter-spacing:0}.cell-value.live.svelte-10p19bf.svelte-10p19bf{color:var(--live)}.cell-value.fault.svelte-10p19bf.svelte-10p19bf{color:var(--fault)}.path-row.svelte-10p19bf.svelte-10p19bf{display:flex;align-items:center;gap:8px;min-width:0}.leds.svelte-10p19bf.svelte-10p19bf{display:flex;gap:4px;flex-shrink:0}.seg-bar.svelte-10p19bf.svelte-10p19bf{display:flex;gap:3px;margin-top:2px}.seg.svelte-10p19bf.svelte-10p19bf{flex:1;height:3px;background:var(--text-dim)}.seg.on.live.svelte-10p19bf.svelte-10p19bf{background:var(--live)}.seg.on.fault.svelte-10p19bf.svelte-10p19bf{background:var(--fault)}.actions.svelte-10p19bf.svelte-10p19bf{display:flex;align-items:center;gap:8px;padding:0 12px;margin-left:auto;flex-shrink:0}.connect-view.svelte-1br9j49.svelte-1br9j49{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:32px 24px}.connect-form.svelte-1br9j49.svelte-1br9j49,.connected-info.svelte-1br9j49.svelte-1br9j49{width:min(360px,100%);display:flex;flex-direction:column;gap:16px;animation:svelte-1br9j49-connectIn .45s cubic-bezier(.16,1,.3,1) both}@keyframes svelte-1br9j49-connectIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.brand-block.svelte-1br9j49.svelte-1br9j49{text-align:center;margin-bottom:12px}.brand.svelte-1br9j49.svelte-1br9j49{font-family:var(--font-display);font-size:clamp(36px,7vw,48px);font-weight:400;letter-spacing:.02em;text-transform:uppercase;color:var(--text-bright);line-height:1.05}.tagline.svelte-1br9j49.svelte-1br9j49{margin-top:10px;font-size:var(--font-size-sm);color:var(--text-secondary);text-transform:none;letter-spacing:.02em;line-height:1.45}.field.svelte-1br9j49.svelte-1br9j49{display:flex;flex-direction:column;gap:7px}label.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.08em}input.svelte-1br9j49.svelte-1br9j49{background:#111111d9;border:1px solid var(--border-light);color:var(--text-bright);padding:13px 14px;min-height:44px;font-family:var(--font-mono);font-size:var(--font-size);transition:border-color .15s ease,background .15s ease}input.svelte-1br9j49.svelte-1br9j49::placeholder{color:var(--text-dim)}input.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){border-color:var(--border-hover)}input.svelte-1br9j49.svelte-1br9j49:focus{outline:none;border-color:var(--text-bright);background:#141414f2}input.invalid.svelte-1br9j49.svelte-1br9j49{border-color:var(--error)}.field-error.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--error)}.connect-btn.svelte-1br9j49.svelte-1br9j49,.disconnect-btn.svelte-1br9j49.svelte-1br9j49,.secondary-btn.svelte-1br9j49.svelte-1br9j49{border:none;padding:15px 18px;min-height:48px;font-family:var(--font-mono);font-size:var(--font-size);cursor:pointer;text-transform:uppercase;letter-spacing:.12em;font-weight:600;transition:background .15s ease,border-color .15s ease,transform .12s ease}.connect-btn.svelte-1br9j49.svelte-1br9j49{margin-top:4px;background:var(--accent);color:var(--accent-ink)}.connect-btn.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){background:var(--accent-hover);transform:translateY(-1px)}.connect-btn.svelte-1br9j49.svelte-1br9j49:active:not(:disabled){transform:translateY(0)}.connect-btn.svelte-1br9j49.svelte-1br9j49:disabled{opacity:.45;cursor:not-allowed;transform:none}.secondary-btn.svelte-1br9j49.svelte-1br9j49{background:transparent;color:var(--text-primary);border:1px solid var(--border-light);font-weight:500;letter-spacing:.08em}.secondary-btn.svelte-1br9j49.svelte-1br9j49:hover:not(:disabled){border-color:var(--accent);color:var(--text-bright)}.disconnect-btn.svelte-1br9j49.svelte-1br9j49{background:transparent;color:var(--error);border:1px solid var(--error);font-weight:500}.phase.svelte-1br9j49.svelte-1br9j49{font-size:var(--font-size-xs);color:var(--text-muted);text-align:center;letter-spacing:.04em}.invite-disclosure.svelte-1br9j49.svelte-1br9j49{margin-top:8px;border-top:1px solid var(--border);padding-top:14px}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49{cursor:pointer;color:var(--text-muted);font-size:var(--font-size-sm);list-style:none;min-height:36px;display:flex;align-items:center;justify-content:center;transition:color .15s ease}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49:hover{color:var(--text-secondary)}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49::-webkit-details-marker{display:none}.invite-disclosure.svelte-1br9j49 summary.svelte-1br9j49:before{content:"+";margin-right:8px;color:var(--text-dim)}.invite-disclosure[open].svelte-1br9j49 summary.svelte-1br9j49:before{content:"−"}.invite-block.svelte-1br9j49.svelte-1br9j49{display:flex;flex-direction:column;gap:10px;margin-top:12px}.connected-line.svelte-1br9j49.svelte-1br9j49{display:flex;align-items:center;gap:8px;color:var(--text-bright)}.info-line.svelte-1br9j49.svelte-1br9j49{display:flex;justify-content:space-between;font-size:var(--font-size-sm);color:var(--text-secondary)}.info-value.svelte-1br9j49.svelte-1br9j49{color:var(--text-primary);font-family:var(--font-mono)}.sq.svelte-1br9j49.svelte-1br9j49{width:8px;height:8px;display:inline-block}.sq-green.svelte-1br9j49.svelte-1br9j49{background:var(--success)}.sq-warn.svelte-1br9j49.svelte-1br9j49{background:var(--warning)}.sr-only.svelte-1br9j49.svelte-1br9j49{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.light-theme input.svelte-1br9j49.svelte-1br9j49{background:#ffffffa6}.light-theme input.svelte-1br9j49.svelte-1br9j49:focus{background:#ffffffe6}.chat-view.svelte-19atdil.svelte-19atdil{display:flex;flex-direction:column;height:100%;flex:1;padding:12px 14px;min-height:0;background:var(--surface)}.section-head.svelte-19atdil.svelte-19atdil{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px;padding-bottom:10px;border-bottom:1px solid var(--border);flex-shrink:0}.section-head.svelte-19atdil h2.svelte-19atdil{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);margin:0}.chat-messages.svelte-19atdil.svelte-19atdil{flex:1;overflow-y:auto;min-height:0;padding:4px 0 12px;font-family:var(--font-mono);font-size:12px}.empty.svelte-19atdil.svelte-19atdil{padding:12px 2px;color:var(--muted);font-family:var(--font-sans)}.empty-label.svelte-19atdil.svelte-19atdil{color:var(--text);margin-bottom:4px;font-weight:500}.empty-desc.svelte-19atdil.svelte-19atdil{font-family:var(--font-serif);font-style:italic;font-size:13px;margin:0}.date-sep.svelte-19atdil.svelte-19atdil{text-align:left;font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);margin:14px 0 8px;font-family:var(--font-sans)}.system-line.svelte-19atdil.svelte-19atdil{font-size:12px;color:var(--muted);margin:6px 0}.msg.svelte-19atdil.svelte-19atdil{margin-bottom:8px}.msg-meta.svelte-19atdil.svelte-19atdil{font-size:11px;color:var(--muted);margin-bottom:2px;display:flex;gap:8px;align-items:baseline}.msg.self.svelte-19atdil .msg-nick.svelte-19atdil{color:var(--text)}.msg-time.svelte-19atdil.svelte-19atdil{color:var(--text-dim)}.msg-nick.svelte-19atdil.svelte-19atdil{color:var(--text);font-weight:500}.msg-body.svelte-19atdil.svelte-19atdil{color:var(--text);white-space:pre-wrap;word-break:break-word;line-height:1.45}.msg.failed.svelte-19atdil .msg-body.svelte-19atdil{color:var(--fault)}.retry-btn.svelte-19atdil.svelte-19atdil{margin-left:auto;background:transparent;border:none;color:var(--fault);cursor:pointer;font-size:11px;font-family:inherit}.composer.svelte-19atdil.svelte-19atdil{display:flex;gap:8px;padding:10px 0 0;border-top:1px solid var(--border);flex-shrink:0;align-items:flex-end}textarea.svelte-19atdil.svelte-19atdil{flex:1;resize:none;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);padding:8px 10px;font-family:var(--font-sans);font-size:14px;min-height:40px;line-height:1.4}textarea.svelte-19atdil.svelte-19atdil:disabled{opacity:.5}.settings-view.svelte-zmj6k4.svelte-zmj6k4{display:flex;flex-direction:column;height:100%;padding:12px 16px 0;min-height:0}.section-head.svelte-zmj6k4.svelte-zmj6k4{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px;flex-shrink:0}.section-head.svelte-zmj6k4 h2.svelte-zmj6k4{font-size:1.05rem;font-weight:600;letter-spacing:-.03em;color:var(--text);margin:0}.settings-content.svelte-zmj6k4.svelte-zmj6k4{flex:1;overflow-y:auto;min-height:0;display:flex;flex-direction:column;gap:8px;padding-bottom:12px}.reconnect-banner.svelte-zmj6k4.svelte-zmj6k4{background:var(--surface-2);border:1px solid var(--hairline);color:var(--text);padding:10px 12px;border-radius:var(--radius);font-size:13px}.toggle-row.svelte-zmj6k4.svelte-zmj6k4{display:flex;align-items:flex-start;gap:10px;margin:10px 0;cursor:pointer}.toggle-title.svelte-zmj6k4.svelte-zmj6k4{display:block;font-size:13px;font-weight:600;color:var(--text)}.toggle-label.svelte-zmj6k4.svelte-zmj6k4{display:block;color:var(--muted);font-size:12px;margin-top:2px}input[type=checkbox].svelte-zmj6k4.svelte-zmj6k4{width:16px;height:16px;margin-top:2px;accent-color:var(--cta)}.scale-row.svelte-zmj6k4.svelte-zmj6k4{display:flex;align-items:center;gap:12px}.scale-row.svelte-zmj6k4 input[type=range].svelte-zmj6k4{flex:1;accent-color:var(--cta)}.scale-value.svelte-zmj6k4.svelte-zmj6k4{min-width:44px;text-align:right;color:var(--muted);font-family:var(--font-mono);font-size:13px}.theme-row.svelte-zmj6k4.svelte-zmj6k4{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:12px 0 16px}.update-row.svelte-zmj6k4.svelte-zmj6k4{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0}.ver.svelte-zmj6k4.svelte-zmj6k4{color:var(--muted);font-size:12px;font-family:var(--font-mono)}.commit-plate.svelte-zmj6k4.svelte-zmj6k4{display:flex;justify-content:flex-end;gap:8px;padding:12px 0 16px;flex-shrink:0;border-top:1px solid var(--border);background:var(--bg)}.shell.svelte-8tj0mu{display:flex;flex-direction:column;height:100%;width:100%;position:relative;z-index:1;min-height:0}.connect-shell.svelte-8tj0mu{z-index:1}.layout.svelte-8tj0mu{display:flex;flex:1;min-height:0;position:relative}.fullscreen-connect.svelte-8tj0mu{display:flex;flex:1;width:100%;align-items:center;justify-content:center;min-height:0}.sidebar-wrapper.svelte-8tj0mu{position:relative;flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;overflow:hidden;min-height:0}.drag-handle.svelte-8tj0mu{position:absolute;top:0;right:-3px;width:6px;height:100%;cursor:col-resize;z-index:10;background:transparent;transition:background var(--dur-mid, .28s) var(--ease-out, ease)}.drag-handle.svelte-8tj0mu:hover,.drag-handle.active.svelte-8tj0mu,.drag-handle.svelte-8tj0mu:focus-visible{background:var(--border-hover)}.main-area.svelte-8tj0mu{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg);min-width:0;min-height:0}.workspace.svelte-8tj0mu{flex:1;display:flex;min-height:0;min-width:0}.peer-pane.svelte-8tj0mu,.settings-pane.svelte-8tj0mu{flex:1;min-width:0;min-height:0;display:flex;flex-direction:column}.peer-pane[hidden].svelte-8tj0mu,.chat-pane[hidden].svelte-8tj0mu,.settings-pane[hidden].svelte-8tj0mu{display:none!important}.chat-pane.svelte-8tj0mu{flex:0 0 42%;max-width:480px;min-width:280px;min-height:0;display:flex;flex-direction:column;border-left:1px solid var(--border)}.error-strip.svelte-8tj0mu{position:fixed;left:16px;right:16px;bottom:16px;z-index:1100;display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--surface-2, var(--bg-raised, #111));border:1px solid var(--fault, var(--error, #c41e1e));border-radius:var(--radius, 2px);color:var(--fault, var(--error, #c41e1e));font-size:var(--font-size-sm, 13px)}.error-strip-msg.svelte-8tj0mu{flex:1;min-width:0;word-break:break-word}.error-strip-dismiss.svelte-8tj0mu{flex-shrink:0;min-height:32px;padding:4px 10px;border:1px solid var(--fault, var(--error, #c41e1e));border-radius:var(--radius, 2px);background:transparent;color:var(--fault, var(--error, #c41e1e));cursor:pointer;font-family:inherit;font-size:13px;text-transform:none}.error-strip-dismiss.svelte-8tj0mu:hover{background:color-mix(in srgb,var(--fault, #c41e1e) 12%,transparent)}.notification.svelte-8tj0mu{position:fixed;top:16px;right:16px;padding:12px 16px;font-size:13px;font-weight:500;z-index:1000;background:var(--surface-2, var(--bg-raised, #111));border:1px solid var(--border, #2a2a2a);border-radius:var(--radius, 2px);color:var(--text, var(--text-bright, #f5f5f5));max-width:min(360px,calc(100vw - 2rem))}.notification.error.svelte-8tj0mu{border-color:var(--fault, var(--error, #c41e1e));color:var(--fault, var(--error, #c41e1e))}.space-bg,.space-bg:before,.space-bg:after,.space-dust,.space-dust:before{position:fixed;pointer-events:none;z-index:0}.space-bg{inset:0;background:radial-gradient(ellipse 85% 65% at 50% 36%,rgba(255,255,255,.045) 0%,transparent 55%),radial-gradient(ellipse 120% 80% at 50% 100%,rgba(255,255,255,.03) 0%,transparent 50%),radial-gradient(ellipse 100% 100% at 50% 50%,#0a0a0a,#050505 70%,#000)}.space-bg:before{content:"";position:absolute;inset:0;opacity:.8;background:radial-gradient(1.2px 1.2px at 5% 10%,rgba(255,255,255,.55) 0%,transparent 100%),radial-gradient(1px 1px at 12% 32%,rgba(255,255,255,.35) 0%,transparent 100%),radial-gradient(1px 1px at 18% 68%,rgba(255,255,255,.32) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 25% 45%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 32% 18%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 38% 78%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 45% 15%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 52% 58%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 58% 28%,rgba(255,255,255,.26) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 65% 10%,rgba(255,255,255,.5) 0%,transparent 100%),radial-gradient(1px 1px at 72% 72%,rgba(255,255,255,.35) 0%,transparent 100%),radial-gradient(1px 1px at 78% 40%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 85% 65%,rgba(255,255,255,.48) 0%,transparent 100%),radial-gradient(1px 1px at 90% 22%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(1px 1px at 94% 88%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1px 1px at 8% 88%,rgba(255,255,255,.26) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 30% 92%,rgba(255,255,255,.4) 0%,transparent 100%),radial-gradient(1px 1px at 48% 42%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(1px 1px at 62% 88%,rgba(255,255,255,.32) 0%,transparent 100%),radial-gradient(1px 1px at 88% 52%,rgba(255,255,255,.26) 0%,transparent 100%)}.space-bg:after{content:"";position:absolute;inset:0;background-image:radial-gradient(1.5px 1.5px at 8% 18%,rgba(255,255,255,.7) 0%,transparent 100%),radial-gradient(1.2px 1.2px at 48% 38%,rgba(255,255,255,.6) 0%,transparent 100%),radial-gradient(1.5px 1.5px at 88% 28%,rgba(255,255,255,.65) 0%,transparent 100%),radial-gradient(1px 1px at 22% 55%,rgba(255,255,255,.45) 0%,transparent 100%),radial-gradient(1px 1px at 70% 60%,rgba(255,255,255,.4) 0%,transparent 100%);animation:twinkle 9s ease-in-out infinite alternate;opacity:.5}@keyframes twinkle{0%{opacity:.2}45%{opacity:.5}to{opacity:.25}}.space-dust{inset:0;background:radial-gradient(ellipse 80% 70% at 50% 45%,transparent 42%,rgba(0,0,0,.62) 100%);opacity:1}.space-dust:before{content:"";position:absolute;inset:0;opacity:.32;background:radial-gradient(.5px .5px at 20% 30%,rgba(255,255,255,.4) 0%,transparent 100%),radial-gradient(.5px .5px at 40% 60%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(.5px .5px at 60% 25%,rgba(255,255,255,.28) 0%,transparent 100%),radial-gradient(.5px .5px at 75% 70%,rgba(255,255,255,.3) 0%,transparent 100%),radial-gradient(.5px .5px at 88% 40%,rgba(255,255,255,.3) 0%,transparent 100%)}.light-theme .space-bg,.light-theme .space-bg:before,.light-theme .space-bg:after,.light-theme .space-dust,.light-theme .space-dust:before{display:none!important}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/bricolage-latin-400-A6LyuA6R.woff2) format("woff2")}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/bricolage-latin-500-DEDBoLFO.woff2) format("woff2")}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:600;font-display:swap;src:url(/assets/bricolage-latin-600-nxTgbNFE.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/ibm-plex-mono-latin-400-Dm_PoFIZ.woff2) format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/assets/ibm-plex-mono-latin-500-C_OblDzq.woff2) format("woff2")}@font-face{font-family:"IBM Plex Serif";font-style:italic;font-weight:400;font-display:swap;src:url(/assets/ibm-plex-serif-latin-400-italic-yImJBWyJ.woff2) format("woff2")}html[data-app=connected]{color-scheme:dark;--bg: #0a0a0a;--surface: #141414;--surface-2: #1a1a1a;--border: #2a2a2a;--hairline: #3a3a3a;--muted: #8a8a8a;--text: #f5f5f5;--cta: #ffffff;--cta-fill: #ffffff;--cta-ink: #0a0a0a;--caution: #a3a3a3;--danger: #f5f5f5;--live: #2fbf62;--fault: #e23d3d;--radius: 2px;--graticule: #262626;--font-sans: "Bricolage Grotesque", "Segoe UI", sans-serif;--font-serif: "IBM Plex Serif", Georgia, serif;--font-mono: "IBM Plex Mono", Consolas, monospace;--switch-track: #1a1a1a;--switch-thumb: #f5f5f5;--switch-icon-on: #0a0a0a;--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-inout: cubic-bezier(.4, 0, .2, 1);--dur-fast: .15s;--dur-mid: .28s;--dur-slow: .42s;--bg-deep: var(--bg);--bg-primary: var(--bg);--bg-surface: var(--surface);--bg-raised: var(--surface-2);--bg-hover: #222;--bg-active: #262626;--border-deep: var(--border);--border-light: var(--hairline);--border-hover: var(--hairline);--text-bright: var(--text);--text-primary: var(--text);--text-secondary: var(--muted);--text-muted: var(--muted);--text-dim: #5c5c5c;--accent: var(--cta-fill);--accent-hover: #e8e8e8;--accent-ink: var(--cta-ink);--success: var(--live);--warning: var(--caution);--error: var(--fault);--focus-ring: var(--cta);--font-size: 14px;--font-size-sm: 13px;--font-size-xs: 12px;--line-height: 1.5}html[data-app=connected][data-theme=light]{color-scheme:light;--bg: #ffffff;--surface: #f7f7f7;--surface-2: #eeeeee;--border: #d4d4d4;--hairline: #b8b8b8;--muted: #5c5c5c;--text: #111111;--cta: #111111;--cta-fill: #111111;--cta-ink: #ffffff;--caution: #5c5c5c;--danger: #111111;--live: #1a8f45;--fault: #c41e1e;--switch-track: #e6e6e6;--switch-thumb: #111111;--switch-icon-on: #ffffff;--bg-hover: #ececec;--bg-active: #e4e4e4;--text-dim: #9a9a9a;--accent-hover: #2a2a2a;--error: var(--fault);--graticule: #d8d8d8}@media (prefers-reduced-motion: reduce){html[data-app=connected]{--dur-fast: .01ms;--dur-mid: .01ms;--dur-slow: .01ms}}html[data-app=connected],html[data-app=connected] body,html[data-app=connected] #app{font-family:var(--font-sans);font-size:var(--font-size);color:var(--text);background:var(--bg)}html[data-app=connected] input,html[data-app=connected] textarea,html[data-app=connected] button,html[data-app=connected] select{font-family:inherit;font-size:inherit}html[data-app=connected] ::selection{background:color-mix(in srgb,var(--text) 18%,transparent);color:var(--text)}html[data-app=connected] :focus-visible{outline:2px solid var(--text);outline-offset:2px}html[data-app=connected] .dot{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--text-dim)}html[data-app=connected] .dot-live{background:var(--live)}html[data-app=connected] .dot-fault{background:var(--fault)}html[data-app=connected] .dot-idle{background:var(--text-dim)}html[data-app=connected] .btn{border:1px solid var(--border);background:transparent;color:var(--text);padding:8px 14px;min-height:36px;border-radius:var(--radius);cursor:pointer;font-weight:500;font-size:13px;letter-spacing:0;text-transform:none;display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-sans);transition:background var(--dur-mid) var(--ease-out),border-color var(--dur-mid) var(--ease-out),color var(--dur-mid) var(--ease-out),opacity var(--dur-mid) var(--ease-out)}html[data-app=connected] .btn:hover:not(:disabled){border-color:var(--hairline);background:var(--surface-2)}html[data-app=connected] .btn:disabled{opacity:.45;cursor:not-allowed}html[data-app=connected] .btn-ghost{border-color:var(--border);color:var(--muted)}html[data-app=connected] .btn-ghost:hover:not(:disabled){color:var(--text)}html[data-app=connected] .btn-quiet{border-color:transparent;color:var(--muted)}html[data-app=connected] .btn-quiet:hover:not(:disabled){border-color:var(--border);color:var(--text);background:transparent}html[data-app=connected] .btn-cta,html[data-app=connected] .btn.primary,html[data-app=connected] .btn-save{background:var(--cta-fill);color:var(--cta-ink);border-color:var(--cta-fill);font-weight:600}html[data-app=connected] .btn-cta:hover:not(:disabled),html[data-app=connected] .btn.primary:hover:not(:disabled),html[data-app=connected] .btn-save:hover:not(:disabled){background:color-mix(in srgb,var(--cta-fill) 88%,var(--cta-ink))}html[data-app=connected] .btn.danger{color:var(--fault);border-color:color-mix(in srgb,var(--fault) 45%,var(--border))}html[data-app=connected] .card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}html[data-app=connected] .card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;padding:10px 14px;background:var(--surface-2)}html[data-app=connected] .card-disclosure{flex:1;min-width:0;display:flex;align-items:center;gap:10px;background:transparent;border:none;padding:0;cursor:pointer;text-align:left;color:inherit;font:inherit;min-height:28px}html[data-app=connected] .card-title{font-size:13px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--text)}html[data-app=connected] .card-body{display:grid;grid-template-rows:1fr;border-top:1px solid var(--border);transition:grid-template-rows var(--dur-slow) var(--ease-out),border-color var(--dur-mid) var(--ease-out)}html[data-app=connected] .card-body.collapsed{grid-template-rows:0fr;border-top-color:transparent}html[data-app=connected] .card-body-inner{overflow:hidden;min-height:0}html[data-app=connected] .card-body-pad{padding:14px 16px 16px}html[data-app=connected] .collapse-chevron{color:var(--muted);width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;transition:transform var(--dur-mid) var(--ease-out);flex-shrink:0}html[data-app=connected] .collapse-chevron svg{width:12px;height:12px;display:block}html[data-app=connected] .collapse-chevron.collapsed{transform:rotate(-90deg)}html[data-app=connected] .field{margin-bottom:12px}html[data-app=connected] .field label,html[data-app=connected] .setting-label{display:block;font-size:12px;font-weight:600;letter-spacing:0;text-transform:none;color:var(--muted);margin-bottom:4px}html[data-app=connected] .field input,html[data-app=connected] .field select,html[data-app=connected] .field textarea,html[data-app=connected] .settings-view input[type=text],html[data-app=connected] .settings-view input[type=password],html[data-app=connected] .settings-view input[type=number],html[data-app=connected] .settings-view select,html[data-app=connected] .modal input{width:100%;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);color:var(--text);padding:8px 10px;min-height:36px;font-size:13px;font-family:var(--font-mono)}html[data-app=connected] .hint{color:var(--muted);font-size:13px;margin:0 0 12px;max-width:65ch;line-height:1.45}html[data-app=connected] .theme-switch{--ts-thumb: 28px;--ts-inset: 3px;--ts-travel: 36px;position:relative;width:calc(var(--ts-thumb) + var(--ts-inset) * 2 + var(--ts-travel));height:calc(var(--ts-thumb) + var(--ts-inset) * 2);padding:0;border:1px solid var(--border);border-radius:999px;background:transparent;cursor:pointer;flex-shrink:0;box-sizing:border-box;min-width:62px;min-height:34px}html[data-app=connected] .theme-switch:hover{border-color:var(--hairline)}html[data-app=connected] .theme-switch-track{position:absolute;inset:0;border-radius:inherit;overflow:hidden}html[data-app=connected] .theme-switch-thumb{position:absolute;top:50%;left:var(--ts-inset);width:var(--ts-thumb);height:var(--ts-thumb);border-radius:50%;background:var(--switch-thumb);border:1px solid var(--border);transform:translate3d(0,-50%,0);z-index:2;pointer-events:none}html[data-app=connected] .theme-switch.is-dark .theme-switch-thumb{transform:translate3d(var(--ts-travel),-50%,0)}html[data-app=connected] .theme-switch-icon{position:absolute;top:50%;width:var(--ts-thumb);height:var(--ts-thumb);display:flex;align-items:center;justify-content:center;color:var(--muted);opacity:.4;transform:translateY(-50%) scale(.92);z-index:3;pointer-events:none}html[data-app=connected] .theme-switch-icon svg{display:block;width:16px;height:16px}html[data-app=connected] .theme-switch-sun{left:var(--ts-inset)}html[data-app=connected] .theme-switch-moon{left:calc(var(--ts-inset) + var(--ts-travel))}html[data-app=connected] .theme-switch:not(.is-dark) .theme-switch-sun,html[data-app=connected] .theme-switch.is-dark .theme-switch-moon{color:var(--switch-icon-on);opacity:1;transform:translateY(-50%) scale(1)}html[data-app=connected] .label-track{display:block;font-size:10px;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);line-height:1.2}html[data-app=connected] .led{width:7px;height:7px;border-radius:50%;flex-shrink:0;background:var(--text-dim);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 18%,transparent)}html[data-app=connected] .led.on.live{background:var(--live)}html[data-app=connected] .led.on.fault{background:var(--fault)}html[data-app=connected] .led.on.idle{background:var(--text)}html[data-app=connected] .bezel{border:1px solid var(--border);background:transparent;color:var(--text);min-height:32px;padding:4px 10px;border-radius:var(--radius);font-size:11px;font-weight:500;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;font-family:var(--font-sans)}html[data-app=connected] .bezel:hover:not(:disabled){border-color:var(--hairline);background:var(--surface-2)}html[data-app=connected] .bezel.active{background:var(--text);color:var(--bg);border-color:var(--text)}@font-face{font-family:Bungee;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/bungee-latin-Dfnurram.woff2) format("woff2")}:root{--bg-deep: #000000;--bg-primary: #050505;--bg-surface: #0a0a0a;--bg-raised: #111111;--bg-hover: #181818;--bg-active: #1f1f1f;--border-deep: #111111;--border: #1c1c1c;--border-light: #2a2a2a;--border-hover: #3d3d3d;--text-bright: #f5f5f5;--text-primary: #c8c8c8;--text-secondary: #8a8a8a;--text-muted: #5c5c5c;--text-dim: #3a3a3a;--accent: #f0f0f0;--accent-hover: #ffffff;--accent-ink: #000000;--success: #9a9a9a;--warning: #c8c8c8;--error: #c45c5c;--focus-ring: #f0f0f0;--sidebar-width: 220px;--font-display: "Bungee", ui-sans-serif, system-ui, sans-serif;--font-mono: ui-monospace, "Cascadia Code", "SF Mono", Consolas, "Liberation Mono", monospace;--font-size: 12px;--font-size-sm: 11px;--font-size-xs: 10px;--line-height: 1.6}.light-theme{--bg-deep: #f5f5f5;--bg-primary: #f0f0f0;--bg-surface: #e8e8e8;--bg-raised: #e0e0e0;--bg-hover: #d8d8d8;--bg-active: #cfcfcf;--border-deep: #d0d0d0;--border: #cccccc;--border-light: #bbbbbb;--border-hover: #999999;--text-bright: #111111;--text-primary: #222222;--text-secondary: #555555;--text-muted: #888888;--text-dim: #aaaaaa;--accent: #000000;--accent-hover: #222222;--accent-ink: #f5f5f5;--success: #555555;--warning: #333333;--error: #b33a3a;--focus-ring: #000000}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html,body,#app{height:100%;width:100%;overflow:hidden;color:var(--text-primary);font-family:var(--font-mono);font-size:var(--font-size);line-height:var(--line-height);-webkit-font-smoothing:antialiased;user-select:auto}html,body{background:var(--bg-deep)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border)}::-webkit-scrollbar-thumb:hover{background:var(--border-hover)}::-webkit-scrollbar-corner{background:transparent}::selection{background:#ffffff1a;color:var(--text-bright)}input,textarea,button,select{font-family:var(--font-mono);font-size:var(--font-size)}input:focus-visible,textarea:focus-visible,select:focus-visible,button:focus-visible,[tabindex]:focus-visible,.network-item:focus-visible,.clickable:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}button{cursor:pointer;border:none;background:none;color:inherit}a{color:var(--text-bright);text-decoration:none}a:hover{text-decoration:underline}.btn{padding:8px 12px;min-height:36px;border:1px solid var(--border);background:var(--bg-raised);color:var(--text-primary);cursor:pointer;font-size:var(--font-size-sm);text-align:center;font-family:var(--font-mono);transition:background .1s ease,opacity .1s ease}.btn:hover:not(:disabled){background:var(--bg-hover)}.btn.primary,.btn-save{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:500}.btn.primary:hover,.btn-save:hover{background:var(--accent-hover)}.btn:disabled{opacity:.4;cursor:not-allowed}.btn.danger{color:var(--error);border-color:var(--error)}.empty-state{padding:16px;text-align:center;color:var(--text-muted);font-size:var(--font-size-sm)} diff --git a/client/frontend/dist/assets/index-D0bYtgrH.js b/client/frontend/dist/assets/index-D0bYtgrH.js deleted file mode 100644 index d92a806..0000000 --- a/client/frontend/dist/assets/index-D0bYtgrH.js +++ /dev/null @@ -1 +0,0 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))i(o);new MutationObserver(o=>{for(const r of o)if(r.type==="childList")for(const c of r.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&i(c)}).observe(document,{childList:!0,subtree:!0});function n(o){const r={};return o.integrity&&(r.integrity=o.integrity),o.referrerPolicy&&(r.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?r.credentials="include":o.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function i(o){if(o.ep)return;o.ep=!0;const r=n(o);fetch(o.href,r)}})();function Ee(){}function so(e){return e()}function gi(){return Object.create(null)}function Ne(e){e.forEach(so)}function ws(e){return typeof e=="function"}function ot(e,t){return e!=e?t==t:e!==t||e&&typeof e=="object"||typeof e=="function"}function co(e){return Object.keys(e).length===0}function ks(e,...t){if(e==null){for(const i of t)i(void 0);return Ee}const n=e.subscribe(...t);return n.unsubscribe?()=>n.unsubscribe():n}function nn(e){let t;return ks(e,n=>t=n)(),t}function _e(e,t,n){e.$$.on_destroy.push(ks(t,n))}function gt(e,t,n){return e.set(n),t}function l(e,t){e.appendChild(t)}function H(e,t,n){e.insertBefore(t,n||null)}function G(e){e.parentNode&&e.parentNode.removeChild(e)}function a(e){return document.createElement(e)}function jl(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}function y(e){return document.createTextNode(e)}function m(){return y(" ")}function Al(){return y("")}function F(e,t,n,i){return e.addEventListener(t,n,i),()=>e.removeEventListener(t,n,i)}function bt(e){return function(t){return t.stopPropagation(),e.call(this,t)}}function s(e,t,n){n==null?e.removeAttribute(t):e.getAttribute(t)!==n&&e.setAttribute(t,n)}function io(e){return e===""?null:+e}function uo(e){return Array.from(e.childNodes)}function j(e,t){t=""+t,e.data!==t&&(e.data=t)}function fe(e,t){e.value=t??""}function bi(e,t,n,i){n==null?e.style.removeProperty(t):e.style.setProperty(t,n,"")}function Sl(e,t,n){for(let i=0;ii.call(this,t))}const tn=[],sn=[];let ln=[];const wi=[],po=Promise.resolve();let _s=!1;function mo(){_s||(_s=!0,po.then(ao))}function El(e){ln.push(e)}const fs=new Set;let xt=0;function ao(){if(xt!==0)return;const e=fn;do{try{for(;xte.indexOf(i)===-1?t.push(i):n.push(i)),n.forEach(i=>i()),ln=t}const Cl=new Set;let Et;function go(){Et={r:0,c:[],p:Et}}function bo(){Et.r||Ne(Et.c),Et=Et.p}function Oe(e,t){e&&e.i&&(Cl.delete(e),e.i(t))}function Ge(e,t,n,i){if(e&&e.o){if(Cl.has(e))return;Cl.add(e),Et.c.push(()=>{Cl.delete(e),i&&(n&&e.d(1),i())}),e.o(t)}else i&&i()}function wt(e){return e?.length!==void 0?e:Array.from(e)}function Nl(e,t){e.d(1),t.delete(e.key)}function zl(e,t,n,i,o,r,c,u,d,_,v,p){let g=e.length,h=r.length,C=g;const b={};for(;C--;)b[e[C].key]=C;const k=[],S=new Map,P=new Map,R=[];for(C=h;C--;){const M=p(o,r,C),J=n(M);let V=c.get(J);V?R.push(()=>V.p(M,t)):(V=_(J,M),V.c()),S.set(J,k[C]=V),J in b&&P.set(J,Math.abs(C-b[J]))}const w=new Set,L=new Set;function D(M){Oe(M,1),M.m(u,v),c.set(M.key,M),v=M.first,h--}for(;g&&h;){const M=k[h-1],J=e[g-1],V=M.key,f=J.key;M===J?(v=M.first,g--,h--):S.has(f)?!c.has(V)||w.has(V)?D(M):L.has(f)?g--:P.get(V)>P.get(f)?(L.add(V),D(M)):(w.add(f),g--):(d(J,c),g--)}for(;g--;){const M=e[g];S.has(M.key)||d(M,c)}for(;h;)D(k[h-1]);return Ne(R),k}function xe(e){e&&e.c()}function Ve(e,t,n){const{fragment:i,after_update:o}=e.$$;i&&i.m(t,n),El(()=>{const r=e.$$.on_mount.map(so).filter(ws);e.$$.on_destroy?e.$$.on_destroy.push(...r):Ne(r),e.$$.on_mount=[]}),o.forEach(El)}function Ye(e,t){const n=e.$$;n.fragment!==null&&(ho(n.after_update),Ne(n.on_destroy),n.fragment&&n.fragment.d(t),n.on_destroy=n.fragment=null,n.ctx=[])}function wo(e,t){e.$$.dirty[0]===-1&&(tn.push(e),mo(),e.$$.dirty.fill(0)),e.$$.dirty[t/31|0]|=1<{const C=h.length?h[0]:g;return _.ctx&&o(_.ctx[p],_.ctx[p]=C)&&(!_.skip_bound&&_.bound[p]&&_.bound[p](C),v&&wo(e,p)),g}):[],_.update(),v=!0,Ne(_.before_update),_.fragment=i?i(_.ctx):!1,t.target){if(t.hydrate){const p=uo(t.target);_.fragment&&_.fragment.l(p),p.forEach(G)}else _.fragment&&_.fragment.c();t.intro&&Oe(e.$$.fragment),Ve(e,t.target,t.anchor),ao()}dn(d)}class pt{$$=void 0;$$set=void 0;$destroy(){Ye(this,1),this.$destroy=Ee}$on(t,n){if(!ws(n))return Ee;const i=this.$$.callbacks[t]||(this.$$.callbacks[t]=[]);return i.push(n),()=>{const o=i.indexOf(n);o!==-1&&i.splice(o,1)}}$set(t){this.$$set&&!co(t)&&(this.$$.skip_bound=!0,this.$$set(t),this.$$.skip_bound=!1)}}const ko="4",en=[];function yo(e,t){return{subscribe:Xe(e,t).subscribe}}function Xe(e,t=Ee){let n;const i=new Set;function o(u){if(ot(e,u)&&(e=u,n)){const d=!en.length;for(const _ of i)_[1](),en.push(_,e);if(d){for(let _=0;_{i.delete(_),i.size===0&&n&&(n(),n=null)}}return{set:o,update:r,subscribe:c}}function jo(e,t,n){const i=!Array.isArray(e),o=i?[e]:e;if(!o.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const r=t.length<2;return yo(n,(c,u)=>{let d=!1;const _=[];let v=0,p=Ee;const g=()=>{if(v)return;p();const C=t(i?_[0]:_,c,u);r?c(C):p=ws(C)?C:Ee},h=o.map((C,b)=>ks(C,k=>{_[b]=k,v&=~(1<{v|=1<[...i,{id:n,msg:e,type:t}]),setTimeout(()=>{ms.update(i=>i.filter(o=>o.id!==n))},4e3),t==="error"&&Eo(e)}function Eo(e){if(!e){Pl.set(null);return}Pl.set({id:++Ao,msg:String(e)})}function _n(){Pl.set(null)}function vs(e,t){return e&&e.id?"peer:"+e.id:"room:"+(t||"network")}function pn(){return vs(nn(Ll),nn(We).room)}function Cs(e,t,n,i=!1,o="sent",r=!1,c=!1){const u=++Co;let d;r?d=vs(null,nn(We).room):i?d=pn():c?d="peer:"+e:d=vs(null,nn(We).room),js.update(v=>{const p=v[d]?[...v[d]]:[];return p.push({id:i&&e.startsWith("local_")?e:u,fromID:e,nickname:t,message:n,timestamp:Date.now(),isSelf:i,status:o,system:r}),{...v,[d]:p.length>ki?p.slice(-ki):p}});const _=pn();!i&&!(nn(Pt)&&d===_)&&Ss.update(v=>({...v,[d]:(v[d]||0)+1}))}function Po(e){Cs("system","",e,!1,"sent",!0)}function hs(e){Ss.update(t=>{const n={...t};return delete n[e],n})}function cn(e,t){const n=pn();js.update(i=>{const o=i[n];return o?{...i,[n]:o.map(r=>r.id===e?{...r,status:t}:r)}:i})}const Lo={subscribe(e){return js.subscribe(t=>{e(t[pn()]||[])})}};typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(ko);const gs={brand:"Entangled",tagline:"Private LAN for friends — anywhere.",networks:"Networks",network_count:"{n} network(s)",create_network:"Create Network",join_network:"Join Network",connecting:"Connecting...",peer_count:"{n} peer(s)",offline_click:"Offline — click to connect",saved:"Saved",no_networks:"No saved networks",no_networks_desc:"Create or join a network to get started",settings:"Settings",network_name:"Network name",password_opt:"Password (optional)",cancel:"Cancel",create:"Create",join:"Join",leave:"Leave network",remove:"Remove saved",delete_room:"Delete network",more_actions:"More actions",copy_invite:"Copy invite",paste_invite:"Have an invite?",invite_copied:"Invite copied",invite_placeholder:"server|room|password",server_addr:"Server Address",nickname:"Nickname",server_token:"Server token",server_token_desc:"optional shared secret (ENTANGLED_TOKEN)",connect:"Connect",disconnect:"Disconnect",connected:"Connected",server:"Server",virtual_ip:"Virtual IP",na:"N/A",reconnecting:"Reconnecting...",disconnected:"Disconnected",phase_dialing:"Dialing server…",phase_auth:"Authenticating…",phase_ready:"Ready",phase_error:"Error",room_chat:"Room Chat",chat:"Chat",close_chat:"Close",channels:"Channels",col_ch:"Ch",col_nickname:"Nickname",col_ip:"Virtual IP",col_ping:"Ping",ping_peer:"Ping",ping_sent:"Pinging {name}…",error_ping:"Ping failed: {err}",col_path:"Path",col_status:"Status",status_online:"Online",status_offline:"Offline",path_p2p:"Direct",path_relay:"Relay",path_ws:"Fallback",path_unknown:"—",path_p2p_tip:"Peer-to-peer direct connection",path_relay_tip:"Traffic routed through the server relay",path_ws_tip:"WebSocket fallback path",you:"You",me:"me",no_peers:"No peers connected",no_peers_desc:"Create or join a network, then wait for friends",peers_list:"Peers",network:"Network",chat_with:"Chat with {name}",room_chat_title:"Room Chat — {room}",back:"Back",no_messages:"No messages yet",no_messages_desc:"Send a message to start the conversation",type_message:"Type a message...",send:"Send",send_disabled_no_room:"Join a network to chat",msg_truncated:"Message truncated to 1000 characters",retry:"Retry",today:"Today",yesterday:"Yesterday",you_self:"You",status_connected:"Connected",status_disconnected:"Disconnected",status_reconnecting:"Reconnecting…",status_relay_degraded:"Some peers on relay",status_direct:"Direct",status_server:"Server: {s}",status_ip:"IP: {ip}",status_network:"Network: {room}",status_peers:"Peers: {n}",version:"Entangled v{v}",settings_title:"Settings",section_connection:"Connection",section_network:"Advanced network",section_system:"System",section_appearance:"Appearance",advanced_warn:"Only change these if you know what they do.",reconnect_apply:"Reconnect to apply",auto_connect:"Auto Connect",auto_connect_desc:"connect to last server on startup",auto_join:"Auto Join Last Room",auto_join_desc:"join last open room after connect (password rooms need a manual join after restart)",connection_mode:"Connection",connection_direct:"Direct (P2P)",connection_relay:"Relay (server)",connection_mode_desc:"Direct prefers peer-to-peer and uses relay only when needed. Relay forces all traffic through the server.",mtu:"MTU",mtu_desc:"Packet size. Wrong values can break games or cause lag.",dns_server:"DNS Server",dns_desc:"Optional DNS for the virtual network. Leave blank for system default.",socks5:"SOCKS5 Proxy",socks5_placeholder:"e.g. 127.0.0.1:10808",socks5_desc:"Proxies signaling (WebSocket) only — not peer/relay UDP. Reconnect to apply.",stun_server:"STUN Server",stun_desc:"Helps find your public address for direct links. Reconnect to apply.",start_windows:"Start with Windows",updates:"Updates",check_updates:"Check for updates",apply_update:"Update",update_checking:"Checking for updates…",update_latest:"You are up to date.",update_available:"Update available: v{v}",update_downloading:"Downloading update… the app will restart.",update_failed:"Update failed",confirm_update:"Download and install the update? The app will restart.",error_update_check:"Update check failed: ",error_update:"Update failed: ",notif_updating:"Installing update…",ui_scale:"UI Scale",ui_scale_desc:"Scales the whole interface. Use with window resize or F11 fullscreen.",theme:"Theme",theme_dark:"Dark",theme_light:"Light",language:"Language",save:"Save",reset:"Reset to defaults",language_en:"English",language_ru:"Russian",language_zh:"Chinese",copied:"Copied",dismiss_error:"Dismiss",field_required:"Required",notif_created:"Network created: {name}",notif_joined:"Joined network: {name}",notif_left:"Left network",notif_removed:"Removed: {name}",notif_deleted:"Network deleted: {name}",notif_connected:"Connected to {addr}",notif_disconnected:"Disconnected",notif_settings_saved:"Settings saved",notif_reconnect_required:"Reconnect to apply proxy / STUN / token changes",notif_auto_join_skipped:'Auto-join skipped for "{name}" — enter the password to join',notif_need_config:"Set server & nickname in Connect page first",notif_room_deleted:"Network was deleted by owner",invite_no_password:"Invite copied without password (not stored). Add it before sharing.",error_create:"Failed to create network: {err}",error_join:"Failed to join: {err}",error_leave:"Failed to leave: {err}",error_remove:"Failed to remove: {err}",error_connect:"Connection failed: {err}",error_disconnect:"Error: {err}",error_send:"Failed to send: {err}",error_not_connected:"Not connected — cannot send message",error_invalid_invite:"Invalid invite: server and room are required",error_save:"Failed to save settings: {err}",confirm_disconnect:"Disconnect from server?",confirm_leave:"Leave the current network? It stays in your saved list.",confirm_leave_remove:"Leave and remove this network from your saved list?",confirm_remove:'Remove "{name}" from saved networks? (does not delete the network for others)',confirm_delete:'Permanently delete network "{name}" for everyone?',confirm_reset:"Reset all settings to defaults?"},Do={brand:"Entangled",tagline:"Частная LAN для друзей — где угодно.",networks:"Сети",network_count:"{n} сет(ь/и/ей)",create_network:"Создать сеть",join_network:"Подключиться",connecting:"Подключение...",peer_count:"{n} участник(ов)",offline_click:"Не в сети — нажмите для подключения",saved:"Сохранено",no_networks:"Нет сохранённых сетей",no_networks_desc:"Создайте или войдите в сеть, чтобы начать",settings:"Настройки",network_name:"Название сети",password_opt:"Пароль (опционально)",cancel:"Отмена",create:"Создать",join:"Войти",leave:"Покинуть сеть",remove:"Убрать из списка",delete_room:"Удалить сеть",more_actions:"Ещё действия",copy_invite:"Копировать инвайт",paste_invite:"Есть инвайт?",invite_copied:"Инвайт скопирован",invite_placeholder:"сервер|комната|пароль",server_addr:"Адрес сервера",nickname:"Псевдоним",server_token:"Токен сервера",server_token_desc:"опциональный секрет (ENTANGLED_TOKEN)",connect:"Подключиться",disconnect:"Отключиться",connected:"Подключено",server:"Сервер",virtual_ip:"Виртуальный IP",na:"Н/Д",reconnecting:"Переподключение...",disconnected:"Отключено",phase_dialing:"Подключение к серверу…",phase_auth:"Аутентификация…",phase_ready:"Готово",phase_error:"Ошибка",room_chat:"Чат комнаты",chat:"Чат",close_chat:"Закрыть",channels:"Каналы",col_ch:"Кн",col_nickname:"Псевдоним",col_ip:"Виртуальный IP",col_ping:"Пинг",ping_peer:"Пинг",ping_sent:"Пинг {name}…",error_ping:"Пинг не удался: {err}",col_path:"Путь",col_status:"Статус",status_online:"В сети",status_offline:"Не в сети",path_p2p:"Прямой",path_relay:"Релей",path_ws:"Запасной",path_unknown:"—",path_p2p_tip:"Прямое соединение peer-to-peer",path_relay_tip:"Трафик через серверный релей",path_ws_tip:"Запасной путь через WebSocket",you:"Вы",me:"я",no_peers:"Нет подключённых участников",no_peers_desc:"Создайте или войдите в сеть и дождитесь друзей",peers_list:"Участники",network:"Сеть",chat_with:"Чат с {name}",room_chat_title:"Чат комнаты — {room}",back:"Назад",no_messages:"Сообщений пока нет",no_messages_desc:"Отправьте сообщение, чтобы начать разговор",type_message:"Введите сообщение...",send:"Отправить",send_disabled_no_room:"Войдите в сеть, чтобы писать",msg_truncated:"Сообщение обрезано до 1000 символов",retry:"Повторить",today:"Сегодня",yesterday:"Вчера",you_self:"Вы",status_connected:"Подключено",status_disconnected:"Отключено",status_reconnecting:"Переподключение…",status_relay_degraded:"Часть пиров через релей",status_direct:"Прямое",status_server:"Сервер: {s}",status_ip:"IP: {ip}",status_network:"Сеть: {room}",status_peers:"Участники: {n}",version:"Entangled v{v}",settings_title:"Настройки",section_connection:"Подключение",section_network:"Доп. сеть",section_system:"Система",section_appearance:"Внешний вид",advanced_warn:"Меняйте только если понимаете, что делаете.",reconnect_apply:"Переподключитесь, чтобы применить",auto_connect:"Автоподключение",auto_connect_desc:"подключаться к последнему серверу при запуске",auto_join:"Автовход в комнату",auto_join_desc:"входить в последнюю открытую комнату (с паролем — вручную после перезапуска)",connection_mode:"Соединение",connection_direct:"Прямое (P2P)",connection_relay:"Релей (сервер)",connection_mode_desc:"Прямое предпочитает P2P и использует релей только при необходимости. Релей гонит весь трафик через сервер.",mtu:"MTU",mtu_desc:"Размер пакета. Неверное значение ломает игры или даёт лаги.",dns_server:"DNS-сервер",dns_desc:"Опциональный DNS виртуальной сети. Пусто — системный по умолчанию.",socks5:"SOCKS5-прокси",socks5_placeholder:"напр. 127.0.0.1:10808",socks5_desc:"Только сигнальный WebSocket, не UDP пиров/релея. Переподключитесь, чтобы применить.",stun_server:"STUN-сервер",stun_desc:"Помогает найти публичный адрес. Переподключитесь, чтобы применить.",start_windows:"Запуск с Windows",updates:"Обновления",check_updates:"Проверить обновления",apply_update:"Обновить",update_checking:"Проверка обновлений…",update_latest:"У вас актуальная версия.",update_available:"Доступно обновление: v{v}",update_downloading:"Загрузка обновления… приложение перезапустится.",update_failed:"Ошибка обновления",confirm_update:"Скачать и установить обновление? Приложение перезапустится.",error_update_check:"Не удалось проверить обновления: ",error_update:"Не удалось обновить: ",notif_updating:"Установка обновления…",ui_scale:"Масштаб UI",ui_scale_desc:"Масштабирует весь интерфейс. Вместе с изменением размера окна или F11.",theme:"Тема",theme_dark:"Тёмная",theme_light:"Светлая",language:"Язык",save:"Сохранить",reset:"Сбросить",language_en:"Английский",language_ru:"Русский",language_zh:"Китайский",copied:"Скопировано",dismiss_error:"Закрыть",field_required:"Обязательно",notif_created:"Сеть создана: {name}",notif_joined:"Подключились к сети: {name}",notif_left:"Покинули сеть",notif_removed:"Удалено: {name}",notif_deleted:"Сеть удалена: {name}",notif_connected:"Подключились к {addr}",notif_disconnected:"Отключились",notif_settings_saved:"Настройки сохранены",notif_reconnect_required:"Переподключитесь, чтобы применить прокси / STUN / токен",notif_auto_join_skipped:"Автовход пропущен для «{name}» — введите пароль вручную",notif_need_config:"Укажите сервер и псевдоним на странице подключения",notif_room_deleted:"Сеть удалена владельцем",invite_no_password:"Инвайт скопирован без пароля (он не хранится). Добавьте перед отправкой.",error_create:"Не удалось создать сеть: {err}",error_join:"Не удалось подключиться: {err}",error_leave:"Не удалось покинуть: {err}",error_remove:"Не удалось удалить: {err}",error_connect:"Ошибка подключения: {err}",error_disconnect:"Ошибка: {err}",error_send:"Не удалось отправить: {err}",error_not_connected:"Нет подключения — невозможно отправить сообщение",error_invalid_invite:"Неверный инвайт: нужны сервер и комната",error_save:"Не удалось сохранить настройки: {err}",confirm_disconnect:"Отключиться от сервера?",confirm_leave:"Покинуть текущую сеть? Она останется в сохранённых.",confirm_leave_remove:"Покинуть и убрать сеть из сохранённых?",confirm_remove:'Убрать "{name}" из сохранённых? (сеть для других не удалится)',confirm_delete:'Навсегда удалить сеть "{name}" для всех?',confirm_reset:"Сбросить все настройки?"},No={brand:"Entangled",tagline:"朋友的私人局域网 — 随时随地。",networks:"网络",network_count:"{n} 个网络",create_network:"创建网络",join_network:"加入网络",connecting:"连接中...",peer_count:"{n} 个节点",offline_click:"离线 — 点击连接",saved:"已保存",no_networks:"暂无保存的网络",no_networks_desc:"创建或加入网络以开始",settings:"设置",network_name:"网络名称",password_opt:"密码(可选)",cancel:"取消",create:"创建",join:"加入",leave:"离开网络",remove:"移除已保存",delete_room:"删除网络",more_actions:"更多操作",copy_invite:"复制邀请",paste_invite:"有邀请码?",invite_copied:"邀请已复制",invite_placeholder:"服务器|房间|密码",server_addr:"服务器地址",nickname:"昵称",server_token:"服务器令牌",server_token_desc:"可选共享密钥(ENTANGLED_TOKEN)",connect:"连接",disconnect:"断开",connected:"已连接",server:"服务器",virtual_ip:"虚拟 IP",na:"无",reconnecting:"重新连接...",disconnected:"已断开",phase_dialing:"正在连接服务器…",phase_auth:"正在验证…",phase_ready:"就绪",phase_error:"错误",room_chat:"房间聊天",chat:"聊天",close_chat:"关闭",channels:"通道",col_ch:"通",col_nickname:"昵称",col_ip:"虚拟 IP",col_ping:"延迟",ping_peer:"测速",ping_sent:"正在测速 {name}…",error_ping:"测速失败: {err}",col_path:"路径",col_status:"状态",status_online:"在线",status_offline:"离线",path_p2p:"直连",path_relay:"中继",path_ws:"备用",path_unknown:"—",path_p2p_tip:"点对点直连",path_relay_tip:"经服务器中继转发",path_ws_tip:"WebSocket 备用路径",you:"你",me:"我",no_peers:"暂无连接的节点",no_peers_desc:"创建或加入网络,然后等待好友",peers_list:"节点",network:"网络",chat_with:"与 {name} 聊天",room_chat_title:"房间聊天 — {room}",back:"返回",no_messages:"暂无消息",no_messages_desc:"发送一条消息开始对话",type_message:"输入消息...",send:"发送",send_disabled_no_room:"加入网络后才能聊天",msg_truncated:"消息已截断至 1000 个字符",retry:"重试",today:"今天",yesterday:"昨天",you_self:"你",status_connected:"已连接",status_disconnected:"已断开",status_reconnecting:"重新连接…",status_relay_degraded:"部分节点经中继",status_direct:"直连",status_server:"服务器: {s}",status_ip:"IP: {ip}",status_network:"网络: {room}",status_peers:"节点: {n}",version:"Entangled v{v}",settings_title:"设置",section_connection:"连接",section_network:"高级网络",section_system:"系统",section_appearance:"外观",advanced_warn:"仅在了解作用时更改这些选项。",reconnect_apply:"重新连接以生效",auto_connect:"自动连接",auto_connect_desc:"启动时自动连接到上次的服务器",auto_join:"自动加入房间",auto_join_desc:"连接后自动加入上次的开放房间(有密码的房间重启后需手动加入)",connection_mode:"连接方式",connection_direct:"直连 (P2P)",connection_relay:"中继 (服务器)",connection_mode_desc:"直连优先点对点,必要时才用中继。中继模式强制全部流量经服务器。",mtu:"MTU",mtu_desc:"数据包大小。错误值可能导致游戏异常或卡顿。",dns_server:"DNS 服务器",dns_desc:"虚拟网络可选 DNS。留空则使用系统默认。",socks5:"SOCKS5 代理",socks5_placeholder:"例如 127.0.0.1:10808",socks5_desc:"仅代理信令 WebSocket,不含节点/中继 UDP。重新连接以生效。",stun_server:"STUN 服务器",stun_desc:"用于发现公网地址以便直连。重新连接以生效。",start_windows:"开机自启",updates:"更新",check_updates:"检查更新",apply_update:"更新",update_checking:"正在检查更新…",update_latest:"已是最新版本。",update_available:"有可用更新:v{v}",update_downloading:"正在下载更新…应用将重启。",update_failed:"更新失败",confirm_update:"下载并安装更新?应用将重启。",error_update_check:"检查更新失败:",error_update:"更新失败:",notif_updating:"正在安装更新…",ui_scale:"界面缩放",ui_scale_desc:"缩放整个界面。可配合窗口调整大小或 F11 全屏使用。",theme:"主题",theme_dark:"深色",theme_light:"浅色",language:"语言",save:"保存",reset:"重置为默认",language_en:"英语",language_ru:"俄语",language_zh:"中文",copied:"已复制",dismiss_error:"关闭",field_required:"必填",notif_created:"网络已创建: {name}",notif_joined:"已加入网络: {name}",notif_left:"已离开网络",notif_removed:"已删除: {name}",notif_deleted:"网络已删除: {name}",notif_connected:"已连接到 {addr}",notif_disconnected:"已断开连接",notif_settings_saved:"设置已保存",notif_reconnect_required:"请重新连接以使代理 / STUN / 令牌生效",notif_auto_join_skipped:"已跳过自动加入「{name}」— 请输入密码后手动加入",notif_need_config:"请先在连接页面设置服务器和昵称",notif_room_deleted:"网络已被所有者删除",invite_no_password:"邀请已复制但无密码(密码不存储)。分享前请自行添加。",error_create:"创建网络失败: {err}",error_join:"加入失败: {err}",error_leave:"离开失败: {err}",error_remove:"删除失败: {err}",error_connect:"连接失败: {err}",error_disconnect:"错误: {err}",error_send:"发送失败: {err}",error_not_connected:"未连接 — 无法发送消息",error_invalid_invite:"无效邀请:需要服务器和房间名",error_save:"保存设置失败: {err}",confirm_disconnect:"确定断开服务器连接?",confirm_leave:"离开当前网络?仍保留在已保存列表中。",confirm_leave_remove:"离开并从已保存列表中移除?",confirm_remove:'从已保存网络中移除 "{name}"?(不会删除他人的网络)',confirm_delete:'永久删除网络 "{name}"(对所有人)?',confirm_reset:"确定重置所有设置?"},As={en:gs,ru:Do,zh:No};function zo(){const e=localStorage.getItem("entangled_locale");if(e&&As[e])return e;const t=navigator.language?.slice(0,2);return t==="ru"?"ru":t==="zh"?"zh":"en"}const Es=Xe(zo()),mt=jo(Es,e=>{const t=As[e]||gs;return new Proxy(t,{get(n,i){if(typeof i=="string")return n[i]??gs[i]??i}})});function un(e){As[e]&&(localStorage.setItem("entangled_locale",e),Es.set(e))}function ge(e,t){return e?String(e).replace(/\{(\w+)\}/g,(n,i)=>t&&t[i]!=null?t[i]:`{${i}}`):""}function yi(e){let t,n,i,o,r,c,u,d=e[4].cancel+"",_,v,p,g=(e[2]||e[4].disconnect)+"",h,C,b;return{c(){t=a("div"),n=a("div"),i=a("p"),o=y(e[1]),r=m(),c=a("div"),u=a("button"),_=y(d),v=m(),p=a("button"),h=y(g),s(i,"id","confirm-msg"),s(i,"class","svelte-1g1nook"),s(u,"type","button"),s(u,"class","btn"),s(p,"type","button"),s(p,"class","btn"),Z(p,"danger",e[3]),Z(p,"btn-cta",!e[3]),s(c,"class","modal-actions svelte-1g1nook"),s(n,"class","modal svelte-1g1nook"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","confirm-msg"),s(t,"class","modal-overlay svelte-1g1nook"),s(t,"role","presentation")},m(k,S){H(k,t,S),l(t,n),l(n,i),l(i,o),l(n,r),l(n,c),l(c,u),l(u,_),l(c,v),l(c,p),l(p,h),C||(b=[F(u,"click",e[5]),F(p,"click",e[6]),F(n,"click",bt(e[10])),F(n,"keydown",bt(e[11])),F(t,"click",e[5]),F(t,"keydown",e[7])],C=!0)},p(k,S){S&2&&j(o,k[1]),S&16&&d!==(d=k[4].cancel+"")&&j(_,d),S&20&&g!==(g=(k[2]||k[4].disconnect)+"")&&j(h,g),S&8&&Z(p,"danger",k[3]),S&8&&Z(p,"btn-cta",!k[3])},d(k){k&&G(t),C=!1,Ne(b)}}}function Io(e){let t,n=e[0]&&yi(e);return{c(){n&&n.c(),t=Al()},m(i,o){n&&n.m(i,o),H(i,t,o)},p(i,[o]){i[0]?n?n.p(i,o):(n=yi(i),n.c(),n.m(t.parentNode,t)):n&&(n.d(1),n=null)},i:Ee,o:Ee,d(i){i&&G(t),n&&n.d(i)}}}function Mo(e,t,n){let i;_e(e,mt,b=>n(4,i=b));let{open:o=!1}=t,{message:r=""}=t,{confirmLabel:c=""}=t,{danger:u=!1}=t,{onConfirm:d=()=>{}}=t,{onCancel:_=()=>{}}=t;function v(){_()}function p(){d()}function g(b){b.key==="Escape"&&v()}function h(b){ht.call(this,e,b)}function C(b){ht.call(this,e,b)}return e.$$set=b=>{"open"in b&&n(0,o=b.open),"message"in b&&n(1,r=b.message),"confirmLabel"in b&&n(2,c=b.confirmLabel),"danger"in b&&n(3,u=b.danger),"onConfirm"in b&&n(8,d=b.onConfirm),"onCancel"in b&&n(9,_=b.onCancel)},[o,r,c,u,i,v,p,g,d,_,h,C]}class Ps extends pt{constructor(t){super(),_t(this,t,Mo,Io,ot,{open:0,message:1,confirmLabel:2,danger:3,onConfirm:8,onCancel:9})}}function ji(e,t,n){const i=e.slice();return i[63]=t[n],i}function Si(e){let t,n,i=e[16].no_networks+"",o,r,c,u=e[16].no_networks_desc+"",d,_;return{c(){t=a("div"),n=a("div"),o=y(i),r=m(),c=a("div"),d=y(u),_=m(),s(c,"class","empty-desc svelte-5bd3jz"),s(t,"class","empty-state svelte-5bd3jz")},m(v,p){H(v,t,p),l(t,n),l(n,o),l(t,r),l(t,c),l(c,d),l(t,_)},p(v,p){p[0]&65536&&i!==(i=v[16].no_networks+"")&&j(o,i),p[0]&65536&&u!==(u=v[16].no_networks_desc+"")&&j(d,u)},d(v){v&&G(t)}}}function To(e){let t=e[16].saved+"",n;return{c(){n=y(t)},m(i,o){H(i,n,o)},p(i,o){o[0]&65536&&t!==(t=i[16].saved+"")&&j(n,t)},d(i){i&&G(n)}}}function Ro(e){let t=e[16].offline_click+"",n;return{c(){n=y(t)},m(i,o){H(i,n,o)},p(i,o){o[0]&65536&&t!==(t=i[16].offline_click+"")&&j(n,t)},d(i){i&&G(n)}}}function qo(e){let t=ge(e[16].peer_count,{n:e[17].peerCount})+"",n;return{c(){n=y(t)},m(i,o){H(i,n,o)},p(i,o){o[0]&196608&&t!==(t=ge(i[16].peer_count,{n:i[17].peerCount})+"")&&j(n,t)},d(i){i&&G(n)}}}function Oo(e){let t=e[16].connecting+"",n;return{c(){n=y(t)},m(i,o){H(i,n,o)},p(i,o){o[0]&65536&&t!==(t=i[16].connecting+"")&&j(n,t)},d(i){i&&G(n)}}}function Ci(e){let t,n,i=e[16].copy_invite+"",o,r,c,u,d=e[16].remove+"",_,v,p,g;function h(...S){return e[39](e[63],...S)}let C=e[17].room===e[63].name&&Ai(e);function b(...S){return e[41](e[63],...S)}let k=e[17].room===e[63].name&&e[17].isOwner&&Ei(e);return{c(){t=a("div"),n=a("button"),o=y(i),r=m(),C&&C.c(),c=m(),u=a("button"),_=y(d),v=m(),k&&k.c(),s(n,"type","button"),s(n,"role","menuitem"),s(n,"class","menu-item svelte-5bd3jz"),s(u,"type","button"),s(u,"role","menuitem"),s(u,"class","menu-item danger svelte-5bd3jz"),s(t,"class","overflow-menu svelte-5bd3jz"),s(t,"role","menu"),s(t,"tabindex","-1")},m(S,P){H(S,t,P),l(t,n),l(n,o),l(t,r),C&&C.m(t,null),l(t,c),l(t,u),l(u,_),l(t,v),k&&k.m(t,null),p||(g=[F(n,"click",h),F(u,"click",b),F(t,"click",bt(e[36])),F(t,"keydown",bt(e[37]))],p=!0)},p(S,P){e=S,P[0]&65536&&i!==(i=e[16].copy_invite+"")&&j(o,i),e[17].room===e[63].name?C?C.p(e,P):(C=Ai(e),C.c(),C.m(t,c)):C&&(C.d(1),C=null),P[0]&65536&&d!==(d=e[16].remove+"")&&j(_,d),e[17].room===e[63].name&&e[17].isOwner?k?k.p(e,P):(k=Ei(e),k.c(),k.m(t,null)):k&&(k.d(1),k=null)},d(S){S&&G(t),C&&C.d(),k&&k.d(),p=!1,Ne(g)}}}function Ai(e){let t,n=e[16].leave+"",i,o,r;return{c(){t=a("button"),i=y(n),s(t,"type","button"),s(t,"role","menuitem"),s(t,"class","menu-item svelte-5bd3jz")},m(c,u){H(c,t,u),l(t,i),o||(r=F(t,"click",e[40]),o=!0)},p(c,u){u[0]&65536&&n!==(n=c[16].leave+"")&&j(i,n)},d(c){c&&G(t),o=!1,r()}}}function Ei(e){let t,n=e[16].delete_room+"",i,o,r;function c(...u){return e[42](e[63],...u)}return{c(){t=a("button"),i=y(n),s(t,"type","button"),s(t,"role","menuitem"),s(t,"class","menu-item danger svelte-5bd3jz")},m(u,d){H(u,t,d),l(t,i),o||(r=F(t,"click",c),o=!0)},p(u,d){e=u,d[0]&65536&&n!==(n=e[16].delete_room+"")&&j(i,n)},d(u){u&&G(t),o=!1,r()}}}function Pi(e,t){let n,i,o,r,c,u=t[63].name+"",d,_,v,p,g,h,C,b,k,S,P,R,w,L,D,M;function J(X,Y){return X[11]===X[63].name?Oo:X[17].room===X[63].name?qo:X[17].connected?To:Ro}let V=J(t),f=V(t);function q(...X){return t[38](t[63],...X)}let B=t[12]===t[63].name&&Ci(t);function U(){return t[43](t[63])}function T(...X){return t[44](t[63],...X)}return{key:e,first:null,c(){n=a("div"),i=a("span"),o=m(),r=a("div"),c=a("div"),d=y(u),_=m(),v=a("div"),f.c(),p=m(),g=a("div"),h=a("button"),C=y("⋯"),P=m(),B&&B.c(),R=m(),s(i,"class","tick svelte-5bd3jz"),s(i,"aria-hidden","true"),Z(i,"on",t[17].room===t[63].name),s(c,"class","network-name svelte-5bd3jz"),s(v,"class","network-meta svelte-5bd3jz"),s(r,"class","network-info svelte-5bd3jz"),s(h,"type","button"),s(h,"class","menu-btn svelte-5bd3jz"),s(h,"aria-haspopup","menu"),s(h,"aria-expanded",b=t[12]===t[63].name),s(h,"aria-label",k=t[16].more_actions),s(h,"title",S=t[16].more_actions),s(g,"class","row-actions svelte-5bd3jz"),s(n,"class","network-item svelte-5bd3jz"),s(n,"role","button"),s(n,"tabindex","0"),s(n,"aria-current",w=t[17].room===t[63].name?"true":void 0),s(n,"aria-label",L=t[63].name),Z(n,"active",t[17].room===t[63].name),Z(n,"disabled",!t[17].connected&&!t[11]),this.first=n},m(X,Y){H(X,n,Y),l(n,i),l(n,o),l(n,r),l(r,c),l(c,d),l(r,_),l(r,v),f.m(v,null),l(n,p),l(n,g),l(g,h),l(h,C),l(g,P),B&&B.m(g,null),l(n,R),D||(M=[F(h,"click",q),F(n,"click",U),F(n,"keydown",T)],D=!0)},p(X,Y){t=X,Y[0]&131073&&Z(i,"on",t[17].room===t[63].name),Y[0]&1&&u!==(u=t[63].name+"")&&j(d,u),V===(V=J(t))&&f?f.p(t,Y):(f.d(1),f=V(t),f&&(f.c(),f.m(v,null))),Y[0]&4097&&b!==(b=t[12]===t[63].name)&&s(h,"aria-expanded",b),Y[0]&65536&&k!==(k=t[16].more_actions)&&s(h,"aria-label",k),Y[0]&65536&&S!==(S=t[16].more_actions)&&s(h,"title",S),t[12]===t[63].name?B?B.p(t,Y):(B=Ci(t),B.c(),B.m(g,null)):B&&(B.d(1),B=null),Y[0]&131073&&w!==(w=t[17].room===t[63].name?"true":void 0)&&s(n,"aria-current",w),Y[0]&1&&L!==(L=t[63].name)&&s(n,"aria-label",L),Y[0]&131073&&Z(n,"active",t[17].room===t[63].name),Y[0]&133120&&Z(n,"disabled",!t[17].connected&&!t[11])},d(X){X&&G(n),f.d(),B&&B.d(),D=!1,Ne(M)}}}function Li(e){let t,n,i,o=e[16].create_network+"",r,c,u,d=e[16].network_name+"",_,v,p,g,h,C,b,k,S=e[16].password_opt+"",P,R,w,L,D,M,J,V,f=e[16].cancel+"",q,B,U,T=e[16].create+"",X,Y,ne,x=e[9]&&Di(e),N=e[7]&&Ni(e);return{c(){t=a("div"),n=a("div"),i=a("h3"),r=y(o),c=m(),u=a("label"),_=y(d),v=m(),p=a("input"),C=m(),x&&x.c(),b=m(),k=a("label"),P=y(S),R=m(),w=a("input"),D=m(),N&&N.c(),M=m(),J=a("div"),V=a("button"),q=y(f),B=m(),U=a("button"),X=y(T),s(i,"id","create-title"),s(i,"class","svelte-5bd3jz"),s(u,"class","sr-only svelte-5bd3jz"),s(u,"for","create-name"),s(p,"id","create-name"),s(p,"type","text"),s(p,"placeholder",g=e[16].network_name),s(p,"aria-invalid",h=!!e[9]),s(p,"class","svelte-5bd3jz"),Z(p,"invalid",e[9]),s(k,"class","sr-only svelte-5bd3jz"),s(k,"for","create-pass"),s(w,"id","create-pass"),s(w,"type","password"),s(w,"placeholder",L=e[16].password_opt),s(V,"class","btn"),s(U,"class","btn primary"),s(J,"class","modal-actions svelte-5bd3jz"),s(n,"class","modal svelte-5bd3jz"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","create-title"),s(t,"class","modal-overlay svelte-5bd3jz"),s(t,"role","presentation")},m(A,K){H(A,t,K),l(t,n),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(n,v),l(n,p),fe(p,e[3]),l(n,C),x&&x.m(n,null),l(n,b),l(n,k),l(k,P),l(n,R),l(n,w),fe(w,e[4]),l(n,D),N&&N.m(n,null),l(n,M),l(n,J),l(J,V),l(V,q),l(J,B),l(J,U),l(U,X),e[47](n),Y||(ne=[F(p,"input",e[45]),F(w,"input",e[46]),F(V,"click",e[19]),F(U,"click",e[22]),F(n,"click",bt(e[34])),F(n,"keydown",bt(e[35])),F(t,"click",e[19]),F(t,"keydown",e[48])],Y=!0)},p(A,K){K[0]&65536&&o!==(o=A[16].create_network+"")&&j(r,o),K[0]&65536&&d!==(d=A[16].network_name+"")&&j(_,d),K[0]&65536&&g!==(g=A[16].network_name)&&s(p,"placeholder",g),K[0]&512&&h!==(h=!!A[9])&&s(p,"aria-invalid",h),K[0]&8&&p.value!==A[3]&&fe(p,A[3]),K[0]&512&&Z(p,"invalid",A[9]),A[9]?x?x.p(A,K):(x=Di(A),x.c(),x.m(n,b)):x&&(x.d(1),x=null),K[0]&65536&&S!==(S=A[16].password_opt+"")&&j(P,S),K[0]&65536&&L!==(L=A[16].password_opt)&&s(w,"placeholder",L),K[0]&16&&w.value!==A[4]&&fe(w,A[4]),A[7]?N?N.p(A,K):(N=Ni(A),N.c(),N.m(n,M)):N&&(N.d(1),N=null),K[0]&65536&&f!==(f=A[16].cancel+"")&&j(q,f),K[0]&65536&&T!==(T=A[16].create+"")&&j(X,T)},d(A){A&&G(t),x&&x.d(),N&&N.d(),e[47](null),Y=!1,Ne(ne)}}}function Di(e){let t,n;return{c(){t=a("span"),n=y(e[9]),s(t,"class","field-error svelte-5bd3jz"),s(t,"role","alert")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o[0]&512&&j(n,i[9])},d(i){i&&G(t)}}}function Ni(e){let t,n;return{c(){t=a("div"),n=y(e[7]),s(t,"class","modal-error svelte-5bd3jz"),s(t,"role","alert")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o[0]&128&&j(n,i[7])},d(i){i&&G(t)}}}function zi(e){let t,n,i,o=e[16].join_network+"",r,c,u,d=e[16].network_name+"",_,v,p,g,h,C,b,k,S=e[16].password_opt+"",P,R,w,L,D,M,J,V,f=e[16].cancel+"",q,B,U,T=e[16].join+"",X,Y,ne,x=e[10]&&Ii(e),N=e[8]&&Mi(e);return{c(){t=a("div"),n=a("div"),i=a("h3"),r=y(o),c=m(),u=a("label"),_=y(d),v=m(),p=a("input"),C=m(),x&&x.c(),b=m(),k=a("label"),P=y(S),R=m(),w=a("input"),D=m(),N&&N.c(),M=m(),J=a("div"),V=a("button"),q=y(f),B=m(),U=a("button"),X=y(T),s(i,"id","join-title"),s(i,"class","svelte-5bd3jz"),s(u,"class","sr-only svelte-5bd3jz"),s(u,"for","join-name"),s(p,"id","join-name"),s(p,"type","text"),s(p,"placeholder",g=e[16].network_name),s(p,"aria-invalid",h=!!e[10]),s(p,"class","svelte-5bd3jz"),Z(p,"invalid",e[10]),s(k,"class","sr-only svelte-5bd3jz"),s(k,"for","join-pass"),s(w,"id","join-pass"),s(w,"type","password"),s(w,"placeholder",L=e[16].password_opt),s(V,"class","btn"),s(U,"class","btn primary"),s(J,"class","modal-actions svelte-5bd3jz"),s(n,"class","modal svelte-5bd3jz"),s(n,"role","dialog"),s(n,"aria-modal","true"),s(n,"aria-labelledby","join-title"),s(t,"class","modal-overlay svelte-5bd3jz"),s(t,"role","presentation")},m(A,K){H(A,t,K),l(t,n),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(n,v),l(n,p),fe(p,e[5]),l(n,C),x&&x.m(n,null),l(n,b),l(n,k),l(k,P),l(n,R),l(n,w),fe(w,e[6]),l(n,D),N&&N.m(n,null),l(n,M),l(n,J),l(J,V),l(V,q),l(J,B),l(J,U),l(U,X),e[52](n),Y||(ne=[F(p,"input",e[49]),F(w,"input",e[50]),F(V,"click",e[21]),F(U,"click",e[51]),F(n,"click",bt(e[32])),F(n,"keydown",bt(e[33])),F(t,"click",e[21]),F(t,"keydown",e[53])],Y=!0)},p(A,K){K[0]&65536&&o!==(o=A[16].join_network+"")&&j(r,o),K[0]&65536&&d!==(d=A[16].network_name+"")&&j(_,d),K[0]&65536&&g!==(g=A[16].network_name)&&s(p,"placeholder",g),K[0]&1024&&h!==(h=!!A[10])&&s(p,"aria-invalid",h),K[0]&32&&p.value!==A[5]&&fe(p,A[5]),K[0]&1024&&Z(p,"invalid",A[10]),A[10]?x?x.p(A,K):(x=Ii(A),x.c(),x.m(n,b)):x&&(x.d(1),x=null),K[0]&65536&&S!==(S=A[16].password_opt+"")&&j(P,S),K[0]&65536&&L!==(L=A[16].password_opt)&&s(w,"placeholder",L),K[0]&64&&w.value!==A[6]&&fe(w,A[6]),A[8]?N?N.p(A,K):(N=Mi(A),N.c(),N.m(n,M)):N&&(N.d(1),N=null),K[0]&65536&&f!==(f=A[16].cancel+"")&&j(q,f),K[0]&65536&&T!==(T=A[16].join+"")&&j(X,T)},d(A){A&&G(t),x&&x.d(),N&&N.d(),e[52](null),Y=!1,Ne(ne)}}}function Ii(e){let t,n;return{c(){t=a("span"),n=y(e[10]),s(t,"class","field-error svelte-5bd3jz"),s(t,"role","alert")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o[0]&1024&&j(n,i[10])},d(i){i&&G(t)}}}function Mi(e){let t,n;return{c(){t=a("div"),n=y(e[8]),s(t,"class","modal-error svelte-5bd3jz"),s(t,"role","alert")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o[0]&256&&j(n,i[8])},d(i){i&&G(t)}}}function Uo(e){let t,n,i,o=e[16].networks+"",r,c,u,d=ge(e[16].network_count,{n:e[0].length})+"",_,v,p,g,h=e[16].create_network+"",C,b,k,S,P=e[16].join_network+"",R,w,L,D,M=[],J=new Map,V,f,q,B,U,T,X,Y,ne=wt(e[0]);const x=O=>O[63].name;for(let O=0;On(16,i=z)),_e(e,Ue,z=>n(58,o=z)),_e(e,We,z=>n(17,r=z));let c=[],u=!1,d=!1,_="",v="",p="",g="",h="",C="",b="",k="",S="",P="",R="",w=null,L,D,M=null;Dl(async()=>{n(0,c=await window.go.main.App.GetSavedRooms());const z=await window.go.main.App.LoadConfig();z.serverAddr&&(S=z.serverAddr),z.nickname&&(P=z.nickname),window.addEventListener("keydown",J),window.addEventListener("click",V)}),oo(()=>{window.removeEventListener("keydown",J),window.removeEventListener("click",V)});function J(z){if(z.key==="Escape"){if(w){n(12,w=null);return}if(u){B();return}if(d){T();return}}}function V(){n(12,w=null)}async function f(){n(0,c=await window.go.main.App.GetSavedRooms())}function q(){n(7,h=""),n(9,b=""),n(1,u=!0),_n()}function B(){n(1,u=!1),n(7,h=""),n(9,b="")}function U(){n(8,C=""),n(10,k=""),n(2,d=!0),_n()}function T(){n(2,d=!1),n(8,C=""),n(10,k="")}async function X(){if(n(9,b=""),n(7,h=""),!_.trim()){n(9,b=i.field_required);return}try{await window.go.main.App.CreateRoom(_,v),ae(ge(i.notif_created,{name:_})),gt(Ue,o="network",o),B(),n(3,_=""),n(4,v=""),await f()}catch(z){n(7,h=ge(i.error_create,{err:z})),ae(h,"error")}}async function Y(z,ee){n(10,k=""),n(8,C="");const be=z||p,Ce=ee!==void 0?ee:g;if(!be.trim()){n(10,k=i.field_required);return}try{await window.go.main.App.JoinRoom(be,Ce),ae(ge(i.notif_joined,{name:be})),gt(Ue,o="network",o),T(),n(5,p=""),n(6,g=""),await f()}catch(qe){n(8,C=ge(i.error_join,{err:qe})),ae(C,"error"),d||(n(5,p=be),n(6,g=""),n(2,d=!0))}}async function ne(){n(15,M={message:i.confirm_leave,confirmLabel:i.leave,run:async()=>{try{await window.go.main.App.LeaveRoom(),ae(i.notif_left),await f()}catch(z){ae(ge(i.error_leave,{err:z}),"error")}}})}async function x(z){const ee=r.room===z;n(15,M={message:ee?i.confirm_leave_remove:ge(i.confirm_remove,{name:z}),confirmLabel:i.remove,danger:!0,run:async()=>{try{ee&&await window.go.main.App.LeaveRoom(),await window.go.main.App.RemoveSavedRoom(z),ae(ge(i.notif_removed,{name:z})),await f()}catch(be){ae(ge(i.error_remove,{err:be}),"error")}}})}async function N(z){n(15,M={message:ge(i.confirm_delete,{name:z}),confirmLabel:i.delete_room,danger:!0,run:async()=>{try{await window.go.main.App.DeleteRoom(z),await window.go.main.App.RemoveSavedRoom(z),ae(ge(i.notif_deleted,{name:z})),await f()}catch(ee){ae(String(ee),"error")}}})}async function A(z){try{const ee=await window.go.main.App.FormatInvite(z.name,z.password||"");await window.go.main.App.CopyText(ee);const be=String(ee).split("|"),Ce=be.length>=3&&be[2]!=="";z.locked&&!Ce?ae(i.invite_no_password,"info"):ae(i.invite_copied)}catch(ee){ae(String(ee),"error")}}async function K(){try{const z=await window.go.main.App.LoadConfig();z.serverAddr&&(S=z.serverAddr),z.nickname&&(P=z.nickname)}catch{}}async function O(z,ee,be){if(!R){n(11,R=z),n(12,w=null);try{await K();const Ce=be||S;if(!r.connected){if(!Ce||!P){ae(i.notif_need_config,"error"),gt(Ue,o="connect",o);return}const qe=await window.go.main.App.Connect(Ce,P);We.set(qe),await f()}await window.go.main.App.JoinRoom(z,ee||""),gt(Ue,o="network",o),await f()}catch(Ce){const qe=ge(i.error_join,{err:Ce});ae(qe,"error"),n(5,p=z),n(6,g=""),n(8,C=qe),n(2,d=!0)}finally{n(11,R="")}}}function I(z,ee){(z.key==="Enter"||z.key===" ")&&(z.preventDefault(),O(ee.name,ee.password,ee.server))}function le(z,ee){z.stopPropagation(),n(12,w=w===ee?null:ee)}function re(z,ee){z.stopPropagation(),n(12,w=null),ee()}function ye(z){ht.call(this,e,z)}function ke(z){ht.call(this,e,z)}function ze(z){ht.call(this,e,z)}function je(z){ht.call(this,e,z)}function ce(z){ht.call(this,e,z)}function Ae(z){ht.call(this,e,z)}const Te=(z,ee)=>le(ee,z.name),ue=(z,ee)=>re(ee,()=>A(z)),te=z=>re(z,ne),Ie=(z,ee)=>re(ee,()=>x(z.name)),Pe=(z,ee)=>re(ee,()=>N(z.name)),Re=z=>O(z.name,z.password,z.server),ve=(z,ee)=>I(ee,z);function we(){_=this.value,n(3,_)}function he(){v=this.value,n(4,v)}function $(z){sn[z?"unshift":"push"](()=>{L=z,n(13,L)})}const oe=z=>z.key==="Escape"&&B();function Ze(){p=this.value,n(5,p)}function De(){g=this.value,n(6,g)}const pe=()=>Y();function Le(z){sn[z?"unshift":"push"](()=>{D=z,n(14,D)})}return[c,u,d,_,v,p,g,h,C,b,k,R,w,L,D,M,i,r,q,B,U,T,X,Y,ne,x,N,A,O,I,le,re,ye,ke,ze,je,ce,Ae,Te,ue,te,Ie,Pe,Re,ve,we,he,$,oe,Ze,De,pe,Le,z=>z.key==="Escape"&&T(),async()=>{const z=M?.run;n(15,M=null),z&&await z()},()=>n(15,M=null)]}class Fo extends pt{constructor(t){super(),_t(this,t,Wo,Uo,ot,{},null,[-1,-1,-1])}}function Ti(e,t,n){const i=e.slice();i[23]=t[n],i[26]=n;const o=Vo(i[23]);return i[24]=o,i}function Ri(e){let t,n=e[5].room_chat+"",i,o,r,c,u=e[3]>0&&qi(e);return{c(){t=a("button"),i=y(n),o=m(),u&&u.c(),s(t,"type","button"),s(t,"class","bezel")},m(d,_){H(d,t,_),l(t,i),l(t,o),u&&u.m(t,null),r||(c=F(t,"click",e[8]),r=!0)},p(d,_){_&32&&n!==(n=d[5].room_chat+"")&&j(i,n),d[3]>0?u?u.p(d,_):(u=qi(d),u.c(),u.m(t,null)):u&&(u.d(1),u=null)},d(d){d&&G(t),u&&u.d(),r=!1,c()}}}function qi(e){let t,n;return{c(){t=a("span"),n=y(e[3]),s(t,"class","badge svelte-1hijv9g")},m(i,o){H(i,t,o),l(t,n)},p(i,o){o&8&&j(n,i[3])},d(i){i&&G(t)}}}function Oi(e){let t,n=e[5].status_relay_degraded+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","section-hint fault svelte-1hijv9g")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&32&&n!==(n=o[5].status_relay_degraded+"")&&j(i,n)},d(o){o&&G(t)}}}function Ui(e){let t,n,i=e[5].no_peers+"",o,r,c,u=e[5].no_peers_desc+"",d,_;return{c(){t=a("div"),n=a("div"),o=y(i),r=m(),c=a("p"),d=y(u),_=m(),s(n,"class","empty-label svelte-1hijv9g"),s(c,"class","empty-desc svelte-1hijv9g"),s(t,"class","empty svelte-1hijv9g")},m(v,p){H(v,t,p),l(t,n),l(n,o),l(t,r),l(t,c),l(c,d),l(t,_)},p(v,p){p&32&&i!==(i=v[5].no_peers+"")&&j(o,i),p&32&&u!==(u=v[5].no_peers_desc+"")&&j(d,u)},d(v){v&&G(t)}}}function Wi(e){let t,n=e[11](e[23].id)+"",i;return{c(){t=a("span"),i=y(n),s(t,"class","badge svelte-1hijv9g")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&16&&n!==(n=o[11](o[23].id)+"")&&j(i,n)},d(o){o&&G(t)}}}function Ko(e){let t;return{c(){t=y("…")},m(n,i){H(n,t,i)},p:Ee,d(n){n&&G(t)}}}function Jo(e){let t=e[23].ping+"",n,i;return{c(){n=y(t),i=y("ms")},m(o,r){H(o,n,r),H(o,i,r)},p(o,r){r&16&&t!==(t=o[23].ping+"")&&j(n,t)},d(o){o&&(G(n),G(i))}}}function Bo(e){let t;return{c(){t=y("—")},m(n,i){H(n,t,i)},p:Ee,d(n){n&&G(t)}}}function Fi(e,t){let n,i,o=bs(t[26]+1)+"",r,c,u,d=(t[23].nickname||t[23].id)+"",_,v,p=t[11](t[23].id)>0,g,h,C=(t[23].virtualIP||t[5].na)+"",b,k,S,P,R,w,L,D,M=(t[23].connected&&t[23].path?t[12](t[23].path):t[5].path_unknown)+"",J,V,f,q,B,U,T,X=t[5].ping_peer+"",Y,ne,x,N,A=t[5].chat+"",K,O,I,le,re=p&&Wi(t);function ye(){return t[19](t[23])}function ke(...ue){return t[20](t[23],...ue)}function ze(ue,te){return ue[23].connected?ue[23].ping>=0&&!ue[2][ue[23].id]?Jo:Ko:Bo}let je=ze(t),ce=je(t);function Ae(){return t[21](t[23])}function Te(){return t[22](t[23])}return{key:e,first:null,c(){n=a("article"),i=a("span"),r=y(o),c=m(),u=a("div"),_=y(d),v=m(),re&&re.c(),g=m(),h=a("button"),b=y(C),k=m(),S=a("span"),P=jl("svg"),R=jl("line"),w=jl("circle"),L=jl("circle"),D=m(),J=y(M),f=m(),q=a("span"),ce.c(),B=m(),U=a("div"),T=a("button"),Y=y(X),x=m(),N=a("button"),K=y(A),O=m(),s(i,"class","ch svelte-1hijv9g"),s(u,"class","nickname svelte-1hijv9g"),s(h,"type","button"),s(h,"class","peer-ip svelte-1hijv9g"),s(R,"x1","3"),s(R,"y1","5"),s(R,"x2","37"),s(R,"y2","5"),s(R,"class","svelte-1hijv9g"),s(w,"cx","5"),s(w,"cy","5"),s(w,"r","2"),s(w,"class","svelte-1hijv9g"),s(L,"cx","35"),s(L,"cy","5"),s(L,"r","2"),s(L,"class","svelte-1hijv9g"),s(P,"class","trace svelte-1hijv9g"),s(P,"viewBox","0 0 40 10"),s(P,"aria-hidden","true"),s(S,"class","col-path svelte-1hijv9g"),s(S,"title",V=t[13](t[23].path)),Z(S,"live",t[24]==="live"),Z(S,"fault",t[24]==="fault"),Z(S,"idle",t[24]==="idle"),s(q,"class","col-ping svelte-1hijv9g"),Z(q,"probing",t[23].connected&&(t[23].ping<0||t[2][t[23].id])),s(T,"class","btn btn-ghost btn-sm svelte-1hijv9g"),T.disabled=ne=!t[23].connected||!!t[2][t[23].id],s(N,"class","btn btn-ghost btn-sm svelte-1hijv9g"),s(U,"class","peer-actions svelte-1hijv9g"),s(n,"class","peer-row svelte-1hijv9g"),s(n,"role","listitem"),this.first=n},m(ue,te){H(ue,n,te),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(u,v),re&&re.m(u,null),l(n,g),l(n,h),l(h,b),l(n,k),l(n,S),l(S,P),l(P,R),l(P,w),l(P,L),l(S,D),l(S,J),l(n,f),l(n,q),ce.m(q,null),l(n,B),l(n,U),l(U,T),l(T,Y),l(U,x),l(U,N),l(N,K),l(n,O),I||(le=[F(h,"click",ye),F(h,"keydown",ke),F(T,"click",Ae),F(N,"click",Te)],I=!0)},p(ue,te){t=ue,te&16&&o!==(o=bs(t[26]+1)+"")&&j(r,o),te&16&&d!==(d=(t[23].nickname||t[23].id)+"")&&j(_,d),te&16&&(p=t[11](t[23].id)>0),p?re?re.p(t,te):(re=Wi(t),re.c(),re.m(u,null)):re&&(re.d(1),re=null),te&48&&C!==(C=(t[23].virtualIP||t[5].na)+"")&&j(b,C),te&48&&M!==(M=(t[23].connected&&t[23].path?t[12](t[23].path):t[5].path_unknown)+"")&&j(J,M),te&16&&V!==(V=t[13](t[23].path))&&s(S,"title",V),te&16&&Z(S,"live",t[24]==="live"),te&16&&Z(S,"fault",t[24]==="fault"),te&16&&Z(S,"idle",t[24]==="idle"),je===(je=ze(t))&&ce?ce.p(t,te):(ce.d(1),ce=je(t),ce&&(ce.c(),ce.m(q,null))),te&20&&Z(q,"probing",t[23].connected&&(t[23].ping<0||t[2][t[23].id])),te&32&&X!==(X=t[5].ping_peer+"")&&j(Y,X),te&20&&ne!==(ne=!t[23].connected||!!t[2][t[23].id])&&(T.disabled=ne),te&32&&A!==(A=t[5].chat+"")&&j(K,A)},d(ue){ue&&G(n),re&&re.d(),ce.d(),I=!1,Ne(le)}}}function Go(e){let t,n,i,o,r=e[5].channels+"",c,u,d,_=(e[1].room||e[5].peers_list)+"",v,p,g,h,C,b,k,S=e[5].col_ch+"",P,R,w,L=e[5].col_nickname+"",D,M,J,V=e[5].col_ip+"",f,q,B,U=e[5].col_path+"",T,X,Y,ne=e[5].col_ping+"",x,N,A,K,O,I,le,re,ye,ke=(e[6].nickname||e[5].you)+"",ze,je,ce,Ae=e[5].me+"",Te,ue,te,Ie=(e[1].virtualIP||e[5].na)+"",Pe,Re,ve,we=e[5].path_unknown+"",he,$,oe,Ze,De,pe,Le=[],et=new Map,se,de,z,ee=e[1].room&&Ri(e),be=e[0]==="relay"&&Oi(e),Ce=wt(e[4]);const qe=ie=>ie[23].id;for(let ie=0;ien(5,r=f)),_e(e,Ss,f=>n(15,c=f)),_e(e,We,f=>n(1,u=f)),_e(e,ps,f=>n(16,d=f)),_e(e,Be,f=>n(6,_=f));let{pathAggregate:v="disconnected"}=t,p={};function g(f){Ll.set({id:f.id,nickname:f.nickname||f.id}),hs("peer:"+f.id),Pt.set(!0)}function h(){Ll.set(null),hs("room:"+(u.room||"network")),Pt.set(!0)}async function C(f){if(f)try{await window.go.main.App.CopyText(f),ae(r.copied)}catch{}}async function b(f){if(!(!f?.id||!f.connected||p[f.id])){n(2,p={...p,[f.id]:!0});try{await window.go.main.App.PingPeer(f.id),ae(ge(r.ping_sent,{name:f.nickname||f.id}))}catch(q){ae(ge(r.error_ping,{err:q}),"error")}finally{setTimeout(()=>{const q={...p};delete q[f.id],n(2,p=q)},800)}}}function k(f){return c["peer:"+f]||0}function S(f){return f==="p2p"?r.path_p2p:f==="relay"?r.path_relay:f==="ws"?r.path_ws:r.path_unknown}function P(f){return f==="p2p"?r.path_p2p_tip:f==="relay"?r.path_relay_tip:f==="ws"?r.path_ws_tip:""}function R(f,q){(f.key==="Enter"||f.key===" ")&&(f.preventDefault(),C(q))}const w=()=>C(u.virtualIP),L=f=>R(f,u.virtualIP),D=f=>C(f.virtualIP),M=(f,q)=>R(q,f.virtualIP),J=f=>b(f),V=f=>g(f);return e.$$set=f=>{"pathAggregate"in f&&n(0,v=f.pathAggregate)},e.$$.update=()=>{e.$$.dirty&65536&&n(4,i=[...d].sort((f,q)=>(f.nickname||"").localeCompare(q.nickname||""))),e.$$.dirty&32770&&n(3,o=c["room:"+(u.room||"network")]||0)},[v,u,p,o,i,r,_,g,h,C,b,k,S,P,R,c,d,w,L,D,M,J,V]}class Xo extends pt{constructor(t){super(),_t(this,t,Yo,Go,ot,{pathAggregate:0})}}function Zo(e){let t,n,i,o,r,c,u,d,_,v,p,g;return{c(){t=a("button"),n=a("span"),i=m(),o=a("span"),o.innerHTML='',r=m(),c=a("span"),c.innerHTML='',u=m(),d=a("span"),s(n,"class","theme-switch-track"),s(o,"class","theme-switch-icon theme-switch-sun"),s(o,"aria-hidden","true"),s(c,"class","theme-switch-icon theme-switch-moon"),s(c,"aria-hidden","true"),s(d,"class","theme-switch-thumb"),s(t,"type","button"),s(t,"class","theme-switch"),s(t,"aria-label",_=e[1]?e[2].theme_light:e[2].theme_dark),s(t,"title",v=e[2].theme),Z(t,"is-dark",e[1]),Z(t,"is-chrome",e[0])},m(h,C){H(h,t,C),l(t,n),l(t,i),l(t,o),l(t,r),l(t,c),l(t,u),l(t,d),p||(g=F(t,"click",e[3]),p=!0)},p(h,[C]){C&6&&_!==(_=h[1]?h[2].theme_light:h[2].theme_dark)&&s(t,"aria-label",_),C&4&&v!==(v=h[2].theme)&&s(t,"title",v),C&2&&Z(t,"is-dark",h[1]),C&1&&Z(t,"is-chrome",h[0])},i:Ee,o:Ee,d(h){h&&G(t),p=!1,g()}}}function Qo(e,t,n){let i,o,r;_e(e,Be,_=>n(4,o=_)),_e(e,mt,_=>n(2,r=_));let{chrome:c=!1}=t;async function u(_){Be.update(v=>({...v,theme:_}));try{const v=nn(Be);await window.go.main.App.SaveSettings({...v,theme:_})}catch{}}function d(){u(i?"light":"dark")}return e.$$set=_=>{"chrome"in _&&n(0,c=_.chrome)},e.$$.update=()=>{e.$$.dirty&16&&n(1,i=(o.theme||"dark")!=="light")},[c,i,r,d,o]}class ro extends pt{constructor(t){super(),_t(this,t,Qo,Zo,ot,{chrome:0})}}function $o(e){let t,n,i,o,r=e[0].network+"",c,u,d,_=(e[6].room||e[0].network)+"",v,p,g,h,C,b=e[0].virtual_ip+"",k,S,P,R=(e[6].virtualIP||e[0].na)+"",w,L,D,M,J,V,f=e[0].col_path+"",q,B,U,T,X,Y,ne,x,N,A,K,O,I,le,re,ye=e[0].peers_list+"",ke,ze,je,ce=e[6].peerCount+"",Ae,Te,ue,te,Ie,Pe,Re=e[0].settings+"",ve,we,he,$=e[0].disconnect+"",oe,Ze,De,pe,Le,et;return te=new ro({props:{chrome:!0}}),De=new Ps({props:{open:e[1],message:e[0].confirm_disconnect,confirmLabel:e[0].disconnect,danger:!0,onConfirm:e[11],onCancel:e[14]}}),{c(){t=a("header"),n=a("div"),i=a("button"),o=a("span"),c=y(r),u=m(),d=a("span"),v=y(_),g=m(),h=a("button"),C=a("span"),k=y(b),S=m(),P=a("span"),w=y(R),M=m(),J=a("div"),V=a("span"),q=y(f),B=m(),U=a("span"),T=a("span"),X=a("span"),Y=m(),ne=a("span"),x=m(),N=a("span"),A=m(),K=a("span"),O=y(e[2]),I=m(),le=a("div"),re=a("span"),ke=y(ye),ze=m(),je=a("span"),Ae=y(ce),Te=m(),ue=a("div"),xe(te.$$.fragment),Ie=m(),Pe=a("button"),ve=y(Re),we=m(),he=a("button"),oe=y($),Ze=m(),xe(De.$$.fragment),s(o,"class","label-track"),s(d,"class","cell-value svelte-w9vfv6"),s(i,"type","button"),s(i,"class","cell room svelte-w9vfv6"),s(i,"title",p=e[0].network),s(C,"class","label-track"),s(P,"class","cell-value mono svelte-w9vfv6"),s(h,"type","button"),s(h,"class","cell vip svelte-w9vfv6"),h.disabled=L=!e[6].virtualIP,s(h,"title",D=e[0].virtual_ip),s(V,"class","label-track"),s(X,"class","led live"),Z(X,"on",e[5]),s(ne,"class","led fault"),Z(ne,"on",e[4]),s(N,"class","led idle"),Z(N,"on",e[3]),s(T,"class","leds svelte-w9vfv6"),s(T,"aria-hidden","true"),s(K,"class","cell-value svelte-w9vfv6"),Z(K,"live",e[5]),Z(K,"fault",e[4]),s(U,"class","path-row svelte-w9vfv6"),s(J,"class","cell path svelte-w9vfv6"),s(J,"role","status"),s(J,"aria-live","polite"),s(re,"class","label-track"),s(je,"class","cell-value mono svelte-w9vfv6"),s(le,"class","cell peers svelte-w9vfv6"),s(Pe,"type","button"),s(Pe,"class","bezel"),Z(Pe,"active",e[7]==="settings"),s(he,"type","button"),s(he,"class","bezel"),s(ue,"class","actions svelte-w9vfv6"),s(n,"class","topbar-row svelte-w9vfv6"),s(t,"class","topbar svelte-w9vfv6")},m(se,de){H(se,t,de),l(t,n),l(n,i),l(i,o),l(o,c),l(i,u),l(i,d),l(d,v),l(n,g),l(n,h),l(h,C),l(C,k),l(h,S),l(h,P),l(P,w),l(n,M),l(n,J),l(J,V),l(V,q),l(J,B),l(J,U),l(U,T),l(T,X),l(T,Y),l(T,ne),l(T,x),l(T,N),l(U,A),l(U,K),l(K,O),l(n,I),l(n,le),l(le,re),l(re,ke),l(le,ze),l(le,je),l(je,Ae),l(n,Te),l(n,ue),Ve(te,ue,null),l(ue,Ie),l(ue,Pe),l(Pe,ve),l(ue,we),l(ue,he),l(he,oe),H(se,Ze,de),Ve(De,se,de),pe=!0,Le||(et=[F(i,"click",e[8]),F(h,"click",e[10]),F(Pe,"click",e[9]),F(he,"click",e[13])],Le=!0)},p(se,[de]){(!pe||de&1)&&r!==(r=se[0].network+"")&&j(c,r),(!pe||de&65)&&_!==(_=(se[6].room||se[0].network)+"")&&j(v,_),(!pe||de&1&&p!==(p=se[0].network))&&s(i,"title",p),(!pe||de&1)&&b!==(b=se[0].virtual_ip+"")&&j(k,b),(!pe||de&65)&&R!==(R=(se[6].virtualIP||se[0].na)+"")&&j(w,R),(!pe||de&64&&L!==(L=!se[6].virtualIP))&&(h.disabled=L),(!pe||de&1&&D!==(D=se[0].virtual_ip))&&s(h,"title",D),(!pe||de&1)&&f!==(f=se[0].col_path+"")&&j(q,f),(!pe||de&32)&&Z(X,"on",se[5]),(!pe||de&16)&&Z(ne,"on",se[4]),(!pe||de&8)&&Z(N,"on",se[3]),(!pe||de&4)&&j(O,se[2]),(!pe||de&32)&&Z(K,"live",se[5]),(!pe||de&16)&&Z(K,"fault",se[4]),(!pe||de&1)&&ye!==(ye=se[0].peers_list+"")&&j(ke,ye),(!pe||de&64)&&ce!==(ce=se[6].peerCount+"")&&j(Ae,ce),(!pe||de&1)&&Re!==(Re=se[0].settings+"")&&j(ve,Re),(!pe||de&128)&&Z(Pe,"active",se[7]==="settings"),(!pe||de&1)&&$!==($=se[0].disconnect+"")&&j(oe,$);const z={};de&2&&(z.open=se[1]),de&1&&(z.message=se[0].confirm_disconnect),de&1&&(z.confirmLabel=se[0].disconnect),de&2&&(z.onCancel=se[14]),De.$set(z)},i(se){pe||(Oe(te.$$.fragment,se),Oe(De.$$.fragment,se),pe=!0)},o(se){Ge(te.$$.fragment,se),Ge(De.$$.fragment,se),pe=!1},d(se){se&&(G(t),G(Ze)),Ye(te),Ye(De,se),Le=!1,Ne(et)}}}function xo(e,t,n){let i,o,r,c,u,d,_;_e(e,mt,P=>n(0,u=P)),_e(e,We,P=>n(6,d=P)),_e(e,Ue,P=>n(7,_=P));let{pathAggregate:v="disconnected"}=t;function p(){Ue.set("network")}function g(){Ue.set(_==="settings"?"network":"settings")}async function h(){if(d.virtualIP)try{await window.go.main.App.CopyText(d.virtualIP),ae(u.copied)}catch{}}let C=!1;async function b(){n(1,C=!1);try{await window.go.main.App.Disconnect(),We.set({connected:!1,reconnecting:!1,server:"",room:"",virtualIP:"",peerCount:0,isOwner:!1,phase:"idle"}),Pt.set(!1),Ue.set("connect"),ae(u.notif_disconnected)}catch(P){ae(ge(u.error_disconnect,{err:P}),"error")}}const k=()=>n(1,C=!0),S=()=>n(1,C=!1);return e.$$set=P=>{"pathAggregate"in P&&n(12,v=P.pathAggregate)},e.$$.update=()=>{e.$$.dirty&4096&&n(5,i=v==="direct"),e.$$.dirty&4096&&n(4,o=v==="relay"||v==="reconnecting"),e.$$.dirty&4096&&n(3,r=v==="disconnected"),e.$$.dirty&4097&&n(2,c=v==="reconnecting"?u.status_reconnecting:v==="relay"?u.status_relay_degraded:v==="direct"?u.status_direct:u.status_disconnected)},[u,C,c,r,o,i,d,_,p,g,h,b,v,k,S]}class ea extends pt{constructor(t){super(),_t(this,t,xo,$o,ot,{pathAggregate:12})}}function ta(e){let t,n,i,o,r=e[0].server+"",c,u,d,_=e[1].server+"",v,p,g,h,C=e[0].virtual_ip+"",b,k,S,P=(e[1].virtualIP||e[0].na)+"",R,w,L,D=e[0].disconnect+"",M,J,V;function f(U,T){return U[1].reconnecting?sa:la}let q=f(e),B=q(e);return{c(){t=a("div"),B.c(),n=m(),i=a("div"),o=a("span"),c=y(r),u=m(),d=a("span"),v=y(_),p=m(),g=a("div"),h=a("span"),b=y(C),k=m(),S=a("span"),R=y(P),w=m(),L=a("button"),M=y(D),s(d,"class","info-value svelte-1br9j49"),s(i,"class","info-line svelte-1br9j49"),s(S,"class","info-value svelte-1br9j49"),s(g,"class","info-line svelte-1br9j49"),s(L,"class","disconnect-btn svelte-1br9j49"),s(t,"class","connected-info svelte-1br9j49")},m(U,T){H(U,t,T),B.m(t,null),l(t,n),l(t,i),l(i,o),l(o,c),l(i,u),l(i,d),l(d,v),l(t,p),l(t,g),l(g,h),l(h,b),l(g,k),l(g,S),l(S,R),l(t,w),l(t,L),l(L,M),J||(V=F(L,"click",e[12]),J=!0)},p(U,T){q===(q=f(U))&&B?B.p(U,T):(B.d(1),B=q(U),B&&(B.c(),B.m(t,n))),T&1&&r!==(r=U[0].server+"")&&j(c,r),T&2&&_!==(_=U[1].server+"")&&j(v,_),T&1&&C!==(C=U[0].virtual_ip+"")&&j(b,C),T&3&&P!==(P=(U[1].virtualIP||U[0].na)+"")&&j(R,P),T&1&&D!==(D=U[0].disconnect+"")&&j(M,D)},d(U){U&&G(t),B.d(),J=!1,V()}}}function na(e){let t,n,i,o=e[0].brand+"",r,c,u,d=e[0].tagline+"",_,v,p,g,h=e[0].server_addr+"",C,b,k,S,P,R,w,L,D,M=e[0].nickname+"",J,V,f,q,B,U,T,X,Y=(e[5]?e[0].connecting:e[0].connect)+"",ne,x,N,A,K,O=e[0].paste_invite+"",I,le,re,ye,ke=e[0].paste_invite+"",ze,je,ce,Ae,Te,ue,te=e[0].join+"",Ie,Pe,Re,ve=e[7].serverAddr&&Ki(e),we=e[7].nickname&&Ji(e),he=(e[5]||e[1].phase==="dialing"||e[1].phase==="auth")&&Bi(e);return{c(){t=a("div"),n=a("div"),i=a("h1"),r=y(o),c=m(),u=a("p"),_=y(d),v=m(),p=a("div"),g=a("label"),C=y(h),b=m(),k=a("input"),R=m(),ve&&ve.c(),w=m(),L=a("div"),D=a("label"),J=y(M),V=m(),f=a("input"),U=m(),we&&we.c(),T=m(),X=a("button"),ne=y(Y),x=m(),he&&he.c(),N=m(),A=a("details"),K=a("summary"),I=y(O),le=m(),re=a("div"),ye=a("label"),ze=y(ke),je=m(),ce=a("input"),Te=m(),ue=a("button"),Ie=y(te),s(i,"class","brand svelte-1br9j49"),s(u,"class","tagline svelte-1br9j49"),s(n,"class","brand-block svelte-1br9j49"),s(g,"for","server-input"),s(g,"class","svelte-1br9j49"),s(k,"id","server-input"),s(k,"type","text"),s(k,"placeholder","host:8080"),s(k,"aria-invalid",S=!!e[7].serverAddr),s(k,"aria-describedby",P=e[7].serverAddr?"server-err":void 0),s(k,"class","svelte-1br9j49"),Z(k,"invalid",e[7].serverAddr),s(p,"class","field svelte-1br9j49"),s(D,"for","nick-input"),s(D,"class","svelte-1br9j49"),s(f,"id","nick-input"),s(f,"type","text"),s(f,"placeholder","Player"),s(f,"aria-invalid",q=!!e[7].nickname),s(f,"aria-describedby",B=e[7].nickname?"nick-err":void 0),s(f,"class","svelte-1br9j49"),Z(f,"invalid",e[7].nickname),s(L,"class","field svelte-1br9j49"),s(X,"class","connect-btn svelte-1br9j49"),X.disabled=e[5],s(K,"class","svelte-1br9j49"),s(ye,"for","invite-input"),s(ye,"class","sr-only svelte-1br9j49"),s(ce,"id","invite-input"),s(ce,"type","text"),s(ce,"placeholder",Ae=e[0].invite_placeholder),s(ce,"class","svelte-1br9j49"),s(ue,"class","secondary-btn svelte-1br9j49"),ue.disabled=e[5],s(re,"class","invite-block svelte-1br9j49"),s(A,"class","invite-disclosure svelte-1br9j49"),s(t,"class","connect-form svelte-1br9j49")},m($,oe){H($,t,oe),l(t,n),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(t,v),l(t,p),l(p,g),l(g,C),l(p,b),l(p,k),fe(k,e[2]),l(p,R),ve&&ve.m(p,null),l(t,w),l(t,L),l(L,D),l(D,J),l(L,V),l(L,f),fe(f,e[3]),l(L,U),we&&we.m(L,null),l(t,T),l(t,X),l(X,ne),l(t,x),he&&he.m(t,null),l(t,N),l(t,A),l(A,K),l(K,I),l(A,le),l(A,re),l(re,ye),l(ye,ze),l(re,je),l(re,ce),fe(ce,e[4]),l(re,Te),l(re,ue),l(ue,Ie),A.open=e[6],Pe||(Re=[F(k,"input",e[13]),F(f,"input",e[14]),F(f,"keydown",e[11]),F(X,"click",e[9]),F(ce,"input",e[15]),F(ue,"click",e[10]),F(A,"toggle",e[16])],Pe=!0)},p($,oe){oe&1&&o!==(o=$[0].brand+"")&&j(r,o),oe&1&&d!==(d=$[0].tagline+"")&&j(_,d),oe&1&&h!==(h=$[0].server_addr+"")&&j(C,h),oe&128&&S!==(S=!!$[7].serverAddr)&&s(k,"aria-invalid",S),oe&128&&P!==(P=$[7].serverAddr?"server-err":void 0)&&s(k,"aria-describedby",P),oe&4&&k.value!==$[2]&&fe(k,$[2]),oe&128&&Z(k,"invalid",$[7].serverAddr),$[7].serverAddr?ve?ve.p($,oe):(ve=Ki($),ve.c(),ve.m(p,null)):ve&&(ve.d(1),ve=null),oe&1&&M!==(M=$[0].nickname+"")&&j(J,M),oe&128&&q!==(q=!!$[7].nickname)&&s(f,"aria-invalid",q),oe&128&&B!==(B=$[7].nickname?"nick-err":void 0)&&s(f,"aria-describedby",B),oe&8&&f.value!==$[3]&&fe(f,$[3]),oe&128&&Z(f,"invalid",$[7].nickname),$[7].nickname?we?we.p($,oe):(we=Ji($),we.c(),we.m(L,null)):we&&(we.d(1),we=null),oe&33&&Y!==(Y=($[5]?$[0].connecting:$[0].connect)+"")&&j(ne,Y),oe&32&&(X.disabled=$[5]),$[5]||$[1].phase==="dialing"||$[1].phase==="auth"?he?he.p($,oe):(he=Bi($),he.c(),he.m(t,N)):he&&(he.d(1),he=null),oe&1&&O!==(O=$[0].paste_invite+"")&&j(I,O),oe&1&&ke!==(ke=$[0].paste_invite+"")&&j(ze,ke),oe&1&&Ae!==(Ae=$[0].invite_placeholder)&&s(ce,"placeholder",Ae),oe&16&&ce.value!==$[4]&&fe(ce,$[4]),oe&1&&te!==(te=$[0].join+"")&&j(Ie,te),oe&32&&(ue.disabled=$[5]),oe&64&&(A.open=$[6])},d($){$&&G(t),ve&&ve.d(),we&&we.d(),he&&he.d(),Pe=!1,Ne(Re)}}}function la(e){let t,n,i,o,r=e[0].connected+"",c;return{c(){t=a("div"),n=a("span"),i=m(),o=a("span"),c=y(r),s(n,"class","sq sq-green svelte-1br9j49"),s(n,"aria-hidden","true"),s(t,"class","connected-line svelte-1br9j49"),s(t,"role","status")},m(u,d){H(u,t,d),l(t,n),l(t,i),l(t,o),l(o,c)},p(u,d){d&1&&r!==(r=u[0].connected+"")&&j(c,r)},d(u){u&&G(t)}}}function sa(e){let t,n,i,o,r=e[0].reconnecting+"",c;return{c(){t=a("div"),n=a("span"),i=m(),o=a("span"),c=y(r),s(n,"class","sq sq-warn svelte-1br9j49"),s(n,"aria-hidden","true"),s(t,"class","connected-line svelte-1br9j49"),s(t,"role","status")},m(u,d){H(u,t,d),l(t,n),l(t,i),l(t,o),l(o,c)},p(u,d){d&1&&r!==(r=u[0].reconnecting+"")&&j(c,r)},d(u){u&&G(t)}}}function Ki(e){let t,n=e[7].serverAddr+"",i;return{c(){t=a("span"),i=y(n),s(t,"id","server-err"),s(t,"class","field-error svelte-1br9j49"),s(t,"role","alert")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&128&&n!==(n=o[7].serverAddr+"")&&j(i,n)},d(o){o&&G(t)}}}function Ji(e){let t,n=e[7].nickname+"",i;return{c(){t=a("span"),i=y(n),s(t,"id","nick-err"),s(t,"class","field-error svelte-1br9j49"),s(t,"role","alert")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&128&&n!==(n=o[7].nickname+"")&&j(i,n)},d(o){o&&G(t)}}}function Bi(e){let t,n=(e[8]||e[0].connecting)+"",i;return{c(){t=a("div"),i=y(n),s(t,"class","phase svelte-1br9j49"),s(t,"role","status")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&257&&n!==(n=(o[8]||o[0].connecting)+"")&&j(i,n)},d(o){o&&G(t)}}}function ia(e){let t;function n(r,c){return r[1].connected?ta:na}let i=n(e),o=i(e);return{c(){t=a("div"),o.c(),s(t,"class","connect-view svelte-1br9j49")},m(r,c){H(r,t,c),o.m(t,null)},p(r,[c]){i===(i=n(r))&&o?o.p(r,c):(o.d(1),o=i(r),o&&(o.c(),o.m(t,null)))},i:Ee,o:Ee,d(r){r&&G(t),o.d()}}}function oa(e,t,n){let i,o,r,c;_e(e,mt,D=>n(0,o=D)),_e(e,We,D=>n(1,r=D)),_e(e,Be,D=>n(17,c=D));let u="",d="",_="",v=!1,p=!1,g={};Dl(async()=>{const D=await window.go.main.App.LoadConfig();D.serverAddr&&n(2,u=D.serverAddr),D.nickname&&n(3,d=D.nickname),D&&Be.set({...c,...D}),D.autoConnect&&D.serverAddr&&D.nickname&&C()});function h(){const D={};return u.trim()||(D.serverAddr=o.field_required),d.trim()||(D.nickname=o.field_required),n(7,g=D),Object.keys(D).length===0}async function C(){if(!v&&h()){n(5,v=!0),_n();try{const D=await window.go.main.App.Connect(u,d);We.set(D),Ue.set("network"),ae(ge(o.notif_connected,{addr:u})),n(7,g={})}catch(D){ae(ge(o.error_connect,{err:D}),"error")}finally{n(5,v=!1)}}}async function b(){if(_.trim()){_n();try{const D=await window.go.main.App.ParseInvite(_.trim());if(!D.server||!D.room){ae(o.error_invalid_invite,"error");return}if(n(2,u=D.server),!r.connected){if(!d.trim()){n(7,g={...g,nickname:o.field_required}),ae(o.notif_need_config,"error");return}n(5,v=!0);const M=await window.go.main.App.Connect(u,d);We.set(M),n(5,v=!1)}await window.go.main.App.JoinRoom(D.room,D.password||""),ae(ge(o.notif_joined,{name:D.room})),Ue.set("network")}catch(D){ae(ge(o.error_join,{err:D}),"error"),n(5,v=!1)}}}function k(D){D.key==="Enter"&&(D.preventDefault(),C())}async function S(){if(confirm(o.confirm_disconnect))try{await window.go.main.App.Disconnect(),We.set({connected:!1,reconnecting:!1,server:"",room:"",virtualIP:"",peerCount:0,isOwner:!1,phase:"idle"}),Ue.set("connect"),ae(o.notif_disconnected)}catch(D){ae(ge(o.error_disconnect,{err:D}),"error")}}function P(){u=this.value,n(2,u)}function R(){d=this.value,n(3,d)}function w(){_=this.value,n(4,_)}function L(){p=this.open,n(6,p)}return e.$$.update=()=>{e.$$.dirty&3&&n(8,i=r.phase==="dialing"?o.phase_dialing:r.phase==="auth"?o.phase_auth:r.phase==="ready"?o.phase_ready:r.phase==="error"?o.phase_error:"")},[o,r,u,d,_,v,p,g,i,C,b,k,S,P,R,w,L]}class aa extends pt{constructor(t){super(),_t(this,t,oa,ia,ot,{})}}function Gi(e,t,n){const i=e.slice();return i[23]=t[n],i[25]=n,i}function Hi(e){let t,n,i=e[0].no_messages+"",o,r,c,u=e[0].no_messages_desc+"",d;return{c(){t=a("div"),n=a("div"),o=y(i),r=m(),c=a("p"),d=y(u),s(n,"class","empty-label svelte-16e4bfd"),s(c,"class","empty-desc svelte-16e4bfd"),s(t,"class","empty svelte-16e4bfd")},m(_,v){H(_,t,v),l(t,n),l(n,o),l(t,r),l(t,c),l(c,d)},p(_,v){v&1&&i!==(i=_[0].no_messages+"")&&j(o,i),v&1&&u!==(u=_[0].no_messages_desc+"")&&j(d,u)},d(_){_&&G(t)}}}function Vi(e){let t,n=e[12](e[23].timestamp)+"",i;return{c(){t=a("div"),i=y(n),s(t,"class","date-sep svelte-16e4bfd")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&128&&n!==(n=o[12](o[23].timestamp)+"")&&j(i,n)},d(o){o&&G(t)}}}function ra(e){let t,n,i,o=new Date(e[23].timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+"",r,c,u,d=(e[23].isSelf?e[6].nickname||e[0].you_self:e[23].nickname)+"",_,v,p,g,h,C=e[23].message+"",b,k,S=e[23].status==="pending"&&Yi(),P=e[23].status==="failed"&&Xi(e);return{c(){t=a("div"),n=a("div"),i=a("span"),r=y(o),c=m(),u=a("span"),_=y(d),v=m(),S&&S.c(),p=m(),P&&P.c(),g=m(),h=a("div"),b=y(C),k=m(),s(i,"class","msg-time svelte-16e4bfd"),s(u,"class","msg-nick svelte-16e4bfd"),s(n,"class","msg-meta svelte-16e4bfd"),s(h,"class","msg-body svelte-16e4bfd"),s(t,"class","msg svelte-16e4bfd"),Z(t,"self",e[23].isSelf),Z(t,"failed",e[23].status==="failed")},m(R,w){H(R,t,w),l(t,n),l(n,i),l(i,r),l(n,c),l(n,u),l(u,_),l(n,v),S&&S.m(n,null),l(n,p),P&&P.m(n,null),l(t,g),l(t,h),l(h,b),l(t,k)},p(R,w){w&128&&o!==(o=new Date(R[23].timestamp).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})+"")&&j(r,o),w&193&&d!==(d=(R[23].isSelf?R[6].nickname||R[0].you_self:R[23].nickname)+"")&&j(_,d),R[23].status==="pending"?S||(S=Yi(),S.c(),S.m(n,p)):S&&(S.d(1),S=null),R[23].status==="failed"?P?P.p(R,w):(P=Xi(R),P.c(),P.m(n,null)):P&&(P.d(1),P=null),w&128&&C!==(C=R[23].message+"")&&j(b,C),w&128&&Z(t,"self",R[23].isSelf),w&128&&Z(t,"failed",R[23].status==="failed")},d(R){R&&G(t),S&&S.d(),P&&P.d()}}}function ca(e){let t,n=e[23].message+"",i;return{c(){t=a("div"),i=y(n),s(t,"class","system-line svelte-16e4bfd")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r&128&&n!==(n=o[23].message+"")&&j(i,n)},d(o){o&&G(t)}}}function Yi(e){let t;return{c(){t=a("span"),t.textContent="…",s(t,"class","msg-status")},m(n,i){H(n,t,i)},d(n){n&&G(t)}}}function Xi(e){let t,n=e[0].retry+"",i,o,r;function c(){return e[18](e[23])}return{c(){t=a("button"),i=y(n),s(t,"class","retry-btn svelte-16e4bfd")},m(u,d){H(u,t,d),l(t,i),o||(r=F(t,"click",c),o=!0)},p(u,d){e=u,d&1&&n!==(n=e[0].retry+"")&&j(i,n)},d(u){u&&G(t),o=!1,r()}}}function Zi(e,t){let n,i=Qi(t[23],t[25],t[7]),o,r,c=i&&Vi(t);function u(v,p){return v[23].system?ca:ra}let d=u(t),_=d(t);return{key:e,first:null,c(){n=Al(),c&&c.c(),o=m(),_.c(),r=Al(),this.first=n},m(v,p){H(v,n,p),c&&c.m(v,p),H(v,o,p),_.m(v,p),H(v,r,p)},p(v,p){t=v,p&128&&(i=Qi(t[23],t[25],t[7])),i?c?c.p(t,p):(c=Vi(t),c.c(),c.m(o.parentNode,o)):c&&(c.d(1),c=null),d===(d=u(t))&&_?_.p(t,p):(_.d(1),_=d(t),_&&(_.c(),_.m(r.parentNode,r)))},d(v){v&&(G(n),G(o),G(r)),c&&c.d(v),_.d(v)}}}function ua(e){let t,n,i,o,r=e[0].chat+"",c,u,d,_,v,p,g=e[0].close_chat+"",h,C,b,k,S=[],P=new Map,R,w,L,D,M,J,V,f,q=e[0].send+"",B,U,T,X,Y=e[7].length===0&&Hi(e),ne=wt(e[7]);const x=N=>N[23].id;for(let N=0;Nn(15,r=f)),_e(e,mt,f=>n(0,c=f)),_e(e,Ll,f=>n(16,u=f)),_e(e,Be,f=>n(6,d=f)),_e(e,Pt,f=>n(17,_=f)),_e(e,Lo,f=>n(7,v=f));let p="",g,h,C=!0;_o(()=>{g&&C&&n(2,g.scrollTop=g.scrollHeight,g)});function b(){if(!g)return;C=g.scrollHeight-g.scrollTop-g.clientHeight<60}async function k(){const f=p.trim();if(!f)return;if(!r.connected){ae(c.error_not_connected,"error");return}if(!r.room){ae(c.send_disabled_no_room,"error");return}let q=f;const B=[...f];B.length>1e3&&(q=B.slice(0,1e3).join(""),ae(c.msg_truncated,"info")),n(1,p=""),h&&n(3,h.style.height="auto",h);const U="local_"+Date.now()+"_"+Math.random().toString(36).slice(2,7);Cs(U,d.nickname||c.you_self,q,!0,"pending");try{u&&u.id?await window.go.main.App.SendChat(u.id,q):await window.go.main.App.BroadcastChat(q),cn(U,"sent")}catch(T){cn(U,"failed"),ae(ge(c.error_send,{err:T}),"error")}}async function S(f){cn(f.id,"pending");try{u&&u.id?await window.go.main.App.SendChat(u.id,f.message):await window.go.main.App.BroadcastChat(f.message),cn(f.id,"sent")}catch(q){cn(f.id,"failed"),ae(ge(c.error_send,{err:q}),"error")}}function P(f){f.key==="Enter"&&!f.shiftKey&&(f.preventDefault(),k())}function R(f){const q=new Date(f),B=new Date,U=new Date(B.getFullYear(),B.getMonth(),B.getDate()),T=new Date(U-864e5),X=new Date(q.getFullYear(),q.getMonth(),q.getDate());return X.getTime()===U.getTime()?c.today:X.getTime()===T.getTime()?c.yesterday:q.toLocaleDateString([],{weekday:"long",month:"short",day:"numeric"})}function w(){h&&(n(3,h.style.height="auto",h),n(3,h.style.height=Math.min(h.scrollHeight,120)+"px",h))}function L(){Pt.set(!1)}const D=f=>S(f);function M(f){sn[f?"unshift":"push"](()=>{g=f,n(2,g)})}function J(f){sn[f?"unshift":"push"](()=>{h=f,n(3,h)})}function V(){p=this.value,n(1,p)}return e.$$.update=()=>{e.$$.dirty&131072&&_&&hs(pn()),e.$$.dirty&98305&&n(5,i=u?ge(c.chat_with,{name:u.nickname}):ge(c.room_chat_title,{room:r.room||c.network})),e.$$.dirty&32768&&n(4,o=r.connected&&!!r.room)},[c,p,g,h,o,i,d,v,b,k,S,P,R,w,L,r,u,_,D,M,J,V]}class fa extends pt{constructor(t){super(),_t(this,t,da,ua,ot,{})}}function $i(e){let t,n=e[9].notif_reconnect_required+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","reconnect-banner svelte-1wpqlpo"),s(t,"role","status")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&512&&n!==(n=o[9].notif_reconnect_required+"")&&j(i,n)},d(o){o&&G(t)}}}function xi(e){let t,n=e[9].apply_update+"",i,o,r;return{c(){t=a("button"),i=y(n),s(t,"class","btn btn-cta"),s(t,"type","button"),t.disabled=e[3]},m(c,u){H(c,t,u),l(t,i),o||(r=F(t,"click",e[12]),o=!0)},p(c,u){u[0]&512&&n!==(n=c[9].apply_update+"")&&j(i,n),u[0]&8&&(t.disabled=c[3])},d(c){c&&G(t),o=!1,r()}}}function _a(e){let t,n=e[9].update_failed+"",i,o,r;return{c(){t=a("p"),i=y(n),o=y(": "),r=y(e[6]),s(t,"class","hint reconnect-hint")},m(c,u){H(c,t,u),l(t,i),l(t,o),l(t,r)},p(c,u){u[0]&512&&n!==(n=c[9].update_failed+"")&&j(i,n),u[0]&64&&j(r,c[6])},d(c){c&&G(t)}}}function pa(e){let t,n=e[9].update_downloading+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","hint")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&512&&n!==(n=o[9].update_downloading+"")&&j(i,n)},d(o){o&&G(t)}}}function ma(e){let t,n=ge(e[9].update_available,{v:e[5]})+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","hint")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&544&&n!==(n=ge(o[9].update_available,{v:o[5]})+"")&&j(i,n)},d(o){o&&G(t)}}}function va(e){let t,n=e[9].update_latest+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","hint")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&512&&n!==(n=o[9].update_latest+"")&&j(i,n)},d(o){o&&G(t)}}}function ha(e){let t,n=e[9].update_checking+"",i;return{c(){t=a("p"),i=y(n),s(t,"class","hint")},m(o,r){H(o,t,r),l(t,i)},p(o,r){r[0]&512&&n!==(n=o[9].update_checking+"")&&j(i,n)},d(o){o&&G(t)}}}function ga(e){let t,n,i,o,r=e[9].settings+"",c,u,d,_=e[9].settings_title+"",v,p,g,h,C,b,k,S,P,R,w,L,D,M,J=e[9].section_connection+"",V,f,q,B,U,T,X,Y,ne=e[9].server_addr+"",x,N,A,K,O,I,le=e[9].nickname+"",re,ye,ke,ze,je,ce,Ae=e[9].server_token+"",Te,ue,te,Ie,Pe,Re,ve=e[9].reconnect_apply+"",we,he,$,oe,Ze,De,pe,Le=e[9].auto_connect+"",et,se,de,z=e[9].auto_connect_desc+"",ee,be,Ce,qe,Me,ie,me,He=e[9].auto_join+"",Il,Ls,mn,vn=e[9].auto_join_desc+"",Ml,Ds,Lt,hn,tt,kt,Ns,gn,bn=e[9].section_network+"",Tl,wn,zs,Dt,kn,Se,yn,jn=e[9].advanced_warn+"",Rl,Is,Nt,Sn,Cn=e[9].connection_mode+"",ql,Ms,at,zt,An=e[9].connection_direct+"",Ol,It,En=e[9].connection_relay+"",Ul,Ts,Pn,Ln=e[9].connection_mode_desc+"",Wl,Rs,Mt,Dn,Nn=e[9].mtu+"",Fl,qs,Qe,Os,zn,In=e[9].mtu_desc+"",Kl,Us,Tt,Mn,Tn=e[9].dns_server+"",Jl,Ws,rt,Fs,Rn,qn=e[9].dns_desc+"",Bl,Ks,Rt,On,Un=e[9].socks5+"",Gl,Js,nt,Wn,Bs,Fn,Kn=e[9].socks5_desc+"",Hl,Gs,qt,Jn,Bn=e[9].stun_server+"",Vl,Hs,ct,Vs,Gn,Hn=e[9].stun_desc+"",Yl,Ys,Ot,Vn,lt,yt,Xs,Yn,Xn=e[9].section_system+"",Xl,Zn,Zs,Ut,Qn,ut,Wt,jt,Qs,$n,xn=e[9].start_windows+"",Zl,$s,dt,el,tl=e[9].updates+"",Ql,xs,vt,nl=e[9].check_updates+"",$l,ei,ti,ni,Ft,ll,st,St,li,sl,il=e[9].section_appearance+"",xl,ol,si,Kt,al,it,Jt,rl,cl=e[9].ui_scale+"",es,ii,Bt,$e,ul,oi,on,dl=(e[0].uiScale??100)+"",ts,ai,ri,fl,_l=e[9].ui_scale_desc+"",ns,ci,Gt,pl,ml=e[9].theme+"",ls,ui,Ht,di,Vt,vl,hl=e[9].language+"",ss,fi,ft,Yt,gl=e[9].language_en+"",is,Xt,bl=e[9].language_ru+"",os,Zt,wl=e[9].language_zh+"",as,_i,pi,Qt,an,kl=e[9].reset+"",rs,mi,rn,yl=e[9].save+"",cs,us,Ct,Q,ds,vi,Fe=e[2]&&$i(e),Ke=e[4]==="available"&&xi(e);function hi(E,W){if(E[4]==="checking")return ha;if(E[4]==="latest")return va;if(E[4]==="available")return ma;if(E[4]==="downloading")return pa;if(E[4]==="error"&&E[6])return _a}let $t=hi(e),Je=$t&&$t(e);return Ht=new ro({}),Ct=new Ps({props:{open:!!e[7],message:e[7]?.message||"",confirmLabel:e[7]?.confirmLabel||e[9].save,danger:!!e[7]?.danger,onConfirm:e[34],onCancel:e[35]}}),{c(){t=a("div"),n=a("div"),i=a("div"),o=a("span"),c=y(r),u=m(),d=a("h2"),v=y(_),p=m(),g=a("span"),h=y("v"),C=y(e[1]),b=m(),k=a("div"),Fe&&Fe.c(),S=m(),P=a("article"),R=a("div"),w=a("button"),L=a("span"),L.textContent="▼",D=m(),M=a("span"),V=y(J),q=m(),B=a("div"),U=a("div"),T=a("div"),X=a("div"),Y=a("label"),x=y(ne),N=m(),A=a("input"),K=m(),O=a("div"),I=a("label"),re=y(le),ye=m(),ke=a("input"),ze=m(),je=a("div"),ce=a("label"),Te=y(Ae),ue=m(),te=a("input"),Pe=m(),Re=a("p"),we=y(ve),he=m(),$=a("label"),oe=a("input"),Ze=m(),De=a("span"),pe=a("span"),et=y(Le),se=m(),de=a("span"),ee=y(z),be=m(),Ce=a("label"),qe=a("input"),Me=m(),ie=a("span"),me=a("span"),Il=y(He),Ls=m(),mn=a("span"),Ml=y(vn),Ds=m(),Lt=a("article"),hn=a("div"),tt=a("button"),kt=a("span"),kt.textContent="▼",Ns=m(),gn=a("span"),Tl=y(bn),zs=m(),Dt=a("div"),kn=a("div"),Se=a("div"),yn=a("p"),Rl=y(jn),Is=m(),Nt=a("div"),Sn=a("label"),ql=y(Cn),Ms=m(),at=a("select"),zt=a("option"),Ol=y(An),It=a("option"),Ul=y(En),Ts=m(),Pn=a("p"),Wl=y(Ln),Rs=m(),Mt=a("div"),Dn=a("label"),Fl=y(Nn),qs=m(),Qe=a("input"),Os=m(),zn=a("p"),Kl=y(In),Us=m(),Tt=a("div"),Mn=a("label"),Jl=y(Tn),Ws=m(),rt=a("input"),Fs=m(),Rn=a("p"),Bl=y(qn),Ks=m(),Rt=a("div"),On=a("label"),Gl=y(Un),Js=m(),nt=a("input"),Bs=m(),Fn=a("p"),Hl=y(Kn),Gs=m(),qt=a("div"),Jn=a("label"),Vl=y(Bn),Hs=m(),ct=a("input"),Vs=m(),Gn=a("p"),Yl=y(Hn),Ys=m(),Ot=a("article"),Vn=a("div"),lt=a("button"),yt=a("span"),yt.textContent="▼",Xs=m(),Yn=a("span"),Xl=y(Xn),Zs=m(),Ut=a("div"),Qn=a("div"),ut=a("div"),Wt=a("label"),jt=a("input"),Qs=m(),$n=a("span"),Zl=y(xn),$s=m(),dt=a("div"),el=a("span"),Ql=y(tl),xs=m(),vt=a("button"),$l=y(nl),ei=m(),Ke&&Ke.c(),ti=m(),Je&&Je.c(),ni=m(),Ft=a("article"),ll=a("div"),st=a("button"),St=a("span"),St.textContent="▼",li=m(),sl=a("span"),xl=y(il),si=m(),Kt=a("div"),al=a("div"),it=a("div"),Jt=a("div"),rl=a("label"),es=y(cl),ii=m(),Bt=a("div"),$e=a("input"),oi=m(),on=a("span"),ts=y(dl),ai=y("%"),ri=m(),fl=a("p"),ns=y(_l),ci=m(),Gt=a("div"),pl=a("span"),ls=y(ml),ui=m(),xe(Ht.$$.fragment),di=m(),Vt=a("div"),vl=a("label"),ss=y(hl),fi=m(),ft=a("select"),Yt=a("option"),is=y(gl),Xt=a("option"),os=y(bl),Zt=a("option"),as=y(wl),pi=m(),Qt=a("div"),an=a("button"),rs=y(kl),mi=m(),rn=a("button"),cs=y(yl),us=m(),xe(Ct.$$.fragment),s(o,"class","label-track"),s(d,"class","svelte-1wpqlpo"),s(g,"class","ver svelte-1wpqlpo"),s(n,"class","section-head svelte-1wpqlpo"),s(L,"class","collapse-chevron"),s(L,"aria-hidden","true"),Z(L,"collapsed",!e[8].connection),s(M,"class","card-title"),s(w,"type","button"),s(w,"class","card-disclosure"),s(w,"aria-expanded",f=e[8].connection),s(R,"class","card-head"),s(Y,"for","cfg-server"),s(A,"id","cfg-server"),s(A,"type","text"),s(A,"placeholder","vps.example.com:8080"),s(X,"class","field"),s(I,"for","cfg-nick"),s(ke,"id","cfg-nick"),s(ke,"type","text"),s(ke,"placeholder","Your nickname"),s(O,"class","field"),s(ce,"for","cfg-token"),s(te,"id","cfg-token"),s(te,"type","password"),s(te,"placeholder",Ie=e[9].server_token_desc),s(je,"class","field"),s(Re,"class","hint reconnect-hint"),s(oe,"type","checkbox"),s(oe,"class","svelte-1wpqlpo"),s(pe,"class","toggle-title svelte-1wpqlpo"),s(de,"class","toggle-label svelte-1wpqlpo"),s($,"class","toggle-row svelte-1wpqlpo"),s(qe,"type","checkbox"),s(qe,"class","svelte-1wpqlpo"),s(me,"class","toggle-title svelte-1wpqlpo"),s(mn,"class","toggle-label svelte-1wpqlpo"),s(Ce,"class","toggle-row svelte-1wpqlpo"),s(T,"class","card-body-pad"),s(U,"class","card-body-inner"),s(B,"class","card-body"),Z(B,"collapsed",!e[8].connection),s(P,"class","card"),s(kt,"class","collapse-chevron"),s(kt,"aria-hidden","true"),Z(kt,"collapsed",!e[8].network),s(gn,"class","card-title"),s(tt,"type","button"),s(tt,"class","card-disclosure"),s(tt,"aria-expanded",wn=e[8].network),s(hn,"class","card-head"),s(yn,"class","hint"),s(Sn,"for","cfg-conn"),zt.__value="direct",fe(zt,zt.__value),It.__value="relay",fe(It,It.__value),s(at,"id","cfg-conn"),e[0].connectionMode===void 0&&El(()=>e[26].call(at)),s(Nt,"class","field"),s(Pn,"class","hint"),s(Dn,"for","cfg-mtu"),s(Qe,"id","cfg-mtu"),s(Qe,"type","number"),s(Qe,"min","576"),s(Qe,"max","9000"),s(Qe,"placeholder","1500"),s(Mt,"class","field"),s(zn,"class","hint"),s(Mn,"for","cfg-dns"),s(rt,"id","cfg-dns"),s(rt,"type","text"),s(rt,"placeholder","system default"),s(Tt,"class","field"),s(Rn,"class","hint"),s(On,"for","cfg-socks"),s(nt,"id","cfg-socks"),s(nt,"type","text"),s(nt,"placeholder",Wn=e[9].socks5_placeholder),s(Rt,"class","field"),s(Fn,"class","hint reconnect-hint"),s(Jn,"for","cfg-stun"),s(ct,"id","cfg-stun"),s(ct,"type","text"),s(ct,"placeholder","stun.l.google.com:19302"),s(qt,"class","field"),s(Gn,"class","hint reconnect-hint"),s(Se,"class","card-body-pad"),s(kn,"class","card-body-inner"),s(Dt,"class","card-body"),Z(Dt,"collapsed",!e[8].network),s(Lt,"class","card"),s(yt,"class","collapse-chevron"),s(yt,"aria-hidden","true"),Z(yt,"collapsed",!e[8].system),s(Yn,"class","card-title"),s(lt,"type","button"),s(lt,"class","card-disclosure"),s(lt,"aria-expanded",Zn=e[8].system),s(Vn,"class","card-head"),s(jt,"type","checkbox"),s(jt,"class","svelte-1wpqlpo"),s($n,"class","toggle-title svelte-1wpqlpo"),s(Wt,"class","toggle-row svelte-1wpqlpo"),s(el,"class","toggle-title svelte-1wpqlpo"),s(vt,"class","btn btn-ghost"),s(vt,"type","button"),vt.disabled=e[3],s(dt,"class","update-row svelte-1wpqlpo"),s(ut,"class","card-body-pad"),s(Qn,"class","card-body-inner"),s(Ut,"class","card-body"),Z(Ut,"collapsed",!e[8].system),s(Ot,"class","card"),s(St,"class","collapse-chevron"),s(St,"aria-hidden","true"),Z(St,"collapsed",!e[8].appearance),s(sl,"class","card-title"),s(st,"type","button"),s(st,"class","card-disclosure"),s(st,"aria-expanded",ol=e[8].appearance),s(ll,"class","card-head"),s(rl,"for","cfg-scale"),s($e,"id","cfg-scale"),s($e,"type","range"),s($e,"min","75"),s($e,"max","150"),s($e,"step","5"),$e.value=ul=e[0].uiScale??100,s($e,"class","svelte-1wpqlpo"),s(on,"class","scale-value svelte-1wpqlpo"),s(Bt,"class","scale-row svelte-1wpqlpo"),s(Jt,"class","field"),s(fl,"class","hint"),s(pl,"class","toggle-title svelte-1wpqlpo"),s(Gt,"class","theme-row svelte-1wpqlpo"),s(vl,"for","cfg-lang"),Yt.__value="en",fe(Yt,Yt.__value),Xt.__value="ru",fe(Xt,Xt.__value),Zt.__value="zh",fe(Zt,Zt.__value),s(ft,"id","cfg-lang"),s(Vt,"class","field"),s(it,"class","card-body-pad"),s(al,"class","card-body-inner"),s(Kt,"class","card-body"),Z(Kt,"collapsed",!e[8].appearance),s(Ft,"class","card"),s(k,"class","settings-content svelte-1wpqlpo"),s(an,"class","btn btn-ghost"),s(rn,"class","btn btn-cta"),s(Qt,"class","commit-plate svelte-1wpqlpo"),s(t,"class","settings-view svelte-1wpqlpo")},m(E,W){H(E,t,W),l(t,n),l(n,i),l(i,o),l(o,c),l(i,u),l(i,d),l(d,v),l(n,p),l(n,g),l(g,h),l(g,C),l(t,b),l(t,k),Fe&&Fe.m(k,null),l(k,S),l(k,P),l(P,R),l(R,w),l(w,L),l(w,D),l(w,M),l(M,V),l(P,q),l(P,B),l(B,U),l(U,T),l(T,X),l(X,Y),l(Y,x),l(X,N),l(X,A),fe(A,e[0].serverAddr),l(T,K),l(T,O),l(O,I),l(I,re),l(O,ye),l(O,ke),fe(ke,e[0].nickname),l(T,ze),l(T,je),l(je,ce),l(ce,Te),l(je,ue),l(je,te),fe(te,e[0].serverToken),l(T,Pe),l(T,Re),l(Re,we),l(T,he),l(T,$),l($,oe),oe.checked=e[0].autoConnect,l($,Ze),l($,De),l(De,pe),l(pe,et),l(De,se),l(De,de),l(de,ee),l(T,be),l(T,Ce),l(Ce,qe),qe.checked=e[0].autoJoinLastRoom,l(Ce,Me),l(Ce,ie),l(ie,me),l(me,Il),l(ie,Ls),l(ie,mn),l(mn,Ml),l(k,Ds),l(k,Lt),l(Lt,hn),l(hn,tt),l(tt,kt),l(tt,Ns),l(tt,gn),l(gn,Tl),l(Lt,zs),l(Lt,Dt),l(Dt,kn),l(kn,Se),l(Se,yn),l(yn,Rl),l(Se,Is),l(Se,Nt),l(Nt,Sn),l(Sn,ql),l(Nt,Ms),l(Nt,at),l(at,zt),l(zt,Ol),l(at,It),l(It,Ul),Sl(at,e[0].connectionMode,!0),l(Se,Ts),l(Se,Pn),l(Pn,Wl),l(Se,Rs),l(Se,Mt),l(Mt,Dn),l(Dn,Fl),l(Mt,qs),l(Mt,Qe),fe(Qe,e[0].mtu),l(Se,Os),l(Se,zn),l(zn,Kl),l(Se,Us),l(Se,Tt),l(Tt,Mn),l(Mn,Jl),l(Tt,Ws),l(Tt,rt),fe(rt,e[0].dnsServer),l(Se,Fs),l(Se,Rn),l(Rn,Bl),l(Se,Ks),l(Se,Rt),l(Rt,On),l(On,Gl),l(Rt,Js),l(Rt,nt),fe(nt,e[0].socks5Proxy),l(Se,Bs),l(Se,Fn),l(Fn,Hl),l(Se,Gs),l(Se,qt),l(qt,Jn),l(Jn,Vl),l(qt,Hs),l(qt,ct),fe(ct,e[0].stunServer),l(Se,Vs),l(Se,Gn),l(Gn,Yl),l(k,Ys),l(k,Ot),l(Ot,Vn),l(Vn,lt),l(lt,yt),l(lt,Xs),l(lt,Yn),l(Yn,Xl),l(Ot,Zs),l(Ot,Ut),l(Ut,Qn),l(Qn,ut),l(ut,Wt),l(Wt,jt),jt.checked=e[0].startWithWindows,l(Wt,Qs),l(Wt,$n),l($n,Zl),l(ut,$s),l(ut,dt),l(dt,el),l(el,Ql),l(dt,xs),l(dt,vt),l(vt,$l),l(dt,ei),Ke&&Ke.m(dt,null),l(ut,ti),Je&&Je.m(ut,null),l(k,ni),l(k,Ft),l(Ft,ll),l(ll,st),l(st,St),l(st,li),l(st,sl),l(sl,xl),l(Ft,si),l(Ft,Kt),l(Kt,al),l(al,it),l(it,Jt),l(Jt,rl),l(rl,es),l(Jt,ii),l(Jt,Bt),l(Bt,$e),l(Bt,oi),l(Bt,on),l(on,ts),l(on,ai),l(it,ri),l(it,fl),l(fl,ns),l(it,ci),l(it,Gt),l(Gt,pl),l(pl,ls),l(Gt,ui),Ve(Ht,Gt,null),l(it,di),l(it,Vt),l(Vt,vl),l(vl,ss),l(Vt,fi),l(Vt,ft),l(ft,Yt),l(Yt,is),l(ft,Xt),l(Xt,os),l(ft,Zt),l(Zt,as),Sl(ft,e[0].lang||e[10]),l(t,pi),l(t,Qt),l(Qt,an),l(an,rs),l(Qt,mi),l(Qt,rn),l(rn,cs),H(E,us,W),Ve(Ct,E,W),Q=!0,ds||(vi=[F(w,"click",e[19]),F(A,"input",e[20]),F(ke,"input",e[21]),F(te,"input",e[22]),F(oe,"change",e[23]),F(qe,"change",e[24]),F(tt,"click",e[25]),F(at,"change",e[26]),F(Qe,"input",e[27]),F(rt,"input",e[28]),F(nt,"input",e[29]),F(ct,"input",e[30]),F(lt,"click",e[31]),F(jt,"change",e[32]),F(vt,"click",e[11]),F(st,"click",e[33]),F($e,"input",e[15]),F(ft,"change",e[16]),F(an,"click",e[14]),F(rn,"click",e[13])],ds=!0)},p(E,W){(!Q||W[0]&512)&&r!==(r=E[9].settings+"")&&j(c,r),(!Q||W[0]&512)&&_!==(_=E[9].settings_title+"")&&j(v,_),(!Q||W[0]&2)&&j(C,E[1]),E[2]?Fe?Fe.p(E,W):(Fe=$i(E),Fe.c(),Fe.m(k,S)):Fe&&(Fe.d(1),Fe=null),(!Q||W[0]&256)&&Z(L,"collapsed",!E[8].connection),(!Q||W[0]&512)&&J!==(J=E[9].section_connection+"")&&j(V,J),(!Q||W[0]&256&&f!==(f=E[8].connection))&&s(w,"aria-expanded",f),(!Q||W[0]&512)&&ne!==(ne=E[9].server_addr+"")&&j(x,ne),W[0]&1&&A.value!==E[0].serverAddr&&fe(A,E[0].serverAddr),(!Q||W[0]&512)&&le!==(le=E[9].nickname+"")&&j(re,le),W[0]&1&&ke.value!==E[0].nickname&&fe(ke,E[0].nickname),(!Q||W[0]&512)&&Ae!==(Ae=E[9].server_token+"")&&j(Te,Ae),(!Q||W[0]&512&&Ie!==(Ie=E[9].server_token_desc))&&s(te,"placeholder",Ie),W[0]&1&&te.value!==E[0].serverToken&&fe(te,E[0].serverToken),(!Q||W[0]&512)&&ve!==(ve=E[9].reconnect_apply+"")&&j(we,ve),W[0]&1&&(oe.checked=E[0].autoConnect),(!Q||W[0]&512)&&Le!==(Le=E[9].auto_connect+"")&&j(et,Le),(!Q||W[0]&512)&&z!==(z=E[9].auto_connect_desc+"")&&j(ee,z),W[0]&1&&(qe.checked=E[0].autoJoinLastRoom),(!Q||W[0]&512)&&He!==(He=E[9].auto_join+"")&&j(Il,He),(!Q||W[0]&512)&&vn!==(vn=E[9].auto_join_desc+"")&&j(Ml,vn),(!Q||W[0]&256)&&Z(B,"collapsed",!E[8].connection),(!Q||W[0]&256)&&Z(kt,"collapsed",!E[8].network),(!Q||W[0]&512)&&bn!==(bn=E[9].section_network+"")&&j(Tl,bn),(!Q||W[0]&256&&wn!==(wn=E[8].network))&&s(tt,"aria-expanded",wn),(!Q||W[0]&512)&&jn!==(jn=E[9].advanced_warn+"")&&j(Rl,jn),(!Q||W[0]&512)&&Cn!==(Cn=E[9].connection_mode+"")&&j(ql,Cn),(!Q||W[0]&512)&&An!==(An=E[9].connection_direct+"")&&j(Ol,An),(!Q||W[0]&512)&&En!==(En=E[9].connection_relay+"")&&j(Ul,En),W[0]&1&&Sl(at,E[0].connectionMode),(!Q||W[0]&512)&&Ln!==(Ln=E[9].connection_mode_desc+"")&&j(Wl,Ln),(!Q||W[0]&512)&&Nn!==(Nn=E[9].mtu+"")&&j(Fl,Nn),W[0]&1&&io(Qe.value)!==E[0].mtu&&fe(Qe,E[0].mtu),(!Q||W[0]&512)&&In!==(In=E[9].mtu_desc+"")&&j(Kl,In),(!Q||W[0]&512)&&Tn!==(Tn=E[9].dns_server+"")&&j(Jl,Tn),W[0]&1&&rt.value!==E[0].dnsServer&&fe(rt,E[0].dnsServer),(!Q||W[0]&512)&&qn!==(qn=E[9].dns_desc+"")&&j(Bl,qn),(!Q||W[0]&512)&&Un!==(Un=E[9].socks5+"")&&j(Gl,Un),(!Q||W[0]&512&&Wn!==(Wn=E[9].socks5_placeholder))&&s(nt,"placeholder",Wn),W[0]&1&&nt.value!==E[0].socks5Proxy&&fe(nt,E[0].socks5Proxy),(!Q||W[0]&512)&&Kn!==(Kn=E[9].socks5_desc+"")&&j(Hl,Kn),(!Q||W[0]&512)&&Bn!==(Bn=E[9].stun_server+"")&&j(Vl,Bn),W[0]&1&&ct.value!==E[0].stunServer&&fe(ct,E[0].stunServer),(!Q||W[0]&512)&&Hn!==(Hn=E[9].stun_desc+"")&&j(Yl,Hn),(!Q||W[0]&256)&&Z(Dt,"collapsed",!E[8].network),(!Q||W[0]&256)&&Z(yt,"collapsed",!E[8].system),(!Q||W[0]&512)&&Xn!==(Xn=E[9].section_system+"")&&j(Xl,Xn),(!Q||W[0]&256&&Zn!==(Zn=E[8].system))&&s(lt,"aria-expanded",Zn),W[0]&1&&(jt.checked=E[0].startWithWindows),(!Q||W[0]&512)&&xn!==(xn=E[9].start_windows+"")&&j(Zl,xn),(!Q||W[0]&512)&&tl!==(tl=E[9].updates+"")&&j(Ql,tl),(!Q||W[0]&512)&&nl!==(nl=E[9].check_updates+"")&&j($l,nl),(!Q||W[0]&8)&&(vt.disabled=E[3]),E[4]==="available"?Ke?Ke.p(E,W):(Ke=xi(E),Ke.c(),Ke.m(dt,null)):Ke&&(Ke.d(1),Ke=null),$t===($t=hi(E))&&Je?Je.p(E,W):(Je&&Je.d(1),Je=$t&&$t(E),Je&&(Je.c(),Je.m(ut,null))),(!Q||W[0]&256)&&Z(Ut,"collapsed",!E[8].system),(!Q||W[0]&256)&&Z(St,"collapsed",!E[8].appearance),(!Q||W[0]&512)&&il!==(il=E[9].section_appearance+"")&&j(xl,il),(!Q||W[0]&256&&ol!==(ol=E[8].appearance))&&s(st,"aria-expanded",ol),(!Q||W[0]&512)&&cl!==(cl=E[9].ui_scale+"")&&j(es,cl),(!Q||W[0]&1&&ul!==(ul=E[0].uiScale??100))&&($e.value=ul),(!Q||W[0]&1)&&dl!==(dl=(E[0].uiScale??100)+"")&&j(ts,dl),(!Q||W[0]&512)&&_l!==(_l=E[9].ui_scale_desc+"")&&j(ns,_l),(!Q||W[0]&512)&&ml!==(ml=E[9].theme+"")&&j(ls,ml),(!Q||W[0]&512)&&hl!==(hl=E[9].language+"")&&j(ss,hl),(!Q||W[0]&512)&&gl!==(gl=E[9].language_en+"")&&j(is,gl),(!Q||W[0]&512)&&bl!==(bl=E[9].language_ru+"")&&j(os,bl),(!Q||W[0]&512)&&wl!==(wl=E[9].language_zh+"")&&j(as,wl),(!Q||W[0]&1025&&_i!==(_i=E[0].lang||E[10]))&&Sl(ft,E[0].lang||E[10]),(!Q||W[0]&256)&&Z(Kt,"collapsed",!E[8].appearance),(!Q||W[0]&512)&&kl!==(kl=E[9].reset+"")&&j(rs,kl),(!Q||W[0]&512)&&yl!==(yl=E[9].save+"")&&j(cs,yl);const At={};W[0]&128&&(At.open=!!E[7]),W[0]&128&&(At.message=E[7]?.message||""),W[0]&640&&(At.confirmLabel=E[7]?.confirmLabel||E[9].save),W[0]&128&&(At.danger=!!E[7]?.danger),W[0]&128&&(At.onConfirm=E[34]),W[0]&128&&(At.onCancel=E[35]),Ct.$set(At)},i(E){Q||(Oe(Ht.$$.fragment,E),Oe(Ct.$$.fragment,E),Q=!0)},o(E){Ge(Ht.$$.fragment,E),Ge(Ct.$$.fragment,E),Q=!1},d(E){E&&(G(t),G(us)),Fe&&Fe.d(),Ke&&Ke.d(),Je&&Je.d(),Ye(Ht),Ye(Ct,E),ds=!1,Ne(vi)}}}function ba(e,t,n){let i,o,r;_e(e,Be,I=>n(18,i=I)),_e(e,mt,I=>n(9,o=I)),_e(e,Es,I=>n(10,r=I));let c={...i},u="1.0.0",d=!1,_=!1,v="",p="",g="",h=null;async function C(){n(3,_=!0),n(4,v="checking"),n(6,g=""),n(5,p="");try{const I=await window.go.main.App.CheckForUpdate();I?.available?(n(4,v="available"),n(5,p=I.latest||"")):n(4,v="latest")}catch(I){n(4,v="error"),n(6,g=String(I)),ae(o.error_update_check+I,"error")}finally{n(3,_=!1)}}async function b(){n(7,h={message:o.confirm_update,confirmLabel:o.apply_update,run:async()=>{n(3,_=!0),n(4,v="downloading"),n(6,g="");try{await window.go.main.App.ApplyUpdate(),ae(o.notif_updating,"info")}catch(I){n(4,v="error"),n(6,g=String(I)),n(3,_=!1),ae(o.error_update+I,"error")}}})}async function k(){gt(Be,i={...c},i);try{n(2,d=!!await window.go.main.App.SaveSettings(c)),c.lang&&un(c.lang),ae(o.notif_settings_saved,"info"),d&&ae(o.notif_reconnect_required,"info")}catch(I){ae(o.error_save+I,"error")}}async function S(){n(7,h={message:o.confirm_reset,confirmLabel:o.reset,danger:!0,run:async()=>{try{n(0,c=await window.go.main.App.ResetSettings()),gt(Be,i={...c},i),n(2,d=!1),c.lang&&un(c.lang),ae(o.notif_settings_saved,"info")}catch(I){ae(o.error_save+I,"error")}}})}function P(I){const le=Math.min(150,Math.max(75,Number(I.target.value)||100));n(0,c.uiScale=le,c),gt(Be,i={...i,uiScale:le},i)}function R(I){n(0,c.lang=I.target.value,c),un(I.target.value)}let w={connection:!0,network:!1,system:!1,appearance:!0};function L(I){n(8,w={...w,[I]:!w[I]})}Dl(async()=>{try{const I=await window.go.main.App.GetSettings();if(I){const le=i.theme||I.theme;n(0,c={...c,...I,theme:le}),c.connectionMode||n(0,c.connectionMode="direct",c),gt(Be,i={...c,theme:le},i),c.lang&&un(c.lang)}window.go.main.App.GetVersion&&n(1,u=await window.go.main.App.GetVersion())}catch{}});const D=()=>L("connection");function M(){c.serverAddr=this.value,n(0,c),n(18,i)}function J(){c.nickname=this.value,n(0,c),n(18,i)}function V(){c.serverToken=this.value,n(0,c),n(18,i)}function f(){c.autoConnect=this.checked,n(0,c),n(18,i)}function q(){c.autoJoinLastRoom=this.checked,n(0,c),n(18,i)}const B=()=>L("network");function U(){c.connectionMode=fo(this),n(0,c),n(18,i)}function T(){c.mtu=io(this.value),n(0,c),n(18,i)}function X(){c.dnsServer=this.value,n(0,c),n(18,i)}function Y(){c.socks5Proxy=this.value,n(0,c),n(18,i)}function ne(){c.stunServer=this.value,n(0,c),n(18,i)}const x=()=>L("system");function N(){c.startWithWindows=this.checked,n(0,c),n(18,i)}const A=()=>L("appearance"),K=async()=>{const I=h?.run;n(7,h=null),I&&await I()},O=()=>n(7,h=null);return e.$$.update=()=>{e.$$.dirty[0]&262145&&i.theme&&c.theme!==i.theme&&n(0,c.theme=i.theme,c)},[c,u,d,_,v,p,g,h,w,o,r,C,b,k,S,P,R,L,i,D,M,J,V,f,q,B,U,T,X,Y,ne,x,N,A,K,O]}class wa extends pt{constructor(t){super(),_t(this,t,ba,ga,ot,{},null,[-1,-1])}}function eo(e,t,n){const i=e.slice();return i[17]=t[n],i}function ka(e){let t,n,i,o,r,c,u,d,_,v,p,g,h,C,b,k,S,P,R,w,L,D,M,J,V;return n=new ea({props:{pathAggregate:e[3]}}),c=new Fo({}),h=new Xo({props:{pathAggregate:e[3]}}),S=new fa({}),L=new wa({}),{c(){t=a("div"),xe(n.$$.fragment),i=m(),o=a("div"),r=a("div"),xe(c.$$.fragment),u=m(),d=a("div"),_=m(),v=a("main"),p=a("div"),g=a("div"),xe(h.$$.fragment),b=m(),k=a("div"),xe(S.$$.fragment),R=m(),w=a("div"),xe(L.$$.fragment),s(d,"class","drag-handle svelte-8tj0mu"),Z(d,"active",e[2]),s(r,"class","sidebar-wrapper svelte-8tj0mu"),bi(r,"width",e[1]+"px"),s(g,"class","peer-pane svelte-8tj0mu"),g.hidden=C=e[0]==="settings",s(k,"class","chat-pane svelte-8tj0mu"),k.hidden=P=e[0]==="settings"||!e[5],s(w,"class","settings-pane svelte-8tj0mu"),w.hidden=D=e[0]!=="settings",s(p,"class","workspace svelte-8tj0mu"),s(v,"class","main-area svelte-8tj0mu"),s(o,"class","layout svelte-8tj0mu"),s(t,"class","shell bench svelte-8tj0mu")},m(f,q){H(f,t,q),Ve(n,t,null),l(t,i),l(t,o),l(o,r),Ve(c,r,null),l(r,u),l(r,d),l(o,_),l(o,v),l(v,p),l(p,g),Ve(h,g,null),l(p,b),l(p,k),Ve(S,k,null),l(p,R),l(p,w),Ve(L,w,null),M=!0,J||(V=F(d,"mousedown",e[8]),J=!0)},p(f,q){const B={};q&8&&(B.pathAggregate=f[3]),n.$set(B),(!M||q&4)&&Z(d,"active",f[2]),(!M||q&2)&&bi(r,"width",f[1]+"px");const U={};q&8&&(U.pathAggregate=f[3]),h.$set(U),(!M||q&1&&C!==(C=f[0]==="settings"))&&(g.hidden=C),(!M||q&33&&P!==(P=f[0]==="settings"||!f[5]))&&(k.hidden=P),(!M||q&1&&D!==(D=f[0]!=="settings"))&&(w.hidden=D)},i(f){M||(Oe(n.$$.fragment,f),Oe(c.$$.fragment,f),Oe(h.$$.fragment,f),Oe(S.$$.fragment,f),Oe(L.$$.fragment,f),M=!0)},o(f){Ge(n.$$.fragment,f),Ge(c.$$.fragment,f),Ge(h.$$.fragment,f),Ge(S.$$.fragment,f),Ge(L.$$.fragment,f),M=!1},d(f){f&&G(t),Ye(n),Ye(c),Ye(h),Ye(S),Ye(L),J=!1,V()}}}function ya(e){let t,n,i,o,r,c,u,d;return u=new aa({}),{c(){t=a("div"),n=m(),i=a("div"),o=m(),r=a("div"),c=a("div"),xe(u.$$.fragment),s(t,"class","space-bg"),s(t,"aria-hidden","true"),s(i,"class","space-dust"),s(i,"aria-hidden","true"),s(c,"class","fullscreen-connect svelte-8tj0mu"),s(r,"class","shell connect-shell svelte-8tj0mu")},m(_,v){H(_,t,v),H(_,n,v),H(_,i,v),H(_,o,v),H(_,r,v),l(r,c),Ve(u,c,null),d=!0},p:Ee,i(_){d||(Oe(u.$$.fragment,_),d=!0)},o(_){Ge(u.$$.fragment,_),d=!1},d(_){_&&(G(t),G(n),G(i),G(o),G(r)),Ye(u)}}}function to(e){let t,n,i=e[6].msg+"",o,r,c,u=e[4].dismiss_error+"",d,_,v,p;return{c(){t=a("div"),n=a("span"),o=y(i),r=m(),c=a("button"),d=y(u),s(n,"class","error-strip-msg svelte-8tj0mu"),s(c,"type","button"),s(c,"class","error-strip-dismiss svelte-8tj0mu"),s(c,"aria-label",_=e[4].dismiss_error),s(t,"class","error-strip svelte-8tj0mu"),s(t,"role","alert")},m(g,h){H(g,t,h),l(t,n),l(n,o),l(t,r),l(t,c),l(c,d),v||(p=F(c,"click",_n),v=!0)},p(g,h){h&64&&i!==(i=g[6].msg+"")&&j(o,i),h&16&&u!==(u=g[4].dismiss_error+"")&&j(d,u),h&16&&_!==(_=g[4].dismiss_error)&&s(c,"aria-label",_)},d(g){g&&G(t),v=!1,p()}}}function no(e,t){let n,i=t[17].msg+"",o,r,c;return{key:e,first:null,c(){n=a("div"),o=y(i),r=m(),s(n,"class",c="notification "+t[17].type+" svelte-8tj0mu"),s(n,"role","status"),this.first=n},m(u,d){H(u,n,d),l(n,o),l(n,r)},p(u,d){t=u,d&128&&i!==(i=t[17].msg+"")&&j(o,i),d&128&&c!==(c="notification "+t[17].type+" svelte-8tj0mu")&&s(n,"class",c)},d(u){u&&G(n)}}}function ja(e){let t,n,i,o,r=[],c=new Map,u,d;const _=[ya,ka],v=[];function p(b,k){return b[0]==="connect"?0:1}t=p(e),n=v[t]=_[t](e);let g=e[6]&&to(e),h=wt(e[7]);const C=b=>b[17].id;for(let b=0;b{v[S]=null}),bo(),n=v[t],n?n.p(b,k):(n=v[t]=_[t](b),n.c()),Oe(n,1),n.m(i.parentNode,i)),b[6]?g?g.p(b,k):(g=to(b),g.c(),g.m(o.parentNode,o)):g&&(g.d(1),g=null),k&128&&(h=wt(b[7]),r=zl(r,k,C,1,b,h,c,u.parentNode,Nl,no,u,eo))},i(b){d||(Oe(n),d=!0)},o(b){Ge(n),d=!1},d(b){b&&(G(i),G(o),G(u)),v[t].d(b),g&&g.d(b);for(let k=0;ki.connected&&(i.path==="relay"||i.path==="ws"))?"relay":"direct":"disconnected"}async function lo(e){if(e.key==="F11"){e.preventDefault();try{await window.runtime?.WindowIsFullscreen?.()?window.runtime.WindowUnfullscreen():window.runtime.WindowFullscreen()}catch{}}}function Aa(e,t,n){let i,o,r,c,u,d,_,v,p;_e(e,mt,w=>n(4,o=w)),_e(e,Be,w=>n(9,r=w)),_e(e,ps,w=>n(10,c=w)),_e(e,We,w=>n(11,u=w)),_e(e,Ue,w=>n(0,d=w)),_e(e,Pt,w=>n(5,_=w)),_e(e,Pl,w=>n(6,v=w)),_e(e,ms,w=>n(7,p=w));let g=220,h=!1,C,b,k=!0;function S(w){n(2,h=!0),C=w.clientX,b=g,document.addEventListener("mousemove",P),document.addEventListener("mouseup",R),w.preventDefault()}function P(w){if(!h)return;const L=b+(w.clientX-C);n(1,g=Math.max(140,Math.min(400,L)))}function R(){n(2,h=!1),document.removeEventListener("mousemove",P),document.removeEventListener("mouseup",R)}return Dl(async()=>{window.addEventListener("keydown",lo);try{const w=await window.go.main.App.LoadConfig();w&&(Be.set({...r,...w}),w.lang&&un(w.lang))}catch{}window.runtime?.EventsOn&&(window.runtime.EventsOn("status_changed",w=>{k&&(We.set(w),!w.connected&&!w.reconnecting&&Ue.set("connect"))}),window.runtime.EventsOn("peers_changed",w=>{k&&ps.set(w||[])}),window.runtime.EventsOn("error",w=>{k&&ae(w,"error")}),window.runtime.EventsOn("chat_message",w=>{k&&Cs(w.fromID,w.nickname,w.message,!1,"sent",!1,!!w.isDM)}),window.runtime.EventsOn("system_chat",w=>{k&&Po(w.message||"")}),window.runtime.EventsOn("room_deleted",w=>{k&&(ae(o.notif_room_deleted,"error"),Ue.set("network"))}),window.runtime.EventsOn("auto_join_skipped",w=>{if(!k)return;const L=w?.room||"";ae(ge(o.notif_auto_join_skipped,{name:L}),"info")}))}),oo(()=>{k=!1,window.removeEventListener("keydown",lo),document.removeEventListener("mousemove",P),document.removeEventListener("mouseup",R),window.runtime?.EventsOff&&(window.runtime.EventsOff("status_changed"),window.runtime.EventsOff("peers_changed"),window.runtime.EventsOff("error"),window.runtime.EventsOff("chat_message"),window.runtime.EventsOff("system_chat"),window.runtime.EventsOff("room_deleted"),window.runtime.EventsOff("auto_join_skipped"))}),e.$$.update=()=>{if(e.$$.dirty&512){const w=Sa(r.uiScale)/100;document.documentElement.style.zoom=String(w)}if(e.$$.dirty&513){const w=document.documentElement,L=r.theme==="light";w.classList.toggle("light-theme",L),w.dataset.theme=L?"light":"dark",w.dataset.app=d==="connect"?"connect":"connected"}e.$$.dirty&3072&&n(3,i=Ca(u,c))},[d,g,h,i,o,_,v,p,S,r,c,u]}class Ea extends pt{constructor(t){super(),_t(this,t,Aa,ja,ot,{})}}new Ea({target:document.getElementById("app")}); diff --git a/client/frontend/dist/index.html b/client/frontend/dist/index.html index 2d4f28e..83f23ed 100644 --- a/client/frontend/dist/index.html +++ b/client/frontend/dist/index.html @@ -7,8 +7,8 @@ Entangled VPN - - + +
      diff --git a/client/frontend/src/App.svelte b/client/frontend/src/App.svelte index 6929c83..82ae039 100644 --- a/client/frontend/src/App.svelte +++ b/client/frontend/src/App.svelte @@ -40,6 +40,7 @@ } $: pathAggregate = derivePathAggregate($status, $peers) + $: relayCount = ($peers || []).filter((p) => p.connected && (p.path === 'relay' || p.path === 'ws')).length function onDragStart(e) { isDragging = true @@ -87,6 +88,7 @@ if (!mounted) return status.set(data) if (!data.connected && !data.reconnecting) { + chatOpen.set(false) view.set('connect') } }) @@ -154,7 +156,7 @@ FORM: Oscilloscope signal-bench fused with PRODUCT B&W. Seed 82f5fa76. Comp A topology. User B&W steer. FINISH: unreviewed and undocumented is unfinished; this build ends with the finish review, the verdict, and DESIGN.md --> - +