From 48baeceaa8ff8a5ac263f380ce81d57253642ca2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 7 Sep 2026 19:50:06 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=95=BF=E6=8C=89=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E6=B0=94=E6=B3=A1=E5=BC=B9=E5=87=BA=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E8=8F=9C=E5=8D=95=E6=97=B6=EF=BC=8C=E6=B5=8F=E8=A7=88?= =?UTF-8?q?=E5=99=A8/=E7=B3=BB=E7=BB=9F=E5=8E=9F=E7=94=9F=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E8=B7=9F=E7=9D=80=E4=B8=80=E8=B5=B7?= =?UTF-8?q?=E5=BC=B9=E5=87=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit chat-message.jsx 新增 suppressNativeContextMenu,在气泡上监听 contextmenu 事件并 preventDefault, 避免长按(或桌面端右键/触屏模拟长按)触发的原生上下文菜单和应用自己的长按菜单重叠显示。 css/base.css 给 .bubble 补了 -webkit-touch-callout:none,同时覆盖 iOS Safari 那条独立于 contextmenu 事件之外的长按呼出菜单(复制/查询/分享...),不影响 user-select,桌面端正常的 点击拖拽选字复制不受影响。 Co-Authored-By: Claude Sonnet 5 --- css/base.css | 5 +++++ css/base.min.css | 2 +- src/widgets/chat-message.jsx | 12 +++++++++++- umd/src_views_messages-view_jsx.dev.js | 5 +++++ umd/src_views_messages-view_jsx.dev.js.map | 2 +- 5 files changed, 23 insertions(+), 3 deletions(-) diff --git a/css/base.css b/css/base.css index a0a605cd..30541c52 100644 --- a/css/base.css +++ b/css/base.css @@ -4586,6 +4586,11 @@ video { transition: ease-out background-color 0.5s; transition-delay: 0.3s; filter: drop-shadow(0.5px 0.5px 0.7px var(--clr-shadow-bubble-drop)); + /* iOS Safari's press-and-hold callout (Copy/Look Up/Share...) is a separate mechanism from the + `contextmenu` DOM event suppressed in chat-message.jsx -- needs its own opt-out so it doesn't + stack with our own long-press menu. Doesn't touch user-select, so normal click-drag text + selection on desktop is untouched. */ + -webkit-touch-callout: none; } .chat-box li.single { diff --git a/css/base.min.css b/css/base.min.css index 9124d055..768cc24d 100644 --- a/css/base.min.css +++ b/css/base.min.css @@ -1 +1 @@ -:root{color-scheme:light dark;--message-text-size:10pt;--caption-panel-height:4rem;--wallpaper-url:url(../img/bkg/a00.png);--wallpaper-repeat:repeat;--wallpaper-blur:0px;--wallpaper-invert:0;--wallpaper-brightness:1;--wallpaper-size:contain;--wallpaper-position:center;--clr-bright:light-dark(#fff,#181818);--clr-dark:light-dark(#000,#fff);--clr-transparent:transparent;--clr-std-gray:gray;--clr-std-ltgray:light-dark(silver,#3f3f3f);--clr-std-teal:teal;--clr-std-grey:grey;--clr-std-orange:orange;--clr-primary-accent:light-dark(#2094f3,#0e6dba);--clr-primary-accent-hover:light-dark(#0a6ebd,#116ab4);--clr-primary-accent-focus-shadow:light-dark(rgba(33,150,243,.25),rgba(3,7,12,.25));--clr-primary-accent-transparent-medium:light-dark(rgba(33,150,243,.3),rgba(20,70,120,.3));--clr-primary-action:light-dark(#1e89e6,#1571c1);--clr-primary-action-hover:light-dark(#2962ff,#0037b8);--clr-secondary-accent:light-dark(#0097a8,#006570);--clr-primary-light-blue:light-dark(#bcdefb,#78a0be);--clr-light-blue-accent:light-dark(#0398e2,#0379b5);--clr-body-background:var(--clr-std-ltgray);--clr-text-primary:light-dark(#666,#999);--clr-text-secondary:light-dark(#757575,#8a8a8a);--clr-text-tertiary:light-dark(#999,#787878);--clr-text-tertiary-activated:#888;--clr-text-placeholder:light-dark(#bbb,#555);--clr-text-disabled:light-dark(#888,#777);--clr-border-light:light-dark(#ccc,#555);--clr-border-muted:light-dark(#ddd,#444);--clr-background-off-white:light-dark(#fafafa,#222);--clr-background-light-gray:light-dark(#f0f0f0,#0f0f0f);--clr-background-extra-light-gray:light-dark(#eee,#222);--clr-background-blue-gray-50:light-dark(#edf0f2,#202c33);--clr-background-blue-gray-75:light-dark(#e1e8eb,#182124);--clr-background-blue-gray-100:light-dark(#cfd8dc,#20272a);--clr-background-blue-gray-300:light-dark(#b0bec5,#354146);--clr-blue-wash-light:light-dark(#f0f0ff,#22222d);--clr-blue-wash-medium:light-dark(#d8e8ff,#123550);--clr-primary-wash:light-dark(#e3f2fd,#072f45);--clr-indigo-50:light-dark(#e8eaf6,#1a2c44);--clr-danger-text:light-dark(#d33131,#931f1f);--clr-danger-text-hover:light-dark(#f44034,#c10);--clr-error-text-muted:light-dark(#c66,#933);--clr-error-bg-light:light-dark(#ffccd1,#ff6675);--clr-error-border-light:light-dark(#ffbdc6,#ff334e);--clr-error-text-dark:light-dark(#b51c1c,#de2323);--clr-error-icon:light-dark(#ef5552,#d81b0e);--clr-warning-accent:light-dark(#ffc107,#808020);--clr-warning-bg-light:light-dark(#fff9c4,#00060c);--clr-warning-border-light:light-dark(#fff59d,#000a2b);--clr-warning-text-dark:light-dark(#6d4c41,#a08356);--clr-warning-icon:light-dark(#fbc02d,#b48204);--clr-info-bg-light:light-dark(#e1f5fe,#010a0e);--clr-info-border-light:light-dark(#b3e5fc,#001824);--clr-info-text-dark:light-dark(#0288d1,#00151f);--clr-header-stripe-bg:light-dark(#3949ab,#12152f);--clr-scrollbar-thumb:light-dark(rgba(0,0,0,.3),hsla(0,0%,100%,.3));--clr-scrollbar-track:light-dark(hsla(0,0%,100%,.1),rgba(0,0,0,.1));--clr-menu-item-hover-bg:light-dark(#f5f5f5,#0a0a0a);--clr-alert-overlay-bg:light-dark(hsla(0,0%,94%,.85),hsla(0,0%,6%,.85));--clr-verified-accent:light-dark(#02a6f2,#027db6);--clr-staff-accent:light-dark(#689f38,#598830);--clr-badge-inv:light-dark(#fffd,#cccd);--clr-cyan-50:light-dark(#e0f7fa,#2f3e43);--clr-overlay-white-strong:light-dark(hsla(0,0%,100%,.9),rgba(0,0,0,.9));--clr-gray-medium-bg:light-dark(#777,#444);--clr-toast-bg:#333;--clr-toast-text:light-dark(#eee,#aaa);--clr-online:#4caf50;--clr-offline:light-dark(#ccc,#999);--clr-shadow-input-underline:rgba(0,0,0,.1);--clr-shadow-hr-inset:rgba(0,0,0,.15);--clr-shadow-scrollbar-track-webkit:rgba(0,0,0,.2);--clr-shadow-button:rgba(0,0,0,.25);--clr-shadow-button-inset-active:rgba(0,0,0,.125);--clr-shadow-dialog:rgba(0,0,0,.45);--clr-shadow-panel-divider:rgba(0,0,0,.1);--clr-shadow-gray-strong:light-dark(var(--clr-std-gray),#333);--clr-shadow-silver-subtle:light-dark(var(--clr-std-ltgray),#333);--clr-shadow-bubble-drop:rgba(0,0,0,.3);--clr-button-primary-bg:var(--clr-primary-action);--clr-button-primary-text:var(--clr-bright);--clr-button-primary-hover-bg:var(--clr-primary-action-hover);--clr-button-secondary-bg:var(--clr-bright);--clr-button-secondary-text:var(--clr-primary-accent);--clr-button-secondary-hover-bg:var(--clr-primary-wash);--clr-button-outline-text:var(--clr-primary-accent);--clr-button-outline-border:var(--clr-std-ltgray);--clr-button-outline-hover-bg:var(--clr-indigo-50);--clr-button-danger-bg:light-dark(#ec645f,#d74742);--clr-button-danger-text:var(--clr-bright);--clr-button-danger-hover-bg:light-dark(#f77,#a55);--clr-button-positive-bg:light-dark(#71c46f,#3f983e);--clr-button-positive-text:var(--clr-bright);--clr-button-positive-hover-bg:light-dark(#7fed7f,#6ec26e);--clr-input-text:var(--clr-text-primary);--clr-input-border:var(--clr-border-light);--clr-input-border-focus:var(--clr-primary-accent);--clr-input-shadow:var(--clr-shadow-input-underline);--clr-input-shadow-focus:var(--clr-primary-accent-focus-shadow);--clr-input-invalid-border:light-dark(#e57171,#561010);--clr-input-invalid-shadow:light-dark(#e5737340,#1a0c0c40);--clr-input-placeholder-text:var(--clr-text-placeholder);--clr-bubble-left-bg:light-dark(#f0f0f0,#2c2c2e);--clr-bubble-left-bg-flash:light-dark(#d8d8d8,#3a3a3c);--clr-bubble-right-bg:var(--clr-primary-accent);--clr-bubble-right-bg-flash:var(--clr-primary-accent-hover);--clr-bubble-text:light-dark(#212121,#bbc);--clr-bubble-right-text:#fff;--clr-bubble-meta-text:var(--clr-text-primary);--clr-bubble-meta-deleted-bg:var(--clr-primary-wash);--clr-bubble-meta-date-bg:transparent;--clr-bubble-timestamp-text:light-dark(#777,#888);--clr-bubble-author-text:light-dark(#777,#666);--clr-reply-quote-border:var(--clr-light-blue-accent);--clr-reply-quote-text:var(--clr-text-primary);--clr-reply-quote-left-bg:light-dark(hsla(0,0%,100%,.4),rgba(0,0,0,.4));--clr-reply-quote-right-bg:light-dark(#8080801f,#c4c4c42e);--clr-reply-quote-preview-bg:var(--clr-background-off-white);--clr-badge-default-bg:light-dark(#e8e8e8,#171717);--clr-badge-default-text:var(--clr-text-primary);--clr-badge-default-border:var(--clr-std-ltgray);--clr-badge-green-bg:light-dark(#efe,#131);--clr-badge-green-text:light-dark(#383,#363);--clr-badge-green-border:light-dark(#aca,#242);--clr-badge-yellow-bg:light-dark(#ffe,#331);--clr-badge-yellow-text:light-dark(#660,#660);--clr-badge-yellow-border:light-dark(#cc9,#552);--clr-badge-blue-bg:light-dark(#f0f0ff,#224);--clr-badge-blue-text:light-dark(#339,#447);--clr-badge-blue-border:light-dark(#aad,#336);--clr-badge-red-bg:light-dark(#fee,#522);--clr-badge-red-text:light-dark(#933,#744);--clr-badge-red-border:light-dark(#c99,#633);--clr-badge-magenta-bg:light-dark(#fef,#535);--clr-badge-magenta-text:light-dark(#939,#747);--clr-badge-magenta-border:light-dark(#c9c,#636);--clr-chip-bg:var(--clr-background-extra-light-gray);--clr-chip-invalid-text:var(--clr-error-text-muted);--clr-chip-invalid-bg:var(--clr-badge-red-bg);--clr-chip-remove-icon-bg:light-dark(#aaa,#555);--clr-chip-remove-icon-text:var(--clr-background-extra-light-gray);--clr-chip-remove-icon-hover-bg:var(--clr-text-placeholder);--clr-chip-remove-icon-hover-text:var(--clr-bright);--clr-tabbar-bg:var(--clr-background-extra-light-gray);--clr-tabbar-inactive-text:light-dark(rgba(33,150,243,.6),#165aa0);--clr-tabbar-active-text:var(--clr-primary-accent);--clr-tabbar-inactive-border:var(--clr-border-light);--clr-tabbar-active-border:var(--clr-primary-accent);--clr-highlight-text:var(--clr-std-teal);--clr-highlight-preview-text:light-dark(#5f9ea0,#205e60);--clr-spinner-track:light-dark(#f3f3f3,#0c0c0c);--clr-spinner-active:var(--clr-primary-action);--clr-cropper-bounding-box-border:var(--clr-primary-action);--clr-cropper-bounding-box-bg:var(--clr-text-tertiary);--clr-cropper-cutout-border:var(--clr-text-tertiary);--clr-cropper-cutout-shadow:light-dark(rgba(230,246,255,.66),rgba(25,10,0,.66));--clr-audio-bg:var(--clr-background-extra-light-gray);--clr-audio-icon:light-dark(hsla(180,7%,43%,.8),hsla(0,7%,57%,.8));--clr-audio-icon-disabled:light-dark(hsla(0,0%,60%,.75),hsla(0,0%,40%,.75));--clr-audio-timer-text:light-dark(hsla(0,0%,40%,.75),hsla(0,0%,60%,.75));--clr-pinned-menu-bg:light-dark(#f8f8f8,#1a1a1a);--clr-drag-n-drop-border:var(--clr-std-grey);--clr-drag-n-drop-text:var(--clr-std-grey);--clr-drag-n-drop-bg:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-drag-n-drop-outline:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-lettertile-default-text:light-dark(#fafafacc,#dcdcdccc);--clr-lettertile-hover-text:var(--clr-bright);--clr-lt-bg-0:#ef9a9a;--clr-lt-bg-1:#90caf9;--clr-lt-bg-2:#b0bec4;--clr-lt-bg-3:#b49edb;--clr-lt-bg-4:#ffa98f;--clr-lt-bg-5:#a4d5a6;--clr-lt-bg-6:#ededed;--clr-lt-bg-7:#e6ee9b;--clr-lt-bg-8:#c4e0a3;--clr-lt-bg-9:#f0e57f;--clr-lt-bg-10:#f490b1;--clr-lt-bg-11:#a0a8da;--clr-lt-bg-12:#ffdf80;--clr-lt-bg-13:#bcaaa4;--clr-lt-bg-14:#80deea;--clr-lt-bg-15:#cd92d8;--clr-dk-bg-0:#c72929;--clr-dk-bg-1:#ad1457;--clr-dk-bg-2:#681b98;--clr-dk-bg-3:#4527a0;--clr-dk-bg-4:#293594;--clr-dk-bg-5:#1565c1;--clr-dk-bg-6:#0277bb;--clr-dk-bg-7:#00838f;--clr-dk-bg-8:#006b5f;--clr-dk-bg-9:#2f7f33;--clr-dk-bg-10:#54892f;--clr-dk-bg-11:#9e9e24;--clr-dk-bg-12:#f9a824;--clr-dk-bg-13:#ff9100;--clr-dk-bg-14:#f06c00;--clr-dk-bg-15:#d54215;--clr-lt-fg-0:var(--clr-lt-bg-0);--clr-lt-fg-1:var(--clr-lt-bg-1);--clr-lt-fg-2:var(--clr-lt-bg-2);--clr-lt-fg-3:var(--clr-lt-bg-3);--clr-lt-fg-4:var(--clr-lt-bg-4);--clr-lt-fg-5:var(--clr-lt-bg-5);--clr-lt-fg-6:var(--clr-lt-bg-6);--clr-lt-fg-7:var(--clr-lt-bg-7);--clr-lt-fg-8:var(--clr-lt-bg-8);--clr-lt-fg-9:var(--clr-lt-bg-9);--clr-lt-fg-10:var(--clr-lt-bg-10);--clr-lt-fg-11:var(--clr-lt-bg-11);--clr-lt-fg-12:var(--clr-lt-bg-12);--clr-lt-fg-13:var(--clr-lt-bg-13);--clr-lt-fg-14:var(--clr-lt-bg-14);--clr-lt-fg-15:var(--clr-lt-bg-15);--clr-dk-fg-0:var(--clr-dk-bg-0);--clr-dk-fg-1:var(--clr-dk-bg-1);--clr-dk-fg-2:var(--clr-dk-bg-2);--clr-dk-fg-3:var(--clr-dk-bg-3);--clr-dk-fg-4:var(--clr-dk-bg-4);--clr-dk-fg-5:var(--clr-dk-bg-5);--clr-dk-fg-6:var(--clr-dk-bg-6);--clr-dk-fg-7:var(--clr-dk-bg-7);--clr-dk-fg-8:var(--clr-dk-bg-8);--clr-dk-fg-9:var(--clr-dk-bg-9);--clr-dk-fg-10:var(--clr-dk-bg-10);--clr-dk-fg-11:var(--clr-dk-bg-11);--clr-dk-fg-12:var(--clr-dk-bg-12);--clr-dk-fg-13:var(--clr-dk-bg-13);--clr-dk-fg-14:var(--clr-dk-bg-14);--clr-dk-fg-15:var(--clr-dk-bg-15)}#sidepanel.workplace-collaboration-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f4f5f7}.workplace-collaboration-panel *{box-sizing:border-box;letter-spacing:0}.workplace-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#242930;background:#f4f5f7;flex-direction:column}.workplace-page button,.workplace-page input,.workplace-page textarea{font:inherit;letter-spacing:0}.workplace-page button{text-transform:none}.workplace-page>main{min-height:0;overflow-y:auto;flex:1 1 auto}.workplace-header{display:grid;grid-template-columns:3.6rem minmax(0,1fr) 3.6rem;align-items:center;min-height:4.4rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e6e8eb;background:#fff;flex:none}.workplace-header h1{min-width:0;margin:0;overflow:hidden;font-size:1.15rem;font-weight:650;text-align:center;text-overflow:ellipsis;white-space:nowrap}.workplace-header button{display:grid;place-items:center;width:3.6rem;min-width:3.6rem;height:3.6rem;min-height:3.6rem;margin:0;padding:0;border:0;box-shadow:none;color:#242930;background:transparent}.workplace-header button:last-child{color:#246fce}.workplace-header .material-icons{font-size:1.6rem}.workplace-toast{position:fixed;z-index:80;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.7rem 1rem;border-radius:.3rem;color:#fff;background:rgba(29,33,39,.94);text-align:center;transform:translateX(-50%)}.workbench-page{background:#fff}.workbench-page>main{padding:max(1.4rem,env(safe-area-inset-top)) 1.1rem 1.5rem}.workbench-profile{display:grid;grid-template-columns:3.4rem minmax(0,1fr) 3rem;align-items:center;gap:.75rem;min-height:4.8rem}.workbench-profile img{width:3.4rem;height:3.4rem;border-radius:.45rem;object-fit:cover}.workbench-profile small,.workbench-profile span,.workbench-profile strong{display:block;min-width:0}.workbench-profile strong{overflow:hidden;font-size:1.25rem;text-overflow:ellipsis;white-space:nowrap}.workbench-profile small{margin-top:.25rem;color:#767e88}.workbench-profile button{display:grid;place-items:center;width:3rem;min-width:3rem;height:3rem;min-height:3rem;margin:0;padding:0;border:0;box-shadow:none;color:#6c737c;background:transparent}.workbench-banner{display:grid;grid-template-columns:minmax(0,1fr) 5.5rem;align-items:center;min-height:9.5rem;margin:1.25rem 0 1.6rem;padding:1.35rem;overflow:hidden;border-radius:.5rem;color:#fff;background:#3d7ce5}.workbench-banner small,.workbench-banner strong{display:block}.workbench-banner strong{max-width:13rem;font-size:1.35rem;line-height:1.45}.workbench-banner small{margin-top:.8rem;color:hsla(0,0%,100%,.85)}.workbench-banner>.material-icons{color:#d9e7ff;font-size:5rem}.workbench-apps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1.4rem .7rem}.workbench-apps button{display:flex;align-items:center;width:100%;min-width:0;min-height:5.8rem;margin:0;padding:0;border:0;box-shadow:none;color:#30353c;background:transparent;flex-direction:column}.workbench-apps button>span{display:grid;position:relative;place-items:center;width:3.7rem;height:3.7rem;border-radius:.7rem;color:#fff}.workbench-apps span.tone-violet{background:#7659d6}.workbench-apps span.tone-orange{background:#f07835}.workbench-apps span.tone-red{background:#df4e46}.workbench-apps span.tone-blue{background:#3e78d6}.workbench-apps span.tone-green{background:#35a96b}.workbench-apps .material-icons{font-size:2rem}.workbench-apps em{position:absolute;top:-.35rem;right:-.35rem;display:grid;place-items:center;min-width:1.25rem;height:1.25rem;padding:0 .25rem;border:2px solid #fff;border-radius:.7rem;color:#fff;background:#e33f4b;font-size:.68rem;font-style:normal}.workbench-apps strong{width:100%;margin-top:.55rem;overflow-wrap:anywhere;font-size:.85rem;font-weight:500;line-height:1.25;text-align:center}.workplace-bottom-nav{display:grid;grid-template-columns:repeat(2,1fr);min-height:calc(4.4rem + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);border-top:1px solid #e5e7ea;background:#fff;flex:none}.workplace-bottom-nav button{display:flex;align-items:center;justify-content:center;min-width:0;min-height:4.4rem;margin:0;padding:0;border:0;box-shadow:none;color:#9aa1aa;background:transparent;flex-direction:column}.workplace-bottom-nav button.active{color:#2d73d2}.workplace-bottom-nav .material-icons{font-size:1.65rem}.workplace-bottom-nav span{margin-top:.15rem;font-size:.72rem}.workplace-search{display:grid;grid-template-columns:2.4rem minmax(0,1fr);align-items:center;min-height:3rem;margin:.8rem;padding:0 .65rem;border:1px solid #e4e7ea;border-radius:.35rem;background:#fff}.workplace-search .material-icons{color:#9ba2aa}.workplace-search input{width:100%;height:2.8rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.organization-content{background:#f4f5f7}.organization-tree{margin-top:.7rem;background:#fff}.organization-tree button{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2rem;align-items:center;gap:.4rem;width:100%;min-height:4rem;margin:0;padding:.55rem 1rem;border:0;border-bottom:1px solid #eceef0;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left}.organization-tree button small,.organization-tree button strong,.organization-tree button>span{display:block;min-width:0}.organization-tree button strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.organization-tree button small{margin-top:.2rem;color:#8b929b}.organization-members img{width:2.5rem;height:2.5rem;border-radius:50%;object-fit:cover}.meeting-list{padding-bottom:1rem}.workplace-tabs{display:grid;grid-template-columns:repeat(3,1fr);min-height:3.2rem;border-bottom:1px solid #e7e9ec;background:#fff}.workplace-tabs button{position:relative;min-width:0;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#7b838d;background:transparent}.workplace-tabs button.active{color:#286fcf;font-weight:600}.workplace-tabs button.active:after{position:absolute;bottom:0;left:30%;width:40%;height:.18rem;border-radius:.1rem;background:#347bd7;content:""}.meeting-card,.meeting-draft,.meeting-status{margin:.8rem;border:1px solid #e7e9ec;border-radius:.45rem;background:#fff}.meeting-card{padding:1rem}.meeting-card>header{display:flex;align-items:flex-start;justify-content:space-between;gap:.8rem;padding-bottom:.85rem;border-bottom:1px solid #eceef1}.meeting-card>header small,.meeting-card>header span,.meeting-card>header strong{display:block}.meeting-card>header small{margin-bottom:.25rem;color:#3575cf}.meeting-card>header strong{font-size:1.08rem}.meeting-card>header em{flex:none;padding:.3rem .5rem;border-radius:.25rem;color:#b26e10;background:#fff3df;font-size:.75rem;font-style:normal}.meeting-card>header em.accepted{color:#28784f;background:#e5f5ec}.meeting-card>header em.declined{color:#ad3d45;background:#fbe9eb}.meeting-card dl{margin:.8rem 0 0}.meeting-card dl>div{display:grid;grid-template-columns:6.5rem minmax(0,1fr);align-items:start;min-height:2.1rem}.meeting-card dd,.meeting-card dt{margin:0}.meeting-card dt{display:flex;align-items:center;color:#757d87}.meeting-card dt .material-icons{margin-right:.35rem;font-size:1.15rem}.meeting-card dd{overflow-wrap:anywhere}.meeting-card>footer{display:flex;justify-content:flex-end;gap:.55rem;margin-top:.8rem}.meeting-card>footer button{min-width:5.4rem;min-height:2.5rem;margin:0;padding:0 .8rem;border:1px solid #d8dce1;border-radius:.3rem;box-shadow:none;color:#3073ce;background:#fff}.meeting-card>footer button.primary,.meeting-card>footer button:last-child{border-color:#347bd7;color:#fff;background:#347bd7}.meeting-card>footer button .material-icons{margin-right:.3rem;font-size:1.1rem;vertical-align:middle}.meeting-response{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))}.meeting-response button{min-width:0!important;padding:0 .3rem!important}.meeting-draft{display:grid;grid-template-columns:2.8rem minmax(0,1fr) auto;align-items:center;gap:.6rem;padding:.8rem}.meeting-draft>.material-icons{color:#347bd7;font-size:2rem}.meeting-draft small,.meeting-draft span,.meeting-draft strong{display:block;min-width:0}.meeting-draft small{margin-top:.2rem;color:#838b95}.meeting-draft button{min-height:2.4rem;margin:0;padding:0 .6rem;border:0;box-shadow:none;color:#347bd7;background:transparent}.meeting-status{padding:1rem}.meeting-status h2{margin:0 0 .8rem;font-size:1rem}.meeting-status>div,.report-statistics>div{display:grid;grid-template-columns:repeat(3,1fr)}.meeting-status>div{grid-template-columns:repeat(4,1fr)}.meeting-status span,.report-statistics>div span{display:flex;align-items:center;min-width:0;flex-direction:column}.meeting-status b,.report-statistics>div b{font-size:1.35rem}.meeting-status small,.report-statistics>div small{margin-top:.25rem;color:#7c848e}.report-editor-page>main{padding-bottom:1rem}.report-period{display:flex;align-items:center;gap:.7rem;padding:.9rem 1rem;border-bottom:1px solid #e8eaed;background:#fff}.report-period>.material-icons{color:#347bd7}.report-period small,.report-period span,.report-period strong{display:block}.report-period small{margin-top:.2rem;color:#6b927d}.report-field{display:block;position:relative;margin-top:.7rem;padding:1rem;background:#fff}.report-field>span{display:block;margin-bottom:.65rem;font-weight:600}.report-field>span b{margin-right:.2rem;color:#d8414c}.report-field textarea{display:block;width:100%;height:11rem;margin:0;padding:.75rem .8rem 2rem;resize:vertical;border:1px solid #dfe3e7;border-radius:.3rem;box-shadow:none;background:#fff;line-height:1.5}.report-field>small{position:absolute;right:1.8rem;bottom:1.6rem;color:#9ba2ac}.report-attachment{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2rem;align-items:center;gap:.5rem;width:calc(100% - 2rem);min-height:4.2rem;margin:.8rem 1rem;padding:.6rem .8rem;border:1px dashed #cad0d7;border-radius:.35rem;box-shadow:none;color:#343a42;background:#fff;text-align:left}.report-attachment>.material-icons:first-child{color:#347bd7}.report-attachment small,.report-attachment span,.report-attachment strong{display:block;min-width:0}.report-attachment small{margin-top:.2rem;color:#888f98}.workplace-submit-bar{padding:.75rem 1rem max(.75rem,env(safe-area-inset-bottom));border-top:1px solid #e4e7ea;background:#fff;flex:none}.workplace-primary,.workplace-submit-bar button{width:100%;min-height:3rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#347bd7;font-weight:600}.report-list-page>main{padding-bottom:1rem}.report-role-switch{display:grid;grid-template-columns:repeat(2,1fr);margin:0 .8rem .8rem;border:1px solid #dce0e5;border-radius:.3rem;background:#fff}.report-role-switch button{min-height:2.6rem;margin:0;padding:0;border:0;box-shadow:none;color:#737b85;background:transparent}.report-role-switch button.active{color:#fff;background:#347bd7}.report-cards{margin:0 .8rem}.report-cards article{margin-bottom:.7rem;padding:.9rem;border:1px solid #e6e9ec;border-radius:.4rem;background:#fff}.report-cards article>header{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.6rem}.report-cards article>header img{width:2.6rem;height:2.6rem;border-radius:50%;object-fit:cover}.report-cards article>header small,.report-cards article>header span,.report-cards article>header strong{display:block;min-width:0}.report-cards article>header small{margin-top:.15rem;color:#8b929c}.report-cards article>header em{padding:.3rem .45rem;border-radius:.25rem;color:#b76811;background:#fff2df;font-size:.72rem;font-style:normal}.report-cards article>header em.submitted{color:#28784f;background:#e5f5ec}.report-cards article>header em.draft{color:#ad6c11;background:#fff2dd}.report-cards article p{display:-webkit-box;margin:.8rem 0;overflow:hidden;line-height:1.55;-webkit-box-orient:vertical;-webkit-line-clamp:3}.report-cards article>footer{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding-top:.65rem;border-top:1px solid #eceef1}.report-cards article>footer span{display:flex;align-items:center;min-width:0;color:#7e8690;font-size:.78rem}.report-cards article>footer span .material-icons{margin-right:.25rem;font-size:1rem}.report-cards article>footer button{display:flex;align-items:center;flex:none;min-height:2.2rem;margin:0;padding:0 .1rem 0 .6rem;border:0;box-shadow:none;color:#347bd7;background:transparent}.report-cards article>footer button .material-icons{font-size:1.15rem}.report-cards>button{display:grid;grid-template-columns:3.2rem minmax(0,1fr) auto 1.5rem;align-items:center;gap:.65rem;width:100%;min-height:5.2rem;margin:0 0 .7rem;padding:.7rem;border:1px solid #e6e9ec;border-radius:.4rem;box-shadow:none;color:#30353c;background:#fff;text-align:left}.report-month{display:grid;place-items:center;width:3.2rem;height:3.2rem;border-radius:.35rem;color:#fff;background:#5577b9}.report-cards>button small,.report-cards>button strong,.report-cards>button>span:nth-child(2){display:block;min-width:0}.report-cards>button small,.report-cards>button strong{line-height:1.3}.report-cards>button small{margin-top:.25rem;color:#858d97}.report-cards>button em{padding:.25rem .4rem;border-radius:.25rem;font-size:.72rem;font-style:normal}.report-cards>button em.submitted{color:#28784f;background:#e5f5ec}.report-cards>button em.draft{color:#ad6c11;background:#fff2dd}.report-statistics{margin-bottom:.7rem;padding:1rem;background:#fff}.report-statistics>header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:1rem}.report-statistics>header small,.report-statistics>header span,.report-statistics>header strong{display:block}.report-statistics>header small{margin-bottom:.2rem;color:#808892}.report-statistics>button,.report-statistics>header button{min-height:2.4rem;margin:0;padding:0 .7rem;border:1px solid #dce0e5;border-radius:.3rem;box-shadow:none;color:#347bd7;background:#fff}.report-statistics>button{display:flex;align-items:center;justify-content:center;width:100%;margin-top:1rem}.report-statistics>button .material-icons{margin-right:.35rem;font-size:1.15rem}.report-detail{padding-bottom:1.5rem}.report-detail>section{margin-bottom:.65rem;padding:1rem;background:#fff}.report-author{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.7rem}.report-author img{width:3rem;height:3rem;border-radius:50%;object-fit:cover}.report-author small,.report-author span,.report-author strong{display:block;min-width:0}.report-author small{margin-top:.2rem;color:#858d96}.report-author em{font-style:normal}.report-author em.submitted{color:#28784f}.report-author em.draft{color:#ad6c11}.report-detail h2,.report-detail h3,.report-detail p{margin:0}.report-detail h2{font-size:1.05rem}.report-detail h2+small{display:block;margin-top:.4rem;color:#89919b}.report-detail h3{margin-bottom:.6rem;font-size:.98rem}.report-detail section p{line-height:1.7;white-space:pre-wrap}.report-file{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2rem;align-items:center;gap:.6rem}.report-file>.material-icons:first-child{color:#4f74ad;font-size:2rem}.report-file small,.report-file span,.report-file strong{display:block}.report-file small{margin-top:.2rem;color:#8b929b}.report-updated{display:flex;align-items:center;justify-content:center;color:#8a929c;font-size:.78rem}.report-updated .material-icons{margin-right:.25rem;font-size:1rem}.mailbox-page>main{padding:.8rem 1rem 1.5rem;background:#fff}.mailbox-page label{display:block;position:relative;margin-top:1rem}.mailbox-page label>span:first-child{display:block;margin-bottom:.55rem;font-weight:600}.mailbox-page input[type=text],.mailbox-page label>input:not([type]),.mailbox-page label>textarea{width:100%;margin:0;border:1px solid #dfe3e7;border-radius:.3rem;box-shadow:none;background:#fff}.mailbox-page label>input:not([type]){height:3rem;padding:0 .75rem}.mailbox-page label>textarea{height:12rem;padding:.75rem .75rem 2rem;resize:vertical;line-height:1.5}.mailbox-content>small{position:absolute;right:.75rem;bottom:.65rem;color:#9ca3ac}.mailbox-notice,.mailbox-upload{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 1.5rem;align-items:center;gap:.5rem;width:100%;min-height:4.2rem;margin:0;padding:.65rem .75rem;border:1px solid #dfe4e9;border-radius:.35rem;box-shadow:none;color:#343a42;background:#f7f9fb;text-align:left}.mailbox-notice>.material-icons:first-child{color:#2e7954}.mailbox-notice small,.mailbox-notice span,.mailbox-notice strong{display:block;min-width:0}.mailbox-notice small{margin-top:.2rem;color:#78818b}.mailbox-upload{grid-template-columns:2.5rem minmax(0,1fr) auto;margin-top:1rem;border-style:dashed}.mailbox-upload>.material-icons{color:#347bd7}.mailbox-upload small{color:#888f99}.mailbox-anonymous{display:grid!important;grid-template-columns:2rem minmax(0,1fr);align-items:center;gap:.5rem;margin:1rem 0!important;padding:.8rem;border:1px solid #e4e7ea;border-radius:.35rem}.mailbox-anonymous input{width:1.25rem;height:1.25rem;margin:0}.mailbox-anonymous small,.mailbox-anonymous span,.mailbox-anonymous strong{display:block;min-width:0}.mailbox-anonymous small{margin-top:.2rem;color:#858d96}.mailbox-notice-backdrop{display:grid;position:absolute;z-index:60;inset:0;place-items:center;padding:1rem;background:rgba(20,24,29,.52)}.mailbox-notice-dialog{width:min(100%,25rem);padding:1.25rem;border-radius:.5rem;background:#fff;text-align:center}.mailbox-notice-dialog>.material-icons{color:#2f7854;font-size:2.7rem}.mailbox-notice-dialog h2{margin:.6rem 0 .8rem;font-size:1.15rem}.mailbox-notice-dialog p{margin:.65rem 0;color:#555d67;line-height:1.65;text-align:left}.mailbox-notice-dialog small{display:block;margin:.8rem 0;color:#898f98}.mailbox-notice-dialog button{width:100%;min-height:2.9rem;margin:.5rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#347bd7}.organization-loading{padding:2rem 1rem;color:#8b929c;text-align:center}.organization-department{display:flex;align-items:center;gap:.6rem;width:100%;min-height:3.4rem;margin:0;padding:0 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.organization-department>.material-icons:first-child{color:#8b929c;font-size:1.3rem}.organization-department.me,.organization-department.me>.material-icons:first-child{color:#2094f3}.organization-department>span{flex:1 1 auto;min-width:0}.organization-department>span strong{display:block;overflow:hidden;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.organization-department>.material-icons:last-child{color:#b0b6bd}.organization-person{display:flex;align-items:center;gap:.6rem;width:100%;min-height:3.2rem;margin:0;padding:0 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fafbfc;text-align:left;text-transform:none}.organization-person>.material-icons:first-child{color:#b0b6bd;font-size:1.1rem}.organization-person>span{flex:1 1 auto;min-width:0}.organization-person>span strong{overflow:hidden;font-weight:400;text-overflow:ellipsis;white-space:nowrap}.organization-person.me{color:#2094f3}.organization-person.me>span strong{color:#2094f3;font-weight:500}.organization-person>.material-icons:last-child{color:#b0b6bd}.meeting-more{display:flex;align-items:center;flex:none;margin:0;padding:0;border:0;box-shadow:none;color:#b0b6bd;background:transparent;font-size:.85rem}.meeting-attendees{color:#347bd7}.meeting-responded{width:100%;min-height:2.4rem;margin:0;padding:0 1rem;border:0;border-radius:.3rem;box-shadow:none;color:#8b929c;background:#f2f3f5}.meeting-participant-list{margin:.8rem 0 0;padding:.6rem 0 0;border-top:1px solid #eceef1;list-style:none}.meeting-participant-list li{display:flex;align-items:center;justify-content:space-between;min-height:2.3rem}.meeting-participant-list em{padding:.15rem .5rem;border-radius:.25rem;color:#8b929c;background:#f2f3f5;font-size:.72rem;font-style:normal}.meeting-participant-list em.accepted{color:#28784f;background:#e5f5ec}.meeting-participant-list em.declined{color:#ad3d45;background:#fbe9eb}.meeting-participant-list em.tentative{color:#ad6c11;background:#fff2dd}.meeting-status footer{display:flex;gap:.6rem;margin-top:.8rem}.meeting-status footer button{flex:1 1 auto;min-height:2.6rem;margin:0;border:0;border-radius:.3rem;box-shadow:none;color:#347bd7;background:#eaf2fc}.meeting-status footer button.danger{color:#ad3d45;background:#fbe9eb}.meeting-time-range{display:flex;align-items:center;gap:.5rem}.meeting-time-range .report-field{flex:1 1 0}.meeting-time-range span{color:#8b929c}.meeting-selected-attendees{display:flex;flex-wrap:wrap;gap:.4rem;margin:-.4rem 0 .8rem}.meeting-selected-attendees span{display:flex;align-items:center;gap:.25rem;padding:.3rem .5rem;border-radius:999px;background:#eaf2fc;color:#347bd7;font-size:.82rem}.meeting-selected-attendees .material-icons{font-size:.9rem;cursor:pointer}.daily-report-block{margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid #eceef1}.daily-report-block-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.6rem}.daily-report-block-header .material-icons{color:#8b929c;cursor:pointer}.daily-report-date{display:block;margin:-.3rem 0 .5rem;color:#8b929c}.daily-report-add-block{display:flex;align-items:center;justify-content:center;gap:.3rem;width:100%;min-height:2.6rem;margin:0 0 1rem;border:1px dashed #d5d9dd;border-radius:.3rem;box-shadow:none;color:#347bd7;background:#fff}.report-draft-status{margin:0;color:#8b929c;font-size:.82rem;text-align:right}.report-author .role-badge,.report-cards article>header .role-badge{display:inline-block;flex-shrink:0;margin-left:.4rem;padding:.1rem .4rem;border-radius:.25rem;color:#347bd7;background:#eaf2fc;font-size:.72rem;white-space:nowrap}.report-author>span>strong,.report-cards article>header>span>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workplace-error{padding:.8rem 1rem;color:#ad3d45;text-align:center}.workbench-profile .workbench-avatar-fallback{display:flex;align-items:center;justify-content:center;width:3rem;height:3rem;border-radius:50%;color:#fff;background:#b0b6bd}.mailbox-anonymous-choice{display:flex;gap:1.2rem;justify-content:center;margin-top:.8rem}.mailbox-anonymous-choice label{display:flex;align-items:center;gap:.35rem;color:#58606b;font-size:.88rem}.mailbox-attachment-list{margin:.5rem 0 0;padding:0;list-style:none}.mailbox-attachment-list li{display:flex;align-items:center;justify-content:space-between;min-height:2.2rem;color:#58606b}.mailbox-attachment-list .material-icons{color:#8b929c;cursor:pointer;font-size:1.1rem}@media screen and (max-width:480px){.workbench-apps{grid-template-columns:repeat(4,minmax(0,1fr));gap:1.2rem .35rem}.workbench-banner{grid-template-columns:minmax(0,1fr) 4rem;padding:1rem}.workbench-banner>.material-icons{font-size:3.8rem}.meeting-card dl>div{grid-template-columns:5.8rem minmax(0,1fr)}.report-cards>button{grid-template-columns:3.2rem minmax(0,1fr) auto 1.2rem;gap:.45rem}}*{box-sizing:border-box;padding:0;margin:0;font-family:Roboto,Arial,sans-serif;text-rendering:optimizeLegibility;scrollbar-width:thin;scrollbar-color:var(--clr-scrollbar-thumb) var(--clr-scrollbar-track)}body,html{height:100%;width:100%;height:100dvh;width:100dvw;font-size:10pt;color:var(--clr-text-primary);overflow:hidden;background-color:var(--clr-body-background);box-shadow:inset 0 10rem var(--clr-header-stripe-bg)}tt{font-family:Roboto Mono,Courier,monospace}a{color:var(--clr-primary-accent);text-decoration:none}a:focus,a:hover{color:var(--clr-primary-accent-hover);text-decoration:underline}a.danger{color:var(--clr-danger-text)}a.danger:focus,a.danger:hover{color:var(--clr-danger-text-hover)}a.gray:focus,a.gray:hover{color:var(--clr-text-tertiary)}form{padding:.5rem .75rem;line-height:1.5}form,label{font-size:1.1rem}label{margin-right:auto}label.small{font-size:.95rem}label.large,label.small{color:var(--clr-primary-action)}label.large{font-size:1.1rem}label.invalid{color:var(--clr-danger-text)}img.avatar{width:100%;height:100%;border-radius:50%}img.avatar.self{padding:7%}button{display:inline-block;font-family:inherit;font-size:1.05rem;height:2.2rem;line-height:2.2rem;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:1px solid var(--clr-transparent);white-space:nowrap;padding-left:1.2rem;padding-right:1.2rem;border-radius:4px;box-shadow:0 1px 3px 0 var(--clr-shadow-button);text-transform:uppercase;min-width:5rem;margin:0 .35rem}button[disabled],html input[disabled]{cursor:default;opacity:.65;box-shadow:none;filter:grayscale(50%)}button.round{border-radius:50%;width:3rem;height:3rem;padding:0;margin:0;line-height:3.5rem;outline:none;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);z-index:2}button.round.small{width:2rem;height:2rem;line-height:2rem;box-shadow:0 2px .35rem 0 var(--clr-shadow-button)}button.danger:active:not([disabled]),button.danger:hover:not([disabled]),button.positive:active:not([disabled]),button.positive:hover:not([disabled]),button.primary:active:not([disabled]),button.primary:hover:not([disabled]){color:var(--clr-bright)}button:active{box-shadow:inset 0 3px .5rem var(--clr-shadow-button-inset-active)}button:active.round.small{box-shadow:inset 0 2px .35rem var(--clr-shadow-button-inset-active)}button.primary{background-color:var(--clr-button-primary-bg);color:var(--clr-button-primary-text)}button.primary:active:not([disabled]),button.primary:hover:not([disabled]){background-color:var(--clr-button-primary-hover-bg)}button.secondary{background-color:var(--clr-button-secondary-bg);color:var(--clr-button-secondary-text)}button.secondary:active:not([disabled]),button.secondary:hover:not([disabled]){color:var(--clr-button-secondary-text);background-color:var(--clr-button-secondary-hover-bg)}button.outline{background-color:var(--clr-transparent);color:var(--clr-button-outline-text);border:1px solid var(--clr-button-outline-border);box-shadow:none}button.outline:active:not([disabled]),button.outline:hover:not([disabled]){color:var(--clr-button-outline-text);background-color:var(--clr-button-outline-hover-bg)}button.danger{background-color:var(--clr-button-danger-bg);color:var(--clr-button-danger-text)}button.danger:active:not([disabled]),button.danger:hover:not([disabled]){background-color:var(--clr-button-danger-hover-bg)}button.positive{background-color:var(--clr-button-positive-bg);color:var(--clr-button-positive-text)}button.positive:active:not([disabled]),button.positive:hover:not([disabled]){background-color:var(--clr-button-positive-hover-bg)}input,textarea{font-family:inherit;font-size:1.1rem;background:var(--clr-transparent);border:none;margin:.25rem 0;padding:0 .125rem;outline:none;color:var(--clr-input-text)}input[type=date],input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],textarea{height:2.5rem;border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);transition:all .1s ease-in-out,height 0s}input[type=date],input[type=email],input[type=password],input[type=tel],input[type=text],input[type=time],textarea{width:100%}input[type=date]:focus,input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,textarea:focus{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}input[type=email].invalid,input[type=password].invalid,input[type=search].invalid,input[type=tel].invalid,input[type=text].invalid,textarea.invalid{border-bottom:1px solid var(--clr-input-invalid-border);box-shadow:0 1px 0 var(--clr-input-invalid-shadow)}input[type=email]::placeholder,input[type=password]::placeholder,input[type=search]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,textarea::placeholder{color:var(--clr-input-placeholder-text);font-weight:lighter}input[type=password].with-icon-right,input[type=text].with-icon-right{margin-right:-2rem;padding-right:2rem}input[type=password].with-icon-left,input[type=text].with-icon-left{margin-left:-1.45rem;padding-left:1.75rem}textarea{resize:none;padding-top:.45rem}input[type=range]{width:90%}option{padding:0}datalist{display:flex;flex-direction:row;justify-content:space-between;width:100%}::-webkit-scrollbar{width:.6rem}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);background-color:var(--clr-scrollbar-track)}::-webkit-scrollbar-thumb{background-color:var(--clr-scrollbar-thumb)}ul.menu{position:absolute;list-style:none;width:12rem;border-radius:.2rem;padding-top:.35rem;padding-bottom:.35rem;box-shadow:0 1px 6px var(--clr-shadow-dialog);background-color:var(--clr-bright);z-index:4}ul.menu>li{padding:.75rem .75rem .75rem 1.25rem;cursor:pointer}ul.menu>li:hover{background-color:var(--clr-menu-item-hover-bg)}ul.menu>li.separator{padding:0;margin:2px;height:1px}ul.menu>li.separator,ul.menu>li.separator:hover{background-color:var(--clr-border-light)}ul.menu>li.disabled{pointer-events:none;opacity:.6}.menuTrigger{position:absolute;right:.25rem;width:1.4rem;height:1.4rem;line-height:1.4rem;border-radius:.7rem;text-align:center;opacity:0;background-color:inherit;user-select:none}.menuTrigger a{color:var(--clr-text-secondary)}li .menuTrigger{top:.25rem}li:hover .menuTrigger{opacity:.9}li:hover .menuTrigger a{color:var(--clr-text-secondary)}div.alert-container{position:absolute;display:flex;padding:1rem;justify-content:center;align-items:center;width:100%;height:100%;overflow:hidden;background:var(--clr-alert-overlay-bg);z-index:3}div.alert{position:relative;background-color:var(--clr-bright);box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);padding:1rem;border-radius:.3rem;margin:auto 2rem;width:fit-content;height:min-content;min-width:16rem;max-width:24rem;max-height:40rem;overflow:hidden}div.alert-container .title{position:relative;color:var(--clr-primary-accent);font-size:1.2rem;font-weight:500;width:100%;padding:0 0 .35rem}div.alert-container .title.with-control{position:relative;display:flex;padding:.5rem .5rem 0;align-items:center;flex:none;justify-content:space-between}div.alert-container .content{position:relative;padding:.5rem 0}div.trusted-badge{margin:.25rem 0}.blue{color:var(--clr-primary-accent)!important}.lt-blue{color:var(--clr-lt-fg-1)!important}.orange{color:var(--clr-std-orange)!important}.verified-color{color:var(--clr-verified-accent)!important}.staff-color{color:var(--clr-staff-accent)!important}.danger-color{color:var(--clr-warning-accent)!important}.green{color:light-dark(#388e3c,#1a9a1d)}.white{color:var(--clr-bright)!important}.red{color:var(--clr-danger-text)!important}.badge-inv{color:var(--clr-badge-inv)!important}.gray{color:var(--clr-text-secondary)!important}.light-gray{color:var(--clr-text-placeholder)!important}.large{font-size:120%}.small{font-size:90%}.float-right{position:absolute;right:.5rem}.hr{display:block;width:100%;height:.45rem;min-height:.3rem;background-color:var(--clr-background-light-gray);box-shadow:inset 0 .25rem .25rem -.25rem var(--clr-shadow-hr-inset),inset 0 -.25rem .25rem -.25rem var(--clr-shadow-hr-inset)}.hr.thin{height:.015rem}.divider{display:inline-block;width:1px;margin:0 .25rem;border-left:1.5px groove var(--clr-border-muted)}.ellipsized{overflow-x:hidden;white-space:nowrap;text-overflow:ellipsis}.flat-button{display:flex;align-items:center;margin:.15rem .35rem;height:2em;line-height:2em;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;white-space:nowrap;text-transform:uppercase;background-color:var(--clr-bright);z-index:1}.flat-button:focus,.flat-button:hover{text-decoration:none}.flat-button.disabled,.flat-button.disabled:focus,.flat-button.disabled:hover{color:var(--clr-primary-accent);cursor:default;opacity:.75;filter:grayscale(75%)}.flat-button.faux{display:inline-block;height:1.4em;line-height:1.4em;text-transform:none;padding:0 .35rem;margin:.15rem;border:1px solid var(--clr-text-tertiary);border-radius:3px;background-color:var(--clr-background-extra-light-gray)}.action-button{display:block;position:absolute;color:var(--clr-text-secondary);font-size:1.8rem;background-color:var(--clr-background-off-white);border-radius:50%;width:3.25rem;height:3.25rem;min-width:unset;min-height:unset;padding:0;margin:0;outline:none;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);transition:all .15s;z-index:2}.action-button:active:not([disabled]),.action-button:focus,.action-button:hover,.action-button:hover:not([disabled]){color:var(--clr-text-tertiary-activated);background-color:var(--clr-primary-action-hover)}.action-button:active{color:var(--clr-text-tertiary-activated);background-color:var(--clr-primary-action)}.action-button.hidden{width:1px;height:1px;font-size:1px;line-height:1px;right:2.625rem;bottom:2.625rem;opacity:0}.group-focus{outline:none}#mountPoint{height:100%;padding-top:1rem;padding-bottom:1rem}#noscript-message{position:relative;display:flex;flex-direction:column;max-width:30rem;overflow:hidden;margin-top:5rem;margin-left:auto;margin-right:auto;border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);background-color:var(--clr-bright)}#noscript-title{padding:1rem;font-size:120%;font-weight:bolder;background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue)}#noscript-content{padding:1rem}#app-container{position:relative;display:flex;height:100%;max-width:84rem;overflow:hidden;margin-left:auto;margin-right:auto;border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);background-color:var(--clr-bright)}#sidepanel{flex-grow:0;flex-shrink:0.3;width:24rem;min-width:18rem}#sidepanel,#topic-view{position:relative;display:flex;flex-direction:column;height:100%}#topic-view{overflow-x:hidden;width:100%}#info-view{position:relative;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0.3;width:24rem;min-width:18rem;height:100%}.center-medium-text{width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:1.4rem}.nodisplay{display:none!important}.quoted{margin-left:1rem}.space-right{margin-right:.25rem}.rounded-container{position:relative;background-color:var(--clr-background-off-white);border-radius:.1rem;padding:.25rem;margin:.25rem}div.in-place-edit,span.in-place-edit{display:inline-block;font-family:inherit;font-size:1rem;margin:.25rem .125rem 0;width:100%;vertical-align:baseline;border-bottom:1px dashed var(--clr-border-muted);cursor:pointer}.in-place-edit.short{display:inline-flex;align-items:center;font-size:1.1rem;height:2.5rem;line-height:2.25;white-space:nowrap}.in-place-edit.disabled{border-bottom:none;cursor:default;color:var(--clr-text-disabled)}.in-place-edit.placeholder{color:var(--clr-text-placeholder)}.in-place-edit span{display:inline-block}.in-place-edit.short span{white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden;width:100%}.in-place-edit .material-icons{display:inline-block}.material-icons.invalid{color:var(--clr-error-text-muted)}textarea.in-place-edit{height:unset;font-size:unset}input.in-place-edit.invalid{color:var(--clr-error-text-muted)}table.permission-editor{width:100%}table.permission-editor td{margin:.35rem 0;font-size:1.1rem;vertical-align:middle}table.permission-editor td.checkbox{text-align:center;color:var(--clr-text-tertiary)}.permission-editor .material-icons{font-size:1.3rem;line-height:1.3rem}.material-icons.clickable{cursor:pointer;border-bottom:none}.clickable{border-bottom:1px dashed var(--clr-border-muted)}.clean-clickable,.clickable,.image-clickable{cursor:pointer}.panel-title{font-size:1.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-title.deleted{text-decoration:line-through}.caption-panel{flex:none;height:var(--caption-panel-height);white-space:nowrap;box-shadow:0 1px 2px var(--clr-shadow-gray-strong);overflow-x:hidden;z-index:1}.caption-panel,.dialog-buttons{display:flex;align-items:center;padding:.5rem}.dialog-buttons{justify-content:flex-end}.dialog-buttons button{margin:0 .5rem}.avatar-box{position:relative;flex-grow:0;flex-shrink:0}.bot-form{display:flex;flex-direction:column;overflow:hidden;min-width:8rem;line-height:2rem}.bot-form div{min-height:2rem;vertical-align:middle}.bot-form button{display:inline-block;margin:.15rem;background-color:var(--clr-blue-wash-light);color:var(--clr-primary-accent);font-size:inherit;text-transform:none;height:2rem;line-height:2rem}.bot-form>div>button{width:auto}.bot-form button:active,.bot-form button:focus,.bot-form button:hover{outline:0;color:var(--clr-dk-fg-5);background-color:var(--clr-primary-wash)}#side-caption-panel{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue)}#side-caption-panel a{color:var(--clr-primary-light-blue);padding-left:.5rem;line-height:1}#side-caption-panel :hover{color:var(--clr-bright)}#sidepanel-title{margin-right:auto;margin-left:.5rem}#self-avatar{width:3rem;min-width:3rem;height:3rem;flex:none;border-radius:50%}#self-avatar.avatar-box{font-size:1.8rem}#settings-form ul{list-style:none}#settings-form li{vertical-align:middle}#settings-form label{display:inline-block;padding-left:.5rem}input#host-name{width:100%}input.search{text-indent:1.4rem}i.search{position:absolute;left:.6rem}.info-box{position:relative;display:none;overflow:hidden;padding:1rem 1.5rem .75rem .5rem}.info-box>span{line-height:1.35rem}.info-box .cancel{position:absolute;right:.25rem;top:.5rem}.info-box.error{display:flex;background-color:var(--clr-error-bg-light);border-bottom:1px solid var(--clr-error-border-light);color:var(--clr-error-text-dark)}.info-box.warning{display:flex;background-color:var(--clr-warning-bg-light);border-bottom:1px solid var(--clr-warning-border-light);color:var(--clr-warning-text-dark)}.info-box.info{display:flex;background-color:var(--clr-info-bg-light);border-bottom:1px solid var(--clr-info-border-light);color:var(--clr-info-text-dark)}.info-box .cancel .material-icons{font-size:1rem;color:var(--clr-text-secondary)}.info-box.error .cancel .material-icons{color:var(--clr-error-text-dark)}.info-box .icon{display:block;margin-right:.5rem}.info-box .icon .material-icons{font-size:1.5rem}.info-box.warning .icon .material-icons{color:var(--clr-warning-icon)}.info-box.error .icon .material-icons{color:var(--clr-error-icon)}.info-box.info .icon .material-icons{color:var(--clr-info-text-dark)}.flex-column{display:flex;flex-direction:column;height:100%;overflow-x:hidden}.flex-column.narrow{height:auto}.scrollable-panel{overflow-x:hidden;overflow-y:auto;margin-top:.25rem;margin-bottom:auto;height:100%;scroll-behavior:smooth}.contact-box{list-style:none;overflow-x:hidden}.contact-box>li{position:relative;display:flex;padding:.35rem .25rem .5rem .35rem;min-height:3.75rem;flex-grow:0;flex-shrink:0;background:linear-gradient(to right,var(--clr-transparent) 3.5rem,var(--clr-background-extra-light-gray) 1px,var(--clr-background-extra-light-gray) 100%) 0 100% /100% 1px no-repeat,var(--clr-bright);overflow-x:hidden;cursor:pointer}.contact-box.small>li{padding:.25rem .25rem .35rem .35rem;min-height:2.5rem}.contact-box>li:last-child{background:var(--clr-bright)}.contact-box>li:hover{background-color:var(--clr-background-blue-gray-50)}.contact-box>li.selected{background-color:var(--clr-background-blue-gray-100)}.contact-box>li.tpinned{border-right:1.5px solid var(--clr-secondary-accent);background-color:var(--clr-background-blue-gray-75)}.contact-box>li.action{min-height:2.5rem;border-bottom:none}.contact-box .text-box{overflow-x:hidden}.contact-box .contact-title{font-size:1.05rem;text-overflow:ellipsis;overflow-x:hidden;white-space:nowrap}.contact-box .contact-title.deleted{opacity:.66;text-decoration:line-through;text-decoration-thickness:.5px}.contact-box .contact-comment{font-weight:lighter}.contact-box .contact-comment,.contact-box .contact-comment>span{text-overflow:ellipsis;overflow-x:hidden;white-space:nowrap}.contact-box .contact-comment b{font-weight:bolder}.contact-box .contact-comment .material-icons{margin-bottom:.2rem;color:light-dark(#777,#666)}.contact-box .avatar-box{position:relative;margin-right:.35rem;width:3rem;min-width:3rem;height:3rem;min-height:3rem;font-size:1.8rem;overflow:hidden;padding:0}.contact-box .avatar{width:3rem;height:3rem;border-radius:50%}.contact-box.small .avatar-box{width:2rem;min-width:2rem;height:2rem;min-height:2rem;font-size:1.2rem}.contact-box.small .avatar{width:2rem;height:2rem}.avatar.deleted{opacity:.75;filter:grayscale(1)}.contact-box .avatar-box>.material-icons{display:flex;flex-direction:column;justify-content:space-around;font-size:2.4rem;line-height:3rem}.contact-box .avatar-box>.checkmark.material-icons{line-height:unset}.contact-box.small .avatar-box>.material-icons{font-size:1.6rem;line-height:2rem}.contact-box .text-box{display:flex;flex-direction:column;justify-content:space-around}.contact-box .text-box>div{display:flex;flex-direction:row;align-items:center}.contact-box .action-text{text-align:center;font-size:.95rem;line-height:2.5rem;margin:0 auto;cursor:pointer}img.channel{width:1.25rem;height:1.25rem;vertical-align:middle;margin-left:.3rem}.large img.channel{width:1.45rem;height:1.45rem;margin-left:.5rem;margin-bottom:.15rem}.avatar-box .offline,.avatar-box .online{position:absolute;width:.75rem;min-width:.75rem;height:.75rem;min-height:.75rem;flex-shrink:0;border-radius:50%;right:0;bottom:.1rem}.avatar-box .online{background-color:var(--clr-online)}.avatar-box .offline{background-color:var(--clr-offline)}.online.typing{animation:typing .5s infinite}@keyframes typing{0%,to{transform:translateX(0)}50%{transform:translateX(-.3rem)}}.contact-box .checkmark.material-icons{color:var(--clr-secondary-accent);overflow:visible;border:0 solid var(--clr-transparent);padding-left:.5px}.contact-box .checkmark.material-icons,.contact-box .deleted.material-icons{width:1.5rem;height:1.5rem;font-size:1.5rem;position:absolute;right:0;bottom:0;background-color:var(--clr-bright)}.contact-box .deleted.material-icons{color:var(--clr-text-tertiary)}#add-topic{position:absolute;right:1rem;bottom:1rem}.panel-form{display:flex;position:relative;flex-direction:column;padding:0}.panel-form-row{align-items:center;flex-shrink:0}.panel-form-column,.panel-form-row{display:flex;position:relative;padding:.5rem .75rem;line-height:1.5;flex-grow:0}.panel-form-column{flex-direction:column;overflow-x:clip}.panel-form-column>.panel-form-column,.panel-form-row>.panel-form-column{padding:0!important;flex-grow:1}.panel-form-column>.panel-form-row,.panel-form-row>.panel-form-row{padding:0!important}.panel-form-column>.group{margin-top:.25rem;margin-bottom:.25rem}.avatar-upload{position:relative;display:flex;flex-direction:column;flex-shrink:0;width:10rem;height:10.5rem;font-size:4.5rem;padding:0;margin:.25rem}.avatar-upload.read-only{height:auto}.avatar-upload .clear-avatar{position:absolute;font-size:1rem;top:0;right:0;opacity:0;background-image:radial-gradient(var(--clr-bright) 40%,var(--clr-transparent) 75%)}.avatar-upload:hover .clear-avatar{opacity:1}.avatar-upload .avatar-box{position:relative;width:10rem;height:10rem}.avatar-upload .avatar-box>.material-icons{position:relative;font-size:4rem;line-height:10rem;vertical-align:middle}.avatar-upload:after{content:".";display:block;height:0;clear:both;visibility:hidden}.avatar-upload .blank{text-align:center;vertical-align:middle;border:1px dashed var(--clr-text-tertiary);font-size:1rem;flex-shrink:0;color:var(--clr-text-tertiary);line-height:10rem}.avatar-upload .blank,.avatar-upload img.preview{width:10rem;height:10rem;overflow:hidden;border-radius:50%}.avatar-upload img.preview:before{position:absolute;content:" ";display:flex;font-size:.9rem;font-weight:lighter;color:var(--clr-text-primary);top:0;left:0;width:10rem;height:10rem;justify-content:center;background:50% no-repeat url(../img/broken_image.png);border-radius:50%}.avatar-upload .inputfile.hidden{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute}.avatar-upload .inputfile+label.round{display:flex;position:absolute;align-items:center;justify-content:center;cursor:pointer;width:3rem;height:3rem;line-height:3rem;border-radius:50%;box-shadow:0 1px 4px var(--clr-shadow-dialog);bottom:0;right:0;background-color:var(--clr-background-off-white);z-index:1}.avatar-upload .inputfile:focus+label.round{outline:none}.avatar-upload .inputfile+label:hover,.avatar-upload .inputfile:focus+label{background-color:var(--clr-primary-wash);color:var(--clr-primary-accent)}#topic-caption-panel{background-color:var(--clr-background-blue-gray-300)}#topic-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#topic-caption-panel :hover{color:var(--clr-dark)}#topic-caption-panel .avatar-box{position:relative;width:3rem;min-width:3rem;height:3rem;font-size:1.8rem;margin-right:.35rem}#topic-caption-panel .avatar-box>.material-icons{font-size:2.4rem;line-height:3rem}#topic-title-group{overflow-x:hidden}#hide-message-view{display:block;margin-right:.35rem}#topic-users{margin-left:auto;margin-right:1rem;width:min-content}#topic-users .avatar-box{display:inline-block;width:1.8rem;min-width:1.8rem;height:1.8rem;min-height:1.8rem;font-size:1rem;margin-right:.2rem}#topic-users .avatar-box>.material-icons{font-size:1.4rem;line-height:1.8rem}#topic-users>span{line-height:2rem;vertical-align:top}.qr-code{align-self:center}#messages-container{overflow-y:hidden;height:100%}#messages-container:before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;background-color:var(--clr-background-blue-gray-50);background-image:var(--wallpaper-url);background-repeat:var(--wallpaper-repeat);background-size:var(--wallpaper-size);background-position:var(--wallpaper-position);filter:blur(var(--wallpaper-blur)) invert(var(--wallpaper-invert)) brightness(var(--wallpaper-brightness));pointer-events:none;z-index:0}#messages-panel{position:relative;padding:.75rem;overflow-y:scroll;height:100%}#write-only-background{position:absolute;top:0;left:0;height:100%;width:100%;background-image:repeating-linear-gradient(45deg,hsla(0,0%,100%,.5),hsla(0,0%,100%,.5) .5rem,hsla(0,0%,100%,.8) 0,hsla(0,0%,100%,.8) 1rem)}#write-only-note{top:50%;transform:translate(-50%,-50%);height:auto;width:auto}#peer-messaging-disabled-note,#write-only-note{position:absolute;left:50%;background-color:var(--clr-bright);color:var(--clr-text-primary);line-height:2rem;text-align:center;padding:.75rem 1.25rem;border-radius:.5rem;box-shadow:0 1px .5px var(--clr-shadow-button-inset-active)}#peer-messaging-disabled-note{bottom:4.3rem;transform:translate(-50%);width:fit-content}#relationship-status-note{text-align:center;color:var(--clr-text-secondary);font-size:.85rem;padding:.5rem 1.25rem;flex:none}#relationship-status-note a{color:var(--clr-primary-accent)}.chat-box .author .role-badge{display:inline-block;font-style:normal;font-size:.7rem;line-height:1.3;padding:0 .4em;border-radius:.25rem;margin-left:.35em;color:#fff;vertical-align:middle}.chat-box .author .role-badge.owner{background-color:#e0a82e}.chat-box .author .role-badge.admin{background-color:#3ba55c}#group-announcement-banner,#group-join-request-banner{display:flex;align-items:center;gap:.5rem;margin:.5rem .75rem 0;padding:.6rem 1rem;background-color:var(--clr-bright);border-radius:.5rem;box-shadow:0 1px 3px rgba(0,0,0,.12);color:var(--clr-bubble-text);flex:none}#group-announcement-banner i:first-child,#group-join-request-banner i:first-child{color:var(--clr-warning-text,#e0a82e)}#group-announcement-banner span,#group-join-request-banner span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9rem}#group-announcement-banner i:last-child,#group-join-request-banner i:last-child{color:var(--clr-text-secondary)}.message-fail-icon{align-self:flex-end;margin:0 .25rem .6rem 0}.message-fail-reason{font-size:.8rem;color:var(--clr-text-secondary);text-align:right;margin-top:.25rem}.message-fail-reason a{color:var(--clr-primary-accent)}.message-group-invitation button{display:block;margin-top:.4rem;padding:.3rem .9rem;border:0;border-radius:1rem;color:#fff;background:var(--clr-primary-accent);font-size:.85rem}.message-group-invitation button:disabled{opacity:.6}.message-group-invitation em{display:block;margin-top:.4rem;color:var(--clr-text-secondary);font-style:normal;font-size:.85rem}.message-group-invitation-error{display:block;margin-top:.25rem;color:#df4e46;font-size:.78rem}.select-checkbox{align-self:center;margin:0 .5rem 0 .25rem;color:var(--clr-text-secondary);cursor:pointer;flex:none}.select-checkbox.blue{color:var(--clr-primary-accent)}.chat-box li.right .select-checkbox{margin-right:auto}#messages-container{position:relative}#messages-container div.toast{bottom:.75rem}#batch-action-bar{display:flex;flex-direction:column;flex:none;background-color:var(--clr-background-blue-gray-50);padding:.5rem .6rem}#batch-action-count{text-align:center;color:var(--clr-text-secondary);font-size:.85rem;padding-bottom:.4rem}#batch-action-buttons{display:flex;justify-content:space-around}#batch-action-buttons a{display:flex;flex-direction:column;align-items:center;font-size:.75rem;color:var(--clr-text-primary)}#batch-action-buttons a.disabled{color:var(--clr-text-secondary);opacity:.5;pointer-events:none}#batch-action-cancel{text-align:center;margin-top:.5rem;color:var(--clr-text-secondary);font-size:.85rem}.batch-forward-confirm{max-width:24rem}.forward-dialog.batch-forward-confirm{height:auto}.batch-forward-target{display:flex;align-items:center;justify-content:space-between;padding:.6rem 0}.contact-box>li.batch-forward-target{padding:.6rem 0;background:linear-gradient(to right,var(--clr-background-extra-light-gray),var(--clr-background-extra-light-gray)) 0 100% /100% 1px no-repeat,var(--clr-bright)}.batch-forward-comment{box-sizing:border-box;width:100%;margin:.5rem 0;padding:.6rem;border:0;border-radius:.4rem;color:var(--clr-text-primary);background-color:var(--clr-background-blue-gray-50);font:inherit}.batch-forward-comment::placeholder{color:var(--clr-text-secondary)}.batch-forward-actions{display:flex;gap:.5rem;margin-top:.5rem}.batch-forward-actions button{flex:1;padding:.6rem;border-radius:.4rem;border:none;background-color:var(--clr-background-blue-gray-50);color:var(--clr-text-primary)}.batch-forward-actions button.primary{background-color:var(--clr-primary-accent);color:var(--clr-bright)}#send-message-panel{display:flex;align-items:center;flex:none;padding:.4rem .4rem .4rem .6rem;background-color:var(--clr-background-blue-gray-50);z-index:2;min-height:4rem}#send-message-panel #writing-disabled{width:100%;text-align:center;font-size:1.2rem}#send-message-wrapper{position:relative;background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);z-index:2}#mention-picker{position:absolute;left:.5rem;right:.5rem;bottom:100%;margin-bottom:.3rem;max-height:12rem;overflow-y:auto;background:#fff;border-radius:.4rem;box-shadow:0 -.2rem .6rem rgba(0,0,0,.15);z-index:3}.mention-picker-row{padding:.6rem .9rem;cursor:pointer}.mention-picker-row.active,.mention-picker-row:hover{background:var(--clr-background-blue-gray-50)}.mention-picker-empty{padding:.6rem .9rem;color:var(--clr-text-tertiary)}#attach-panel,#emoji-panel{flex:none;background:#fff;border-top:1px solid var(--clr-shadow-panel-divider);max-height:12rem;overflow-y:auto}#emoji-panel-tabs{display:flex;padding:.4rem .6rem 0}#emoji-panel-tabs a{padding:.3rem .8rem;font-size:1.3rem;border-bottom:2px solid transparent;text-decoration:none}#emoji-panel-tabs a.active{border-bottom-color:var(--clr-primary-accent)}#emoji-panel-grid{display:flex;flex-wrap:wrap;padding:.4rem}#emoji-panel-grid a{width:2.4rem;height:2.4rem;display:flex;align-items:center;justify-content:center;font-size:1.4rem;text-decoration:none}#emoji-panel-footer{display:flex;align-items:center;justify-content:space-between;padding:.4rem .8rem .6rem;border-top:1px solid var(--clr-shadow-panel-divider)}#emoji-panel-footer a{display:flex;align-items:center;justify-content:center;width:2.4rem;height:2.4rem;text-decoration:none;color:var(--clr-text-tertiary)}#emoji-panel-footer a.emoji-panel-send{color:light-dark(#90caf9,#4a7ba6)}#emoji-panel-footer a.emoji-panel-send.active{color:var(--clr-primary-accent)}.emoji-panel-empty{width:100%;padding:1rem;text-align:center;color:var(--clr-text-tertiary)}#attach-panel{display:grid;grid-template-columns:repeat(4,1fr);gap:.6rem;padding:1rem .6rem}#attach-panel a{display:flex;flex-direction:column;align-items:center;gap:.3rem;font-size:.8rem;color:var(--clr-text-primary);text-decoration:none}#attach-panel a .material-icons{width:3rem;height:3rem;display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--clr-background-blue-gray-50);font-size:1.5rem}#attach-panel a.disabled{opacity:.4;pointer-events:none}.send-message-picker-backdrop{position:fixed;inset:0;z-index:20;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.send-message-picker-backdrop>section{width:100%;max-height:70vh;display:flex;flex-direction:column;background:#fff;border-radius:.6rem .6rem 0 0}.send-message-picker-backdrop header{display:flex;align-items:center;justify-content:space-between;padding:.9rem 1rem;font-weight:600;border-bottom:1px solid var(--clr-shadow-panel-divider)}.send-message-picker-backdrop header a{color:var(--clr-text-tertiary)}.send-message-picker-list{overflow-y:auto;padding:.4rem 0}.send-message-picker-list a{display:block;padding:.75rem 1rem;color:var(--clr-text-primary);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.send-message-picker-empty{padding:1.5rem;text-align:center;color:var(--clr-text-tertiary)}#sendMessage{overflow:hidden;overflow-wrap:break-word}#send-message-panel .material-icons{min-width:2rem;font-size:1.6rem}#send-message-panel .material-icons.secondary,i.material-icons.disabled{color:var(--clr-text-tertiary)!important}#send-message-panel .material-icons.secondary:hover{color:var(--clr-primary-accent)!important}#send-message-input{overflow:hidden auto;min-height:2.5rem;max-height:6rem}.accept-invite-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);width:100%;z-index:1}.accept-invite-panel .title{font-size:1.2rem;padding:.75rem}.accept-invite-panel .footer{background-color:var(--clr-background-off-white);white-space:nowrap;padding-bottom:.35rem;text-align:center}.accept-invite-panel button{font-size:1rem;height:2em;line-height:2em;border:1px solid var(--clr-transparent);margin:.25rem;box-shadow:0 1px 2px 0 var(--clr-shadow-button)}#dummy-view{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:var(--clr-cyan-50);text-align:center}#dummy-view-icon{display:grid;place-items:center;width:6.5rem;height:6.5rem;margin:0 auto .8rem;border-radius:1.2rem;color:#fff;background:#2878d6}#dummy-view-icon .material-icons{font-size:4.2rem}#dummy-view h2{margin:0;font-size:1.25rem}#dummy-view p{margin:.25rem 0 0;color:#777f89}#image-preview{position:absolute;display:flex;flex-direction:column;top:0;left:0;width:100%;height:100%;z-index:2;background-color:var(--clr-overlay-white-strong)}#preview-caption-panel{display:flex;justify-content:space-between;background-color:var(--clr-background-blue-gray-50);box-shadow:0 1px 2px var(--clr-shadow-silver-subtle);line-height:2rem;flex-shrink:0;flex-grow:0;height:var(--caption-panel-height);padding:1rem .75rem 0;font-size:120%;z-index:3}#preview-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#preview-caption-panel a:hover{color:var(--clr-dark)}#image-preview-container{display:flex;justify-content:space-around;align-items:center;overflow:hidden;background-color:var(--clr-gray-medium-bg);width:100%;height:100%}#image-preview-footer{display:flex;justify-content:space-around;height:3.2rem;line-height:1.5rem;background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);flex-grow:0;flex-shrink:0;z-index:1}#image-preview-container .material-icons{font-size:6rem}#image-preview-container .doc-card{display:flex;flex-direction:column;overflow-x:hidden;background-color:var(--clr-std-ltgray);padding:1rem;border-radius:.5rem;max-width:30rem}.doc-card .avatar-box{width:10rem;height:10rem;font-size:4.5rem}.doc-card .avatar-box .material-icons{line-height:10rem}#video-container{position:absolute;display:flex;flex-direction:column;justify-content:space-between;top:0;left:0;width:100%;height:100%;background-color:var(--clr-overlay-white-strong);z-index:200}#video-container.minimized{left:auto;top:1rem;right:1rem;width:18rem;height:18rem;background-color:unset;user-select:none;cursor:grab;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);border-radius:.5rem}#video-container.audio-minimized{width:auto;height:auto;background-color:unset;box-shadow:none}.call-pill{display:flex;align-items:center;gap:.5rem;background-color:var(--clr-bright);border-radius:999px;padding:.5rem .75rem .5rem 1rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);cursor:grab}.call-pill>.material-icons{color:var(--clr-badge-green-text);font-size:1.3rem}.call-pill-duration{color:var(--clr-text-primary);font-variant-numeric:tabular-nums;font-size:.9rem;white-space:nowrap}.call-pill-row{display:flex;align-items:center;gap:.5rem}.audio-minimized button.full-screen{position:static;width:1.5rem;height:1.5rem}.audio-minimized button.full-screen .material-icons{font-size:1.1rem}.call-duration{position:absolute;top:1.5rem;left:50%;transform:translateX(-50%);z-index:2;color:#fff;background-color:var(--clr-shadow-dialog);padding:.3rem 1rem;border-radius:999px;font-variant-numeric:tabular-nums;font-size:.95rem}#controls{position:absolute;display:flex;column-gap:1rem;align-items:center;align-self:center;justify-content:center;bottom:2.5rem;z-index:1}#controls.minimized{column-gap:.5rem;bottom:1.75rem}#controls button{position:relative;display:flex;align-items:center;justify-content:center;border-radius:50%;width:4rem;height:4rem;min-width:auto;box-shadow:0 3px 6px 0 var(--clr-shadow-button)}#controls.minimized button{width:2.75rem;height:2.75rem;box-shadow:0 2px 4px 0 var(--clr-shadow-button)}#controls button .material-icons{font-size:1.8rem}#controls.minimized button .material-icons{font-size:1.4rem}#controls button.off{background-color:rgba(0,0,0,.55);color:#fff}#controls button.off:active:not([disabled]),#controls button.off:hover:not([disabled]){background-color:rgba(0,0,0,.7)}button.full-screen{position:absolute;top:2rem;left:2rem;z-index:1;width:2.5rem;height:2.5rem;border-radius:.5rem;padding:0;box-shadow:none;background-color:transparent;min-width:unset}.minimized:not(.audio-minimized) button.full-screen{top:1rem;left:1rem;width:2rem;height:2rem}button.full-screen:hover:not([disabled]),button:active:not([disabled]){color:var(--clr-text-secondary)}button.full-screen .material-icons{font-size:x-large}.minimized:not(.audio-minimized) button.full-screen .material-icons{font-size:large}#video-container-panel{position:relative;height:100%;width:100%}.call-party{background-color:var(--clr-background-extra-light-gray);border-radius:.5rem;border:2px solid var(--clr-border-light);overflow:hidden}.call-party:hover{border-color:var(--clr-primary-accent)}.minimized .call-party{border-width:1px}.call-party.peer{position:absolute;top:1rem;left:1rem;right:1rem;bottom:1rem;z-index:1}.minimized .call-party.peer{top:0;left:0;right:0;bottom:0}.call-party.self{position:absolute;right:.5rem;bottom:.5rem;width:10rem;height:10rem;z-index:2;cursor:grab}.call-party.self[disabled]{cursor:unset;display:none}video{width:100%;height:100%;object-fit:contain}.call-party.self video{transform:scaleX(-1)}.call-party[disabled] video{display:none}.caller-card{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column}.caller-card .avatar-box{width:10rem;height:10rem;font-size:6rem}.caller-card.pulse .lettertile,.caller-card.pulse img.avatar{animation:active-call 1.5s linear infinite}.caller-card .avatar-box .material-icons{font-size:6rem;line-height:1.6}.minimized .caller-card .avatar-box{width:6rem;height:6rem;font-size:3.6rem}.call-party .caller-name{max-width:12rem;padding:.15rem .5rem;border-radius:.35rem;z-index:1;text-shadow:0 0 1px var(--clr-bright);background-color:var(--clr-background-off-white);text-overflow:ellipsis;overflow-x:hidden;white-space:nowrap}.call-party.self .caller-name.inactive{position:absolute;bottom:.25rem;right:.25rem}.caller-card .caller-name{font-size:larger;margin-top:.5rem}.call-peer-card h1 .trusted-badge,.caller-card .trusted-badge{display:inline-block}.caller-card .caller-status{margin-top:.5rem;color:var(--clr-bright);font-size:.9rem;opacity:.8}.call-party.peer .caller-name.inactive{position:absolute;font-size:larger;left:1rem;bottom:.5rem;margin:0 auto}.minimized .caller-name{padding:.1rem .35rem;border-radius:.25rem;font-weight:lighter}.call-message{display:flex;flex-direction:row}.call-message .duration{font-weight:lighter}#go-to-latest{right:1.5rem;bottom:1rem}@keyframes active-call{0%{box-shadow:0 0 0 .1rem var(--clr-primary-accent-transparent-medium),0 0 0 .3rem var(--clr-primary-accent-transparent-medium),0 0 0 .5rem var(--clr-primary-accent-transparent-medium)}to{box-shadow:0 0 0 .4rem var(--clr-primary-accent-transparent-medium),0 0 0 2rem rgba(33,150,243,0),0 0 0 3rem rgba(33,150,243,0)}}.chat-box{list-style:none;padding:0 0 3.5rem;margin:0 .5rem;scroll-behavior:smooth}.chat-box.group{margin-left:-.4rem}.chat-box li{display:flex;margin:0;padding:0;align-items:flex-end}.chat-box .right{justify-content:flex-end}.voice-unread-dot{position:absolute;top:-.15rem;right:-.15rem;width:.55rem;height:.55rem;border-radius:50%;background:#e3444d;border:1.5px solid var(--clr-background-primary,#fff);z-index:1}.bubble{position:relative;display:flex;max-width:36rem;min-width:9rem;height:auto;padding:.75rem .5rem;margin:0;text-align:left;color:var(--clr-bubble-text);border-radius:.5rem;transition:background-color .5s ease-out;transition-delay:.3s;filter:drop-shadow(.5px .5px .7px var(--clr-shadow-bubble-drop))}.chat-box li.single{margin-top:.25rem;margin-bottom:.75rem}.chat-box li.first{margin-top:.25rem;margin-bottom:.15rem}.chat-box li.middle{margin-top:.15rem;margin-bottom:.15rem}.chat-box li.last{margin-top:.15rem;margin-bottom:.75rem}.left .bubble{background-color:var(--clr-bubble-left-bg);margin-right:.5rem}.left.flash .bubble{background-color:var(--clr-bubble-left-bg-flash)}.left .bubble.tip{border-bottom-left-radius:0}.right .bubble{background-color:var(--clr-bubble-right-bg);color:var(--clr-bubble-right-text);margin-left:1.75rem}.right.flash .bubble{background-color:var(--clr-bubble-right-bg-flash)}.right .bubble.tip{border-bottom-right-radius:0}.chat-box .meta{justify-content:center;margin-top:.5rem;margin-bottom:.5rem}.chat-box .meta .bubble{color:var(--clr-bubble-meta-text);min-width:unset}.meta .bubble.deleted{background-color:var(--clr-bubble-meta-deleted-bg);padding:.75rem .75rem .5rem}.meta .bubble.date{font-size:smaller;padding:.5rem;background-color:var(--clr-bubble-meta-date-bg);text-transform:uppercase;user-select:none}.meta .bubble.system{max-width:90%;padding:.3rem .5rem;background-color:transparent;font-size:.8rem;text-align:center}.left .bubble.tip:before{content:"";position:absolute;width:.85rem;height:.85rem;left:-.8rem;bottom:0;background-color:var(--clr-bubble-left-bg);clip-path:polygon(100% 0,0 110%,100% 110%);-webkit-clip-path:polygon(100% 0,0 110%,100% 110%);border-bottom-left-radius:.3rem;transition:background-color .5s ease-out;transition-delay:.3s}.left.flash .bubble.tip:before{background-color:var(--clr-bubble-left-bg-flash)}.right .bubble.tip:before{content:"";position:absolute;width:.85rem;height:.85rem;left:99.8%;bottom:0;background-color:var(--clr-bubble-right-bg);clip-path:polygon(0 0,100% 110%,0 110%);-webkit-clip-path:polygon(0 0,100% 110%,0 110%);border-bottom-right-radius:.3rem;transition:background-color .5s ease-out;transition-delay:.3s}.right.flash .bubble.tip:before{background-color:var(--clr-bubble-right-bg-flash)}.chat-box .avatar-box{position:relative;width:1.4rem;min-width:1.4rem;height:1.4rem;min-height:1.4rem;font-size:.8rem;margin-bottom:.8rem;margin-right:.8rem}.bubble div.content-meta{width:100%}.bubble div.message-content{position:relative;margin:0;width:100%;max-width:36rem;overflow-wrap:anywhere;padding:0 .75rem;font-size:var(--message-text-size)}.bubble div.message-content.emoji-1{font-size:300%}.bubble div.message-content.emoji-2{font-size:241%}.bubble div.message-content.emoji-3{font-size:193%}.bubble div.message-content.emoji-4{font-size:155%}.bubble div.message-content.emoji-5{font-size:125%}.bubble div.message-content:after{content:".";display:block;height:0;clear:both;visibility:hidden}.chat-box .timestamp-padding{display:inline-block;width:4rem;height:0}.chat-box .timestamp{position:relative;font-size:80%;color:var(--clr-bubble-timestamp-text);top:.35rem;float:right;white-space:nowrap;user-select:none}.right .bubble .timestamp{color:hsla(0,0%,100%,.85)}.right .bubble .timestamp .blue{color:#fff!important}.chat-box .author{font-size:80%;color:var(--clr-bubble-author-text);max-width:12em;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden}.image-preview,.inline-image{position:relative;overflow:hidden;border-radius:.1rem}.inline-image{max-width:36rem;max-height:24rem}.inline-image>.rounded-container{position:relative;margin:.25rem auto;bottom:2rem;border-left:.25rem solid var(--clr-transparent);border-right:.25rem solid var(--clr-transparent)}img.image-preview:before,img.inline-image:before{position:absolute;display:flex;font-size:.9rem;font-weight:lighter;color:var(--clr-text-primary);top:0;left:0;width:100%;height:100%;justify-content:center;background:center no-repeat var(--clr-border-light) url(../img/broken_image.png)}img.inline-image:before{content:attr(alt);background-size:3rem 3rem}img.image-preview:before{content:" ";background-size:10rem 10rem}.inline-image.video>img.inline-image:before,img.image-preview.video:before{background:center no-repeat var(--clr-border-light) url(../img/broken_video.png)}.inline-image.video>img.inline-image:before{background-size:3rem 3rem}.inline-video{display:flex;position:relative;align-items:center;justify-content:center}.inline-video>img.inline-image:before{background:var(--clr-border-light)}.inline-video .duration{padding:.25rem .5rem;color:var(--clr-toast-bg);background-color:hsla(0,0%,100%,.5);position:absolute;bottom:.25rem;left:.25rem;font-size:80%;border-radius:.3rem}.inline-video .play-control{display:flex;position:absolute;align-items:center;justify-content:center;width:4rem;height:4rem;background-color:rgba(0,0,0,.4);border-radius:50%;pointer-events:none;cursor:pointer}.attachment{display:flex}.attachment:last-of-type{margin-bottom:-.45rem}#info-caption-panel{background-color:var(--clr-background-blue-gray-300)}#info-caption-panel a{color:var(--clr-text-secondary);line-height:1;text-decoration:none}#info-caption-panel :hover{color:var(--clr-dark)}#info-title{margin-right:auto}#group-manager{position:relative;display:flex;flex-direction:column;height:100%;overflow-y:hidden}#group-manager-buttons{display:flex;background-color:var(--clr-background-blue-gray-50);box-shadow:0 -1px var(--clr-shadow-panel-divider);z-index:2;justify-content:space-around;padding:.4rem;height:4rem;border-left:1px solid var(--clr-border-light)}ul.tabbar{display:flex;flex-grow:0;flex-shrink:0;background:var(--clr-tabbar-bg);list-style:none;margin:0;width:100%;overflow:hidden;padding:0 0 0 1rem}ul.tabbar>li{position:relative;height:2.4rem;box-shadow:inset 0 -2px 2.5px -1px var(--clr-shadow-button)}ul.tabbar li.active{background:var(--clr-bright)}ul.tabbar li:after{height:.1rem;width:100%;content:"";bottom:0;left:0;position:absolute;background:var(--clr-tabbar-inactive-border)}ul.tabbar li.active:after{height:.15rem;content:"";bottom:0;left:0;position:absolute;background:var(--clr-tabbar-active-border);animation:tabbar-border-expand .2s cubic-bezier(.4,0,.4,1) 0s alternate forwards}@keyframes tabbar-border-expand{0%{opacity:0;width:0}to{opacity:1;width:100%}}ul.tabbar>li>a{position:relative;padding-left:1rem;padding-right:1rem;text-align:center;line-height:2.4rem;font-weight:400;font-size:1.3rem;font-variant:small-caps;text-decoration:none;color:var(--clr-tabbar-inactive-text);overflow:hidden}ul.tabbar li.active>a{color:var(--clr-tabbar-active-text)}.unread{display:inline-block;font-size:.75rem;font-weight:bolder;background-color:var(--clr-secondary-accent);color:var(--clr-bright);border-radius:50%;width:1.35rem;height:1.35rem;margin-left:.5rem;line-height:1.45rem;text-align:center;vertical-align:middle}.material-icons.as-badge{padding-left:.2rem;font-size:1.15rem;color:var(--clr-chip-remove-icon-bg)}.badge{font-family:Roboto Mono,Courier,monospace,sans-serif;font-size:.8rem;border:1px solid var(--clr-badge-default-border);background-color:var(--clr-badge-default-bg);color:var(--clr-badge-default-text);padding:.05rem .25rem;margin:.05rem .1rem;border-radius:.2rem;display:inline-block;align-self:flex-start}.badge.green{border-color:var(--clr-badge-green-border);background-color:var(--clr-badge-green-bg);color:var(--clr-badge-green-text)}.badge.yellow{border-color:var(--clr-badge-yellow-border);background-color:var(--clr-badge-yellow-bg);color:var(--clr-badge-yellow-text)}.badge.blue{border-color:var(--clr-badge-blue-border);background-color:var(--clr-badge-blue-bg);color:var(--clr-badge-blue-text)}.badge.red{border-color:var(--clr-badge-red-border);background-color:var(--clr-badge-red-bg);color:var(--clr-badge-red-text)}.badge.magenta{border-color:var(--clr-badge-magenta-border);background-color:var(--clr-badge-magenta-bg);color:var(--clr-badge-magenta-text)}.lettertile{width:100%;padding-bottom:100%;border-radius:50%;user-select:none}.lettertile>div{position:absolute;display:flex;flex-shrink:0;flex-grow:0;top:0;bottom:0;left:0;right:0;text-transform:uppercase;align-items:center;justify-content:center;text-align:center;border-radius:50%;line-height:1;padding-top:.1em;color:var(--clr-lettertile-default-text)}.lettertile:hover{color:var(--clr-lettertile-hover-text)}.lettertile.disabled{opacity:.5}.lt-bg-0{background-color:var(--clr-lt-bg-0)}.lt-bg-1{background-color:var(--clr-lt-bg-1)}.lt-bg-2{background-color:var(--clr-lt-bg-2)}.lt-bg-3{background-color:var(--clr-lt-bg-3)}.lt-bg-4{background-color:var(--clr-lt-bg-4)}.lt-bg-5{background-color:var(--clr-lt-bg-5)}.lt-bg-6{background-color:var(--clr-lt-bg-6)}.lt-bg-7{background-color:var(--clr-lt-bg-7)}.lt-bg-8{background-color:var(--clr-lt-bg-8)}.lt-bg-9{background-color:var(--clr-lt-bg-9)}.lt-bg-10{background-color:var(--clr-lt-bg-10)}.lt-bg-11{background-color:var(--clr-lt-bg-11)}.lt-bg-12{background-color:var(--clr-lt-bg-12)}.lt-bg-13{background-color:var(--clr-lt-bg-13)}.lt-bg-14{background-color:var(--clr-lt-bg-14)}.lt-bg-15{background-color:var(--clr-lt-bg-15)}.dk-bg-0{background-color:var(--clr-dk-bg-0)}.dk-bg-1{background-color:var(--clr-dk-bg-1)}.dk-bg-2{background-color:var(--clr-dk-bg-2)}.dk-bg-3{background-color:var(--clr-dk-bg-3)}.dk-bg-4{background-color:var(--clr-dk-bg-4)}.dk-bg-5{background-color:var(--clr-dk-bg-5)}.dk-bg-6{background-color:var(--clr-dk-bg-6)}.dk-bg-7{background-color:var(--clr-dk-bg-7)}.dk-bg-8{background-color:var(--clr-dk-bg-8)}.dk-bg-9{background-color:var(--clr-dk-bg-9)}.dk-bg-10{background-color:var(--clr-dk-bg-10)}.dk-bg-11{background-color:var(--clr-dk-bg-11)}.dk-bg-12{background-color:var(--clr-dk-bg-12)}.dk-bg-13{background-color:var(--clr-dk-bg-13)}.dk-bg-14{background-color:var(--clr-dk-bg-14)}.dk-bg-15{background-color:var(--clr-dk-bg-15)}.lt-fg-0{color:var(--clr-lt-fg-0)!important}.lt-fg-1{color:var(--clr-lt-fg-1)!important}.lt-fg-2{color:var(--clr-lt-fg-2)!important}.lt-fg-3{color:var(--clr-lt-fg-3)!important}.lt-fg-4{color:var(--clr-lt-fg-4)!important}.lt-fg-5{color:var(--clr-lt-fg-5)!important}.lt-fg-6{color:var(--clr-lt-fg-6)!important}.lt-fg-7{color:var(--clr-lt-fg-7)!important}.lt-fg-8{color:var(--clr-lt-fg-8)!important}.lt-fg-9{color:var(--clr-lt-fg-9)!important}.lt-fg-10{color:var(--clr-lt-fg-10)!important}.lt-fg-11{color:var(--clr-lt-fg-11)!important}.lt-fg-12{color:var(--clr-lt-fg-12)!important}.lt-fg-13{color:var(--clr-lt-fg-13)!important}.lt-fg-14{color:var(--clr-lt-fg-14)!important}.lt-fg-15{color:var(--clr-lt-fg-15)!important}.dk-fg-0{color:var(--clr-dk-fg-0)!important}.dk-fg-1{color:var(--clr-dk-fg-1)!important}.dk-fg-2{color:var(--clr-dk-fg-2)!important}.dk-fg-3{color:var(--clr-dk-fg-3)!important}.dk-fg-4{color:var(--clr-dk-fg-4)!important}.dk-fg-5{color:var(--clr-dk-fg-5)!important}.dk-fg-6{color:var(--clr-dk-fg-6)!important}.dk-fg-7{color:var(--clr-dk-fg-7)!important}.dk-fg-8{color:var(--clr-dk-fg-8)!important}.dk-fg-9{color:var(--clr-dk-fg-9)!important}.dk-fg-10{color:var(--clr-dk-fg-10)!important}.dk-fg-11{color:var(--clr-dk-fg-11)!important}.dk-fg-12{color:var(--clr-dk-fg-12)!important}.dk-fg-13{color:var(--clr-dk-fg-13)!important}.dk-fg-14{color:var(--clr-dk-fg-14)!important}.dk-fg-15{color:var(--clr-dk-fg-15)!important}.material-icons{font-size:1.4rem;line-height:1;vertical-align:middle;text-align:center;user-select:none}.material-icons.small{font-size:1rem}.material-icons.medium{font-size:1.2rem}.material-icons.large{font-size:1.6rem}.material-icons.big{font-size:2.2rem}.material-icons.x-big{font-size:3rem}.material-icons.huge{font-size:4rem}.composed-material{display:inline-block;position:relative}.composed-material .second{position:absolute;font-size:85%;top:7%;left:39%;font-weight:700}.composed-material .second-small{position:absolute;font-size:62%;top:14%;left:30%;font-weight:700}.material-icons.outline{position:relative;text-shadow:-1px 1px var(--clr-bright),1px 1px var(--clr-bright),1px -1px var(--clr-bright),-1px -1px var(--clr-bright)}#self-avatar .material-icons{font-size:2.4rem;line-height:3rem}.avatar-box .material-icons{color:var(--clr-lettertile-default-text);border-radius:50%;width:inherit;height:inherit}.chip-input{display:flex;flex-wrap:wrap;flex-grow:1;cursor:text;font-size:1.1rem;font-weight:400;background:var(--clr-transparent);border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);transition:all .1s ease-in-out;max-height:10rem;min-height:4rem;overflow-y:scroll;margin:.25rem 0;outline:none;color:var(--clr-input-text);align-items:center;justify-content:flex-start;text-align:center}.chip-input.focused{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}.chip-input>input[type=text]{display:inline-block;width:auto;border:none;box-shadow:none;min-width:4rem;flex:1 0 auto}.chip,.chip-input>input[type=text]{line-height:1.8;height:1.8rem;margin:.125rem}.chip{display:flex;flex:0 0 auto;align-items:center;border-radius:.9rem;background-color:var(--clr-chip-bg);font-size:90%;max-width:12rem;overflow:hidden}.chip,.chip>span{white-space:nowrap;text-overflow:ellipsis}.chip>span{overflow-x:hidden}.chip.invalid{color:var(--clr-chip-invalid-text);background-color:var(--clr-chip-invalid-bg)}.chip>a{display:inline-block;color:var(--clr-chip-remove-icon-text);background-color:var(--clr-chip-remove-icon-bg);border-radius:50%;margin:.3rem;width:1.175rem;min-width:1.175rem;height:1.175rem;line-height:1.15;text-decoration:none}.chip>a:focus,.chip>a:hover{text-decoration:none;color:var(--clr-chip-remove-icon-hover-text);background-color:var(--clr-chip-remove-icon-hover-bg)}.chip .avatar-box{position:relative;width:1.8rem;min-width:1.8rem;height:1.8rem;min-height:1.8rem;font-size:1rem;margin-right:.2rem}.chip .avatar-box .material-icons{font-size:1.4rem;line-height:1.8rem}.chip .spacer{display:inline-block;margin:.3rem;width:.25rem;height:1.175rem}.load-spinner-box{--size-small:2.5rem;--size-large:4rem;position:absolute;box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button);border-radius:50%;padding:.25rem;width:var(--size-small);height:var(--size-small);left:0;right:0;top:5rem;margin-left:auto;margin-right:auto;background-color:var(--clr-bright);z-index:2}.load-spinner-box.large{width:var(--size-large);height:var(--size-large)}.load-spinner-box.clear{box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button-inset-active);background-color:hsla(0,0%,100%,.5)}.load-spinner-box.centered{top:calc(var(--size-small)/2 - .25rem)}.load-spinner-box.large.centered{top:calc(var(--size-large)/2 - .25rem)}.loader-spinner{border-top:.35rem solid var(--clr-spinner-track);border-radius:50%;border:.35rem solid var(--clr-spinner-track);border-top-color:var(--clr-spinner-active);width:2rem;height:2rem;animation:spin 1.5s linear infinite}.load-spinner-box.large .loader-spinner{width:3.5rem;height:3.5rem}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.uploader{display:flex}.uploader>div{position:relative;height:.6rem;padding:.15rem;margin:.35rem;width:6rem;line-height:0;border-radius:.1rem;background-color:var(--clr-background-blue-gray-100)}.uploader>div>span{display:inline-block;height:.3rem;background-color:var(--clr-primary-action);border-radius:.08rem}.highlight{color:var(--clr-highlight-text);font-weight:bolder}.highlight .preview{color:var(--clr-highlight-preview-text);font-weight:inherit}.cropper{height:21rem;margin:1rem auto auto;align-self:center;transform:translateZ(0)}.cropper,.cropper .bounding-box{position:relative;width:18rem;border-radius:.25rem}.cropper .bounding-box{height:18rem;overflow:hidden;z-index:1;border:2px solid var(--clr-cropper-bounding-box-border);box-shadow:1px 1px 3px var(--clr-shadow-cropper-gray);background-color:var(--clr-cropper-bounding-box-bg)}.cropper .preview{position:absolute;max-height:none;max-width:none;z-index:-1}.cropper .cutout{position:absolute;width:17.8rem;height:17.8rem;border:1px dashed var(--clr-cropper-cutout-border);margin:auto;top:0;bottom:0;right:0;left:0;box-shadow:0 0 150rem 150rem var(--clr-cropper-cutout-shadow);z-index:0}.cropper .cutout.circle{border-radius:50%}.cropper .overlay{position:absolute;cursor:move;touch-action:none;z-index:1}.cropper .zoom-wrapper{height:2rem;width:80%;margin:1rem auto;text-align:center}.cropper .zoom{box-shadow:none;pointer-events:none;z-index:2}.cropper .zoom:focus{outline:none}.reply-quote{position:relative;padding:.15rem .5rem .25rem;border-left:.25rem solid var(--clr-reply-quote-border);line-height:1.5em;font-weight:lighter;border-radius:.25rem;color:var(--clr-reply-quote-text);cursor:pointer}.chat-box .bubble .reply-quote{margin:.15rem -.75rem .3rem}.chat-box .bubble .reply-quote:first-child{margin-top:-.25rem}.chat-box .left .reply-quote{background-color:var(--clr-reply-quote-left-bg)}.chat-box .right .reply-quote{background-color:var(--clr-reply-quote-right-bg)}.reply-quote .inline-image{vertical-align:middle;margin-bottom:.1rem}.reply-quote img.inline-image:before{content:""}#reply-quote-preview{display:flex;align-items:center}#reply-quote-preview .reply-quote{width:100%;background-color:var(--clr-reply-quote-preview-bg);margin:.35rem .5rem 0 0;cursor:auto}#reply-quote-preview .cancel{min-width:2.4rem;text-align:center}#reply-quote-preview .inline-image{background-color:var(--clr-border-light)}#reply-quote-preview img.inline-image:before{content:""}#send-message-panel #reply-quote-preview{width:100%}#send-message-panel #reply-quote-preview .reply-quote{margin-bottom:.35rem}.forwarding-quote{font-size:200%;line-height:200%}.mention{font-weight:500}.forward-dialog{position:relative;overflow:hidden;background-color:var(--clr-bright);box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);padding:.5rem;border-radius:.3rem;margin:auto 1rem;width:24rem;height:80%}.forward-dialog .scrollable-panel{height:80%}.audio{display:flex;margin-left:auto;align-items:center;flex:none;background-color:var(--clr-audio-bg);height:3rem;border-radius:1.5rem}.audio canvas{width:14rem;height:2.6rem;margin-right:2rem}.audio canvas.playback{margin-right:0}.compose-record-overlay canvas{width:6rem;height:1.8rem;margin-top:.4rem}.audio .duration{font-size:large}.audio-player{display:flex;align-items:center}.audio-player .material-icons.large{font-size:2.4rem;color:var(--clr-audio-icon)}.audio-player .material-icons.disabled{color:var(--clr-audio-icon-disabled);cursor:default}.audio-player .playback{width:14rem;height:2.6rem}.audio-player canvas.playback{display:block}.audio-player .playback-row{display:flex;align-items:center;justify-content:center;color:var(--clr-audio-icon);font-size:small}.audio-player .timer{font-size:smaller;color:var(--clr-audio-timer-text)}#pinned-wrapper{margin-right:.5rem}#pinned-wrapper,.pinned{position:relative;display:flex;align-items:center;height:100%}.pinned{padding:.15rem .5rem .25rem;background-color:var(--clr-background-off-white);background-position:50%;font-weight:lighter;border-radius:0 .25rem .25rem 0;color:var(--clr-text-primary);width:24rem;min-width:0;cursor:pointer;transition:background .4s}.pinned>p{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.pinned:hover{background-color:var(--clr-bright)}.pinned:active{background-color:var(--clr-blue-wash-medium);transition:background 0s}.pinned-scroll{position:relative;display:flex;flex-direction:column;align-items:center;border-radius:.25rem 0 0 .25rem;background-color:var(--clr-background-extra-light-gray);justify-content:space-evenly;height:100%;padding:.2rem;margin-left:.35rem;user-select:none}.pinned-scroll .dot{width:.3rem;height:.3rem;border-radius:50%;background-color:var(--clr-text-tertiary);user-select:none}.pinned-scroll .adot{width:.45rem;height:.45rem;border-radius:50%;background-color:var(--clr-light-blue-accent);user-select:none}#pinned-wrapper:hover .menuTrigger{opacity:.9}#pinned-wrapper:hover .menuTrigger a{color:var(--clr-text-secondary)}.pinned-menu{position:absolute;display:flex;flex-direction:column;background-color:var(--clr-pinned-menu-bg);border-radius:0 .25rem .25rem 0;justify-content:space-evenly;top:0;bottom:0;right:0}.pinned-menu .menuTrigger{position:relative;right:0}.contact-card{position:relative;background-color:var(--clr-background-off-white);border-radius:.5rem;display:flex;flex-direction:column;min-width:14rem}.contact-card .avatar-box{position:relative;width:1.8rem;height:1.8rem;font-size:1rem;margin-right:.75rem;margin-bottom:0}.contact-card .contact-body{align-items:center;background-color:var(--clr-background-blue-gray-50);display:flex;padding:.75rem;border-radius:.5rem .5rem 0 0;border-bottom:none}.contact-card .contact-body .name-box{display:flex;flex-direction:column;overflow:hidden}.contact-card .contact-body .name-box .name{color:var(--clr-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-card .contact-body .name-box .org{color:var(--clr-text-secondary);font-size:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:300}.contact-card .contact-actions{display:flex;justify-content:space-evenly;align-items:center;padding:0 .5rem;border-radius:0 0 .5rem .5rem;border-top:none;background-color:var(--clr-bright)}.contact-card .contact-actions a{cursor:pointer}.contact-card .contact-actions .divider{height:1.8rem;opacity:.5}.drag-n-drop{display:flex;border:.15rem dashed var(--clr-drag-n-drop-border);border-radius:1rem;background-color:var(--clr-drag-n-drop-bg);position:absolute;top:1.5rem;bottom:1.5rem;left:1.5rem;right:1.5rem;z-index:3;justify-content:center;align-items:center;font-size:2rem;color:var(--clr-drag-n-drop-text);outline:.5rem solid var(--clr-drag-n-drop-outline)}.country-flag{display:inline-block;font-size:larger}.dial-code{white-space:nowrap;display:inline-block;cursor:pointer;vertical-align:middle;margin-bottom:.15rem}ul.phone-country-selector{list-style:none;overflow-x:hidden}ul.phone-country-selector>li{position:relative;font-weight:lighter;padding:.25rem .5rem .15rem;cursor:pointer;width:100%}ul.phone-country-selector>li:hover{background-color:var(--clr-background-blue-gray-50)}ul.phone-country-selector>li.selected{background-color:var(--clr-background-blue-gray-100)}ul.phone-country-selector .dial-code{position:absolute;right:.5rem;color:var(--clr-primary-action);font-weight:400}ul.phone-country-selector span{display:inline-block}ul.phone-country-selector span.country{text-overflow:ellipsis;overflow-x:hidden}.image-grid{position:relative;display:grid;grid-template-columns:repeat(auto-fill,minmax(7rem,1fr));gap:.35rem;padding:.25rem}.image-grid-cell{padding:0;margin:0;width:100%;height:7rem;overflow:hidden;border-radius:.25rem;border:1.5px solid transparent;cursor:pointer;box-shadow:0 0 .2rem var( --clr-shadow-hr-inset)}.image-grid-cell img{object-fit:cover}.image-grid-cell.selected{border:1.5px solid var(--clr-secondary-accent)}img.inverted{filter:invert(1)}div.toast{visibility:hidden;display:flex;align-items:center;justify-content:center;position:absolute;min-width:10rem;padding:.5rem 1rem;height:3rem;z-index:3;font-weight:lighter;color:var(--clr-toast-text);background-color:var(--clr-toast-bg);border-radius:.5rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);bottom:2rem;left:50%;translate:-50%}div.toast.show{visibility:visible;animation:fadein .5s,fadeout .5s 2.5s}#sidepanel.auth-onboarding-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f7f9fc;color:#20242c}.auth-onboarding-panel *{box-sizing:border-box;letter-spacing:0}.auth-landing,.auth-page{position:relative;width:100%;min-height:100%;overflow-x:hidden;overflow-y:auto;background:#fff}.auth-soft-bg{background:#f6f7f9}.auth-landing{display:flex;flex-direction:column;align-items:center;padding:max(1.5rem,env(safe-area-inset-top)) 2rem max(1.5rem,env(safe-area-inset-bottom));background:radial-gradient(ellipse 40% 25% at 90% 0,rgba(68,151,255,.14),transparent 72%),#fff}.auth-landing-form{width:min(100%,28rem);margin:auto 0}.auth-brand{display:flex;flex-direction:column;align-items:center;margin-bottom:4rem}.auth-logo{display:grid;place-items:center;width:5.5rem;height:5.5rem;border-radius:.75rem;background:#fff;box-shadow:0 .75rem 2rem rgba(35,74,125,.14)}.auth-logo span{display:grid;place-items:center;width:3.75rem;height:3.75rem;border-radius:50% 50% 50% 18%;color:#fff;background:#1677ff;font-size:2.2rem;font-weight:700;transform:rotate(-18deg)}.auth-brand h1{margin:1.3rem 0 0;color:#14171c;font-size:2rem;font-weight:700}.auth-back-link,.auth-bottom-link,.auth-remove-file,.auth-switch button,.auth-text-button,.auth-top-link{width:auto;min-width:0;height:auto;min-height:0;padding:0;border:0;box-shadow:none;color:#1677ff;background:transparent;font-size:.95rem;text-transform:none}.auth-top-link{position:absolute;top:max(1.5rem,env(safe-area-inset-top));right:2rem}.auth-bottom-link{margin-top:auto;padding-top:2rem}.auth-back-link{position:absolute;top:max(1.5rem,env(safe-area-inset-top));left:2rem;display:flex;align-items:center;color:#616975}.auth-back-link .material-icons{margin-right:.15rem;font-size:1rem}.auth-field-wrap{margin-bottom:1rem}.auth-field{display:flex;align-items:center;min-height:3.8rem;border:1px solid transparent;border-radius:.5rem;background:#f2f4f7;transition:border-color .15s,box-shadow .15s}.auth-field:focus-within{border-color:#4091ff;box-shadow:0 0 0 3px rgba(22,119,255,.1)}.auth-field.invalid{border-color:#d94b4b}.auth-field input{min-width:0;width:100%;height:3.7rem;margin:0;padding:0 1rem;border:0;box-shadow:none;color:#252931;background:transparent;font-size:1rem}.auth-field input:focus{box-shadow:none}.auth-field input::placeholder,.auth-form textarea::placeholder,.auth-list-form input::placeholder,.auth-realname-content input::placeholder{color:#b2b7bf}.auth-field-icon{flex:none;margin-left:1rem;color:#4091ff;font-size:1.35rem}.auth-field-icon-button{flex:none;display:flex;margin:0 0 0 1rem;padding:0;border:0;background:transparent;color:#4091ff}.auth-field-icon-button .material-icons{font-size:1.35rem}.auth-icon-button,.auth-inline-icon{display:grid;place-items:center;flex:none;width:3.25rem;min-width:3.25rem;height:3.25rem;min-height:3.25rem;margin:0;padding:0;border:0;box-shadow:none;color:#a7adb6;background:transparent}.auth-inline-icon .material-icons{font-size:1.25rem}.auth-field-error{margin-top:.4rem;color:#cf3f3f;font-size:.82rem}.auth-primary{width:100%;height:3.8rem;margin:1rem 0 0;border:0;border-radius:.5rem;color:#fff;background:#368bfa;box-shadow:0 .4rem 1rem rgba(54,139,250,.2);font-size:1.08rem;font-weight:500;text-transform:none}.auth-primary:focus:not([disabled]),.auth-primary:hover:not([disabled]){background:#1677e8}.auth-primary[disabled]{color:#fff;background:#b8d5fa;box-shadow:none;cursor:default}.auth-row{display:flex;align-items:center}.auth-row-end{justify-content:flex-end;min-height:1.5rem;margin-top:-.35rem}.auth-switch{margin:1.3rem 0 0;color:#4a4f57;text-align:center}.auth-agreement{display:flex;align-items:flex-start;max-width:32rem;margin-top:auto;color:#454b54;font-size:.9rem;line-height:1.5}.auth-agreement input{width:1.1rem;height:1.1rem;margin:.12rem .55rem 0 0;accent-color:#368bfa}.auth-agreement a{color:#1677ff}.auth-form-alert{display:flex;align-items:center;margin:0 0 1rem;padding:.75rem .9rem;border-radius:.4rem;color:#bd3434;background:#fff1f1;font-size:.9rem}.auth-form-alert .material-icons{margin-right:.45rem;font-size:1.15rem}.auth-header{position:sticky;top:0;z-index:2;display:grid;grid-template-columns:3.5rem 1fr 3.5rem;align-items:center;height:4.25rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #edf0f4;background:hsla(0,0%,100%,.96)}.auth-header h1{margin:0;color:#252931;font-size:1.2rem;text-align:center}.auth-header .auth-icon-button{color:#252931}.auth-header .material-icons{font-size:1.25rem}.auth-content{width:100%;min-height:calc(100% - 4.25rem);margin:0 auto;padding:2rem}.auth-content-narrow{max-width:40rem}.auth-steps{display:grid;grid-template-columns:repeat(3,1fr);margin:0 0 2.25rem;padding:0;list-style:none}.auth-steps li{position:relative;display:flex;flex-direction:column;align-items:center;color:#b4b9c1;text-align:center}.auth-steps li:not(:last-child):after{content:"";position:absolute;top:1rem;left:calc(50% + 1.25rem);width:calc(100% - 2.5rem);height:2px;background:#d9dde3}.auth-steps li.active:not(:last-child):after{background:#4091ff}.auth-steps span{display:grid;place-items:center;width:2rem;height:2rem;border:1px solid #aeb4bd;border-radius:50%;background:#fff}.auth-steps b{margin-top:.55rem;font-size:.86rem;font-weight:500}.auth-steps .active{color:#368bfa}.auth-steps .active span{border-color:#368bfa;color:#fff;background:#368bfa}.auth-label{display:block;margin:1.25rem 0 .55rem;color:#292d34;font-size:1rem;font-weight:500}.auth-label span{margin-left:.35rem;color:#87909c;font-size:.78rem;font-weight:400}.auth-help,.auth-review-time{margin:-.45rem 0 0;color:#9ba1aa;font-size:.84rem}.auth-upload{display:flex;position:relative;flex-direction:column;align-items:center;justify-content:center;min-height:12rem;overflow:hidden;border:1px dashed #c7ccd4;border-radius:.5rem;background:#fafafa;cursor:pointer}.auth-upload.invalid{border-color:#d94b4b}.auth-add-screenshot input,.auth-upload input{display:none}.auth-upload .material-icons{color:#4091ff;font-size:3.4rem}.auth-upload img{width:100%;height:8rem;object-fit:contain}.auth-upload strong{max-width:90%;margin-top:.65rem;overflow:hidden;color:#252931;font-size:.95rem;text-overflow:ellipsis;white-space:nowrap}.auth-upload small{margin-top:.35rem;color:#a4aab2}.auth-remove-file{margin-top:.5rem;color:#cf3f3f}.auth-review-time{display:flex;align-items:center;justify-content:center;margin-top:.85rem}.auth-review-time .material-icons{margin-right:.35rem;font-size:1rem}.auth-form textarea{width:100%;min-height:10rem;resize:vertical;padding:1rem;border:1px solid #e1e4e9;border-radius:.5rem;box-shadow:none;color:#252931;background:#fff;font:inherit;line-height:1.6}.auth-form textarea:focus{border-color:#4091ff;outline:none;box-shadow:0 0 0 3px rgba(22,119,255,.1)}.auth-form textarea.invalid{border-color:#d94b4b}.auth-counter{margin:-1.7rem .75rem .8rem 0;color:#a0a6af;font-size:.8rem;text-align:right}.auth-screenshot-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem}.auth-add-screenshot,.auth-screenshot{position:relative;aspect-ratio:1;overflow:hidden;border:1px solid #dce0e5;border-radius:.4rem;background:#fff}.auth-screenshot img{width:100%;height:100%;object-fit:cover}.auth-screenshot button{position:absolute;top:.2rem;right:.2rem;display:grid;place-items:center;width:1.4rem;min-width:1.4rem;height:1.4rem;min-height:1.4rem;margin:0;padding:0;border:0;border-radius:50%;color:#fff;background:rgba(0,0,0,.58)}.auth-screenshot button .material-icons{font-size:.9rem}.auth-add-screenshot{display:grid;place-items:center;color:#87909c;cursor:pointer}.auth-code-button{flex:none;width:auto;min-width:6.8rem;height:2.7rem;min-height:2.7rem;margin:0 .55rem 0 0;padding:0 .8rem;border:0;border-radius:.4rem;box-shadow:none;color:#1677ff;background:transparent;font-size:.9rem;text-transform:none}.auth-code-button[disabled]{color:#a7adb6}.auth-register-form .auth-brand{margin-bottom:2rem}.auth-register-page .auth-agreement{margin-top:2rem}.auth-list-form{display:flex;flex-direction:column;min-height:calc(100vh - 8.25rem)}.auth-list-form label{display:grid;grid-template-columns:7rem 1fr auto;align-items:center;width:100%;min-height:4.5rem;padding:0 1rem;border-bottom:1px solid #e4e7eb;background:#fff;box-sizing:border-box}.auth-list-form label span{color:#30343b;font-size:1rem}.auth-list-form input{min-width:0;width:100%;height:4rem;margin:0;border:0;box-shadow:none;color:#252931;background:transparent;font-size:1rem}.auth-list-form input:focus{box-shadow:none}.auth-list-gap{height:1rem;background:#f6f7f9}.auth-sticky-action{margin-top:auto}.auth-identity-check-page .auth-sticky-action{margin-top:2.5rem}.auth-realname-page{background:#f5f6f8}.auth-realname-hero{display:flex;align-items:center;justify-content:space-between;min-height:14rem;padding:2rem max(2rem,calc(50% - 22rem));color:#12357b;background:#cfe1fa}.auth-realname-hero div{display:flex;flex-direction:column}.auth-realname-hero strong{font-size:2.5rem;font-weight:800}.auth-realname-hero span{margin-top:.75rem;color:#53799c;font-size:1.2rem}.auth-realname-hero>.material-icons{color:#4a82ee;font-size:9rem;opacity:.9}.auth-realname-content{width:min(calc(100% - 2rem),44rem);margin:-1.5rem auto 0;padding:0 0 2rem}.auth-realname-content h2{position:relative;z-index:1;margin:0;padding:1.5rem 2rem;border:1px solid #fff;border-radius:.5rem .5rem 0 0;background:#e8f1fd;font-size:1.15rem}.auth-realname-content form{padding:2rem;background:#fff}.auth-realname-content label{display:grid;grid-template-columns:8rem 1fr;align-items:center;min-height:4.5rem;margin-bottom:1rem;padding:0 1rem;border-radius:.5rem;background:#f6f6f7}.auth-realname-content input{min-width:0;width:100%;height:3.8rem;margin:0;border:0;box-shadow:none;color:#30343b;background:transparent;font-size:1rem}.auth-privacy-note{display:flex;margin:1rem 0 0;padding:1rem;border-radius:.4rem;color:#a0a6af;background:#fff;line-height:1.5}.auth-privacy-note .material-icons{margin-right:.5rem;font-size:1.15rem}.auth-reminder-demo{overflow:hidden;background:#f5f6f8}.auth-demo-chat{width:min(100%,42rem);margin:0 auto;padding:2rem}.auth-demo-chat h1{text-align:center}.auth-demo-search{display:flex;align-items:center;justify-content:center;height:2.8rem;margin-bottom:1rem;border-radius:.5rem;color:#969ca5;background:#e9ecf0}.auth-demo-row{display:flex;align-items:center;min-height:4.8rem;border-bottom:1px solid #e3e6ea}.auth-demo-row>span{display:grid;place-items:center;width:3.2rem;height:3.2rem;margin-right:.8rem;border-radius:.5rem;color:#fff;background:#368bfa}.auth-demo-row div{display:flex;flex-direction:column}.auth-demo-row small{margin-top:.3rem;color:#969ca5}.auth-modal-backdrop{position:absolute;inset:0;z-index:3;display:grid;place-items:center;padding:1.5rem;background:rgba(0,0,0,.38)}.auth-modal{width:min(100%,30rem);padding:2rem;border-radius:.5rem;background:#fff;box-shadow:0 1rem 3rem rgba(0,0,0,.18);text-align:center;position:relative}.auth-modal-close{position:absolute;top:.6rem;right:.6rem;min-width:0;height:auto;margin:0;padding:.25rem;color:#9aa1ab;background:none;border:0;box-shadow:none}.auth-modal h2{margin:0 0 1rem;font-size:1.45rem}.auth-modal p{color:#858c96;line-height:1.6;text-align:left}.auth-modal .auth-text-button{margin-top:1rem;color:#7c838d}.auth-pin-content{display:flex;position:relative;flex-direction:column;align-items:center;width:min(100%,32rem);margin:0 auto;padding:6rem 2rem 2rem}.auth-pin-content h1{margin:0 0 3.5rem;font-size:1.8rem}.youth-password-gate{display:flex;position:relative;flex-direction:column;align-items:center;width:min(100%,32rem);margin:0 auto;padding:3rem 2rem 2rem}.youth-password-gate .auth-primary{width:min(100%,24rem);margin-top:3rem}.youth-password-gate .auth-text-button{margin-top:1.2rem}.auth-pin-wrap{position:relative;display:inline-block}.auth-pin-boxes{display:grid;grid-template-columns:repeat(4,4rem);gap:.8rem}.auth-pin-boxes span{display:grid;place-items:center;aspect-ratio:1;border-radius:.35rem;color:#30343b;background:#f2f3f5}.auth-pin-input{position:absolute;inset:0;margin:0;opacity:0}.auth-pin-wrap .auth-pin-input{width:100%;height:100%}.auth-pin-content .auth-primary{width:min(100%,24rem);margin-top:3rem}.auth-toast{position:fixed;z-index:20;bottom:max(2rem,env(safe-area-inset-bottom));left:50%;display:flex;align-items:center;max-width:calc(100% - 2rem);padding:.8rem 1.1rem;border-radius:.4rem;color:#fff;background:rgba(31,35,42,.92);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18);transform:translateX(-50%);animation:auth-toast-in .18s ease-out}.auth-toast .material-icons{margin-right:.5rem;color:#63d68b;font-size:1.15rem}.security-product-links button.flat-button{display:grid;grid-template-columns:2rem 1fr 2rem;align-items:center;width:100%;margin:0;color:var(--clr-text-primary);text-align:left;text-transform:none}.security-product-links .trailing{color:var(--clr-text-tertiary)}@keyframes auth-toast-in{0%{opacity:0;transform:translate(-50%,.5rem)}to{opacity:1;transform:translate(-50%)}}#sidepanel.message-center-panel{width:24rem;min-width:20rem;flex:0 0 24rem;color-scheme:light;background:#fff;color:#242830}#sidepanel.message-center-panel.full-page{width:100%;min-width:0;flex:1 1 auto}.message-center-panel *{box-sizing:border-box;letter-spacing:0}.message-actions-page,.messages-product-page,.system-messages-page{position:relative;display:flex;flex-direction:column;width:100%;min-height:100%;overflow:hidden;background:#fff}.messages-home-header,.messages-sub-header{display:grid;position:relative;z-index:5;grid-template-columns:3.5rem 1fr 3.5rem;align-items:center;flex:none;min-height:4.25rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #f0f1f3;background:#fff}.messages-home-header h1,.messages-sub-header h1{grid-column:2;margin:0;overflow:hidden;color:#22262d;font-size:1.25rem;font-weight:600;text-align:center;text-overflow:ellipsis;white-space:nowrap}.messages-menu-button,.messages-sub-header button{display:grid;place-items:center;width:3.25rem;min-width:3.25rem;height:3.25rem;min-height:3.25rem;margin:0;padding:0;border:0;box-shadow:none;color:#272b32;background:transparent}.messages-menu-button{grid-column:3}.messages-menu-button .material-icons{font-size:1.75rem}.messages-sub-header button .material-icons{font-size:1.2rem}.messages-connection{grid-column:2;display:flex;align-items:center;justify-content:center;font-size:1.2rem;font-weight:600}.messages-spinner{width:1.25rem;height:1.25rem;margin-right:.55rem;border:3px dotted #aab0b8;border-radius:50%;animation:messages-spin .85s linear infinite}@keyframes messages-spin{to{transform:rotate(1turn)}}.messages-home-content{width:100%;min-height:0;overflow-x:hidden;overflow-y:auto;flex:1 1 auto;padding-bottom:1rem}.message-center-panel.full-page .messages-home-content,.message-center-panel.full-page .messages-home-header>*{--messages-content-width:52rem}.messages-search{display:flex;align-items:center;height:2.8rem;margin:.75rem;border:1px solid transparent;border-radius:.5rem;color:#a5abb4;background:#f1f2f4}.message-center-panel.full-page .messages-conversations,.message-center-panel.full-page .messages-frequent,.message-center-panel.full-page .messages-search{width:min(calc(100% - 2rem),52rem);margin-right:auto;margin-left:auto}.messages-search:focus-within{border-color:#4091ff;box-shadow:0 0 0 3px rgba(22,119,255,.08)}.messages-search .material-icons{margin-left:.9rem;font-size:1.35rem}.messages-search input{min-width:0;width:100%;height:2.7rem;margin:0;padding:0 .85rem;border:0;box-shadow:none;color:#252931;background:transparent;font-size:.95rem}.messages-search input:focus{box-shadow:none}.messages-search input::placeholder{color:#a5abb4}.messages-frequent{padding:.3rem 0 .8rem}.messages-frequent h2{margin:0 .75rem .65rem;color:#9399a2;font-size:.88rem;font-weight:400}.messages-frequent-scroll{display:flex;gap:.75rem;overflow-x:auto;padding:0 .75rem .3rem;scrollbar-width:none}.messages-frequent-scroll::-webkit-scrollbar{display:none}.messages-frequent-scroll button{display:flex;flex:0 0 4.4rem;flex-direction:column;align-items:center;width:4.4rem;min-width:4.4rem;height:auto;min-height:0;margin:0;padding:0;border:0;box-shadow:none;color:#656b74;background:transparent;text-transform:none}.messages-frequent-scroll button>span{width:100%;margin-top:.4rem;overflow:hidden;font-size:.78rem;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}.messages-conversations{display:flex;flex-direction:column}.messages-conversation{display:grid;grid-template-columns:3.4rem minmax(0,1fr) auto;align-items:center;width:100%;min-width:0;min-height:4.55rem;margin:0;padding:.45rem .75rem;border:0;border-radius:0;border-bottom:1px solid #f1f2f4;box-shadow:none;color:#252931;background:#fff;text-align:left;text-transform:none}.messages-conversation:focus,.messages-conversation:hover{background:#f6f8fb}.messages-conversation.pinned{background:#f4f6f8}.messages-avatar{display:grid;position:relative;place-items:center;width:3rem;height:3rem;overflow:visible;border-radius:.55rem;color:#fff;background:#3c8df6}.messages-avatar.small{width:3.2rem;height:3.2rem;border-radius:.65rem}.messages-avatar.tone-orange{color:#ff951c;background:#fff5e5}.messages-avatar.tone-green{color:#16ae54;background:#eefaf3}.messages-avatar img{width:100%;height:100%;border-radius:inherit;object-fit:cover}.messages-avatar>.material-icons{font-size:1.8rem}.messages-avatar .offline,.messages-avatar .online{position:absolute;right:-.18rem;bottom:-.12rem;width:.72rem;min-width:.72rem;height:.72rem;min-height:.72rem;border:2px solid #fff;border-radius:50%;background:#1fb36a}.messages-avatar .offline{background:#aeb4bd}.messages-conversation-copy{display:flex;min-width:0;flex-direction:column;justify-content:center;padding:0 .55rem}.messages-conversation-copy small,.messages-conversation-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.messages-conversation-copy strong{color:#272b31;font-size:1rem;font-weight:500;line-height:1.3}.messages-conversation-copy small{margin-top:.2rem;color:#969ca5;font-size:.84rem;font-weight:400;line-height:1.3}.messages-conversation-meta{display:flex;align-self:stretch;min-width:3.4rem;flex-direction:column;align-items:flex-end;justify-content:space-around}.messages-conversation-meta time{color:#9ca2aa;font-size:.72rem;white-space:nowrap}.messages-conversation-meta b{display:grid;place-items:center;min-width:1.25rem;height:1.25rem;padding:0 .3rem;border-radius:.7rem;color:#fff;background:#f34b46;font-size:.7rem;font-weight:500;line-height:1}.messages-conversation-meta .material-icons{color:#a5abb3;font-size:1.1rem}.messages-empty{display:flex;flex-direction:column;align-items:center;padding:4rem 1rem;color:#9ca2aa}.messages-empty .material-icons{font-size:2.4rem}.messages-bottom-nav{display:grid;grid-template-columns:repeat(2,1fr);flex:none;min-height:4.8rem;padding-bottom:env(safe-area-inset-bottom);border-top:1px solid #eceef1;background:#fff}.messages-bottom-nav button{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:4.8rem;margin:0;padding:0;border:0;box-shadow:none;color:#9ca2ab;background:transparent;text-transform:none}.messages-bottom-nav button.active{color:#297fea}.messages-bottom-nav .material-icons{font-size:1.55rem}.messages-bottom-nav span{margin-top:.25rem;font-size:.76rem}.message-action-backdrop,.messages-menu-backdrop{position:absolute;inset:0;z-index:10;background:rgba(0,0,0,.43)}.messages-quick-menu{position:absolute;top:calc(3.6rem + env(safe-area-inset-top));right:.65rem;width:12rem;overflow:hidden;border-radius:.4rem;background:#4b4c4f;box-shadow:0 .8rem 2rem rgba(0,0,0,.24)}.messages-quick-menu:before{content:"";position:absolute;top:-.45rem;right:1rem;width:.9rem;height:.9rem;background:#4b4c4f;transform:rotate(45deg)}.messages-quick-menu button{display:grid;position:relative;grid-template-columns:2.2rem 1fr;align-items:center;width:100%;min-height:3.2rem;margin:0;padding:0 1rem;border:0;border-radius:0;box-shadow:none;color:#fff;background:transparent;text-align:left;text-transform:none}.messages-quick-menu button:focus,.messages-quick-menu button:hover{background:hsla(0,0%,100%,.09)}.messages-quick-menu .material-icons{font-size:1.35rem}.messages-quick-menu span{font-size:.98rem}.messages-toast{position:fixed;z-index:30;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.75rem 1.1rem;border-radius:.4rem;color:#fff;background:rgba(34,38,45,.94);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18);text-align:center;transform:translateX(-50%)}.message-actions-page{background:#e8eaee}.message-actions-chat{flex:1 1 auto;min-height:0;overflow-y:auto;padding:1.5rem max(1rem,calc(50% - 25rem));background:#edf0f3 url(../img/bkg/a00.png) repeat}.message-time{margin:0 0 1.5rem;color:#8d949d;font-size:.78rem;text-align:center}.message-demo-row{display:flex;align-items:flex-start;gap:.65rem;margin-bottom:1rem}.message-demo-row.mine{justify-content:flex-end}.message-demo-row .messages-avatar{width:2.7rem;height:2.7rem;flex:0 0 2.7rem}.message-demo-bubble{width:auto;max-width:min(72%,28rem);min-height:2.7rem;height:auto;margin:0;padding:.75rem .9rem;border:0;border-radius:.35rem;box-shadow:0 1px 2px rgba(0,0,0,.08);color:#252931;background:#fff;font-size:.95rem;font-weight:400;line-height:1.5;text-align:left;text-transform:none}.message-demo-bubble.mine{background:#b9eb8f}.message-operation-result{color:#777f89;font-size:.8rem;text-align:center}.message-demo-composer{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2.5rem 2.5rem;align-items:center;flex:none;min-height:4rem;padding:.5rem max(.75rem,calc(50% - 26rem));background:#f7f8fa}.message-demo-composer span{min-width:0;height:2.7rem;padding:0 .8rem;overflow:hidden;border-radius:.35rem;color:#a2a8b0;background:#fff;line-height:2.7rem;white-space:nowrap}.message-demo-composer .material-icons{color:#555c65;font-size:1.45rem;text-align:center}.message-action-backdrop{display:grid;place-items:center}.message-action-menu{width:min(calc(100% - 3rem),23rem);overflow:hidden;border-radius:.5rem;background:#4b4c4f;box-shadow:0 1rem 3rem rgba(0,0,0,.24)}.message-action-menu button{display:grid;grid-template-columns:1fr 2rem;align-items:center;width:calc(100% - 2rem);min-height:3.1rem;margin:0 1rem;padding:0;border:0;border-radius:0;border-bottom:1px solid hsla(0,0%,100%,.1);box-shadow:none;color:#fff;background:transparent;text-align:left;text-transform:none}.message-action-menu button:last-child{border-bottom:0}.message-action-menu button:focus,.message-action-menu button:hover{background:hsla(0,0%,100%,.08)}.message-action-menu span{font-size:.98rem}.message-action-menu .material-icons{font-size:1.3rem}.system-messages-page{background:#f4f5f7}.system-notification-list{width:100%;max-width:52rem;margin:0 auto;overflow-y:auto;padding:1.5rem}.system-notification-list article{margin-bottom:1.5rem}.system-notification-list article>time{display:block;margin-bottom:.75rem;color:#a2a8b0;font-size:.82rem;text-align:center}.system-notification-card{padding:1.3rem;box-shadow:0 .2rem .8rem rgba(37,49,65,.04)}.system-notification-card,.system-notification-load-more{border:1px solid #eceef1;border-radius:.5rem;background:#fff}.system-notification-load-more{display:flex;align-items:center;justify-content:center;width:100%;height:auto;margin:0;padding:.7rem;box-shadow:none;color:#567;font-size:.85rem;text-transform:none}.system-notification-list article.read .system-notification-card{opacity:.82}.system-notification-card header{display:flex;align-items:center;justify-content:space-between}.system-notification-card h2{margin:0;color:#20242b;font-size:1.05rem}.system-notification-card header>span{padding:.15rem .4rem;border-radius:.25rem;color:#fff;background:#f34b46;font-size:.7rem}.system-notification-card p{margin:.85rem 0;color:#555c66;line-height:1.55}.system-notification-card dl{margin:0}.system-notification-card dl div{display:flex;margin:.35rem 0}.system-notification-card dt{color:#242830;font-weight:600}.system-notification-card dd{margin:0;color:#555c66}.system-security-link{display:flex;align-items:center;width:auto;min-width:0;height:auto;min-height:0;margin:.6rem 0 0;padding:0;border:0;box-shadow:none;color:#1683f8;background:transparent;font-size:.9rem;text-transform:none}.system-security-link .material-icons{font-size:1.1rem}.system-notification-card footer{margin-top:1.1rem;color:#767e88;line-height:1.6}#sidepanel.direct-message-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f4f6f8;color:#252931}.direct-message-panel *{box-sizing:border-box;letter-spacing:0}.chat-product-page{display:flex;position:relative;flex-direction:column;width:100%;min-height:100%;overflow:hidden;background:#f4f6f8}.chat-product-header{display:grid;position:relative;z-index:4;grid-template-columns:3.5rem minmax(0,1fr) 3.5rem;align-items:center;flex:none;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #eceef1;background:#fff}.chat-product-header>button{display:grid;place-items:center;width:3.25rem;min-width:3.25rem;height:3.25rem;min-height:3.25rem;margin:0;padding:0;border:0;box-shadow:none;color:#292d34;background:transparent}.chat-product-header>button .material-icons{font-size:1.25rem}.chat-product-header>div{min-width:0;text-align:center}.chat-product-header h1{margin:0;overflow:hidden;color:#23272e;font-size:1.2rem;text-overflow:ellipsis;white-space:nowrap}.chat-product-header span{display:flex;align-items:center;justify-content:center;margin-top:.15rem;color:#7d848e;font-size:.78rem}.chat-product-header span i{width:.55rem;height:.55rem;margin-right:.3rem;border-radius:50%;background:#16bf78}.chat-product-timeline{width:100%;min-height:0;overflow-x:hidden;overflow-y:auto;flex:1 1 auto;padding:1.5rem max(1rem,calc(50% - 27rem));scroll-behavior:smooth}.chat-time{margin:.3rem 0 1.4rem;color:#9299a2;font-size:.8rem;text-align:center}.chat-message-row{display:flex;align-items:flex-start;gap:.65rem;margin:0 0 1rem}.chat-message-row.mine{justify-content:flex-end}.chat-avatar{width:2.8rem;height:2.8rem;overflow:hidden;flex:0 0 2.8rem;border-radius:.5rem;background:#dfe3e8}.chat-avatar img{width:100%;height:100%;object-fit:cover}.chat-message-stack{display:flex;min-width:0;max-width:min(72%,32rem);flex-direction:column}.chat-message-row.mine .chat-message-stack{align-items:flex-end}.chat-bubble{position:relative;min-width:2.8rem;min-height:2.8rem;padding:.72rem .9rem;border-radius:.45rem;color:#282c33;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06);font-size:.98rem;line-height:1.5;overflow-wrap:anywhere}.chat-bubble:before{content:"";position:absolute;top:.85rem;left:-.35rem;width:.7rem;height:.7rem;background:inherit;transform:rotate(45deg)}.chat-bubble.mine{color:#fff;background:#398afa}.chat-bubble.mine:before{right:-.35rem;left:auto}.chat-bubble.image,.chat-bubble.voice{padding:0;background:transparent;box-shadow:none}.chat-bubble.image:before,.chat-bubble.voice:before{display:none}.chat-message-status{display:flex;align-items:center;justify-content:flex-end;min-height:1.2rem;margin-top:.25rem;color:#8d949e;font-size:.72rem}.chat-message-status.failed{color:#df3838}.chat-message-status .material-icons{margin-right:.25rem;font-size:1.15rem}.chat-relation-notice{display:flex;align-items:center;justify-content:center;min-height:1.8rem;margin:.4rem auto 1.5rem;color:#939aa3;font-size:.82rem;line-height:1.5;text-align:center}.chat-relation-notice button{width:auto;min-width:0;height:auto;min-height:0;margin:0 0 0 .5rem;padding:0;border:0;box-shadow:none;color:#2683f5;background:transparent;font-size:inherit;text-transform:none}.chat-request-actions{display:flex;justify-content:center;gap:.75rem;margin:2rem auto}.chat-request-actions button{width:auto;min-width:6rem;height:2.7rem;min-height:2.7rem;margin:0;padding:0 1.2rem;border:1px solid #d9dde3;border-radius:.4rem;box-shadow:none;color:#5d646e;background:#fff;font-size:.9rem;text-transform:none}.chat-request-actions button.primary{border-color:#398afa;color:#fff;background:#398afa}.chat-image-message{position:relative;width:10rem;aspect-ratio:3/4;overflow:hidden;border-radius:.5rem;background:#e2e5e9}.chat-image-message>img{width:100%;height:100%;object-fit:cover}.chat-upload-progress{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;background:rgba(20,24,30,.4)}.chat-upload-progress progress{width:4rem;height:.35rem;border:0;accent-color:#fff}.chat-upload-progress strong{margin-top:.5rem;font-size:.85rem}.chat-voice-message{display:grid;grid-template-columns:1.5rem auto 2.2rem;align-items:center;min-width:8rem;min-height:3rem;padding:0 .85rem;border-radius:.45rem;color:#30343b;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06)}.chat-message-row.mine .chat-voice-message{color:#fff;background:#398afa}.chat-voice-message .material-icons{font-size:1.3rem}.chat-voice-message strong{font-size:1rem;font-weight:500}.chat-voice-message span{height:1rem;background:repeating-linear-gradient(90deg,currentColor 0 2px,transparent 2px 5px);opacity:.55}.chat-file-card{display:grid;grid-template-columns:minmax(0,1fr) 3.4rem;gap:1rem;width:min(100%,24rem);min-width:17rem;padding:1rem;border-radius:.5rem;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06)}.chat-file-card>div{display:flex;min-width:0;flex-direction:column}.chat-file-card strong{overflow:hidden;color:#30343b;line-height:1.45;text-overflow:ellipsis}.chat-file-card small{margin-top:auto;color:#a1a7af}.chat-file-icon{display:grid;place-items:center;width:3.4rem;height:3.4rem;border-radius:.35rem;color:#fff;background:#f13e67;font-size:2rem;font-weight:600}.chat-contact-card{display:flex;width:min(100%,22rem);min-width:16rem;height:auto;min-height:0;margin:0;padding:0;overflow:hidden;flex-direction:column;border:0;border-radius:.5rem;box-shadow:0 1px 2px rgba(31,39,50,.06);color:#30343b;background:#fff;text-align:left;text-transform:none}.chat-contact-card>span{display:flex;align-items:center;width:100%;padding:.85rem}.chat-contact-card img{width:3rem;height:3rem;margin-right:.75rem;border-radius:.45rem;object-fit:cover}.chat-contact-card strong{overflow:hidden;font-size:1rem;text-overflow:ellipsis;white-space:nowrap}.chat-contact-card small{width:calc(100% - 1.7rem);margin:0 .85rem;padding:.65rem 0;border-top:1px solid #eceef1;color:#9da3ac}.chat-permission-banner{display:flex;align-items:center;justify-content:center;flex:none;min-height:2.5rem;padding:.55rem 1rem;color:#7e858e;background:#fff7e8;font-size:.82rem;text-align:center}.chat-permission-banner .material-icons{margin-right:.4rem;color:#dc9221;font-size:1.05rem}.chat-composer{display:grid;grid-template-columns:2.7rem minmax(0,1fr) 2.7rem auto;align-items:center;flex:none;min-height:4.2rem;padding:.55rem max(.75rem,calc(50% - 27rem));border-top:1px solid #e8eaee;background:#f8f9fa}.chat-composer>button{display:grid;place-items:center;width:2.5rem;min-width:2.5rem;height:2.5rem;min-height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;color:#555c65;background:transparent}.chat-composer>button[disabled]{color:#b7bcc3}.chat-composer>button .material-icons{font-size:1.45rem}.chat-composer input{min-width:0;width:100%;height:2.8rem;margin:0;padding:0 .8rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:#252931;background:#fff;font-size:.93rem}.chat-composer input:focus{border-color:#4091ff;box-shadow:0 0 0 3px rgba(22,119,255,.08)}.chat-composer input[disabled]{color:#9da3ab;background:#f1f2f4}.chat-composer .chat-send-button{width:auto;min-width:3.8rem;margin-left:.25rem;padding:0 .75rem;border-radius:.35rem;color:#fff;background:#398afa;font-size:.82rem;text-transform:none}.chat-attachment-panel{display:grid;grid-template-columns:repeat(4,minmax(4rem,1fr));gap:1rem;flex:none;min-height:13rem;padding:1rem max(1rem,calc(50% - 24rem)) max(1rem,env(safe-area-inset-bottom));border-top:1px solid #e3e6ea;background:#f1f2f4}.chat-attachment-panel button{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;width:100%;height:auto;min-height:5.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#6d747e;background:transparent;text-transform:none}.chat-attachment-panel button>span{display:grid;place-items:center;width:3.8rem;height:3.8rem;border-radius:.5rem;color:#4d535b;background:#fff}.chat-attachment-panel .material-icons{font-size:1.55rem}.chat-attachment-panel small{margin-top:.45rem;font-size:.78rem}.chat-toast{position:fixed;z-index:30;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.75rem 1.1rem;border-radius:.4rem;color:#fff;background:rgba(34,38,45,.94);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18);text-align:center;transform:translateX(-50%)}#sidepanel.message-composer-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;color:#252931;background:#f4f6f8}.message-composer-panel *{box-sizing:border-box;letter-spacing:0}.message-composer-page .chat-product-header span{margin-top:.1rem}.compose-timeline{padding-bottom:2rem}.compose-avatar{display:grid;place-items:center;width:2.7rem;height:2.7rem;overflow:hidden;flex:0 0 2.7rem;border-radius:.45rem;color:#fff;background:#4789dc}.compose-avatar img{width:100%;height:100%;object-fit:cover}.compose-avatar .material-icons{font-size:1.35rem}.compose-message-row{display:flex;align-items:flex-start;gap:.65rem;width:100%;margin-bottom:1rem}.compose-message-row.mine{justify-content:flex-end}.compose-text-bubble{position:relative;max-width:min(70%,32rem);min-height:2.7rem;padding:.7rem .9rem;border-radius:.45rem;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06);line-height:1.5;overflow-wrap:anywhere}.compose-text-bubble.mine{color:#fff;background:#398afa}.compose-mention{color:#1976d2;font-weight:500}.compose-voice-bubble{display:grid;grid-template-columns:1.5rem minmax(3rem,8rem) auto;align-items:center;gap:.4rem;width:auto;min-width:10rem;height:3rem;min-height:3rem;margin:0;padding:0 .85rem;border:0;border-radius:.45rem;box-shadow:0 1px 2px rgba(31,39,50,.06);color:#30343b;background:#fff}.compose-voice-bubble.mine{color:#fff;background:#398afa}.compose-voice-bubble>i:last-child{position:absolute;width:.45rem;height:.45rem;margin-left:10.3rem;border-radius:50%;background:#ef3f4d}.compose-wave{height:1rem;opacity:.55;background:repeating-linear-gradient(90deg,currentColor 0 2px,transparent 2px 5px)}.compose-media-card,.compose-video-card{position:relative;width:11rem;aspect-ratio:4/3;overflow:hidden;border:0;border-radius:.45rem;background:#dfe3e8}.compose-video-card{height:auto;min-height:0;margin:0;padding:0;box-shadow:none}.compose-media-card>img,.compose-video-card>img{width:100%;height:100%;object-fit:cover}.compose-video-card>.material-icons{position:absolute;top:50%;left:50%;color:#fff;font-size:2.8rem;filter:drop-shadow(0 2px 5px rgba(0,0,0,.3));transform:translate(-50%,-50%)}.compose-video-card>small{position:absolute;right:.45rem;bottom:.35rem;padding:.1rem .3rem;border-radius:.2rem;color:#fff;background:rgba(0,0,0,.55)}.compose-media-state{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#fff;background:rgba(25,29,35,.52)}.compose-media-state .material-icons{font-size:1.7rem}.compose-media-state strong{margin:.3rem 0;font-size:.75rem}.compose-media-state progress{width:5rem;height:.3rem;accent-color:#fff}.compose-file-card{display:grid;grid-template-columns:3rem minmax(0,1fr) 1.7rem;align-items:center;gap:.8rem;width:min(25rem,calc(100vw - 8rem));min-height:5rem;padding:.8rem;border-radius:.45rem;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06)}.compose-file-type{display:grid;place-items:center;width:3rem;height:3.4rem;border-radius:.3rem;color:#fff;background:#e74664;font-size:.72rem;font-weight:700}.compose-file-card>div,.compose-upload-list>div>div{display:flex;min-width:0;flex-direction:column}.compose-file-card strong,.compose-upload-list strong{overflow:hidden;color:#30343b;text-overflow:ellipsis;white-space:nowrap}.compose-file-card small,.compose-upload-list small{margin-top:.35rem;color:#9097a0}.compose-file-card progress,.compose-upload-list progress{width:100%;height:.3rem;margin-top:.35rem;accent-color:#398afa}.compose-toolbar{display:grid;grid-template-columns:2.8rem minmax(0,1fr) 2.8rem auto;align-items:center;min-height:4.2rem;padding:.55rem max(.6rem,calc(50% - 27rem));border-top:1px solid #e4e7eb;background:#f8f9fa}.compose-toolbar>button{display:grid;place-items:center;width:2.6rem;min-width:2.6rem;height:2.6rem;min-height:2.6rem;margin:0;padding:0;border:0;box-shadow:none;color:#555c65;background:transparent}.compose-toolbar input{width:100%;min-width:0;height:2.8rem;margin:0;padding:0 .8rem;border:1px solid #e4e7eb;border-radius:.35rem;box-shadow:none;color:#252931;background:#fff}.compose-confirm-send,.compose-target-footer button,.compose-toolbar .compose-send,.compose-upload-page footer button{width:auto;min-width:3.8rem;padding:0 .85rem;border:0;border-radius:.35rem;color:#fff;background:#398afa;text-transform:none}.compose-toolbar .compose-hold-button{width:100%;color:#30343b;border:1px solid #e1e4e8;background:#fff;font-size:.92rem}.compose-emoji-panel{position:relative;flex:none;min-height:14rem;padding:0 1rem max(1rem,env(safe-area-inset-bottom));border-top:1px solid #e2e5e9;background:#f4f5f7}.compose-emoji-panel nav{display:flex;gap:.25rem;height:3rem;border-bottom:1px solid #e1e4e8}.compose-emoji-delete,.compose-emoji-panel nav button{width:3rem;min-width:3rem;height:3rem;min-height:3rem;margin:0;padding:0;border:0;box-shadow:none;color:#7d848d;background:transparent}.compose-emoji-panel nav button.active{color:#398afa;border-bottom:2px solid #398afa}.compose-emoji-panel>div{display:grid;grid-template-columns:repeat(9,minmax(2.5rem,1fr));gap:.35rem;max-width:52rem;padding:.8rem 0;margin:auto}.compose-emoji-panel>div button{display:grid;place-items:center;width:100%;min-width:2.5rem;height:2.5rem;min-height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent;font-size:1.4rem}.compose-emoji-delete{position:absolute;right:1rem;bottom:max(.5rem,env(safe-area-inset-bottom));border-radius:.3rem;background:#fff}.compose-record-overlay{position:fixed;z-index:20;top:50%;left:50%;display:flex;align-items:center;justify-content:center;width:12rem;min-height:11rem;padding:1.2rem;border-radius:.5rem;color:#fff;background:rgba(34,39,47,.9);box-shadow:0 1rem 3rem rgba(0,0,0,.24);flex-direction:column;transform:translate(-50%,-50%)}.compose-record-overlay.cancel{background:rgba(204,55,62,.94)}.compose-record-overlay>.material-icons{font-size:3rem}.compose-record-overlay strong{margin-top:.65rem;font-size:.8rem}.compose-record-overlay small{margin-top:.35rem;opacity:.8}.compose-meter{display:flex;align-items:center;gap:.18rem;height:1.8rem;margin-top:.4rem}.compose-meter i{width:.18rem;border-radius:.1rem;background:#fff}.compose-forward-page,.compose-picker-page,.compose-upload-page{display:flex;width:100%;min-height:100%;flex-direction:column;color:#252931;background:#f6f7f9}.compose-picker-header{display:grid;grid-template-columns:4.5rem minmax(0,1fr) 4.5rem;align-items:center;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #ebedf0;background:#fff}.compose-picker-header h1{margin:0;font-size:1.12rem;text-align:center}.compose-picker-header button{width:100%;min-width:0;height:3.2rem;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#30343b;background:transparent}.compose-picker-header button.text{color:#287fe5;font-size:.88rem;text-transform:none}.compose-picker-header button[disabled]{color:#b4bac1}.compose-search{display:flex;align-items:center;height:2.8rem;margin:.8rem max(1rem,calc(50% - 24rem));padding:0 .75rem;border-radius:.35rem;color:#949ba4;background:#fff}.compose-search .material-icons{font-size:1.25rem}.compose-search input{width:100%;min-width:0;height:100%;margin:0;padding:0 .55rem;border:0;box-shadow:none;background:transparent}.compose-section-title{width:min(100%,48rem);margin:0 auto;padding:.5rem 1rem;color:#8d949d;font-size:.78rem}.compose-picker-list{width:min(100%,48rem);margin:0 auto;background:#fff}.compose-picker-list>button{display:grid;grid-template-columns:3rem minmax(0,1fr) 2rem;align-items:center;gap:.75rem;width:100%;min-width:0;min-height:4.4rem;margin:0;padding:.55rem 1rem;border:0;border-bottom:1px solid #eef0f2;border-radius:0;box-shadow:none;color:#252931;background:#fff;text-align:left;text-transform:none}.compose-picker-list>button>span:nth-child(2){display:flex;min-width:0;flex-direction:column}.compose-picker-list strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.compose-picker-list small{margin-top:.2rem;color:#969da6;font-size:.76rem}.compose-check,.compose-checkbox{display:grid;place-items:center;width:1.4rem;height:1.4rem;border:1px solid #c9ced4;border-radius:50%;color:#fff;background:#fff}.compose-check.checked,.compose-checkbox.checked{border-color:#398afa;background:#398afa}.compose-check .material-icons,.compose-checkbox .material-icons{font-size:.95rem}.compose-select-row{display:flex;align-items:flex-start;width:100%}.compose-select-row.selectable{gap:.7rem}.compose-select-row.selectable .compose-message-row{width:calc(100% - 2.2rem)}.compose-check{flex:0 0 1.4rem;min-width:1.4rem;min-height:1.4rem;margin:.65rem 0 0;padding:0;box-shadow:none}.compose-selection-bar{display:grid;grid-template-columns:4rem 1fr 5rem;align-items:center;min-height:3.2rem;border-bottom:1px solid #e6e9ed;background:#fff;text-align:center}.compose-selection-bar button{width:100%;min-width:0;min-height:2.8rem;margin:0;padding:0;border:0;box-shadow:none;color:#398afa;background:transparent;font-size:.78rem;text-transform:none}.compose-batch-actions{display:grid;grid-template-columns:repeat(3,1fr);flex:none;min-height:4.6rem;padding-bottom:env(safe-area-inset-bottom);border-top:1px solid #e3e6ea;background:#fff}.compose-batch-actions button{display:flex;align-items:center;justify-content:center;width:100%;min-width:0;min-height:4.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#515862;background:transparent;flex-direction:column;text-transform:none}.compose-batch-actions button[disabled]{color:#b8bdc4}.compose-batch-actions span{margin-top:.25rem;font-size:.72rem}.compose-upload-page>main{width:min(100%,48rem);min-height:0;margin:0 auto;padding:1.2rem;overflow-y:auto;flex:1 1 auto}.compose-upload-drop{display:flex;align-items:center;justify-content:center;min-height:11rem;border:1px dashed #b9c4d1;border-radius:.45rem;color:#4f5863;background:#fff;cursor:pointer;flex-direction:column}.compose-upload-drop input{position:absolute;width:1px;height:1px;opacity:0}.compose-upload-drop .material-icons{margin-bottom:.5rem;color:#398afa;font-size:2.6rem}.compose-upload-drop small{margin-top:.35rem;color:#9299a2}.compose-forward-confirm h2,.compose-upload-list h2{margin:1.4rem 0 .7rem;font-size:.92rem}.compose-upload-list>div{display:grid;grid-template-columns:3rem minmax(0,1fr) 2rem;align-items:center;gap:.8rem;padding:.8rem;border-bottom:1px solid #eceef1;background:#fff}.compose-upload-list button{width:2rem;min-width:2rem;height:2rem;min-height:2rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.compose-target-footer,.compose-upload-page>footer{display:flex;align-items:center;justify-content:flex-end;min-height:4.5rem;padding:.6rem max(1rem,calc(50% - 24rem));border-top:1px solid #e3e6ea;background:#fff}.compose-target-footer button,.compose-upload-page footer button{height:2.8rem;min-height:2.8rem;margin:0}#sidepanel.contact-management-panel,#sidepanel.group-management-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;color:#252931;background:#f5f6f8}.contact-management-panel *,.group-management-panel *{box-sizing:border-box;letter-spacing:0}.group-page,.people-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;flex-direction:column;background:#f5f6f8}.group-chat-header,.group-header,.people-header{display:grid;z-index:3;grid-template-columns:4.5rem minmax(0,1fr) 4.5rem;align-items:center;flex:none;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e9ebee;background:#fff}.group-chat-header h1,.group-header h1,.people-header h1{margin:0;overflow:hidden;font-size:1.15rem;text-align:center;text-overflow:ellipsis;white-space:nowrap}.group-chat-header>button,.group-header>button,.people-header>button{display:grid;place-items:center;width:100%;min-width:0;height:3.2rem;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#2e333a;background:transparent}.group-header>button.text,.people-header>button.text{color:#247ee6;font-size:.86rem;text-transform:none}.group-search,.people-search{display:flex;align-items:center;flex:none;height:2.8rem;margin:.8rem max(1rem,calc(50% - 25rem));padding:0 .75rem;border-radius:.35rem;color:#9299a2;background:#fff}.group-search .material-icons,.people-search .material-icons{font-size:1.2rem}.group-search input,.people-search input{width:100%;min-width:0;height:100%;margin:0;padding:0 .5rem;border:0;box-shadow:none;background:transparent}.group-avatar,.people-avatar{display:grid;place-items:center;align-content:center;justify-content:center;width:3rem;height:3rem;overflow:hidden;flex:0 0 3rem;border-radius:.45rem;color:#fff;background:#4389df}.group-avatar img,.people-avatar img{width:100%;height:100%;object-fit:cover}.group-avatar .material-icons,.people-avatar .material-icons{font-size:1.45rem}.group-page>main,.people-page>main,.people-scroll{min-height:0;overflow-y:auto;flex:1 1 auto}.group-governance>section,.group-settings>section,.people-add-actions,.people-entry-list,.people-group,.people-settings>section{width:min(100%,50rem);margin:0 auto .8rem;background:#fff}.people-entry-list>button{display:grid;grid-template-columns:3rem minmax(0,1fr) auto 1.5rem;align-items:center;gap:.75rem;width:100%;min-height:4.3rem;margin:0;padding:.55rem 1rem;border:0;border-bottom:1px solid #eef0f2;border-radius:0;box-shadow:none;color:#2d3239;background:#fff;text-align:left;text-transform:none}.people-entry-list>button>.material-icons:last-child{grid-column:4}.people-entry-list em{display:grid;place-items:center;min-width:1.2rem;height:1.2rem;padding:0 .35rem;border-radius:.6rem;color:#fff;background:#ef4653;font-size:.7rem;font-style:normal;line-height:1}.people-group h2{margin:0;padding:.45rem 1rem;color:#868d97;background:#f5f6f8;font-size:.78rem}.people-group>button{display:flex;align-items:center;gap:.8rem;width:100%;min-height:4.2rem;margin:0;padding:.55rem 1rem;border:0;border-bottom:1px solid #eef0f2;border-radius:0;box-shadow:none;color:#2d3239;background:#fff;text-align:left;text-transform:none}.group-admin-page article>span:nth-child(2),.group-list button>span:nth-child(2),.group-member-picker>button>span:nth-child(2),.group-muted-list article>span:nth-child(2),.group-request-list article>div,.people-add-actions button>span,.people-block-list article>span:nth-child(2),.people-group>button>span:nth-child(2),.people-request-list article>div,.people-search-result button>span:nth-child(2){display:flex;min-width:0;flex-direction:column;flex:1 1 auto}.group-admin-page strong,.group-list strong,.group-member-picker strong,.group-muted-list strong,.group-request-list strong,.people-add-actions strong,.people-block-list strong,.people-group strong,.people-request-list strong,.people-search-result strong{line-height:1.3}.group-admin-page small,.group-list small,.group-member-picker small,.group-muted-list small,.group-request-list small,.people-add-actions small,.people-block-list small,.people-group small,.people-request-list small,.people-search-result small{margin-top:.2rem;color:#9299a2;font-size:.75rem;line-height:1.3}.people-index{position:absolute;z-index:2;top:27.5rem;right:.35rem;display:flex;gap:.2rem;flex-direction:column}.people-index a{color:#6a727d;font-size:.68rem;text-decoration:none}.group-admin-page,.group-muted-list,.group-request-list,.people-block-list,.people-request-list{width:min(100%,50rem);margin:0 auto;background:#fff}.group-admin-page article,.group-muted-list article,.group-request-list article,.people-block-list article,.people-request-list article{display:flex;align-items:center;gap:.75rem;min-height:5.2rem;padding:.7rem 1rem;border-bottom:1px solid #eceef1}.people-request-list article[role=button]{cursor:pointer}.group-request-list p,.people-request-list p{max-width:24rem;margin:.2rem 0;overflow:hidden;color:#69717b;font-size:.8rem;text-overflow:ellipsis;white-space:nowrap}.group-request-list article>span,.people-request-list article>span{display:flex;gap:.4rem}.group-admin-page article button,.group-muted-list button,.group-request-list button,.people-block-list button,.people-request-list button{width:auto;min-width:3.3rem;height:2.1rem;min-height:2.1rem;margin:0;padding:0 .65rem;border:1px solid #d8dce1;border-radius:.3rem;box-shadow:none;color:#69717b;background:#fff;font-size:.76rem;text-transform:none}.group-request-list button.primary,.people-request-list button.primary{border-color:#398afa;color:#fff;background:#398afa}.group-request-list em,.people-request-list em{color:#969da5;font-size:.78rem;font-style:normal}.people-add-actions{margin-top:.5rem}.people-add-actions button{display:grid;grid-template-columns:2.7rem minmax(0,1fr) 1.5rem;align-items:center;gap:.7rem;width:100%;min-height:4.4rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#2d3239;background:#fff;text-align:left;text-transform:none}.people-add-actions button>.material-icons:first-child{color:#398afa;font-size:1.7rem}.people-my-account{color:#9299a2;font-size:.8rem;text-align:center}.people-search-result{width:min(100%,50rem);margin:0 auto}.people-search-result h2{padding:0 1rem;color:#8b929b;font-size:.78rem}.people-search-result button{display:flex;align-items:center;gap:.8rem;width:100%;min-height:4.7rem;margin:0;padding:.7rem 1rem;border:0;box-shadow:none;color:#2d3239;background:#fff;text-align:left;text-transform:none}.group-qr-page main,.people-qr-page main{display:flex;align-items:center;justify-content:center;padding:2rem 1rem;flex-direction:column}.group-qr-card,.people-qr-card{width:min(100%,23rem);padding:1.4rem;border-radius:.45rem;background:#fff;box-shadow:0 .8rem 2.2rem rgba(35,43,54,.1);text-align:center}.group-qr-card>div:first-child,.people-qr-profile{display:flex;align-items:center;gap:.75rem;text-align:left}.group-qr-card>div:first-child>span:nth-child(2),.people-qr-profile>span:nth-child(2){display:flex;flex-direction:column}.group-qr-card small,.people-qr-profile small{margin-top:.2rem;color:#8f969f}.group-qrcode,.people-qrcode{width:190px;height:190px;margin:1.5rem auto 1rem}.group-qrcode img,.people-qrcode img{width:100%;height:100%}.group-qr-card p,.people-qr-card p{margin:.6rem 0 0}.group-qr-actions,.people-qr-actions{display:flex;gap:1rem;margin-top:1.5rem}.group-qr-actions button,.people-qr-actions button{display:flex;align-items:center;justify-content:center;width:8.5rem;min-width:0;min-height:2.8rem;margin:0;border:0;border-radius:.35rem;box-shadow:none;color:#3b424b;background:#fff;text-transform:none}.group-qr-actions .material-icons,.people-qr-actions .material-icons{margin-right:.4rem;font-size:1.2rem}.people-profile,.people-verify{width:min(100%,42rem);margin:0 auto;padding:2rem 1rem;text-align:center}.people-verify>.people-avatar{width:4.5rem;height:4.5rem;margin:0 auto}.people-verify h2{margin:.8rem 0 1.8rem}.people-verify label{display:flex;padding:1rem;background:#fff;text-align:left;flex-direction:column}.people-verify textarea{min-height:7rem;margin:.7rem 0;padding:.7rem;border:1px solid #e3e6ea;border-radius:.35rem;box-shadow:none;resize:vertical}.people-verify label small{color:#989fa7;text-align:right}.people-verify-actions{display:flex;gap:.6rem;margin-top:1.2rem}.people-verify-actions button{flex:1;min-height:3rem;border:0;border-radius:.35rem;box-shadow:none;background:var(--clr-background-blue-gray-50);text-transform:none}.people-verify-actions .people-primary{margin:0}.people-section-title{margin:.6rem 1rem 0;color:var(--clr-text-secondary);font-size:.85rem;font-weight:400}.people-empty-hint{padding:1.5rem 1rem;text-align:center;color:var(--clr-text-secondary)}.people-remark-edit{display:flex;gap:.5rem;padding:.6rem 1rem}.people-remark-edit input{flex:1;border:1px solid #e3e6ea;border-radius:.35rem;padding:.4rem .6rem}.people-profile dd.muted,.people-search-result em{color:var(--clr-text-secondary)}.people-search-result em{flex:none;padding:.35rem .9rem;border-radius:1rem;font-style:normal;font-size:.85rem;background:var(--clr-background-blue-gray-50)}.people-search-result em.people-add-cta{color:var(--clr-primary-accent)}.people-primary{display:flex;align-items:center;justify-content:center;width:100%;min-height:3rem;margin:1.2rem 0 0;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#398afa;text-transform:none}.people-primary .material-icons{margin-right:.4rem}.people-profile>section:first-child{display:grid;grid-template-columns:4.5rem minmax(0,1fr) 2rem;align-items:center;gap:1rem;padding:1.2rem;background:#fff;text-align:left}.people-profile>section:first-child .people-avatar{width:4.5rem;height:4.5rem}.people-profile h2,.people-profile p{margin:.2rem 0}.people-profile p{color:#858c95;font-size:.82rem}.people-profile dl{margin:.8rem 0;padding:0 1rem;background:#fff;text-align:left}.people-profile dl>div{display:grid;grid-template-columns:6rem 1fr;padding:.9rem 0;border-bottom:1px solid #eef0f2}.people-profile dd,.people-profile dt{margin:0}.people-profile dd{color:#707883}.people-profile-actions{display:grid;grid-template-columns:1fr 1fr;gap:.8rem}.people-profile-actions button{min-height:3rem;margin:0;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;color:#398afa;background:#fff;text-transform:none}.people-profile-actions button.people-primary{border-color:#398afa;color:#fff;background:#398afa}.group-governance,.group-settings,.people-settings{padding:.8rem 0 2rem}.people-settings-profile{display:flex;align-items:center;gap:.8rem;padding:.8rem 1rem}.group-governance section>button,.group-governance section>div,.group-profile>button,.group-profile>label,.group-settings section>button,.group-settings section>div,.people-profile-qr-row,.people-settings section>button,.people-settings section>div{display:flex;align-items:center;width:100%;min-height:3.7rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-governance section>button>span,.group-settings section>button>span,.group-settings section>div>span,.people-settings section>button>span,.people-settings section>div>span{flex:1 1 auto}.group-settings section small,.people-settings section small{min-width:0;margin-left:auto;overflow:hidden;color:#949ba4;text-overflow:ellipsis;white-space:nowrap}.group-switch,.people-switch{position:relative;width:2.8rem;min-width:2.8rem;height:1.55rem;min-height:1.55rem;margin:0;padding:0;border:0;border-radius:.8rem;box-shadow:none;background:#c7ccd2}.group-switch i,.people-switch i{position:absolute;top:.15rem;left:.15rem;width:1.25rem;height:1.25rem;border-radius:50%;background:#fff;transition:transform .18s ease}.group-switch.checked,.people-switch.checked{background:#398afa}.group-switch.checked i,.people-switch.checked i{transform:translateX(1.25rem)}.group-danger,.people-danger{display:block;width:min(calc(100% - 2rem),48rem);min-height:3rem;margin:1rem auto;border:0;border-radius:.35rem;box-shadow:none;color:#df3f48;background:#fff;text-transform:none}.group-empty,.people-empty{display:flex;align-items:center;justify-content:center;min-height:23rem;color:#8d949d;flex-direction:column;text-align:center}.group-empty>.material-icons,.people-empty .material-icons{margin-bottom:.8rem;color:#b3bac2;font-size:4rem}.group-modal-backdrop,.group-sheet-backdrop,.people-sheet-backdrop{position:absolute;z-index:20;inset:0;display:flex;align-items:flex-end;justify-content:center;background:rgba(28,33,40,.44)}.group-confirm-sheet,.group-source-sheet,.people-confirm-sheet{width:min(100%,36rem);padding:1.2rem;border-radius:.5rem .5rem 0 0;background:#fff;text-align:center}.people-confirm-sheet>i{display:block;width:2.5rem;height:.25rem;margin:0 auto 1rem;border-radius:.2rem;background:#d6dae0}.group-confirm-sheet h2,.group-source-sheet h2,.people-confirm-sheet h2{margin:.2rem 0 .8rem;font-size:1.08rem}.group-confirm-sheet p,.people-confirm-sheet p{color:#757d87;line-height:1.6}.group-password-input{width:100%;height:2.75rem;margin-top:.6rem;padding:0 .9rem;border:1px solid #dde1e6;border-radius:.35rem;font-size:1rem;text-align:left}.group-confirm-sheet button,.group-source-sheet button,.people-confirm-sheet button{width:100%;min-height:3rem;margin:.45rem 0 0;border:0;border-radius:.35rem;box-shadow:none;color:#31363d;background:#f2f3f5;text-transform:none}.group-confirm-sheet button.danger,.people-confirm-sheet button.danger{color:#fff;background:#e3444d}.group-source-sheet button{display:flex;align-items:center;justify-content:center}.group-source-sheet button .material-icons{margin-right:.5rem}.group-tabs{display:grid;grid-template-columns:repeat(3,1fr);width:min(100%,50rem);margin:0 auto;border-bottom:1px solid #e4e7eb;background:#fff}.group-tabs button{min-height:2.8rem;margin:0;padding:0;border:0;border-bottom:2px solid transparent;border-radius:0;box-shadow:none;color:#747c86;background:transparent;font-size:.8rem;text-transform:none}.group-tabs button.active{border-bottom-color:#398afa;color:#247ee6}.group-list{width:min(100%,50rem);margin:0 auto;background:#fff}.group-settings-header{display:grid;grid-template-columns:3.6rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:100%;min-height:5rem;margin:0;padding:.8rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-settings-header .group-avatar{width:3.6rem;height:3.6rem}.group-settings-header>span:not(.group-avatar){display:flex;flex-direction:column;gap:.15rem;min-width:0}.group-settings-header strong{line-height:1.3}.group-settings-header small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9299a2;line-height:1.3}.group-list>button{display:grid;grid-template-columns:3.2rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:100%;min-height:4.7rem;margin:0;padding:.7rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-empty p{max-width:19rem;margin:.5rem auto 1rem;line-height:1.5}.group-empty button{width:auto;min-height:2.7rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#398afa;text-transform:none}.group-modal-backdrop{align-items:center}.group-modal{width:min(calc(100% - 2rem),28rem);padding:1.2rem;border-radius:.5rem;background:#fff}.group-modal h2{margin:0 0 1rem;font-size:1.1rem}.group-modal label{display:flex;flex-direction:column}.group-modal input{height:2.8rem;margin:.5rem 0;padding:0 .7rem;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none}.group-modal p{color:#858c96;font-size:.78rem}.group-modal footer{display:flex;justify-content:flex-end;gap:.6rem}.group-modal footer button{width:auto;min-width:4.5rem;min-height:2.6rem;margin:0;border:0;border-radius:.3rem;box-shadow:none;color:#59616b;background:#eef0f2;text-transform:none}.group-modal footer button.primary{color:#fff;background:#398afa}.group-chat-header{grid-template-columns:3.5rem minmax(0,1fr) 3.5rem}.group-chat-header>div{text-align:center}.group-chat-header small{color:#8c939c}.group-top-notice{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 1.5rem;align-items:center;gap:.6rem;width:min(100%,54rem);min-height:3.7rem;margin:0 auto;padding:.5rem 1rem;border:0;border-bottom:1px solid #e8eaed;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-top-notice>.material-icons:first-child{color:#398afa}.group-top-notice.announcement>.material-icons:first-child{color:#f29b38}.group-top-notice span{display:flex;min-width:0;flex-direction:column}.group-top-notice small{margin-top:.15rem;overflow:hidden;color:#8d949d;font-size:.75rem;text-overflow:ellipsis;white-space:nowrap}.group-chat-timeline{width:100%;min-height:0;padding:1.5rem max(1rem,calc(50% - 27rem));overflow-y:auto;flex:1 1 auto}.group-system-event{width:fit-content;max-width:80%;margin:.8rem auto;padding:.35rem .6rem;border-radius:.3rem;color:#878e97;background:#e8eaed;font-size:.75rem;text-align:center}.group-chat-message{display:flex;gap:.7rem;margin-top:1rem}.group-chat-message>div{max-width:70%}.group-chat-message>div>span{color:#7d858f;font-size:.75rem}.group-chat-message em{margin-left:.35rem;padding:.08rem .3rem;border-radius:.2rem;color:#247ee6;background:#eaf3ff;font-size:.65rem;font-style:normal}.group-chat-message.owner em{color:#d57b17;background:#fff1df}.group-chat-message p{margin:.3rem 0 0;padding:.7rem .9rem;border-radius:.4rem;background:#fff;line-height:1.5}.group-chat-composer{display:grid;grid-template-columns:2.6rem minmax(0,1fr) 2.6rem 2.6rem;align-items:center;flex:none;min-height:4rem;padding:.5rem max(.5rem,calc(50% - 27rem));border-top:1px solid #e2e5e9;background:#f8f9fa}.group-chat-composer button{width:2.5rem;min-width:2.5rem;height:2.5rem;min-height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.group-chat-composer input{height:2.7rem;margin:0;padding:0 .7rem;border:1px solid #e1e4e8;border-radius:.35rem;box-shadow:none;background:#fff}.group-invite-card{width:min(100%,23rem);margin:3rem auto;padding:1rem;border-radius:.45rem;background:#fff;box-shadow:0 .5rem 1.5rem rgba(34,42,52,.08)}.group-invite-card>div{display:flex;align-items:center;gap:.8rem}.group-invite-card>div>span{display:flex;flex-direction:column}.group-invite-card p,.group-invite-card small{color:#858c95}.group-invite-card button{width:100%;min-height:2.8rem;margin:.8rem 0 0;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#398afa;text-transform:none}.group-invite-card button[disabled]{color:#7e858e;background:#e8eaed}.group-announcement-detail{width:min(100%,42rem);margin:0 auto;padding:2rem 1.2rem;background:#fff}.group-announcement-detail>.material-icons{color:#f19b38;font-size:2.5rem}.group-announcement-detail h2{margin:.7rem 0 1.2rem}.group-announcement-detail>p{color:#555d67;line-height:1.8}.group-announcement-detail>small{display:block;margin-top:1rem;color:#3a8aec}.group-settings section>.group-member-section-title{min-height:2.8rem;padding:.75rem 1rem .35rem;border-bottom:0;gap:.5rem}.group-member-section-title>strong{color:#30353c;font-size:1rem;line-height:1.3}.group-member-section-title>small{margin-left:auto;color:#949ba4;line-height:1.3}.group-settings section>.group-member-grid{display:flex;flex-wrap:wrap;align-items:flex-start;gap:.9rem .5rem;min-height:0;padding:.25rem 1rem 1rem;border-bottom:0}.group-member-grid>button{display:flex;flex-direction:column;align-items:center;gap:.35rem;width:4.4rem;min-width:0;height:auto;min-height:0;margin:0;padding:0;border:0;box-shadow:none;color:#68707a;background:transparent;line-height:1.3;text-transform:none}.group-member-grid>button>small{width:100%;overflow:hidden;color:#68707a;text-align:center;text-overflow:ellipsis;white-space:nowrap}.group-member-grid .group-avatar,.group-member-tile-action{width:3.6rem;height:3.6rem;flex:0 0 3.6rem}.group-member-tile-action{display:grid;place-items:center;width:3.6rem;height:3.6rem;border-radius:.45rem;color:#98a0aa;background:#f0f2f5}.group-member-tile-action>.material-icons{font-size:1.5rem}.group-profile{width:min(100%,50rem);margin:0 auto;padding-top:.8rem}.group-profile>button,.group-profile>label{gap:.7rem}.group-profile>button>span:not(.group-avatar),.group-profile>label>span{min-width:6rem}.group-profile>button>small,.group-profile>label>input{min-width:0;margin-left:auto;overflow:hidden;color:#818892;text-overflow:ellipsis;white-space:nowrap}.group-profile>label>input{width:100%;height:2.5rem;margin:0;padding:0 .5rem;border:0;box-shadow:none;text-align:right}.group-profile-avatar .group-avatar{width:3.5rem;height:3.5rem}.group-profile-avatar>i:last-child,.group-profile-qr>i:first-of-type{margin-left:auto}.group-edit-text{width:min(100%,42rem);margin:0 auto;padding:1rem}.group-edit-text input,.group-edit-text textarea{width:100%;margin:0;padding:.8rem;border:1px solid #e1e4e8;border-radius:.35rem;box-shadow:none;background:#fff}.group-edit-text input{height:3rem}.group-edit-text textarea{min-height:10rem;resize:vertical}.group-edit-text>small{display:block;margin-top:.4rem;color:#969da6;text-align:right}.group-edit-text p{color:#878e98;font-size:.78rem}.group-governance section>div>span{display:flex;flex-direction:column;flex:1 1 auto}.group-governance section>div>span small{margin-top:.2rem;color:#9299a2;font-size:.72rem}.group-admin-page{padding-bottom:1rem}.group-admin-page aside{display:flex;gap:.6rem;margin:0;padding:.8rem 1rem;color:#7a828c;background:#eef5ff;font-size:.78rem;line-height:1.5}.group-admin-page aside .material-icons{color:#398afa;font-size:1.2rem}.group-admin-page aside p{margin:0}.group-admin-page h2{margin:0;padding:.7rem 1rem;color:#8a929b;background:#f5f6f8;font-size:.78rem}.group-inline-empty{padding:2rem;color:#969da5;text-align:center}.group-inline-note{margin:0;padding:.9rem 1rem 1.4rem;color:#969da5;font-size:.85rem;text-align:center}.group-section-title{margin:0;padding:.7rem 1rem;color:#8a929b;background:#f5f6f8;font-size:.78rem}.group-inline-hint{padding:.3rem 1rem .7rem;color:#969da5;font-size:.78rem}.group-toast-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:30;display:flex;flex-direction:column;align-items:center;gap:.4rem;padding:1.2rem 1.6rem;border-radius:.6rem;color:#fff;background:rgba(34,38,45,.94);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18)}.group-toast-center .material-icons{font-size:2rem}.group-upload-menu{position:absolute;top:3.4rem;right:max(1rem,calc(50% - 24rem));z-index:20;display:flex;flex-direction:column;min-width:9rem;padding:.4rem 0;border-radius:.5rem;background:rgba(34,38,45,.94);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18)}.group-upload-menu button{display:flex;align-items:center;gap:.6rem;padding:.6rem 1rem;border:0;border-radius:0;box-shadow:none;color:#fff;background:transparent;text-align:left;text-transform:none;font-size:.85rem}.group-upload-menu .material-icons{font-size:1.1rem}.group-member-picker{width:min(100%,50rem);margin:0 auto;background:#fff}.group-member-picker>button{display:grid;grid-template-columns:3rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:100%;min-height:4.5rem;margin:0;padding:.6rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-check{display:grid;place-items:center;width:1.4rem;height:1.4rem;border:1px solid #c8cdd3;border-radius:50%;color:#fff}.group-check.checked{border-color:#398afa;background:#398afa}.group-check .material-icons{font-size:.95rem}.group-file-list{width:min(100%,54rem);margin:0 auto;background:#fff}.group-file-list article{display:grid;grid-template-columns:3rem minmax(0,1fr) 2.5rem;align-items:center;gap:.8rem;min-height:5rem;padding:.7rem 1rem;border-bottom:1px solid #eceef1}.group-file-type{display:grid;place-items:center;width:3rem;height:3.4rem;border-radius:.3rem;color:#fff;background:#e54b68;font-size:.7rem;font-weight:700}.group-file-list article>div{display:flex;min-width:0;flex-direction:column}.group-file-list strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.group-file-list small{margin-top:.3rem;color:#9299a2;font-size:.74rem}.group-file-list progress{width:100%;height:.3rem;margin-top:.4rem;accent-color:#398afa}.group-file-list button{width:2.5rem;min-width:2.5rem;height:2.5rem;min-height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;color:#5f6872;background:transparent}.group-upload-sources{display:grid;grid-template-columns:repeat(3,1fr);flex:none;min-height:6rem;padding:.7rem max(1rem,calc(50% - 18rem)) max(.7rem,env(safe-area-inset-bottom));border-top:1px solid #e2e5e9;background:#fff}.group-upload-sources button{display:flex;align-items:center;justify-content:center;width:100%;min-width:0;margin:0;padding:0;border:0;box-shadow:none;color:#5c6570;background:transparent;flex-direction:column;text-transform:none}.group-upload-sources .material-icons{margin-bottom:.35rem;color:#398afa;font-size:1.7rem}#sidepanel.content-library-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;color:#292e35;background:#f5f6f8}.content-library-panel *{box-sizing:border-box;letter-spacing:0}.library-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;flex-direction:column;background:#f5f6f8}.library-header{display:grid;z-index:3;grid-template-columns:4.5rem minmax(0,1fr) 4.5rem;align-items:center;flex:none;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e9ebee;background:#fff}.library-header h1{margin:0;overflow:hidden;font-size:1.15rem;text-align:center;text-overflow:ellipsis;white-space:nowrap}.library-header>button{display:grid;place-items:center;width:100%;min-width:0;height:3.2rem;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#2e333a;background:transparent}.library-header>button.text{color:#247ee6;font-size:.86rem;text-transform:none}.library-search{display:flex;align-items:center;flex:none;height:2.8rem;margin:.8rem max(1rem,calc(50% - 26rem));padding:0 .75rem;border-radius:.35rem;color:#9299a2;background:#fff}.library-search .material-icons{font-size:1.2rem}.library-search input{width:100%;min-width:0;height:100%;margin:0;padding:0 .5rem;border:0;box-shadow:none;background:transparent}.library-avatar{display:grid;place-items:center;width:3rem;height:3rem;overflow:hidden;flex:0 0 3rem;border-radius:.45rem;color:#fff;background:#4389df}.library-avatar img{width:100%;height:100%;object-fit:cover}.library-history-tabs,.library-type-tabs{display:flex;width:min(100%,52rem);min-height:2.9rem;margin:0 auto;overflow-x:auto;flex:none;border-bottom:1px solid #e4e7eb;background:#fff;scrollbar-width:none}.library-history-tabs button,.library-type-tabs button{min-width:4.3rem;min-height:2.9rem;margin:0;padding:0 .8rem;border:0;border-bottom:2px solid transparent;border-radius:0;box-shadow:none;color:#747c86;background:transparent;font-size:.8rem;text-transform:none}.library-history-tabs button.active,.library-type-tabs button.active{border-bottom-color:#398afa;color:#247ee6}.library-favorite-list,.library-history-content{width:min(100%,52rem);min-height:0;margin:0 auto;overflow-y:auto;flex:1 1 auto}.library-empty-hint{padding:1.5rem 1rem;color:#9299a2;font-size:.85rem;text-align:center}.library-load-more{display:flex;align-items:center;justify-content:center;width:min(100%,52rem);height:auto;margin:0 auto;padding:.8rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:#567;background:#fff;font-size:.85rem;text-transform:none}.library-favorite-item{display:flex;gap:.7rem;padding:.9rem 1rem;border-bottom:1px solid #eceef1;background:#fff}.library-favorite-item.selecting{align-items:center}.library-favorite-content{min-width:0;flex:1 1 auto}.library-favorite-content>footer{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.5rem;margin-top:.65rem;color:#9299a2;font-size:.72rem}.library-favorite-content>footer span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-favorite-content>footer button{width:2rem;min-width:2rem;height:2rem;min-height:2rem;margin:0;padding:0;border:0;box-shadow:none;color:#7d858e;background:transparent}.library-text-content{margin:0;color:#343941;font-size:.94rem;line-height:1.65}.library-text-content.clamped{max-height:8.25em;overflow:hidden}.library-text-wrap{display:block}.library-text-actions{display:flex;align-items:center;gap:1.1rem;margin-top:.35rem}.library-text-actions button{display:inline-flex;align-items:center;gap:.2rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent;color:#3b82c4;font-size:.82rem}.library-text-actions button .material-icons{font-size:1rem}.library-file-card{display:grid;grid-template-columns:3rem minmax(0,1fr) auto;align-items:center;gap:.8rem;width:100%;min-height:4.8rem;margin:0;padding:.7rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:#30353c;background:#fafbfc;text-align:left;text-transform:none}.library-download-icon,.library-file-card>span{display:grid;place-items:center;width:3rem;height:3.4rem;border-radius:.3rem;color:#fff;background:#e54b68;font-size:.7rem;font-weight:700}.library-file-card>div{display:flex;min-width:0;flex-direction:column;line-height:1.3}.library-file-card strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-file-card small{margin-top:.3rem;color:#9299a2;font-size:.74rem}.library-file-card.removed{opacity:.65}.library-file-card em{color:#d74a53;font-size:.74rem;font-style:normal}.library-link-text{display:flex;align-items:center;gap:.6rem;width:100%;min-width:0;height:auto;min-height:2.8rem;margin:0;padding:.6rem .8rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:var(--clr-primary-accent);background:#fafbfc;text-align:left;text-transform:none;line-height:1.3}.library-link-text span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-link-text.removed,.library-media-thumb.removed,.library-text-content.removed,.library-voice-card.removed{display:flex;align-items:center;justify-content:center;gap:.4rem;opacity:.65}.library-link-text.removed em,.library-media-thumb.removed em,.library-text-content.removed em,.library-voice-card.removed em{color:#d74a53;font-size:.74rem;font-style:normal}.library-voice-card{display:flex;align-items:center;gap:.6rem;width:min(100%,20rem);min-height:3.2rem;margin:0;padding:0 .8rem;border:0;border-radius:.4rem;box-shadow:none;color:#343a42;background:#eef5ff}.library-voice-card.playing{color:#fff;background:#398afa}.library-voice-card .material-icons{font-size:1.6rem}.library-wave{height:1rem;opacity:.55;background:repeating-linear-gradient(90deg,currentColor 0 2px,transparent 2px 5px)}.library-link-card{display:grid;grid-template-columns:5.2rem minmax(0,1fr);gap:.8rem;width:100%;min-height:5.8rem;margin:0;padding:.7rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:#30353c;background:#fafbfc;text-align:left;text-transform:none}.library-link-card>img{width:5.2rem;height:4.5rem;border-radius:.3rem;object-fit:cover}.library-link-card>div{min-width:0}.library-link-card p,.library-link-card strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-link-card p{margin:.35rem 0;color:#7e858f;font-size:.76rem}.library-link-card small{display:flex;align-items:center;color:#9aa0a8}.library-link-card small .material-icons{margin-right:.25rem;font-size:.95rem}.library-media-thumb{position:relative;width:11rem;height:auto;aspect-ratio:4/3;min-height:0;margin:0;padding:0;overflow:hidden;border:0;border-radius:.4rem;box-shadow:none;background:#dfe3e8}.library-media-thumb img{width:100%;height:100%;object-fit:cover}.library-media-thumb .material-icons{position:absolute;top:50%;left:50%;color:#fff;font-size:2.5rem;filter:drop-shadow(0 2px 4px rgba(0,0,0,.35));transform:translate(-50%,-50%)}.library-media-thumb small{position:absolute;right:.4rem;bottom:.3rem;color:#fff}.library-check{display:grid;place-items:center;width:1.4rem;min-width:1.4rem;height:1.4rem;min-height:1.4rem;margin:0;padding:0;border:1px solid #c8cdd3;border-radius:50%;box-shadow:none;color:#fff;background:#fff}.library-check.checked{border-color:#398afa;background:#398afa}.library-check .material-icons{font-size:.95rem}.library-empty{display:flex;align-items:center;justify-content:center;min-height:20rem;color:#969da6;flex-direction:column}.library-empty .material-icons{margin-bottom:.7rem;color:#b5bbc2;font-size:3.5rem}.library-batch-bar{display:grid;grid-template-columns:repeat(2,1fr);flex:none;min-height:4.5rem;padding-bottom:env(safe-area-inset-bottom);border-top:1px solid #e2e5e9;background:#fff}.library-batch-bar button{display:flex;align-items:center;justify-content:center;min-height:4.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#555e68;background:transparent;flex-direction:column;text-transform:none}.library-batch-bar button[disabled]{color:#b6bbc2}.library-batch-bar span{margin-top:.2rem;font-size:.72rem}.library-sheet-backdrop{display:grid;position:absolute;z-index:70;inset:0;place-items:center;padding:1rem;background:rgba(22,26,31,.52)}.library-confirm-sheet{width:min(100%,25rem);padding:1.25rem;border-radius:.5rem;background:#fff;text-align:center}.library-confirm-sheet>.material-icons{color:#4d73aa;font-size:2.8rem}.library-confirm-sheet h2{margin:.65rem 0;font-size:1.15rem}.library-confirm-sheet p{margin:.7rem 0 1rem;color:#5c646e;line-height:1.6;text-align:left}.library-confirm-sheet button{width:100%;min-height:2.9rem;margin:.45rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#4d5660;background:#f0f2f4}.library-confirm-sheet button.danger{color:#fff;background:#d84950}.library-section-title{width:min(100%,52rem);margin:0 auto;padding:.55rem 1rem;color:#8a929b;font-size:.78rem}.library-target-list{width:min(100%,52rem);min-height:0;margin:0 auto;overflow-y:auto;flex:1 1 auto;background:#fff}.library-target-list>button{display:grid;grid-template-columns:3rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:100%;min-height:4.5rem;margin:0;padding:.6rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.library-target-list>button>span:nth-child(2){display:flex;min-width:0;flex-direction:column}.library-target-list small{margin-top:.2rem;color:#9299a2}.library-next-bar{display:flex;align-items:center;justify-content:space-between;flex:none;min-height:4.3rem;padding:.6rem max(1rem,calc(50% - 25rem));border-top:1px solid #e2e5e9;color:#777f89;background:#fff}.library-next-bar button,.library-primary,.library-share-confirm>button{width:auto;min-width:5rem;min-height:2.8rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#398afa;text-transform:none}.library-next-bar button[disabled]{background:#b7c9df}.library-share-confirm{width:min(100%,42rem);margin:0 auto;padding:1.2rem}.library-share-confirm h2{margin:0 0 .8rem;font-size:.92rem}.library-target-summary{display:flex;gap:1rem;padding:1rem;overflow-x:auto;background:#fff}.library-target-summary>span{display:flex;align-items:center;width:4rem;flex:0 0 4rem;flex-direction:column}.library-target-summary small{width:100%;margin-top:.3rem;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.library-share-confirm>section{margin-top:1rem;padding:1rem;background:#fff}.library-share-confirm>section p{margin-bottom:0;color:#858d96;font-size:.76rem;line-height:1.5}.library-share-confirm textarea{width:100%;min-height:5rem;margin:1rem 0;padding:.8rem;border:0;border-radius:.35rem;box-shadow:none;background:#fff;resize:vertical}.library-share-confirm>button{width:100%}.library-download{width:min(100%,36rem);margin:0 auto;padding:2.5rem 1.2rem;text-align:center}.library-download-icon{width:5rem;height:5.8rem;margin:0 auto 1rem;font-size:1rem}.library-download h2{margin:0;overflow-wrap:anywhere;font-size:1.1rem}.library-download>p{color:#8a929b}.library-download dl{margin:1.5rem 0;padding:0 1rem;background:#fff;text-align:left}.library-download dl>div{display:flex;justify-content:space-between;padding:.8rem 0;border-bottom:1px solid #eceef1}.library-download dd,.library-download dt{margin:0}.library-download dd{color:#777f89}.library-primary{display:flex;align-items:center;justify-content:center;width:100%}.library-primary .material-icons{margin-right:.4rem}.library-download-progress{margin:1.5rem 0;padding:1rem;background:#fff;text-align:left}.library-download-progress>div{display:flex;justify-content:space-between}.library-download-progress progress{width:100%;height:.45rem;margin:.8rem 0 .4rem;accent-color:#398afa}.library-download-progress small{color:#9299a2}.library-download-actions{display:grid;grid-template-columns:1fr;gap:.8rem}.library-download-actions button{min-height:2.9rem;margin:0;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;color:#555e68;background:#fff;text-transform:none}.library-download-actions button.primary{border-color:#398afa;color:#fff;background:#398afa}.library-download-actions .material-icons{margin-right:.35rem;font-size:1.1rem;vertical-align:middle}.library-complete{display:flex;align-items:center;gap:.7rem;margin:1.5rem 0;padding:1rem;color:#257c58;background:#eaf8f1;text-align:left}.library-complete>.material-icons{font-size:2rem}.library-complete>span{display:flex;flex-direction:column}.library-complete small{margin-top:.2rem;color:#65917d}.library-message-results>button{display:grid;grid-template-columns:3rem minmax(0,1fr) 1.5rem;align-items:start;gap:.8rem;width:100%;min-height:5.5rem;margin:0;padding:.8rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.library-message-results>button>span{min-width:0}.library-message-results p{margin:.3rem 0;color:#666e78;line-height:1.5}.library-message-results mark{padding:0 .08rem;color:#1f66b8;background:#dcecff}.library-message-results small,.library-message-results strong{line-height:1.3}.library-message-results small{color:#969da5}.library-record-files,.library-record-links{padding:.8rem;background:#fff}.library-record-header{display:flex;align-items:center;justify-content:space-between;gap:.6rem;width:100%;min-width:0;height:auto;margin:0 0 .4rem;padding:0;border:0;box-shadow:none;color:inherit;background:transparent;text-align:left;text-transform:none;line-height:1.3}.library-record-header strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.library-record-header small{flex:none;color:#9299a2;font-size:.74rem}.library-record-files .library-file-card,.library-record-links .library-link-text{margin-bottom:.7rem}.library-date-title{margin:0;padding:.7rem .8rem;color:#828a94;font-size:.8rem}.library-media-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.35rem;padding:0 .8rem 1rem}.library-media-grid button{position:relative;width:100%;height:auto;min-height:0;aspect-ratio:1;margin:0;padding:0;overflow:hidden;border:0;border-radius:.25rem;box-shadow:none;background:#dfe3e8}.library-media-grid img{width:100%;height:100%;object-fit:cover}.library-media-grid .material-icons{position:absolute;top:50%;left:50%;color:#fff;font-size:2.2rem;filter:drop-shadow(0 2px 4px rgba(0,0,0,.35));transform:translate(-50%,-50%)}.library-media-grid small{position:absolute;right:.3rem;bottom:.2rem;color:#fff;font-size:.65rem}#sidepanel.call-experience-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#11151a}.call-experience-panel *{box-sizing:border-box;letter-spacing:0}.call-history-page,.call-minimized-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#252a31;background:#f5f6f8;flex-direction:column}.call-chat-preview-header,.call-history-page>header{display:grid;grid-template-columns:3.8rem minmax(0,1fr) 3.8rem;align-items:center;flex:none;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e8eaed;background:#fff}.call-history-page>header h1{margin:0;font-size:1.15rem;text-align:center}.call-chat-preview-header button,.call-history-page>header button{display:grid;place-items:center;width:100%;min-width:0;height:3.2rem;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#30353c;background:transparent}.call-history-page>main{width:min(100%,48rem);min-height:0;margin:0 auto;overflow-y:auto;flex:1 1 auto;background:#fff}.call-record{display:grid;grid-template-columns:2.5rem minmax(0,1fr) auto 1.5rem;align-items:center;gap:.7rem;width:100%;min-height:4.5rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.call-record>.material-icons:first-child{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:50%;color:#257a58;background:#e9f7f0}.call-record.busy>.material-icons:first-child,.call-record.declined>.material-icons:first-child,.call-record.missed>.material-icons:first-child{color:#d84850;background:#fdecee}.call-record>span{display:flex;min-width:0;flex-direction:column}.call-record small{margin-top:.2rem;color:#858d96}.call-record.busy small,.call-record.declined small,.call-record.missed small{color:#d84850}.call-record time{color:#969da5;font-size:.72rem}.call-record>.material-icons:last-child{color:#8d949d;font-size:1rem}.call-history-page>footer{display:grid;grid-template-columns:1fr 1fr;gap:.8rem;width:min(100%,48rem);min-height:4.8rem;margin:0 auto;padding:.7rem 1rem max(.7rem,env(safe-area-inset-bottom));border-top:1px solid #e2e5e9;background:#fff}.call-history-page>footer button{display:flex;align-items:center;justify-content:center;min-height:3rem;margin:0;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#277f5a;text-transform:none}.call-history-page>footer button:last-child{background:#347fd7}.call-history-page>footer .material-icons{margin-right:.4rem;font-size:1.2rem}.call-fullscreen{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#fff;background:#171c22;flex-direction:column;isolation:isolate}.call-audio-surface{background:#26323b}.call-ambient{position:absolute;z-index:-2;inset:-2rem;background:linear-gradient(160deg,#34444f,#202931 52%,#151a20)}.call-audio-surface:after{content:"";position:absolute;z-index:-1;inset:0;opacity:.12;background-image:url(../img/bkg/p09.jpg);background-position:50%;background-size:cover;filter:blur(24px);transform:scale(1.12)}.call-fullscreen.incoming-call-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:200}.incoming-call-photo-blur{position:absolute;z-index:-1;inset:0;opacity:.12;background-image:var(--incoming-call-photo);background-position:50%;background-size:cover;filter:blur(24px);transform:scale(1.12)}.call-product-header{display:grid;z-index:4;grid-template-columns:4rem minmax(0,1fr) 4rem;align-items:center;flex:none;min-height:4.8rem;padding-top:env(safe-area-inset-top)}.call-product-header>button{display:grid;place-items:center;width:100%;min-width:0;height:3.4rem;min-height:3.4rem;margin:0;padding:0;border:0;box-shadow:none;color:hsla(0,0%,100%,.92);background:transparent}.call-product-header>span{color:hsla(0,0%,100%,.7);font-size:.74rem;text-align:center}.call-peer-card{display:flex;z-index:2;align-items:center;justify-content:center;min-height:0;padding:1rem;flex:1 1 auto;flex-direction:column}.call-product-avatar{display:block;width:7.5rem;height:7.5rem;overflow:hidden;border:2px solid hsla(0,0%,100%,.4);border-radius:50%;box-shadow:0 1rem 2.5rem rgba(0,0,0,.25)}.call-product-avatar.small{width:3rem;height:3rem}.call-product-avatar img{width:100%;height:100%;object-fit:cover}.call-peer-card h1{display:flex;align-items:center;margin:1.3rem 0 .45rem;max-width:100%;color:#fff;font-size:1.55rem}.call-peer-card h1>span{min-width:0;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.call-peer-card h1 .trusted-badge{flex:none}.call-peer-card p{margin:0;color:hsla(0,0%,100%,.78);font-size:.92rem}.call-peer-card .call-network{display:flex;align-items:center;margin-top:.65rem;color:hsla(0,0%,100%,.62)}.call-network i{width:.45rem;height:.45rem;margin-right:.35rem;border-radius:50%;background:#43d38c}.call-ringing-dots{display:flex;gap:.35rem;margin-top:1rem}.call-ringing-dots i{width:.4rem;height:.4rem;border-radius:50%;background:hsla(0,0%,100%,.65);animation:call-dot 1.2s ease-in-out infinite}.call-ringing-dots i:nth-child(2){animation-delay:.15s}.call-ringing-dots i:nth-child(3){animation-delay:.3s}@keyframes call-dot{0%,70%,to{transform:translateY(0);opacity:.45}35%{transform:translateY(-.35rem);opacity:1}}.call-active-controls,.call-incoming-actions,.call-single-action,.call-video-controls{display:flex;z-index:4;align-items:flex-start;justify-content:space-evenly;flex:none;min-height:8rem;padding:1rem max(1rem,calc(50% - 17rem)) max(1.5rem,env(safe-area-inset-bottom))}.call-single-action{justify-content:center}.call-control{display:flex;align-items:center;width:5rem;min-width:5rem;height:auto;min-height:0;margin:0;padding:0;border:0;box-shadow:none;color:hsla(0,0%,100%,.78);background:transparent;flex-direction:column;text-transform:none}.call-control>span{display:grid;place-items:center;width:3.7rem;height:3.7rem;border-radius:50%;color:#fff;background:hsla(0,0%,100%,.16);backdrop-filter:blur(8px)}.call-control.active>span{color:#22272d;background:#fff}.call-control.danger>span{color:#fff;background:#e3464f}.call-control .material-icons{font-size:1.55rem}.call-control small{width:100%;margin-top:.5rem;color:inherit;font-size:.7rem;line-height:1.2;text-align:center}.call-incoming-actions .call-control:last-child>span{background:#2ab56f}.call-video-surface{background:#11151a}.call-video-backdrop,.call-video-off{position:absolute;z-index:-2;inset:0;width:100%;height:100%}.call-video-backdrop{object-fit:cover}.call-video-off{display:flex;align-items:center;justify-content:center;background:#252f37;flex-direction:column}.call-video-off .call-product-avatar{width:7rem;height:7rem}.call-video-off strong{margin-top:1.2rem}.call-video-off small{margin-top:.35rem;color:hsla(0,0%,100%,.68)}.call-video-off.local{background:#20272e}.call-video-shade{position:absolute;z-index:-1;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.42),transparent 30%,transparent 62%,rgba(0,0,0,.58))}.call-video-status{z-index:2;text-align:center}.call-video-status h1{margin:.4rem 0 .25rem;color:#fff;font-size:1.25rem}.call-video-status p{margin:0;color:hsla(0,0%,100%,.8)}.call-video-controls{margin-top:auto}.call-local-preview{position:absolute;z-index:3;top:max(6.2rem,calc(env(safe-area-inset-top) + 5rem));right:1rem;width:7rem;min-width:7rem;height:auto;min-height:0;aspect-ratio:3/4;margin:0;padding:0;overflow:hidden;border:1px solid hsla(0,0%,100%,.35);border-radius:.4rem;box-shadow:0 .5rem 1.2rem rgba(0,0,0,.3);background:#252c33}.call-local-preview img{width:100%;height:100%;object-fit:cover}.call-local-preview .material-icons{position:absolute;top:50%;left:50%;color:#fff;transform:translate(-50%,-50%)}.call-toast{position:fixed;z-index:50;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.7rem 1rem;border-radius:.3rem;color:#fff;background:rgba(24,28,34,.94);text-align:center;transform:translateX(-50%)}.call-chat-preview-header>div{display:flex;align-items:center;justify-content:center;flex-direction:column}.call-chat-preview-header small{margin-top:.15rem;color:#37a66d}.call-minimized-page>main{min-height:0;padding:1.5rem max(1rem,calc(50% - 26rem));overflow-y:auto;flex:1 1 auto}.call-chat-preview-message{width:fit-content;max-width:70%;padding:.7rem .9rem;border-radius:.4rem;background:#fff;line-height:1.5}.call-chat-composer{display:grid;grid-template-columns:minmax(0,1fr) 3rem;align-items:center;flex:none;min-height:4rem;padding:.5rem max(.7rem,calc(50% - 26rem));border-top:1px solid #e2e5e9;background:#fff}.call-chat-composer input{height:2.7rem;margin:0;padding:0 .7rem;border:1px solid #e1e4e8;border-radius:.35rem;box-shadow:none;background:#f7f8f9}.call-chat-composer button{width:3rem;min-width:3rem;height:2.7rem;min-height:2.7rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.call-floating-window{position:fixed;z-index:20;top:0;left:0;width:7.4rem;min-width:7.4rem;height:auto;min-height:0;aspect-ratio:3/4;margin:0;padding:0;overflow:hidden;touch-action:none;border:1px solid hsla(0,0%,100%,.6);border-radius:.45rem;box-shadow:0 .5rem 1.5rem rgba(0,0,0,.28);background:#20262c}.call-floating-window img{width:100%;height:100%;pointer-events:none;object-fit:cover}.call-floating-window span{position:absolute;right:.4rem;bottom:.35rem;display:flex;align-items:center;color:#fff;font-size:.68rem;text-shadow:0 1px 2px rgba(0,0,0,.8)}.call-floating-window span i{width:.4rem;height:.4rem;margin-right:.25rem;border-radius:50%;background:#41d48d}.call-mini-hangup{position:fixed;z-index:21;right:1rem;bottom:5.2rem;display:grid;place-items:center;width:3rem;min-width:3rem;height:3rem;min-height:3rem;margin:0;padding:0;border:0;border-radius:50%;box-shadow:0 .4rem 1rem rgba(0,0,0,.2);color:#fff;background:#e3464f}.compose-target-footer{justify-content:space-between;margin-top:auto;color:#757d87;font-size:.82rem}.compose-forward-confirm{width:min(100%,40rem);margin:0 auto;padding:1.2rem}.compose-forward-confirm textarea,.compose-forward-confirm>section{width:100%;margin-bottom:1rem;padding:1rem;border:0;border-radius:.45rem;background:#fff}.compose-target-summary{display:flex;gap:1rem;overflow-x:auto}.compose-target-summary>span{display:flex;align-items:center;width:4rem;flex:0 0 4rem;flex-direction:column}.compose-target-summary small{width:100%;margin-top:.35rem;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.compose-forward-preview h2{margin-top:0}.compose-forward-preview p{margin:.45rem 0;overflow:hidden;color:#757c85;font-size:.82rem;text-overflow:ellipsis;white-space:nowrap}.compose-forward-confirm textarea{min-height:5rem;resize:vertical}.compose-forward-mode{display:grid;grid-template-columns:1fr 1fr;gap:.7rem;margin-bottom:1rem}.compose-forward-mode button{min-height:2.8rem;margin:0;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;color:#646c76;background:#fff;text-transform:none}.compose-forward-mode button.active{border-color:#398afa;color:#287fe5;background:#eef6ff}.compose-confirm-send{width:100%;min-height:3rem;margin:0}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:2rem;opacity:1}}@keyframes fadeout{0%{bottom:2rem;opacity:1}to{bottom:0;opacity:0}}@media (min-width:1440px){#app-container{max-width:114rem}}@media (max-width:960px){#mountPoint{padding:0}.pinned{width:16rem}}@media (max-width:640px){#app-container{width:100%;border-radius:0;box-shadow:none}#sidepanel{width:100%}#sidepanel.message-center-panel,#sidepanel.message-center-panel.full-page{width:100%;min-width:0;flex-basis:100%}#sidepanel.call-experience-panel,#sidepanel.contact-management-panel,#sidepanel.content-library-panel,#sidepanel.direct-message-panel,#sidepanel.group-management-panel,#sidepanel.message-composer-panel{width:100%;min-width:0}.call-active-controls,.call-video-controls{padding-right:.35rem;padding-left:.35rem}.call-control{width:4.5rem;min-width:4.5rem}.call-control>span{width:3.4rem;height:3.4rem}.library-media-grid{grid-template-columns:repeat(3,1fr)}.library-link-card{grid-template-columns:4.3rem minmax(0,1fr)}.library-link-card>img{width:4.3rem;height:4.3rem}.people-profile-actions{grid-template-columns:1fr}.compose-emoji-panel>div{grid-template-columns:repeat(7,1fr)}.compose-picker-header{grid-template-columns:4rem minmax(0,1fr) 4.5rem}.compose-forward-confirm,.compose-upload-page>main{padding:1rem}.chat-product-timeline{padding:1.25rem 1rem}.chat-message-stack{max-width:calc(100% - 4rem)}.chat-bubble{font-size:.94rem}.chat-file-card{min-width:min(17rem,calc(100vw - 6rem))}.chat-contact-card{min-width:min(16rem,calc(100vw - 6rem))}.chat-composer{padding-right:.4rem;padding-left:.4rem}.chat-attachment-panel{grid-template-columns:repeat(4,1fr);gap:.7rem;padding:1rem .75rem max(1rem,env(safe-area-inset-bottom))}.chat-attachment-panel button>span{width:3.3rem;height:3.3rem}.messages-conversation{grid-template-columns:3.55rem minmax(0,1fr) auto;min-height:4.8rem;padding-right:1rem;padding-left:1rem}.messages-frequent-scroll{gap:1rem;padding-right:1rem;padding-left:1rem}.messages-frequent h2{margin-left:1rem}.messages-search{margin-right:1rem;margin-left:1rem}.system-notification-list{padding:1rem}.auth-landing{padding-right:1.25rem;padding-left:1.25rem}.auth-brand{margin-bottom:3rem}.auth-content{padding:1.25rem}.auth-reset-content{padding:1rem 0}.auth-list-form{min-height:calc(100vh - 6.25rem)}.auth-list-form label{grid-template-columns:6.4rem 1fr auto}.auth-code-button{min-width:5.8rem;padding:0 .4rem}.auth-realname-hero{min-height:12rem;padding:1.5rem}.auth-realname-hero strong{font-size:2rem}.auth-realname-hero>.material-icons{font-size:6rem}.auth-realname-content form{padding:1.25rem}.auth-realname-content label{grid-template-columns:6.2rem 1fr}.auth-screenshot-grid{grid-template-columns:repeat(3,1fr)}#info-view{width:100%}.forward-dialog{border-radius:.3rem .3rem 0 0;margin:auto 0 0;width:100%}.menuTrigger{opacity:.3}#send-message-input{transition-property:-tinode-mobile}#pinned-wrapper{height:3.5rem;margin:.25rem}.pinned{width:unset}#video-container.minimized:not(.audio-minimized){flex-direction:row;left:0;right:auto;top:var(--caption-panel-height);width:100%;height:11rem;border-radius:unset;box-shadow:0 0 .5rem var(--clr-shadow-gray-strong)}#controls.minimized{flex-direction:column;row-gap:.5rem;bottom:auto;column-gap:unset;right:1rem}.minimized .call-party{border-radius:unset;box-shadow:unset}}@media (max-width:768px){.call-party.self{bottom:8.5rem;border-radius:unset}}#sidepanel.personal-settings-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f5f6f8}.personal-settings-panel *{box-sizing:border-box;letter-spacing:0}.personal-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#262b31;background:#f5f6f8;flex-direction:column}.personal-page>.personal-page{min-height:0;flex:1 1 auto}.personal-page button,.personal-page input,.personal-page textarea{font:inherit;letter-spacing:0}.personal-page button{text-transform:none}.personal-page>main{min-height:0;overflow-y:auto;flex:1 1 auto}.personal-header{display:grid;grid-template-columns:3.7rem minmax(0,1fr) 3.7rem;align-items:center;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e7e9ec;background:#fff;flex:none}.personal-header h1{min-width:0;margin:0;overflow:hidden;font-size:1.15rem;font-weight:650;text-align:center;text-overflow:ellipsis;white-space:nowrap}.personal-header button{display:grid;place-items:center;width:3.7rem;min-width:3.7rem;height:3.7rem;min-height:3.7rem;margin:0;padding:0;border:0;box-shadow:none;color:#252a30;background:transparent}.personal-header button.text{color:#2873d0;font-size:.9rem}.personal-header .material-icons{font-size:1.55rem}.personal-toast{position:fixed;z-index:90;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.7rem 1rem;border-radius:.3rem;color:#fff;background:rgba(25,29,34,.94);text-align:center;transform:translateX(-50%)}.personal-center-page>main{padding:.85rem 0}.android-settings-list section,.personal-center-page section,.personal-menu-section,.privacy-list section{margin-bottom:.75rem;background:#fff}.personal-identity{display:grid;grid-template-columns:4.5rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:calc(100% - 1.6rem);min-height:7rem;margin:0 .8rem .8rem;padding:.9rem;border:0;border-radius:.45rem;box-shadow:none;color:#2e3339;background:#fff;text-align:left}.personal-identity img{width:4.5rem;height:4.5rem;border-radius:.55rem;object-fit:cover}.personal-identity .personal-avatar-fallback{display:flex;align-items:center;justify-content:center;width:4.5rem;height:4.5rem;border-radius:.55rem;color:#fff;background:#b0b6bd}.personal-identity .personal-avatar-fallback .material-icons{font-size:2rem}.personal-identity small,.personal-identity span,.personal-identity strong{display:block;min-width:0}.personal-identity strong{margin-bottom:.35rem;overflow:hidden;font-size:1.25rem;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}.personal-identity small{margin-top:.15rem;color:#8a919a;line-height:1.3}.personal-menu-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.65rem;width:100%;min-height:4rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353b;background:#fff;text-align:left}.personal-menu-row:has(>.material-icons:first-child){grid-template-columns:2.3rem minmax(0,1fr) auto}.personal-menu-row:last-child{border-bottom:0}.personal-menu-row:active:not([disabled]),.personal-menu-row:hover:not([disabled]){color:#30353b;background:var(--clr-menu-item-hover-bg)}.personal-menu-row.danger,.personal-menu-row.danger:active:not([disabled]),.personal-menu-row.danger:hover:not([disabled]){color:#d93f48;background:#fff}.personal-menu-row.danger:active:not([disabled]),.personal-menu-row.danger:hover:not([disabled]){background:var(--clr-menu-item-hover-bg)}.personal-menu-row.danger>.material-icons:first-child{color:#d93f48}.personal-menu-row>.material-icons:first-child{color:#59636e;font-size:1.55rem}.personal-menu-row>.material-icons:last-child{color:#a8aeb5}.personal-menu-row span{display:flex;align-items:center;justify-content:space-between;gap:.7rem;min-width:0}.personal-menu-row strong{min-width:0;font-weight:500}.personal-menu-row small{max-width:62%;overflow:hidden;color:#969da5;text-align:right;text-overflow:ellipsis;white-space:nowrap}.personal-profile-list{padding-top:.7rem;background:#fff}.personal-profile-list>button:first-child{display:grid;grid-template-columns:minmax(0,1fr) 3.8rem 1.5rem;align-items:center;width:100%;min-height:5rem;margin:0;padding:.6rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353b;background:#fff;text-align:left}.personal-profile-list>button:first-child img{width:3.5rem;height:3.5rem;border-radius:.45rem;object-fit:cover}.gender-option-list{padding-top:.7rem;background:#fff}.gender-option-list button{display:grid;grid-template-columns:minmax(0,1fr) 1.5rem;align-items:center;width:100%;min-height:3.6rem;margin:0;padding:.6rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353b;background:#fff;text-align:left}.gender-option-list button strong{font-weight:400}.gender-option-list button .material-icons{color:var(--clr-primary,#3b82f6)}.profile-editor-page>main{padding:1rem}.profile-editor-page>main>label{display:block;position:relative}.profile-editor-page label input,.profile-editor-page label textarea{width:100%;margin:0;padding:.75rem 3rem .75rem .75rem;border:1px solid #dbe0e5;border-radius:.35rem;box-shadow:none;background:#fff}.profile-editor-page label input:not([type=date]){height:3.2rem}.profile-editor-page label textarea{height:11rem;padding-bottom:2rem;resize:vertical;line-height:1.5}.profile-editor-page>main>label>small{position:absolute;right:.75rem;bottom:.65rem;color:#9ba2aa}.profile-editor-page>main>label>button{position:absolute;top:.1rem;right:2.7rem;display:grid;place-items:center;width:2.8rem;min-width:2.8rem;height:3rem;min-height:3rem;margin:0;padding:0;border:0;box-shadow:none;color:#a3a9b0;background:transparent}.profile-editor-page>main>p{margin:.65rem 0 0;color:#8a929b;font-size:.8rem}.birth-date-editor{display:flex;align-items:center;padding-top:4rem!important;flex-direction:column}.birth-date-editor>.material-icons{color:#d66372;font-size:4rem}.birth-date-editor label{width:min(100%,26rem);margin-top:1.5rem}.birth-date-editor label span{display:block;margin-bottom:.5rem;font-weight:600}.birth-date-editor label input{height:3.2rem;padding:0 .75rem}.change-password-fields label{display:block;width:min(100%,26rem);margin-top:1.5rem}.change-password-fields label span{display:block;margin-bottom:.5rem;font-weight:600}.change-password-fields label input{height:3.2rem;padding:0 .75rem}.personal-qr-page>main{padding:1rem}.personal-qr-page main>section{width:min(100%,27rem);margin:0 auto;padding:1.2rem;border-radius:.45rem;background:#fff;text-align:center}.personal-qr-profile{display:flex;align-items:center;gap:.7rem;text-align:left}.personal-qr-profile img{width:3.3rem;height:3.3rem;border-radius:.4rem;object-fit:cover}.personal-qr-profile small,.personal-qr-profile span,.personal-qr-profile strong{display:block}.personal-qr-profile small{margin-top:.2rem;color:#858d96}.personal-qrcode{display:inline-block;width:226px;height:226px;margin:1.5rem auto .8rem;padding:8px;border:1px solid #eceef1;background:#fff}.personal-qrcode canvas,.personal-qrcode img{width:210px!important;height:210px!important}.personal-qr-page section>p{margin:.5rem 0}.personal-qr-page section>small{color:#8d949d}.personal-qr-actions{display:grid;grid-template-columns:repeat(2,1fr);width:min(100%,27rem);margin:.8rem auto 0;background:#fff}.personal-qr-actions button{display:flex;align-items:center;justify-content:center;min-height:3.4rem;margin:0;padding:0;border:0;box-shadow:none;color:#3476cd;background:transparent}.personal-qr-actions button+button{border-left:1px solid #eceef1}.personal-qr-actions .material-icons{margin-right:.3rem}.android-settings-list{padding:.75rem 0 1.5rem}.personal-logout{width:100%;min-height:3.8rem;margin:0;padding:0;border:0;box-shadow:none;color:#d93f48;background:#fff}.permission-overlay,.personal-sheet-backdrop,.update-backdrop{display:grid;position:absolute;z-index:70;inset:0;place-items:center;padding:1rem;background:rgba(22,26,31,.52)}.personal-confirm-sheet{width:min(100%,25rem);padding:1.25rem;border-radius:.5rem;background:#fff;text-align:center}.personal-confirm-sheet>.material-icons{color:#4d73aa;font-size:2.8rem}.personal-confirm-sheet h2{margin:.65rem 0;font-size:1.15rem}.personal-confirm-sheet p{margin:.7rem 0 1rem;color:#5c646e;line-height:1.6;text-align:left}.personal-confirm-sheet input{width:100%;height:3rem;margin:0 0 .8rem;padding:0 .75rem;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;text-align:center}.personal-confirm-sheet button{width:100%;min-height:2.9rem;margin:.45rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#4d5660;background:#f0f2f4}.personal-confirm-sheet button.primary{color:#fff;background:#347bd7}.personal-confirm-sheet button.danger{color:#fff;background:#d84950}.app-version-page>main{padding:2rem 1rem}.app-brand{margin-bottom:2rem;text-align:center}.app-brand>span{display:grid;place-items:center;width:6.5rem;height:6.5rem;margin:0 auto .8rem;border-radius:1.2rem;color:#fff;background:#2878d6}.app-brand .material-icons{font-size:4.2rem}.app-brand h2,.app-brand p{margin:0}.app-brand h2{font-size:1.25rem}.app-brand p{margin-top:.25rem;color:#777f89}.update-dialog{width:min(100%,25rem);padding:1.3rem;border-radius:.55rem;background:#fff;text-align:center}.update-dialog>span{display:grid;place-items:center;width:5rem;height:5rem;margin:0 auto .8rem;border-radius:50%;color:#fff;background:#4e74b7}.update-dialog>span .material-icons{font-size:3.2rem}.update-dialog h2{margin:0;font-size:1.35rem}.update-dialog>strong{display:block;margin-top:.25rem;color:#69717b}.update-dialog ul{margin:1rem 0;padding-left:1.25rem;color:#4e5660;line-height:1.65;text-align:left}.update-dialog button{width:100%;min-height:3rem;margin:.45rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#777f88;background:transparent}.update-dialog button:first-of-type{color:#fff;background:#347bd7}.privacy-list{padding-top:.75rem}.privacy-list section>div{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.8rem;min-height:4.6rem;padding:.7rem 1rem;border-bottom:1px solid #eceef1}.privacy-list section>div:last-child{border-bottom:0}.privacy-list section>div small,.privacy-list section>div span,.privacy-list section>div strong{display:block;min-width:0}.privacy-list section>div small{margin-top:.25rem;color:#8b929b;line-height:1.35}.personal-switch{position:relative;width:3.25rem;min-width:3.25rem;height:1.9rem;min-height:1.9rem;margin:0;padding:0;border:0;border-radius:1rem;box-shadow:none;background:#d8dce1}.personal-switch:disabled{opacity:.45;cursor:not-allowed}.personal-switch i{position:absolute;top:.15rem;left:.15rem;width:1.6rem;height:1.6rem;border-radius:50%;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.2);transition:transform .16s ease}.personal-switch.checked{background:#347bd7}.personal-switch.checked i{transform:translateX(1.35rem)}.privacy-note{margin:0;padding:0 1rem .75rem;color:#7e8690;font-size:.82rem;line-height:1.5}.youth-mode-page{background:#fff}.youth-mode-page>main{padding:3.2rem 1.5rem 1rem;text-align:center}.youth-mode-page>main>.material-icons{color:#347bd7;font-size:5rem}.youth-mode-page h2{margin:1rem 0 1.5rem;font-size:1.45rem}.youth-mode-page ul{margin:0;padding:0;list-style:none;text-align:left}.youth-mode-page li{position:relative;margin-bottom:1.2rem;padding-left:1.7rem;line-height:1.55}.youth-mode-page li:before{position:absolute;top:.55rem;left:.2rem;width:.55rem;height:.55rem;border-radius:50%;background:#347bd7;content:""}.youth-usage{margin-top:1.8rem;color:#868e97}.youth-mode-page>footer{padding:.8rem 1rem max(1rem,env(safe-area-inset-bottom));background:#fff;text-align:center;flex:none}.youth-mode-page>footer button{width:100%;min-height:3.2rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#347bd7}.youth-mode-page>footer button.outline{border:1px solid #347bd7;color:#347bd7;background:#fff}.youth-mode-page>footer small{display:block;margin-top:.65rem;color:#9aa1a9}.permission-guide-page{background:#fff}.permission-preview{padding:1.2rem 1rem;opacity:.72}.permission-preview>header{display:flex;align-items:center;justify-content:space-between}.permission-preview h1{margin:0;font-size:1.35rem}.permission-preview>label{display:flex;align-items:center;justify-content:center;min-height:3rem;margin:1rem 0;border-radius:.35rem;color:#8d949c;background:#f0f2f4}.permission-preview>label .material-icons{margin-right:.35rem}.permission-preview>div{display:grid;grid-template-columns:3.4rem minmax(0,1fr);align-items:center;gap:.7rem;min-height:4.6rem;border-bottom:1px solid #eceef1}.permission-preview>div small,.permission-preview>div strong,.permission-preview>div>span:last-child{display:block;min-width:0}.permission-preview>div small{margin-top:.2rem;color:#8b929b}.permission-avatar{display:grid;place-items:center;width:3.1rem;height:3.1rem;border-radius:.45rem;color:#fff;background:#5a77a9}.permission-avatar.tone-0{background:#d18128}.permission-avatar.tone-1{background:#4673bd}.permission-avatar.tone-2{background:#398258}.permission-avatar.tone-3{background:#9c5f7a}.permission-overlay section{width:min(100%,24rem);padding:1.3rem;border-radius:.5rem;background:#fff;text-align:center}.permission-overlay section>span{display:grid;place-items:center;width:4.6rem;height:4.6rem;margin:0 auto .8rem;border-radius:50%;color:#fff;background:#347bd7}.permission-overlay section>span .material-icons{font-size:2.7rem}.permission-overlay h2{margin:0;font-size:1.2rem}.permission-overlay p{margin:.8rem 0 1rem;color:#555d67;line-height:1.6;text-align:left}.permission-overlay button{width:100%;min-height:3rem;margin:.4rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#8a919a;background:transparent}.permission-overlay button:first-of-type{color:#fff;background:#347bd7}@media screen and (max-width:480px){.personal-menu-row{min-height:3.8rem}.personal-menu-row small{max-width:55%}.personal-qrcode{margin-top:1rem}.youth-mode-page>main{padding-top:2rem}}#sidepanel.security-support-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f5f6f8}.security-support-panel *{box-sizing:border-box;letter-spacing:0}.support-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#272c32;background:#f5f6f8;flex-direction:column}.support-page button,.support-page input,.support-page textarea{font:inherit;letter-spacing:0}.support-page button{text-transform:none}.support-page>main{min-height:0;overflow-y:auto;flex:1 1 auto}.support-header{display:grid;grid-template-columns:3.7rem minmax(0,1fr) 3.7rem;align-items:center;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e6e9ec;background:#fff;flex:none}.support-header h1{min-width:0;margin:0;overflow:hidden;font-size:1.15rem;font-weight:650;text-align:center;text-overflow:ellipsis;white-space:nowrap}.support-header button{display:grid;place-items:center;width:3.7rem;min-width:3.7rem;height:3.7rem;min-height:3.7rem;margin:0;padding:0;border:0;box-shadow:none;color:#272c32;background:transparent}.support-toast{position:fixed;z-index:100;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.7rem 1rem;border-radius:.3rem;color:#fff;background:rgba(25,29,34,.94);text-align:center;transform:translateX(-50%)}.risk-warning-page{background:#fff}.risk-conversation-preview{min-height:100%;opacity:.78}.risk-conversation-preview>header{display:grid;grid-template-columns:3.5rem minmax(0,1fr) 3.5rem;align-items:center;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e7e9ec;background:#fff;text-align:center}.risk-conversation-preview>header button{display:grid;place-items:center;width:3.5rem;height:3.5rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.risk-conversation-preview>header small,.risk-conversation-preview>header span,.risk-conversation-preview>header strong{display:block}.risk-conversation-preview>header small{margin-top:.15rem;color:#3d9a68}.risk-conversation-preview>main{min-height:calc(100vh - 8.8rem);padding:1rem;background:#eef0f3}.risk-conversation-preview>main>p{margin:0 0 1rem;color:#8b929b;font-size:.75rem;text-align:center}.risk-conversation-preview main>div{width:fit-content;max-width:78%;margin-bottom:.65rem;padding:.7rem .85rem;border-radius:.35rem;background:#fff;line-height:1.5}.risk-conversation-preview main>div.mine{margin-left:auto;background:#bde7a9}.risk-conversation-preview>footer{display:flex;align-items:center;justify-content:space-between;min-height:4.3rem;padding:.6rem 1rem max(.6rem,env(safe-area-inset-bottom));border-top:1px solid #e0e3e7;color:#959ca5;background:#fff}.risk-conversation-preview>footer span{width:calc(100% - 2.7rem);padding:.65rem .75rem;border:1px solid #e0e3e7;border-radius:.3rem;background:#f7f8f9}.risk-overlay{display:grid;position:absolute;z-index:70;inset:0;place-items:center;padding:1rem;background:rgba(19,23,28,.55)}.risk-dialog{width:min(100%,25rem);max-height:calc(100% - 2rem);padding:1.15rem;overflow-y:auto;border-radius:.55rem;background:#fff;text-align:center}.risk-info-page{margin:0 auto}.risk-symbol{display:grid;place-items:center;width:5rem;height:5rem;margin:0 auto .6rem;border-radius:50%;color:#fff;background:#3979cd}.risk-dialog.secondary .risk-symbol{color:#9b5e08;background:#fff0d5}.risk-symbol .material-icons{font-size:3.2rem}.risk-dialog h2{margin:0;font-size:1.35rem}.risk-dialog>p{margin:.75rem 0;color:#4d555e;line-height:1.65;text-align:left}.risk-dialog>p.risk-emphasis{color:#b1363f;font-weight:650;text-align:center}.risk-dialog ul{margin:.9rem 0;padding:.25rem .75rem;border:1px solid #d9e5f4;border-radius:.4rem;list-style:none}.risk-dialog li{display:flex;align-items:center;min-height:2.7rem;border-bottom:1px solid #e7edf4;line-height:1.35;text-align:left}.risk-dialog li:last-child{border-bottom:0}.risk-dialog li .material-icons{margin-right:.55rem;color:#347bd7;font-size:1.35rem}.risk-dialog aside{display:flex;align-items:flex-start;gap:.5rem;margin:.8rem 0;padding:.7rem;border-radius:.35rem;color:#9e333b;background:#fff0f1;line-height:1.45;text-align:left}.risk-dialog button{width:100%;min-height:3rem;margin:.45rem 0 0;padding:0 .75rem;border:0;border-radius:.35rem;box-shadow:none;color:#7f8790;background:transparent}.risk-dialog button.primary{color:#fff;background:#347bd7}.risk-dialog button.danger{color:#fff;background:#cc3d46}.report-reasons{padding-bottom:1rem}.report-target{display:grid;grid-template-columns:3.5rem minmax(0,1fr) 2rem;align-items:center;gap:.75rem;min-height:5.3rem;padding:.8rem 1rem;background:#fff}.report-target img{width:3.5rem;height:3.5rem;border-radius:.45rem;object-fit:cover}.report-target small,.report-target span,.report-target strong{display:block;min-width:0}.report-target small{margin-top:.25rem;color:#818a94}.report-target>.material-icons{color:#3b8661}.report-reasons>h2{font-weight:500}.report-loading,.report-reasons>h2{margin:0;padding:1rem;color:#6e7781;font-size:.85rem}.report-reason-list{background:#fff}.report-reason-list button{display:grid;grid-template-columns:minmax(0,1fr) 1.5rem;align-items:center;gap:.55rem;width:100%;min-height:4.3rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left}.report-reason-list button>span:first-child,.report-reason-list small,.report-reason-list strong{display:block;min-width:0}.report-reason-list small{margin-top:.2rem;overflow:hidden;color:#858d97;font-size:.76rem;text-overflow:ellipsis;white-space:nowrap}.report-reason-list button>.material-icons:last-child{color:#a8aeb5}.feedback-page>main,.report-details{padding-bottom:1rem}.report-selected-reason{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.7rem;padding:.9rem 1rem;background:#fff}.report-selected-reason>.material-icons{color:#b14650;font-size:2rem}.report-selected-reason small,.report-selected-reason span,.report-selected-reason strong{display:block;min-width:0}.report-selected-reason small{margin-bottom:.2rem;color:#858d96}.report-selected-reason button{min-height:2.5rem;margin:0;padding:0 .5rem;border:0;box-shadow:none;color:#3476ce;background:transparent}.support-textarea{display:block;position:relative;margin-top:.7rem;padding:1rem;background:#fff}.support-textarea>span{display:block;margin-bottom:.6rem;font-weight:600}.support-textarea b{margin-left:.2rem;color:#d6424b}.support-textarea textarea{display:block;width:100%;height:10.5rem;margin:0;padding:.75rem .8rem 2rem;resize:vertical;border:0;box-shadow:none;background:#fff;line-height:1.5}.support-textarea>small{position:absolute;right:1.8rem;bottom:1.6rem;color:#9ba2ab}.evidence-section,.feedback-upload{margin-top:.7rem;padding:1rem;background:#fff}.evidence-section>header,.feedback-upload>header{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-bottom:.8rem}.evidence-section header small,.evidence-section header span,.evidence-section header strong,.feedback-upload header small,.feedback-upload header span,.feedback-upload header strong{display:block;min-width:0}.evidence-section header small,.feedback-upload header small{margin-top:.2rem;color:#858d96}.evidence-section header em,.feedback-upload header em{color:#858d96;font-style:normal}.evidence-section article{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2.5rem;align-items:center;min-height:3.5rem;border-bottom:1px solid #eceef1}.evidence-section article>.material-icons{color:#5273a8}.evidence-section article>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.evidence-section article button{display:grid;place-items:center;width:2.5rem;height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;color:#989fa7;background:transparent}.evidence-upload{width:100%;min-height:4.5rem;border:1px dashed #cbd1d8;border-radius:.35rem;color:#3476ce;background:#f8f9fa}.evidence-upload,.feedback-upload>button{display:flex;align-items:center;justify-content:center;margin:0;padding:.7rem;box-shadow:none;flex-direction:column}.feedback-upload>button{width:7.5rem;height:7.5rem;border:0;border-radius:.35rem;color:#858d96;background:#fff}.evidence-upload .material-icons,.feedback-upload>button .material-icons{margin-bottom:.25rem;font-size:1.8rem}.report-privacy-note{display:flex;align-items:flex-start;gap:.5rem;margin:.8rem 1rem 0;color:#74808b;font-size:.78rem;line-height:1.45}.report-privacy-note .material-icons{color:#4b8065;font-size:1.05rem}.support-submit-bar{padding:.75rem 1rem max(.8rem,env(safe-area-inset-bottom));border-top:1px solid #e1e4e8;background:#fff;flex:none}.support-submit-bar button,.support-success>button{width:100%;min-height:3.1rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#347bd7;font-weight:600}.support-success{display:flex;align-items:center;padding:4rem 1.2rem 1.5rem;text-align:center;flex-direction:column}.support-success>.material-icons{color:#3a9365;font-size:5rem}.support-success h2{margin:1rem 0 .55rem;font-size:1.35rem}.support-success>p{max-width:26rem;margin:0;color:#66707a;line-height:1.6}.support-success dl{width:min(100%,26rem);margin:1.5rem 0;padding:.5rem 1rem;border:1px solid #e0e4e8;border-radius:.4rem;background:#fff}.support-success dl>div{display:flex;align-items:center;justify-content:space-between;min-height:3rem;border-bottom:1px solid #eceef1}.support-success dl>div:last-child{border-bottom:0}.support-success dd,.support-success dt{margin:0}.support-success dt{color:#7c858f}.support-success>button{width:min(100%,26rem)}.feedback-categories{padding:1rem;background:#fff}.feedback-categories h2{margin:0 0 .8rem;font-size:1rem}.feedback-categories>div{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.feedback-categories button{display:flex;align-items:center;justify-content:center;min-width:0;min-height:2.75rem;margin:0;padding:.45rem;border:1px solid #e0e4e8;border-radius:.35rem;box-shadow:none;color:#666f79;background:#fff}.feedback-categories button.active{border-color:#347bd7;color:#2f70c7;background:#eef5ff}.feedback-categories .material-icons{margin-bottom:.25rem;font-size:1.45rem}.feedback-categories button span{width:100%;overflow-wrap:anywhere;font-size:.76rem;line-height:1.25;text-align:center}.feedback-contact{display:block;padding:1rem;background:#fff}.feedback-contact>span{display:block;margin-bottom:.55rem;font-weight:600}.feedback-contact input{width:100%;height:3rem;margin:0;padding:0 .75rem;border:1px solid #dfe3e7;border-radius:.35rem;box-shadow:none;background:#fff}.diagnostics-consent{display:grid;grid-template-columns:1.8rem minmax(0,1fr);align-items:flex-start;gap:.5rem;margin-top:.7rem;padding:1rem;background:#fff}.diagnostics-consent input{width:1.25rem;height:1.25rem;margin:.1rem 0 0}.diagnostics-consent small,.diagnostics-consent span,.diagnostics-consent strong{display:block;min-width:0}.diagnostics-consent small{margin-top:.3rem;color:#7e8791;line-height:1.45}@media screen and (max-width:480px){.risk-dialog{padding:1rem}.risk-symbol{width:4.3rem;height:4.3rem}.risk-symbol .material-icons{font-size:2.8rem}.feedback-categories>div{gap:.35rem}}.qr-scan-view{position:fixed;z-index:200;inset:0;overflow:hidden;background:#000}.qr-scan-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.qr-scan-mask{position:absolute;inset:0;display:grid;place-items:center}.qr-scan-frame{position:relative;width:62vw;max-width:17rem;aspect-ratio:1;border-radius:.5rem;box-shadow:0 0 0 999rem rgba(0,0,0,.5)}.qr-scan-corner{position:absolute;width:1.6rem;height:1.6rem;border:.22rem solid #4d8dff;font-style:normal}.qr-scan-corner-tl{top:-.11rem;left:-.11rem;border-right:0;border-bottom:0;border-radius:.4rem 0 0 0}.qr-scan-corner-tr{top:-.11rem;right:-.11rem;border-left:0;border-bottom:0;border-radius:0 .4rem 0 0}.qr-scan-corner-bl{bottom:-.11rem;left:-.11rem;border-right:0;border-top:0;border-radius:0 0 0 .4rem}.qr-scan-corner-br{bottom:-.11rem;right:-.11rem;border-left:0;border-top:0;border-radius:0 0 .4rem 0}.qr-scan-header{position:absolute;z-index:2;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:.9rem .5rem;background:linear-gradient(rgba(0,0,0,.45),transparent)}.qr-scan-header button{width:2.6rem;height:2.6rem;border:0;box-shadow:none;color:#fff;background:transparent}.qr-scan-header h1{margin:0;color:#fff;font-size:1.05rem;font-weight:500}.qr-scan-header span{width:2.6rem}.qr-scan-hint{left:0;right:0;bottom:14%;margin:0;color:#e7ebf0;font-size:.9rem}.qr-scan-error,.qr-scan-hint{position:absolute;text-align:center}.qr-scan-error{inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;padding:0 2rem;color:#fff}.qr-scan-error .material-icons{font-size:2.6rem;color:#f2b53d}.qr-scan-error button{margin-top:.6rem;padding:0 1.4rem;min-height:2.6rem;border:0;border-radius:1.4rem;box-shadow:none;color:#fff;background:#347bd7}.qr-join-backdrop{position:fixed;z-index:200;inset:0;display:grid;place-items:center;padding:1rem;background:rgba(22,26,31,.52)}.qr-join-sheet{width:min(100%,25rem);padding:1.4rem 1.25rem 1.25rem;border-radius:.5rem;background:#fff;text-align:center}.qr-join-avatar{display:grid;place-items:center;width:4rem;height:4rem;margin:0 auto .6rem;border-radius:50%;overflow:hidden;color:#9aa3ad;background:#eef1f4}.qr-join-avatar img{width:100%;height:100%;object-fit:cover}.qr-join-avatar .material-icons{font-size:1.9rem}.qr-join-sheet h2{margin:.2rem 0;font-size:1.1rem}.qr-join-sheet>p{margin:0 0 .9rem;color:#757d87}.qr-join-sheet input{width:100%;height:2.9rem;margin:0 0 .8rem;padding:0 .75rem;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;text-align:center}.qr-join-sheet button{width:100%;min-height:2.9rem;margin:.45rem 0 0;border:0;border-radius:.35rem;box-shadow:none;color:#4d5660;background:#f0f2f4}.qr-join-sheet button.primary{color:#fff;background:#347bd7}.forward-bundle{min-width:11rem;max-width:18rem}.forward-bundle-title{margin-bottom:.35rem;font-weight:500}.forward-bundle-lines{margin:0;padding:0;list-style:none}.forward-bundle-lines li{overflow:hidden;margin:.15rem 0;color:var(--clr-text-secondary);font-size:.85rem;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.forward-bundle-lines li b{font-weight:500}.forward-bundle-count,.forward-bundle-more{display:block;width:100%;margin:.4rem 0 0;padding:.35rem 0 0;border:0;border-top:1px solid var(--clr-divider,#e7e9ec);border-radius:0;box-shadow:none;background:none;color:var(--clr-text-secondary);font-size:.8rem;line-height:1.3;text-align:left;text-transform:none}.forward-bundle-more{color:#347bd7;cursor:pointer}.forward-bundle-comment{margin-top:.4rem;color:var(--clr-text-primary);font-size:.85rem} \ No newline at end of file +:root{color-scheme:light dark;--message-text-size:10pt;--caption-panel-height:4rem;--wallpaper-url:url(../img/bkg/a00.png);--wallpaper-repeat:repeat;--wallpaper-blur:0px;--wallpaper-invert:0;--wallpaper-brightness:1;--wallpaper-size:contain;--wallpaper-position:center;--clr-bright:light-dark(#fff,#181818);--clr-dark:light-dark(#000,#fff);--clr-transparent:transparent;--clr-std-gray:gray;--clr-std-ltgray:light-dark(silver,#3f3f3f);--clr-std-teal:teal;--clr-std-grey:grey;--clr-std-orange:orange;--clr-primary-accent:light-dark(#2094f3,#0e6dba);--clr-primary-accent-hover:light-dark(#0a6ebd,#116ab4);--clr-primary-accent-focus-shadow:light-dark(rgba(33,150,243,.25),rgba(3,7,12,.25));--clr-primary-accent-transparent-medium:light-dark(rgba(33,150,243,.3),rgba(20,70,120,.3));--clr-primary-action:light-dark(#1e89e6,#1571c1);--clr-primary-action-hover:light-dark(#2962ff,#0037b8);--clr-secondary-accent:light-dark(#0097a8,#006570);--clr-primary-light-blue:light-dark(#bcdefb,#78a0be);--clr-light-blue-accent:light-dark(#0398e2,#0379b5);--clr-body-background:var(--clr-std-ltgray);--clr-text-primary:light-dark(#666,#999);--clr-text-secondary:light-dark(#757575,#8a8a8a);--clr-text-tertiary:light-dark(#999,#787878);--clr-text-tertiary-activated:#888;--clr-text-placeholder:light-dark(#bbb,#555);--clr-text-disabled:light-dark(#888,#777);--clr-border-light:light-dark(#ccc,#555);--clr-border-muted:light-dark(#ddd,#444);--clr-background-off-white:light-dark(#fafafa,#222);--clr-background-light-gray:light-dark(#f0f0f0,#0f0f0f);--clr-background-extra-light-gray:light-dark(#eee,#222);--clr-background-blue-gray-50:light-dark(#edf0f2,#202c33);--clr-background-blue-gray-75:light-dark(#e1e8eb,#182124);--clr-background-blue-gray-100:light-dark(#cfd8dc,#20272a);--clr-background-blue-gray-300:light-dark(#b0bec5,#354146);--clr-blue-wash-light:light-dark(#f0f0ff,#22222d);--clr-blue-wash-medium:light-dark(#d8e8ff,#123550);--clr-primary-wash:light-dark(#e3f2fd,#072f45);--clr-indigo-50:light-dark(#e8eaf6,#1a2c44);--clr-danger-text:light-dark(#d33131,#931f1f);--clr-danger-text-hover:light-dark(#f44034,#c10);--clr-error-text-muted:light-dark(#c66,#933);--clr-error-bg-light:light-dark(#ffccd1,#ff6675);--clr-error-border-light:light-dark(#ffbdc6,#ff334e);--clr-error-text-dark:light-dark(#b51c1c,#de2323);--clr-error-icon:light-dark(#ef5552,#d81b0e);--clr-warning-accent:light-dark(#ffc107,#808020);--clr-warning-bg-light:light-dark(#fff9c4,#00060c);--clr-warning-border-light:light-dark(#fff59d,#000a2b);--clr-warning-text-dark:light-dark(#6d4c41,#a08356);--clr-warning-icon:light-dark(#fbc02d,#b48204);--clr-info-bg-light:light-dark(#e1f5fe,#010a0e);--clr-info-border-light:light-dark(#b3e5fc,#001824);--clr-info-text-dark:light-dark(#0288d1,#00151f);--clr-header-stripe-bg:light-dark(#3949ab,#12152f);--clr-scrollbar-thumb:light-dark(rgba(0,0,0,.3),hsla(0,0%,100%,.3));--clr-scrollbar-track:light-dark(hsla(0,0%,100%,.1),rgba(0,0,0,.1));--clr-menu-item-hover-bg:light-dark(#f5f5f5,#0a0a0a);--clr-alert-overlay-bg:light-dark(hsla(0,0%,94%,.85),hsla(0,0%,6%,.85));--clr-verified-accent:light-dark(#02a6f2,#027db6);--clr-staff-accent:light-dark(#689f38,#598830);--clr-badge-inv:light-dark(#fffd,#cccd);--clr-cyan-50:light-dark(#e0f7fa,#2f3e43);--clr-overlay-white-strong:light-dark(hsla(0,0%,100%,.9),rgba(0,0,0,.9));--clr-gray-medium-bg:light-dark(#777,#444);--clr-toast-bg:#333;--clr-toast-text:light-dark(#eee,#aaa);--clr-online:#4caf50;--clr-offline:light-dark(#ccc,#999);--clr-shadow-input-underline:rgba(0,0,0,.1);--clr-shadow-hr-inset:rgba(0,0,0,.15);--clr-shadow-scrollbar-track-webkit:rgba(0,0,0,.2);--clr-shadow-button:rgba(0,0,0,.25);--clr-shadow-button-inset-active:rgba(0,0,0,.125);--clr-shadow-dialog:rgba(0,0,0,.45);--clr-shadow-panel-divider:rgba(0,0,0,.1);--clr-shadow-gray-strong:light-dark(var(--clr-std-gray),#333);--clr-shadow-silver-subtle:light-dark(var(--clr-std-ltgray),#333);--clr-shadow-bubble-drop:rgba(0,0,0,.3);--clr-button-primary-bg:var(--clr-primary-action);--clr-button-primary-text:var(--clr-bright);--clr-button-primary-hover-bg:var(--clr-primary-action-hover);--clr-button-secondary-bg:var(--clr-bright);--clr-button-secondary-text:var(--clr-primary-accent);--clr-button-secondary-hover-bg:var(--clr-primary-wash);--clr-button-outline-text:var(--clr-primary-accent);--clr-button-outline-border:var(--clr-std-ltgray);--clr-button-outline-hover-bg:var(--clr-indigo-50);--clr-button-danger-bg:light-dark(#ec645f,#d74742);--clr-button-danger-text:var(--clr-bright);--clr-button-danger-hover-bg:light-dark(#f77,#a55);--clr-button-positive-bg:light-dark(#71c46f,#3f983e);--clr-button-positive-text:var(--clr-bright);--clr-button-positive-hover-bg:light-dark(#7fed7f,#6ec26e);--clr-input-text:var(--clr-text-primary);--clr-input-border:var(--clr-border-light);--clr-input-border-focus:var(--clr-primary-accent);--clr-input-shadow:var(--clr-shadow-input-underline);--clr-input-shadow-focus:var(--clr-primary-accent-focus-shadow);--clr-input-invalid-border:light-dark(#e57171,#561010);--clr-input-invalid-shadow:light-dark(#e5737340,#1a0c0c40);--clr-input-placeholder-text:var(--clr-text-placeholder);--clr-bubble-left-bg:light-dark(#f0f0f0,#2c2c2e);--clr-bubble-left-bg-flash:light-dark(#d8d8d8,#3a3a3c);--clr-bubble-right-bg:var(--clr-primary-accent);--clr-bubble-right-bg-flash:var(--clr-primary-accent-hover);--clr-bubble-text:light-dark(#212121,#bbc);--clr-bubble-right-text:#fff;--clr-bubble-meta-text:var(--clr-text-primary);--clr-bubble-meta-deleted-bg:var(--clr-primary-wash);--clr-bubble-meta-date-bg:transparent;--clr-bubble-timestamp-text:light-dark(#777,#888);--clr-bubble-author-text:light-dark(#777,#666);--clr-reply-quote-border:var(--clr-light-blue-accent);--clr-reply-quote-text:var(--clr-text-primary);--clr-reply-quote-left-bg:light-dark(hsla(0,0%,100%,.4),rgba(0,0,0,.4));--clr-reply-quote-right-bg:light-dark(#8080801f,#c4c4c42e);--clr-reply-quote-preview-bg:var(--clr-background-off-white);--clr-badge-default-bg:light-dark(#e8e8e8,#171717);--clr-badge-default-text:var(--clr-text-primary);--clr-badge-default-border:var(--clr-std-ltgray);--clr-badge-green-bg:light-dark(#efe,#131);--clr-badge-green-text:light-dark(#383,#363);--clr-badge-green-border:light-dark(#aca,#242);--clr-badge-yellow-bg:light-dark(#ffe,#331);--clr-badge-yellow-text:light-dark(#660,#660);--clr-badge-yellow-border:light-dark(#cc9,#552);--clr-badge-blue-bg:light-dark(#f0f0ff,#224);--clr-badge-blue-text:light-dark(#339,#447);--clr-badge-blue-border:light-dark(#aad,#336);--clr-badge-red-bg:light-dark(#fee,#522);--clr-badge-red-text:light-dark(#933,#744);--clr-badge-red-border:light-dark(#c99,#633);--clr-badge-magenta-bg:light-dark(#fef,#535);--clr-badge-magenta-text:light-dark(#939,#747);--clr-badge-magenta-border:light-dark(#c9c,#636);--clr-chip-bg:var(--clr-background-extra-light-gray);--clr-chip-invalid-text:var(--clr-error-text-muted);--clr-chip-invalid-bg:var(--clr-badge-red-bg);--clr-chip-remove-icon-bg:light-dark(#aaa,#555);--clr-chip-remove-icon-text:var(--clr-background-extra-light-gray);--clr-chip-remove-icon-hover-bg:var(--clr-text-placeholder);--clr-chip-remove-icon-hover-text:var(--clr-bright);--clr-tabbar-bg:var(--clr-background-extra-light-gray);--clr-tabbar-inactive-text:light-dark(rgba(33,150,243,.6),#165aa0);--clr-tabbar-active-text:var(--clr-primary-accent);--clr-tabbar-inactive-border:var(--clr-border-light);--clr-tabbar-active-border:var(--clr-primary-accent);--clr-highlight-text:var(--clr-std-teal);--clr-highlight-preview-text:light-dark(#5f9ea0,#205e60);--clr-spinner-track:light-dark(#f3f3f3,#0c0c0c);--clr-spinner-active:var(--clr-primary-action);--clr-cropper-bounding-box-border:var(--clr-primary-action);--clr-cropper-bounding-box-bg:var(--clr-text-tertiary);--clr-cropper-cutout-border:var(--clr-text-tertiary);--clr-cropper-cutout-shadow:light-dark(rgba(230,246,255,.66),rgba(25,10,0,.66));--clr-audio-bg:var(--clr-background-extra-light-gray);--clr-audio-icon:light-dark(hsla(180,7%,43%,.8),hsla(0,7%,57%,.8));--clr-audio-icon-disabled:light-dark(hsla(0,0%,60%,.75),hsla(0,0%,40%,.75));--clr-audio-timer-text:light-dark(hsla(0,0%,40%,.75),hsla(0,0%,60%,.75));--clr-pinned-menu-bg:light-dark(#f8f8f8,#1a1a1a);--clr-drag-n-drop-border:var(--clr-std-grey);--clr-drag-n-drop-text:var(--clr-std-grey);--clr-drag-n-drop-bg:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-drag-n-drop-outline:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-lettertile-default-text:light-dark(#fafafacc,#dcdcdccc);--clr-lettertile-hover-text:var(--clr-bright);--clr-lt-bg-0:#ef9a9a;--clr-lt-bg-1:#90caf9;--clr-lt-bg-2:#b0bec4;--clr-lt-bg-3:#b49edb;--clr-lt-bg-4:#ffa98f;--clr-lt-bg-5:#a4d5a6;--clr-lt-bg-6:#ededed;--clr-lt-bg-7:#e6ee9b;--clr-lt-bg-8:#c4e0a3;--clr-lt-bg-9:#f0e57f;--clr-lt-bg-10:#f490b1;--clr-lt-bg-11:#a0a8da;--clr-lt-bg-12:#ffdf80;--clr-lt-bg-13:#bcaaa4;--clr-lt-bg-14:#80deea;--clr-lt-bg-15:#cd92d8;--clr-dk-bg-0:#c72929;--clr-dk-bg-1:#ad1457;--clr-dk-bg-2:#681b98;--clr-dk-bg-3:#4527a0;--clr-dk-bg-4:#293594;--clr-dk-bg-5:#1565c1;--clr-dk-bg-6:#0277bb;--clr-dk-bg-7:#00838f;--clr-dk-bg-8:#006b5f;--clr-dk-bg-9:#2f7f33;--clr-dk-bg-10:#54892f;--clr-dk-bg-11:#9e9e24;--clr-dk-bg-12:#f9a824;--clr-dk-bg-13:#ff9100;--clr-dk-bg-14:#f06c00;--clr-dk-bg-15:#d54215;--clr-lt-fg-0:var(--clr-lt-bg-0);--clr-lt-fg-1:var(--clr-lt-bg-1);--clr-lt-fg-2:var(--clr-lt-bg-2);--clr-lt-fg-3:var(--clr-lt-bg-3);--clr-lt-fg-4:var(--clr-lt-bg-4);--clr-lt-fg-5:var(--clr-lt-bg-5);--clr-lt-fg-6:var(--clr-lt-bg-6);--clr-lt-fg-7:var(--clr-lt-bg-7);--clr-lt-fg-8:var(--clr-lt-bg-8);--clr-lt-fg-9:var(--clr-lt-bg-9);--clr-lt-fg-10:var(--clr-lt-bg-10);--clr-lt-fg-11:var(--clr-lt-bg-11);--clr-lt-fg-12:var(--clr-lt-bg-12);--clr-lt-fg-13:var(--clr-lt-bg-13);--clr-lt-fg-14:var(--clr-lt-bg-14);--clr-lt-fg-15:var(--clr-lt-bg-15);--clr-dk-fg-0:var(--clr-dk-bg-0);--clr-dk-fg-1:var(--clr-dk-bg-1);--clr-dk-fg-2:var(--clr-dk-bg-2);--clr-dk-fg-3:var(--clr-dk-bg-3);--clr-dk-fg-4:var(--clr-dk-bg-4);--clr-dk-fg-5:var(--clr-dk-bg-5);--clr-dk-fg-6:var(--clr-dk-bg-6);--clr-dk-fg-7:var(--clr-dk-bg-7);--clr-dk-fg-8:var(--clr-dk-bg-8);--clr-dk-fg-9:var(--clr-dk-bg-9);--clr-dk-fg-10:var(--clr-dk-bg-10);--clr-dk-fg-11:var(--clr-dk-bg-11);--clr-dk-fg-12:var(--clr-dk-bg-12);--clr-dk-fg-13:var(--clr-dk-bg-13);--clr-dk-fg-14:var(--clr-dk-bg-14);--clr-dk-fg-15:var(--clr-dk-bg-15)}#sidepanel.workplace-collaboration-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f4f5f7}.workplace-collaboration-panel *{box-sizing:border-box;letter-spacing:0}.workplace-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#242930;background:#f4f5f7;flex-direction:column}.workplace-page button,.workplace-page input,.workplace-page textarea{font:inherit;letter-spacing:0}.workplace-page button{text-transform:none}.workplace-page>main{min-height:0;overflow-y:auto;flex:1 1 auto}.workplace-header{display:grid;grid-template-columns:3.6rem minmax(0,1fr) 3.6rem;align-items:center;min-height:4.4rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e6e8eb;background:#fff;flex:none}.workplace-header h1{min-width:0;margin:0;overflow:hidden;font-size:1.15rem;font-weight:650;text-align:center;text-overflow:ellipsis;white-space:nowrap}.workplace-header button{display:grid;place-items:center;width:3.6rem;min-width:3.6rem;height:3.6rem;min-height:3.6rem;margin:0;padding:0;border:0;box-shadow:none;color:#242930;background:transparent}.workplace-header button:last-child{color:#246fce}.workplace-header .material-icons{font-size:1.6rem}.workplace-toast{position:fixed;z-index:80;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.7rem 1rem;border-radius:.3rem;color:#fff;background:rgba(29,33,39,.94);text-align:center;transform:translateX(-50%)}.workbench-page{background:#fff}.workbench-page>main{padding:max(1.4rem,env(safe-area-inset-top)) 1.1rem 1.5rem}.workbench-profile{display:grid;grid-template-columns:3.4rem minmax(0,1fr) 3rem;align-items:center;gap:.75rem;min-height:4.8rem}.workbench-profile img{width:3.4rem;height:3.4rem;border-radius:.45rem;object-fit:cover}.workbench-profile small,.workbench-profile span,.workbench-profile strong{display:block;min-width:0}.workbench-profile strong{overflow:hidden;font-size:1.25rem;text-overflow:ellipsis;white-space:nowrap}.workbench-profile small{margin-top:.25rem;color:#767e88}.workbench-profile button{display:grid;place-items:center;width:3rem;min-width:3rem;height:3rem;min-height:3rem;margin:0;padding:0;border:0;box-shadow:none;color:#6c737c;background:transparent}.workbench-banner{display:grid;grid-template-columns:minmax(0,1fr) 5.5rem;align-items:center;min-height:9.5rem;margin:1.25rem 0 1.6rem;padding:1.35rem;overflow:hidden;border-radius:.5rem;color:#fff;background:#3d7ce5}.workbench-banner small,.workbench-banner strong{display:block}.workbench-banner strong{max-width:13rem;font-size:1.35rem;line-height:1.45}.workbench-banner small{margin-top:.8rem;color:hsla(0,0%,100%,.85)}.workbench-banner>.material-icons{color:#d9e7ff;font-size:5rem}.workbench-apps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1.4rem .7rem}.workbench-apps button{display:flex;align-items:center;width:100%;min-width:0;min-height:5.8rem;margin:0;padding:0;border:0;box-shadow:none;color:#30353c;background:transparent;flex-direction:column}.workbench-apps button>span{display:grid;position:relative;place-items:center;width:3.7rem;height:3.7rem;border-radius:.7rem;color:#fff}.workbench-apps span.tone-violet{background:#7659d6}.workbench-apps span.tone-orange{background:#f07835}.workbench-apps span.tone-red{background:#df4e46}.workbench-apps span.tone-blue{background:#3e78d6}.workbench-apps span.tone-green{background:#35a96b}.workbench-apps .material-icons{font-size:2rem}.workbench-apps em{position:absolute;top:-.35rem;right:-.35rem;display:grid;place-items:center;min-width:1.25rem;height:1.25rem;padding:0 .25rem;border:2px solid #fff;border-radius:.7rem;color:#fff;background:#e33f4b;font-size:.68rem;font-style:normal}.workbench-apps strong{width:100%;margin-top:.55rem;overflow-wrap:anywhere;font-size:.85rem;font-weight:500;line-height:1.25;text-align:center}.workplace-bottom-nav{display:grid;grid-template-columns:repeat(2,1fr);min-height:calc(4.4rem + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);border-top:1px solid #e5e7ea;background:#fff;flex:none}.workplace-bottom-nav button{display:flex;align-items:center;justify-content:center;min-width:0;min-height:4.4rem;margin:0;padding:0;border:0;box-shadow:none;color:#9aa1aa;background:transparent;flex-direction:column}.workplace-bottom-nav button.active{color:#2d73d2}.workplace-bottom-nav .material-icons{font-size:1.65rem}.workplace-bottom-nav span{margin-top:.15rem;font-size:.72rem}.workplace-search{display:grid;grid-template-columns:2.4rem minmax(0,1fr);align-items:center;min-height:3rem;margin:.8rem;padding:0 .65rem;border:1px solid #e4e7ea;border-radius:.35rem;background:#fff}.workplace-search .material-icons{color:#9ba2aa}.workplace-search input{width:100%;height:2.8rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.organization-content{background:#f4f5f7}.organization-tree{margin-top:.7rem;background:#fff}.organization-tree button{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2rem;align-items:center;gap:.4rem;width:100%;min-height:4rem;margin:0;padding:.55rem 1rem;border:0;border-bottom:1px solid #eceef0;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left}.organization-tree button small,.organization-tree button strong,.organization-tree button>span{display:block;min-width:0}.organization-tree button strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.organization-tree button small{margin-top:.2rem;color:#8b929b}.organization-members img{width:2.5rem;height:2.5rem;border-radius:50%;object-fit:cover}.meeting-list{padding-bottom:1rem}.workplace-tabs{display:grid;grid-template-columns:repeat(3,1fr);min-height:3.2rem;border-bottom:1px solid #e7e9ec;background:#fff}.workplace-tabs button{position:relative;min-width:0;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#7b838d;background:transparent}.workplace-tabs button.active{color:#286fcf;font-weight:600}.workplace-tabs button.active:after{position:absolute;bottom:0;left:30%;width:40%;height:.18rem;border-radius:.1rem;background:#347bd7;content:""}.meeting-card,.meeting-draft,.meeting-status{margin:.8rem;border:1px solid #e7e9ec;border-radius:.45rem;background:#fff}.meeting-card{padding:1rem}.meeting-card>header{display:flex;align-items:flex-start;justify-content:space-between;gap:.8rem;padding-bottom:.85rem;border-bottom:1px solid #eceef1}.meeting-card>header small,.meeting-card>header span,.meeting-card>header strong{display:block}.meeting-card>header small{margin-bottom:.25rem;color:#3575cf}.meeting-card>header strong{font-size:1.08rem}.meeting-card>header em{flex:none;padding:.3rem .5rem;border-radius:.25rem;color:#b26e10;background:#fff3df;font-size:.75rem;font-style:normal}.meeting-card>header em.accepted{color:#28784f;background:#e5f5ec}.meeting-card>header em.declined{color:#ad3d45;background:#fbe9eb}.meeting-card dl{margin:.8rem 0 0}.meeting-card dl>div{display:grid;grid-template-columns:6.5rem minmax(0,1fr);align-items:start;min-height:2.1rem}.meeting-card dd,.meeting-card dt{margin:0}.meeting-card dt{display:flex;align-items:center;color:#757d87}.meeting-card dt .material-icons{margin-right:.35rem;font-size:1.15rem}.meeting-card dd{overflow-wrap:anywhere}.meeting-card>footer{display:flex;justify-content:flex-end;gap:.55rem;margin-top:.8rem}.meeting-card>footer button{min-width:5.4rem;min-height:2.5rem;margin:0;padding:0 .8rem;border:1px solid #d8dce1;border-radius:.3rem;box-shadow:none;color:#3073ce;background:#fff}.meeting-card>footer button.primary,.meeting-card>footer button:last-child{border-color:#347bd7;color:#fff;background:#347bd7}.meeting-card>footer button .material-icons{margin-right:.3rem;font-size:1.1rem;vertical-align:middle}.meeting-response{display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr))}.meeting-response button{min-width:0!important;padding:0 .3rem!important}.meeting-draft{display:grid;grid-template-columns:2.8rem minmax(0,1fr) auto;align-items:center;gap:.6rem;padding:.8rem}.meeting-draft>.material-icons{color:#347bd7;font-size:2rem}.meeting-draft small,.meeting-draft span,.meeting-draft strong{display:block;min-width:0}.meeting-draft small{margin-top:.2rem;color:#838b95}.meeting-draft button{min-height:2.4rem;margin:0;padding:0 .6rem;border:0;box-shadow:none;color:#347bd7;background:transparent}.meeting-status{padding:1rem}.meeting-status h2{margin:0 0 .8rem;font-size:1rem}.meeting-status>div,.report-statistics>div{display:grid;grid-template-columns:repeat(3,1fr)}.meeting-status>div{grid-template-columns:repeat(4,1fr)}.meeting-status span,.report-statistics>div span{display:flex;align-items:center;min-width:0;flex-direction:column}.meeting-status b,.report-statistics>div b{font-size:1.35rem}.meeting-status small,.report-statistics>div small{margin-top:.25rem;color:#7c848e}.report-editor-page>main{padding-bottom:1rem}.report-period{display:flex;align-items:center;gap:.7rem;padding:.9rem 1rem;border-bottom:1px solid #e8eaed;background:#fff}.report-period>.material-icons{color:#347bd7}.report-period small,.report-period span,.report-period strong{display:block}.report-period small{margin-top:.2rem;color:#6b927d}.report-field{display:block;position:relative;margin-top:.7rem;padding:1rem;background:#fff}.report-field>span{display:block;margin-bottom:.65rem;font-weight:600}.report-field>span b{margin-right:.2rem;color:#d8414c}.report-field textarea{display:block;width:100%;height:11rem;margin:0;padding:.75rem .8rem 2rem;resize:vertical;border:1px solid #dfe3e7;border-radius:.3rem;box-shadow:none;background:#fff;line-height:1.5}.report-field>small{position:absolute;right:1.8rem;bottom:1.6rem;color:#9ba2ac}.report-attachment{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2rem;align-items:center;gap:.5rem;width:calc(100% - 2rem);min-height:4.2rem;margin:.8rem 1rem;padding:.6rem .8rem;border:1px dashed #cad0d7;border-radius:.35rem;box-shadow:none;color:#343a42;background:#fff;text-align:left}.report-attachment>.material-icons:first-child{color:#347bd7}.report-attachment small,.report-attachment span,.report-attachment strong{display:block;min-width:0}.report-attachment small{margin-top:.2rem;color:#888f98}.workplace-submit-bar{padding:.75rem 1rem max(.75rem,env(safe-area-inset-bottom));border-top:1px solid #e4e7ea;background:#fff;flex:none}.workplace-primary,.workplace-submit-bar button{width:100%;min-height:3rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#347bd7;font-weight:600}.report-list-page>main{padding-bottom:1rem}.report-role-switch{display:grid;grid-template-columns:repeat(2,1fr);margin:0 .8rem .8rem;border:1px solid #dce0e5;border-radius:.3rem;background:#fff}.report-role-switch button{min-height:2.6rem;margin:0;padding:0;border:0;box-shadow:none;color:#737b85;background:transparent}.report-role-switch button.active{color:#fff;background:#347bd7}.report-cards{margin:0 .8rem}.report-cards article{margin-bottom:.7rem;padding:.9rem;border:1px solid #e6e9ec;border-radius:.4rem;background:#fff}.report-cards article>header{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.6rem}.report-cards article>header img{width:2.6rem;height:2.6rem;border-radius:50%;object-fit:cover}.report-cards article>header small,.report-cards article>header span,.report-cards article>header strong{display:block;min-width:0}.report-cards article>header small{margin-top:.15rem;color:#8b929c}.report-cards article>header em{padding:.3rem .45rem;border-radius:.25rem;color:#b76811;background:#fff2df;font-size:.72rem;font-style:normal}.report-cards article>header em.submitted{color:#28784f;background:#e5f5ec}.report-cards article>header em.draft{color:#ad6c11;background:#fff2dd}.report-cards article p{display:-webkit-box;margin:.8rem 0;overflow:hidden;line-height:1.55;-webkit-box-orient:vertical;-webkit-line-clamp:3}.report-cards article>footer{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding-top:.65rem;border-top:1px solid #eceef1}.report-cards article>footer span{display:flex;align-items:center;min-width:0;color:#7e8690;font-size:.78rem}.report-cards article>footer span .material-icons{margin-right:.25rem;font-size:1rem}.report-cards article>footer button{display:flex;align-items:center;flex:none;min-height:2.2rem;margin:0;padding:0 .1rem 0 .6rem;border:0;box-shadow:none;color:#347bd7;background:transparent}.report-cards article>footer button .material-icons{font-size:1.15rem}.report-cards>button{display:grid;grid-template-columns:3.2rem minmax(0,1fr) auto 1.5rem;align-items:center;gap:.65rem;width:100%;min-height:5.2rem;margin:0 0 .7rem;padding:.7rem;border:1px solid #e6e9ec;border-radius:.4rem;box-shadow:none;color:#30353c;background:#fff;text-align:left}.report-month{display:grid;place-items:center;width:3.2rem;height:3.2rem;border-radius:.35rem;color:#fff;background:#5577b9}.report-cards>button small,.report-cards>button strong,.report-cards>button>span:nth-child(2){display:block;min-width:0}.report-cards>button small,.report-cards>button strong{line-height:1.3}.report-cards>button small{margin-top:.25rem;color:#858d97}.report-cards>button em{padding:.25rem .4rem;border-radius:.25rem;font-size:.72rem;font-style:normal}.report-cards>button em.submitted{color:#28784f;background:#e5f5ec}.report-cards>button em.draft{color:#ad6c11;background:#fff2dd}.report-statistics{margin-bottom:.7rem;padding:1rem;background:#fff}.report-statistics>header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:1rem}.report-statistics>header small,.report-statistics>header span,.report-statistics>header strong{display:block}.report-statistics>header small{margin-bottom:.2rem;color:#808892}.report-statistics>button,.report-statistics>header button{min-height:2.4rem;margin:0;padding:0 .7rem;border:1px solid #dce0e5;border-radius:.3rem;box-shadow:none;color:#347bd7;background:#fff}.report-statistics>button{display:flex;align-items:center;justify-content:center;width:100%;margin-top:1rem}.report-statistics>button .material-icons{margin-right:.35rem;font-size:1.15rem}.report-detail{padding-bottom:1.5rem}.report-detail>section{margin-bottom:.65rem;padding:1rem;background:#fff}.report-author{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.7rem}.report-author img{width:3rem;height:3rem;border-radius:50%;object-fit:cover}.report-author small,.report-author span,.report-author strong{display:block;min-width:0}.report-author small{margin-top:.2rem;color:#858d96}.report-author em{font-style:normal}.report-author em.submitted{color:#28784f}.report-author em.draft{color:#ad6c11}.report-detail h2,.report-detail h3,.report-detail p{margin:0}.report-detail h2{font-size:1.05rem}.report-detail h2+small{display:block;margin-top:.4rem;color:#89919b}.report-detail h3{margin-bottom:.6rem;font-size:.98rem}.report-detail section p{line-height:1.7;white-space:pre-wrap}.report-file{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2rem;align-items:center;gap:.6rem}.report-file>.material-icons:first-child{color:#4f74ad;font-size:2rem}.report-file small,.report-file span,.report-file strong{display:block}.report-file small{margin-top:.2rem;color:#8b929b}.report-updated{display:flex;align-items:center;justify-content:center;color:#8a929c;font-size:.78rem}.report-updated .material-icons{margin-right:.25rem;font-size:1rem}.mailbox-page>main{padding:.8rem 1rem 1.5rem;background:#fff}.mailbox-page label{display:block;position:relative;margin-top:1rem}.mailbox-page label>span:first-child{display:block;margin-bottom:.55rem;font-weight:600}.mailbox-page input[type=text],.mailbox-page label>input:not([type]),.mailbox-page label>textarea{width:100%;margin:0;border:1px solid #dfe3e7;border-radius:.3rem;box-shadow:none;background:#fff}.mailbox-page label>input:not([type]){height:3rem;padding:0 .75rem}.mailbox-page label>textarea{height:12rem;padding:.75rem .75rem 2rem;resize:vertical;line-height:1.5}.mailbox-content>small{position:absolute;right:.75rem;bottom:.65rem;color:#9ca3ac}.mailbox-notice,.mailbox-upload{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 1.5rem;align-items:center;gap:.5rem;width:100%;min-height:4.2rem;margin:0;padding:.65rem .75rem;border:1px solid #dfe4e9;border-radius:.35rem;box-shadow:none;color:#343a42;background:#f7f9fb;text-align:left}.mailbox-notice>.material-icons:first-child{color:#2e7954}.mailbox-notice small,.mailbox-notice span,.mailbox-notice strong{display:block;min-width:0}.mailbox-notice small{margin-top:.2rem;color:#78818b}.mailbox-upload{grid-template-columns:2.5rem minmax(0,1fr) auto;margin-top:1rem;border-style:dashed}.mailbox-upload>.material-icons{color:#347bd7}.mailbox-upload small{color:#888f99}.mailbox-anonymous{display:grid!important;grid-template-columns:2rem minmax(0,1fr);align-items:center;gap:.5rem;margin:1rem 0!important;padding:.8rem;border:1px solid #e4e7ea;border-radius:.35rem}.mailbox-anonymous input{width:1.25rem;height:1.25rem;margin:0}.mailbox-anonymous small,.mailbox-anonymous span,.mailbox-anonymous strong{display:block;min-width:0}.mailbox-anonymous small{margin-top:.2rem;color:#858d96}.mailbox-notice-backdrop{display:grid;position:absolute;z-index:60;inset:0;place-items:center;padding:1rem;background:rgba(20,24,29,.52)}.mailbox-notice-dialog{width:min(100%,25rem);padding:1.25rem;border-radius:.5rem;background:#fff;text-align:center}.mailbox-notice-dialog>.material-icons{color:#2f7854;font-size:2.7rem}.mailbox-notice-dialog h2{margin:.6rem 0 .8rem;font-size:1.15rem}.mailbox-notice-dialog p{margin:.65rem 0;color:#555d67;line-height:1.65;text-align:left}.mailbox-notice-dialog small{display:block;margin:.8rem 0;color:#898f98}.mailbox-notice-dialog button{width:100%;min-height:2.9rem;margin:.5rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#347bd7}.organization-loading{padding:2rem 1rem;color:#8b929c;text-align:center}.organization-department{display:flex;align-items:center;gap:.6rem;width:100%;min-height:3.4rem;margin:0;padding:0 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.organization-department>.material-icons:first-child{color:#8b929c;font-size:1.3rem}.organization-department.me,.organization-department.me>.material-icons:first-child{color:#2094f3}.organization-department>span{flex:1 1 auto;min-width:0}.organization-department>span strong{display:block;overflow:hidden;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.organization-department>.material-icons:last-child{color:#b0b6bd}.organization-person{display:flex;align-items:center;gap:.6rem;width:100%;min-height:3.2rem;margin:0;padding:0 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fafbfc;text-align:left;text-transform:none}.organization-person>.material-icons:first-child{color:#b0b6bd;font-size:1.1rem}.organization-person>span{flex:1 1 auto;min-width:0}.organization-person>span strong{overflow:hidden;font-weight:400;text-overflow:ellipsis;white-space:nowrap}.organization-person.me{color:#2094f3}.organization-person.me>span strong{color:#2094f3;font-weight:500}.organization-person>.material-icons:last-child{color:#b0b6bd}.meeting-more{display:flex;align-items:center;flex:none;margin:0;padding:0;border:0;box-shadow:none;color:#b0b6bd;background:transparent;font-size:.85rem}.meeting-attendees{color:#347bd7}.meeting-responded{width:100%;min-height:2.4rem;margin:0;padding:0 1rem;border:0;border-radius:.3rem;box-shadow:none;color:#8b929c;background:#f2f3f5}.meeting-participant-list{margin:.8rem 0 0;padding:.6rem 0 0;border-top:1px solid #eceef1;list-style:none}.meeting-participant-list li{display:flex;align-items:center;justify-content:space-between;min-height:2.3rem}.meeting-participant-list em{padding:.15rem .5rem;border-radius:.25rem;color:#8b929c;background:#f2f3f5;font-size:.72rem;font-style:normal}.meeting-participant-list em.accepted{color:#28784f;background:#e5f5ec}.meeting-participant-list em.declined{color:#ad3d45;background:#fbe9eb}.meeting-participant-list em.tentative{color:#ad6c11;background:#fff2dd}.meeting-status footer{display:flex;gap:.6rem;margin-top:.8rem}.meeting-status footer button{flex:1 1 auto;min-height:2.6rem;margin:0;border:0;border-radius:.3rem;box-shadow:none;color:#347bd7;background:#eaf2fc}.meeting-status footer button.danger{color:#ad3d45;background:#fbe9eb}.meeting-time-range{display:flex;align-items:center;gap:.5rem}.meeting-time-range .report-field{flex:1 1 0}.meeting-time-range span{color:#8b929c}.meeting-selected-attendees{display:flex;flex-wrap:wrap;gap:.4rem;margin:-.4rem 0 .8rem}.meeting-selected-attendees span{display:flex;align-items:center;gap:.25rem;padding:.3rem .5rem;border-radius:999px;background:#eaf2fc;color:#347bd7;font-size:.82rem}.meeting-selected-attendees .material-icons{font-size:.9rem;cursor:pointer}.daily-report-block{margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px solid #eceef1}.daily-report-block-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.6rem}.daily-report-block-header .material-icons{color:#8b929c;cursor:pointer}.daily-report-date{display:block;margin:-.3rem 0 .5rem;color:#8b929c}.daily-report-add-block{display:flex;align-items:center;justify-content:center;gap:.3rem;width:100%;min-height:2.6rem;margin:0 0 1rem;border:1px dashed #d5d9dd;border-radius:.3rem;box-shadow:none;color:#347bd7;background:#fff}.report-draft-status{margin:0;color:#8b929c;font-size:.82rem;text-align:right}.report-author .role-badge,.report-cards article>header .role-badge{display:inline-block;flex-shrink:0;margin-left:.4rem;padding:.1rem .4rem;border-radius:.25rem;color:#347bd7;background:#eaf2fc;font-size:.72rem;white-space:nowrap}.report-author>span>strong,.report-cards article>header>span>strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.workplace-error{padding:.8rem 1rem;color:#ad3d45;text-align:center}.workbench-profile .workbench-avatar-fallback{display:flex;align-items:center;justify-content:center;width:3rem;height:3rem;border-radius:50%;color:#fff;background:#b0b6bd}.mailbox-anonymous-choice{display:flex;gap:1.2rem;justify-content:center;margin-top:.8rem}.mailbox-anonymous-choice label{display:flex;align-items:center;gap:.35rem;color:#58606b;font-size:.88rem}.mailbox-attachment-list{margin:.5rem 0 0;padding:0;list-style:none}.mailbox-attachment-list li{display:flex;align-items:center;justify-content:space-between;min-height:2.2rem;color:#58606b}.mailbox-attachment-list .material-icons{color:#8b929c;cursor:pointer;font-size:1.1rem}@media screen and (max-width:480px){.workbench-apps{grid-template-columns:repeat(4,minmax(0,1fr));gap:1.2rem .35rem}.workbench-banner{grid-template-columns:minmax(0,1fr) 4rem;padding:1rem}.workbench-banner>.material-icons{font-size:3.8rem}.meeting-card dl>div{grid-template-columns:5.8rem minmax(0,1fr)}.report-cards>button{grid-template-columns:3.2rem minmax(0,1fr) auto 1.2rem;gap:.45rem}}*{box-sizing:border-box;padding:0;margin:0;font-family:Roboto,Arial,sans-serif;text-rendering:optimizeLegibility;scrollbar-width:thin;scrollbar-color:var(--clr-scrollbar-thumb) var(--clr-scrollbar-track)}body,html{height:100%;width:100%;height:100dvh;width:100dvw;font-size:10pt;color:var(--clr-text-primary);overflow:hidden;background-color:var(--clr-body-background);box-shadow:inset 0 10rem var(--clr-header-stripe-bg)}tt{font-family:Roboto Mono,Courier,monospace}a{color:var(--clr-primary-accent);text-decoration:none}a:focus,a:hover{color:var(--clr-primary-accent-hover);text-decoration:underline}a.danger{color:var(--clr-danger-text)}a.danger:focus,a.danger:hover{color:var(--clr-danger-text-hover)}a.gray:focus,a.gray:hover{color:var(--clr-text-tertiary)}form{padding:.5rem .75rem;line-height:1.5}form,label{font-size:1.1rem}label{margin-right:auto}label.small{font-size:.95rem}label.large,label.small{color:var(--clr-primary-action)}label.large{font-size:1.1rem}label.invalid{color:var(--clr-danger-text)}img.avatar{width:100%;height:100%;border-radius:50%}img.avatar.self{padding:7%}button{display:inline-block;font-family:inherit;font-size:1.05rem;height:2.2rem;line-height:2.2rem;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;border:1px solid var(--clr-transparent);white-space:nowrap;padding-left:1.2rem;padding-right:1.2rem;border-radius:4px;box-shadow:0 1px 3px 0 var(--clr-shadow-button);text-transform:uppercase;min-width:5rem;margin:0 .35rem}button[disabled],html input[disabled]{cursor:default;opacity:.65;box-shadow:none;filter:grayscale(50%)}button.round{border-radius:50%;width:3rem;height:3rem;padding:0;margin:0;line-height:3.5rem;outline:none;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);z-index:2}button.round.small{width:2rem;height:2rem;line-height:2rem;box-shadow:0 2px .35rem 0 var(--clr-shadow-button)}button.danger:active:not([disabled]),button.danger:hover:not([disabled]),button.positive:active:not([disabled]),button.positive:hover:not([disabled]),button.primary:active:not([disabled]),button.primary:hover:not([disabled]){color:var(--clr-bright)}button:active{box-shadow:inset 0 3px .5rem var(--clr-shadow-button-inset-active)}button:active.round.small{box-shadow:inset 0 2px .35rem var(--clr-shadow-button-inset-active)}button.primary{background-color:var(--clr-button-primary-bg);color:var(--clr-button-primary-text)}button.primary:active:not([disabled]),button.primary:hover:not([disabled]){background-color:var(--clr-button-primary-hover-bg)}button.secondary{background-color:var(--clr-button-secondary-bg);color:var(--clr-button-secondary-text)}button.secondary:active:not([disabled]),button.secondary:hover:not([disabled]){color:var(--clr-button-secondary-text);background-color:var(--clr-button-secondary-hover-bg)}button.outline{background-color:var(--clr-transparent);color:var(--clr-button-outline-text);border:1px solid var(--clr-button-outline-border);box-shadow:none}button.outline:active:not([disabled]),button.outline:hover:not([disabled]){color:var(--clr-button-outline-text);background-color:var(--clr-button-outline-hover-bg)}button.danger{background-color:var(--clr-button-danger-bg);color:var(--clr-button-danger-text)}button.danger:active:not([disabled]),button.danger:hover:not([disabled]){background-color:var(--clr-button-danger-hover-bg)}button.positive{background-color:var(--clr-button-positive-bg);color:var(--clr-button-positive-text)}button.positive:active:not([disabled]),button.positive:hover:not([disabled]){background-color:var(--clr-button-positive-hover-bg)}input,textarea{font-family:inherit;font-size:1.1rem;background:var(--clr-transparent);border:none;margin:.25rem 0;padding:0 .125rem;outline:none;color:var(--clr-input-text)}input[type=date],input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],textarea{height:2.5rem;border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);transition:all .1s ease-in-out,height 0s}input[type=date],input[type=email],input[type=password],input[type=tel],input[type=text],input[type=time],textarea{width:100%}input[type=date]:focus,input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,textarea:focus{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}input[type=email].invalid,input[type=password].invalid,input[type=search].invalid,input[type=tel].invalid,input[type=text].invalid,textarea.invalid{border-bottom:1px solid var(--clr-input-invalid-border);box-shadow:0 1px 0 var(--clr-input-invalid-shadow)}input[type=email]::placeholder,input[type=password]::placeholder,input[type=search]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,textarea::placeholder{color:var(--clr-input-placeholder-text);font-weight:lighter}input[type=password].with-icon-right,input[type=text].with-icon-right{margin-right:-2rem;padding-right:2rem}input[type=password].with-icon-left,input[type=text].with-icon-left{margin-left:-1.45rem;padding-left:1.75rem}textarea{resize:none;padding-top:.45rem}input[type=range]{width:90%}option{padding:0}datalist{display:flex;flex-direction:row;justify-content:space-between;width:100%}::-webkit-scrollbar{width:.6rem}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);background-color:var(--clr-scrollbar-track)}::-webkit-scrollbar-thumb{background-color:var(--clr-scrollbar-thumb)}ul.menu{position:absolute;list-style:none;width:12rem;border-radius:.2rem;padding-top:.35rem;padding-bottom:.35rem;box-shadow:0 1px 6px var(--clr-shadow-dialog);background-color:var(--clr-bright);z-index:4}ul.menu>li{padding:.75rem .75rem .75rem 1.25rem;cursor:pointer}ul.menu>li:hover{background-color:var(--clr-menu-item-hover-bg)}ul.menu>li.separator{padding:0;margin:2px;height:1px}ul.menu>li.separator,ul.menu>li.separator:hover{background-color:var(--clr-border-light)}ul.menu>li.disabled{pointer-events:none;opacity:.6}.menuTrigger{position:absolute;right:.25rem;width:1.4rem;height:1.4rem;line-height:1.4rem;border-radius:.7rem;text-align:center;opacity:0;background-color:inherit;user-select:none}.menuTrigger a{color:var(--clr-text-secondary)}li .menuTrigger{top:.25rem}li:hover .menuTrigger{opacity:.9}li:hover .menuTrigger a{color:var(--clr-text-secondary)}div.alert-container{position:absolute;display:flex;padding:1rem;justify-content:center;align-items:center;width:100%;height:100%;overflow:hidden;background:var(--clr-alert-overlay-bg);z-index:3}div.alert{position:relative;background-color:var(--clr-bright);box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);padding:1rem;border-radius:.3rem;margin:auto 2rem;width:fit-content;height:min-content;min-width:16rem;max-width:24rem;max-height:40rem;overflow:hidden}div.alert-container .title{position:relative;color:var(--clr-primary-accent);font-size:1.2rem;font-weight:500;width:100%;padding:0 0 .35rem}div.alert-container .title.with-control{position:relative;display:flex;padding:.5rem .5rem 0;align-items:center;flex:none;justify-content:space-between}div.alert-container .content{position:relative;padding:.5rem 0}div.trusted-badge{margin:.25rem 0}.blue{color:var(--clr-primary-accent)!important}.lt-blue{color:var(--clr-lt-fg-1)!important}.orange{color:var(--clr-std-orange)!important}.verified-color{color:var(--clr-verified-accent)!important}.staff-color{color:var(--clr-staff-accent)!important}.danger-color{color:var(--clr-warning-accent)!important}.green{color:light-dark(#388e3c,#1a9a1d)}.white{color:var(--clr-bright)!important}.red{color:var(--clr-danger-text)!important}.badge-inv{color:var(--clr-badge-inv)!important}.gray{color:var(--clr-text-secondary)!important}.light-gray{color:var(--clr-text-placeholder)!important}.large{font-size:120%}.small{font-size:90%}.float-right{position:absolute;right:.5rem}.hr{display:block;width:100%;height:.45rem;min-height:.3rem;background-color:var(--clr-background-light-gray);box-shadow:inset 0 .25rem .25rem -.25rem var(--clr-shadow-hr-inset),inset 0 -.25rem .25rem -.25rem var(--clr-shadow-hr-inset)}.hr.thin{height:.015rem}.divider{display:inline-block;width:1px;margin:0 .25rem;border-left:1.5px groove var(--clr-border-muted)}.ellipsized{overflow-x:hidden;white-space:nowrap;text-overflow:ellipsis}.flat-button{display:flex;align-items:center;margin:.15rem .35rem;height:2em;line-height:2em;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;white-space:nowrap;text-transform:uppercase;background-color:var(--clr-bright);z-index:1}.flat-button:focus,.flat-button:hover{text-decoration:none}.flat-button.disabled,.flat-button.disabled:focus,.flat-button.disabled:hover{color:var(--clr-primary-accent);cursor:default;opacity:.75;filter:grayscale(75%)}.flat-button.faux{display:inline-block;height:1.4em;line-height:1.4em;text-transform:none;padding:0 .35rem;margin:.15rem;border:1px solid var(--clr-text-tertiary);border-radius:3px;background-color:var(--clr-background-extra-light-gray)}.action-button{display:block;position:absolute;color:var(--clr-text-secondary);font-size:1.8rem;background-color:var(--clr-background-off-white);border-radius:50%;width:3.25rem;height:3.25rem;min-width:unset;min-height:unset;padding:0;margin:0;outline:none;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);transition:all .15s;z-index:2}.action-button:active:not([disabled]),.action-button:focus,.action-button:hover,.action-button:hover:not([disabled]){color:var(--clr-text-tertiary-activated);background-color:var(--clr-primary-action-hover)}.action-button:active{color:var(--clr-text-tertiary-activated);background-color:var(--clr-primary-action)}.action-button.hidden{width:1px;height:1px;font-size:1px;line-height:1px;right:2.625rem;bottom:2.625rem;opacity:0}.group-focus{outline:none}#mountPoint{height:100%;padding-top:1rem;padding-bottom:1rem}#noscript-message{position:relative;display:flex;flex-direction:column;max-width:30rem;overflow:hidden;margin-top:5rem;margin-left:auto;margin-right:auto;border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);background-color:var(--clr-bright)}#noscript-title{padding:1rem;font-size:120%;font-weight:bolder;background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue)}#noscript-content{padding:1rem}#app-container{position:relative;display:flex;height:100%;max-width:84rem;overflow:hidden;margin-left:auto;margin-right:auto;border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);background-color:var(--clr-bright)}#sidepanel{flex-grow:0;flex-shrink:0.3;width:24rem;min-width:18rem}#sidepanel,#topic-view{position:relative;display:flex;flex-direction:column;height:100%}#topic-view{overflow-x:hidden;width:100%}#info-view{position:relative;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0.3;width:24rem;min-width:18rem;height:100%}.center-medium-text{width:100%;height:100%;display:flex;align-items:center;justify-content:center;text-align:center;font-size:1.4rem}.nodisplay{display:none!important}.quoted{margin-left:1rem}.space-right{margin-right:.25rem}.rounded-container{position:relative;background-color:var(--clr-background-off-white);border-radius:.1rem;padding:.25rem;margin:.25rem}div.in-place-edit,span.in-place-edit{display:inline-block;font-family:inherit;font-size:1rem;margin:.25rem .125rem 0;width:100%;vertical-align:baseline;border-bottom:1px dashed var(--clr-border-muted);cursor:pointer}.in-place-edit.short{display:inline-flex;align-items:center;font-size:1.1rem;height:2.5rem;line-height:2.25;white-space:nowrap}.in-place-edit.disabled{border-bottom:none;cursor:default;color:var(--clr-text-disabled)}.in-place-edit.placeholder{color:var(--clr-text-placeholder)}.in-place-edit span{display:inline-block}.in-place-edit.short span{white-space:nowrap;text-overflow:ellipsis;overflow-x:hidden;width:100%}.in-place-edit .material-icons{display:inline-block}.material-icons.invalid{color:var(--clr-error-text-muted)}textarea.in-place-edit{height:unset;font-size:unset}input.in-place-edit.invalid{color:var(--clr-error-text-muted)}table.permission-editor{width:100%}table.permission-editor td{margin:.35rem 0;font-size:1.1rem;vertical-align:middle}table.permission-editor td.checkbox{text-align:center;color:var(--clr-text-tertiary)}.permission-editor .material-icons{font-size:1.3rem;line-height:1.3rem}.material-icons.clickable{cursor:pointer;border-bottom:none}.clickable{border-bottom:1px dashed var(--clr-border-muted)}.clean-clickable,.clickable,.image-clickable{cursor:pointer}.panel-title{font-size:1.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-title.deleted{text-decoration:line-through}.caption-panel{flex:none;height:var(--caption-panel-height);white-space:nowrap;box-shadow:0 1px 2px var(--clr-shadow-gray-strong);overflow-x:hidden;z-index:1}.caption-panel,.dialog-buttons{display:flex;align-items:center;padding:.5rem}.dialog-buttons{justify-content:flex-end}.dialog-buttons button{margin:0 .5rem}.avatar-box{position:relative;flex-grow:0;flex-shrink:0}.bot-form{display:flex;flex-direction:column;overflow:hidden;min-width:8rem;line-height:2rem}.bot-form div{min-height:2rem;vertical-align:middle}.bot-form button{display:inline-block;margin:.15rem;background-color:var(--clr-blue-wash-light);color:var(--clr-primary-accent);font-size:inherit;text-transform:none;height:2rem;line-height:2rem}.bot-form>div>button{width:auto}.bot-form button:active,.bot-form button:focus,.bot-form button:hover{outline:0;color:var(--clr-dk-fg-5);background-color:var(--clr-primary-wash)}#side-caption-panel{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue)}#side-caption-panel a{color:var(--clr-primary-light-blue);padding-left:.5rem;line-height:1}#side-caption-panel :hover{color:var(--clr-bright)}#sidepanel-title{margin-right:auto;margin-left:.5rem}#self-avatar{width:3rem;min-width:3rem;height:3rem;flex:none;border-radius:50%}#self-avatar.avatar-box{font-size:1.8rem}#settings-form ul{list-style:none}#settings-form li{vertical-align:middle}#settings-form label{display:inline-block;padding-left:.5rem}input#host-name{width:100%}input.search{text-indent:1.4rem}i.search{position:absolute;left:.6rem}.info-box{position:relative;display:none;overflow:hidden;padding:1rem 1.5rem .75rem .5rem}.info-box>span{line-height:1.35rem}.info-box .cancel{position:absolute;right:.25rem;top:.5rem}.info-box.error{display:flex;background-color:var(--clr-error-bg-light);border-bottom:1px solid var(--clr-error-border-light);color:var(--clr-error-text-dark)}.info-box.warning{display:flex;background-color:var(--clr-warning-bg-light);border-bottom:1px solid var(--clr-warning-border-light);color:var(--clr-warning-text-dark)}.info-box.info{display:flex;background-color:var(--clr-info-bg-light);border-bottom:1px solid var(--clr-info-border-light);color:var(--clr-info-text-dark)}.info-box .cancel .material-icons{font-size:1rem;color:var(--clr-text-secondary)}.info-box.error .cancel .material-icons{color:var(--clr-error-text-dark)}.info-box .icon{display:block;margin-right:.5rem}.info-box .icon .material-icons{font-size:1.5rem}.info-box.warning .icon .material-icons{color:var(--clr-warning-icon)}.info-box.error .icon .material-icons{color:var(--clr-error-icon)}.info-box.info .icon .material-icons{color:var(--clr-info-text-dark)}.flex-column{display:flex;flex-direction:column;height:100%;overflow-x:hidden}.flex-column.narrow{height:auto}.scrollable-panel{overflow-x:hidden;overflow-y:auto;margin-top:.25rem;margin-bottom:auto;height:100%;scroll-behavior:smooth}.contact-box{list-style:none;overflow-x:hidden}.contact-box>li{position:relative;display:flex;padding:.35rem .25rem .5rem .35rem;min-height:3.75rem;flex-grow:0;flex-shrink:0;background:linear-gradient(to right,var(--clr-transparent) 3.5rem,var(--clr-background-extra-light-gray) 1px,var(--clr-background-extra-light-gray) 100%) 0 100% /100% 1px no-repeat,var(--clr-bright);overflow-x:hidden;cursor:pointer}.contact-box.small>li{padding:.25rem .25rem .35rem .35rem;min-height:2.5rem}.contact-box>li:last-child{background:var(--clr-bright)}.contact-box>li:hover{background-color:var(--clr-background-blue-gray-50)}.contact-box>li.selected{background-color:var(--clr-background-blue-gray-100)}.contact-box>li.tpinned{border-right:1.5px solid var(--clr-secondary-accent);background-color:var(--clr-background-blue-gray-75)}.contact-box>li.action{min-height:2.5rem;border-bottom:none}.contact-box .text-box{overflow-x:hidden}.contact-box .contact-title{font-size:1.05rem;text-overflow:ellipsis;overflow-x:hidden;white-space:nowrap}.contact-box .contact-title.deleted{opacity:.66;text-decoration:line-through;text-decoration-thickness:.5px}.contact-box .contact-comment{font-weight:lighter}.contact-box .contact-comment,.contact-box .contact-comment>span{text-overflow:ellipsis;overflow-x:hidden;white-space:nowrap}.contact-box .contact-comment b{font-weight:bolder}.contact-box .contact-comment .material-icons{margin-bottom:.2rem;color:light-dark(#777,#666)}.contact-box .avatar-box{position:relative;margin-right:.35rem;width:3rem;min-width:3rem;height:3rem;min-height:3rem;font-size:1.8rem;overflow:hidden;padding:0}.contact-box .avatar{width:3rem;height:3rem;border-radius:50%}.contact-box.small .avatar-box{width:2rem;min-width:2rem;height:2rem;min-height:2rem;font-size:1.2rem}.contact-box.small .avatar{width:2rem;height:2rem}.avatar.deleted{opacity:.75;filter:grayscale(1)}.contact-box .avatar-box>.material-icons{display:flex;flex-direction:column;justify-content:space-around;font-size:2.4rem;line-height:3rem}.contact-box .avatar-box>.checkmark.material-icons{line-height:unset}.contact-box.small .avatar-box>.material-icons{font-size:1.6rem;line-height:2rem}.contact-box .text-box{display:flex;flex-direction:column;justify-content:space-around}.contact-box .text-box>div{display:flex;flex-direction:row;align-items:center}.contact-box .action-text{text-align:center;font-size:.95rem;line-height:2.5rem;margin:0 auto;cursor:pointer}img.channel{width:1.25rem;height:1.25rem;vertical-align:middle;margin-left:.3rem}.large img.channel{width:1.45rem;height:1.45rem;margin-left:.5rem;margin-bottom:.15rem}.avatar-box .offline,.avatar-box .online{position:absolute;width:.75rem;min-width:.75rem;height:.75rem;min-height:.75rem;flex-shrink:0;border-radius:50%;right:0;bottom:.1rem}.avatar-box .online{background-color:var(--clr-online)}.avatar-box .offline{background-color:var(--clr-offline)}.online.typing{animation:typing .5s infinite}@keyframes typing{0%,to{transform:translateX(0)}50%{transform:translateX(-.3rem)}}.contact-box .checkmark.material-icons{color:var(--clr-secondary-accent);overflow:visible;border:0 solid var(--clr-transparent);padding-left:.5px}.contact-box .checkmark.material-icons,.contact-box .deleted.material-icons{width:1.5rem;height:1.5rem;font-size:1.5rem;position:absolute;right:0;bottom:0;background-color:var(--clr-bright)}.contact-box .deleted.material-icons{color:var(--clr-text-tertiary)}#add-topic{position:absolute;right:1rem;bottom:1rem}.panel-form{display:flex;position:relative;flex-direction:column;padding:0}.panel-form-row{align-items:center;flex-shrink:0}.panel-form-column,.panel-form-row{display:flex;position:relative;padding:.5rem .75rem;line-height:1.5;flex-grow:0}.panel-form-column{flex-direction:column;overflow-x:clip}.panel-form-column>.panel-form-column,.panel-form-row>.panel-form-column{padding:0!important;flex-grow:1}.panel-form-column>.panel-form-row,.panel-form-row>.panel-form-row{padding:0!important}.panel-form-column>.group{margin-top:.25rem;margin-bottom:.25rem}.avatar-upload{position:relative;display:flex;flex-direction:column;flex-shrink:0;width:10rem;height:10.5rem;font-size:4.5rem;padding:0;margin:.25rem}.avatar-upload.read-only{height:auto}.avatar-upload .clear-avatar{position:absolute;font-size:1rem;top:0;right:0;opacity:0;background-image:radial-gradient(var(--clr-bright) 40%,var(--clr-transparent) 75%)}.avatar-upload:hover .clear-avatar{opacity:1}.avatar-upload .avatar-box{position:relative;width:10rem;height:10rem}.avatar-upload .avatar-box>.material-icons{position:relative;font-size:4rem;line-height:10rem;vertical-align:middle}.avatar-upload:after{content:".";display:block;height:0;clear:both;visibility:hidden}.avatar-upload .blank{text-align:center;vertical-align:middle;border:1px dashed var(--clr-text-tertiary);font-size:1rem;flex-shrink:0;color:var(--clr-text-tertiary);line-height:10rem}.avatar-upload .blank,.avatar-upload img.preview{width:10rem;height:10rem;overflow:hidden;border-radius:50%}.avatar-upload img.preview:before{position:absolute;content:" ";display:flex;font-size:.9rem;font-weight:lighter;color:var(--clr-text-primary);top:0;left:0;width:10rem;height:10rem;justify-content:center;background:50% no-repeat url(../img/broken_image.png);border-radius:50%}.avatar-upload .inputfile.hidden{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute}.avatar-upload .inputfile+label.round{display:flex;position:absolute;align-items:center;justify-content:center;cursor:pointer;width:3rem;height:3rem;line-height:3rem;border-radius:50%;box-shadow:0 1px 4px var(--clr-shadow-dialog);bottom:0;right:0;background-color:var(--clr-background-off-white);z-index:1}.avatar-upload .inputfile:focus+label.round{outline:none}.avatar-upload .inputfile+label:hover,.avatar-upload .inputfile:focus+label{background-color:var(--clr-primary-wash);color:var(--clr-primary-accent)}#topic-caption-panel{background-color:var(--clr-background-blue-gray-300)}#topic-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#topic-caption-panel :hover{color:var(--clr-dark)}#topic-caption-panel .avatar-box{position:relative;width:3rem;min-width:3rem;height:3rem;font-size:1.8rem;margin-right:.35rem}#topic-caption-panel .avatar-box>.material-icons{font-size:2.4rem;line-height:3rem}#topic-title-group{overflow-x:hidden}#hide-message-view{display:block;margin-right:.35rem}#topic-users{margin-left:auto;margin-right:1rem;width:min-content}#topic-users .avatar-box{display:inline-block;width:1.8rem;min-width:1.8rem;height:1.8rem;min-height:1.8rem;font-size:1rem;margin-right:.2rem}#topic-users .avatar-box>.material-icons{font-size:1.4rem;line-height:1.8rem}#topic-users>span{line-height:2rem;vertical-align:top}.qr-code{align-self:center}#messages-container{overflow-y:hidden;height:100%}#messages-container:before{content:"";position:absolute;top:0;left:0;height:100%;width:100%;background-color:var(--clr-background-blue-gray-50);background-image:var(--wallpaper-url);background-repeat:var(--wallpaper-repeat);background-size:var(--wallpaper-size);background-position:var(--wallpaper-position);filter:blur(var(--wallpaper-blur)) invert(var(--wallpaper-invert)) brightness(var(--wallpaper-brightness));pointer-events:none;z-index:0}#messages-panel{position:relative;padding:.75rem;overflow-y:scroll;height:100%}#write-only-background{position:absolute;top:0;left:0;height:100%;width:100%;background-image:repeating-linear-gradient(45deg,hsla(0,0%,100%,.5),hsla(0,0%,100%,.5) .5rem,hsla(0,0%,100%,.8) 0,hsla(0,0%,100%,.8) 1rem)}#write-only-note{top:50%;transform:translate(-50%,-50%);height:auto;width:auto}#peer-messaging-disabled-note,#write-only-note{position:absolute;left:50%;background-color:var(--clr-bright);color:var(--clr-text-primary);line-height:2rem;text-align:center;padding:.75rem 1.25rem;border-radius:.5rem;box-shadow:0 1px .5px var(--clr-shadow-button-inset-active)}#peer-messaging-disabled-note{bottom:4.3rem;transform:translate(-50%);width:fit-content}#relationship-status-note{text-align:center;color:var(--clr-text-secondary);font-size:.85rem;padding:.5rem 1.25rem;flex:none}#relationship-status-note a{color:var(--clr-primary-accent)}.chat-box .author .role-badge{display:inline-block;font-style:normal;font-size:.7rem;line-height:1.3;padding:0 .4em;border-radius:.25rem;margin-left:.35em;color:#fff;vertical-align:middle}.chat-box .author .role-badge.owner{background-color:#e0a82e}.chat-box .author .role-badge.admin{background-color:#3ba55c}#group-announcement-banner,#group-join-request-banner{display:flex;align-items:center;gap:.5rem;margin:.5rem .75rem 0;padding:.6rem 1rem;background-color:var(--clr-bright);border-radius:.5rem;box-shadow:0 1px 3px rgba(0,0,0,.12);color:var(--clr-bubble-text);flex:none}#group-announcement-banner i:first-child,#group-join-request-banner i:first-child{color:var(--clr-warning-text,#e0a82e)}#group-announcement-banner span,#group-join-request-banner span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9rem}#group-announcement-banner i:last-child,#group-join-request-banner i:last-child{color:var(--clr-text-secondary)}.message-fail-icon{align-self:flex-end;margin:0 .25rem .6rem 0}.message-fail-reason{font-size:.8rem;color:var(--clr-text-secondary);text-align:right;margin-top:.25rem}.message-fail-reason a{color:var(--clr-primary-accent)}.message-group-invitation button{display:block;margin-top:.4rem;padding:.3rem .9rem;border:0;border-radius:1rem;color:#fff;background:var(--clr-primary-accent);font-size:.85rem}.message-group-invitation button:disabled{opacity:.6}.message-group-invitation em{display:block;margin-top:.4rem;color:var(--clr-text-secondary);font-style:normal;font-size:.85rem}.message-group-invitation-error{display:block;margin-top:.25rem;color:#df4e46;font-size:.78rem}.select-checkbox{align-self:center;margin:0 .5rem 0 .25rem;color:var(--clr-text-secondary);cursor:pointer;flex:none}.select-checkbox.blue{color:var(--clr-primary-accent)}.chat-box li.right .select-checkbox{margin-right:auto}#messages-container{position:relative}#messages-container div.toast{bottom:.75rem}#batch-action-bar{display:flex;flex-direction:column;flex:none;background-color:var(--clr-background-blue-gray-50);padding:.5rem .6rem}#batch-action-count{text-align:center;color:var(--clr-text-secondary);font-size:.85rem;padding-bottom:.4rem}#batch-action-buttons{display:flex;justify-content:space-around}#batch-action-buttons a{display:flex;flex-direction:column;align-items:center;font-size:.75rem;color:var(--clr-text-primary)}#batch-action-buttons a.disabled{color:var(--clr-text-secondary);opacity:.5;pointer-events:none}#batch-action-cancel{text-align:center;margin-top:.5rem;color:var(--clr-text-secondary);font-size:.85rem}.batch-forward-confirm{max-width:24rem}.forward-dialog.batch-forward-confirm{height:auto}.batch-forward-target{display:flex;align-items:center;justify-content:space-between;padding:.6rem 0}.contact-box>li.batch-forward-target{padding:.6rem 0;background:linear-gradient(to right,var(--clr-background-extra-light-gray),var(--clr-background-extra-light-gray)) 0 100% /100% 1px no-repeat,var(--clr-bright)}.batch-forward-comment{box-sizing:border-box;width:100%;margin:.5rem 0;padding:.6rem;border:0;border-radius:.4rem;color:var(--clr-text-primary);background-color:var(--clr-background-blue-gray-50);font:inherit}.batch-forward-comment::placeholder{color:var(--clr-text-secondary)}.batch-forward-actions{display:flex;gap:.5rem;margin-top:.5rem}.batch-forward-actions button{flex:1;padding:.6rem;border-radius:.4rem;border:none;background-color:var(--clr-background-blue-gray-50);color:var(--clr-text-primary)}.batch-forward-actions button.primary{background-color:var(--clr-primary-accent);color:var(--clr-bright)}#send-message-panel{display:flex;align-items:center;flex:none;padding:.4rem .4rem .4rem .6rem;background-color:var(--clr-background-blue-gray-50);z-index:2;min-height:4rem}#send-message-panel #writing-disabled{width:100%;text-align:center;font-size:1.2rem}#send-message-wrapper{position:relative;background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);z-index:2}#mention-picker{position:absolute;left:.5rem;right:.5rem;bottom:100%;margin-bottom:.3rem;max-height:12rem;overflow-y:auto;background:#fff;border-radius:.4rem;box-shadow:0 -.2rem .6rem rgba(0,0,0,.15);z-index:3}.mention-picker-row{padding:.6rem .9rem;cursor:pointer}.mention-picker-row.active,.mention-picker-row:hover{background:var(--clr-background-blue-gray-50)}.mention-picker-empty{padding:.6rem .9rem;color:var(--clr-text-tertiary)}#attach-panel,#emoji-panel{flex:none;background:#fff;border-top:1px solid var(--clr-shadow-panel-divider);max-height:12rem;overflow-y:auto}#emoji-panel-tabs{display:flex;padding:.4rem .6rem 0}#emoji-panel-tabs a{padding:.3rem .8rem;font-size:1.3rem;border-bottom:2px solid transparent;text-decoration:none}#emoji-panel-tabs a.active{border-bottom-color:var(--clr-primary-accent)}#emoji-panel-grid{display:flex;flex-wrap:wrap;padding:.4rem}#emoji-panel-grid a{width:2.4rem;height:2.4rem;display:flex;align-items:center;justify-content:center;font-size:1.4rem;text-decoration:none}#emoji-panel-footer{display:flex;align-items:center;justify-content:space-between;padding:.4rem .8rem .6rem;border-top:1px solid var(--clr-shadow-panel-divider)}#emoji-panel-footer a{display:flex;align-items:center;justify-content:center;width:2.4rem;height:2.4rem;text-decoration:none;color:var(--clr-text-tertiary)}#emoji-panel-footer a.emoji-panel-send{color:light-dark(#90caf9,#4a7ba6)}#emoji-panel-footer a.emoji-panel-send.active{color:var(--clr-primary-accent)}.emoji-panel-empty{width:100%;padding:1rem;text-align:center;color:var(--clr-text-tertiary)}#attach-panel{display:grid;grid-template-columns:repeat(4,1fr);gap:.6rem;padding:1rem .6rem}#attach-panel a{display:flex;flex-direction:column;align-items:center;gap:.3rem;font-size:.8rem;color:var(--clr-text-primary);text-decoration:none}#attach-panel a .material-icons{width:3rem;height:3rem;display:flex;align-items:center;justify-content:center;border-radius:50%;background:var(--clr-background-blue-gray-50);font-size:1.5rem}#attach-panel a.disabled{opacity:.4;pointer-events:none}.send-message-picker-backdrop{position:fixed;inset:0;z-index:20;display:flex;align-items:flex-end;background:rgba(0,0,0,.35)}.send-message-picker-backdrop>section{width:100%;max-height:70vh;display:flex;flex-direction:column;background:#fff;border-radius:.6rem .6rem 0 0}.send-message-picker-backdrop header{display:flex;align-items:center;justify-content:space-between;padding:.9rem 1rem;font-weight:600;border-bottom:1px solid var(--clr-shadow-panel-divider)}.send-message-picker-backdrop header a{color:var(--clr-text-tertiary)}.send-message-picker-list{overflow-y:auto;padding:.4rem 0}.send-message-picker-list a{display:block;padding:.75rem 1rem;color:var(--clr-text-primary);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.send-message-picker-empty{padding:1.5rem;text-align:center;color:var(--clr-text-tertiary)}#sendMessage{overflow:hidden;overflow-wrap:break-word}#send-message-panel .material-icons{min-width:2rem;font-size:1.6rem}#send-message-panel .material-icons.secondary,i.material-icons.disabled{color:var(--clr-text-tertiary)!important}#send-message-panel .material-icons.secondary:hover{color:var(--clr-primary-accent)!important}#send-message-input{overflow:hidden auto;min-height:2.5rem;max-height:6rem}.accept-invite-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);width:100%;z-index:1}.accept-invite-panel .title{font-size:1.2rem;padding:.75rem}.accept-invite-panel .footer{background-color:var(--clr-background-off-white);white-space:nowrap;padding-bottom:.35rem;text-align:center}.accept-invite-panel button{font-size:1rem;height:2em;line-height:2em;border:1px solid var(--clr-transparent);margin:.25rem;box-shadow:0 1px 2px 0 var(--clr-shadow-button)}#dummy-view{width:100%;height:100%;display:flex;align-items:center;justify-content:center;background-color:var(--clr-cyan-50);text-align:center}#dummy-view-icon{display:grid;place-items:center;width:6.5rem;height:6.5rem;margin:0 auto .8rem;border-radius:1.2rem;color:#fff;background:#2878d6}#dummy-view-icon .material-icons{font-size:4.2rem}#dummy-view h2{margin:0;font-size:1.25rem}#dummy-view p{margin:.25rem 0 0;color:#777f89}#image-preview{position:absolute;display:flex;flex-direction:column;top:0;left:0;width:100%;height:100%;z-index:2;background-color:var(--clr-overlay-white-strong)}#preview-caption-panel{display:flex;justify-content:space-between;background-color:var(--clr-background-blue-gray-50);box-shadow:0 1px 2px var(--clr-shadow-silver-subtle);line-height:2rem;flex-shrink:0;flex-grow:0;height:var(--caption-panel-height);padding:1rem .75rem 0;font-size:120%;z-index:3}#preview-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#preview-caption-panel a:hover{color:var(--clr-dark)}#image-preview-container{display:flex;justify-content:space-around;align-items:center;overflow:hidden;background-color:var(--clr-gray-medium-bg);width:100%;height:100%}#image-preview-footer{display:flex;justify-content:space-around;height:3.2rem;line-height:1.5rem;background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);flex-grow:0;flex-shrink:0;z-index:1}#image-preview-container .material-icons{font-size:6rem}#image-preview-container .doc-card{display:flex;flex-direction:column;overflow-x:hidden;background-color:var(--clr-std-ltgray);padding:1rem;border-radius:.5rem;max-width:30rem}.doc-card .avatar-box{width:10rem;height:10rem;font-size:4.5rem}.doc-card .avatar-box .material-icons{line-height:10rem}#video-container{position:absolute;display:flex;flex-direction:column;justify-content:space-between;top:0;left:0;width:100%;height:100%;background-color:var(--clr-overlay-white-strong);z-index:200}#video-container.minimized{left:auto;top:1rem;right:1rem;width:18rem;height:18rem;background-color:unset;user-select:none;cursor:grab;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);border-radius:.5rem}#video-container.audio-minimized{width:auto;height:auto;background-color:unset;box-shadow:none}.call-pill{display:flex;align-items:center;gap:.5rem;background-color:var(--clr-bright);border-radius:999px;padding:.5rem .75rem .5rem 1rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);cursor:grab}.call-pill>.material-icons{color:var(--clr-badge-green-text);font-size:1.3rem}.call-pill-duration{color:var(--clr-text-primary);font-variant-numeric:tabular-nums;font-size:.9rem;white-space:nowrap}.call-pill-row{display:flex;align-items:center;gap:.5rem}.audio-minimized button.full-screen{position:static;width:1.5rem;height:1.5rem}.audio-minimized button.full-screen .material-icons{font-size:1.1rem}.call-duration{position:absolute;top:1.5rem;left:50%;transform:translateX(-50%);z-index:2;color:#fff;background-color:var(--clr-shadow-dialog);padding:.3rem 1rem;border-radius:999px;font-variant-numeric:tabular-nums;font-size:.95rem}#controls{position:absolute;display:flex;column-gap:1rem;align-items:center;align-self:center;justify-content:center;bottom:2.5rem;z-index:1}#controls.minimized{column-gap:.5rem;bottom:1.75rem}#controls button{position:relative;display:flex;align-items:center;justify-content:center;border-radius:50%;width:4rem;height:4rem;min-width:auto;box-shadow:0 3px 6px 0 var(--clr-shadow-button)}#controls.minimized button{width:2.75rem;height:2.75rem;box-shadow:0 2px 4px 0 var(--clr-shadow-button)}#controls button .material-icons{font-size:1.8rem}#controls.minimized button .material-icons{font-size:1.4rem}#controls button.off{background-color:rgba(0,0,0,.55);color:#fff}#controls button.off:active:not([disabled]),#controls button.off:hover:not([disabled]){background-color:rgba(0,0,0,.7)}button.full-screen{position:absolute;top:2rem;left:2rem;z-index:1;width:2.5rem;height:2.5rem;border-radius:.5rem;padding:0;box-shadow:none;background-color:transparent;min-width:unset}.minimized:not(.audio-minimized) button.full-screen{top:1rem;left:1rem;width:2rem;height:2rem}button.full-screen:hover:not([disabled]),button:active:not([disabled]){color:var(--clr-text-secondary)}button.full-screen .material-icons{font-size:x-large}.minimized:not(.audio-minimized) button.full-screen .material-icons{font-size:large}#video-container-panel{position:relative;height:100%;width:100%}.call-party{background-color:var(--clr-background-extra-light-gray);border-radius:.5rem;border:2px solid var(--clr-border-light);overflow:hidden}.call-party:hover{border-color:var(--clr-primary-accent)}.minimized .call-party{border-width:1px}.call-party.peer{position:absolute;top:1rem;left:1rem;right:1rem;bottom:1rem;z-index:1}.minimized .call-party.peer{top:0;left:0;right:0;bottom:0}.call-party.self{position:absolute;right:.5rem;bottom:.5rem;width:10rem;height:10rem;z-index:2;cursor:grab}.call-party.self[disabled]{cursor:unset;display:none}video{width:100%;height:100%;object-fit:contain}.call-party.self video{transform:scaleX(-1)}.call-party[disabled] video{display:none}.caller-card{position:absolute;top:0;left:0;width:100%;height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column}.caller-card .avatar-box{width:10rem;height:10rem;font-size:6rem}.caller-card.pulse .lettertile,.caller-card.pulse img.avatar{animation:active-call 1.5s linear infinite}.caller-card .avatar-box .material-icons{font-size:6rem;line-height:1.6}.minimized .caller-card .avatar-box{width:6rem;height:6rem;font-size:3.6rem}.call-party .caller-name{max-width:12rem;padding:.15rem .5rem;border-radius:.35rem;z-index:1;text-shadow:0 0 1px var(--clr-bright);background-color:var(--clr-background-off-white);text-overflow:ellipsis;overflow-x:hidden;white-space:nowrap}.call-party.self .caller-name.inactive{position:absolute;bottom:.25rem;right:.25rem}.caller-card .caller-name{font-size:larger;margin-top:.5rem}.call-peer-card h1 .trusted-badge,.caller-card .trusted-badge{display:inline-block}.caller-card .caller-status{margin-top:.5rem;color:var(--clr-bright);font-size:.9rem;opacity:.8}.call-party.peer .caller-name.inactive{position:absolute;font-size:larger;left:1rem;bottom:.5rem;margin:0 auto}.minimized .caller-name{padding:.1rem .35rem;border-radius:.25rem;font-weight:lighter}.call-message{display:flex;flex-direction:row}.call-message .duration{font-weight:lighter}#go-to-latest{right:1.5rem;bottom:1rem}@keyframes active-call{0%{box-shadow:0 0 0 .1rem var(--clr-primary-accent-transparent-medium),0 0 0 .3rem var(--clr-primary-accent-transparent-medium),0 0 0 .5rem var(--clr-primary-accent-transparent-medium)}to{box-shadow:0 0 0 .4rem var(--clr-primary-accent-transparent-medium),0 0 0 2rem rgba(33,150,243,0),0 0 0 3rem rgba(33,150,243,0)}}.chat-box{list-style:none;padding:0 0 3.5rem;margin:0 .5rem;scroll-behavior:smooth}.chat-box.group{margin-left:-.4rem}.chat-box li{display:flex;margin:0;padding:0;align-items:flex-end}.chat-box .right{justify-content:flex-end}.voice-unread-dot{position:absolute;top:-.15rem;right:-.15rem;width:.55rem;height:.55rem;border-radius:50%;background:#e3444d;border:1.5px solid var(--clr-background-primary,#fff);z-index:1}.bubble{position:relative;display:flex;max-width:36rem;min-width:9rem;height:auto;padding:.75rem .5rem;margin:0;text-align:left;color:var(--clr-bubble-text);border-radius:.5rem;transition:background-color .5s ease-out;transition-delay:.3s;filter:drop-shadow(.5px .5px .7px var(--clr-shadow-bubble-drop));-webkit-touch-callout:none}.chat-box li.single{margin-top:.25rem;margin-bottom:.75rem}.chat-box li.first{margin-top:.25rem;margin-bottom:.15rem}.chat-box li.middle{margin-top:.15rem;margin-bottom:.15rem}.chat-box li.last{margin-top:.15rem;margin-bottom:.75rem}.left .bubble{background-color:var(--clr-bubble-left-bg);margin-right:.5rem}.left.flash .bubble{background-color:var(--clr-bubble-left-bg-flash)}.left .bubble.tip{border-bottom-left-radius:0}.right .bubble{background-color:var(--clr-bubble-right-bg);color:var(--clr-bubble-right-text);margin-left:1.75rem}.right.flash .bubble{background-color:var(--clr-bubble-right-bg-flash)}.right .bubble.tip{border-bottom-right-radius:0}.chat-box .meta{justify-content:center;margin-top:.5rem;margin-bottom:.5rem}.chat-box .meta .bubble{color:var(--clr-bubble-meta-text);min-width:unset}.meta .bubble.deleted{background-color:var(--clr-bubble-meta-deleted-bg);padding:.75rem .75rem .5rem}.meta .bubble.date{font-size:smaller;padding:.5rem;background-color:var(--clr-bubble-meta-date-bg);text-transform:uppercase;user-select:none}.meta .bubble.system{max-width:90%;padding:.3rem .5rem;background-color:transparent;font-size:.8rem;text-align:center}.left .bubble.tip:before{content:"";position:absolute;width:.85rem;height:.85rem;left:-.8rem;bottom:0;background-color:var(--clr-bubble-left-bg);clip-path:polygon(100% 0,0 110%,100% 110%);-webkit-clip-path:polygon(100% 0,0 110%,100% 110%);border-bottom-left-radius:.3rem;transition:background-color .5s ease-out;transition-delay:.3s}.left.flash .bubble.tip:before{background-color:var(--clr-bubble-left-bg-flash)}.right .bubble.tip:before{content:"";position:absolute;width:.85rem;height:.85rem;left:99.8%;bottom:0;background-color:var(--clr-bubble-right-bg);clip-path:polygon(0 0,100% 110%,0 110%);-webkit-clip-path:polygon(0 0,100% 110%,0 110%);border-bottom-right-radius:.3rem;transition:background-color .5s ease-out;transition-delay:.3s}.right.flash .bubble.tip:before{background-color:var(--clr-bubble-right-bg-flash)}.chat-box .avatar-box{position:relative;width:1.4rem;min-width:1.4rem;height:1.4rem;min-height:1.4rem;font-size:.8rem;margin-bottom:.8rem;margin-right:.8rem}.bubble div.content-meta{width:100%}.bubble div.message-content{position:relative;margin:0;width:100%;max-width:36rem;overflow-wrap:anywhere;padding:0 .75rem;font-size:var(--message-text-size)}.bubble div.message-content.emoji-1{font-size:300%}.bubble div.message-content.emoji-2{font-size:241%}.bubble div.message-content.emoji-3{font-size:193%}.bubble div.message-content.emoji-4{font-size:155%}.bubble div.message-content.emoji-5{font-size:125%}.bubble div.message-content:after{content:".";display:block;height:0;clear:both;visibility:hidden}.chat-box .timestamp-padding{display:inline-block;width:4rem;height:0}.chat-box .timestamp{position:relative;font-size:80%;color:var(--clr-bubble-timestamp-text);top:.35rem;float:right;white-space:nowrap;user-select:none}.right .bubble .timestamp{color:hsla(0,0%,100%,.85)}.right .bubble .timestamp .blue{color:#fff!important}.chat-box .author{font-size:80%;color:var(--clr-bubble-author-text);max-width:12em;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden}.image-preview,.inline-image{position:relative;overflow:hidden;border-radius:.1rem}.inline-image{max-width:36rem;max-height:24rem}.inline-image>.rounded-container{position:relative;margin:.25rem auto;bottom:2rem;border-left:.25rem solid var(--clr-transparent);border-right:.25rem solid var(--clr-transparent)}img.image-preview:before,img.inline-image:before{position:absolute;display:flex;font-size:.9rem;font-weight:lighter;color:var(--clr-text-primary);top:0;left:0;width:100%;height:100%;justify-content:center;background:center no-repeat var(--clr-border-light) url(../img/broken_image.png)}img.inline-image:before{content:attr(alt);background-size:3rem 3rem}img.image-preview:before{content:" ";background-size:10rem 10rem}.inline-image.video>img.inline-image:before,img.image-preview.video:before{background:center no-repeat var(--clr-border-light) url(../img/broken_video.png)}.inline-image.video>img.inline-image:before{background-size:3rem 3rem}.inline-video{display:flex;position:relative;align-items:center;justify-content:center}.inline-video>img.inline-image:before{background:var(--clr-border-light)}.inline-video .duration{padding:.25rem .5rem;color:var(--clr-toast-bg);background-color:hsla(0,0%,100%,.5);position:absolute;bottom:.25rem;left:.25rem;font-size:80%;border-radius:.3rem}.inline-video .play-control{display:flex;position:absolute;align-items:center;justify-content:center;width:4rem;height:4rem;background-color:rgba(0,0,0,.4);border-radius:50%;pointer-events:none;cursor:pointer}.attachment{display:flex}.attachment:last-of-type{margin-bottom:-.45rem}#info-caption-panel{background-color:var(--clr-background-blue-gray-300)}#info-caption-panel a{color:var(--clr-text-secondary);line-height:1;text-decoration:none}#info-caption-panel :hover{color:var(--clr-dark)}#info-title{margin-right:auto}#group-manager{position:relative;display:flex;flex-direction:column;height:100%;overflow-y:hidden}#group-manager-buttons{display:flex;background-color:var(--clr-background-blue-gray-50);box-shadow:0 -1px var(--clr-shadow-panel-divider);z-index:2;justify-content:space-around;padding:.4rem;height:4rem;border-left:1px solid var(--clr-border-light)}ul.tabbar{display:flex;flex-grow:0;flex-shrink:0;background:var(--clr-tabbar-bg);list-style:none;margin:0;width:100%;overflow:hidden;padding:0 0 0 1rem}ul.tabbar>li{position:relative;height:2.4rem;box-shadow:inset 0 -2px 2.5px -1px var(--clr-shadow-button)}ul.tabbar li.active{background:var(--clr-bright)}ul.tabbar li:after{height:.1rem;width:100%;content:"";bottom:0;left:0;position:absolute;background:var(--clr-tabbar-inactive-border)}ul.tabbar li.active:after{height:.15rem;content:"";bottom:0;left:0;position:absolute;background:var(--clr-tabbar-active-border);animation:tabbar-border-expand .2s cubic-bezier(.4,0,.4,1) 0s alternate forwards}@keyframes tabbar-border-expand{0%{opacity:0;width:0}to{opacity:1;width:100%}}ul.tabbar>li>a{position:relative;padding-left:1rem;padding-right:1rem;text-align:center;line-height:2.4rem;font-weight:400;font-size:1.3rem;font-variant:small-caps;text-decoration:none;color:var(--clr-tabbar-inactive-text);overflow:hidden}ul.tabbar li.active>a{color:var(--clr-tabbar-active-text)}.unread{display:inline-block;font-size:.75rem;font-weight:bolder;background-color:var(--clr-secondary-accent);color:var(--clr-bright);border-radius:50%;width:1.35rem;height:1.35rem;margin-left:.5rem;line-height:1.45rem;text-align:center;vertical-align:middle}.material-icons.as-badge{padding-left:.2rem;font-size:1.15rem;color:var(--clr-chip-remove-icon-bg)}.badge{font-family:Roboto Mono,Courier,monospace,sans-serif;font-size:.8rem;border:1px solid var(--clr-badge-default-border);background-color:var(--clr-badge-default-bg);color:var(--clr-badge-default-text);padding:.05rem .25rem;margin:.05rem .1rem;border-radius:.2rem;display:inline-block;align-self:flex-start}.badge.green{border-color:var(--clr-badge-green-border);background-color:var(--clr-badge-green-bg);color:var(--clr-badge-green-text)}.badge.yellow{border-color:var(--clr-badge-yellow-border);background-color:var(--clr-badge-yellow-bg);color:var(--clr-badge-yellow-text)}.badge.blue{border-color:var(--clr-badge-blue-border);background-color:var(--clr-badge-blue-bg);color:var(--clr-badge-blue-text)}.badge.red{border-color:var(--clr-badge-red-border);background-color:var(--clr-badge-red-bg);color:var(--clr-badge-red-text)}.badge.magenta{border-color:var(--clr-badge-magenta-border);background-color:var(--clr-badge-magenta-bg);color:var(--clr-badge-magenta-text)}.lettertile{width:100%;padding-bottom:100%;border-radius:50%;user-select:none}.lettertile>div{position:absolute;display:flex;flex-shrink:0;flex-grow:0;top:0;bottom:0;left:0;right:0;text-transform:uppercase;align-items:center;justify-content:center;text-align:center;border-radius:50%;line-height:1;padding-top:.1em;color:var(--clr-lettertile-default-text)}.lettertile:hover{color:var(--clr-lettertile-hover-text)}.lettertile.disabled{opacity:.5}.lt-bg-0{background-color:var(--clr-lt-bg-0)}.lt-bg-1{background-color:var(--clr-lt-bg-1)}.lt-bg-2{background-color:var(--clr-lt-bg-2)}.lt-bg-3{background-color:var(--clr-lt-bg-3)}.lt-bg-4{background-color:var(--clr-lt-bg-4)}.lt-bg-5{background-color:var(--clr-lt-bg-5)}.lt-bg-6{background-color:var(--clr-lt-bg-6)}.lt-bg-7{background-color:var(--clr-lt-bg-7)}.lt-bg-8{background-color:var(--clr-lt-bg-8)}.lt-bg-9{background-color:var(--clr-lt-bg-9)}.lt-bg-10{background-color:var(--clr-lt-bg-10)}.lt-bg-11{background-color:var(--clr-lt-bg-11)}.lt-bg-12{background-color:var(--clr-lt-bg-12)}.lt-bg-13{background-color:var(--clr-lt-bg-13)}.lt-bg-14{background-color:var(--clr-lt-bg-14)}.lt-bg-15{background-color:var(--clr-lt-bg-15)}.dk-bg-0{background-color:var(--clr-dk-bg-0)}.dk-bg-1{background-color:var(--clr-dk-bg-1)}.dk-bg-2{background-color:var(--clr-dk-bg-2)}.dk-bg-3{background-color:var(--clr-dk-bg-3)}.dk-bg-4{background-color:var(--clr-dk-bg-4)}.dk-bg-5{background-color:var(--clr-dk-bg-5)}.dk-bg-6{background-color:var(--clr-dk-bg-6)}.dk-bg-7{background-color:var(--clr-dk-bg-7)}.dk-bg-8{background-color:var(--clr-dk-bg-8)}.dk-bg-9{background-color:var(--clr-dk-bg-9)}.dk-bg-10{background-color:var(--clr-dk-bg-10)}.dk-bg-11{background-color:var(--clr-dk-bg-11)}.dk-bg-12{background-color:var(--clr-dk-bg-12)}.dk-bg-13{background-color:var(--clr-dk-bg-13)}.dk-bg-14{background-color:var(--clr-dk-bg-14)}.dk-bg-15{background-color:var(--clr-dk-bg-15)}.lt-fg-0{color:var(--clr-lt-fg-0)!important}.lt-fg-1{color:var(--clr-lt-fg-1)!important}.lt-fg-2{color:var(--clr-lt-fg-2)!important}.lt-fg-3{color:var(--clr-lt-fg-3)!important}.lt-fg-4{color:var(--clr-lt-fg-4)!important}.lt-fg-5{color:var(--clr-lt-fg-5)!important}.lt-fg-6{color:var(--clr-lt-fg-6)!important}.lt-fg-7{color:var(--clr-lt-fg-7)!important}.lt-fg-8{color:var(--clr-lt-fg-8)!important}.lt-fg-9{color:var(--clr-lt-fg-9)!important}.lt-fg-10{color:var(--clr-lt-fg-10)!important}.lt-fg-11{color:var(--clr-lt-fg-11)!important}.lt-fg-12{color:var(--clr-lt-fg-12)!important}.lt-fg-13{color:var(--clr-lt-fg-13)!important}.lt-fg-14{color:var(--clr-lt-fg-14)!important}.lt-fg-15{color:var(--clr-lt-fg-15)!important}.dk-fg-0{color:var(--clr-dk-fg-0)!important}.dk-fg-1{color:var(--clr-dk-fg-1)!important}.dk-fg-2{color:var(--clr-dk-fg-2)!important}.dk-fg-3{color:var(--clr-dk-fg-3)!important}.dk-fg-4{color:var(--clr-dk-fg-4)!important}.dk-fg-5{color:var(--clr-dk-fg-5)!important}.dk-fg-6{color:var(--clr-dk-fg-6)!important}.dk-fg-7{color:var(--clr-dk-fg-7)!important}.dk-fg-8{color:var(--clr-dk-fg-8)!important}.dk-fg-9{color:var(--clr-dk-fg-9)!important}.dk-fg-10{color:var(--clr-dk-fg-10)!important}.dk-fg-11{color:var(--clr-dk-fg-11)!important}.dk-fg-12{color:var(--clr-dk-fg-12)!important}.dk-fg-13{color:var(--clr-dk-fg-13)!important}.dk-fg-14{color:var(--clr-dk-fg-14)!important}.dk-fg-15{color:var(--clr-dk-fg-15)!important}.material-icons{font-size:1.4rem;line-height:1;vertical-align:middle;text-align:center;user-select:none}.material-icons.small{font-size:1rem}.material-icons.medium{font-size:1.2rem}.material-icons.large{font-size:1.6rem}.material-icons.big{font-size:2.2rem}.material-icons.x-big{font-size:3rem}.material-icons.huge{font-size:4rem}.composed-material{display:inline-block;position:relative}.composed-material .second{position:absolute;font-size:85%;top:7%;left:39%;font-weight:700}.composed-material .second-small{position:absolute;font-size:62%;top:14%;left:30%;font-weight:700}.material-icons.outline{position:relative;text-shadow:-1px 1px var(--clr-bright),1px 1px var(--clr-bright),1px -1px var(--clr-bright),-1px -1px var(--clr-bright)}#self-avatar .material-icons{font-size:2.4rem;line-height:3rem}.avatar-box .material-icons{color:var(--clr-lettertile-default-text);border-radius:50%;width:inherit;height:inherit}.chip-input{display:flex;flex-wrap:wrap;flex-grow:1;cursor:text;font-size:1.1rem;font-weight:400;background:var(--clr-transparent);border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);transition:all .1s ease-in-out;max-height:10rem;min-height:4rem;overflow-y:scroll;margin:.25rem 0;outline:none;color:var(--clr-input-text);align-items:center;justify-content:flex-start;text-align:center}.chip-input.focused{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}.chip-input>input[type=text]{display:inline-block;width:auto;border:none;box-shadow:none;min-width:4rem;flex:1 0 auto}.chip,.chip-input>input[type=text]{line-height:1.8;height:1.8rem;margin:.125rem}.chip{display:flex;flex:0 0 auto;align-items:center;border-radius:.9rem;background-color:var(--clr-chip-bg);font-size:90%;max-width:12rem;overflow:hidden}.chip,.chip>span{white-space:nowrap;text-overflow:ellipsis}.chip>span{overflow-x:hidden}.chip.invalid{color:var(--clr-chip-invalid-text);background-color:var(--clr-chip-invalid-bg)}.chip>a{display:inline-block;color:var(--clr-chip-remove-icon-text);background-color:var(--clr-chip-remove-icon-bg);border-radius:50%;margin:.3rem;width:1.175rem;min-width:1.175rem;height:1.175rem;line-height:1.15;text-decoration:none}.chip>a:focus,.chip>a:hover{text-decoration:none;color:var(--clr-chip-remove-icon-hover-text);background-color:var(--clr-chip-remove-icon-hover-bg)}.chip .avatar-box{position:relative;width:1.8rem;min-width:1.8rem;height:1.8rem;min-height:1.8rem;font-size:1rem;margin-right:.2rem}.chip .avatar-box .material-icons{font-size:1.4rem;line-height:1.8rem}.chip .spacer{display:inline-block;margin:.3rem;width:.25rem;height:1.175rem}.load-spinner-box{--size-small:2.5rem;--size-large:4rem;position:absolute;box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button);border-radius:50%;padding:.25rem;width:var(--size-small);height:var(--size-small);left:0;right:0;top:5rem;margin-left:auto;margin-right:auto;background-color:var(--clr-bright);z-index:2}.load-spinner-box.large{width:var(--size-large);height:var(--size-large)}.load-spinner-box.clear{box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button-inset-active);background-color:hsla(0,0%,100%,.5)}.load-spinner-box.centered{top:calc(var(--size-small)/2 - .25rem)}.load-spinner-box.large.centered{top:calc(var(--size-large)/2 - .25rem)}.loader-spinner{border-top:.35rem solid var(--clr-spinner-track);border-radius:50%;border:.35rem solid var(--clr-spinner-track);border-top-color:var(--clr-spinner-active);width:2rem;height:2rem;animation:spin 1.5s linear infinite}.load-spinner-box.large .loader-spinner{width:3.5rem;height:3.5rem}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.uploader{display:flex}.uploader>div{position:relative;height:.6rem;padding:.15rem;margin:.35rem;width:6rem;line-height:0;border-radius:.1rem;background-color:var(--clr-background-blue-gray-100)}.uploader>div>span{display:inline-block;height:.3rem;background-color:var(--clr-primary-action);border-radius:.08rem}.highlight{color:var(--clr-highlight-text);font-weight:bolder}.highlight .preview{color:var(--clr-highlight-preview-text);font-weight:inherit}.cropper{height:21rem;margin:1rem auto auto;align-self:center;transform:translateZ(0)}.cropper,.cropper .bounding-box{position:relative;width:18rem;border-radius:.25rem}.cropper .bounding-box{height:18rem;overflow:hidden;z-index:1;border:2px solid var(--clr-cropper-bounding-box-border);box-shadow:1px 1px 3px var(--clr-shadow-cropper-gray);background-color:var(--clr-cropper-bounding-box-bg)}.cropper .preview{position:absolute;max-height:none;max-width:none;z-index:-1}.cropper .cutout{position:absolute;width:17.8rem;height:17.8rem;border:1px dashed var(--clr-cropper-cutout-border);margin:auto;top:0;bottom:0;right:0;left:0;box-shadow:0 0 150rem 150rem var(--clr-cropper-cutout-shadow);z-index:0}.cropper .cutout.circle{border-radius:50%}.cropper .overlay{position:absolute;cursor:move;touch-action:none;z-index:1}.cropper .zoom-wrapper{height:2rem;width:80%;margin:1rem auto;text-align:center}.cropper .zoom{box-shadow:none;pointer-events:none;z-index:2}.cropper .zoom:focus{outline:none}.reply-quote{position:relative;padding:.15rem .5rem .25rem;border-left:.25rem solid var(--clr-reply-quote-border);line-height:1.5em;font-weight:lighter;border-radius:.25rem;color:var(--clr-reply-quote-text);cursor:pointer}.chat-box .bubble .reply-quote{margin:.15rem -.75rem .3rem}.chat-box .bubble .reply-quote:first-child{margin-top:-.25rem}.chat-box .left .reply-quote{background-color:var(--clr-reply-quote-left-bg)}.chat-box .right .reply-quote{background-color:var(--clr-reply-quote-right-bg)}.reply-quote .inline-image{vertical-align:middle;margin-bottom:.1rem}.reply-quote img.inline-image:before{content:""}#reply-quote-preview{display:flex;align-items:center}#reply-quote-preview .reply-quote{width:100%;background-color:var(--clr-reply-quote-preview-bg);margin:.35rem .5rem 0 0;cursor:auto}#reply-quote-preview .cancel{min-width:2.4rem;text-align:center}#reply-quote-preview .inline-image{background-color:var(--clr-border-light)}#reply-quote-preview img.inline-image:before{content:""}#send-message-panel #reply-quote-preview{width:100%}#send-message-panel #reply-quote-preview .reply-quote{margin-bottom:.35rem}.forwarding-quote{font-size:200%;line-height:200%}.mention{font-weight:500}.forward-dialog{position:relative;overflow:hidden;background-color:var(--clr-bright);box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);padding:.5rem;border-radius:.3rem;margin:auto 1rem;width:24rem;height:80%}.forward-dialog .scrollable-panel{height:80%}.audio{display:flex;margin-left:auto;align-items:center;flex:none;background-color:var(--clr-audio-bg);height:3rem;border-radius:1.5rem}.audio canvas{width:14rem;height:2.6rem;margin-right:2rem}.audio canvas.playback{margin-right:0}.compose-record-overlay canvas{width:6rem;height:1.8rem;margin-top:.4rem}.audio .duration{font-size:large}.audio-player{display:flex;align-items:center}.audio-player .material-icons.large{font-size:2.4rem;color:var(--clr-audio-icon)}.audio-player .material-icons.disabled{color:var(--clr-audio-icon-disabled);cursor:default}.audio-player .playback{width:14rem;height:2.6rem}.audio-player canvas.playback{display:block}.audio-player .playback-row{display:flex;align-items:center;justify-content:center;color:var(--clr-audio-icon);font-size:small}.audio-player .timer{font-size:smaller;color:var(--clr-audio-timer-text)}#pinned-wrapper{margin-right:.5rem}#pinned-wrapper,.pinned{position:relative;display:flex;align-items:center;height:100%}.pinned{padding:.15rem .5rem .25rem;background-color:var(--clr-background-off-white);background-position:50%;font-weight:lighter;border-radius:0 .25rem .25rem 0;color:var(--clr-text-primary);width:24rem;min-width:0;cursor:pointer;transition:background .4s}.pinned>p{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.pinned:hover{background-color:var(--clr-bright)}.pinned:active{background-color:var(--clr-blue-wash-medium);transition:background 0s}.pinned-scroll{position:relative;display:flex;flex-direction:column;align-items:center;border-radius:.25rem 0 0 .25rem;background-color:var(--clr-background-extra-light-gray);justify-content:space-evenly;height:100%;padding:.2rem;margin-left:.35rem;user-select:none}.pinned-scroll .dot{width:.3rem;height:.3rem;border-radius:50%;background-color:var(--clr-text-tertiary);user-select:none}.pinned-scroll .adot{width:.45rem;height:.45rem;border-radius:50%;background-color:var(--clr-light-blue-accent);user-select:none}#pinned-wrapper:hover .menuTrigger{opacity:.9}#pinned-wrapper:hover .menuTrigger a{color:var(--clr-text-secondary)}.pinned-menu{position:absolute;display:flex;flex-direction:column;background-color:var(--clr-pinned-menu-bg);border-radius:0 .25rem .25rem 0;justify-content:space-evenly;top:0;bottom:0;right:0}.pinned-menu .menuTrigger{position:relative;right:0}.contact-card{position:relative;background-color:var(--clr-background-off-white);border-radius:.5rem;display:flex;flex-direction:column;min-width:14rem}.contact-card .avatar-box{position:relative;width:1.8rem;height:1.8rem;font-size:1rem;margin-right:.75rem;margin-bottom:0}.contact-card .contact-body{align-items:center;background-color:var(--clr-background-blue-gray-50);display:flex;padding:.75rem;border-radius:.5rem .5rem 0 0;border-bottom:none}.contact-card .contact-body .name-box{display:flex;flex-direction:column;overflow:hidden}.contact-card .contact-body .name-box .name{color:var(--clr-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-card .contact-body .name-box .org{color:var(--clr-text-secondary);font-size:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:300}.contact-card .contact-actions{display:flex;justify-content:space-evenly;align-items:center;padding:0 .5rem;border-radius:0 0 .5rem .5rem;border-top:none;background-color:var(--clr-bright)}.contact-card .contact-actions a{cursor:pointer}.contact-card .contact-actions .divider{height:1.8rem;opacity:.5}.drag-n-drop{display:flex;border:.15rem dashed var(--clr-drag-n-drop-border);border-radius:1rem;background-color:var(--clr-drag-n-drop-bg);position:absolute;top:1.5rem;bottom:1.5rem;left:1.5rem;right:1.5rem;z-index:3;justify-content:center;align-items:center;font-size:2rem;color:var(--clr-drag-n-drop-text);outline:.5rem solid var(--clr-drag-n-drop-outline)}.country-flag{display:inline-block;font-size:larger}.dial-code{white-space:nowrap;display:inline-block;cursor:pointer;vertical-align:middle;margin-bottom:.15rem}ul.phone-country-selector{list-style:none;overflow-x:hidden}ul.phone-country-selector>li{position:relative;font-weight:lighter;padding:.25rem .5rem .15rem;cursor:pointer;width:100%}ul.phone-country-selector>li:hover{background-color:var(--clr-background-blue-gray-50)}ul.phone-country-selector>li.selected{background-color:var(--clr-background-blue-gray-100)}ul.phone-country-selector .dial-code{position:absolute;right:.5rem;color:var(--clr-primary-action);font-weight:400}ul.phone-country-selector span{display:inline-block}ul.phone-country-selector span.country{text-overflow:ellipsis;overflow-x:hidden}.image-grid{position:relative;display:grid;grid-template-columns:repeat(auto-fill,minmax(7rem,1fr));gap:.35rem;padding:.25rem}.image-grid-cell{padding:0;margin:0;width:100%;height:7rem;overflow:hidden;border-radius:.25rem;border:1.5px solid transparent;cursor:pointer;box-shadow:0 0 .2rem var( --clr-shadow-hr-inset)}.image-grid-cell img{object-fit:cover}.image-grid-cell.selected{border:1.5px solid var(--clr-secondary-accent)}img.inverted{filter:invert(1)}div.toast{visibility:hidden;display:flex;align-items:center;justify-content:center;position:absolute;min-width:10rem;padding:.5rem 1rem;height:3rem;z-index:3;font-weight:lighter;color:var(--clr-toast-text);background-color:var(--clr-toast-bg);border-radius:.5rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);bottom:2rem;left:50%;translate:-50%}div.toast.show{visibility:visible;animation:fadein .5s,fadeout .5s 2.5s}#sidepanel.auth-onboarding-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f7f9fc;color:#20242c}.auth-onboarding-panel *{box-sizing:border-box;letter-spacing:0}.auth-landing,.auth-page{position:relative;width:100%;min-height:100%;overflow-x:hidden;overflow-y:auto;background:#fff}.auth-soft-bg{background:#f6f7f9}.auth-landing{display:flex;flex-direction:column;align-items:center;padding:max(1.5rem,env(safe-area-inset-top)) 2rem max(1.5rem,env(safe-area-inset-bottom));background:radial-gradient(ellipse 40% 25% at 90% 0,rgba(68,151,255,.14),transparent 72%),#fff}.auth-landing-form{width:min(100%,28rem);margin:auto 0}.auth-brand{display:flex;flex-direction:column;align-items:center;margin-bottom:4rem}.auth-logo{display:grid;place-items:center;width:5.5rem;height:5.5rem;border-radius:.75rem;background:#fff;box-shadow:0 .75rem 2rem rgba(35,74,125,.14)}.auth-logo span{display:grid;place-items:center;width:3.75rem;height:3.75rem;border-radius:50% 50% 50% 18%;color:#fff;background:#1677ff;font-size:2.2rem;font-weight:700;transform:rotate(-18deg)}.auth-brand h1{margin:1.3rem 0 0;color:#14171c;font-size:2rem;font-weight:700}.auth-back-link,.auth-bottom-link,.auth-remove-file,.auth-switch button,.auth-text-button,.auth-top-link{width:auto;min-width:0;height:auto;min-height:0;padding:0;border:0;box-shadow:none;color:#1677ff;background:transparent;font-size:.95rem;text-transform:none}.auth-top-link{position:absolute;top:max(1.5rem,env(safe-area-inset-top));right:2rem}.auth-bottom-link{margin-top:auto;padding-top:2rem}.auth-back-link{position:absolute;top:max(1.5rem,env(safe-area-inset-top));left:2rem;display:flex;align-items:center;color:#616975}.auth-back-link .material-icons{margin-right:.15rem;font-size:1rem}.auth-field-wrap{margin-bottom:1rem}.auth-field{display:flex;align-items:center;min-height:3.8rem;border:1px solid transparent;border-radius:.5rem;background:#f2f4f7;transition:border-color .15s,box-shadow .15s}.auth-field:focus-within{border-color:#4091ff;box-shadow:0 0 0 3px rgba(22,119,255,.1)}.auth-field.invalid{border-color:#d94b4b}.auth-field input{min-width:0;width:100%;height:3.7rem;margin:0;padding:0 1rem;border:0;box-shadow:none;color:#252931;background:transparent;font-size:1rem}.auth-field input:focus{box-shadow:none}.auth-field input::placeholder,.auth-form textarea::placeholder,.auth-list-form input::placeholder,.auth-realname-content input::placeholder{color:#b2b7bf}.auth-field-icon{flex:none;margin-left:1rem;color:#4091ff;font-size:1.35rem}.auth-field-icon-button{flex:none;display:flex;margin:0 0 0 1rem;padding:0;border:0;background:transparent;color:#4091ff}.auth-field-icon-button .material-icons{font-size:1.35rem}.auth-icon-button,.auth-inline-icon{display:grid;place-items:center;flex:none;width:3.25rem;min-width:3.25rem;height:3.25rem;min-height:3.25rem;margin:0;padding:0;border:0;box-shadow:none;color:#a7adb6;background:transparent}.auth-inline-icon .material-icons{font-size:1.25rem}.auth-field-error{margin-top:.4rem;color:#cf3f3f;font-size:.82rem}.auth-primary{width:100%;height:3.8rem;margin:1rem 0 0;border:0;border-radius:.5rem;color:#fff;background:#368bfa;box-shadow:0 .4rem 1rem rgba(54,139,250,.2);font-size:1.08rem;font-weight:500;text-transform:none}.auth-primary:focus:not([disabled]),.auth-primary:hover:not([disabled]){background:#1677e8}.auth-primary[disabled]{color:#fff;background:#b8d5fa;box-shadow:none;cursor:default}.auth-row{display:flex;align-items:center}.auth-row-end{justify-content:flex-end;min-height:1.5rem;margin-top:-.35rem}.auth-switch{margin:1.3rem 0 0;color:#4a4f57;text-align:center}.auth-agreement{display:flex;align-items:flex-start;max-width:32rem;margin-top:auto;color:#454b54;font-size:.9rem;line-height:1.5}.auth-agreement input{width:1.1rem;height:1.1rem;margin:.12rem .55rem 0 0;accent-color:#368bfa}.auth-agreement a{color:#1677ff}.auth-form-alert{display:flex;align-items:center;margin:0 0 1rem;padding:.75rem .9rem;border-radius:.4rem;color:#bd3434;background:#fff1f1;font-size:.9rem}.auth-form-alert .material-icons{margin-right:.45rem;font-size:1.15rem}.auth-header{position:sticky;top:0;z-index:2;display:grid;grid-template-columns:3.5rem 1fr 3.5rem;align-items:center;height:4.25rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #edf0f4;background:hsla(0,0%,100%,.96)}.auth-header h1{margin:0;color:#252931;font-size:1.2rem;text-align:center}.auth-header .auth-icon-button{color:#252931}.auth-header .material-icons{font-size:1.25rem}.auth-content{width:100%;min-height:calc(100% - 4.25rem);margin:0 auto;padding:2rem}.auth-content-narrow{max-width:40rem}.auth-steps{display:grid;grid-template-columns:repeat(3,1fr);margin:0 0 2.25rem;padding:0;list-style:none}.auth-steps li{position:relative;display:flex;flex-direction:column;align-items:center;color:#b4b9c1;text-align:center}.auth-steps li:not(:last-child):after{content:"";position:absolute;top:1rem;left:calc(50% + 1.25rem);width:calc(100% - 2.5rem);height:2px;background:#d9dde3}.auth-steps li.active:not(:last-child):after{background:#4091ff}.auth-steps span{display:grid;place-items:center;width:2rem;height:2rem;border:1px solid #aeb4bd;border-radius:50%;background:#fff}.auth-steps b{margin-top:.55rem;font-size:.86rem;font-weight:500}.auth-steps .active{color:#368bfa}.auth-steps .active span{border-color:#368bfa;color:#fff;background:#368bfa}.auth-label{display:block;margin:1.25rem 0 .55rem;color:#292d34;font-size:1rem;font-weight:500}.auth-label span{margin-left:.35rem;color:#87909c;font-size:.78rem;font-weight:400}.auth-help,.auth-review-time{margin:-.45rem 0 0;color:#9ba1aa;font-size:.84rem}.auth-upload{display:flex;position:relative;flex-direction:column;align-items:center;justify-content:center;min-height:12rem;overflow:hidden;border:1px dashed #c7ccd4;border-radius:.5rem;background:#fafafa;cursor:pointer}.auth-upload.invalid{border-color:#d94b4b}.auth-add-screenshot input,.auth-upload input{display:none}.auth-upload .material-icons{color:#4091ff;font-size:3.4rem}.auth-upload img{width:100%;height:8rem;object-fit:contain}.auth-upload strong{max-width:90%;margin-top:.65rem;overflow:hidden;color:#252931;font-size:.95rem;text-overflow:ellipsis;white-space:nowrap}.auth-upload small{margin-top:.35rem;color:#a4aab2}.auth-remove-file{margin-top:.5rem;color:#cf3f3f}.auth-review-time{display:flex;align-items:center;justify-content:center;margin-top:.85rem}.auth-review-time .material-icons{margin-right:.35rem;font-size:1rem}.auth-form textarea{width:100%;min-height:10rem;resize:vertical;padding:1rem;border:1px solid #e1e4e9;border-radius:.5rem;box-shadow:none;color:#252931;background:#fff;font:inherit;line-height:1.6}.auth-form textarea:focus{border-color:#4091ff;outline:none;box-shadow:0 0 0 3px rgba(22,119,255,.1)}.auth-form textarea.invalid{border-color:#d94b4b}.auth-counter{margin:-1.7rem .75rem .8rem 0;color:#a0a6af;font-size:.8rem;text-align:right}.auth-screenshot-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem}.auth-add-screenshot,.auth-screenshot{position:relative;aspect-ratio:1;overflow:hidden;border:1px solid #dce0e5;border-radius:.4rem;background:#fff}.auth-screenshot img{width:100%;height:100%;object-fit:cover}.auth-screenshot button{position:absolute;top:.2rem;right:.2rem;display:grid;place-items:center;width:1.4rem;min-width:1.4rem;height:1.4rem;min-height:1.4rem;margin:0;padding:0;border:0;border-radius:50%;color:#fff;background:rgba(0,0,0,.58)}.auth-screenshot button .material-icons{font-size:.9rem}.auth-add-screenshot{display:grid;place-items:center;color:#87909c;cursor:pointer}.auth-code-button{flex:none;width:auto;min-width:6.8rem;height:2.7rem;min-height:2.7rem;margin:0 .55rem 0 0;padding:0 .8rem;border:0;border-radius:.4rem;box-shadow:none;color:#1677ff;background:transparent;font-size:.9rem;text-transform:none}.auth-code-button[disabled]{color:#a7adb6}.auth-register-form .auth-brand{margin-bottom:2rem}.auth-register-page .auth-agreement{margin-top:2rem}.auth-list-form{display:flex;flex-direction:column;min-height:calc(100vh - 8.25rem)}.auth-list-form label{display:grid;grid-template-columns:7rem 1fr auto;align-items:center;width:100%;min-height:4.5rem;padding:0 1rem;border-bottom:1px solid #e4e7eb;background:#fff;box-sizing:border-box}.auth-list-form label span{color:#30343b;font-size:1rem}.auth-list-form input{min-width:0;width:100%;height:4rem;margin:0;border:0;box-shadow:none;color:#252931;background:transparent;font-size:1rem}.auth-list-form input:focus{box-shadow:none}.auth-list-gap{height:1rem;background:#f6f7f9}.auth-sticky-action{margin-top:auto}.auth-identity-check-page .auth-sticky-action{margin-top:2.5rem}.auth-realname-page{background:#f5f6f8}.auth-realname-hero{display:flex;align-items:center;justify-content:space-between;min-height:14rem;padding:2rem max(2rem,calc(50% - 22rem));color:#12357b;background:#cfe1fa}.auth-realname-hero div{display:flex;flex-direction:column}.auth-realname-hero strong{font-size:2.5rem;font-weight:800}.auth-realname-hero span{margin-top:.75rem;color:#53799c;font-size:1.2rem}.auth-realname-hero>.material-icons{color:#4a82ee;font-size:9rem;opacity:.9}.auth-realname-content{width:min(calc(100% - 2rem),44rem);margin:-1.5rem auto 0;padding:0 0 2rem}.auth-realname-content h2{position:relative;z-index:1;margin:0;padding:1.5rem 2rem;border:1px solid #fff;border-radius:.5rem .5rem 0 0;background:#e8f1fd;font-size:1.15rem}.auth-realname-content form{padding:2rem;background:#fff}.auth-realname-content label{display:grid;grid-template-columns:8rem 1fr;align-items:center;min-height:4.5rem;margin-bottom:1rem;padding:0 1rem;border-radius:.5rem;background:#f6f6f7}.auth-realname-content input{min-width:0;width:100%;height:3.8rem;margin:0;border:0;box-shadow:none;color:#30343b;background:transparent;font-size:1rem}.auth-privacy-note{display:flex;margin:1rem 0 0;padding:1rem;border-radius:.4rem;color:#a0a6af;background:#fff;line-height:1.5}.auth-privacy-note .material-icons{margin-right:.5rem;font-size:1.15rem}.auth-reminder-demo{overflow:hidden;background:#f5f6f8}.auth-demo-chat{width:min(100%,42rem);margin:0 auto;padding:2rem}.auth-demo-chat h1{text-align:center}.auth-demo-search{display:flex;align-items:center;justify-content:center;height:2.8rem;margin-bottom:1rem;border-radius:.5rem;color:#969ca5;background:#e9ecf0}.auth-demo-row{display:flex;align-items:center;min-height:4.8rem;border-bottom:1px solid #e3e6ea}.auth-demo-row>span{display:grid;place-items:center;width:3.2rem;height:3.2rem;margin-right:.8rem;border-radius:.5rem;color:#fff;background:#368bfa}.auth-demo-row div{display:flex;flex-direction:column}.auth-demo-row small{margin-top:.3rem;color:#969ca5}.auth-modal-backdrop{position:absolute;inset:0;z-index:3;display:grid;place-items:center;padding:1.5rem;background:rgba(0,0,0,.38)}.auth-modal{width:min(100%,30rem);padding:2rem;border-radius:.5rem;background:#fff;box-shadow:0 1rem 3rem rgba(0,0,0,.18);text-align:center;position:relative}.auth-modal-close{position:absolute;top:.6rem;right:.6rem;min-width:0;height:auto;margin:0;padding:.25rem;color:#9aa1ab;background:none;border:0;box-shadow:none}.auth-modal h2{margin:0 0 1rem;font-size:1.45rem}.auth-modal p{color:#858c96;line-height:1.6;text-align:left}.auth-modal .auth-text-button{margin-top:1rem;color:#7c838d}.auth-pin-content{display:flex;position:relative;flex-direction:column;align-items:center;width:min(100%,32rem);margin:0 auto;padding:6rem 2rem 2rem}.auth-pin-content h1{margin:0 0 3.5rem;font-size:1.8rem}.youth-password-gate{display:flex;position:relative;flex-direction:column;align-items:center;width:min(100%,32rem);margin:0 auto;padding:3rem 2rem 2rem}.youth-password-gate .auth-primary{width:min(100%,24rem);margin-top:3rem}.youth-password-gate .auth-text-button{margin-top:1.2rem}.auth-pin-wrap{position:relative;display:inline-block}.auth-pin-boxes{display:grid;grid-template-columns:repeat(4,4rem);gap:.8rem}.auth-pin-boxes span{display:grid;place-items:center;aspect-ratio:1;border-radius:.35rem;color:#30343b;background:#f2f3f5}.auth-pin-input{position:absolute;inset:0;margin:0;opacity:0}.auth-pin-wrap .auth-pin-input{width:100%;height:100%}.auth-pin-content .auth-primary{width:min(100%,24rem);margin-top:3rem}.auth-toast{position:fixed;z-index:20;bottom:max(2rem,env(safe-area-inset-bottom));left:50%;display:flex;align-items:center;max-width:calc(100% - 2rem);padding:.8rem 1.1rem;border-radius:.4rem;color:#fff;background:rgba(31,35,42,.92);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18);transform:translateX(-50%);animation:auth-toast-in .18s ease-out}.auth-toast .material-icons{margin-right:.5rem;color:#63d68b;font-size:1.15rem}.security-product-links button.flat-button{display:grid;grid-template-columns:2rem 1fr 2rem;align-items:center;width:100%;margin:0;color:var(--clr-text-primary);text-align:left;text-transform:none}.security-product-links .trailing{color:var(--clr-text-tertiary)}@keyframes auth-toast-in{0%{opacity:0;transform:translate(-50%,.5rem)}to{opacity:1;transform:translate(-50%)}}#sidepanel.message-center-panel{width:24rem;min-width:20rem;flex:0 0 24rem;color-scheme:light;background:#fff;color:#242830}#sidepanel.message-center-panel.full-page{width:100%;min-width:0;flex:1 1 auto}.message-center-panel *{box-sizing:border-box;letter-spacing:0}.message-actions-page,.messages-product-page,.system-messages-page{position:relative;display:flex;flex-direction:column;width:100%;min-height:100%;overflow:hidden;background:#fff}.messages-home-header,.messages-sub-header{display:grid;position:relative;z-index:5;grid-template-columns:3.5rem 1fr 3.5rem;align-items:center;flex:none;min-height:4.25rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #f0f1f3;background:#fff}.messages-home-header h1,.messages-sub-header h1{grid-column:2;margin:0;overflow:hidden;color:#22262d;font-size:1.25rem;font-weight:600;text-align:center;text-overflow:ellipsis;white-space:nowrap}.messages-menu-button,.messages-sub-header button{display:grid;place-items:center;width:3.25rem;min-width:3.25rem;height:3.25rem;min-height:3.25rem;margin:0;padding:0;border:0;box-shadow:none;color:#272b32;background:transparent}.messages-menu-button{grid-column:3}.messages-menu-button .material-icons{font-size:1.75rem}.messages-sub-header button .material-icons{font-size:1.2rem}.messages-connection{grid-column:2;display:flex;align-items:center;justify-content:center;font-size:1.2rem;font-weight:600}.messages-spinner{width:1.25rem;height:1.25rem;margin-right:.55rem;border:3px dotted #aab0b8;border-radius:50%;animation:messages-spin .85s linear infinite}@keyframes messages-spin{to{transform:rotate(1turn)}}.messages-home-content{width:100%;min-height:0;overflow-x:hidden;overflow-y:auto;flex:1 1 auto;padding-bottom:1rem}.message-center-panel.full-page .messages-home-content,.message-center-panel.full-page .messages-home-header>*{--messages-content-width:52rem}.messages-search{display:flex;align-items:center;height:2.8rem;margin:.75rem;border:1px solid transparent;border-radius:.5rem;color:#a5abb4;background:#f1f2f4}.message-center-panel.full-page .messages-conversations,.message-center-panel.full-page .messages-frequent,.message-center-panel.full-page .messages-search{width:min(calc(100% - 2rem),52rem);margin-right:auto;margin-left:auto}.messages-search:focus-within{border-color:#4091ff;box-shadow:0 0 0 3px rgba(22,119,255,.08)}.messages-search .material-icons{margin-left:.9rem;font-size:1.35rem}.messages-search input{min-width:0;width:100%;height:2.7rem;margin:0;padding:0 .85rem;border:0;box-shadow:none;color:#252931;background:transparent;font-size:.95rem}.messages-search input:focus{box-shadow:none}.messages-search input::placeholder{color:#a5abb4}.messages-frequent{padding:.3rem 0 .8rem}.messages-frequent h2{margin:0 .75rem .65rem;color:#9399a2;font-size:.88rem;font-weight:400}.messages-frequent-scroll{display:flex;gap:.75rem;overflow-x:auto;padding:0 .75rem .3rem;scrollbar-width:none}.messages-frequent-scroll::-webkit-scrollbar{display:none}.messages-frequent-scroll button{display:flex;flex:0 0 4.4rem;flex-direction:column;align-items:center;width:4.4rem;min-width:4.4rem;height:auto;min-height:0;margin:0;padding:0;border:0;box-shadow:none;color:#656b74;background:transparent;text-transform:none}.messages-frequent-scroll button>span{width:100%;margin-top:.4rem;overflow:hidden;font-size:.78rem;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}.messages-conversations{display:flex;flex-direction:column}.messages-conversation{display:grid;grid-template-columns:3.4rem minmax(0,1fr) auto;align-items:center;width:100%;min-width:0;min-height:4.55rem;margin:0;padding:.45rem .75rem;border:0;border-radius:0;border-bottom:1px solid #f1f2f4;box-shadow:none;color:#252931;background:#fff;text-align:left;text-transform:none}.messages-conversation:focus,.messages-conversation:hover{background:#f6f8fb}.messages-conversation.pinned{background:#f4f6f8}.messages-avatar{display:grid;position:relative;place-items:center;width:3rem;height:3rem;overflow:visible;border-radius:.55rem;color:#fff;background:#3c8df6}.messages-avatar.small{width:3.2rem;height:3.2rem;border-radius:.65rem}.messages-avatar.tone-orange{color:#ff951c;background:#fff5e5}.messages-avatar.tone-green{color:#16ae54;background:#eefaf3}.messages-avatar img{width:100%;height:100%;border-radius:inherit;object-fit:cover}.messages-avatar>.material-icons{font-size:1.8rem}.messages-avatar .offline,.messages-avatar .online{position:absolute;right:-.18rem;bottom:-.12rem;width:.72rem;min-width:.72rem;height:.72rem;min-height:.72rem;border:2px solid #fff;border-radius:50%;background:#1fb36a}.messages-avatar .offline{background:#aeb4bd}.messages-conversation-copy{display:flex;min-width:0;flex-direction:column;justify-content:center;padding:0 .55rem}.messages-conversation-copy small,.messages-conversation-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.messages-conversation-copy strong{color:#272b31;font-size:1rem;font-weight:500;line-height:1.3}.messages-conversation-copy small{margin-top:.2rem;color:#969ca5;font-size:.84rem;font-weight:400;line-height:1.3}.messages-conversation-meta{display:flex;align-self:stretch;min-width:3.4rem;flex-direction:column;align-items:flex-end;justify-content:space-around}.messages-conversation-meta time{color:#9ca2aa;font-size:.72rem;white-space:nowrap}.messages-conversation-meta b{display:grid;place-items:center;min-width:1.25rem;height:1.25rem;padding:0 .3rem;border-radius:.7rem;color:#fff;background:#f34b46;font-size:.7rem;font-weight:500;line-height:1}.messages-conversation-meta .material-icons{color:#a5abb3;font-size:1.1rem}.messages-empty{display:flex;flex-direction:column;align-items:center;padding:4rem 1rem;color:#9ca2aa}.messages-empty .material-icons{font-size:2.4rem}.messages-bottom-nav{display:grid;grid-template-columns:repeat(2,1fr);flex:none;min-height:4.8rem;padding-bottom:env(safe-area-inset-bottom);border-top:1px solid #eceef1;background:#fff}.messages-bottom-nav button{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;height:4.8rem;margin:0;padding:0;border:0;box-shadow:none;color:#9ca2ab;background:transparent;text-transform:none}.messages-bottom-nav button.active{color:#297fea}.messages-bottom-nav .material-icons{font-size:1.55rem}.messages-bottom-nav span{margin-top:.25rem;font-size:.76rem}.message-action-backdrop,.messages-menu-backdrop{position:absolute;inset:0;z-index:10;background:rgba(0,0,0,.43)}.messages-quick-menu{position:absolute;top:calc(3.6rem + env(safe-area-inset-top));right:.65rem;width:12rem;overflow:hidden;border-radius:.4rem;background:#4b4c4f;box-shadow:0 .8rem 2rem rgba(0,0,0,.24)}.messages-quick-menu:before{content:"";position:absolute;top:-.45rem;right:1rem;width:.9rem;height:.9rem;background:#4b4c4f;transform:rotate(45deg)}.messages-quick-menu button{display:grid;position:relative;grid-template-columns:2.2rem 1fr;align-items:center;width:100%;min-height:3.2rem;margin:0;padding:0 1rem;border:0;border-radius:0;box-shadow:none;color:#fff;background:transparent;text-align:left;text-transform:none}.messages-quick-menu button:focus,.messages-quick-menu button:hover{background:hsla(0,0%,100%,.09)}.messages-quick-menu .material-icons{font-size:1.35rem}.messages-quick-menu span{font-size:.98rem}.messages-toast{position:fixed;z-index:30;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.75rem 1.1rem;border-radius:.4rem;color:#fff;background:rgba(34,38,45,.94);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18);text-align:center;transform:translateX(-50%)}.message-actions-page{background:#e8eaee}.message-actions-chat{flex:1 1 auto;min-height:0;overflow-y:auto;padding:1.5rem max(1rem,calc(50% - 25rem));background:#edf0f3 url(../img/bkg/a00.png) repeat}.message-time{margin:0 0 1.5rem;color:#8d949d;font-size:.78rem;text-align:center}.message-demo-row{display:flex;align-items:flex-start;gap:.65rem;margin-bottom:1rem}.message-demo-row.mine{justify-content:flex-end}.message-demo-row .messages-avatar{width:2.7rem;height:2.7rem;flex:0 0 2.7rem}.message-demo-bubble{width:auto;max-width:min(72%,28rem);min-height:2.7rem;height:auto;margin:0;padding:.75rem .9rem;border:0;border-radius:.35rem;box-shadow:0 1px 2px rgba(0,0,0,.08);color:#252931;background:#fff;font-size:.95rem;font-weight:400;line-height:1.5;text-align:left;text-transform:none}.message-demo-bubble.mine{background:#b9eb8f}.message-operation-result{color:#777f89;font-size:.8rem;text-align:center}.message-demo-composer{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2.5rem 2.5rem;align-items:center;flex:none;min-height:4rem;padding:.5rem max(.75rem,calc(50% - 26rem));background:#f7f8fa}.message-demo-composer span{min-width:0;height:2.7rem;padding:0 .8rem;overflow:hidden;border-radius:.35rem;color:#a2a8b0;background:#fff;line-height:2.7rem;white-space:nowrap}.message-demo-composer .material-icons{color:#555c65;font-size:1.45rem;text-align:center}.message-action-backdrop{display:grid;place-items:center}.message-action-menu{width:min(calc(100% - 3rem),23rem);overflow:hidden;border-radius:.5rem;background:#4b4c4f;box-shadow:0 1rem 3rem rgba(0,0,0,.24)}.message-action-menu button{display:grid;grid-template-columns:1fr 2rem;align-items:center;width:calc(100% - 2rem);min-height:3.1rem;margin:0 1rem;padding:0;border:0;border-radius:0;border-bottom:1px solid hsla(0,0%,100%,.1);box-shadow:none;color:#fff;background:transparent;text-align:left;text-transform:none}.message-action-menu button:last-child{border-bottom:0}.message-action-menu button:focus,.message-action-menu button:hover{background:hsla(0,0%,100%,.08)}.message-action-menu span{font-size:.98rem}.message-action-menu .material-icons{font-size:1.3rem}.system-messages-page{background:#f4f5f7}.system-notification-list{width:100%;max-width:52rem;margin:0 auto;overflow-y:auto;padding:1.5rem}.system-notification-list article{margin-bottom:1.5rem}.system-notification-list article>time{display:block;margin-bottom:.75rem;color:#a2a8b0;font-size:.82rem;text-align:center}.system-notification-card{padding:1.3rem;box-shadow:0 .2rem .8rem rgba(37,49,65,.04)}.system-notification-card,.system-notification-load-more{border:1px solid #eceef1;border-radius:.5rem;background:#fff}.system-notification-load-more{display:flex;align-items:center;justify-content:center;width:100%;height:auto;margin:0;padding:.7rem;box-shadow:none;color:#567;font-size:.85rem;text-transform:none}.system-notification-list article.read .system-notification-card{opacity:.82}.system-notification-card header{display:flex;align-items:center;justify-content:space-between}.system-notification-card h2{margin:0;color:#20242b;font-size:1.05rem}.system-notification-card header>span{padding:.15rem .4rem;border-radius:.25rem;color:#fff;background:#f34b46;font-size:.7rem}.system-notification-card p{margin:.85rem 0;color:#555c66;line-height:1.55}.system-notification-card dl{margin:0}.system-notification-card dl div{display:flex;margin:.35rem 0}.system-notification-card dt{color:#242830;font-weight:600}.system-notification-card dd{margin:0;color:#555c66}.system-security-link{display:flex;align-items:center;width:auto;min-width:0;height:auto;min-height:0;margin:.6rem 0 0;padding:0;border:0;box-shadow:none;color:#1683f8;background:transparent;font-size:.9rem;text-transform:none}.system-security-link .material-icons{font-size:1.1rem}.system-notification-card footer{margin-top:1.1rem;color:#767e88;line-height:1.6}#sidepanel.direct-message-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f4f6f8;color:#252931}.direct-message-panel *{box-sizing:border-box;letter-spacing:0}.chat-product-page{display:flex;position:relative;flex-direction:column;width:100%;min-height:100%;overflow:hidden;background:#f4f6f8}.chat-product-header{display:grid;position:relative;z-index:4;grid-template-columns:3.5rem minmax(0,1fr) 3.5rem;align-items:center;flex:none;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #eceef1;background:#fff}.chat-product-header>button{display:grid;place-items:center;width:3.25rem;min-width:3.25rem;height:3.25rem;min-height:3.25rem;margin:0;padding:0;border:0;box-shadow:none;color:#292d34;background:transparent}.chat-product-header>button .material-icons{font-size:1.25rem}.chat-product-header>div{min-width:0;text-align:center}.chat-product-header h1{margin:0;overflow:hidden;color:#23272e;font-size:1.2rem;text-overflow:ellipsis;white-space:nowrap}.chat-product-header span{display:flex;align-items:center;justify-content:center;margin-top:.15rem;color:#7d848e;font-size:.78rem}.chat-product-header span i{width:.55rem;height:.55rem;margin-right:.3rem;border-radius:50%;background:#16bf78}.chat-product-timeline{width:100%;min-height:0;overflow-x:hidden;overflow-y:auto;flex:1 1 auto;padding:1.5rem max(1rem,calc(50% - 27rem));scroll-behavior:smooth}.chat-time{margin:.3rem 0 1.4rem;color:#9299a2;font-size:.8rem;text-align:center}.chat-message-row{display:flex;align-items:flex-start;gap:.65rem;margin:0 0 1rem}.chat-message-row.mine{justify-content:flex-end}.chat-avatar{width:2.8rem;height:2.8rem;overflow:hidden;flex:0 0 2.8rem;border-radius:.5rem;background:#dfe3e8}.chat-avatar img{width:100%;height:100%;object-fit:cover}.chat-message-stack{display:flex;min-width:0;max-width:min(72%,32rem);flex-direction:column}.chat-message-row.mine .chat-message-stack{align-items:flex-end}.chat-bubble{position:relative;min-width:2.8rem;min-height:2.8rem;padding:.72rem .9rem;border-radius:.45rem;color:#282c33;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06);font-size:.98rem;line-height:1.5;overflow-wrap:anywhere}.chat-bubble:before{content:"";position:absolute;top:.85rem;left:-.35rem;width:.7rem;height:.7rem;background:inherit;transform:rotate(45deg)}.chat-bubble.mine{color:#fff;background:#398afa}.chat-bubble.mine:before{right:-.35rem;left:auto}.chat-bubble.image,.chat-bubble.voice{padding:0;background:transparent;box-shadow:none}.chat-bubble.image:before,.chat-bubble.voice:before{display:none}.chat-message-status{display:flex;align-items:center;justify-content:flex-end;min-height:1.2rem;margin-top:.25rem;color:#8d949e;font-size:.72rem}.chat-message-status.failed{color:#df3838}.chat-message-status .material-icons{margin-right:.25rem;font-size:1.15rem}.chat-relation-notice{display:flex;align-items:center;justify-content:center;min-height:1.8rem;margin:.4rem auto 1.5rem;color:#939aa3;font-size:.82rem;line-height:1.5;text-align:center}.chat-relation-notice button{width:auto;min-width:0;height:auto;min-height:0;margin:0 0 0 .5rem;padding:0;border:0;box-shadow:none;color:#2683f5;background:transparent;font-size:inherit;text-transform:none}.chat-request-actions{display:flex;justify-content:center;gap:.75rem;margin:2rem auto}.chat-request-actions button{width:auto;min-width:6rem;height:2.7rem;min-height:2.7rem;margin:0;padding:0 1.2rem;border:1px solid #d9dde3;border-radius:.4rem;box-shadow:none;color:#5d646e;background:#fff;font-size:.9rem;text-transform:none}.chat-request-actions button.primary{border-color:#398afa;color:#fff;background:#398afa}.chat-image-message{position:relative;width:10rem;aspect-ratio:3/4;overflow:hidden;border-radius:.5rem;background:#e2e5e9}.chat-image-message>img{width:100%;height:100%;object-fit:cover}.chat-upload-progress{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;background:rgba(20,24,30,.4)}.chat-upload-progress progress{width:4rem;height:.35rem;border:0;accent-color:#fff}.chat-upload-progress strong{margin-top:.5rem;font-size:.85rem}.chat-voice-message{display:grid;grid-template-columns:1.5rem auto 2.2rem;align-items:center;min-width:8rem;min-height:3rem;padding:0 .85rem;border-radius:.45rem;color:#30343b;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06)}.chat-message-row.mine .chat-voice-message{color:#fff;background:#398afa}.chat-voice-message .material-icons{font-size:1.3rem}.chat-voice-message strong{font-size:1rem;font-weight:500}.chat-voice-message span{height:1rem;background:repeating-linear-gradient(90deg,currentColor 0 2px,transparent 2px 5px);opacity:.55}.chat-file-card{display:grid;grid-template-columns:minmax(0,1fr) 3.4rem;gap:1rem;width:min(100%,24rem);min-width:17rem;padding:1rem;border-radius:.5rem;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06)}.chat-file-card>div{display:flex;min-width:0;flex-direction:column}.chat-file-card strong{overflow:hidden;color:#30343b;line-height:1.45;text-overflow:ellipsis}.chat-file-card small{margin-top:auto;color:#a1a7af}.chat-file-icon{display:grid;place-items:center;width:3.4rem;height:3.4rem;border-radius:.35rem;color:#fff;background:#f13e67;font-size:2rem;font-weight:600}.chat-contact-card{display:flex;width:min(100%,22rem);min-width:16rem;height:auto;min-height:0;margin:0;padding:0;overflow:hidden;flex-direction:column;border:0;border-radius:.5rem;box-shadow:0 1px 2px rgba(31,39,50,.06);color:#30343b;background:#fff;text-align:left;text-transform:none}.chat-contact-card>span{display:flex;align-items:center;width:100%;padding:.85rem}.chat-contact-card img{width:3rem;height:3rem;margin-right:.75rem;border-radius:.45rem;object-fit:cover}.chat-contact-card strong{overflow:hidden;font-size:1rem;text-overflow:ellipsis;white-space:nowrap}.chat-contact-card small{width:calc(100% - 1.7rem);margin:0 .85rem;padding:.65rem 0;border-top:1px solid #eceef1;color:#9da3ac}.chat-permission-banner{display:flex;align-items:center;justify-content:center;flex:none;min-height:2.5rem;padding:.55rem 1rem;color:#7e858e;background:#fff7e8;font-size:.82rem;text-align:center}.chat-permission-banner .material-icons{margin-right:.4rem;color:#dc9221;font-size:1.05rem}.chat-composer{display:grid;grid-template-columns:2.7rem minmax(0,1fr) 2.7rem auto;align-items:center;flex:none;min-height:4.2rem;padding:.55rem max(.75rem,calc(50% - 27rem));border-top:1px solid #e8eaee;background:#f8f9fa}.chat-composer>button{display:grid;place-items:center;width:2.5rem;min-width:2.5rem;height:2.5rem;min-height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;color:#555c65;background:transparent}.chat-composer>button[disabled]{color:#b7bcc3}.chat-composer>button .material-icons{font-size:1.45rem}.chat-composer input{min-width:0;width:100%;height:2.8rem;margin:0;padding:0 .8rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:#252931;background:#fff;font-size:.93rem}.chat-composer input:focus{border-color:#4091ff;box-shadow:0 0 0 3px rgba(22,119,255,.08)}.chat-composer input[disabled]{color:#9da3ab;background:#f1f2f4}.chat-composer .chat-send-button{width:auto;min-width:3.8rem;margin-left:.25rem;padding:0 .75rem;border-radius:.35rem;color:#fff;background:#398afa;font-size:.82rem;text-transform:none}.chat-attachment-panel{display:grid;grid-template-columns:repeat(4,minmax(4rem,1fr));gap:1rem;flex:none;min-height:13rem;padding:1rem max(1rem,calc(50% - 24rem)) max(1rem,env(safe-area-inset-bottom));border-top:1px solid #e3e6ea;background:#f1f2f4}.chat-attachment-panel button{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;width:100%;height:auto;min-height:5.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#6d747e;background:transparent;text-transform:none}.chat-attachment-panel button>span{display:grid;place-items:center;width:3.8rem;height:3.8rem;border-radius:.5rem;color:#4d535b;background:#fff}.chat-attachment-panel .material-icons{font-size:1.55rem}.chat-attachment-panel small{margin-top:.45rem;font-size:.78rem}.chat-toast{position:fixed;z-index:30;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.75rem 1.1rem;border-radius:.4rem;color:#fff;background:rgba(34,38,45,.94);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18);text-align:center;transform:translateX(-50%)}#sidepanel.message-composer-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;color:#252931;background:#f4f6f8}.message-composer-panel *{box-sizing:border-box;letter-spacing:0}.message-composer-page .chat-product-header span{margin-top:.1rem}.compose-timeline{padding-bottom:2rem}.compose-avatar{display:grid;place-items:center;width:2.7rem;height:2.7rem;overflow:hidden;flex:0 0 2.7rem;border-radius:.45rem;color:#fff;background:#4789dc}.compose-avatar img{width:100%;height:100%;object-fit:cover}.compose-avatar .material-icons{font-size:1.35rem}.compose-message-row{display:flex;align-items:flex-start;gap:.65rem;width:100%;margin-bottom:1rem}.compose-message-row.mine{justify-content:flex-end}.compose-text-bubble{position:relative;max-width:min(70%,32rem);min-height:2.7rem;padding:.7rem .9rem;border-radius:.45rem;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06);line-height:1.5;overflow-wrap:anywhere}.compose-text-bubble.mine{color:#fff;background:#398afa}.compose-mention{color:#1976d2;font-weight:500}.compose-voice-bubble{display:grid;grid-template-columns:1.5rem minmax(3rem,8rem) auto;align-items:center;gap:.4rem;width:auto;min-width:10rem;height:3rem;min-height:3rem;margin:0;padding:0 .85rem;border:0;border-radius:.45rem;box-shadow:0 1px 2px rgba(31,39,50,.06);color:#30343b;background:#fff}.compose-voice-bubble.mine{color:#fff;background:#398afa}.compose-voice-bubble>i:last-child{position:absolute;width:.45rem;height:.45rem;margin-left:10.3rem;border-radius:50%;background:#ef3f4d}.compose-wave{height:1rem;opacity:.55;background:repeating-linear-gradient(90deg,currentColor 0 2px,transparent 2px 5px)}.compose-media-card,.compose-video-card{position:relative;width:11rem;aspect-ratio:4/3;overflow:hidden;border:0;border-radius:.45rem;background:#dfe3e8}.compose-video-card{height:auto;min-height:0;margin:0;padding:0;box-shadow:none}.compose-media-card>img,.compose-video-card>img{width:100%;height:100%;object-fit:cover}.compose-video-card>.material-icons{position:absolute;top:50%;left:50%;color:#fff;font-size:2.8rem;filter:drop-shadow(0 2px 5px rgba(0,0,0,.3));transform:translate(-50%,-50%)}.compose-video-card>small{position:absolute;right:.45rem;bottom:.35rem;padding:.1rem .3rem;border-radius:.2rem;color:#fff;background:rgba(0,0,0,.55)}.compose-media-state{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#fff;background:rgba(25,29,35,.52)}.compose-media-state .material-icons{font-size:1.7rem}.compose-media-state strong{margin:.3rem 0;font-size:.75rem}.compose-media-state progress{width:5rem;height:.3rem;accent-color:#fff}.compose-file-card{display:grid;grid-template-columns:3rem minmax(0,1fr) 1.7rem;align-items:center;gap:.8rem;width:min(25rem,calc(100vw - 8rem));min-height:5rem;padding:.8rem;border-radius:.45rem;background:#fff;box-shadow:0 1px 2px rgba(31,39,50,.06)}.compose-file-type{display:grid;place-items:center;width:3rem;height:3.4rem;border-radius:.3rem;color:#fff;background:#e74664;font-size:.72rem;font-weight:700}.compose-file-card>div,.compose-upload-list>div>div{display:flex;min-width:0;flex-direction:column}.compose-file-card strong,.compose-upload-list strong{overflow:hidden;color:#30343b;text-overflow:ellipsis;white-space:nowrap}.compose-file-card small,.compose-upload-list small{margin-top:.35rem;color:#9097a0}.compose-file-card progress,.compose-upload-list progress{width:100%;height:.3rem;margin-top:.35rem;accent-color:#398afa}.compose-toolbar{display:grid;grid-template-columns:2.8rem minmax(0,1fr) 2.8rem auto;align-items:center;min-height:4.2rem;padding:.55rem max(.6rem,calc(50% - 27rem));border-top:1px solid #e4e7eb;background:#f8f9fa}.compose-toolbar>button{display:grid;place-items:center;width:2.6rem;min-width:2.6rem;height:2.6rem;min-height:2.6rem;margin:0;padding:0;border:0;box-shadow:none;color:#555c65;background:transparent}.compose-toolbar input{width:100%;min-width:0;height:2.8rem;margin:0;padding:0 .8rem;border:1px solid #e4e7eb;border-radius:.35rem;box-shadow:none;color:#252931;background:#fff}.compose-confirm-send,.compose-target-footer button,.compose-toolbar .compose-send,.compose-upload-page footer button{width:auto;min-width:3.8rem;padding:0 .85rem;border:0;border-radius:.35rem;color:#fff;background:#398afa;text-transform:none}.compose-toolbar .compose-hold-button{width:100%;color:#30343b;border:1px solid #e1e4e8;background:#fff;font-size:.92rem}.compose-emoji-panel{position:relative;flex:none;min-height:14rem;padding:0 1rem max(1rem,env(safe-area-inset-bottom));border-top:1px solid #e2e5e9;background:#f4f5f7}.compose-emoji-panel nav{display:flex;gap:.25rem;height:3rem;border-bottom:1px solid #e1e4e8}.compose-emoji-delete,.compose-emoji-panel nav button{width:3rem;min-width:3rem;height:3rem;min-height:3rem;margin:0;padding:0;border:0;box-shadow:none;color:#7d848d;background:transparent}.compose-emoji-panel nav button.active{color:#398afa;border-bottom:2px solid #398afa}.compose-emoji-panel>div{display:grid;grid-template-columns:repeat(9,minmax(2.5rem,1fr));gap:.35rem;max-width:52rem;padding:.8rem 0;margin:auto}.compose-emoji-panel>div button{display:grid;place-items:center;width:100%;min-width:2.5rem;height:2.5rem;min-height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent;font-size:1.4rem}.compose-emoji-delete{position:absolute;right:1rem;bottom:max(.5rem,env(safe-area-inset-bottom));border-radius:.3rem;background:#fff}.compose-record-overlay{position:fixed;z-index:20;top:50%;left:50%;display:flex;align-items:center;justify-content:center;width:12rem;min-height:11rem;padding:1.2rem;border-radius:.5rem;color:#fff;background:rgba(34,39,47,.9);box-shadow:0 1rem 3rem rgba(0,0,0,.24);flex-direction:column;transform:translate(-50%,-50%)}.compose-record-overlay.cancel{background:rgba(204,55,62,.94)}.compose-record-overlay>.material-icons{font-size:3rem}.compose-record-overlay strong{margin-top:.65rem;font-size:.8rem}.compose-record-overlay small{margin-top:.35rem;opacity:.8}.compose-meter{display:flex;align-items:center;gap:.18rem;height:1.8rem;margin-top:.4rem}.compose-meter i{width:.18rem;border-radius:.1rem;background:#fff}.compose-forward-page,.compose-picker-page,.compose-upload-page{display:flex;width:100%;min-height:100%;flex-direction:column;color:#252931;background:#f6f7f9}.compose-picker-header{display:grid;grid-template-columns:4.5rem minmax(0,1fr) 4.5rem;align-items:center;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #ebedf0;background:#fff}.compose-picker-header h1{margin:0;font-size:1.12rem;text-align:center}.compose-picker-header button{width:100%;min-width:0;height:3.2rem;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#30343b;background:transparent}.compose-picker-header button.text{color:#287fe5;font-size:.88rem;text-transform:none}.compose-picker-header button[disabled]{color:#b4bac1}.compose-search{display:flex;align-items:center;height:2.8rem;margin:.8rem max(1rem,calc(50% - 24rem));padding:0 .75rem;border-radius:.35rem;color:#949ba4;background:#fff}.compose-search .material-icons{font-size:1.25rem}.compose-search input{width:100%;min-width:0;height:100%;margin:0;padding:0 .55rem;border:0;box-shadow:none;background:transparent}.compose-section-title{width:min(100%,48rem);margin:0 auto;padding:.5rem 1rem;color:#8d949d;font-size:.78rem}.compose-picker-list{width:min(100%,48rem);margin:0 auto;background:#fff}.compose-picker-list>button{display:grid;grid-template-columns:3rem minmax(0,1fr) 2rem;align-items:center;gap:.75rem;width:100%;min-width:0;min-height:4.4rem;margin:0;padding:.55rem 1rem;border:0;border-bottom:1px solid #eef0f2;border-radius:0;box-shadow:none;color:#252931;background:#fff;text-align:left;text-transform:none}.compose-picker-list>button>span:nth-child(2){display:flex;min-width:0;flex-direction:column}.compose-picker-list strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.compose-picker-list small{margin-top:.2rem;color:#969da6;font-size:.76rem}.compose-check,.compose-checkbox{display:grid;place-items:center;width:1.4rem;height:1.4rem;border:1px solid #c9ced4;border-radius:50%;color:#fff;background:#fff}.compose-check.checked,.compose-checkbox.checked{border-color:#398afa;background:#398afa}.compose-check .material-icons,.compose-checkbox .material-icons{font-size:.95rem}.compose-select-row{display:flex;align-items:flex-start;width:100%}.compose-select-row.selectable{gap:.7rem}.compose-select-row.selectable .compose-message-row{width:calc(100% - 2.2rem)}.compose-check{flex:0 0 1.4rem;min-width:1.4rem;min-height:1.4rem;margin:.65rem 0 0;padding:0;box-shadow:none}.compose-selection-bar{display:grid;grid-template-columns:4rem 1fr 5rem;align-items:center;min-height:3.2rem;border-bottom:1px solid #e6e9ed;background:#fff;text-align:center}.compose-selection-bar button{width:100%;min-width:0;min-height:2.8rem;margin:0;padding:0;border:0;box-shadow:none;color:#398afa;background:transparent;font-size:.78rem;text-transform:none}.compose-batch-actions{display:grid;grid-template-columns:repeat(3,1fr);flex:none;min-height:4.6rem;padding-bottom:env(safe-area-inset-bottom);border-top:1px solid #e3e6ea;background:#fff}.compose-batch-actions button{display:flex;align-items:center;justify-content:center;width:100%;min-width:0;min-height:4.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#515862;background:transparent;flex-direction:column;text-transform:none}.compose-batch-actions button[disabled]{color:#b8bdc4}.compose-batch-actions span{margin-top:.25rem;font-size:.72rem}.compose-upload-page>main{width:min(100%,48rem);min-height:0;margin:0 auto;padding:1.2rem;overflow-y:auto;flex:1 1 auto}.compose-upload-drop{display:flex;align-items:center;justify-content:center;min-height:11rem;border:1px dashed #b9c4d1;border-radius:.45rem;color:#4f5863;background:#fff;cursor:pointer;flex-direction:column}.compose-upload-drop input{position:absolute;width:1px;height:1px;opacity:0}.compose-upload-drop .material-icons{margin-bottom:.5rem;color:#398afa;font-size:2.6rem}.compose-upload-drop small{margin-top:.35rem;color:#9299a2}.compose-forward-confirm h2,.compose-upload-list h2{margin:1.4rem 0 .7rem;font-size:.92rem}.compose-upload-list>div{display:grid;grid-template-columns:3rem minmax(0,1fr) 2rem;align-items:center;gap:.8rem;padding:.8rem;border-bottom:1px solid #eceef1;background:#fff}.compose-upload-list button{width:2rem;min-width:2rem;height:2rem;min-height:2rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.compose-target-footer,.compose-upload-page>footer{display:flex;align-items:center;justify-content:flex-end;min-height:4.5rem;padding:.6rem max(1rem,calc(50% - 24rem));border-top:1px solid #e3e6ea;background:#fff}.compose-target-footer button,.compose-upload-page footer button{height:2.8rem;min-height:2.8rem;margin:0}#sidepanel.contact-management-panel,#sidepanel.group-management-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;color:#252931;background:#f5f6f8}.contact-management-panel *,.group-management-panel *{box-sizing:border-box;letter-spacing:0}.group-page,.people-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;flex-direction:column;background:#f5f6f8}.group-chat-header,.group-header,.people-header{display:grid;z-index:3;grid-template-columns:4.5rem minmax(0,1fr) 4.5rem;align-items:center;flex:none;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e9ebee;background:#fff}.group-chat-header h1,.group-header h1,.people-header h1{margin:0;overflow:hidden;font-size:1.15rem;text-align:center;text-overflow:ellipsis;white-space:nowrap}.group-chat-header>button,.group-header>button,.people-header>button{display:grid;place-items:center;width:100%;min-width:0;height:3.2rem;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#2e333a;background:transparent}.group-header>button.text,.people-header>button.text{color:#247ee6;font-size:.86rem;text-transform:none}.group-search,.people-search{display:flex;align-items:center;flex:none;height:2.8rem;margin:.8rem max(1rem,calc(50% - 25rem));padding:0 .75rem;border-radius:.35rem;color:#9299a2;background:#fff}.group-search .material-icons,.people-search .material-icons{font-size:1.2rem}.group-search input,.people-search input{width:100%;min-width:0;height:100%;margin:0;padding:0 .5rem;border:0;box-shadow:none;background:transparent}.group-avatar,.people-avatar{display:grid;place-items:center;align-content:center;justify-content:center;width:3rem;height:3rem;overflow:hidden;flex:0 0 3rem;border-radius:.45rem;color:#fff;background:#4389df}.group-avatar img,.people-avatar img{width:100%;height:100%;object-fit:cover}.group-avatar .material-icons,.people-avatar .material-icons{font-size:1.45rem}.group-page>main,.people-page>main,.people-scroll{min-height:0;overflow-y:auto;flex:1 1 auto}.group-governance>section,.group-settings>section,.people-add-actions,.people-entry-list,.people-group,.people-settings>section{width:min(100%,50rem);margin:0 auto .8rem;background:#fff}.people-entry-list>button{display:grid;grid-template-columns:3rem minmax(0,1fr) auto 1.5rem;align-items:center;gap:.75rem;width:100%;min-height:4.3rem;margin:0;padding:.55rem 1rem;border:0;border-bottom:1px solid #eef0f2;border-radius:0;box-shadow:none;color:#2d3239;background:#fff;text-align:left;text-transform:none}.people-entry-list>button>.material-icons:last-child{grid-column:4}.people-entry-list em{display:grid;place-items:center;min-width:1.2rem;height:1.2rem;padding:0 .35rem;border-radius:.6rem;color:#fff;background:#ef4653;font-size:.7rem;font-style:normal;line-height:1}.people-group h2{margin:0;padding:.45rem 1rem;color:#868d97;background:#f5f6f8;font-size:.78rem}.people-group>button{display:flex;align-items:center;gap:.8rem;width:100%;min-height:4.2rem;margin:0;padding:.55rem 1rem;border:0;border-bottom:1px solid #eef0f2;border-radius:0;box-shadow:none;color:#2d3239;background:#fff;text-align:left;text-transform:none}.group-admin-page article>span:nth-child(2),.group-list button>span:nth-child(2),.group-member-picker>button>span:nth-child(2),.group-muted-list article>span:nth-child(2),.group-request-list article>div,.people-add-actions button>span,.people-block-list article>span:nth-child(2),.people-group>button>span:nth-child(2),.people-request-list article>div,.people-search-result button>span:nth-child(2){display:flex;min-width:0;flex-direction:column;flex:1 1 auto}.group-admin-page strong,.group-list strong,.group-member-picker strong,.group-muted-list strong,.group-request-list strong,.people-add-actions strong,.people-block-list strong,.people-group strong,.people-request-list strong,.people-search-result strong{line-height:1.3}.group-admin-page small,.group-list small,.group-member-picker small,.group-muted-list small,.group-request-list small,.people-add-actions small,.people-block-list small,.people-group small,.people-request-list small,.people-search-result small{margin-top:.2rem;color:#9299a2;font-size:.75rem;line-height:1.3}.people-index{position:absolute;z-index:2;top:27.5rem;right:.35rem;display:flex;gap:.2rem;flex-direction:column}.people-index a{color:#6a727d;font-size:.68rem;text-decoration:none}.group-admin-page,.group-muted-list,.group-request-list,.people-block-list,.people-request-list{width:min(100%,50rem);margin:0 auto;background:#fff}.group-admin-page article,.group-muted-list article,.group-request-list article,.people-block-list article,.people-request-list article{display:flex;align-items:center;gap:.75rem;min-height:5.2rem;padding:.7rem 1rem;border-bottom:1px solid #eceef1}.people-request-list article[role=button]{cursor:pointer}.group-request-list p,.people-request-list p{max-width:24rem;margin:.2rem 0;overflow:hidden;color:#69717b;font-size:.8rem;text-overflow:ellipsis;white-space:nowrap}.group-request-list article>span,.people-request-list article>span{display:flex;gap:.4rem}.group-admin-page article button,.group-muted-list button,.group-request-list button,.people-block-list button,.people-request-list button{width:auto;min-width:3.3rem;height:2.1rem;min-height:2.1rem;margin:0;padding:0 .65rem;border:1px solid #d8dce1;border-radius:.3rem;box-shadow:none;color:#69717b;background:#fff;font-size:.76rem;text-transform:none}.group-request-list button.primary,.people-request-list button.primary{border-color:#398afa;color:#fff;background:#398afa}.group-request-list em,.people-request-list em{color:#969da5;font-size:.78rem;font-style:normal}.people-add-actions{margin-top:.5rem}.people-add-actions button{display:grid;grid-template-columns:2.7rem minmax(0,1fr) 1.5rem;align-items:center;gap:.7rem;width:100%;min-height:4.4rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#2d3239;background:#fff;text-align:left;text-transform:none}.people-add-actions button>.material-icons:first-child{color:#398afa;font-size:1.7rem}.people-my-account{color:#9299a2;font-size:.8rem;text-align:center}.people-search-result{width:min(100%,50rem);margin:0 auto}.people-search-result h2{padding:0 1rem;color:#8b929b;font-size:.78rem}.people-search-result button{display:flex;align-items:center;gap:.8rem;width:100%;min-height:4.7rem;margin:0;padding:.7rem 1rem;border:0;box-shadow:none;color:#2d3239;background:#fff;text-align:left;text-transform:none}.group-qr-page main,.people-qr-page main{display:flex;align-items:center;justify-content:center;padding:2rem 1rem;flex-direction:column}.group-qr-card,.people-qr-card{width:min(100%,23rem);padding:1.4rem;border-radius:.45rem;background:#fff;box-shadow:0 .8rem 2.2rem rgba(35,43,54,.1);text-align:center}.group-qr-card>div:first-child,.people-qr-profile{display:flex;align-items:center;gap:.75rem;text-align:left}.group-qr-card>div:first-child>span:nth-child(2),.people-qr-profile>span:nth-child(2){display:flex;flex-direction:column}.group-qr-card small,.people-qr-profile small{margin-top:.2rem;color:#8f969f}.group-qrcode,.people-qrcode{width:190px;height:190px;margin:1.5rem auto 1rem}.group-qrcode img,.people-qrcode img{width:100%;height:100%}.group-qr-card p,.people-qr-card p{margin:.6rem 0 0}.group-qr-actions,.people-qr-actions{display:flex;gap:1rem;margin-top:1.5rem}.group-qr-actions button,.people-qr-actions button{display:flex;align-items:center;justify-content:center;width:8.5rem;min-width:0;min-height:2.8rem;margin:0;border:0;border-radius:.35rem;box-shadow:none;color:#3b424b;background:#fff;text-transform:none}.group-qr-actions .material-icons,.people-qr-actions .material-icons{margin-right:.4rem;font-size:1.2rem}.people-profile,.people-verify{width:min(100%,42rem);margin:0 auto;padding:2rem 1rem;text-align:center}.people-verify>.people-avatar{width:4.5rem;height:4.5rem;margin:0 auto}.people-verify h2{margin:.8rem 0 1.8rem}.people-verify label{display:flex;padding:1rem;background:#fff;text-align:left;flex-direction:column}.people-verify textarea{min-height:7rem;margin:.7rem 0;padding:.7rem;border:1px solid #e3e6ea;border-radius:.35rem;box-shadow:none;resize:vertical}.people-verify label small{color:#989fa7;text-align:right}.people-verify-actions{display:flex;gap:.6rem;margin-top:1.2rem}.people-verify-actions button{flex:1;min-height:3rem;border:0;border-radius:.35rem;box-shadow:none;background:var(--clr-background-blue-gray-50);text-transform:none}.people-verify-actions .people-primary{margin:0}.people-section-title{margin:.6rem 1rem 0;color:var(--clr-text-secondary);font-size:.85rem;font-weight:400}.people-empty-hint{padding:1.5rem 1rem;text-align:center;color:var(--clr-text-secondary)}.people-remark-edit{display:flex;gap:.5rem;padding:.6rem 1rem}.people-remark-edit input{flex:1;border:1px solid #e3e6ea;border-radius:.35rem;padding:.4rem .6rem}.people-profile dd.muted,.people-search-result em{color:var(--clr-text-secondary)}.people-search-result em{flex:none;padding:.35rem .9rem;border-radius:1rem;font-style:normal;font-size:.85rem;background:var(--clr-background-blue-gray-50)}.people-search-result em.people-add-cta{color:var(--clr-primary-accent)}.people-primary{display:flex;align-items:center;justify-content:center;width:100%;min-height:3rem;margin:1.2rem 0 0;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#398afa;text-transform:none}.people-primary .material-icons{margin-right:.4rem}.people-profile>section:first-child{display:grid;grid-template-columns:4.5rem minmax(0,1fr) 2rem;align-items:center;gap:1rem;padding:1.2rem;background:#fff;text-align:left}.people-profile>section:first-child .people-avatar{width:4.5rem;height:4.5rem}.people-profile h2,.people-profile p{margin:.2rem 0}.people-profile p{color:#858c95;font-size:.82rem}.people-profile dl{margin:.8rem 0;padding:0 1rem;background:#fff;text-align:left}.people-profile dl>div{display:grid;grid-template-columns:6rem 1fr;padding:.9rem 0;border-bottom:1px solid #eef0f2}.people-profile dd,.people-profile dt{margin:0}.people-profile dd{color:#707883}.people-profile-actions{display:grid;grid-template-columns:1fr 1fr;gap:.8rem}.people-profile-actions button{min-height:3rem;margin:0;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;color:#398afa;background:#fff;text-transform:none}.people-profile-actions button.people-primary{border-color:#398afa;color:#fff;background:#398afa}.group-governance,.group-settings,.people-settings{padding:.8rem 0 2rem}.people-settings-profile{display:flex;align-items:center;gap:.8rem;padding:.8rem 1rem}.group-governance section>button,.group-governance section>div,.group-profile>button,.group-profile>label,.group-settings section>button,.group-settings section>div,.people-profile-qr-row,.people-settings section>button,.people-settings section>div{display:flex;align-items:center;width:100%;min-height:3.7rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-governance section>button>span,.group-settings section>button>span,.group-settings section>div>span,.people-settings section>button>span,.people-settings section>div>span{flex:1 1 auto}.group-settings section small,.people-settings section small{min-width:0;margin-left:auto;overflow:hidden;color:#949ba4;text-overflow:ellipsis;white-space:nowrap}.group-switch,.people-switch{position:relative;width:2.8rem;min-width:2.8rem;height:1.55rem;min-height:1.55rem;margin:0;padding:0;border:0;border-radius:.8rem;box-shadow:none;background:#c7ccd2}.group-switch i,.people-switch i{position:absolute;top:.15rem;left:.15rem;width:1.25rem;height:1.25rem;border-radius:50%;background:#fff;transition:transform .18s ease}.group-switch.checked,.people-switch.checked{background:#398afa}.group-switch.checked i,.people-switch.checked i{transform:translateX(1.25rem)}.group-danger,.people-danger{display:block;width:min(calc(100% - 2rem),48rem);min-height:3rem;margin:1rem auto;border:0;border-radius:.35rem;box-shadow:none;color:#df3f48;background:#fff;text-transform:none}.group-empty,.people-empty{display:flex;align-items:center;justify-content:center;min-height:23rem;color:#8d949d;flex-direction:column;text-align:center}.group-empty>.material-icons,.people-empty .material-icons{margin-bottom:.8rem;color:#b3bac2;font-size:4rem}.group-modal-backdrop,.group-sheet-backdrop,.people-sheet-backdrop{position:absolute;z-index:20;inset:0;display:flex;align-items:flex-end;justify-content:center;background:rgba(28,33,40,.44)}.group-confirm-sheet,.group-source-sheet,.people-confirm-sheet{width:min(100%,36rem);padding:1.2rem;border-radius:.5rem .5rem 0 0;background:#fff;text-align:center}.people-confirm-sheet>i{display:block;width:2.5rem;height:.25rem;margin:0 auto 1rem;border-radius:.2rem;background:#d6dae0}.group-confirm-sheet h2,.group-source-sheet h2,.people-confirm-sheet h2{margin:.2rem 0 .8rem;font-size:1.08rem}.group-confirm-sheet p,.people-confirm-sheet p{color:#757d87;line-height:1.6}.group-password-input{width:100%;height:2.75rem;margin-top:.6rem;padding:0 .9rem;border:1px solid #dde1e6;border-radius:.35rem;font-size:1rem;text-align:left}.group-confirm-sheet button,.group-source-sheet button,.people-confirm-sheet button{width:100%;min-height:3rem;margin:.45rem 0 0;border:0;border-radius:.35rem;box-shadow:none;color:#31363d;background:#f2f3f5;text-transform:none}.group-confirm-sheet button.danger,.people-confirm-sheet button.danger{color:#fff;background:#e3444d}.group-source-sheet button{display:flex;align-items:center;justify-content:center}.group-source-sheet button .material-icons{margin-right:.5rem}.group-tabs{display:grid;grid-template-columns:repeat(3,1fr);width:min(100%,50rem);margin:0 auto;border-bottom:1px solid #e4e7eb;background:#fff}.group-tabs button{min-height:2.8rem;margin:0;padding:0;border:0;border-bottom:2px solid transparent;border-radius:0;box-shadow:none;color:#747c86;background:transparent;font-size:.8rem;text-transform:none}.group-tabs button.active{border-bottom-color:#398afa;color:#247ee6}.group-list{width:min(100%,50rem);margin:0 auto;background:#fff}.group-settings-header{display:grid;grid-template-columns:3.6rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:100%;min-height:5rem;margin:0;padding:.8rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-settings-header .group-avatar{width:3.6rem;height:3.6rem}.group-settings-header>span:not(.group-avatar){display:flex;flex-direction:column;gap:.15rem;min-width:0}.group-settings-header strong{line-height:1.3}.group-settings-header small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#9299a2;line-height:1.3}.group-list>button{display:grid;grid-template-columns:3.2rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:100%;min-height:4.7rem;margin:0;padding:.7rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-empty p{max-width:19rem;margin:.5rem auto 1rem;line-height:1.5}.group-empty button{width:auto;min-height:2.7rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#398afa;text-transform:none}.group-modal-backdrop{align-items:center}.group-modal{width:min(calc(100% - 2rem),28rem);padding:1.2rem;border-radius:.5rem;background:#fff}.group-modal h2{margin:0 0 1rem;font-size:1.1rem}.group-modal label{display:flex;flex-direction:column}.group-modal input{height:2.8rem;margin:.5rem 0;padding:0 .7rem;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none}.group-modal p{color:#858c96;font-size:.78rem}.group-modal footer{display:flex;justify-content:flex-end;gap:.6rem}.group-modal footer button{width:auto;min-width:4.5rem;min-height:2.6rem;margin:0;border:0;border-radius:.3rem;box-shadow:none;color:#59616b;background:#eef0f2;text-transform:none}.group-modal footer button.primary{color:#fff;background:#398afa}.group-chat-header{grid-template-columns:3.5rem minmax(0,1fr) 3.5rem}.group-chat-header>div{text-align:center}.group-chat-header small{color:#8c939c}.group-top-notice{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 1.5rem;align-items:center;gap:.6rem;width:min(100%,54rem);min-height:3.7rem;margin:0 auto;padding:.5rem 1rem;border:0;border-bottom:1px solid #e8eaed;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-top-notice>.material-icons:first-child{color:#398afa}.group-top-notice.announcement>.material-icons:first-child{color:#f29b38}.group-top-notice span{display:flex;min-width:0;flex-direction:column}.group-top-notice small{margin-top:.15rem;overflow:hidden;color:#8d949d;font-size:.75rem;text-overflow:ellipsis;white-space:nowrap}.group-chat-timeline{width:100%;min-height:0;padding:1.5rem max(1rem,calc(50% - 27rem));overflow-y:auto;flex:1 1 auto}.group-system-event{width:fit-content;max-width:80%;margin:.8rem auto;padding:.35rem .6rem;border-radius:.3rem;color:#878e97;background:#e8eaed;font-size:.75rem;text-align:center}.group-chat-message{display:flex;gap:.7rem;margin-top:1rem}.group-chat-message>div{max-width:70%}.group-chat-message>div>span{color:#7d858f;font-size:.75rem}.group-chat-message em{margin-left:.35rem;padding:.08rem .3rem;border-radius:.2rem;color:#247ee6;background:#eaf3ff;font-size:.65rem;font-style:normal}.group-chat-message.owner em{color:#d57b17;background:#fff1df}.group-chat-message p{margin:.3rem 0 0;padding:.7rem .9rem;border-radius:.4rem;background:#fff;line-height:1.5}.group-chat-composer{display:grid;grid-template-columns:2.6rem minmax(0,1fr) 2.6rem 2.6rem;align-items:center;flex:none;min-height:4rem;padding:.5rem max(.5rem,calc(50% - 27rem));border-top:1px solid #e2e5e9;background:#f8f9fa}.group-chat-composer button{width:2.5rem;min-width:2.5rem;height:2.5rem;min-height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.group-chat-composer input{height:2.7rem;margin:0;padding:0 .7rem;border:1px solid #e1e4e8;border-radius:.35rem;box-shadow:none;background:#fff}.group-invite-card{width:min(100%,23rem);margin:3rem auto;padding:1rem;border-radius:.45rem;background:#fff;box-shadow:0 .5rem 1.5rem rgba(34,42,52,.08)}.group-invite-card>div{display:flex;align-items:center;gap:.8rem}.group-invite-card>div>span{display:flex;flex-direction:column}.group-invite-card p,.group-invite-card small{color:#858c95}.group-invite-card button{width:100%;min-height:2.8rem;margin:.8rem 0 0;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#398afa;text-transform:none}.group-invite-card button[disabled]{color:#7e858e;background:#e8eaed}.group-announcement-detail{width:min(100%,42rem);margin:0 auto;padding:2rem 1.2rem;background:#fff}.group-announcement-detail>.material-icons{color:#f19b38;font-size:2.5rem}.group-announcement-detail h2{margin:.7rem 0 1.2rem}.group-announcement-detail>p{color:#555d67;line-height:1.8}.group-announcement-detail>small{display:block;margin-top:1rem;color:#3a8aec}.group-settings section>.group-member-section-title{min-height:2.8rem;padding:.75rem 1rem .35rem;border-bottom:0;gap:.5rem}.group-member-section-title>strong{color:#30353c;font-size:1rem;line-height:1.3}.group-member-section-title>small{margin-left:auto;color:#949ba4;line-height:1.3}.group-settings section>.group-member-grid{display:flex;flex-wrap:wrap;align-items:flex-start;gap:.9rem .5rem;min-height:0;padding:.25rem 1rem 1rem;border-bottom:0}.group-member-grid>button{display:flex;flex-direction:column;align-items:center;gap:.35rem;width:4.4rem;min-width:0;height:auto;min-height:0;margin:0;padding:0;border:0;box-shadow:none;color:#68707a;background:transparent;line-height:1.3;text-transform:none}.group-member-grid>button>small{width:100%;overflow:hidden;color:#68707a;text-align:center;text-overflow:ellipsis;white-space:nowrap}.group-member-grid .group-avatar,.group-member-tile-action{width:3.6rem;height:3.6rem;flex:0 0 3.6rem}.group-member-tile-action{display:grid;place-items:center;width:3.6rem;height:3.6rem;border-radius:.45rem;color:#98a0aa;background:#f0f2f5}.group-member-tile-action>.material-icons{font-size:1.5rem}.group-profile{width:min(100%,50rem);margin:0 auto;padding-top:.8rem}.group-profile>button,.group-profile>label{gap:.7rem}.group-profile>button>span:not(.group-avatar),.group-profile>label>span{min-width:6rem}.group-profile>button>small,.group-profile>label>input{min-width:0;margin-left:auto;overflow:hidden;color:#818892;text-overflow:ellipsis;white-space:nowrap}.group-profile>label>input{width:100%;height:2.5rem;margin:0;padding:0 .5rem;border:0;box-shadow:none;text-align:right}.group-profile-avatar .group-avatar{width:3.5rem;height:3.5rem}.group-profile-avatar>i:last-child,.group-profile-qr>i:first-of-type{margin-left:auto}.group-edit-text{width:min(100%,42rem);margin:0 auto;padding:1rem}.group-edit-text input,.group-edit-text textarea{width:100%;margin:0;padding:.8rem;border:1px solid #e1e4e8;border-radius:.35rem;box-shadow:none;background:#fff}.group-edit-text input{height:3rem}.group-edit-text textarea{min-height:10rem;resize:vertical}.group-edit-text>small{display:block;margin-top:.4rem;color:#969da6;text-align:right}.group-edit-text p{color:#878e98;font-size:.78rem}.group-governance section>div>span{display:flex;flex-direction:column;flex:1 1 auto}.group-governance section>div>span small{margin-top:.2rem;color:#9299a2;font-size:.72rem}.group-admin-page{padding-bottom:1rem}.group-admin-page aside{display:flex;gap:.6rem;margin:0;padding:.8rem 1rem;color:#7a828c;background:#eef5ff;font-size:.78rem;line-height:1.5}.group-admin-page aside .material-icons{color:#398afa;font-size:1.2rem}.group-admin-page aside p{margin:0}.group-admin-page h2{margin:0;padding:.7rem 1rem;color:#8a929b;background:#f5f6f8;font-size:.78rem}.group-inline-empty{padding:2rem;color:#969da5;text-align:center}.group-inline-note{margin:0;padding:.9rem 1rem 1.4rem;color:#969da5;font-size:.85rem;text-align:center}.group-section-title{margin:0;padding:.7rem 1rem;color:#8a929b;background:#f5f6f8;font-size:.78rem}.group-inline-hint{padding:.3rem 1rem .7rem;color:#969da5;font-size:.78rem}.group-toast-center{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:30;display:flex;flex-direction:column;align-items:center;gap:.4rem;padding:1.2rem 1.6rem;border-radius:.6rem;color:#fff;background:rgba(34,38,45,.94);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18)}.group-toast-center .material-icons{font-size:2rem}.group-upload-menu{position:absolute;top:3.4rem;right:max(1rem,calc(50% - 24rem));z-index:20;display:flex;flex-direction:column;min-width:9rem;padding:.4rem 0;border-radius:.5rem;background:rgba(34,38,45,.94);box-shadow:0 .5rem 1.5rem rgba(0,0,0,.18)}.group-upload-menu button{display:flex;align-items:center;gap:.6rem;padding:.6rem 1rem;border:0;border-radius:0;box-shadow:none;color:#fff;background:transparent;text-align:left;text-transform:none;font-size:.85rem}.group-upload-menu .material-icons{font-size:1.1rem}.group-member-picker{width:min(100%,50rem);margin:0 auto;background:#fff}.group-member-picker>button{display:grid;grid-template-columns:3rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:100%;min-height:4.5rem;margin:0;padding:.6rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.group-check{display:grid;place-items:center;width:1.4rem;height:1.4rem;border:1px solid #c8cdd3;border-radius:50%;color:#fff}.group-check.checked{border-color:#398afa;background:#398afa}.group-check .material-icons{font-size:.95rem}.group-file-list{width:min(100%,54rem);margin:0 auto;background:#fff}.group-file-list article{display:grid;grid-template-columns:3rem minmax(0,1fr) 2.5rem;align-items:center;gap:.8rem;min-height:5rem;padding:.7rem 1rem;border-bottom:1px solid #eceef1}.group-file-type{display:grid;place-items:center;width:3rem;height:3.4rem;border-radius:.3rem;color:#fff;background:#e54b68;font-size:.7rem;font-weight:700}.group-file-list article>div{display:flex;min-width:0;flex-direction:column}.group-file-list strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.group-file-list small{margin-top:.3rem;color:#9299a2;font-size:.74rem}.group-file-list progress{width:100%;height:.3rem;margin-top:.4rem;accent-color:#398afa}.group-file-list button{width:2.5rem;min-width:2.5rem;height:2.5rem;min-height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;color:#5f6872;background:transparent}.group-upload-sources{display:grid;grid-template-columns:repeat(3,1fr);flex:none;min-height:6rem;padding:.7rem max(1rem,calc(50% - 18rem)) max(.7rem,env(safe-area-inset-bottom));border-top:1px solid #e2e5e9;background:#fff}.group-upload-sources button{display:flex;align-items:center;justify-content:center;width:100%;min-width:0;margin:0;padding:0;border:0;box-shadow:none;color:#5c6570;background:transparent;flex-direction:column;text-transform:none}.group-upload-sources .material-icons{margin-bottom:.35rem;color:#398afa;font-size:1.7rem}#sidepanel.content-library-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;color:#292e35;background:#f5f6f8}.content-library-panel *{box-sizing:border-box;letter-spacing:0}.library-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;flex-direction:column;background:#f5f6f8}.library-header{display:grid;z-index:3;grid-template-columns:4.5rem minmax(0,1fr) 4.5rem;align-items:center;flex:none;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e9ebee;background:#fff}.library-header h1{margin:0;overflow:hidden;font-size:1.15rem;text-align:center;text-overflow:ellipsis;white-space:nowrap}.library-header>button{display:grid;place-items:center;width:100%;min-width:0;height:3.2rem;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#2e333a;background:transparent}.library-header>button.text{color:#247ee6;font-size:.86rem;text-transform:none}.library-search{display:flex;align-items:center;flex:none;height:2.8rem;margin:.8rem max(1rem,calc(50% - 26rem));padding:0 .75rem;border-radius:.35rem;color:#9299a2;background:#fff}.library-search .material-icons{font-size:1.2rem}.library-search input{width:100%;min-width:0;height:100%;margin:0;padding:0 .5rem;border:0;box-shadow:none;background:transparent}.library-avatar{display:grid;place-items:center;width:3rem;height:3rem;overflow:hidden;flex:0 0 3rem;border-radius:.45rem;color:#fff;background:#4389df}.library-avatar img{width:100%;height:100%;object-fit:cover}.library-history-tabs,.library-type-tabs{display:flex;width:min(100%,52rem);min-height:2.9rem;margin:0 auto;overflow-x:auto;flex:none;border-bottom:1px solid #e4e7eb;background:#fff;scrollbar-width:none}.library-history-tabs button,.library-type-tabs button{min-width:4.3rem;min-height:2.9rem;margin:0;padding:0 .8rem;border:0;border-bottom:2px solid transparent;border-radius:0;box-shadow:none;color:#747c86;background:transparent;font-size:.8rem;text-transform:none}.library-history-tabs button.active,.library-type-tabs button.active{border-bottom-color:#398afa;color:#247ee6}.library-favorite-list,.library-history-content{width:min(100%,52rem);min-height:0;margin:0 auto;overflow-y:auto;flex:1 1 auto}.library-empty-hint{padding:1.5rem 1rem;color:#9299a2;font-size:.85rem;text-align:center}.library-load-more{display:flex;align-items:center;justify-content:center;width:min(100%,52rem);height:auto;margin:0 auto;padding:.8rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:#567;background:#fff;font-size:.85rem;text-transform:none}.library-favorite-item{display:flex;gap:.7rem;padding:.9rem 1rem;border-bottom:1px solid #eceef1;background:#fff}.library-favorite-item.selecting{align-items:center}.library-favorite-content{min-width:0;flex:1 1 auto}.library-favorite-content>footer{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.5rem;margin-top:.65rem;color:#9299a2;font-size:.72rem}.library-favorite-content>footer span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-favorite-content>footer button{width:2rem;min-width:2rem;height:2rem;min-height:2rem;margin:0;padding:0;border:0;box-shadow:none;color:#7d858e;background:transparent}.library-text-content{margin:0;color:#343941;font-size:.94rem;line-height:1.65}.library-text-content.clamped{max-height:8.25em;overflow:hidden}.library-text-wrap{display:block}.library-text-actions{display:flex;align-items:center;gap:1.1rem;margin-top:.35rem}.library-text-actions button{display:inline-flex;align-items:center;gap:.2rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent;color:#3b82c4;font-size:.82rem}.library-text-actions button .material-icons{font-size:1rem}.library-file-card{display:grid;grid-template-columns:3rem minmax(0,1fr) auto;align-items:center;gap:.8rem;width:100%;min-height:4.8rem;margin:0;padding:.7rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:#30353c;background:#fafbfc;text-align:left;text-transform:none}.library-download-icon,.library-file-card>span{display:grid;place-items:center;width:3rem;height:3.4rem;border-radius:.3rem;color:#fff;background:#e54b68;font-size:.7rem;font-weight:700}.library-file-card>div{display:flex;min-width:0;flex-direction:column;line-height:1.3}.library-file-card strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-file-card small{margin-top:.3rem;color:#9299a2;font-size:.74rem}.library-file-card.removed{opacity:.65}.library-file-card em{color:#d74a53;font-size:.74rem;font-style:normal}.library-link-text{display:flex;align-items:center;gap:.6rem;width:100%;min-width:0;height:auto;min-height:2.8rem;margin:0;padding:.6rem .8rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:var(--clr-primary-accent);background:#fafbfc;text-align:left;text-transform:none;line-height:1.3}.library-link-text span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-link-text.removed,.library-media-thumb.removed,.library-text-content.removed,.library-voice-card.removed{display:flex;align-items:center;justify-content:center;gap:.4rem;opacity:.65}.library-link-text.removed em,.library-media-thumb.removed em,.library-text-content.removed em,.library-voice-card.removed em{color:#d74a53;font-size:.74rem;font-style:normal}.library-voice-card{display:flex;align-items:center;gap:.6rem;width:min(100%,20rem);min-height:3.2rem;margin:0;padding:0 .8rem;border:0;border-radius:.4rem;box-shadow:none;color:#343a42;background:#eef5ff}.library-voice-card.playing{color:#fff;background:#398afa}.library-voice-card .material-icons{font-size:1.6rem}.library-wave{height:1rem;opacity:.55;background:repeating-linear-gradient(90deg,currentColor 0 2px,transparent 2px 5px)}.library-link-card{display:grid;grid-template-columns:5.2rem minmax(0,1fr);gap:.8rem;width:100%;min-height:5.8rem;margin:0;padding:.7rem;border:1px solid #eceef1;border-radius:.4rem;box-shadow:none;color:#30353c;background:#fafbfc;text-align:left;text-transform:none}.library-link-card>img{width:5.2rem;height:4.5rem;border-radius:.3rem;object-fit:cover}.library-link-card>div{min-width:0}.library-link-card p,.library-link-card strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.library-link-card p{margin:.35rem 0;color:#7e858f;font-size:.76rem}.library-link-card small{display:flex;align-items:center;color:#9aa0a8}.library-link-card small .material-icons{margin-right:.25rem;font-size:.95rem}.library-media-thumb{position:relative;width:11rem;height:auto;aspect-ratio:4/3;min-height:0;margin:0;padding:0;overflow:hidden;border:0;border-radius:.4rem;box-shadow:none;background:#dfe3e8}.library-media-thumb img{width:100%;height:100%;object-fit:cover}.library-media-thumb .material-icons{position:absolute;top:50%;left:50%;color:#fff;font-size:2.5rem;filter:drop-shadow(0 2px 4px rgba(0,0,0,.35));transform:translate(-50%,-50%)}.library-media-thumb small{position:absolute;right:.4rem;bottom:.3rem;color:#fff}.library-check{display:grid;place-items:center;width:1.4rem;min-width:1.4rem;height:1.4rem;min-height:1.4rem;margin:0;padding:0;border:1px solid #c8cdd3;border-radius:50%;box-shadow:none;color:#fff;background:#fff}.library-check.checked{border-color:#398afa;background:#398afa}.library-check .material-icons{font-size:.95rem}.library-empty{display:flex;align-items:center;justify-content:center;min-height:20rem;color:#969da6;flex-direction:column}.library-empty .material-icons{margin-bottom:.7rem;color:#b5bbc2;font-size:3.5rem}.library-batch-bar{display:grid;grid-template-columns:repeat(2,1fr);flex:none;min-height:4.5rem;padding-bottom:env(safe-area-inset-bottom);border-top:1px solid #e2e5e9;background:#fff}.library-batch-bar button{display:flex;align-items:center;justify-content:center;min-height:4.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#555e68;background:transparent;flex-direction:column;text-transform:none}.library-batch-bar button[disabled]{color:#b6bbc2}.library-batch-bar span{margin-top:.2rem;font-size:.72rem}.library-sheet-backdrop{display:grid;position:absolute;z-index:70;inset:0;place-items:center;padding:1rem;background:rgba(22,26,31,.52)}.library-confirm-sheet{width:min(100%,25rem);padding:1.25rem;border-radius:.5rem;background:#fff;text-align:center}.library-confirm-sheet>.material-icons{color:#4d73aa;font-size:2.8rem}.library-confirm-sheet h2{margin:.65rem 0;font-size:1.15rem}.library-confirm-sheet p{margin:.7rem 0 1rem;color:#5c646e;line-height:1.6;text-align:left}.library-confirm-sheet button{width:100%;min-height:2.9rem;margin:.45rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#4d5660;background:#f0f2f4}.library-confirm-sheet button.danger{color:#fff;background:#d84950}.library-section-title{width:min(100%,52rem);margin:0 auto;padding:.55rem 1rem;color:#8a929b;font-size:.78rem}.library-target-list{width:min(100%,52rem);min-height:0;margin:0 auto;overflow-y:auto;flex:1 1 auto;background:#fff}.library-target-list>button{display:grid;grid-template-columns:3rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:100%;min-height:4.5rem;margin:0;padding:.6rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.library-target-list>button>span:nth-child(2){display:flex;min-width:0;flex-direction:column}.library-target-list small{margin-top:.2rem;color:#9299a2}.library-next-bar{display:flex;align-items:center;justify-content:space-between;flex:none;min-height:4.3rem;padding:.6rem max(1rem,calc(50% - 25rem));border-top:1px solid #e2e5e9;color:#777f89;background:#fff}.library-next-bar button,.library-primary,.library-share-confirm>button{width:auto;min-width:5rem;min-height:2.8rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#398afa;text-transform:none}.library-next-bar button[disabled]{background:#b7c9df}.library-share-confirm{width:min(100%,42rem);margin:0 auto;padding:1.2rem}.library-share-confirm h2{margin:0 0 .8rem;font-size:.92rem}.library-target-summary{display:flex;gap:1rem;padding:1rem;overflow-x:auto;background:#fff}.library-target-summary>span{display:flex;align-items:center;width:4rem;flex:0 0 4rem;flex-direction:column}.library-target-summary small{width:100%;margin-top:.3rem;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.library-share-confirm>section{margin-top:1rem;padding:1rem;background:#fff}.library-share-confirm>section p{margin-bottom:0;color:#858d96;font-size:.76rem;line-height:1.5}.library-share-confirm textarea{width:100%;min-height:5rem;margin:1rem 0;padding:.8rem;border:0;border-radius:.35rem;box-shadow:none;background:#fff;resize:vertical}.library-share-confirm>button{width:100%}.library-download{width:min(100%,36rem);margin:0 auto;padding:2.5rem 1.2rem;text-align:center}.library-download-icon{width:5rem;height:5.8rem;margin:0 auto 1rem;font-size:1rem}.library-download h2{margin:0;overflow-wrap:anywhere;font-size:1.1rem}.library-download>p{color:#8a929b}.library-download dl{margin:1.5rem 0;padding:0 1rem;background:#fff;text-align:left}.library-download dl>div{display:flex;justify-content:space-between;padding:.8rem 0;border-bottom:1px solid #eceef1}.library-download dd,.library-download dt{margin:0}.library-download dd{color:#777f89}.library-primary{display:flex;align-items:center;justify-content:center;width:100%}.library-primary .material-icons{margin-right:.4rem}.library-download-progress{margin:1.5rem 0;padding:1rem;background:#fff;text-align:left}.library-download-progress>div{display:flex;justify-content:space-between}.library-download-progress progress{width:100%;height:.45rem;margin:.8rem 0 .4rem;accent-color:#398afa}.library-download-progress small{color:#9299a2}.library-download-actions{display:grid;grid-template-columns:1fr;gap:.8rem}.library-download-actions button{min-height:2.9rem;margin:0;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;color:#555e68;background:#fff;text-transform:none}.library-download-actions button.primary{border-color:#398afa;color:#fff;background:#398afa}.library-download-actions .material-icons{margin-right:.35rem;font-size:1.1rem;vertical-align:middle}.library-complete{display:flex;align-items:center;gap:.7rem;margin:1.5rem 0;padding:1rem;color:#257c58;background:#eaf8f1;text-align:left}.library-complete>.material-icons{font-size:2rem}.library-complete>span{display:flex;flex-direction:column}.library-complete small{margin-top:.2rem;color:#65917d}.library-message-results>button{display:grid;grid-template-columns:3rem minmax(0,1fr) 1.5rem;align-items:start;gap:.8rem;width:100%;min-height:5.5rem;margin:0;padding:.8rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.library-message-results>button>span{min-width:0}.library-message-results p{margin:.3rem 0;color:#666e78;line-height:1.5}.library-message-results mark{padding:0 .08rem;color:#1f66b8;background:#dcecff}.library-message-results small,.library-message-results strong{line-height:1.3}.library-message-results small{color:#969da5}.library-record-files,.library-record-links{padding:.8rem;background:#fff}.library-record-header{display:flex;align-items:center;justify-content:space-between;gap:.6rem;width:100%;min-width:0;height:auto;margin:0 0 .4rem;padding:0;border:0;box-shadow:none;color:inherit;background:transparent;text-align:left;text-transform:none;line-height:1.3}.library-record-header strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.library-record-header small{flex:none;color:#9299a2;font-size:.74rem}.library-record-files .library-file-card,.library-record-links .library-link-text{margin-bottom:.7rem}.library-date-title{margin:0;padding:.7rem .8rem;color:#828a94;font-size:.8rem}.library-media-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.35rem;padding:0 .8rem 1rem}.library-media-grid button{position:relative;width:100%;height:auto;min-height:0;aspect-ratio:1;margin:0;padding:0;overflow:hidden;border:0;border-radius:.25rem;box-shadow:none;background:#dfe3e8}.library-media-grid img{width:100%;height:100%;object-fit:cover}.library-media-grid .material-icons{position:absolute;top:50%;left:50%;color:#fff;font-size:2.2rem;filter:drop-shadow(0 2px 4px rgba(0,0,0,.35));transform:translate(-50%,-50%)}.library-media-grid small{position:absolute;right:.3rem;bottom:.2rem;color:#fff;font-size:.65rem}#sidepanel.call-experience-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#11151a}.call-experience-panel *{box-sizing:border-box;letter-spacing:0}.call-history-page,.call-minimized-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#252a31;background:#f5f6f8;flex-direction:column}.call-chat-preview-header,.call-history-page>header{display:grid;grid-template-columns:3.8rem minmax(0,1fr) 3.8rem;align-items:center;flex:none;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e8eaed;background:#fff}.call-history-page>header h1{margin:0;font-size:1.15rem;text-align:center}.call-chat-preview-header button,.call-history-page>header button{display:grid;place-items:center;width:100%;min-width:0;height:3.2rem;min-height:3.2rem;margin:0;padding:0;border:0;box-shadow:none;color:#30353c;background:transparent}.call-history-page>main{width:min(100%,48rem);min-height:0;margin:0 auto;overflow-y:auto;flex:1 1 auto;background:#fff}.call-record{display:grid;grid-template-columns:2.5rem minmax(0,1fr) auto 1.5rem;align-items:center;gap:.7rem;width:100%;min-height:4.5rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left;text-transform:none}.call-record>.material-icons:first-child{display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:50%;color:#257a58;background:#e9f7f0}.call-record.busy>.material-icons:first-child,.call-record.declined>.material-icons:first-child,.call-record.missed>.material-icons:first-child{color:#d84850;background:#fdecee}.call-record>span{display:flex;min-width:0;flex-direction:column}.call-record small{margin-top:.2rem;color:#858d96}.call-record.busy small,.call-record.declined small,.call-record.missed small{color:#d84850}.call-record time{color:#969da5;font-size:.72rem}.call-record>.material-icons:last-child{color:#8d949d;font-size:1rem}.call-history-page>footer{display:grid;grid-template-columns:1fr 1fr;gap:.8rem;width:min(100%,48rem);min-height:4.8rem;margin:0 auto;padding:.7rem 1rem max(.7rem,env(safe-area-inset-bottom));border-top:1px solid #e2e5e9;background:#fff}.call-history-page>footer button{display:flex;align-items:center;justify-content:center;min-height:3rem;margin:0;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#277f5a;text-transform:none}.call-history-page>footer button:last-child{background:#347fd7}.call-history-page>footer .material-icons{margin-right:.4rem;font-size:1.2rem}.call-fullscreen{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#fff;background:#171c22;flex-direction:column;isolation:isolate}.call-audio-surface{background:#26323b}.call-ambient{position:absolute;z-index:-2;inset:-2rem;background:linear-gradient(160deg,#34444f,#202931 52%,#151a20)}.call-audio-surface:after{content:"";position:absolute;z-index:-1;inset:0;opacity:.12;background-image:url(../img/bkg/p09.jpg);background-position:50%;background-size:cover;filter:blur(24px);transform:scale(1.12)}.call-fullscreen.incoming-call-overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:200}.incoming-call-photo-blur{position:absolute;z-index:-1;inset:0;opacity:.12;background-image:var(--incoming-call-photo);background-position:50%;background-size:cover;filter:blur(24px);transform:scale(1.12)}.call-product-header{display:grid;z-index:4;grid-template-columns:4rem minmax(0,1fr) 4rem;align-items:center;flex:none;min-height:4.8rem;padding-top:env(safe-area-inset-top)}.call-product-header>button{display:grid;place-items:center;width:100%;min-width:0;height:3.4rem;min-height:3.4rem;margin:0;padding:0;border:0;box-shadow:none;color:hsla(0,0%,100%,.92);background:transparent}.call-product-header>span{color:hsla(0,0%,100%,.7);font-size:.74rem;text-align:center}.call-peer-card{display:flex;z-index:2;align-items:center;justify-content:center;min-height:0;padding:1rem;flex:1 1 auto;flex-direction:column}.call-product-avatar{display:block;width:7.5rem;height:7.5rem;overflow:hidden;border:2px solid hsla(0,0%,100%,.4);border-radius:50%;box-shadow:0 1rem 2.5rem rgba(0,0,0,.25)}.call-product-avatar.small{width:3rem;height:3rem}.call-product-avatar img{width:100%;height:100%;object-fit:cover}.call-peer-card h1{display:flex;align-items:center;margin:1.3rem 0 .45rem;max-width:100%;color:#fff;font-size:1.55rem}.call-peer-card h1>span{min-width:0;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.call-peer-card h1 .trusted-badge{flex:none}.call-peer-card p{margin:0;color:hsla(0,0%,100%,.78);font-size:.92rem}.call-peer-card .call-network{display:flex;align-items:center;margin-top:.65rem;color:hsla(0,0%,100%,.62)}.call-network i{width:.45rem;height:.45rem;margin-right:.35rem;border-radius:50%;background:#43d38c}.call-ringing-dots{display:flex;gap:.35rem;margin-top:1rem}.call-ringing-dots i{width:.4rem;height:.4rem;border-radius:50%;background:hsla(0,0%,100%,.65);animation:call-dot 1.2s ease-in-out infinite}.call-ringing-dots i:nth-child(2){animation-delay:.15s}.call-ringing-dots i:nth-child(3){animation-delay:.3s}@keyframes call-dot{0%,70%,to{transform:translateY(0);opacity:.45}35%{transform:translateY(-.35rem);opacity:1}}.call-active-controls,.call-incoming-actions,.call-single-action,.call-video-controls{display:flex;z-index:4;align-items:flex-start;justify-content:space-evenly;flex:none;min-height:8rem;padding:1rem max(1rem,calc(50% - 17rem)) max(1.5rem,env(safe-area-inset-bottom))}.call-single-action{justify-content:center}.call-control{display:flex;align-items:center;width:5rem;min-width:5rem;height:auto;min-height:0;margin:0;padding:0;border:0;box-shadow:none;color:hsla(0,0%,100%,.78);background:transparent;flex-direction:column;text-transform:none}.call-control>span{display:grid;place-items:center;width:3.7rem;height:3.7rem;border-radius:50%;color:#fff;background:hsla(0,0%,100%,.16);backdrop-filter:blur(8px)}.call-control.active>span{color:#22272d;background:#fff}.call-control.danger>span{color:#fff;background:#e3464f}.call-control .material-icons{font-size:1.55rem}.call-control small{width:100%;margin-top:.5rem;color:inherit;font-size:.7rem;line-height:1.2;text-align:center}.call-incoming-actions .call-control:last-child>span{background:#2ab56f}.call-video-surface{background:#11151a}.call-video-backdrop,.call-video-off{position:absolute;z-index:-2;inset:0;width:100%;height:100%}.call-video-backdrop{object-fit:cover}.call-video-off{display:flex;align-items:center;justify-content:center;background:#252f37;flex-direction:column}.call-video-off .call-product-avatar{width:7rem;height:7rem}.call-video-off strong{margin-top:1.2rem}.call-video-off small{margin-top:.35rem;color:hsla(0,0%,100%,.68)}.call-video-off.local{background:#20272e}.call-video-shade{position:absolute;z-index:-1;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.42),transparent 30%,transparent 62%,rgba(0,0,0,.58))}.call-video-status{z-index:2;text-align:center}.call-video-status h1{margin:.4rem 0 .25rem;color:#fff;font-size:1.25rem}.call-video-status p{margin:0;color:hsla(0,0%,100%,.8)}.call-video-controls{margin-top:auto}.call-local-preview{position:absolute;z-index:3;top:max(6.2rem,calc(env(safe-area-inset-top) + 5rem));right:1rem;width:7rem;min-width:7rem;height:auto;min-height:0;aspect-ratio:3/4;margin:0;padding:0;overflow:hidden;border:1px solid hsla(0,0%,100%,.35);border-radius:.4rem;box-shadow:0 .5rem 1.2rem rgba(0,0,0,.3);background:#252c33}.call-local-preview img{width:100%;height:100%;object-fit:cover}.call-local-preview .material-icons{position:absolute;top:50%;left:50%;color:#fff;transform:translate(-50%,-50%)}.call-toast{position:fixed;z-index:50;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.7rem 1rem;border-radius:.3rem;color:#fff;background:rgba(24,28,34,.94);text-align:center;transform:translateX(-50%)}.call-chat-preview-header>div{display:flex;align-items:center;justify-content:center;flex-direction:column}.call-chat-preview-header small{margin-top:.15rem;color:#37a66d}.call-minimized-page>main{min-height:0;padding:1.5rem max(1rem,calc(50% - 26rem));overflow-y:auto;flex:1 1 auto}.call-chat-preview-message{width:fit-content;max-width:70%;padding:.7rem .9rem;border-radius:.4rem;background:#fff;line-height:1.5}.call-chat-composer{display:grid;grid-template-columns:minmax(0,1fr) 3rem;align-items:center;flex:none;min-height:4rem;padding:.5rem max(.7rem,calc(50% - 26rem));border-top:1px solid #e2e5e9;background:#fff}.call-chat-composer input{height:2.7rem;margin:0;padding:0 .7rem;border:1px solid #e1e4e8;border-radius:.35rem;box-shadow:none;background:#f7f8f9}.call-chat-composer button{width:3rem;min-width:3rem;height:2.7rem;min-height:2.7rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.call-floating-window{position:fixed;z-index:20;top:0;left:0;width:7.4rem;min-width:7.4rem;height:auto;min-height:0;aspect-ratio:3/4;margin:0;padding:0;overflow:hidden;touch-action:none;border:1px solid hsla(0,0%,100%,.6);border-radius:.45rem;box-shadow:0 .5rem 1.5rem rgba(0,0,0,.28);background:#20262c}.call-floating-window img{width:100%;height:100%;pointer-events:none;object-fit:cover}.call-floating-window span{position:absolute;right:.4rem;bottom:.35rem;display:flex;align-items:center;color:#fff;font-size:.68rem;text-shadow:0 1px 2px rgba(0,0,0,.8)}.call-floating-window span i{width:.4rem;height:.4rem;margin-right:.25rem;border-radius:50%;background:#41d48d}.call-mini-hangup{position:fixed;z-index:21;right:1rem;bottom:5.2rem;display:grid;place-items:center;width:3rem;min-width:3rem;height:3rem;min-height:3rem;margin:0;padding:0;border:0;border-radius:50%;box-shadow:0 .4rem 1rem rgba(0,0,0,.2);color:#fff;background:#e3464f}.compose-target-footer{justify-content:space-between;margin-top:auto;color:#757d87;font-size:.82rem}.compose-forward-confirm{width:min(100%,40rem);margin:0 auto;padding:1.2rem}.compose-forward-confirm textarea,.compose-forward-confirm>section{width:100%;margin-bottom:1rem;padding:1rem;border:0;border-radius:.45rem;background:#fff}.compose-target-summary{display:flex;gap:1rem;overflow-x:auto}.compose-target-summary>span{display:flex;align-items:center;width:4rem;flex:0 0 4rem;flex-direction:column}.compose-target-summary small{width:100%;margin-top:.35rem;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.compose-forward-preview h2{margin-top:0}.compose-forward-preview p{margin:.45rem 0;overflow:hidden;color:#757c85;font-size:.82rem;text-overflow:ellipsis;white-space:nowrap}.compose-forward-confirm textarea{min-height:5rem;resize:vertical}.compose-forward-mode{display:grid;grid-template-columns:1fr 1fr;gap:.7rem;margin-bottom:1rem}.compose-forward-mode button{min-height:2.8rem;margin:0;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;color:#646c76;background:#fff;text-transform:none}.compose-forward-mode button.active{border-color:#398afa;color:#287fe5;background:#eef6ff}.compose-confirm-send{width:100%;min-height:3rem;margin:0}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:2rem;opacity:1}}@keyframes fadeout{0%{bottom:2rem;opacity:1}to{bottom:0;opacity:0}}@media (min-width:1440px){#app-container{max-width:114rem}}@media (max-width:960px){#mountPoint{padding:0}.pinned{width:16rem}}@media (max-width:640px){#app-container{width:100%;border-radius:0;box-shadow:none}#sidepanel{width:100%}#sidepanel.message-center-panel,#sidepanel.message-center-panel.full-page{width:100%;min-width:0;flex-basis:100%}#sidepanel.call-experience-panel,#sidepanel.contact-management-panel,#sidepanel.content-library-panel,#sidepanel.direct-message-panel,#sidepanel.group-management-panel,#sidepanel.message-composer-panel{width:100%;min-width:0}.call-active-controls,.call-video-controls{padding-right:.35rem;padding-left:.35rem}.call-control{width:4.5rem;min-width:4.5rem}.call-control>span{width:3.4rem;height:3.4rem}.library-media-grid{grid-template-columns:repeat(3,1fr)}.library-link-card{grid-template-columns:4.3rem minmax(0,1fr)}.library-link-card>img{width:4.3rem;height:4.3rem}.people-profile-actions{grid-template-columns:1fr}.compose-emoji-panel>div{grid-template-columns:repeat(7,1fr)}.compose-picker-header{grid-template-columns:4rem minmax(0,1fr) 4.5rem}.compose-forward-confirm,.compose-upload-page>main{padding:1rem}.chat-product-timeline{padding:1.25rem 1rem}.chat-message-stack{max-width:calc(100% - 4rem)}.chat-bubble{font-size:.94rem}.chat-file-card{min-width:min(17rem,calc(100vw - 6rem))}.chat-contact-card{min-width:min(16rem,calc(100vw - 6rem))}.chat-composer{padding-right:.4rem;padding-left:.4rem}.chat-attachment-panel{grid-template-columns:repeat(4,1fr);gap:.7rem;padding:1rem .75rem max(1rem,env(safe-area-inset-bottom))}.chat-attachment-panel button>span{width:3.3rem;height:3.3rem}.messages-conversation{grid-template-columns:3.55rem minmax(0,1fr) auto;min-height:4.8rem;padding-right:1rem;padding-left:1rem}.messages-frequent-scroll{gap:1rem;padding-right:1rem;padding-left:1rem}.messages-frequent h2{margin-left:1rem}.messages-search{margin-right:1rem;margin-left:1rem}.system-notification-list{padding:1rem}.auth-landing{padding-right:1.25rem;padding-left:1.25rem}.auth-brand{margin-bottom:3rem}.auth-content{padding:1.25rem}.auth-reset-content{padding:1rem 0}.auth-list-form{min-height:calc(100vh - 6.25rem)}.auth-list-form label{grid-template-columns:6.4rem 1fr auto}.auth-code-button{min-width:5.8rem;padding:0 .4rem}.auth-realname-hero{min-height:12rem;padding:1.5rem}.auth-realname-hero strong{font-size:2rem}.auth-realname-hero>.material-icons{font-size:6rem}.auth-realname-content form{padding:1.25rem}.auth-realname-content label{grid-template-columns:6.2rem 1fr}.auth-screenshot-grid{grid-template-columns:repeat(3,1fr)}#info-view{width:100%}.forward-dialog{border-radius:.3rem .3rem 0 0;margin:auto 0 0;width:100%}.menuTrigger{opacity:.3}#send-message-input{transition-property:-tinode-mobile}#pinned-wrapper{height:3.5rem;margin:.25rem}.pinned{width:unset}#video-container.minimized:not(.audio-minimized){flex-direction:row;left:0;right:auto;top:var(--caption-panel-height);width:100%;height:11rem;border-radius:unset;box-shadow:0 0 .5rem var(--clr-shadow-gray-strong)}#controls.minimized{flex-direction:column;row-gap:.5rem;bottom:auto;column-gap:unset;right:1rem}.minimized .call-party{border-radius:unset;box-shadow:unset}}@media (max-width:768px){.call-party.self{bottom:8.5rem;border-radius:unset}}#sidepanel.personal-settings-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f5f6f8}.personal-settings-panel *{box-sizing:border-box;letter-spacing:0}.personal-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#262b31;background:#f5f6f8;flex-direction:column}.personal-page>.personal-page{min-height:0;flex:1 1 auto}.personal-page button,.personal-page input,.personal-page textarea{font:inherit;letter-spacing:0}.personal-page button{text-transform:none}.personal-page>main{min-height:0;overflow-y:auto;flex:1 1 auto}.personal-header{display:grid;grid-template-columns:3.7rem minmax(0,1fr) 3.7rem;align-items:center;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e7e9ec;background:#fff;flex:none}.personal-header h1{min-width:0;margin:0;overflow:hidden;font-size:1.15rem;font-weight:650;text-align:center;text-overflow:ellipsis;white-space:nowrap}.personal-header button{display:grid;place-items:center;width:3.7rem;min-width:3.7rem;height:3.7rem;min-height:3.7rem;margin:0;padding:0;border:0;box-shadow:none;color:#252a30;background:transparent}.personal-header button.text{color:#2873d0;font-size:.9rem}.personal-header .material-icons{font-size:1.55rem}.personal-toast{position:fixed;z-index:90;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.7rem 1rem;border-radius:.3rem;color:#fff;background:rgba(25,29,34,.94);text-align:center;transform:translateX(-50%)}.personal-center-page>main{padding:.85rem 0}.android-settings-list section,.personal-center-page section,.personal-menu-section,.privacy-list section{margin-bottom:.75rem;background:#fff}.personal-identity{display:grid;grid-template-columns:4.5rem minmax(0,1fr) 1.5rem;align-items:center;gap:.8rem;width:calc(100% - 1.6rem);min-height:7rem;margin:0 .8rem .8rem;padding:.9rem;border:0;border-radius:.45rem;box-shadow:none;color:#2e3339;background:#fff;text-align:left}.personal-identity img{width:4.5rem;height:4.5rem;border-radius:.55rem;object-fit:cover}.personal-identity .personal-avatar-fallback{display:flex;align-items:center;justify-content:center;width:4.5rem;height:4.5rem;border-radius:.55rem;color:#fff;background:#b0b6bd}.personal-identity .personal-avatar-fallback .material-icons{font-size:2rem}.personal-identity small,.personal-identity span,.personal-identity strong{display:block;min-width:0}.personal-identity strong{margin-bottom:.35rem;overflow:hidden;font-size:1.25rem;line-height:1.3;text-overflow:ellipsis;white-space:nowrap}.personal-identity small{margin-top:.15rem;color:#8a919a;line-height:1.3}.personal-menu-row{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.65rem;width:100%;min-height:4rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353b;background:#fff;text-align:left}.personal-menu-row:has(>.material-icons:first-child){grid-template-columns:2.3rem minmax(0,1fr) auto}.personal-menu-row:last-child{border-bottom:0}.personal-menu-row:active:not([disabled]),.personal-menu-row:hover:not([disabled]){color:#30353b;background:var(--clr-menu-item-hover-bg)}.personal-menu-row.danger,.personal-menu-row.danger:active:not([disabled]),.personal-menu-row.danger:hover:not([disabled]){color:#d93f48;background:#fff}.personal-menu-row.danger:active:not([disabled]),.personal-menu-row.danger:hover:not([disabled]){background:var(--clr-menu-item-hover-bg)}.personal-menu-row.danger>.material-icons:first-child{color:#d93f48}.personal-menu-row>.material-icons:first-child{color:#59636e;font-size:1.55rem}.personal-menu-row>.material-icons:last-child{color:#a8aeb5}.personal-menu-row span{display:flex;align-items:center;justify-content:space-between;gap:.7rem;min-width:0}.personal-menu-row strong{min-width:0;font-weight:500}.personal-menu-row small{max-width:62%;overflow:hidden;color:#969da5;text-align:right;text-overflow:ellipsis;white-space:nowrap}.personal-profile-list{padding-top:.7rem;background:#fff}.personal-profile-list>button:first-child{display:grid;grid-template-columns:minmax(0,1fr) 3.8rem 1.5rem;align-items:center;width:100%;min-height:5rem;margin:0;padding:.6rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353b;background:#fff;text-align:left}.personal-profile-list>button:first-child img{width:3.5rem;height:3.5rem;border-radius:.45rem;object-fit:cover}.gender-option-list{padding-top:.7rem;background:#fff}.gender-option-list button{display:grid;grid-template-columns:minmax(0,1fr) 1.5rem;align-items:center;width:100%;min-height:3.6rem;margin:0;padding:.6rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353b;background:#fff;text-align:left}.gender-option-list button strong{font-weight:400}.gender-option-list button .material-icons{color:var(--clr-primary,#3b82f6)}.profile-editor-page>main{padding:1rem}.profile-editor-page>main>label{display:block;position:relative}.profile-editor-page label input,.profile-editor-page label textarea{width:100%;margin:0;padding:.75rem 3rem .75rem .75rem;border:1px solid #dbe0e5;border-radius:.35rem;box-shadow:none;background:#fff}.profile-editor-page label input:not([type=date]){height:3.2rem}.profile-editor-page label textarea{height:11rem;padding-bottom:2rem;resize:vertical;line-height:1.5}.profile-editor-page>main>label>small{position:absolute;right:.75rem;bottom:.65rem;color:#9ba2aa}.profile-editor-page>main>label>button{position:absolute;top:.1rem;right:2.7rem;display:grid;place-items:center;width:2.8rem;min-width:2.8rem;height:3rem;min-height:3rem;margin:0;padding:0;border:0;box-shadow:none;color:#a3a9b0;background:transparent}.profile-editor-page>main>p{margin:.65rem 0 0;color:#8a929b;font-size:.8rem}.birth-date-editor{display:flex;align-items:center;padding-top:4rem!important;flex-direction:column}.birth-date-editor>.material-icons{color:#d66372;font-size:4rem}.birth-date-editor label{width:min(100%,26rem);margin-top:1.5rem}.birth-date-editor label span{display:block;margin-bottom:.5rem;font-weight:600}.birth-date-editor label input{height:3.2rem;padding:0 .75rem}.change-password-fields label{display:block;width:min(100%,26rem);margin-top:1.5rem}.change-password-fields label span{display:block;margin-bottom:.5rem;font-weight:600}.change-password-fields label input{height:3.2rem;padding:0 .75rem}.personal-qr-page>main{padding:1rem}.personal-qr-page main>section{width:min(100%,27rem);margin:0 auto;padding:1.2rem;border-radius:.45rem;background:#fff;text-align:center}.personal-qr-profile{display:flex;align-items:center;gap:.7rem;text-align:left}.personal-qr-profile img{width:3.3rem;height:3.3rem;border-radius:.4rem;object-fit:cover}.personal-qr-profile small,.personal-qr-profile span,.personal-qr-profile strong{display:block}.personal-qr-profile small{margin-top:.2rem;color:#858d96}.personal-qrcode{display:inline-block;width:226px;height:226px;margin:1.5rem auto .8rem;padding:8px;border:1px solid #eceef1;background:#fff}.personal-qrcode canvas,.personal-qrcode img{width:210px!important;height:210px!important}.personal-qr-page section>p{margin:.5rem 0}.personal-qr-page section>small{color:#8d949d}.personal-qr-actions{display:grid;grid-template-columns:repeat(2,1fr);width:min(100%,27rem);margin:.8rem auto 0;background:#fff}.personal-qr-actions button{display:flex;align-items:center;justify-content:center;min-height:3.4rem;margin:0;padding:0;border:0;box-shadow:none;color:#3476cd;background:transparent}.personal-qr-actions button+button{border-left:1px solid #eceef1}.personal-qr-actions .material-icons{margin-right:.3rem}.android-settings-list{padding:.75rem 0 1.5rem}.personal-logout{width:100%;min-height:3.8rem;margin:0;padding:0;border:0;box-shadow:none;color:#d93f48;background:#fff}.permission-overlay,.personal-sheet-backdrop,.update-backdrop{display:grid;position:absolute;z-index:70;inset:0;place-items:center;padding:1rem;background:rgba(22,26,31,.52)}.personal-confirm-sheet{width:min(100%,25rem);padding:1.25rem;border-radius:.5rem;background:#fff;text-align:center}.personal-confirm-sheet>.material-icons{color:#4d73aa;font-size:2.8rem}.personal-confirm-sheet h2{margin:.65rem 0;font-size:1.15rem}.personal-confirm-sheet p{margin:.7rem 0 1rem;color:#5c646e;line-height:1.6;text-align:left}.personal-confirm-sheet input{width:100%;height:3rem;margin:0 0 .8rem;padding:0 .75rem;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;text-align:center}.personal-confirm-sheet button{width:100%;min-height:2.9rem;margin:.45rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#4d5660;background:#f0f2f4}.personal-confirm-sheet button.primary{color:#fff;background:#347bd7}.personal-confirm-sheet button.danger{color:#fff;background:#d84950}.app-version-page>main{padding:2rem 1rem}.app-brand{margin-bottom:2rem;text-align:center}.app-brand>span{display:grid;place-items:center;width:6.5rem;height:6.5rem;margin:0 auto .8rem;border-radius:1.2rem;color:#fff;background:#2878d6}.app-brand .material-icons{font-size:4.2rem}.app-brand h2,.app-brand p{margin:0}.app-brand h2{font-size:1.25rem}.app-brand p{margin-top:.25rem;color:#777f89}.update-dialog{width:min(100%,25rem);padding:1.3rem;border-radius:.55rem;background:#fff;text-align:center}.update-dialog>span{display:grid;place-items:center;width:5rem;height:5rem;margin:0 auto .8rem;border-radius:50%;color:#fff;background:#4e74b7}.update-dialog>span .material-icons{font-size:3.2rem}.update-dialog h2{margin:0;font-size:1.35rem}.update-dialog>strong{display:block;margin-top:.25rem;color:#69717b}.update-dialog ul{margin:1rem 0;padding-left:1.25rem;color:#4e5660;line-height:1.65;text-align:left}.update-dialog button{width:100%;min-height:3rem;margin:.45rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#777f88;background:transparent}.update-dialog button:first-of-type{color:#fff;background:#347bd7}.privacy-list{padding-top:.75rem}.privacy-list section>div{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.8rem;min-height:4.6rem;padding:.7rem 1rem;border-bottom:1px solid #eceef1}.privacy-list section>div:last-child{border-bottom:0}.privacy-list section>div small,.privacy-list section>div span,.privacy-list section>div strong{display:block;min-width:0}.privacy-list section>div small{margin-top:.25rem;color:#8b929b;line-height:1.35}.personal-switch{position:relative;width:3.25rem;min-width:3.25rem;height:1.9rem;min-height:1.9rem;margin:0;padding:0;border:0;border-radius:1rem;box-shadow:none;background:#d8dce1}.personal-switch:disabled{opacity:.45;cursor:not-allowed}.personal-switch i{position:absolute;top:.15rem;left:.15rem;width:1.6rem;height:1.6rem;border-radius:50%;background:#fff;box-shadow:0 1px 4px rgba(0,0,0,.2);transition:transform .16s ease}.personal-switch.checked{background:#347bd7}.personal-switch.checked i{transform:translateX(1.35rem)}.privacy-note{margin:0;padding:0 1rem .75rem;color:#7e8690;font-size:.82rem;line-height:1.5}.youth-mode-page{background:#fff}.youth-mode-page>main{padding:3.2rem 1.5rem 1rem;text-align:center}.youth-mode-page>main>.material-icons{color:#347bd7;font-size:5rem}.youth-mode-page h2{margin:1rem 0 1.5rem;font-size:1.45rem}.youth-mode-page ul{margin:0;padding:0;list-style:none;text-align:left}.youth-mode-page li{position:relative;margin-bottom:1.2rem;padding-left:1.7rem;line-height:1.55}.youth-mode-page li:before{position:absolute;top:.55rem;left:.2rem;width:.55rem;height:.55rem;border-radius:50%;background:#347bd7;content:""}.youth-usage{margin-top:1.8rem;color:#868e97}.youth-mode-page>footer{padding:.8rem 1rem max(1rem,env(safe-area-inset-bottom));background:#fff;text-align:center;flex:none}.youth-mode-page>footer button{width:100%;min-height:3.2rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#347bd7}.youth-mode-page>footer button.outline{border:1px solid #347bd7;color:#347bd7;background:#fff}.youth-mode-page>footer small{display:block;margin-top:.65rem;color:#9aa1a9}.permission-guide-page{background:#fff}.permission-preview{padding:1.2rem 1rem;opacity:.72}.permission-preview>header{display:flex;align-items:center;justify-content:space-between}.permission-preview h1{margin:0;font-size:1.35rem}.permission-preview>label{display:flex;align-items:center;justify-content:center;min-height:3rem;margin:1rem 0;border-radius:.35rem;color:#8d949c;background:#f0f2f4}.permission-preview>label .material-icons{margin-right:.35rem}.permission-preview>div{display:grid;grid-template-columns:3.4rem minmax(0,1fr);align-items:center;gap:.7rem;min-height:4.6rem;border-bottom:1px solid #eceef1}.permission-preview>div small,.permission-preview>div strong,.permission-preview>div>span:last-child{display:block;min-width:0}.permission-preview>div small{margin-top:.2rem;color:#8b929b}.permission-avatar{display:grid;place-items:center;width:3.1rem;height:3.1rem;border-radius:.45rem;color:#fff;background:#5a77a9}.permission-avatar.tone-0{background:#d18128}.permission-avatar.tone-1{background:#4673bd}.permission-avatar.tone-2{background:#398258}.permission-avatar.tone-3{background:#9c5f7a}.permission-overlay section{width:min(100%,24rem);padding:1.3rem;border-radius:.5rem;background:#fff;text-align:center}.permission-overlay section>span{display:grid;place-items:center;width:4.6rem;height:4.6rem;margin:0 auto .8rem;border-radius:50%;color:#fff;background:#347bd7}.permission-overlay section>span .material-icons{font-size:2.7rem}.permission-overlay h2{margin:0;font-size:1.2rem}.permission-overlay p{margin:.8rem 0 1rem;color:#555d67;line-height:1.6;text-align:left}.permission-overlay button{width:100%;min-height:3rem;margin:.4rem 0 0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#8a919a;background:transparent}.permission-overlay button:first-of-type{color:#fff;background:#347bd7}@media screen and (max-width:480px){.personal-menu-row{min-height:3.8rem}.personal-menu-row small{max-width:55%}.personal-qrcode{margin-top:1rem}.youth-mode-page>main{padding-top:2rem}}#sidepanel.security-support-panel{width:100%;min-width:0;flex:1 1 auto;color-scheme:light;background:#f5f6f8}.security-support-panel *{box-sizing:border-box;letter-spacing:0}.support-page{display:flex;position:relative;width:100%;min-height:100%;overflow:hidden;color:#272c32;background:#f5f6f8;flex-direction:column}.support-page button,.support-page input,.support-page textarea{font:inherit;letter-spacing:0}.support-page button{text-transform:none}.support-page>main{min-height:0;overflow-y:auto;flex:1 1 auto}.support-header{display:grid;grid-template-columns:3.7rem minmax(0,1fr) 3.7rem;align-items:center;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e6e9ec;background:#fff;flex:none}.support-header h1{min-width:0;margin:0;overflow:hidden;font-size:1.15rem;font-weight:650;text-align:center;text-overflow:ellipsis;white-space:nowrap}.support-header button{display:grid;place-items:center;width:3.7rem;min-width:3.7rem;height:3.7rem;min-height:3.7rem;margin:0;padding:0;border:0;box-shadow:none;color:#272c32;background:transparent}.support-toast{position:fixed;z-index:100;bottom:max(1.5rem,env(safe-area-inset-bottom));left:50%;max-width:calc(100% - 2rem);padding:.7rem 1rem;border-radius:.3rem;color:#fff;background:rgba(25,29,34,.94);text-align:center;transform:translateX(-50%)}.risk-warning-page{background:#fff}.risk-conversation-preview{min-height:100%;opacity:.78}.risk-conversation-preview>header{display:grid;grid-template-columns:3.5rem minmax(0,1fr) 3.5rem;align-items:center;min-height:4.5rem;padding-top:env(safe-area-inset-top);border-bottom:1px solid #e7e9ec;background:#fff;text-align:center}.risk-conversation-preview>header button{display:grid;place-items:center;width:3.5rem;height:3.5rem;margin:0;padding:0;border:0;box-shadow:none;background:transparent}.risk-conversation-preview>header small,.risk-conversation-preview>header span,.risk-conversation-preview>header strong{display:block}.risk-conversation-preview>header small{margin-top:.15rem;color:#3d9a68}.risk-conversation-preview>main{min-height:calc(100vh - 8.8rem);padding:1rem;background:#eef0f3}.risk-conversation-preview>main>p{margin:0 0 1rem;color:#8b929b;font-size:.75rem;text-align:center}.risk-conversation-preview main>div{width:fit-content;max-width:78%;margin-bottom:.65rem;padding:.7rem .85rem;border-radius:.35rem;background:#fff;line-height:1.5}.risk-conversation-preview main>div.mine{margin-left:auto;background:#bde7a9}.risk-conversation-preview>footer{display:flex;align-items:center;justify-content:space-between;min-height:4.3rem;padding:.6rem 1rem max(.6rem,env(safe-area-inset-bottom));border-top:1px solid #e0e3e7;color:#959ca5;background:#fff}.risk-conversation-preview>footer span{width:calc(100% - 2.7rem);padding:.65rem .75rem;border:1px solid #e0e3e7;border-radius:.3rem;background:#f7f8f9}.risk-overlay{display:grid;position:absolute;z-index:70;inset:0;place-items:center;padding:1rem;background:rgba(19,23,28,.55)}.risk-dialog{width:min(100%,25rem);max-height:calc(100% - 2rem);padding:1.15rem;overflow-y:auto;border-radius:.55rem;background:#fff;text-align:center}.risk-info-page{margin:0 auto}.risk-symbol{display:grid;place-items:center;width:5rem;height:5rem;margin:0 auto .6rem;border-radius:50%;color:#fff;background:#3979cd}.risk-dialog.secondary .risk-symbol{color:#9b5e08;background:#fff0d5}.risk-symbol .material-icons{font-size:3.2rem}.risk-dialog h2{margin:0;font-size:1.35rem}.risk-dialog>p{margin:.75rem 0;color:#4d555e;line-height:1.65;text-align:left}.risk-dialog>p.risk-emphasis{color:#b1363f;font-weight:650;text-align:center}.risk-dialog ul{margin:.9rem 0;padding:.25rem .75rem;border:1px solid #d9e5f4;border-radius:.4rem;list-style:none}.risk-dialog li{display:flex;align-items:center;min-height:2.7rem;border-bottom:1px solid #e7edf4;line-height:1.35;text-align:left}.risk-dialog li:last-child{border-bottom:0}.risk-dialog li .material-icons{margin-right:.55rem;color:#347bd7;font-size:1.35rem}.risk-dialog aside{display:flex;align-items:flex-start;gap:.5rem;margin:.8rem 0;padding:.7rem;border-radius:.35rem;color:#9e333b;background:#fff0f1;line-height:1.45;text-align:left}.risk-dialog button{width:100%;min-height:3rem;margin:.45rem 0 0;padding:0 .75rem;border:0;border-radius:.35rem;box-shadow:none;color:#7f8790;background:transparent}.risk-dialog button.primary{color:#fff;background:#347bd7}.risk-dialog button.danger{color:#fff;background:#cc3d46}.report-reasons{padding-bottom:1rem}.report-target{display:grid;grid-template-columns:3.5rem minmax(0,1fr) 2rem;align-items:center;gap:.75rem;min-height:5.3rem;padding:.8rem 1rem;background:#fff}.report-target img{width:3.5rem;height:3.5rem;border-radius:.45rem;object-fit:cover}.report-target small,.report-target span,.report-target strong{display:block;min-width:0}.report-target small{margin-top:.25rem;color:#818a94}.report-target>.material-icons{color:#3b8661}.report-reasons>h2{font-weight:500}.report-loading,.report-reasons>h2{margin:0;padding:1rem;color:#6e7781;font-size:.85rem}.report-reason-list{background:#fff}.report-reason-list button{display:grid;grid-template-columns:minmax(0,1fr) 1.5rem;align-items:center;gap:.55rem;width:100%;min-height:4.3rem;margin:0;padding:.65rem 1rem;border:0;border-bottom:1px solid #eceef1;border-radius:0;box-shadow:none;color:#30353c;background:#fff;text-align:left}.report-reason-list button>span:first-child,.report-reason-list small,.report-reason-list strong{display:block;min-width:0}.report-reason-list small{margin-top:.2rem;overflow:hidden;color:#858d97;font-size:.76rem;text-overflow:ellipsis;white-space:nowrap}.report-reason-list button>.material-icons:last-child{color:#a8aeb5}.feedback-page>main,.report-details{padding-bottom:1rem}.report-selected-reason{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:.7rem;padding:.9rem 1rem;background:#fff}.report-selected-reason>.material-icons{color:#b14650;font-size:2rem}.report-selected-reason small,.report-selected-reason span,.report-selected-reason strong{display:block;min-width:0}.report-selected-reason small{margin-bottom:.2rem;color:#858d96}.report-selected-reason button{min-height:2.5rem;margin:0;padding:0 .5rem;border:0;box-shadow:none;color:#3476ce;background:transparent}.support-textarea{display:block;position:relative;margin-top:.7rem;padding:1rem;background:#fff}.support-textarea>span{display:block;margin-bottom:.6rem;font-weight:600}.support-textarea b{margin-left:.2rem;color:#d6424b}.support-textarea textarea{display:block;width:100%;height:10.5rem;margin:0;padding:.75rem .8rem 2rem;resize:vertical;border:0;box-shadow:none;background:#fff;line-height:1.5}.support-textarea>small{position:absolute;right:1.8rem;bottom:1.6rem;color:#9ba2ab}.evidence-section,.feedback-upload{margin-top:.7rem;padding:1rem;background:#fff}.evidence-section>header,.feedback-upload>header{display:flex;align-items:center;justify-content:space-between;gap:.6rem;margin-bottom:.8rem}.evidence-section header small,.evidence-section header span,.evidence-section header strong,.feedback-upload header small,.feedback-upload header span,.feedback-upload header strong{display:block;min-width:0}.evidence-section header small,.feedback-upload header small{margin-top:.2rem;color:#858d96}.evidence-section header em,.feedback-upload header em{color:#858d96;font-style:normal}.evidence-section article{display:grid;grid-template-columns:2.5rem minmax(0,1fr) 2.5rem;align-items:center;min-height:3.5rem;border-bottom:1px solid #eceef1}.evidence-section article>.material-icons{color:#5273a8}.evidence-section article>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.evidence-section article button{display:grid;place-items:center;width:2.5rem;height:2.5rem;margin:0;padding:0;border:0;box-shadow:none;color:#989fa7;background:transparent}.evidence-upload{width:100%;min-height:4.5rem;border:1px dashed #cbd1d8;border-radius:.35rem;color:#3476ce;background:#f8f9fa}.evidence-upload,.feedback-upload>button{display:flex;align-items:center;justify-content:center;margin:0;padding:.7rem;box-shadow:none;flex-direction:column}.feedback-upload>button{width:7.5rem;height:7.5rem;border:0;border-radius:.35rem;color:#858d96;background:#fff}.evidence-upload .material-icons,.feedback-upload>button .material-icons{margin-bottom:.25rem;font-size:1.8rem}.report-privacy-note{display:flex;align-items:flex-start;gap:.5rem;margin:.8rem 1rem 0;color:#74808b;font-size:.78rem;line-height:1.45}.report-privacy-note .material-icons{color:#4b8065;font-size:1.05rem}.support-submit-bar{padding:.75rem 1rem max(.8rem,env(safe-area-inset-bottom));border-top:1px solid #e1e4e8;background:#fff;flex:none}.support-submit-bar button,.support-success>button{width:100%;min-height:3.1rem;margin:0;padding:0 1rem;border:0;border-radius:.35rem;box-shadow:none;color:#fff;background:#347bd7;font-weight:600}.support-success{display:flex;align-items:center;padding:4rem 1.2rem 1.5rem;text-align:center;flex-direction:column}.support-success>.material-icons{color:#3a9365;font-size:5rem}.support-success h2{margin:1rem 0 .55rem;font-size:1.35rem}.support-success>p{max-width:26rem;margin:0;color:#66707a;line-height:1.6}.support-success dl{width:min(100%,26rem);margin:1.5rem 0;padding:.5rem 1rem;border:1px solid #e0e4e8;border-radius:.4rem;background:#fff}.support-success dl>div{display:flex;align-items:center;justify-content:space-between;min-height:3rem;border-bottom:1px solid #eceef1}.support-success dl>div:last-child{border-bottom:0}.support-success dd,.support-success dt{margin:0}.support-success dt{color:#7c858f}.support-success>button{width:min(100%,26rem)}.feedback-categories{padding:1rem;background:#fff}.feedback-categories h2{margin:0 0 .8rem;font-size:1rem}.feedback-categories>div{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.feedback-categories button{display:flex;align-items:center;justify-content:center;min-width:0;min-height:2.75rem;margin:0;padding:.45rem;border:1px solid #e0e4e8;border-radius:.35rem;box-shadow:none;color:#666f79;background:#fff}.feedback-categories button.active{border-color:#347bd7;color:#2f70c7;background:#eef5ff}.feedback-categories .material-icons{margin-bottom:.25rem;font-size:1.45rem}.feedback-categories button span{width:100%;overflow-wrap:anywhere;font-size:.76rem;line-height:1.25;text-align:center}.feedback-contact{display:block;padding:1rem;background:#fff}.feedback-contact>span{display:block;margin-bottom:.55rem;font-weight:600}.feedback-contact input{width:100%;height:3rem;margin:0;padding:0 .75rem;border:1px solid #dfe3e7;border-radius:.35rem;box-shadow:none;background:#fff}.diagnostics-consent{display:grid;grid-template-columns:1.8rem minmax(0,1fr);align-items:flex-start;gap:.5rem;margin-top:.7rem;padding:1rem;background:#fff}.diagnostics-consent input{width:1.25rem;height:1.25rem;margin:.1rem 0 0}.diagnostics-consent small,.diagnostics-consent span,.diagnostics-consent strong{display:block;min-width:0}.diagnostics-consent small{margin-top:.3rem;color:#7e8791;line-height:1.45}@media screen and (max-width:480px){.risk-dialog{padding:1rem}.risk-symbol{width:4.3rem;height:4.3rem}.risk-symbol .material-icons{font-size:2.8rem}.feedback-categories>div{gap:.35rem}}.qr-scan-view{position:fixed;z-index:200;inset:0;overflow:hidden;background:#000}.qr-scan-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.qr-scan-mask{position:absolute;inset:0;display:grid;place-items:center}.qr-scan-frame{position:relative;width:62vw;max-width:17rem;aspect-ratio:1;border-radius:.5rem;box-shadow:0 0 0 999rem rgba(0,0,0,.5)}.qr-scan-corner{position:absolute;width:1.6rem;height:1.6rem;border:.22rem solid #4d8dff;font-style:normal}.qr-scan-corner-tl{top:-.11rem;left:-.11rem;border-right:0;border-bottom:0;border-radius:.4rem 0 0 0}.qr-scan-corner-tr{top:-.11rem;right:-.11rem;border-left:0;border-bottom:0;border-radius:0 .4rem 0 0}.qr-scan-corner-bl{bottom:-.11rem;left:-.11rem;border-right:0;border-top:0;border-radius:0 0 0 .4rem}.qr-scan-corner-br{bottom:-.11rem;right:-.11rem;border-left:0;border-top:0;border-radius:0 0 .4rem 0}.qr-scan-header{position:absolute;z-index:2;top:0;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:.9rem .5rem;background:linear-gradient(rgba(0,0,0,.45),transparent)}.qr-scan-header button{width:2.6rem;height:2.6rem;border:0;box-shadow:none;color:#fff;background:transparent}.qr-scan-header h1{margin:0;color:#fff;font-size:1.05rem;font-weight:500}.qr-scan-header span{width:2.6rem}.qr-scan-hint{left:0;right:0;bottom:14%;margin:0;color:#e7ebf0;font-size:.9rem}.qr-scan-error,.qr-scan-hint{position:absolute;text-align:center}.qr-scan-error{inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;padding:0 2rem;color:#fff}.qr-scan-error .material-icons{font-size:2.6rem;color:#f2b53d}.qr-scan-error button{margin-top:.6rem;padding:0 1.4rem;min-height:2.6rem;border:0;border-radius:1.4rem;box-shadow:none;color:#fff;background:#347bd7}.qr-join-backdrop{position:fixed;z-index:200;inset:0;display:grid;place-items:center;padding:1rem;background:rgba(22,26,31,.52)}.qr-join-sheet{width:min(100%,25rem);padding:1.4rem 1.25rem 1.25rem;border-radius:.5rem;background:#fff;text-align:center}.qr-join-avatar{display:grid;place-items:center;width:4rem;height:4rem;margin:0 auto .6rem;border-radius:50%;overflow:hidden;color:#9aa3ad;background:#eef1f4}.qr-join-avatar img{width:100%;height:100%;object-fit:cover}.qr-join-avatar .material-icons{font-size:1.9rem}.qr-join-sheet h2{margin:.2rem 0;font-size:1.1rem}.qr-join-sheet>p{margin:0 0 .9rem;color:#757d87}.qr-join-sheet input{width:100%;height:2.9rem;margin:0 0 .8rem;padding:0 .75rem;border:1px solid #dce0e5;border-radius:.35rem;box-shadow:none;text-align:center}.qr-join-sheet button{width:100%;min-height:2.9rem;margin:.45rem 0 0;border:0;border-radius:.35rem;box-shadow:none;color:#4d5660;background:#f0f2f4}.qr-join-sheet button.primary{color:#fff;background:#347bd7}.forward-bundle{min-width:11rem;max-width:18rem}.forward-bundle-title{margin-bottom:.35rem;font-weight:500}.forward-bundle-lines{margin:0;padding:0;list-style:none}.forward-bundle-lines li{overflow:hidden;margin:.15rem 0;color:var(--clr-text-secondary);font-size:.85rem;line-height:1.35;text-overflow:ellipsis;white-space:nowrap}.forward-bundle-lines li b{font-weight:500}.forward-bundle-count,.forward-bundle-more{display:block;width:100%;margin:.4rem 0 0;padding:.35rem 0 0;border:0;border-top:1px solid var(--clr-divider,#e7e9ec);border-radius:0;box-shadow:none;background:none;color:var(--clr-text-secondary);font-size:.8rem;line-height:1.3;text-align:left;text-transform:none}.forward-bundle-more{color:#347bd7;cursor:pointer}.forward-bundle-comment{margin-top:.4rem;color:var(--clr-text-primary);font-size:.85rem} \ No newline at end of file diff --git a/src/widgets/chat-message.jsx b/src/widgets/chat-message.jsx index 6ae4f589..b28c77cd 100644 --- a/src/widgets/chat-message.jsx +++ b/src/widgets/chat-message.jsx @@ -65,6 +65,7 @@ class BaseChatMessage extends React.PureComponent { this.handleTouchStart = this.handleTouchStart.bind(this); this.handleTouchMove = this.handleTouchMove.bind(this); this.handleTouchEnd = this.handleTouchEnd.bind(this); + this.suppressNativeContextMenu = this.suppressNativeContextMenu.bind(this); this.handleCancelUpload = this.handleCancelUpload.bind(this); this.handleDraftyClick = this.handleDraftyClick.bind(this); this.handleVoicePlayed = this.handleVoicePlayed.bind(this); @@ -208,6 +209,14 @@ class BaseChatMessage extends React.PureComponent { this.longPressOrigin = null; } + // The press-and-hold gesture above is our own timer-based approximation of "long press" -- it + // doesn't stop the browser's own native context menu (right-click on desktop, or the OS-level + // long-press menu some browsers still fire as a real `contextmenu` event even for a touch/mouse + // hold). Left alone, both menus show up stacked on top of each other. + suppressNativeContextMenu(e) { + e.preventDefault(); + } + componentWillUnmount() { this.cancelLongPress(); } @@ -472,7 +481,8 @@ class BaseChatMessage extends React.PureComponent { error : null}
+ onTouchStart={this.handleTouchStart} onTouchMove={this.handleTouchMove} onTouchEnd={this.handleTouchEnd} + onContextMenu={this.suppressNativeContextMenu}> {showVoiceUnreadDot ? : null}
diff --git a/umd/src_views_messages-view_jsx.dev.js b/umd/src_views_messages-view_jsx.dev.js index c7d4c06f..aaa721b6 100644 --- a/umd/src_views_messages-view_jsx.dev.js +++ b/umd/src_views_messages-view_jsx.dev.js @@ -2718,6 +2718,7 @@ class BaseChatMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pure this.handleTouchStart = this.handleTouchStart.bind(this); this.handleTouchMove = this.handleTouchMove.bind(this); this.handleTouchEnd = this.handleTouchEnd.bind(this); + this.suppressNativeContextMenu = this.suppressNativeContextMenu.bind(this); this.handleCancelUpload = this.handleCancelUpload.bind(this); this.handleDraftyClick = this.handleDraftyClick.bind(this); this.handleVoicePlayed = this.handleVoicePlayed.bind(this); @@ -2841,6 +2842,9 @@ class BaseChatMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pure } this.longPressOrigin = null; } + suppressNativeContextMenu(e) { + e.preventDefault(); + } componentWillUnmount() { this.cancelLongPress(); } @@ -3098,6 +3102,7 @@ class BaseChatMessage extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pure onTouchStart: this.handleTouchStart, onTouchMove: this.handleTouchMove, onTouchEnd: this.handleTouchEnd, + onContextMenu: this.suppressNativeContextMenu, children: [showVoiceUnreadDot ? (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("i", { className: "voice-unread-dot" }, void 0, false) : null, (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxDEV)("div", { diff --git a/umd/src_views_messages-view_jsx.dev.js.map b/umd/src_views_messages-view_jsx.dev.js.map index 2f8813c3..ef607c86 100644 --- a/umd/src_views_messages-view_jsx.dev.js.map +++ b/umd/src_views_messages-view_jsx.dev.js.map @@ -1 +1 @@ -{"version":3,"file":"src_views_messages-view_jsx.dev.js","mappings":";;;;;;;;;;;;;;;;;AAC0B;AAEmB;AAAA;AAE7C,SAAS,IAAI,CAAC;EAAC;AAAQ,CAAC,EAAE;EAAE,OAAO;IAAG,SAAS,EAAC,gBAAgB;IAAC,eAAY,MAAM;IAAA,UAAE;EAAQ,gBAAI,CAAC;AAAE;AAErF,MAAM,QAAQ,SAAS,4DAAmB,CAAC;EACxD,MAAM,GAAG;IACP,OACE;MAAK,EAAE,EAAC,YAAY;MAAA,UAClB;QAAA,WACE;UAAM,EAAE,EAAC,iBAAiB;UAAA,UAAC,8DAAC,IAAI;YAAA,UAAC;UAAK,gBAAM;QAAC,gBAAM,CAAC,EACpD;UAAA,UAAK,qDAAa;QAAA,gBAAK,CAAC,EACxB;UAAA,UAAG;QAAU,gBAAG,CAAC;MAAA,eACd;IAAC,gBACH,CAAC;EAEV;AACF;AAAC,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACjBuC;AACkC;AAErB;AAiBrD,MAAM,WAAW,GAAG,SAAS;AAE7B,MAAM,SAAS,GAAG,iDAAU,CAAC,CAAC,IAAI,wLAAmC,CAAC;AAChB;AACI;AAC1D,MAAM,UAAU,GAAG,iDAAU,CAAC,CAAC,IAAI,2LAAoC,CAAC;AACpB;AACF;AAClD,MAAM,YAAY,GAAG,iDAAU,CAAC,CAAC,IAAI,iMAAsC,CAAC;AACzB;AACC;AACE;AACf;AACe;AACM;AACI;AACV;AACtD,MAAM,cAAc,GAAG,iDAAU,CAAC,CAAC,IAAI,qUAAyC,CAAC;AACjF,MAAM,YAAY,GAAG,iDAAU,CAAC,CAAC,IAAI,iMAAsC,CAAC;AAI2B;AAChB;AACqB;AACzD;AAGwB;AACzB;AAC0C;AAAA;AAG5F,MAAM,0BAA0B,GAAG,GAAG;AAEtC,MAAM,oBAAoB,GAAG,GAAG;AAEhC,MAAM,kBAAkB,GAAG,EAAE;AAE7B,MAAM,QAAQ,GAAG,0DAAc,CAAC;EAE9B,eAAe,EAAE;IACf,EAAE,EAAE,iBAAiB;IACrB,cAAc,EAAE,iBAAiB;IACjC,WAAW,EAAE;EACf,CAAC;EACD,UAAU,EAAE;IACV,EAAE,EAAE,YAAY;IAChB,cAAc,EAAE,YAAY;IAC5B,WAAW,EAAE;EACf,CAAC;EACD,SAAS,EAAE;IACT,EAAE,EAAE,qBAAqB;IACzB,cAAc,EAAE,wBAAwB;IACxC,WAAW,EAAE;EACf,CAAC;EACD,SAAS,EAAE;IACT,EAAE,EAAE,iBAAiB;IACrB,cAAc,EAAE,WAAW;IAC3B,WAAW,EAAE;EACf,CAAC;EACD,OAAO,EAAE;IACP,EAAE,EAAE,SAAS;IACb,cAAc,EAAE,SAAS;IACzB,WAAW,EAAE;EACf,CAAC;EACD,yBAAyB,EAAE;IACzB,EAAE,EAAE,2BAA2B;IAC/B,cAAc,EAAE,iDAAiD;IACjE,WAAW,EAAE;EACf,CAAC;EACD,eAAe,EAAE;IACf,EAAE,EAAE,iBAAiB;IACrB,cAAc,EAAE,iBAAiB;IACjC,WAAW,EAAE;EACf,CAAC;EACD,eAAe,EAAE;IACf,EAAE,EAAE,iBAAiB;IACrB,cAAc,EAAE,SAAS;IACzB,WAAW,EAAE;EACf,CAAC;EACD,SAAS,EAAE;IACT,EAAE,EAAE,WAAW;IACf,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE;EACf,CAAC;EACD,eAAe,EAAE;IACf,EAAE,EAAE,iBAAiB;IACrB,cAAc,EAAE,gBAAgB;IAChC,WAAW,EAAE;EACf,CAAC;EACD,gBAAgB,EAAE;IAChB,EAAE,EAAE,kBAAkB;IACtB,cAAc,EAAE,kBAAkB,GAChC,mCAAmC,GACnC,oCAAoC,GACpC,sCAAsC,GACtC,oCAAoC,GACpC,qCAAqC,GACrC,sCAAsC;IACxC,WAAW,EAAE;EACf,CAAC;EACD,YAAY,EAAE;IACZ,EAAE,EAAE,cAAc;IAClB,cAAc,EAAE,kBAAkB,GAChC,+BAA+B,GAC/B,gCAAgC,GAChC,kCAAkC,GAClC,gCAAgC,GAChC,iCAAiC,GACjC,kCAAkC;IACpC,WAAW,EAAE;EACf,CAAC;EACD,kBAAkB,EAAE;IAClB,EAAE,EAAE,oBAAoB;IACxB,cAAc,EAAE,0BAA0B;IAC1C,WAAW,EAAE;EACf;AACF,CAAC,CAAC;AAGF,SAAS,aAAa,CAAC,GAAG,EAAE;EAC1B,IAAI,GAAG,EAAE;IACP,MAAM,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;IACnC,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;EACxE;EACA,OAAO,KAAK;AACd;AAEA,SAAS,gBAAgB,CAAC,GAAG,EAAE;EAC7B,IAAI,GAAG,EAAE;IACP,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;IACjC,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;EACvE;EACA,OAAO,KAAK;AACd;AAKA,MAAM,eAAe,GAAG,iBAAiB;AAEzC,SAAS,sBAAsB,CAAC,SAAS,EAAE;EAIzC,OAAO,SAAS,IAAI,wEAA4B,IAAI,SAAS,IAAI,kEAAsB;AACzF;AAEA,MAAM,YAAY,SAAS,wDAAe,CAAC;EACzC,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,KAAK,CAAC;IAEZ,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAG7D,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI;IAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI;IACvB,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI;IAC5B,IAAI,CAAC,cAAc,GAAG,EAAE;IACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAE9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;IAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;IAChF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;IACtE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;IAChF,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;IAChE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IACpE,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAEpD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IAExD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAE5C,IAAI,CAAC,eAAe,GAAG,EAAE;IACzB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IAMpE,IAAI,CAAC,WAAW,GAAG,CAAC;IACpB,IAAI,CAAC,MAAM,GAAG,IAAI;IAElB,IAAI,CAAC,qBAAqB,GAAG,EAAE;IAC/B,IAAI,CAAC,qBAAqB,GAAG,IAAI;IAEjC,IAAI,CAAC,aAAa,GAAG,IAAI;EAC3B;EAEA,qBAAqB,CAAC,KAAK,EAAE;IAC3B,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;MAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;IACpC;IACA,MAAM,GAAG,GAAG,sDAAe,CAAC,CAAC;IAC7B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,GAAG;IACjC,OAAO,GAAG;EACZ;EAEA,sBAAsB,CAAC,UAAU,EAAE;IACjC,IAAI,GAAG,GAAG,MAAM,CAAC,gBAAgB;MAAE,GAAG,GAAG,CAAC,CAAC;IAC3C,IAAI,gBAAgB,GAAG,KAAK;IAC5B,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK;MACvC,IAAI,GAAG,CAAC,OAAO,EAAE;QACf,MAAM;UAAE,GAAG;UAAE,MAAM;UAAE;QAAO,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,MAAM;QAC7G,IAAI,OAAO,EAAE;UACX,gBAAgB,GAAG,IAAI;UACvB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;UACxB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QAC1B,CAAC,MAAM,IAAI,gBAAgB,EAAE;UAE3B,OAAO,KAAK;QACd;MACF;MACA,OAAO,IAAI;IACb,CAAC,CAAC;IAEF,OAAO,GAAG,IAAI,GAAG,GAAG;MAAC,GAAG,EAAE,GAAG;MAAE,GAAG,EAAE;IAAG,CAAC,GAAG;MAAC,GAAG,EAAE,CAAC;MAAE,GAAG,EAAE;IAAC,CAAC;EAC7D;EAEA,iBAAiB,GAAG;IAClB,IAAI,IAAI,CAAC,gBAAgB,EAAE;MACzB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAC1E;IAGA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;IAEhC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAY3B,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;MACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;MAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;MAC5G,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;MAWjD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE;QACxC,IAAI,KAAK,GAAG,CAAC;QACb,MAAM,mBAAmB,GAAG,MAAM;UAChC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,EAAE,EAAE;YAC3C,WAAW,CAAC,CAAC;UACf,CAAC,MAAM;YACL,MAAM,CAAC,UAAU,CAAC,mBAAmB,EAAE,GAAG,CAAC;UAC7C;QACF,CAAC;QACD,mBAAmB,CAAC,CAAC;MACvB,CAAC,MAAM;QACL,WAAW,CAAC,CAAC;MACf;IACF;IAEA,6DAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;MAC1B,IAAI,CAAC,QAAQ,CAAC;QAAC,aAAa,EAAE,IAAI,CAAC,cAAc,IAAI;MAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACnB;EAEA,oBAAoB,GAAG;IAUrB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;MACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC7D;IACA,IAAI,IAAI,CAAC,gBAAgB,EAAE;MACzB,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;IAC7E;IACA,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;IAGpC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAG7B,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC;MAClE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;MAC/D,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;MAChE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;MAC5D,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;IAC1D;EACF;EAEA,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE;IAGvC,IAAI,IAAI,CAAC,gBAAgB,KACtB,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAC/E,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;MAE9C,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,oBAAoB,EAAE;QACpD,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAClE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY;MAClE;IACF;IAEA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE;MAElC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC/B,CAAC,MAAM;MAEL,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC9B;IAKA,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,EAAE;MACvE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACxD;IAEA,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC;EAC3C;EAEA,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS;IAC1F,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE;MACvC,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC,8CAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QACnE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;QAC3B,IAAI,SAAS,CAAC,QAAQ,EAAE;UACtB,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,CAAC;QAC3D;MACF;MAEA,IAAI,KAAK,EAAE;QACT,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB;QACvC,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,yBAAyB;QAC5D,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB;QACrC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB;QACxC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB;QAC5C,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB;QACrC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe;MAC3C;MAEA,IAAI,CAAC,cAAc,GAAG,EAAE;MACxB,IAAI,CAAC,iBAAiB,GAAG,KAAK;MAC9B,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC;MACnC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;MAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;IACvB;IAEA,IAAI,KAAK,EAAE;MACT,IAAK,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,IAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAS,EAAE;QAEzF,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,KAAM;QACxG,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,mEAA0B,EAAE;UAChE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;UAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QACvB;MACF,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE;QAE7E,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;MAC/D,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;QAExE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;MACvB;IACF;EACF;EAEA,OAAO,wBAAwB,CAAC,SAAS,EAAE,SAAS,EAAE;IACpD,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;MAEpB,SAAS,GAAG;QACV,QAAQ,EAAE,CAAC,CAAC;QACZ,QAAQ,EAAE,CAAC,CAAC;QACZ,aAAa,EAAE,CAAC,CAAC;QACjB,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,IAAI;QACd,kBAAkB,EAAE,KAAK;QACzB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,KAAK;QACvB,qBAAqB,EAAE,KAAK;QAC5B,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,aAAa,EAAE,IAAI;QACnB,kBAAkB,EAAE,KAAK;QACzB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,EAAE;QACR,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,CAAC;QACd,mBAAmB,EAAE,IAAI;QACzB,qBAAqB,EAAE,IAAI;QAC3B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,IAAI;QACvB,mBAAmB,EAAE,CAAC;QACtB,SAAS,EAAE,IAAI;QACf,YAAY,EAAE;MAChB,CAAC;IACH,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE;MAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;MAExD,SAAS,GAAG;QACV,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,OAAO,EAAE,KAAK,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI;QAChB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,IAAI;QACd,kBAAkB,EAAE,KAAK;QACzB,eAAe,EAAE,KAAK;QACtB,cAAc,EAAE,CAAC;QACjB,gBAAgB,EAAE,KAAK;QACvB,kBAAkB,EAAE,KAAK;QACzB,aAAa,EAAE,IAAI;QACnB,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,CAAC;QACd,mBAAmB,EAAE,IAAI;QACzB,qBAAqB,EAAE,IAAI;QAC3B,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,IAAI;QACvB,mBAAmB,EAAE,CAAC;QACtB,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,CAAC;QAMf,UAAU,EAAE;MACd,CAAC;MAED,IAAI,SAAS,CAAC,cAAc,EAAE;QAC5B,IAAI,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE;UACpC,MAAM,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC,OAAO;UAChD,MAAM,IAAI,GAAG,OAAO,EAAE,MAAM,IAAK,OAAO,EAAE,IAAI,IAAI,CAAE;UACpD,SAAS,CAAC,UAAU,GAAG;YACrB,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,SAAS,CAAC,cAAc,CAAC,IAAI;YACnC,IAAI,EAAE;UACR,CAAC;QACH,CAAC,MAAM;UAEL,SAAS,CAAC,KAAK,GAAG;YAChB,OAAO,EAAE,SAAS,CAAC,cAAc,CAAC,OAAO;YACzC,GAAG,EAAE;UACP,CAAC;QACH;MACF,CAAC,MAAM;QACL,SAAS,CAAC,KAAK,GAAG,IAAI;MACxB;MAEA,IAAI,KAAK,EAAE;QAET,MAAM,IAAI,GAAG,EAAE;QAEf,IAAI,SAAS,CAAC,SAAS,EAAE;UACvB,KAAK,CAAC,WAAW,CAAE,GAAG,IAAK;YACzB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE;cAChD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAChB;UACF,CAAC,CAAC;QACJ;QAEA,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;UACvB,UAAU,EAAE;QACd,CAAC,CAAC;QAEF,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE;UACtB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YACvB,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC;YAC7D,MAAM,EAAE;UACV,CAAC,CAAC;QACJ,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE;UACvB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YACvB,KAAK,EAAE,gEAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YACrD,MAAM,EAAE,mEAAY,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK;UACzC,CAAC,CAAC;QACJ,CAAC,MAAM;UACL,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YACvB,KAAK,EAAE,EAAE;YACT,MAAM,EAAE;UACV,CAAC,CAAC;QACJ;QAEA,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;QAChC,IAAI,IAAI,EAAE;UACR,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YACvB,qBAAqB,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG;UAClD,CAAC,CAAC;QACJ,CAAC,MAAM,IAAI,SAAS,CAAC,qBAAqB,EAAE;UAC1C,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YACvB,qBAAqB,EAAE;UACzB,CAAC,CAAC;QACJ;QACA,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;UACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;UAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;UAC3B,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;UACjC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;UAC9B,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;UACvC,UAAU,EAAE;QACd,CAAC,CAAC;QAEF,IAAI,SAAS,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,sBAAsB,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;UACpF,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,SAAS;QAC1C;MACF,CAAC,MAAM;QAEL,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;UACvB,QAAQ,EAAE,CAAC,CAAC;UACZ,QAAQ,EAAE,CAAC,CAAC;UACZ,aAAa,EAAE,CAAC,CAAC;UACjB,UAAU,EAAE,EAAE;UACd,KAAK,EAAE,EAAE;UACT,MAAM,EAAE,IAAI;UACZ,qBAAqB,EAAE,KAAK;UAC5B,OAAO,EAAE,KAAK;UACd,IAAI,EAAE,EAAE;UACR,UAAU,EAAE;QACd,CAAC,CAAC;MACJ;IACF,CAAC,MAAM;MAEL,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,IAC7D,sBAAsB,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;QAC/C,SAAS,CAAC,QAAQ,GAAG,SAAS,CAAC,SAAS;MAC1C;IACF;IAEA,IAAI,SAAS,CAAC,GAAG,EAAE;MACjB,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;QAClD,SAAS,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ;MAC1C;MACA,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;QAClD,SAAS,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ;MAC1C;MACA,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE;QAChD,SAAS,CAAC,OAAO,GAAG,CAAC,SAAS,CAAC,OAAO;MACxC;MACA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,cAAc,EAAE;QAChE,SAAS,CAAC,cAAc,GAAG,CAAC,SAAS,CAAC,cAAc;MACtD;MACA,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE;QAClD,SAAS,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC,QAAQ;MAC1C;IACF,CAAC,MAAM;MACL,IAAI,SAAS,CAAC,QAAQ,EAAE;QACtB,SAAS,CAAC,QAAQ,GAAG,KAAK;MAC5B;MACA,IAAI,SAAS,CAAC,QAAQ,EAAE;QACtB,SAAS,CAAC,QAAQ,GAAG,KAAK;MAC5B;MACA,IAAI,SAAS,CAAC,OAAO,EAAE;QACrB,SAAS,CAAC,OAAO,GAAG,KAAK;MAC3B;MACA,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE;QAC7B,SAAS,CAAC,cAAc,GAAG,IAAI;MACjC;MACA,IAAI,SAAS,CAAC,QAAQ,EAAE;QACtB,SAAS,CAAC,QAAQ,GAAG,KAAK;MAC5B;IACF;IAEA,IAAI,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;MAC1D,SAAS,CAAC,WAAW,GAAG,CAAC,SAAS,CAAC,WAAW;IAChD;IAGA,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;MACnF,SAAS,CAAC,UAAU,GAAG,EAAE;IAC3B;IAEA,OAAO,SAAS;EAClB;EAEA,SAAS,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MACrB;IACF;IAGA,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,KAAM;IAGxG,IAAI,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9E,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,EAAE;MAmBnC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,sDAAa,CAAC;MACjE,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;QACvB,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;MACpC;MAEA,IAAI,CAAC,QAAQ,CAAC;QAAE,gBAAgB,EAAE;MAAK,CAAC,CAAC;IAC3C;IAEA,MAAM,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS;IACjE,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAClE,IAAI,CAAC,IAAI,IAAI;MACZ,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE;QAEpB,2DAAc,CAAC,UAAU,CAAC,2DAAc,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E;MACF;MACA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;QAClC,IAAI,CAAC,QAAQ,CAAC;UAAC,KAAK,EAAE,IAAI,CAAC;QAAK,CAAC,CAAC;MACpC;MACA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;QACtB,IAAI,CAAC,QAAQ,CAAC;UAAC,OAAO,EAAE;QAAK,CAAC,CAAC;MACjC;MACA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;MAG1D,IAAI,OAAO,GAAG,EAAE;MAChB,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI;QAC1B,IAAI,GAAG,CAAC,QAAQ,EAAE;UAChB;QACF;QACA,IAAI,GAAG,CAAC,MAAM,IAAK,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,MAAO,EAAE;UAE/C,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;UACrB;QACF;QACA,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE;UACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QACrB;MACF,CAAC,CAAC;MACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACtB,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC;MACtC;IACF,CAAC,CAAC,CACD,KAAK,CAAC,GAAG,IAAI;MACZ,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;MAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;MACtC,MAAM,UAAU,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;MAChE,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC;MACpE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC3B,CAAC,CAAC;IAEJ,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE;MAYxB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAA4D,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;MAC9G;IACF;IAEA,WAAW,CAAC,CAAC;EACf;EAEA,KAAK,CAAC,YAAY,EAAE;IAClB,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE;MACnE;IACF;IAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC;IACzD,IAAI,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE;MACvC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAClB,KAAK,CAAC,CAAC,IAAI,CAAwB,CAAC,CAAC,CACrC,OAAO,CAAC,CAAC,IAAI;QAGZ,IAAI,CAAC,QAAQ,CAAC;UAAC,gBAAgB,EAAE;QAAK,CAAC,CAAC;QACxC,QAAQ,CAAC,MAAM,GAAG,SAAS;QAC3B,QAAQ,CAAC,qBAAqB,GAAG,SAAS;QAC1C,QAAQ,CAAC,MAAM,GAAG,SAAS;QAC3B,QAAQ,CAAC,UAAU,GAAG,SAAS;QAC/B,QAAQ,CAAC,aAAa,GAAG,SAAS;QAClC,QAAQ,CAAC,MAAM,GAAG,SAAS;QAC3B,QAAQ,CAAC,YAAY,GAAG,SAAS;MACnC,CAAC,CAAC;IACN;EACF;EAGA,qBAAqB,CAAC,IAAI,EAAE;IAC1B,IAAI,IAAI,EAAE;MACR,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC;MACvD,IAAI,CAAC,gBAAgB,GAAG,IAAI;MAC5B,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAClE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY;IAClE;EACF;EAGA,iBAAiB,CAAC,KAAK,EAAE;IACvB,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY;IAC1F,IAAI,CAAC,QAAQ,CAAC;MACZ,cAAc,EAAE,GAAG;MAEnB,kBAAkB,EAAG,GAAG,GAAG,oBAAoB,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;IACxE,CAAC,CAAC;IAEF,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,qBAAqB,EAAE;MAC7D;IACF;IAEA,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,kBAAkB,EAAE;MAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;MAC1D,IAAI,KAAK,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE;QACjC,IAAI,CAAC,qBAAqB,GAAG,IAAI;QACjC,MAAM;UAAC,GAAG;UAAE;QAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACpF,MAAM,IAAI,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC;QACtD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;UACnB,IAAI,CAAC,QAAQ,CAAC;YAAC,gBAAgB,EAAE;UAAI,CAAC,EAAE,CAAC,IAAI;YAC3C,KAAK,CAAC,eAAe,CAAC,sDAAa,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CACjD,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CACpD,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;cAAC,gBAAgB,EAAE;YAAK,CAAC,CAAC,CAAC;UACzD,CAAC,CAAC;QACN;MACF;IACF;IACA,IAAI,CAAC,qBAAqB,GAAG,KAAK;EACpC;EAGA,cAAc,CAAC,GAAG,EAAE;IAClB,IAAI,GAAG,EAAE;MACP,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC;MACvD,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;MACpD,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC;MACrD,GAAG,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;MACjD,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC;MAC7C,IAAI,CAAC,MAAM,GAAG,GAAG;IACnB;EACF;EAEA,iBAAiB,GAAG;IAClB,IAAI,CAAC,QAAQ,CAAC;MAAC,cAAc,EAAE;IAAC,CAAC,CAAC;IAClC,IAAI,IAAI,CAAC,gBAAgB,EAAE;MACzB,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY;IAC3G;EACF;EAEA,gBAAgB,CAAC,IAAI,EAAE;IACrB,IAAI,8CAAM,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;MAC5C,IAAI,CAAC,QAAQ,CAAC;QACZ,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC9D,MAAM,EAAE;MACV,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE;MACtB,IAAI,CAAC,QAAQ,CAAC;QACZ,KAAK,EAAE,gEAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAC1D,MAAM,EAAE,mEAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;MACxC,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,IAAI,CAAC,QAAQ,CAAC;QACZ,KAAK,EAAE,EAAE;QACT,MAAM,EAAE;MACV,CAAC,CAAC;IACJ;IAEA,IAAI,IAAI,CAAC,GAAG,EAAE;MACZ,IAAI,CAAC,QAAQ,CAAC;QACZ,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC3C,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG;MACrC,CAAC,CAAC;IACJ;EACF;EAEA,oBAAoB,CAAC,GAAG,EAAE;IAExB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MACvD;IACF;IAGA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;MAC/B,IAAI,CAAC,qBAAqB,GAAG,WAAW,CAAC,CAAC,IAAI;QAC5C,IAAI,IAAI,CAAC,qBAAqB,CAAC,MAAM,IAAI,CAAC,EAAE;UAE1C,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC;UACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI;UACjC;QACF;QAEA,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,OAAO,IAAI,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,EAAE;UAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;UACvC,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;YAEnC,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAClC;UACF;UAEA,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;UACtB,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,EAAE;YAEnB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,8CAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;cACnD,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;YAC5B;UACF,CAAC,MAAM;YACL;UACF;QACF;QAGA,IAAI,GAAG,IAAI,CAAC,EAAE;UACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;UAC1D,IAAI,KAAK,EAAE;YACT,IAAI;cACF,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YACrB,CAAC,CAAC,OAAO,GAAG,EAAE;cACZ,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC;YACxD;UACF;QACF;MACF,CAAC,EAAE,0BAA0B,CAAC;IAChC;IAEA,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;IACtB,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;MAC9B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;MAC3B,GAAG,EAAE,GAAG;MACR,MAAM,EAAE,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,mDAAU;IAChE,CAAC,CAAC;EACJ;EAGA,sBAAsB,GAAG;IACvB,IAAI,CAAC,qBAAqB,GAAG,EAAE;IAC/B,IAAI,IAAI,CAAC,qBAAqB,EAAE;MAC9B,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC;MACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI;IACnC;EACF;EAEA,iBAAiB,GAAG;IAClB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MACpB,MAAM,IAAI,GAAG,EAAE;MACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;MAC1D,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI;QACvB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;UACjD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAChB;MACF,CAAC,CAAC;MACF,MAAM,QAAQ,GAAG;QAAC,UAAU,EAAE,IAAI;QAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG;MAAC,CAAC;MAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;MAChC,IAAI,IAAI,EAAE;QACR,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;UACtB,qBAAqB,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG;QAClD,CAAC,CAAC;MACJ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE;QAC3C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;UACtB,qBAAqB,EAAE;QACzB,CAAC,CAAC;MACJ;MACA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACzB;EACF;EAGA,mBAAmB,CAAC,GAAG,EAAE;IACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MACrB;IACF;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1D,IAAI,CAAC,GAAG,EAAE;MAGR,IAAI,CAAC,QAAQ,CAAC;QAAC,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC;MAAC,CAAC,CAAC;MAClD;IACF;IAEA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;IAChC,IAAI,CAAC,QAAQ,CAAC;MAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;MAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;MAAE,eAAe,EAAE;IAAK,CAAC,EAAE,CAAC,IAAI;MAIrG,IAAI,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAC/B,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,oBAAoB,EAAE;UACpD,IAAI,CAAC,QAAQ,CAAC;YAAC,kBAAkB,EAAE;UAAI,CAAC,CAAC;QAC3C,CAAC,MAAM;UACL,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC1B;MACF,CAAC,MAAM;QACL,IAAI,IAAI,CAAC,gBAAgB,EAAE;UACzB,IAAI,CAAC,gBAAgB,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAC9F,IAAI,CAAC,gBAAgB,CAAC,YAAY;QACtC;MACF;IACF,CAAC,CAAC;IAIF,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC;IACzC,IAAI,MAAM,IAAI,8CAAM,CAAC,mBAAmB,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;MAC3E,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC;IACpC;EACF;EAEA,yBAAyB,CAAC,KAAK,EAAE;IAC/B,IAAI,CAAC,QAAQ,CAAC;MAAC,gBAAgB,EAAE;IAAK,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,EAAE;MAEV,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;MAC1D,IAAI,KAAK,EAAE;QAET,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC;MACtC;MACA;IACF;IAGA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;MAG1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;MAC1D,IAAI,CAAC,QAAQ,CAAC;QAAC,UAAU,EAAE;MAAI,CAAC,EAAE,CAAC,IAAI;QACrC,KAAK,CAAC,iBAAiB,CAAC,CAAC;MAC3B,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,IAAI,CAAC,QAAQ,CAAC;QAAC,UAAU,EAAE;MAAK,CAAC,CAAC;IACpC;EACF;EAEA,eAAe,CAAC,GAAG,EAAE;IACnB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW;IACxC,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;MAExC,WAAW,GAAG,CAAC;IACjB,CAAC,MAAM,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,EAAE;MACrC,WAAW,GAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7C;IACA,IAAI,CAAC,QAAQ,CAAC;MAAC,IAAI,EAAE,IAAI;MAAE,WAAW,EAAE;IAAW,CAAC,CAAC;EACvD;EAEA,iBAAiB,CAAC,IAAI,EAAE;IACtB,QAAQ,IAAI,CAAC,IAAI;MACf,KAAK,IAAI;QAAE;UACT,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;UAChC,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;YAAC,eAAe,EAAE;UAAK,CAAC,CAAC,EAAE,uDAAc,GAAG,IAAI,CAAC;UACpG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC;cAAC,eAAe,EAAE;YAAI,CAAC,CAAC;UACxC;UACA;QACF;MACA,KAAK,MAAM;MACX,KAAK,MAAM;QAET,IAAI,CAAC,WAAW,CAAC,CAAC;QAClB;MACF;QACE,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,IAAI,CAAC;IACtD;EACF;EAEA,iBAAiB,CAAC,OAAO,EAAE;IACzB,IAAI,CAAC,OAAO,EAAE;MACZ;IACF;IAEA,IAAI,OAAO,CAAC,KAAK,EAAE;MACjB,IAAI,CAAC,QAAQ,CAAC;QAAC,aAAa,EAAE;MAAO,CAAC,CAAC;IACzC,CAAC,MAAM;MACL,IAAI,CAAC,QAAQ,CAAC;QAAC,aAAa,EAAE;MAAO,CAAC,CAAC;IACzC;EACF;EAEA,kBAAkB,GAAG;IACnB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;MAC1D,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;IAClD;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;MAC1D,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;IAClD;IACA,IAAI,CAAC,QAAQ,CAAC;MACZ,aAAa,EAAE,IAAI;MACnB,YAAY,EAAE,IAAI;MAClB,UAAU,EAAE,IAAI;MAChB,YAAY,EAAE,IAAI;MAClB,aAAa,EAAE;IACjB,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;EACrC;EAEA,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;IACrC,IAAI,MAAM,IAAI,KAAK,EAAE;MACnB,IAAI,CAAC,WAAW,CAAC,8CAAM,CAAC,UAAU,CAAC,8CAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC,MAAM,IAAI,MAAM,IAAI,KAAK,EAAE;MAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;MAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY;MAC/B,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;QACzB,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;UACjC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjC;MACF;MACA,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;UACb,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B;MACF,CAAC,CAAC;MACF,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;MACtC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;MACrC,GAAG,CAAC,MAAM,GAAG,MAAM;MACnB,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC;IAC5B,CAAC,MAAM;MACL,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAChD;EACF;EAEA,kBAAkB,CAAC,CAAC,EAAE;IACpB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;MAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;MAAE,CAAC,EAAE,CAAC,CAAC,KAAK;MAAE,CAAC,EAAE,CAAC,CAAC;IAAM,CAAC,CAAC;EACrF;EAEA,4BAA4B,CAAC,MAAM,EAAE,wBAAwB,EAAE;IAC7D,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,EAAE;MAC7B,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;MAClC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;IACpC;IACA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;IACnC,IAAI,SAAS,GAAG,wBAAwB,IAAI,EAAE;IAQ9C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;MAChD,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,iBAAiB,CAAC;IAClE;IACA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;IAC1D,IAAI,KAAK,EAAE;MAOT,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC;MAC9F,IAAI,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,IAC5E,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAI,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,UAAU,GAAG,IAAK,CAAC,EAAE;QAC5E,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,KAAK,gBAAgB,CAAC;MACjE;MACA,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;MAoBtD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,qBAAqB,GAAG,CAAC;MAClG,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;MACxG,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,gBAAgB,KAAK,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,WAAW,IAC1G,YAAY,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAI,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,GAAG,IAAK,EAAE;QACrH,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;MACpC;MAIA,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE;QAEtB,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC;MAC1C,CAAC,MAAM;QACL,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE;UAE1B,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAClC;QAEA,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;QACjC,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE;UAE1B,IAAI,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;UAC7B,IAAI,CAAC,SAAS,EAAE;YAEd,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,8CAAM,CAAC,cAAc,EAAE,CAAC,CAAC,GAAG,CAAC;YAGhF,SAAS,GAAG,SAAS,IAAI,CAAC,KAAK,SAAS,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,GAC9D,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAI,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,GAAG,IAAK,GAAG,KAAK,CAAC;UACnF;UACA,IAAI,SAAS,EAAE;YAEb,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC;UACvC;QACF;MACF;IACF;IACA,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC;EAC/C;EAEA,uBAAuB,CAAC,MAAM,EAAE;IAC9B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC;EAChD;EAEA,gBAAgB,CAAC,CAAC,EAAE;IAClB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,gEAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;EAC7F;EAKA,uBAAuB,CAAC,KAAK,EAAE;IAC7B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE;MAChC;IACF;IACA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;IAC5B,uEAAsB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;MAC7C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;QACjC;MACF;MACA,IAAI,CAAC,QAAQ,CAAC;QAAC,mBAAmB,EAAE;MAAI,CAAC,CAAC;MAC1C,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC;IACjD,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACnB;EAQA,yBAAyB,CAAC,SAAS,EAAE,GAAG,EAAE;IACxC,MAAM,YAAY,GAAG,GAAG,IAAI,GAAG,CAAC,YAAY;IAC5C,IAAI,YAAY,IAAI,iBAAiB,IAAI,YAAY,IAAI,kBAAkB,EAAE;MAC3E,IAAI,CAAC,QAAQ,CAAC;QAAC,qBAAqB,EAAE;MAAI,CAAC,CAAC;MAC5C;IACF;IACA,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;MACnB,IAAI,CAAC,QAAQ,CAAC;QAAC,qBAAqB,EAAE;UAAC,IAAI,EAAE,UAAU;UAAE,QAAQ,EAAE,YAAY,IAAI,iBAAiB;UAAE,EAAE,EAAE;QAAI;MAAC,CAAC,CAAC;MACjH;IACF;IACA,MAAM,SAAS,GAAG,YAAY,IAAI,iBAAiB,GAAG,SAAS,GAAG,UAAU;IAC5E,kEAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;MAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;QACjC;MACF;MACA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC;MAChF,IAAI,CAAC,QAAQ,CAAC;QAAC,qBAAqB,EAAE;UACpC,IAAI,EAAG,KAAK,IAAI,KAAK,CAAC,OAAO,IAAK,UAAU;UAC5C,QAAQ,EAAE,YAAY,IAAI,iBAAiB;UAC3C,EAAE,EAAE,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG;QAC3C;MAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI;MACZ,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC;UAAC,qBAAqB,EAAE;YAAC,IAAI,EAAE,UAAU;YAAE,QAAQ,EAAE,YAAY,IAAI,iBAAiB;YAAE,EAAE,EAAE;UAAI;QAAC,CAAC,CAAC;MACnH;IACF,CAAC,CAAC;EACJ;EAOA,gBAAgB,CAAC,KAAK,EAAE;IACtB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE;MAC3D;IACF;IACA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;IAC5B,gEAAe,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;MACtC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;QACjC;MACF;MACA,MAAM,KAAK,GAAG,CAAC,CAAC;MAChB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI;QAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI;MAAE,CAAC,CAAC;MAC/D,IAAI,CAAC,QAAQ,CAAC;QAAC,UAAU,EAAE,KAAK;QAAE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI;MAAI,CAAC,CAAC;MAGnF,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,OAAO,EAAE;QAClF,qEAAoB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI;UACzD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC;cAAC,mBAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE;YAAM,CAAC,CAAC;UACpE;QACF,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;MACnB;IACF,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB,2EAA0B,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;MACjD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC;UAAC,iBAAiB,EAAG,IAAI,IAAI,IAAI,CAAC,OAAO,GAAI,IAAI,GAAG;QAAI,CAAC,CAAC;MAC1E;IACF,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACnB;EAKA,aAAa,CAAC,KAAK,EAAE;IACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;IACrF,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE;MAClC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5B;IACA,OAAO,gEAAe,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MAAC,WAAW,EAAE,IAAI;MAAE;IAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;MAChF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE;MAM9B,MAAM,aAAa,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;MAC9E,IAAI,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE;QACzD,OAAO,CAAC;UAAC,OAAO,EAAE,eAAe;UAAE,YAAY,EAAE;QAAK,CAAC,EAAE,GAAG,KAAK,CAAC;MACpE;MACA,OAAO,KAAK;IACd,CAAC,CAAC;EACJ;EAEA,eAAe,CAAC,GAAG,EAAE,IAAI,EAAE;IACzB,IAAI,GAAG,KAAK,eAAe,EAAE;MAM3B,IAAI,CAAC,iBAAiB,GAAG,IAAI;MAC7B;IACF;IACA,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;IAC9E,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;MAAC,GAAG;MAAE;IAAI,CAAC,CAAC;EACvC;EAIA,SAAS,CAAC,KAAK,EAAE;IACf,IAAI,CAAC,KAAK,EAAE;MACV;IACF;IACA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;IAC5B,8DAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;MACpC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;QACjC;MACF;MACA,IAAI,CAAC,QAAQ,CAAC;QAAC,SAAS,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;QAAE,YAAY,EAAE,IAAI,CAAC,OAAO,IAAI;MAAC,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACnB;EAiBA,oBAAoB,CAAC,IAAI,EAAE;IACzB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;MAChD;IACF;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;MAC7B;IACF;IACA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;IAClC,IAAI,CAAC,SAAS,EAAE;MACd;IACF;IACA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC;IAC5C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;MACnC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACtD;IACA,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;MACxD,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;MACtC,iEAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;QACvD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;UACjC,IAAI,CAAC,QAAQ,CAAC;YAAC,YAAY,EAAE,CAAC,CAAC;UAAO,CAAC,CAAC;QAC1C;MACF,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnB,CAAC,EAAE,GAAG,CAAC;EACT;EAOA,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE;IAClC,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE;MAC3D,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;MACpD,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;IACxC;IACA,MAAM,OAAO,GAAG,YAAY,IAAI,IAAI,GAAG,YAAY,GAChD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,GAAK,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,GAAI,CAAC;IACtE,iEAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;MACrD,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,EAAE;QACjC,IAAI,CAAC,QAAQ,CAAC;UAAC,SAAS,EAAE,EAAE;UAAE,YAAY,EAAE,CAAC,CAAC;QAAO,CAAC,CAAC;MACzD;IACF,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACnB;EAOA,sBAAsB,CAAC,CAAC,EAAE;IACxB,CAAC,CAAC,cAAc,CAAC,CAAC;IAIlB,IAAI,IAAI,GAAG,2DAAc,CAAC,WAAW,CAAC,2DAAc,CAAC,eAAe,CAAC,EAAE,EAAE,2BAA2B,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IACjI,IAAI,GAAG,2DAAc,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;IACvD,2DAAc,CAAC,UAAU,CAAC,IAAI,CAAC;EACjC;EAEA,sBAAsB,CAAC,CAAC,EAAE;IACxB,CAAC,CAAC,cAAc,CAAC,CAAC;IAGlB,IAAI,IAAI,GAAG,2DAAc,CAAC,WAAW,CAAC,2DAAc,CAAC,eAAe,CAAC,EAAE,EAAE,qBAAqB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC3H,IAAI,GAAG,2DAAc,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;IACvD,2DAAc,CAAC,UAAU,CAAC,IAAI,CAAC;EACjC;EAEA,4BAA4B,CAAC,CAAC,EAAE;IAC9B,CAAC,CAAC,cAAc,CAAC,CAAC;IAKlB,2DAAc,CAAC,UAAU,CAAC,2DAAc,CAAC,WAAW,CAClD,2DAAc,CAAC,eAAe,CAAC,EAAE,EAAE,qBAAqB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACxF;EASA,2BAA2B,CAAC,YAAY,EAAE;IACxC,OAAO,sEAAqB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI;MACxD,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,QAAQ,EAAE;QACvC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;MACzB,CAAC,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,kBAAkB,EAAE;QACxD,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;MACjC,CAAC,MAAM;QACL,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;MAC1B;MACA,OAAO,MAAM;IACf,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;MACd,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,IAAI,YAAY,CAAC;MAC3C,MAAM,GAAG;IACX,CAAC,CAAC;EACJ;EAEA,SAAS,CAAC,IAAI,EAAE;IACd,IAAI,CAAC,QAAQ,CAAC;MAAC,KAAK,EAAE;IAAI,CAAC,CAAC;IAC5B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;IAGpC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;MAAC,KAAK,EAAE;IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;EAC/E;EAEA,iBAAiB,GAAG;IAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1D,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE;MAC7C;IACF;IAMA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC/E,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;MACrB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;MAC7B;IACF;IACA,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI;MAC/C,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;MACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;IACxC,CAAC,CAAC;EACJ;EAIA,mBAAmB,GAAG;IACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE;MACnC;IACF;IACA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;IAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC5C,iEAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;MAAC,KAAK,EAAE,SAAS;MAAE;IAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM;MAOtE,OAAO,6DAAY,CAAC;QAAC,IAAI,EAAE,KAAK;QAAE,KAAK,EAAE;MAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;QAC1D,MAAM,KAAK,GAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAK,EAAE;QACxC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CACzB,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,CACvD,GAAG,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;UAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;QACnC,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;UACzB,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;QACxE,CAAC,MAAM;UACL,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACxB;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;MACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;IACxC,CAAC,CAAC;EACJ;EAEA,YAAY,CAAC,KAAK,EAAE;IAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1D,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE;MACzB;IACF;IACA,IAAI,KAAK,EAAE;MAMT;IACF;IACA,KAAK,CAAC,YAAY,CAAC,CAAC;EACtB;EAcA,sBAAsB,CAAC,MAAM,EAAE;IAC7B,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;MAChG;IACF;IACA,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI;MACtB,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,EAAE;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAClE,IAAI,KAAK,EAAE;UACT,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;QACxB;MACF;IACF,CAAC,CAAC;EACJ;EAEA,WAAW,CAAC,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,QAAQ,EAAE;IAK5D,MAAM,YAAY,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,IAAI;IACzD,IAAI,IAAI;IACR,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;MAErC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG;MACnC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI;IACvC,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;QAC5B,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;UAEnC,IAAI,CAAC,iBAAiB,CAAC,CAAC;UACxB;QACF;QAEA,IAAI,GAAG;UAAC,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAAG,CAAC;MAC9C,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE;QAGnC,IAAI,GAAG;UAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAAG,CAAC;QACzC,IAAI,OAAO,GAAG,IAAI,QAAQ,EAAE;UAC1B,GAAG,GAAG,8CAAM,CAAC,KAAK,CAAC,GAAG,CAAC;UACvB,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC;QAClC;QAiBA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7E,GAAG,GAAG,8CAAM,CAAC,MAAM,CAAC,8CAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC;MACrE;IACF,CAAC,MAAM,IAAI,OAAO,GAAG,IAAI,QAAQ,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;MAOtF,MAAM,MAAM,GAAG,8CAAM,CAAC,KAAK,CAAC,GAAG,CAAC;MAChC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;MACnC,GAAG,GAAG,MAAM;IACd;IAOA,IAAI,CAAC,cAAc,GAAG,EAAE;IACxB,IAAI,IAAI,CAAC,iBAAiB,EAAE;MAO1B,IAAI,GAAG;QAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;QAAE,WAAW,EAAE;MAAI,CAAC;MAC3C,IAAI,CAAC,iBAAiB,GAAG,KAAK;IAChC;IACA,IAAI,QAAQ,EAAE;MACZ,IAAI,GAAG;QAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC;QAAE,WAAW,EAAE;MAAQ,CAAC;IACjD;IAEA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;IAItC,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM;MAanB,IAAI,CAAC,iBAAiB,CAAC,CAAC;MACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,IAAI,CAAC;MAGnF,IAAI,YAAY,IAAI,IAAI,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,IAAI,UAAU,IAAI,aAAa,EAAE;QACvF,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;MACvE;MACA,OAAO,MAAM;IACf,CAAC;IAYD,MAAM,UAAU,GAAG,YAAY,IAAI,YAAY,CAAC,KAAK,CAAC,iBAAiB,CAAC;IACxE,IAAI,UAAU,EAAE;MACd,MAAM,SAAS,GAAG;QAAC,KAAK,EAAE,CAAC;QAAE,IAAI,EAAE,CAAC;QAAE,KAAK,EAAE;MAAC,CAAC;MAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;MAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,yDAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI;QAepF,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,aAAa,EAAE;UACtC,OAAO,KAAK;QACd;QACA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxH,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;UAC/B,OAAO,MAAM,CAAC,CAAC;QACjB;QACA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;UAM5B,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC;UAC/D,IAAI,CAAC,QAAQ,CAAC;YAAC,UAAU,EAAE;cAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,KAAK,OAAO;cAAE,WAAW,EAAE,MAAM,CAAC,iBAAiB;cAAE,IAAI,EAAE,MAAM;cAAE;YAAO;UAAC,CAAC,CAAC;QACnI,CAAC,CAAC;MACJ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC;IACzB;IAEA,OAAO,MAAM,CAAC,CAAC;EACjB;EAEA,iBAAiB,GAAG;IAClB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;IACpC,IAAI,CAAC,MAAM,EAAE;IACb,IAAI,CAAC,QAAQ,CAAC;MAAC,UAAU,EAAE;IAAI,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,WAAW,EAAE;MACtB,qEAAoB,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IACjF,CAAC,MAAM;MACL,MAAM,CAAC,CAAC;IACV;EACF;EAEA,gBAAgB,GAAG;IACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;IACpC,IAAI,CAAC,MAAM,EAAE;IACb,IAAI,CAAC,QAAQ,CAAC;MAAC,UAAU,EAAE;IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;MACzC,qEAAoB,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE;IACA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;EACvB;EAGA,SAAS,CAAC,GAAG,EAAE;IACb,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAChE,IAAI,CAAC,CAAC,IAAI;MAET,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;MAC1D,KAAK,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IACxC,CAAC,CAAC;EACN;EAKA,kBAAkB,CAAC,IAAI,EAAE;IAEvB,MAAM,uBAAuB,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAChF,mEAA0B,CAAC,GAAG,IAAI,GAAG,IAAI,GAAI,CAAC;IAEhD,IAAI,+CAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,+CAAO,CAAC,WAAW,EAAE;MAErF,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,uBAAuB,CAAC,EAAE;QAE7D;MACF;IAEF;IAKA,MAAM,iBAAiB,GAAI,QAAQ,IAAK,QAAQ,KAAK,mEAA0B,GAAG,0BAA0B,GAAG,QAAQ;IAEvH,IAAI,IAAI,CAAC,IAAI,GAAG,uBAAuB,EAAE;MAEvC,MAAM,QAAQ,GAAG,mEAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;MACtD,IAAI,CAAC,QAAQ,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAClF;MACF;MACA,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;MACrD,MAAM,GAAG,GAAG,8CAAM,CAAC,UAAU,CAAC,IAAI,EAAE;QAClC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,QAAQ,EAAE,IAAI,CAAC,IAAI;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE;MACd,CAAC,CAAC;MAEF,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,CAAC;IAClE,CAAC,MAAM;MAEL,mEAAY,CAAC,IAAI,CAAC,CACf,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,8CAAM,CAAC,UAAU,CAAC,IAAI,EAAE;QACpD,IAAI,EAAE,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,QAAQ,EAAE,GAAG,CAAC,IAAI;QAClB,IAAI,EAAE,IAAI,CAAC;MACb,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CACjC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzD;EACF;EAGA,qBAAqB,CAAC,IAAI,EAAE,uBAAuB,EAAE;IACnD,IAAI,IAAI,CAAC,IAAI,GAAG,uBAAuB,EAAE;MAEvC,OAAO,KAAK;IACd;IAEA,IAAI,IAAI,CAAC,IAAI,IAAI,+CAAO,CAAC,WAAW,EAAE;MAEpC,IAAI,CAAC,WAAW,CAAC,8CAAM,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;MACzD,OAAO,IAAI;IACb;IAEA,kEAAW,CAAC,IAAI,CAAC,CACd,IAAI,CAAC,IAAI,IAAI;MACZ,IAAI,CAAC,WAAW,CAAC,8CAAM,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC,CAAC,CACD,KAAK,CAAC,GAAG,IAAI;MACZ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,EAAE;QAAC,KAAK,EAAE,GAAG,CAAC;MAAO,CAAC,CAAC,EAAE,KAAK,CAAC;IAC7G,CAAC,CAAC;IACJ,OAAO,IAAI;EACb;EAGA,gBAAgB,CAAC,IAAI,EAAE;IACrB,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,EAAE,mEAA0B,CAAC;IAEjH,IAAI,IAAI,CAAC,IAAI,GAAG,uBAAuB,EAAE;MAEvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,yBAAyB,EACjF;QAAC,IAAI,EAAE,oEAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,EAAE,oEAAgB,CAAC,uBAAuB;MAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IAClG,CAAC,MAAM;MACL,IAAI,CAAC,QAAQ,CAAC;QACZ,UAAU,EAAE;UACV,IAAI,EAAE,IAAI;UACV,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,IAAI,EAAE,IAAI,CAAC;QACb;MACF,CAAC,CAAC;IACJ;EACF;EAEA,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE;IAC3B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC9B,IAAI,CAAC,QAAQ,CAAC;MACZ,QAAQ,EAAE;IACZ,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;EACrC;EAEA,qBAAqB,GAAG;IACtB,IAAI,CAAC,QAAQ,CAAC;MAAC,kBAAkB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;IAAkB,CAAC,CAAC;EACrE;EAGA,mBAAmB,CAAC,OAAO,EAAE,IAAI,EAAE;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ;IAG9C,MAAM,uBAAuB,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAChF,mEAA0B,CAAC,GAAG,IAAI,GAAG,IAAI,GAAI,CAAC;IAEhD,IAAI,IAAI,CAAC,IAAI,GAAG,uBAAuB,EAAE;MAEvC,MAAM,QAAQ,GAAG,mEAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;MACtD,IAAI,CAAC,QAAQ,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAClF;MACF;MACA,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;MAGrD,kEAAW,CAAC,IAAI,EAAE,0DAAiB,EAAE,0DAAiB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAE/D,IAAI,CAAC,MAAM,IAAI,mEAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CACzC,IAAI,CAAC,GAAG,IAAI;QACX,IAAI,GAAG,GAAG,8CAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE;UACpC,IAAI,EAAE,IAAI;UACV,YAAY,EAAE,GAAG,CAAC,IAAI;UACtB,IAAI,EAAE,GAAG,CAAC,IAAI;UACd,KAAK,EAAE,KAAK;UACZ,MAAM,EAAE,MAAM;UACd,QAAQ,EAAE,KAAK;UACf,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,UAAU,EAAE;QACd,CAAC,CAAC;QACF,IAAI,OAAO,EAAE;UACX,GAAG,GAAG,8CAAM,CAAC,eAAe,CAAC,GAAG,CAAC;UACjC,GAAG,GAAG,8CAAM,CAAC,MAAM,CAAC,GAAG,EAAE,8CAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD;QAEA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,OAAO,CAAC;MACnE,CAAC,CAAC,CACD,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;MAC/C;IACF;IAIA,mEAAY,CAAC,IAAI,CAAC,CACf,IAAI,CAAC,GAAG,IAAI;MACX,IAAI,GAAG,GAAG,8CAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE;QACpC,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,IAAI,CAAC;MACb,CAAC,CAAC;MACF,IAAI,OAAO,EAAE;QACX,GAAG,GAAG,8CAAM,CAAC,eAAe,CAAC,GAAG,CAAC;QACjC,GAAG,GAAG,8CAAM,CAAC,MAAM,CAAC,GAAG,EAAE,8CAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;MACjD;MACA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;IACtD,CAAC,CAAC;EACN;EAGA,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;IAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;IAG5B,MAAM,uBAAuB,GAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAChF,mEAA0B,CAAC,GAAG,IAAI,GAAG,IAAI,GAAI,CAAC;IAEhD,MAAM,OAAO,GAAG,EAAE;IAClB,IAAI,QAAQ;IACZ,IAAK,SAAS,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,GAAI,uBAAuB,EAAE;MAEjE,QAAQ,GAAG,mEAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;MAChD,IAAI,CAAC,QAAQ,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAClF;MACF;MAEA,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,uBAAuB,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI;MACjG,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,GAAG,uBAAuB,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI;IACvG;IAEA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;MAEvB,OAAO,CAAC,GAAG,CAAC,CAAC,mEAAY,CAAC,SAAS,CAAC,EAAE,mEAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAC9D,IAAI,CAAC,IAAI,IAAI;QACZ,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;QACvB,IAAI,GAAG,GAAG,8CAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE;UACpC,IAAI,EAAE,GAAG,CAAC,IAAI;UACd,IAAI,EAAE,GAAG,CAAC,IAAI;UACd,OAAO,EAAE,GAAG,CAAC,IAAI;UACjB,OAAO,EAAE,GAAG,CAAC,IAAI;UACjB,KAAK,EAAE,KAAK;UACZ,MAAM,EAAE,MAAM;UACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;UACzB,QAAQ,EAAE,MAAM,CAAC,IAAI;UACrB,IAAI,EAAE,SAAS,CAAC;QAClB,CAAC,CAAC;QACF,IAAI,OAAO,EAAE;UACX,GAAG,GAAG,8CAAM,CAAC,eAAe,CAAC,GAAG,CAAC;UACjC,GAAG,GAAG,8CAAM,CAAC,MAAM,CAAC,GAAG,EAAE,8CAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD;QACA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;MACxD,CAAC,CAAC;MACF;IACF;IAEA,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAEpD,MAAM,OAAO,GAAG,EAAE;IAElB,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,mEAAY,CAAC,SAAS,CAAC;IAExD,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,kEAAW,CAAC,WAAW,EAAE,sDAAa,EAAE,sDAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAC/F,IAAI,CAAC,MAAM,IAAI,mEAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5C,OAAO,CAAC,CAAC,CAAC,GAAG,kEAAW,CAAC,WAAW,EAAE,0DAAiB,EAAE,0DAAiB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CACnF,IAAI,CAAC,MAAM,IAAI,mEAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CACjB,IAAI,CAAC,IAAI,IAAI;MACZ,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI;MAClC,IAAI,GAAG,GAAG,8CAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE;QACpC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI;QAC/B,YAAY,EAAE,OAAO,CAAC,IAAI;QAC1B,OAAO,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;QACtC,OAAO,EAAE,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;QACtC,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,QAAQ,EAAE,MAAM,CAAC,IAAI;QACrB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,UAAU,EAAE;MACd,CAAC,CAAC;MAEF,IAAI,OAAO,EAAE;QACX,GAAG,GAAG,8CAAM,CAAC,eAAe,CAAC,GAAG,CAAC;QACjC,GAAG,GAAG,8CAAM,CAAC,MAAM,CAAC,GAAG,EAAE,8CAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;MACjD;MAEA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,OAAO,CAAC;IACnE,CAAC,CAAC,CACD,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACzD;EAGA,wBAAwB,CAAC,IAAI,EAAE;IAC7B,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,EAAE,mEAA0B,CAAC;IAEjH,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;MAClC,IAAI,CAAC,QAAQ,CAAC;QAAC,YAAY,EAAE;UAC3B,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;UAC9B,IAAI,EAAE,IAAI;UACV,QAAQ,EAAE,IAAI,CAAC,IAAI;UACnB,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,IAAI,EAAE,IAAI,CAAC;QACb;MAAC,CAAC,CAAC;MACH;IACF;IAGA,kEAAW,CAAC,IAAI,EAAE,sDAAa,EAAE,sDAAa,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAC5E,IAAI,CAAC,MAAM,IAAI;MACd,IAAI,CAAC,QAAQ,CAAC;QAAC,YAAY,EAAE;UAC3B,GAAG,EAAE,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC;UACrC,IAAI,EAAE,MAAM,CAAC,IAAI;UACjB,QAAQ,EAAE,MAAM,CAAC,IAAI;UACrB,KAAK,EAAE,MAAM,CAAC,KAAK;UACnB,MAAM,EAAE,MAAM,CAAC,MAAM;UACrB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI;UACtB,IAAI,EAAE,MAAM,CAAC;QACf;MAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;MACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;IACxC,CAAC,CAAC;EACN;EAGA,cAAc,CAAC,KAAK,EAAE;IACpB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;MAC/B;IACF;IACA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;IACrB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;MAC/C,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC;IACrC,CAAC,MAAM;MACL,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;IAC7B;EACF;EAGA,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC1C,KAAK,CAAC,GAAG,CAAC,CACP,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAC7B,IAAI,CAAC,IAAI,IAAI;MAEZ,MAAM,uBAAuB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,gBAAgB,EAAE,mEAA0B,CAAC,GAAG,IAAI,GAAG,IAAI;MAC5H,IAAI,IAAI,CAAC,IAAI,GAAG,uBAAuB,EAAE;QAEvC,MAAM,QAAQ,GAAG,mEAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACtD,IAAI,CAAC,QAAQ,EAAE;UACb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;UAClF;QACF;QACA,MAAM,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;QACrD,MAAM,GAAG,GAAG,8CAAM,CAAC,WAAW,CAAC,IAAI,EAAE;UACnC,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,IAAI,EAAE,IAAI,CAAC,IAAI;UACf,QAAQ,EAAE,QAAQ;UAClB,OAAO,EAAE,OAAO;UAChB,UAAU,EAAE;QACd,CAAC,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,uBAAuB,EAAE,QAAQ,EAAE,OAAO,CAAC;MACnE,CAAC,MAAM;QAEL,mEAAY,CAAC,IAAI,CAAC,CACf,IAAI,CAAC,GAAG,IAAI;UACX,IAAI,CAAC,WAAW,CAAC,8CAAM,CAAC,WAAW,CAAC,IAAI,EAAE;YACxC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE;UACX,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC;QACpC,CAAC,CAAC;MACN;IACF,CAAC,CAAC,CACD,KAAK,CAAC,GAAG,IAAI;MAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;IAAA,CAAC,CAAC;IAAC;EAC5D;EAEA,kBAAkB,CAAC,GAAG,EAAE,QAAQ,EAAE;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;IACpC,IAAI,KAAK,EAAE;MACT,KAAK,CAAC,UAAU,GAAG,IAAI;IACzB;IACA,QAAQ,CAAC,MAAM,CAAC,CAAC;EACnB;EAMA,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;IAClD,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;MACpB,IAAI,CAAC,QAAQ,CAAC;QAAC,KAAK,EAAE;MAAI,CAAC,CAAC;MAC5B;IACF;IAEA,OAAO,GAAG,OAAO,OAAO,IAAI,QAAQ,GAAG,8CAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO;IACrE,IAAI,8CAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;MAC3B,OAAO,GAAG,8CAAM,CAAC,YAAY,CAAC,OAAO,EAAE,4DAAmB,CAAC;IAC7D,CAAC,MAAM;MAEL,OAAO,GAAG,8CAAM,CAAC,MAAM,CAAC,8CAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAC5C,8CAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;IACnF;IAEA,IAAI,CAAC,QAAQ,CAAC;MACZ,KAAK,EAAE;QACL,OAAO,EAAE,8CAAM,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;QACpD,GAAG,EAAE;MACP;IACF,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;EACrC;EAIA,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE;IAC9B,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE;MACpB,IAAI,CAAC,QAAQ,CAAC;QAAC,KAAK,EAAE;MAAI,CAAC,CAAC;MAC5B;IACF;IAEA,OAAO,GAAG,OAAO,OAAO,IAAI,QAAQ,GAAG,8CAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,OAAO;IACrE,MAAM,QAAQ,GAAG,8CAAM,CAAC,UAAU,CAAC,OAAO,CAAC;IAC3C,IAAI,8CAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;MAC3B,OAAO,GAAG,8CAAM,CAAC,YAAY,CAAC,OAAO,EAAE,4DAAmB,CAAC;IAC7D,CAAC,MAAM;MAEL,OAAO,GAAG,8CAAM,CAAC,MAAM,CAAC,8CAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAC5C,8CAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC;IACnF;IAEA,IAAI,CAAC,QAAQ,CAAC;MACZ,KAAK,EAAE;QACL,OAAO,EAAE,8CAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC;QAC7F,GAAG,EAAE,GAAG;QACR,OAAO,EAAE;MACX,CAAC;MACD,aAAa,EAAE;IACjB,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;EACrC;EAGA,iBAAiB,GAAG;IAClB,IAAI,CAAC,QAAQ,CAAC;MAAC,KAAK,EAAE,IAAI;MAAE,aAAa,EAAE;IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;EACrC;EAEA,gBAAgB,CAAC,UAAU,EAAE;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;IAClD,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE;MACtB,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;QAAC,KAAK,EAAE,QAAQ;QAAE,QAAQ,EAAE;MAAQ,CAAC,CAAC;MACjE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;MAClC,UAAU,CAAC,CAAC,IAAI;QAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;MAAA,CAAC,EAAG,IAAI,CAAC;IACjE,CAAC,MAAM;MAIL,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,UAAU,CAAC;MACnD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC;MACzC;IACF;EACF;EAQA,aAAa,CAAC,GAAG,EAAE;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;IACzG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;MAChC;IACF;IACA,2DAAc,CAAC,UAAU,CAAC,2DAAc,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACzF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IAC3E,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;MAC1B,IAAI,CAAC,CAAC;IACR,CAAC,MAAM;MACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CACxF,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpE;EACF;EAEA,kBAAkB,CAAC,GAAG,EAAE;IACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1D,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;EAC9B;EAEA,aAAa,GAAG;IAOd,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;IACvE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IACjF,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,cAAc;EACxD;EAEA,eAAe,CAAC,CAAC,EAAE;IACjB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;EAC5B;EAEA,YAAY,CAAC,CAAC,EAAE;IACd,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,IAAI,CAAC,WAAW,EAAE;IAClB,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;MAC3D,IAAI,CAAC,QAAQ,CAAC;QAAC,QAAQ,EAAE;MAAI,CAAC,CAAC;IACjC;EACF;EAEA,aAAa,CAAC,CAAC,EAAE;IACf,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,IAAI,CAAC,WAAW,EAAE;IAClB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE;MACzB,IAAI,CAAC,QAAQ,CAAC;QAAC,QAAQ,EAAE;MAAK,CAAC,CAAC;IAClC;EACF;EAEA,UAAU,CAAC,CAAC,EAAE;IACZ,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;EACrB;EAEA,UAAU,CAAC,CAAC,EAAE;IACZ,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,IAAI,CAAC,QAAQ,CAAC;MAAC,QAAQ,EAAE;IAAK,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;MACnF,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;MACzC,IAAI,CAAC,WAAW,GAAG,CAAC;IACtB;EACF;EAEA,MAAM,GAAG;IACP,MAAM;MAAC;IAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;IAIvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,IAC/B,+DAAC,2CAAQ;MAAC,QAAQ,EAAE;QAAA,UAAK,+DAAC,wDAAgB;UAAC,EAAE,EAAC,cAAc;UAAC,cAAc,EAAC,YAAY;UACpF,WAAW,EAAC;QAAyC,gBAAC;MAAC,gBAAK,CAAE;MAAA,UAChE,+DAAC,SAAS;QACR,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;QACxB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;QACxB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAU;QAChC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAc;QACxC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;QAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;QACxB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAK;QAClC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAmB;QACzC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;QAC5B,QAAQ,EAAE,IAAI,CAAC,gBAAiB;QAChC,gBAAgB,EAAE,IAAI,CAAC,qBAAsB;QAC7C,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;QAClC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,eAAgB;QACxC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAmB;QAC9C,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC;MAAiB,gBAAE;IAAC,gBACvC,CAAC;IAEf,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IACtC,+DAAC,0EAAiB;MAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAQ;MACxD,SAAS,EAAE,IAAI,CAAC,iBAAkB;MAAC,QAAQ,EAAE,IAAI,CAAC;IAAiB,gBAAE,CAAC;IAE1E,IAAI,SAAS;IACb,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MACrB,SAAS,GAAG,+DAAC,uDAAQ,mBAAE,CAAC;IAE1B,CAAC,MAAM;MACL,IAAI,UAAU;MACd,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QAE3B,UAAU,GACR,+DAAC,2CAAQ;UAAC,QAAQ,EAAE;YAAA,UAAK,+DAAC,wDAAgB;cAAC,EAAE,EAAC,cAAc;cAAC,cAAc,EAAC,YAAY;cACtF,WAAW,EAAC;YAAyC,gBAAC;UAAC,gBAAK,CAAE;UAAA,UAC9D,+DAAC,YAAY;YACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;YACjC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;YACxB,aAAa,EAAE,IAAI,CAAC,iBAAkB;YACtC,OAAO,EAAE,IAAI,CAAC,kBAAmB;YACjC,aAAa,EAAE,IAAI,CAAC;UAAoB,gBAAE;QAAC,gBACrC,CACX;MACH,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QAElC,UAAU,GAAG,+DAAC,2CAAQ;UAAC,QAAQ,EAAE;YAAA,UAAK,+DAAC,wDAAgB;cAAC,EAAE,EAAC,cAAc;cAAC,cAAc,EAAC,YAAY;cACjG,WAAW,EAAC;YAAyC,gBAAC;UAAC,gBAAK,CAAE;UAAA,UAC9D,+DAAC,YAAY;YACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;YACjC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;YAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;YACxB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;YAC5B,aAAa,EAAE,IAAI,CAAC,iBAAkB;YACtC,OAAO,EAAE,IAAI,CAAC,kBAAmB;YACjC,aAAa,EAAE,IAAI,CAAC;UAAoB,gBAAE;QAAC,gBACrC,CAAC;MAEf,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;QAEnC,UAAU,GAAG,+DAAC,2CAAQ;UAAC,QAAQ,EAAE;YAAA,UAAK,+DAAC,wDAAgB;cAAC,EAAE,EAAC,cAAc;cAAC,cAAc,EAAC,YAAY;cACjG,WAAW,EAAC;YAAyC,gBAAC;UAAC,gBAAK,CAAE;UAAA,UAC9D,+DAAC,YAAY;YACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,aAAc;YAClC,OAAO,EAAE,IAAI,CAAC;UAAmB,gBAAE;QAAC,gBAC9B,CAAC;MAEf,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;QAEnC,UAAU,GAAG,+DAAC,2CAAQ;UAAC,QAAQ,EAAE;YAAA,UAAK,+DAAC,wDAAgB;cAAC,EAAE,EAAC,cAAc;cAAC,cAAc,EAAC,YAAY;cACjG,WAAW,EAAC;YAAyC,gBAAC;UAAC,gBAAK,CAAE;UAAA,UAC9D,+DAAC,YAAY;YACX,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,aAAc;YAClC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;YAC1B,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;YAC5B,OAAO,EAAE,IAAI,CAAC;UAAmB,gBAAE;QAAC,gBAC9B,CAAC;MAEf,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QAEhC,IAAI,+CAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAC/E,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,+CAAO,CAAC,WAAW,EAAE;UACrD,UAAU,GAAG,+DAAC,2CAAQ;YAAC,QAAQ,EAAE;cAAA,UAAK,+DAAC,wDAAgB;gBAAC,EAAE,EAAC,cAAc;gBAAC,cAAc,EAAC,YAAY;gBACnG,WAAW,EAAC;cAAyC,gBAAC;YAAC,gBAAK,CAAE;YAAA,UAC9D,+DAAC,cAAc;cACb,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,UAAW;cAC/B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;cAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;cACxB,aAAa,EAAE,IAAI,CAAC,iBAAkB;cACtC,OAAO,EAAE,IAAI,CAAC,kBAAmB;cACjC,aAAa,EAAE,IAAI,CAAC;YAAmB,gBAAE;UAAC,gBACpC,CAAC;QACb,CAAC,MAAM;UACL,UAAU,GAAG,+DAAC,2CAAQ;YAAC,QAAQ,EAAE;cAAA,UAAK,+DAAC,wDAAgB;gBAAC,EAAE,EAAC,cAAc;gBAAC,cAAc,EAAC,YAAY;gBACjG,WAAW,EAAC;cAAyC,gBAAC;YAAC,gBAAK,CAAE;YAAA,UAC9D,+DAAC,UAAU;cACT,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,UAAW;cAC/B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;cAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;cACxB,aAAa,EAAE,IAAI,CAAC,iBAAkB;cACtC,OAAO,EAAE,IAAI,CAAC,kBAAmB;cACjC,aAAa,EAAE,IAAI,CAAC;YAAmB,gBAAE;UAAC,gBACpC,CAAC;QACf;MACF,CAAC,MAAM;QACL,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI;QACrD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS;QACpD,MAAM,WAAW,GAAG,EAAE;QACtB,IAAI,KAAK,CAAC,OAAO,EAAE;UACjB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1B,WAAW,CAAC,IAAI,CAAC;cAAC,IAAI,EAAE,UAAU;cAAE,KAAK,EAAE;YAAW,CAAC,CAAC;UAC1D;UACA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;YACvB,WAAW,CAAC,IAAI,CAAC;cAAC,IAAI,EAAE,OAAO;cAAE,KAAK,EAAE;YAAW,CAAC,CAAC;UACvD;UACA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;YACxB,WAAW,CAAC,IAAI,CAAC;cAAC,IAAI,EAAE,WAAW;cAAE,KAAK,EAAE;YAAW,CAAC,CAAC;UAC3D;QACF;QAEA,MAAM,cAAc,GAAG,EAAE;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QAE1G,MAAM,YAAY,GAAG,EAAE;QACvB,IAAI,YAAY,GAAG,IAAI;QACvB,IAAI,QAAQ,GAAG,IAAI;QAGnB,IAAI,YAAY,GAAG,UAAU,GAAG,gBAAgB,GAAG,UAAU;QAC7D,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK;UACrC,IAAI,QAAQ,GAAG,IAAI,GAAI,IAAI,CAAC,IAAI,IAAI,MAAM,GAAI,IAAI;UAElD,IAAI,QAAQ,GAAG,QAAQ;UACvB,IAAI,QAAQ,GAAG,GAAG,CAAC,IAAI,IAAI,MAAM;UACjC,IAAI,QAAQ,IAAI,YAAY,EAAE;YAC5B,IAAI,QAAQ,IAAI,QAAQ,EAAE;cACxB,QAAQ,GAAG,QAAQ;YACrB,CAAC,MAAM;cACL,QAAQ,GAAG,MAAM;YACnB;UACF,CAAC,MAAM,IAAI,QAAQ,IAAI,QAAQ,EAAE;YAC/B,QAAQ,GAAG,OAAO;UACpB;UACA,YAAY,GAAG,QAAQ;UAEvB,MAAM,OAAO,GAAG,EAAE,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;UAClD,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC;UAEjD,IAAI,QAAQ,GAAG,QAAQ;YAAE,QAAQ;YAAE,UAAU;UAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;UACrC,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;YACvB,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;YACzB,UAAU,GAAG,mEAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;UAC9C;UAGA,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;UAC/C,IAAI,UAAU,GAAG,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI;UAC3D,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE;YACpC,UAAU,GAAG,IAAI;UACnB;UAMA,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GACvG,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,IAAI;UAC5B,MAAM,yBAAyB,GAAG,aAAa,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,yBAAyB,CAAC;UACpH,MAAM,oBAAoB,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,eAAe,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,IAC7H,CAAC,yBAAyB,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,IAAI,QAAQ,IAAI,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ;UAEpH,IAAI,GAAG,CAAC,EAAE,EAAE;YAEV,YAAY,CAAC,IAAI,CACf,+DAAC,kEAAW;cACV,OAAO,EAAE,IAAK;cACd,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe;YAAE,GAChE,GAAG,CAAC,GAAG,OAAG,CACjB,CAAC;UACL,CAAC,MAAM,IAAI,oBAAoB,EAAE;YAC/B,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE;cACnE,YAAY,CAAC,IAAI,CACf,+DAAC,kEAAW;gBACV,IAAI,EAAE,sEAAkB,CAAC,GAAG,CAAC,EAAE,CAAE;gBACjC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;cAAO,GAC1B,OAAO,GAAG,GAAG,CAAC,GAAG,OAAG,CAC7B,CAAC;cACD,QAAQ,GAAG,QAAQ;YACrB;YACA,YAAY,CAAC,IAAI,CACf,+DAAC,kEAAW;cACV,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC;YAAK,GACxB,GAAG,CAAC,GAAG,OAAG,CACnB,CAAC;UACH,CAAC,MAAM;YACL,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAEjC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE;cACnE,YAAY,CAAC,IAAI,CACf,+DAAC,kEAAW;gBACV,IAAI,EAAE,sEAAkB,CAAC,GAAG,CAAC,EAAE,CAAE;gBACjC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;cAAO,GAC1B,OAAO,GAAG,GAAG,CAAC,GAAG,OAAG,CAC7B,CAAC;cACD,QAAQ,GAAG,QAAQ;YACrB;YACA,YAAY,CAAC,IAAI,CACf,+DAAC,iEAAW;cACV,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;cAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;cACxB,OAAO,EAAE,GAAG,CAAC,OAAQ;cACrB,QAAQ,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,IAAK;cACpC,IAAI,EAAE,GAAG,CAAC,IAAK;cACf,UAAU,EAAE,UAAW;cACvB,MAAM,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAQ;cACzD,SAAS,EAAE,GAAG,CAAC,EAAG;cAClB,QAAQ,EAAE,OAAQ;cAClB,GAAG,EAAE,GAAG,CAAC,GAAI;cACb,OAAO,EAAE,UAAW;cACpB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;cAC3B,QAAQ,EAAE,QAAS;cACnB,QAAQ,EAAE,QAAS;cACnB,UAAU,EAAE,UAAW;cACvB,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,IAAK;cACzF,QAAQ,EAAE,QAAS;cACnB,QAAQ,EAAE,cAAe;cACzB,QAAQ,EAAE,GAAG,CAAC,SAAU;cACxB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,QAAS;cAClC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;cAChC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,YAAY,GAAG,IAAK;cAClG,wBAAwB,EAAE,IAAI,CAAC,4BAA6B;cAC5D,uBAAuB,EAAE,IAAI,CAAC,2BAA4B;cAC1D,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAW;cAClC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE;cAC/E,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,qBAAsB;cACjD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE;cAC1C,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAc;cACxC,eAAe,EAAE,IAAI,CAAC,4BAA6B;cACnD,aAAa,EAAE,IAAI,CAAC,iBAAkB;cACtC,cAAc,EAAE,IAAI,CAAC,kBAAmB;cACxC,cAAc,EAAE,IAAI,CAAC,kBAAmB;cACxC,SAAS,EAAE,IAAI,CAAC,eAAgB;cAChC,WAAW,EAAE,IAAI,CAAC,iBAAkB;cACpC,YAAY,EAAE,IAAI,CAAC,gBAAiB;cACpC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAa;cACtC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;cAC5B,GAAG,EAAE;YAAI,GACJ,GAAG,CAAC,GAAG,OAAG,CACnB,CAAC;UACH;QACF,CAAC,CAAC;QAEF,IAAI,QAAQ,GAAG,IAAI;QACnB,IAAI,SAAS,EAAE;UACb,IAAI,KAAK,CAAC,MAAM,EAAE;YAChB,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,gBAAgB,EAAE;cAAC,KAAK,EAAE,KAAK,CAAC;YAAM,CAAC,CAAC;UAC5E;QACF,CAAC,MAAM;UACL,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;UACxE,IAAI,IAAI,EAAE;YACR,IAAI,8CAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;cACrC,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC;cAC/C,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;gBACpB,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,SAAS,EACzC;kBAAC,SAAS,EAAE,mEAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM;gBAAC,CAAC,CAAC;cAEzE;YACF,CAAC,MAAM,IAAI,8CAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;cAC9C,IAAI,KAAK,CAAC,MAAM,EAAE;gBAChB,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE;kBAAC,KAAK,EAAE,KAAK,CAAC;gBAAM,CAAC,CAAC;cACxE;YACF;UACF;QACF;QACA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,GAC5D,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,GAAG,EAAE,CAAC,GAAG,SAAS;QAE1F,MAAM,UAAU,GAAG,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,UAAU,GAAG,EAAE,CAAC;QACzE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE;QAOpE,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QAEvE,IAAI,iBAAiB,GACnB;UAAA,WACG,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAC3B;YAAG,IAAI,EAAC,GAAG;YAAC,EAAE,EAAC,2BAA2B;YAAC,OAAO,EAAE,IAAI,CAAC,sBAAuB;YAAA,WAC9E;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAC;YAAQ,gBAAG,CAAC,EAC1C;cAAA,UAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;YAAO,gBAAO,CAAC,EACnD;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAC;YAAa,gBAAG,CAAC;UAAA,eAC9C,CAAC,GAAG,IAAI,EACZ,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,CAAC,GACjC;YAAG,IAAI,EAAC,GAAG;YAAC,EAAE,EAAC,2BAA2B;YAAC,OAAO,EAAE,IAAI,CAAC,sBAAuB;YAAA,WAC9E;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAC;YAAc,gBAAG,CAAC,EAChD;cAAA,WAAM,UAAQ,EAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAC,GAAC;YAAA,eAAM,CAAC,EACtD;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAC;YAAa,gBAAG,CAAC;UAAA,eAC9C,CAAC,GAAG,IAAI,EACb;YAAK,EAAE,EAAC,oBAAoB;YAAC,SAAS,EAAE,aAAc;YAAA,WACpD;cAAQ,EAAE,EAAC,cAAc;cAAC,SAAS,EAAE,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,GAAG,SAAS,CAAE;cACtG,OAAO,EAAE,IAAI,CAAC,iBAAkB;cAAA,UAChC;gBAAG,SAAS,EAAC,gBAAgB;gBAAA,UAAC;cAAc,gBAAG;YAAC,gBAC1C,CAAC,EACT;cAAK,EAAE,EAAC,gBAAgB;cAAC,GAAG,EAAE,IAAI,CAAC,qBAAsB;cAAA,UACvD;gBAAI,EAAE,EAAC,UAAU;gBAAC,SAAS,EAAE,YAAa;gBAAA,WACvC,IAAI,CAAC,KAAK,CAAC,qBAAqB,GAC/B;kBAAA,WACG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,GAClC,+DAAC,kEAAW;oBAAC,IAAI,EAAE,sEAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAE;oBACzE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;kBAAO,GAAK,sBAAsB,OAAE,CAAC,GAAG,IAAI,EACxE;oBAAI,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAE;oBAAA,UAExF;sBAAA,UACE;wBAAK,SAAS,EAAC,YAAY;wBAAA,UACzB;0BAAK,SAAS,EAAC,cAAc;0BAAA,UAC3B;4BAAK,SAAS,EAAC,iBAAiB;4BAAA,UAAE,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC;0BAAI,gBAAM;wBAAC,gBAC3E;sBAAC,gBACH;oBAAC,gBACH;kBAAC,GAPF,yBAAyB,OAQ3B,CAAC;gBAAA,eACL,CAAC,GAAG,IAAI,EACX,YAAY;cAAA,eACX;YAAC,gBACF,CAAC,EACL,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GACrB;cAAK,EAAE,EAAC,uBAAuB;cAAA,UAC5B,IAAI,CAAC,KAAK,CAAC,cAAc,GAC1B;gBAAK,EAAE,EAAC,iBAAiB;gBAAA,UACvB,+DAAC,wDAAgB;kBAAC,EAAE,EAAC,uBAAuB;kBAAC,cAAc,EAAC,uBAAuB;kBACjF,WAAW,EAAC;gBAAgD,gBAAE;cAAC,gBAC9D,CAAC,GACJ;YAAI,gBACH,CAAC,GACJ,IAAI,EACN;cAAK,SAAS,EAAE,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,GAAG,EAAE,CAAE;cAAA,WAC1D;gBAAG,SAAS,EAAC,gBAAgB;gBAAA,UAAC;cAAK,gBAAG,CAAC,QAAM,EAAC,IAAI,CAAC,KAAK,CAAC,KAAK;YAAA,eAC3D,CAAC;UAAA,eACH,CAAC,EACL,IAAI,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,GAC1D;YAAK,EAAE,EAAC,8BAA8B;YAAA,WACpC;cAAG,SAAS,EAAC,0BAA0B;cAAA,UAAC;YAAK,gBAAG,CAAC,KAAC,iEAAC,wDAAgB;cACjE,EAAE,EAAC,0BAA0B;cAAC,cAAc,EAAC,+BAA+B;cAC5E,WAAW,EAAC;YAAiD,gBAAE,CAAC,KAAC;cAAG,IAAI,EAAC,GAAG;cAC1E,OAAO,EAAE,IAAI,CAAC,gBAAiB;cAAA,UAAC,+DAAC,wDAAgB;gBAAC,EAAE,EAAC,wBAAwB;gBAC7E,cAAc,EAAC,QAAQ;gBAAC,WAAW,EAAC;cAA2C,gBAAE;YAAC,gBAAG,CAAC,KAC5F;UAAA,eAAK,CAAC,GAAG,IAAI,EACd,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,IACxD,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,YAAY,IAAI,iBAAiB,GAChE;YAAK,EAAE,EAAC,0BAA0B;YAAA,UAAC;UAAS,gBAAK,CAAC,GAAG,IAAI,EAC1D,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,IACxD,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,YAAY,IAAI,kBAAkB,GACjE;YAAK,EAAE,EAAC,0BAA0B;YAAA,UAAC;UAAU,gBAAK,CAAC,GAAG,IAAI,EAC3D,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,IACxD,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,YAAY,IAAI,MAAM,GACrD;YAAK,EAAE,EAAC,0BAA0B;YAAA,WAAC,oBAAkB;cAAG,IAAI,EAAC,GAAG;cAC9D,OAAO,EAAE,IAAI,CAAC,4BAA6B;cAAA,UAAC;YAAM,gBAAG,CAAC;UAAA,eAAK,CAAC,GAAG,IAAI,EACtE,IAAI,CAAC,KAAK,CAAC,UAAU,GACpB;YAAK,EAAE,EAAC,kBAAkB;YAAA,WACxB;cAAK,EAAE,EAAC,oBAAoB;cAAA,WAAC,KAAG,EAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAC,IAAE;YAAA,eAAK,CAAC,EACxE;cAAK,EAAE,EAAC,sBAAsB;cAAA,WAC5B;gBAAG,IAAI,EAAC,GAAG;gBAAC,OAAO,EAAE,CAAC,IAAI;kBAAE,CAAC,CAAC,cAAc,CAAC,CAAC;kBAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBAAE,CAAE;gBACnH,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,GAAG,UAAW;gBAAA,WAC5D;kBAAG,SAAS,EAAC,gBAAgB;kBAAA,UAAC;gBAAO,gBAAG,CAAC,MAC3C;cAAA,eAAG,CAAC,EACJ;gBAAG,IAAI,EAAC,GAAG;gBAAC,OAAO,EAAE,CAAC,IAAI;kBAAE,CAAC,CAAC,cAAc,CAAC,CAAC;kBAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAAE,CAAE;gBAC5E,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,GAAG,UAAW;gBAAA,WAC5D;kBAAG,SAAS,EAAC,gBAAgB;kBAAA,UAAC;gBAAW,gBAAG,CAAC,MAC/C;cAAA,eAAG,CAAC,EACJ;gBAAG,IAAI,EAAC,GAAG;gBAAC,OAAO,EAAE,CAAC,IAAI;kBAAE,CAAC,CAAC,cAAc,CAAC,CAAC;kBAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAAE,CAAE;gBAC1E,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,GAAG,UAAW;gBAAA,WAC5D;kBAAG,SAAS,EAAC,gBAAgB;kBAAA,UAAC;gBAAc,gBAAG,CAAC,MAClD;cAAA,eAAG,CAAC;YAAA,eACD,CAAC,EACN;cAAG,IAAI,EAAC,GAAG;cAAC,EAAE,EAAC,qBAAqB;cAAC,OAAO,EAAE,CAAC,IAAI;gBAAE,CAAC,CAAC,cAAc,CAAC,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;cAAE,CAAE;cAAA,UAAC;YAAE,gBAAG,CAAC;UAAA,eAC9G,CAAC,GACJ,IAAI,CAAC,KAAK,CAAC,WAAW,GACxB,+DAAC,+DAAU;YAAC,QAAQ,EAAE,IAAI,CAAC;UAAwB,gBAAE,CAAC,GAEtD,+DAAC,kEAAW;YACV,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;YAC1B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;YAC5B,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAe;YAUrC,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAQ;YACrD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;YACxB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAU;YAChG,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAY;YACpC,UAAU,EAAE,IAAI,CAAC,YAAa;YAC9B,mBAAmB,EAAE,IAAI,CAAC,YAAa;YACvC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,oBAAqB;YAC9E,eAAe,EAAG,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,UAAU,GAAI,IAAI,GAAG,IAAI,CAAC,aAAc;YACxF,iBAAiB,EAAE,IAAI,CAAC,eAAgB;YACxC,aAAa,EAAE,IAAI,CAAC,WAAY;YAChC,YAAY,EAAG,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,cAAc,GAAI,IAAI,GAAG,IAAI,CAAC,gBAAiB;YAC3F,aAAa,EAAG,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,cAAc,GAAI,IAAI,GAAG,IAAI,CAAC,wBAAyB;YACpG,aAAa,EAAG,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,cAAc,GAAI,IAAI,GAAG,IAAI,CAAC,mBAAoB;YAC/F,YAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,YAAa;YACpE,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAiB;YAC9C,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAiB;YAC9C,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;YAC5B,YAAY,EAAE,IAAI,CAAC,gBAAiB;YACpC,aAAa,EAAE,IAAI,CAAC;UAAkB,gBAAE,CAAC;QAAA,eAC7C,CACH;QAED,UAAU,GACR;UAAA,WACE;YAAK,EAAE,EAAC,qBAAqB;YAAC,SAAS,EAAC,eAAe;YAAA,WACpD,IAAI,CAAC,KAAK,CAAC,aAAa,GACvB;cAAG,IAAI,EAAC,GAAG;cAAC,EAAE,EAAC,mBAAmB;cAAC,OAAO,EAAG,CAAC,IAAK;gBAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;cAAC,CAAE;cAAA,UACtI;gBAAG,SAAS,EAAC,gBAAgB;gBAAA,UAAC;cAAU,gBAAG;YAAC,gBAC3C,CAAC,GAEJ,IAAI,EACN;cAAK,SAAS,EAAC,YAAY;cAAA,WACzB,+DAAC,gEAAU;gBACT,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAa;gBAC7C,MAAM,EAAE,MAAO;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;gBACxB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAM;gBACxB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;cAAQ,gBAAE,CAAC,EAChC,CAAC,SAAS,GAAG;gBAAM,SAAS,EAAE;cAAO,gBAAE,CAAC,GAAG,IAAI;YAAA,eAC7C,CAAC,EACN;cAAK,EAAE,EAAC,mBAAmB;cAAA,WACzB;gBAAK,EAAE,EAAC,aAAa;gBAAC,SAAS,EAAE,UAAW;gBAAA,WAC1C,IAAI,CAAC,KAAK,CAAC,KAAK,IAChB;kBAAA,UAAG,+DAAC,wDAAgB;oBAAC,EAAE,EAAC,eAAe;oBAAC,cAAc,EAAC,SAAS;oBAC9D,WAAW,EAAC;kBAAwC,gBAAE;gBAAC,gBAAG,CAAC,EAC9D,+DAAC,mEAAa;kBAAC,MAAM,EAAE;gBAAY,gBAAE,CAAC;cAAA,eAAK,CAAC,EAC7C;gBAAK,EAAE,EAAC,iBAAiB;gBAAA,UAAE;cAAQ,gBAAM,CAAC;YAAA,eACvC,CAAC,EACN;cAAK,KAAK,EAAE;gBAAC,UAAU,EAAE;cAAM;YAAE,gBAAC,CAAC,EAClC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GACtD,+DAAC,qEAAc;cACb,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;cAC1B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK;cACtB,QAAQ,EAAE,cAAe;cACzB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAY;cACjC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;cAC5B,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC;gBAAC,WAAW,EAAE;cAAK,CAAC,CAAE;cAC1D,UAAU,EAAE,IAAI,CAAC,gBAAiB;cAClC,QAAQ,EAAE,IAAI,CAAC;YAAmB,gBAAE,CAAC,GACrC,IAAI,EACP,UAAU,GACT,+DAAC,+DAAS;cACR,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;cAC1B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC;YAAW,gBAAE,CAAC,GACxC,IAAI,EAEN;cAAA,UACE;gBAAG,IAAI,EAAC,GAAG;gBAAC,OAAO,EAAE,IAAI,CAAC,kBAAmB;gBAAA,UAC3C;kBAAG,SAAS,EAAC,gBAAgB;kBAAA,UAAC;gBAAS,gBAAG;cAAC,gBAC1C;YAAC,gBACD,CAAC;UAAA,eACH,CAAC,EACL,IAAI,CAAC,KAAK,CAAC,aAAa,GACvB;YAAA,WACG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GACzB,+DAAC,qEAAc;cACb,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;cAC1B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAK;cACtB,QAAQ,EAAE,cAAe;cACzB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAY;cACjC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;cAC5B,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC;gBAAC,WAAW,EAAE;cAAK,CAAC,CAAE;cAC1D,UAAU,EAAE,IAAI,CAAC,gBAAiB;cAClC,QAAQ,EAAE,IAAI,CAAC;YAAmB,gBAAE,CAAC,GACnC,IAAI,EAEV,+DAAC,gEAAU;cACT,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,UAAW;cAC7B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAU;cAC3B,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC;YAAQ,gBAAE,CAAC;UAAA,eACtC,CAAC,GACD,IAAI,EACR,+DAAC,iEAAW;YAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;UAAiB,gBAAE,CAAC,EACjD,iBAAiB,EACjB,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,GAC1C;YAAK,SAAS,EAAC,aAAa;YAAA,UAAE,aAAa,CAAC,QAAQ,CAAC,SAAS;UAAC,gBAAM,CAAC,GACtE,IAAI;QAAA,eACN,CACH;MACH;MACA,SAAS,GAAG;QAAK,EAAE,EAAC,YAAY;QAAC,GAAG,EAAE,IAAI,CAAC,cAAe;QAAA,WAAE,UAAU,EAAE,OAAO,EAAE,UAAU;MAAA,eAAM,CAAC;IACpG;IACA,OAAO,SAAS;EAClB;AACF;AAAC;AAED,+DAAe,sDAAU,CAAC,YAAY,CAAC,E;;;;;;;;;;;;;;;;;;;;;;;AClwFb;AACoB;AAEC;AACS;AACD;AACM;AAAA;AAO7D,MAAM,oBAAoB,GAAG;EAAC,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;EAAE,KAAK,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC;EAAE,QAAQ,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC;EAAE,IAAI,EAAE,CAAC,mBAAmB,EAAE,SAAS;AAAC,CAAC;AAC1M,SAAS,sBAAsB,CAAC,IAAI,EAAE;EACpC,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;EACpC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,OAAO;EAC1C,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,OAAO;EAC1C,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,OAAO,OAAO;EAC1C,IAAI,CAAC,KAAK,iBAAiB,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IACzG,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,0BAA0B,IAAI,CAAC,KAAK,+BAA+B,EAAE;IAC1I,OAAO,UAAU;EACnB;EACA,OAAO,MAAM;AACf;AAEe,MAAM,UAAU,SAAS,wDAAe,CAAC;EACtD,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,KAAK,CAAC;IAEZ,IAAI,CAAC,KAAK,GAAG;MACX,UAAU,EAAE,IAAI;MAChB,QAAQ,EAAE;IACZ,CAAC;IAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;EAClD;EAEA,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACpC,IAAI,CAAC,GAAG,EAAE;MACR,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,GAAG,GAAG,GAAG,GAAG,CAAC;MACxD;IACF;IAMA,MAAM,UAAU,GAAG,oEAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1D,IAAI,CAAC,QAAQ,CAAC;MAAC,UAAU,EAAE;IAAU,CAAC,CAAC;IACvC,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EACzC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC;MAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;IAAI,CAAC,CAAC,EAC7D,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CACtC,CAAC,CACA,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;MAAC,UAAU,EAAE,IAAI;MAAE,QAAQ,EAAE;IAAC,CAAC,CAAC,CAAC,CACzD,KAAK,CAAC,GAAG,IAAI;MACZ,IAAI,GAAG,EAAE;QACP,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,0BAA0B,GAAG,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;MACrE;MACA,IAAI,CAAC,QAAQ,CAAC;QAAC,UAAU,EAAE,IAAI;QAAE,QAAQ,EAAE;MAAC,CAAC,CAAC;IAChD,CAAC,CAAC;EACJ;EAEA,YAAY,GAAG;IACb,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;MACxB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;MAChC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC;EACF;EAEA,MAAM,GAAG;IACP,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,iBAAiB;IACvD,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE;MACxB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IAClE;IACA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,GAC5B;MAAM,SAAS,EAAC,YAAY;MAAA,WAAC,GAAC,EAAC,mEAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,GAAC;IAAA,eAAM,CAAC,GACzE,IAAI;IAKN,IAAI,GAAG,EAAE,UAAU;IACnB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,4DAAa,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;MAE5F,GAAG,GAAG,GAAG;MACT,UAAU,GAAI,CAAC,IAAK;QAClB,CAAC,CAAC,cAAc,CAAC,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;MACrF,CAAC;IACH,CAAC,MAAM;MACL,GAAG,GAAG,0DAAW,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;MACzC,UAAU,GAAG,IAAI;IACnB;IACA,MAAM,cAAc,GAAG;MAAA,WAAE;QAAG,SAAS,EAAC,gBAAgB;QAAA,UAAC;MAAa,gBAAG,CAAC,KAAC,gEAAC,wDAAgB;QAAC,EAAE,EAAC,iBAAiB;QAC7G,cAAc,EAAC,MAAM;QAAC,WAAW,EAAC;MAA4B,gBAAE,CAAC;IAAA,eAAE,CAAC;IACtE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvF,OACE;MAAK,SAAS,EAAC,YAAY;MAAA,WACzB;QAAA,UAAK;UAAG,SAAS,EAAC,oBAAoB;UAAC,KAAK,EAAE;YAAC;UAAK,CAAE;UAAA,UAAE;QAAI,gBAAI;MAAC,gBAAK,CAAC,EACvE;QAAK,SAAS,EAAC,aAAa;QAAA,WAC1B;UAAA,WAAM,QAAQ,EAAC,GAAC,EAAC,IAAI;QAAA,eAAM,CAAC,EAC3B,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,GAC5C,8DAAC,0DAAY;UAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAS;UACvF,QAAQ,EAAE,IAAI,CAAC;QAAa,gBAAE,CAAC,GAEjC;UAAA,UAAM,GAAG,GACP;YAAG,IAAI,EAAE,GAAI;YAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAS;YAAC,OAAO,EAAE,UAAW;YAAA,UAAE;UAAc,gBAAI,CAAC,GAEtF;YAAM,SAAS,EAAC,YAAY;YAAA,UAAE;UAAc,gBAAO;QAAC,gBAChD,CAAC;MAAA,eAEN,CAAC;IAAA,eACH,CAAC;EAEV;AACF;AAAC,C;;;;;;;;;;;;;;;;;;;;;;;;;ACpHyB;AACgC;AACL;AAEX;AACO;AACN;AACO;AAEG;AACP;AACI;AAAA;AASlD,MAAM,uBAAuB,GAAG,kBAAkB;AAClD,SAAS,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;EACxC,IAAI;IACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,uBAAuB,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC;IACpG,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;EAClD,CAAC,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,KAAK;EACd;AACF;AACA,SAAS,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;EAC1C,IAAI;IACF,MAAM,GAAG,GAAG,uBAAuB,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE;IAC3C,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;MAEtB,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxE;EACF,CAAC,CAAC,OAAO,CAAC,EAAE,CAAe;AAC7B;AAEA,MAAM,eAAe,SAAS,4DAAmB,CAAC;EAChD,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,KAAK,CAAC;IAEZ,IAAI,CAAC,KAAK,GAAG;MACX,QAAQ,EAAE,CAAC;MACX,WAAW,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;MACnF,cAAc,EAAE,KAAK;MACrB,gBAAgB,EAAE,IAAI;MACtB,eAAe,EAAE;IACnB,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE;MAClB,KAAK,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D;IAEA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC;IAE9E,IAAI,CAAC,gBAAgB,GAAG;MACtB,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;MACxD,aAAa,EAAE,KAAK,CAAC,aAAa;MAClC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;MAE1D,aAAa,EAAE,IAAI,CAAC,iBAAiB;MAIrC,aAAa,EAAE,IAAI,CAAC;IACtB,CAAC;EACH;EAEA,iBAAiB,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK;IACjC,QAAQ,MAAM;MACZ,KAAK,OAAO;QACV,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzB;MACF,KAAK,OAAO;QACV,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QACvB;MACF,KAAK,aAAa;QAChB,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC7B;MACF,KAAK,OAAO;QACV,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxB;MACF,KAAK,cAAc;QACjB,CAAC,CAAC,cAAc,CAAC,CAAC;QAClB,IAAI;UAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,QAAQ;UACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;UACjD,0DAAc,CAAC,UAAU,CAAC,0DAAc,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC,CAAC,OAAO,KAAK,EAAE;UACd,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC;QACtC;QACA;MACF,KAAK,cAAc;QACjB,CAAC,CAAC,cAAc,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,0DAAc,CAAC,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC5E,OAAO,GAAG,0DAAc,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QACxE,OAAO,GAAG,0DAAc,CAAC,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC;QAC5D,0DAAc,CAAC,UAAU,CAAC,OAAO,CAAC;QAClC;MACF;QAEE,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QAClE;IACJ;EACF,CAAC;EAED,iBAAiB,CAAC,CAAC,EAAE;IACnB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;MACvB,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG;MACjB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;MAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK;MAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;MAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;MAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACzB,CAAC,CAAC;EACJ;EAEA,eAAe,CAAC,CAAC,EAAE;IACjB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;MACvB,KAAK,EAAE,IAAI;MACX,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;MACzB,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG;MACrB,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;MAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK;MAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM;MAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ;MACnC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI;MAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IACzB,CAAC,CAAC;EACJ;EAEA,qBAAqB,CAAC,CAAC,EAAE;IACvB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,MAAM,IAAI,GAAG;MACX,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACd,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;MACzB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAC5E,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG;IACtE;IACA,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,KAAK,EAAE;MACjC,IAAI,CAAC,GAAG,GAAG,0DAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,aAAa;IAC/D;IACA,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,SAAS;IAChD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;EAC7D;EAOA,gBAAgB,CAAC,CAAC,EAAE;IAClB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;MACxD;IACF;IACA,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,eAAe,GAAG;MAAC,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;MAAE,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IAAK,CAAC;IAC3F,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;MAC5C,IAAI,CAAC,cAAc,GAAG,IAAI;MAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;IACtE,CAAC,EAAE,GAAG,CAAC;EACT;EAEA,eAAe,CAAC,CAAC,EAAE;IACjB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;MACzB;IACF;IACA,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;IACvC,MAAM,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;IAEvC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;MAC1F,IAAI,CAAC,eAAe,CAAC,CAAC;IACxB;EACF;EAEA,cAAc,GAAG;IACf,IAAI,CAAC,eAAe,CAAC,CAAC;EACxB;EAEA,eAAe,GAAG;IAChB,IAAI,IAAI,CAAC,cAAc,EAAE;MACvB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;MACxC,IAAI,CAAC,cAAc,GAAG,IAAI;IAC5B;IACA,IAAI,CAAC,eAAe,GAAG,IAAI;EAC7B;EAEA,oBAAoB,GAAG;IACrB,IAAI,CAAC,eAAe,CAAC,CAAC;EACxB;EAEA,kBAAkB,CAAC,CAAC,EAAE;IACpB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;EACxC;EAEA,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE;IACpB,MAAM,SAAS,GAAG,EAAE;IACpB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,qBAAqB,EAAE;MACvD,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC;IACxC;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,8CAAM,CAAC,oBAAoB,EAAE;MACrD,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QAC3B,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;UACxB,IAAI,SAAS,GAAG,KAAK;UACrB,8CAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK;YAClD,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnE,OAAO,SAAS;UAClB,CAAC,CAAC;UACF,IAAI,CAAC,SAAS,EAAE;YACd,8CAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI;cACtC,SAAS,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;cAC/B,OAAO,SAAS;YAClB,CAAC,CAAC;UACJ;UACA,IAAI,CAAC,SAAS,EAAE;YACd,SAAS,CAAC,IAAI,CAAC,gBAAgB,CAAC;UAClC;QACF;MACF;MACA,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;QAC1B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,iBAAiB,GAAG,eAAe,CAAC;MACzE;IACF;IACA,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC;IAEnC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;MACzB,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG;MACnB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;MAC1E,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO;MAC3B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;MACrB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;MAC7B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;MAC7B,CAAC,EAAE,CAAC;MACJ,CAAC,EAAE,CAAC;MACJ,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;MAC/B,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW;MACnC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;IACxB,CAAC,EAAE,SAAS,CAAC;EACf;EAEA,cAAc,CAAC,KAAK,EAAE;IACpB,IAAI,CAAC,QAAQ,CAAC;MAAC,QAAQ,EAAE;IAAK,CAAC,CAAC;EAClC;EAEA,kBAAkB,GAAG;IACnB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;EAChE;EAEA,iBAAiB,GAAG;IAClB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;MAC1B;IACF;IACA,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;IACvF,IAAI,CAAC,QAAQ,CAAC;MAAC,WAAW,EAAE;IAAI,CAAC,CAAC;EACpC;EAEA,gBAAgB,CAAC,CAAC,EAAE;IAClB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU;IACxC,IAAI,UAAU,EAAE;MACd,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC;IACrC;EACF;EAIA,2BAA2B,CAAC,YAAY,EAAE;IACxC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE;MACnG;IACF;IACA,IAAI,CAAC,QAAQ,CAAC;MAAC,cAAc,EAAE,IAAI;MAAE,eAAe,EAAE;IAAI,CAAC,CAAC;IAC5D,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI;MAC9D,IAAI,CAAC,QAAQ,CAAC;QAAC,cAAc,EAAE,KAAK;QAAE,gBAAgB,EAAG,MAAM,IAAI,MAAM,CAAC,MAAM,IAAK;MAAQ,CAAC,CAAC;IACjG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;MACd,IAAI,CAAC,QAAQ,CAAC;QAAC,cAAc,EAAE,KAAK;QAAE,eAAe,EAAG,GAAG,IAAI,GAAG,CAAC,OAAO,IAAK;MAAU,CAAC,CAAC;IAC7F,CAAC,CAAC;EACJ;EAMA,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE;IACtC,MAAM;MAAC,cAAc;MAAE,gBAAgB;MAAE;IAAe,CAAC,GAAG,IAAI,CAAC,KAAK;IACtE,OAAO;MAAK,SAAS,EAAC,0BAA0B;MAAA,WAC9C;QAAA,UAAM;MAAI,gBAAM,CAAC,EAChB,gBAAgB,IAAI,QAAQ,GAAG;QAAA,UAAI;MAAK,gBAAI,CAAC,GAC5C,gBAAgB,IAAI,kBAAkB,GAAG;QAAA,UAAI;MAAa,gBAAI,CAAC,GAC/D,gBAAgB,GAAG;QAAA,UAAK;MAAgB,gBAAK,CAAC,GAC9C;QAAQ,IAAI,EAAC,QAAQ;QAAC,QAAQ,EAAE,cAAe;QAC7C,OAAO,EAAE,MAAM,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,SAAS,CAAE;QAAA,UACjE,cAAc,GAAG,MAAM,GAAI,MAAM,CAAC,KAAK,IAAI;MAAO,gBAC7C,CAAC,EACV,eAAe,GAAG;QAAO,SAAS,EAAC,gCAAgC;QAAA,UAAE;MAAe,gBAAQ,CAAC,GAAG,IAAI;IAAA,eAClG,CAAC;EACR;EAMA,gBAAgB,GAAG;IACjB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,qBAAqB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,oBAAqB,EAAE;MAC/G,OAAO,IAAI;IACb;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,iBAAiB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,eAAe,EAAE;MAC9F,OAAO;QAAK,SAAS,EAAC,qBAAqB;QAAA,UAAC;MAAa,gBAAK,CAAC;IACjE;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,MAAM,EAAE;MACrC,OAAO;QAAK,SAAS,EAAC,qBAAqB;QAAA,WAAC,aAAW;UAAG,IAAI,EAAC,GAAG;UAChE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,wBAAyB;UAAA,UAAC;QAAM,gBAAG,CAAC;MAAA,eAAK,CAAC;IAClE;IACA,OAAO,IAAI;EACb;EAEA,MAAM,GAAG;IACP,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACtF,MAAM,WAAW,GAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,GAAI,YAAY,GAAG,QAAQ;IAChH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI;IAC5C,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,KAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,qBAAqB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,oBAAoB,CAAC;IAC7G,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAE1C,IAAI,cAAc,GAAG,KAAK;IAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,cAAc,CAAC,CAAC,IAAI,8CAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;MAC/G,8CAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK;QAClD,IAAI,EAAE,KAAK,IAAI,EAAE;UAAE,cAAc,GAAG,IAAI;QAAE;QAC1C,OAAO,cAAc;MACvB,CAAC,CAAC;IACJ;IACA,MAAM,kBAAkB,GAAG,cAAc,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW;IACpE,IAAI,aAAa,GAAG,iBAAiB;IACrC,MAAM,WAAW,GAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAC3D,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAE;IAErE,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO;IAmBhC,MAAM,aAAa,GAAG,OAAO,IAAI,OAAO,OAAO,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;IACtH,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,eAAe,IAAI,aAAa,IACvG,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,yBAAyB,CAAC;IACpE,IAAI,cAAc,GAAG,IAAI;IACzB,IAAI,YAAY,IAAI,OAAO,OAAO,CAAC,IAAI,IAAI,QAAQ,EAAE;MACnD,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;IAC7E,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,eAAe,CAAC,IAClI,OAAO,IAAI,OAAO,OAAO,IAAI,QAAQ,IAAI,OAAO,OAAO,CAAC,IAAI,IAAI,QAAQ,EAAE;MAC1E,OAAO,GAAG,OAAO,CAAC,IAAI;IACxB;IAIA,IAAI,UAAU,GAAG,IAAI;IACrB,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,gBAAgB,IACtE,OAAO,IAAI,OAAO,OAAO,IAAI,QAAQ,KAAK,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;MAC7E,UAAU,GAAG,+DAAC,2DAAa;QAAC,OAAO,EAAE,OAAQ;QAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;MAAO,gBAAE,CAAC;IAC7E;IACA,MAAM,WAAW,GAAG,EAAE;IACtB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,cAAc,CAAC,CAAC,IAAI,8CAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;MAC7E,8CAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK;QACtC,IAAI,8CAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;UAGvC;QACF;QACA,WAAW,CAAC,IAAI,CAAC,+DAAC,uDAAU;UAC1B,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;UAC1B,WAAW,EAAE,8CAAM,CAAC,cAAc,CAAC,GAAG,CAAE;UACxC,QAAQ,EAAE,GAAG,CAAC,IAAK;UACnB,SAAS,EAAE,8CAAM,CAAC,YAAY,CAAC,GAAG,CAAE;UACpC,QAAQ,EAAE,GAAG,CAAC,IAAK;UACnB,IAAI,EAAE,8CAAM,CAAC,aAAa,CAAC,GAAG,CAAE;UAChC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAS;UAC9B,cAAc,EAAE,IAAI,CAAC,kBAAmB;UACxC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;QAAQ,GACvB,CAAC,OAAG,CAAC,CAAC;MACf,CAAC,EAAE,IAAI,CAAC;MACR,MAAM,IAAI,GAAG,8CAAM,CAAC,MAAM,CAAC,OAAO,EAAE,6DAAa,EAAE,IAAI,CAAC,gBAAgB,CAAC;MACzE,OAAO,GAAG,0DAAmB,CAAC,uDAAc,EAAE,IAAI,EAAE,IAAI,CAAC;IAC3D,CAAC,MAAM,IAAI,OAAO,OAAO,IAAI,QAAQ,EAAE;MAGrC,IAAI,IAAI,MAAM,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;QAEhE,aAAa,IAAI,SAAS,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,KAAK,CAAC,+jqBAAiB,CAAC,CAAC,MAAM;MAC9E;IACF,CAAC,MAAM,IAAI,OAAO,IAAI,IAAI,EAAE;MAc1B,OAAO,GAAG;QAAA,WAAE;UAAG,SAAS,EAAC,qBAAqB;UAAA,UAAC;QAAK,gBAAG,CAAC,KAAC;UAAG,SAAS,EAAC,MAAM;UAAA,UAC1E,+DAAC,wDAAgB;YAAC,EAAE,EAAC,iBAAiB;YAAC,cAAc,EAAC,iBAAiB;YACrE,WAAW,EAAC;UAA2E,gBAAE;QAAC,gBAAG,CAAC;MAAA,eAAE,CAAC;IACvG,CAAC,MAAM;MACL,OAAO,GAAG;QAAA,WAAE;UAAG,SAAS,EAAC,qBAAqB;UAAA,UAAC;QAAa,gBAAG,CAAC,KAAC;UAAG,SAAS,EAAC,MAAM;UAAA,UAClF,+DAAC,wDAAgB;YAAC,EAAE,EAAC,iBAAiB;YACpC,cAAc,EAAC,iBAAiB;YAAC,WAAW,EAAC;UAAsC,gBAAE;QAAC,gBAAG,CAAC;MAAA,eAAE,CAAC;IACnG;IAEA,OACE;MAAI,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,QAAS;MAAC,SAAS,EAAE,SAAU;MAAA,WAChD,IAAI,CAAC,KAAK,CAAC,UAAU,GACpB;QAAG,SAAS,EAAE,gCAAgC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAE;QACpF,OAAO,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAE;QAAA,UACxD,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,cAAc,GAAG;MAAwB,gBAC/D,CAAC,GAAG,IAAI,EACZ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GACxC;QAAK,SAAS,EAAC,YAAY;QAAA,UACxB,WAAW,GACV,+DAAC,wDAAU;UACT,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAa;UAC7C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAS;UAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAS;UAC3B,MAAM,EAAE;QAAO,gBAAE,CAAC,GACpB;MAAI,gBACH,CAAC,GACN,IAAI,EACL,QAAQ,IAAI,UAAU,GACrB;QAAG,SAAS,EAAC,sCAAsC;QAAA,UAAC;MAAK,gBAAG,CAAC,GAAG,IAAI,EACtE;QAAA,WACE;UAAK,SAAS,EAAE,WAAY;UAC1B,YAAY,EAAE,IAAI,CAAC,gBAAiB;UAAC,WAAW,EAAE,IAAI,CAAC,eAAgB;UAAC,UAAU,EAAE,IAAI,CAAC,cAAe;UAAA,WACvG,kBAAkB,GAAG;YAAG,SAAS,EAAC;UAAkB,gBAAE,CAAC,GAAG,IAAI,EAC/D;YAAK,SAAS,EAAC,cAAc;YAAA,WAC3B;cAAK,SAAS,EAAE,aAAc;cAAA,WAC3B,cAAc,IAAI,UAAU,IAAI,OAAO,EACvC,WAAW;YAAA,eACT,CAAC,EACL,IAAI,CAAC,KAAK,CAAC,SAAS,GACnB,+DAAC,4DAAc;cACb,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAO;cAC1B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAU;cAChC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC;YAAS,gBAAE,CAAC,GACjC,IAAI;UAAA,eACL,CAAC,EACL,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GACnD;YAAM,SAAS,EAAC,aAAa;YAAA,UAC3B;cAAG,IAAI,EAAC,GAAG;cAAC,OAAO,EAAE,IAAI,CAAC,kBAAmB;cAAA,UAC3C;gBAAG,SAAS,EAAC,gBAAgB;gBAAA,UAAC;cAAW,gBAAG;YAAC,gBAC5C;UAAC,gBACA,CAAC,GAAG,IAAI;QAAA,eAEb,CAAC,EACL,UAAU,EACV,WAAW,GACV;UAAK,SAAS,EAAC,QAAQ;UAAA,WACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,IAClB;YAAA,UAAG,+DAAC,wDAAgB;cAAC,EAAE,EAAC,gBAAgB;cAAC,cAAc,EAAC,WAAW;cACnE,WAAW,EAAC;YAA4D,gBAAE;UAAC,gBAAG,CAAC,EAEhF,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,GAAG;YAAI,SAAS,EAAC,kBAAkB;YAAA,UAAC;UAAE,gBAAI,CAAC,GAC1E,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,GAAG;YAAI,SAAS,EAAC,kBAAkB;YAAA,UAAC;UAAG,gBAAI,CAAC,GAAG,IAAI;QAAA,eAClF,CAAC,GACJ,IAAI;MAAA,eAEL,CAAC;IAAA,eACJ,CAAC;EAET;AACF;AAAC;AAED,MAAM,eAAe,GAAG,sDAAU,CAAC,eAAe,CAAC;AACnD,MAAM,WAAW,GAAG,uDAAgB,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,+DAAC,eAAe;EAAC,QAAQ,EAAI,GAAI;EAAA,GAAK;AAAK,gBAAG,CAAC,CAAC;AAErG,+DAAe,WAAW,E;;;;;;;;;;;;;;;;;AC7fA;AAAA;AAI1B,SAAS,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE;EAChC,MAAM,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;EAC/B,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE;EACnB,MAAM,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;EACrD,MAAM,KAAK,GAAG,MAAM,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI;EACrE,MAAM,GAAG,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM;EACjC,OAAQ,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,IAAK,EAAE;AAC5C;AAEA,MAAM,UAAU,GAAG;EAAC,KAAK,EAAE,MAAM;EAAE,KAAK,EAAE,MAAM;EAAE,KAAK,EAAE,MAAM;EAAE,IAAI,EAAE,MAAM;EAAE,IAAI,EAAE;AAAM,CAAC;AAE5F,SAAS,QAAQ,CAAC,KAAK,EAAE;EACvB,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE;EACrB,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;EAC1D,IAAI,OAAO,EAAE,OAAO,OAAO;EAC3B,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;AACrC;AAEe,MAAM,aAAa,SAAS,4DAAmB,CAAC;EAC7D,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,KAAK,CAAC;IACZ,IAAI,CAAC,KAAK,GAAG;MAAC,QAAQ,EAAE;IAAK,CAAC;IAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;EAClD;EAEA,YAAY,CAAC,CAAC,EAAE;IACd,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK;MAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAAQ,CAAC,CAAC,CAAC;EAC/C;EAEA,MAAM,GAAG;IACP,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEnF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAI,CAAC,CAAC,KAAK,IAAI,EAAE,GAAK,CAAC,CAAC,OAAO,IAAI,EAAG;IACtE,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAExC,OAAO;MAAK,SAAS,EAAC,gBAAgB;MAAA,WACpC;QAAK,SAAS,EAAC,sBAAsB;QAAA,UAAE,CAAC,CAAC,KAAK,IAAI;MAAM,gBAAM,CAAC,EAC/D;QAAI,SAAS,EAAC,sBAAsB;QAAA,UACjC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK;UACtB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;UACrD,OAAO;YAAA,WACJ,GAAG,GAAG;cAAA,WAAI,GAAG,EAAC,GAAC;YAAA,eAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;UAAA,GAD9B,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAEzD,CAAC;QACP,CAAC;MAAC,gBACA,CAAC,EACJ,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,GACzC;QAAQ,IAAI,EAAC,QAAQ;QAAC,SAAS,EAAC,qBAAqB;QAAC,OAAO,EAAE,IAAI,CAAC,YAAa;QAAA,UAC9E,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,YAAY,KAAK;MAAK,gBAC9C,CAAC,GACT;QAAK,SAAS,EAAC,sBAAsB;QAAA,WAAC,IAAE,EAAC,KAAK,EAAC,MAAI;MAAA,eAAK,CAAC,EAC1D,OAAO,GAAG;QAAK,SAAS,EAAC,wBAAwB;QAAA,UAAE;MAAO,gBAAM,CAAC,GAAG,IAAI;IAAA,eACtE,CAAC;EACR;AACF,C;;;;;;;;;;;;;;;;;;;;;;AClE0B;AACoB;AAEI;AAEP;AACW;AAAA;AAEvC,MAAM,SAAS,SAAS,wDAAe,CAAC;EACrD,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,KAAK,CAAC;EACd;EAEA,MAAM,GAAG;IACP,MAAM,WAAW,GAAG,EAAE;IACtB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM;IACxD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,2DAAmB,EAAE,UAAU,CAAC;IAE7D,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,CAAE,GAAG,IAAK;MAC3C,WAAW,CAAC,IAAI,CACd;QAAK,SAAS,EAAC,YAAY;QAAA,UACzB,8DAAC,wDAAU;UACT,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAa;UAC7C,KAAK,EAAE,GAAG,CAAC,IAAK;UAChB,MAAM,EAAE,kEAAY,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAK;UACnE,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG;QAAK,gBAAE;MAAC,GALf,GAAG,CAAC,IAAI,OAMpC,CACP,CAAC;MACD,OAAO,WAAW,CAAC,MAAM,IAAI,WAAW;IAC1C,CAAC,CAAC;IACF,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,EAAE;MAC3B,OAAO,IAAI;IACb;IACA,OACE;MAAK,EAAE,EAAC,aAAa;MAAA,WAAE,WAAW,EAAC,GAAC,EAAC,UAAU,GAAG,WAAW,GAC3D;QAAA,UACE,8DAAC,wDAAgB;UAAC,EAAE,EAAC,qBAAqB;UAAC,cAAc,EAAC,kBAAkB;UACxE,WAAW,EAAC,mGAAmG;UAC/G,MAAM,EAAE;YAAE,QAAQ,EAAG,UAAU,GAAG;UAAa;QAAE,gBAAE;MAAC,gBACpD,CAAC,GAAG,IAAI;IAAA,eACX,CAAC;EAEV;AACF;AAAC,C;;;;;;;;;;;;;;;;;;;AC5CyB;AACoB;AAAA;AAE/B,MAAM,UAAU,SAAS,4DAAmB,CAAC;EAC1D,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,KAAK,CAAC;IAEZ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;EAC9D;EAEA,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE;IAC5B,GAAG,CAAC,cAAc,CAAC,CAAC;IACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;EAC3B;EAEA,MAAM,GAAG;IACP,OACE;MAAK,SAAS,EAAC,qBAAqB;MAAA,WAClC;QAAK,SAAS,EAAC,OAAO;QAAA,UACpB,8DAAC,wDAAgB;UAAC,EAAE,EAAC,iBAAiB;UACpC,cAAc,EAAC,iEAAiE;UAChF,WAAW,EAAC;QAAyD,gBAAE;MAAC,gBACvE,CAAC,EACN;QAAK,SAAS,EAAC,QAAQ;QAAA,WACrB;UAAQ,SAAS,EAAC,SAAS;UAAC,OAAO,EAAE,KAAK,IAAI;YAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC;UAAE,CAAE;UAAA,UAC1F,8DAAC,wDAAgB;YAAC,EAAE,EAAC,wBAAwB;YAC3C,cAAc,EAAC,QAAQ;YAAC,WAAW,EAAC;UAAsC,gBAAE;QAAC,gBACzE,CAAC,EACT;UAAQ,SAAS,EAAC,WAAW;UAAC,OAAO,EAAE,KAAK,IAAI;YAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC;UAAE,CAAE;UAAA,UAC5F,8DAAC,wDAAgB;YAAC,EAAE,EAAC,wBAAwB;YAC3C,cAAc,EAAC,QAAQ;YAAC,WAAW,EAAC;UAAsC,gBAAE;QAAC,gBACzE,CAAC,EACT;UAAQ,SAAS,EAAC,WAAW;UAAC,OAAO,EAAE,KAAK,IAAI;YAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC;UAAE,CAAE;UAAA,UAC3F,8DAAC,wDAAgB;YAAC,EAAE,EAAC,uBAAuB;YAC1C,cAAc,EAAC,OAAO;YAAC,WAAW,EAAC;UAAqC,gBAAE;QAAC,gBACvE,CAAC;MAAA,eACN,CAAC;IAAA,eACH,CAAC;EAEV;AACF;AAAC,C;;;;;;;;;;;;;;;;;ACvCyB;AAAA;AAEX,MAAM,WAAW,SAAS,4DAAmB,CAAC;EAC3D,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,KAAK,CAAC;EACd;EAEA,MAAM,GAAG;IACP,IAAI,OAAO,GAAG,IAAI;IAClB,IAAI,WAAW,GAAG,QAAQ;IAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;MAEnB,OAAO,GAAG;QAAA,UAAG,IAAI,CAAC,KAAK,CAAC;MAAI,gBAAG,CAAC;MAChC,WAAW,IAAI,OAAO;IACxB,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;MAI7B,OAAO,GAAG;QAAG,SAAS,EAAC,MAAM;QAAA,UAAE,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI;MAAO,gBAAI,CAAC;MACrE,WAAW,IAAI,UAAU;IAC3B,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;MAMhC,OAAO,GAAG;QAAM,SAAS,EAAC,MAAM;QAAA,UAAE,IAAI,CAAC,KAAK,CAAC;MAAU,gBAAO,CAAC;MAC/D,WAAW,IAAI,SAAS;IAC1B;IAEA,IAAI,CAAC,OAAO,EAAE;MACZ,OAAO;QAAA,UAAG;MAAI,gBAAG,CAAC;IACpB;IAEA,OACE;MAAI,SAAS,EAAC,MAAM;MAAA,UAClB;QAAK,SAAS,EAAE,WAAY;QAAA,UAC1B;UAAK,SAAS,EAAC,iBAAiB;UAAA,UAC7B;QAAO,gBACL;MAAC,gBACH;IAAC,gBACJ,CAAC;EAET;AACF;AAAC,C;;;;;;;;;;;;;;;;;;;;AC7CyB;AAC8B;AACpB;AAEoB;AACN;AAAA;AAElD,MAAM,QAAQ,GAAG,0DAAc,CAAC;EAC9B,iBAAiB,EAAE;IACjB,EAAE,EAAE,mBAAmB;IACvB,cAAc,EAAE,mBAAmB;IACnC,WAAW,EAAE;EACf,CAAC;EACD,eAAe,EAAE;IACf,EAAE,EAAE,iBAAiB;IACrB,cAAc,EAAE,iBAAiB;IACjC,WAAW,EAAE;EACf;AACF,CAAC,CAAC;AAEF,MAAM,cAAc,SAAS,4DAAmB,CAAC;EAC/C,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,KAAK,CAAC;IAGZ,IAAI,CAAC,MAAM,GAAG,IAAI;IAClB,IAAI,CAAC,MAAM,GAAG,IAAI;IAElB,IAAI,CAAC,YAAY,GAAG,sDAAe,CAAC,CAAC;IAErC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;EAC5D;EAEA,iBAAiB,GAAG;IAClB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,qBAAqB,EAAE;MAAC,OAAO,EAAE;IAAI,CAAC,CAAC;IACrG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE;MAAC,OAAO,EAAE;IAAI,CAAC,CAAC;IACjG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,EAAE;MAAC,OAAO,EAAE;IAAI,CAAC,CAAC;EACpG;EAEA,oBAAoB,GAAG;IACrB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC;IACvF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC;IACnF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,iBAAiB,CAAC;EACtF;EACA,gBAAgB,GAAG;IACjB,MAAM,IAAI,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAG;IACpC,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;EAC9C;EAEA,YAAY,CAAC,CAAC,EAAE;IACd,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;EAC/D;EAEA,cAAc,CAAC,CAAC,EAAE;IAChB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;EACjE;EAEA,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;IAEzB,OAAO,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;IAChD,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;MAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;IAC7B;EACF;EAEA,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;IAEzB,OAAO,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;IAC7B,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;IACjF,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;MAC9B,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;IAC7B;EACF;EAEA,qBAAqB,CAAC,CAAC,EAAE;IACvB,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;MACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;MAClC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;IACpC;EACF;EAEA,mBAAmB,CAAC,CAAC,EAAE;IACrB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE;MACxD,IAAI,CAAC,MAAM,GAAG,IAAI;MAClB;IACF;IAEA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO;IACpD,IAAI,CAAC,MAAM,GAAG,IAAI;IAElB,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,0DAAkB,EAAE;MAEpE;IACF;IAEA,IAAI,EAAE,GAAG,CAAC,EAAE;MACV,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC;IAC9B,CAAC,MAAM;MACL,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC;IAC9B;EACF;EAEA,iBAAiB,GAAG;IAClB,IAAI,CAAC,MAAM,GAAG,IAAI;EACpB;EAEA,MAAM,GAAG;IACP,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACxC,IAAI,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,QAAQ,CAAC;IACxD,YAAY,GAAG,YAAY,GACvB,YAAY,CAAC,QAAQ,GACrB;MAAG,SAAS,EAAC,MAAM;MAAA,UAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,eAAe;IAAC,gBAAI,CAAC,GAEjF,8CAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,gEAAgB,EAAE;MACpD,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;MAClE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;IACrE,CAAC,CAAC,GAEJ;MAAG,SAAS,EAAC,MAAM;MAAA,UAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,iBAAiB;IAAC,gBAAI,CAAC;IAErF,MAAM,IAAI,GAAG,EAAE;IACf,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;MAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,MAAM,GAAG,KAAK;MACnD,IAAI,CAAC,IAAI,CAAC;QAAe,SAAS,EAAE;MAAG,GAAnB,GAAG,OAAkB,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,OACE;MAAK,EAAE,EAAC,gBAAgB;MAAC,GAAG,EAAE,IAAI,CAAC,YAAa;MAAA,WAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,GACjB;QAAK,SAAS,EAAC,QAAQ;QAAA,UACrB;UAAG,IAAI,EAAC,GAAG;UAAC,OAAO,EAAE,IAAI,CAAC,YAAa;UAAA,UAAC;YAAG,SAAS,EAAC,qBAAqB;YAAA,UAAC;UAAK,gBAAG;QAAC,gBAAG;MAAC,gBACrF,CAAC,GACN;QAAA,UAAK;UAAG,SAAS,EAAC,qBAAqB;UAAA,UAAC;QAAQ,gBAAG;MAAC,gBAAK,CAAC,EAE5D;QAAK,SAAS,EAAC,eAAe;QAAA,UAAE;MAAI,gBAAM,CAAC,EAC3C;QAAK,SAAS,EAAC,QAAQ;QAAC,OAAO,EAAE,IAAI,CAAC,cAAe;QAAA,UAAC;UAAA,UAAI;QAAY,gBAAI;MAAC,gBAAK,CAAC,EACjF;QAAK,SAAS,EAAC,aAAa;QAAA,WAC1B;UAAM,SAAS,EAAC,mBAAmB;UAAA,UAChC,QAAQ,GAAG,CAAC,GACX;YAAG,IAAI,EAAC,GAAG;YAAC,OAAO,EAAE,IAAI,CAAC,cAAe;YAAA,UACvC;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAC;YAAW,gBAAG;UAAC,gBAC5C,CAAC,GACF;QAAI,gBAEJ,CAAC,EACP;UAAM,SAAS,EAAC,mBAAmB;UAAA,UAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,GACtB;YAAG,IAAI,EAAC,GAAG;YAAC,OAAO,EAAE,IAAI,CAAC,cAAe;YAAA,UACvC;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAC;YAAW,gBAAG;UAAC,gBAC5C,CAAC,GACF;QAAI,gBAEJ,CAAC;MAAA,eACJ,CAAC;IAAA,eACH,CAAC;EAEV;AACF;AAEA,+DAAe,sDAAU,CAAC,cAAc,CAAC,E;;;;;;;;;;;;;;;;;;;AC5Kf;AAC8B;AAEpB;AAEa;AAAA;AAEjD,MAAM,QAAQ,GAAG,0DAAc,CAAC;EAC9B,eAAe,EAAE;IACf,EAAE,EAAE,iBAAiB;IACrB,cAAc,EAAE,YAAY;IAC5B,WAAW,EAAE;EACf,CAAC;EACD,sBAAsB,EAAE;IACtB,EAAE,EAAE,wBAAwB;IAC5B,cAAc,EAAE,QAAQ;IACxB,WAAW,EAAE;EACf,CAAC;EACD,qBAAqB,EAAE;IACrB,EAAE,EAAE,uBAAuB;IAC3B,cAAc,EAAE,UAAU;IAC1B,WAAW,EAAE;EACf;AACF,CAAC,CAAC;AAEF,MAAM,cAAc,SAAS,4DAAmB,CAAC;EAC/C,MAAM,GAAG;IACP,MAAM;MAAC;IAAa,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;IACvC,IAAI,SAAS;IACb,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,sBAAsB,EAAE;MACxD,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC;IACrD,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,qBAAqB,IAC1D,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,8CAAM,CAAC,oBAAoB,EAAE;MACtD,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IAC5D,CAAC,MAAM;MACL,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE;MAAQ,CAAC,CAAC;IACrG;IAEA,MAAM,IAAI,GAAG,6DAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;IAIhD,MAAM,MAAM,GAAG,IAAI,GAAG;MAAG,SAAS,EAAE,uBAAuB,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAE;MAAA,UAAE,IAAI,CAAC;IAAI,gBAAI,CAAC,GAAG,IAAI;IACxG,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,qBAAqB,CAAC,GAAG,IAAI;IAEvF,OACE;MAAM,SAAS,EAAC,WAAW;MAAA,WACxB,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAAA,eAChC,CAAC;EAEX;AACF;AAAC;AAED,+DAAe,sDAAU,CAAC,cAAc,CAAC,E;;;;;;;;;;;;;;;;;;;;;;ACrDD;AACkC;AAC7B;AAI7C,MAAM,aAAa,GAAG,iDAAU,CAAC,CAAC,IAAI,uRAA8B,CAAC;AAEvB;AACM;AACE;AACqD;AAAA;AAS3G,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACpG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACpG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACpG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACpG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACpG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EACpG,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;AAKxE,MAAM,mBAAmB,GAAG;EAAC,KAAK,EAAE,MAAM;EAAE,KAAK,EAAE,MAAM;EAAE,KAAK,EAAE,MAAM;EAAE,IAAI,EAAE,MAAM;EAAE,IAAI,EAAE,MAAM;EAAE,IAAI,EAAE;AAAM,CAAC;AACnH,SAAS,eAAe,CAAC,IAAI,EAAE;EAI7B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;IAC3E,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;EACvC;EACA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;EAItD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,OAAO;EACjE,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,OAAO,CAAC,GAAG;EACxF,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW;AACxE;AACA,MAAM,gBAAgB,GAAG,iBAAiB;AAC1C,MAAM,gBAAgB,GAAG,EAAE;AAC3B,SAAS,eAAe,GAAG;EACzB,IAAI;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;IACtE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE;EACtC,CAAC,CAAC,OAAO,CAAC,EAAE;IACV,OAAO,EAAE;EACX;AACF;AACA,SAAS,eAAe,CAAC,KAAK,EAAE;EAC9B,IAAI;IACF,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC;IAClG,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;EAC9D,CAAC,CAAC,OAAO,CAAC,EAAE,CAAe;AAC7B;AAEA,MAAM,QAAQ,GAAG,0DAAc,CAAC;EAC9B,kBAAkB,EAAE;IAClB,EAAE,EAAE,2BAA2B;IAC/B,cAAc,EAAE,oBAAoB;IACpC,WAAW,EAAE;EACf,CAAC;EACD,gBAAgB,EAAE;IAChB,EAAE,EAAE,oBAAoB;IACxB,cAAc,EAAE,aAAa;IAC7B,WAAW,EAAE;EACf,CAAC;EACD,iBAAiB,EAAE;IACjB,EAAE,EAAE,sBAAsB;IAC1B,cAAc,EAAE,eAAe;IAC/B,WAAW,EAAE;EACf,CAAC;EACD,yBAAyB,EAAE;IACzB,EAAE,EAAE,2BAA2B;IAC/B,cAAc,EAAE,iDAAiD;IACjE,WAAW,EAAE;EACf,CAAC;EACD,sBAAsB,EAAE;IACtB,EAAE,EAAE,6BAA6B;IACjC,cAAc,EAAE,8BAA8B;IAC9C,WAAW,EAAE;EACf,CAAC;EACD,uBAAuB,EAAE;IACvB,EAAE,EAAE,yBAAyB;IAC7B,cAAc,EAAE,sBAAsB;IACtC,WAAW,EAAE;EACf,CAAC;EACD,sBAAsB,EAAE;IACtB,EAAE,EAAE,wBAAwB;IAC5B,cAAc,EAAE,aAAa;IAC7B,WAAW,EAAE;EACf,CAAC;EACD,oBAAoB,EAAE;IACpB,EAAE,EAAE,sBAAsB;IAC1B,cAAc,EAAE,WAAW;IAC3B,WAAW,EAAE;EACf,CAAC;EACD,eAAe,EAAE;IACf,EAAE,EAAE,iBAAiB;IACrB,cAAc,EAAE,cAAc;IAC9B,WAAW,EAAE;EACf;AACF,CAAC,CAAC;AAEF,MAAM,WAAW,SAAS,4DAAmB,CAAC;EAC5C,WAAW,CAAC,KAAK,EAAE;IACjB,KAAK,CAAC,KAAK,CAAC;IAEZ,IAAI,CAAC,KAAK,GAAG;MACX,KAAK,EAAE,IAAI;MACX,OAAO,EAAE,EAAE;MACX,QAAQ,EAAE,KAAK;MACf,cAAc,EAAE,CAAC,EAAE,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;MAGjF,YAAY,EAAE,IAAI;MAClB,cAAc,EAAE,EAAE;MAClB,gBAAgB,EAAE,CAAC;MACnB,SAAS,EAAE,KAAK;MAChB,QAAQ,EAAE,OAAO;MACjB,WAAW,EAAE,eAAe,CAAC,CAAC;MAC9B,UAAU,EAAE,KAAK;MACjB,UAAU,EAAE,IAAI;MAChB,SAAS,EAAE,IAAI;MACf,eAAe,EAAE;IACnB,CAAC;IAGD,IAAI,CAAC,iBAAiB,GAAG,CAAC;IAE1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9D,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IAExD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5E,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;IAEhD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;EAChD;EAEA,iBAAiB,GAAG;IAClB,IAAI,IAAI,CAAC,eAAe,EAAE;MACxB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;MAC5E,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,KAAK,EAAE;QAElG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;MAC9B;IACF;IAEA,IAAI,CAAC,QAAQ,CAAC;MAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;IAAC,CAAC,CAAC;EAC5C;EAEA,oBAAoB,GAAG;IACrB,IAAI,IAAI,CAAC,eAAe,EAAE;MACxB,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC;IACjF;IACA,IAAI,IAAI,CAAC,kBAAkB,EAAE;MAC3B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC9C;IACA,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IAC5D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAC5D,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IAC5D,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAC7D,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC;IACzD,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,CAAC;EACnF;EAEA,kBAAkB,CAAC,SAAS,EAAE;IAC5B,IAAI,IAAI,CAAC,eAAe,EAAE;MACxB,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,IAAI,KAAK,EAAE;QAElG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;MAC9B;MAGA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK;MACzC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,GAAG,IAAI;IAC9E;IAEA,IAAI,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;MAC/C,IAAI,CAAC,QAAQ,CAAC;QAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE;QAAE,QAAQ,EAAE,KAAK;QAAE,KAAK,EAAE,IAAI;QAAE,YAAY,EAAE,IAAI;QACpG,cAAc,EAAE,EAAE;QAAE,SAAS,EAAE,KAAK;QAAE,UAAU,EAAE,KAAK;QAAE,UAAU,EAAE,IAAI;QAAE,SAAS,EAAE;MAAI,CAAC,CAAC;IAChG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;MAiB5E,IAAI,CAAC,gBAAgB,CAAC,CAAC;MACvB,IAAI,CAAC,QAAQ,CAAC;QAAC,QAAQ,EAAE;MAAK,CAAC,CAAC;IAClC,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;MAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE;MACxC,IAAI,CAAC,QAAQ,CAAC;QAAC,OAAO,EAAE;MAAG,CAAC,EAAE,CAAC,IAAI;QAIjC,IAAI,IAAI,CAAC,eAAe,EAAE;UAExB,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY;UAClE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;QAChE;MACF,CAAC,CAAC;IACJ;IACA,IAAI,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;MACvC,IAAI,CAAC,QAAQ,CAAC;QAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;MAAC,CAAC,CAAC;IAC5C;EACF;EAEA,WAAW,GAAG;IACZ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GACrB,8CAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,8DAAc,EAAE;MACtD,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;MAClE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;IACrE,CAAC,CAAC,GAAG,IAAI;EACb;EAEA,gBAAgB,CAAC,CAAC,EAAE;IAClB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;MACvB;IACF;IAKA,IAAI,gEAAU,CAAC,CAAC,EACd,IAAI,IAAI;MAAE,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;QAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC;MAAE;IAAE,CAAC,EAC7E,IAAI,IAAI;MAAE,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;QAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC;MAAE;IAAE,CAAC,EAC3E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;MAGrB,CAAC,CAAC,cAAc,CAAC,CAAC;IACpB;EACF;EAEA,iBAAiB,CAAC,CAAC,EAAE;IACnB,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;MAC3E,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C;IAEA,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;EACrB;EAEA,gBAAgB,CAAC,CAAC,EAAE;IAClB,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;MAC1E,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5C;IAEA,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE;EACrB;EAEA,gBAAgB,CAAC,KAAK,EAAE;IACtB,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;MACxD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC;EACF;EAEA,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE;IACxC,IAAI,CAAC,QAAQ,CAAC;MAAC,QAAQ,EAAE;IAAK,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;MAC5B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC;IAClD;EACF;EAEA,UAAU,CAAC,CAAC,EAAE;IACZ,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;MAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC;MAGhD,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,IAAI,UAAU,EAAE;QAC9C,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI;UAAE,IAAI,IAAI,KAAK,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;YAAC,OAAO,EAAE;UAAE,CAAC,CAAC;QAAE,CAAC,CAAC;MAC5E,CAAC,MAAM;QACL,IAAI,CAAC,QAAQ,CAAC;UAAC,OAAO,EAAE;QAAE,CAAC,CAAC;MAC9B;IACF;EACF;EAGA,cAAc,CAAC,CAAC,EAAE;IAChB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;MAEvB,CAAC,CAAC,cAAc,CAAC,CAAC;MAClB,CAAC,CAAC,eAAe,CAAC,CAAC;MACnB;IACF;IAEA,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,EAAE;MACnC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;QACtB,CAAC,CAAC,cAAc,CAAC,CAAC;QAClB,IAAI,CAAC,QAAQ,CAAC;UAAC,YAAY,EAAE,IAAI;UAAE,cAAc,EAAE;QAAE,CAAC,CAAC;QACvD;MACF;MACA,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE;QAC1F,CAAC,CAAC,cAAc,CAAC,CAAC;QAClB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,KAAK,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM;QAC9C,IAAI,CAAC,QAAQ,CAAC;UAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,KAAK,GAAG,KAAK,IAAI;QAAK,CAAC,CAAC;QACxF;MACF;MACA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAC7D,CAAC,CAAC,cAAc,CAAC,CAAC;QAClB,CAAC,CAAC,eAAe,CAAC,CAAC;QACnB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC1E;MACF;IACF;IAGA,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE;MACrB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,OAAO,EAAE;QAErC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;UACf,CAAC,CAAC,cAAc,CAAC,CAAC;UAClB,CAAC,CAAC,eAAe,CAAC,CAAC;UAEnB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACpB;MACF,CAAC,MAAM;QACL,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE;UAC1B,CAAC,CAAC,cAAc,CAAC,CAAC;UAClB,CAAC,CAAC,eAAe,CAAC,CAAC;UAEnB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACpB;MACF;IACF;EACF;EAEA,mBAAmB,CAAC,CAAC,EAAE;IACrB,IAAI,CAAC,QAAQ,CAAC;MAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;IAAK,CAAC,CAAC;IACxC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;IAChE,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;MAC9B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAC5C;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;MACzB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;MAChC,IAAI,GAAG,GAAG,IAAI,CAAC,iBAAiB,GAAG,sDAAc,EAAE;QACjD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,GAAG;MAC9B;IACF;EACF;EAKA,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE;IAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,IAAI,IAAI,EAAE;MAChD;IACF;IACA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;IACnC,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE;MACV,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,EAAE;QACnC,IAAI,CAAC,QAAQ,CAAC;UAAC,YAAY,EAAE,IAAI;UAAE,cAAc,EAAE;QAAE,CAAC,CAAC;MACzD;MACA;IACF;IACA,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IACtB,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC;MAAC,YAAY,EAAE,KAAK;MAAE,YAAY,EAAE,KAAK;MAAE,gBAAgB,EAAE;IAAC,CAAC,CAAC;IAC9E,IAAI,IAAI,CAAC,kBAAkB,EAAE;MAC3B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAC9C;IACA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;MAChD,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI;QAIhD,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,EAAE;UACnC,IAAI,CAAC,QAAQ,CAAC;YAAC,cAAc,EAAE,OAAO,IAAI;UAAE,CAAC,CAAC;QAChD;MACF,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACpB,CAAC,EAAE,GAAG,CAAC;EACT;EAEA,aAAa,CAAC,IAAI,EAAE;IAClB,MAAM;MAAC,OAAO;MAAE,YAAY;MAAE;IAAY,CAAC,GAAG,IAAI,CAAC,KAAK;IACxD,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI,EAAE;MAChD;IACF;IACA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO;IACrE,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG;IAClC,MAAM,GAAG,GAAG,YAAY,GAAG,CAAC,GAAG,YAAY,CAAC,MAAM;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;IAClF,MAAM,QAAQ,GAAG,YAAY,GAAG,SAAS,CAAC,MAAM;IAChD,IAAI,CAAC,QAAQ,CAAC;MAAC,OAAO,EAAE,UAAU;MAAE,YAAY,EAAE,IAAI;MAAE,cAAc,EAAE;IAAE,CAAC,CAAC;IAC5E,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;MAChC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;IAClD;IACA,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;MAC9B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC;IACxC;IAKA,qBAAqB,CAAC,MAAM;MAC1B,IAAI,IAAI,CAAC,eAAe,EAAE;QACxB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC;MAC5D;IACF,CAAC,CAAC;EACJ;EAEA,gBAAgB,CAAC,CAAC,EAAE;IAClB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,CAAC,CAAC,eAAe,CAAC,CAAC;IACnB,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;MAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG;MACvC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC;IACrC;EACF;EAKA,gBAAgB,CAAC,CAAC,EAAE;IAClB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK;MAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS;MAAE,UAAU,EAAE,KAAK;MAAE,QAAQ,EAAE;IAAK,CAAC,CAAC,CAAC;EACrF;EAEA,WAAW,CAAC,KAAK,EAAE;IACjB,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;IAC/B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;IAChE,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;IAC7F,eAAe,CAAC,KAAK,CAAC;IACtB,IAAI,CAAC,QAAQ,CAAC;MAAC,OAAO,EAAE,UAAU;MAAE,WAAW,EAAE,eAAe,CAAC;IAAC,CAAC,CAAC;IACpE,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;MAC9B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC;IACxC;IACA,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM;IAC1C,qBAAqB,CAAC,MAAM;MAC1B,IAAI,IAAI,CAAC,eAAe,EAAE;QACxB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,aAAa,EAAE,aAAa,CAAC;MACtE;IACF,CAAC,CAAC;EACJ;EAKA,cAAc,GAAG;IACf,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe;IAC/B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;IAChE,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;IAC5D,IAAI,UAAU,EAAE,QAAQ;IACxB,IAAI,KAAK,KAAK,GAAG,EAAE;MACjB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;MAC/E,QAAQ,GAAG,KAAK;IAClB,CAAC,MAAM,IAAI,KAAK,GAAG,CAAC,EAAE;MACpB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;MAC7D,MAAM,CAAC,GAAG,CAAC,CAAC;MACZ,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;MAC9D,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM;IACnC,CAAC,MAAM;MACL;IACF;IACA,IAAI,CAAC,QAAQ,CAAC;MAAC,OAAO,EAAE;IAAU,CAAC,CAAC;IACpC,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;MAC9B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC;IACxC;IACA,qBAAqB,CAAC,MAAM;MAC1B,IAAI,IAAI,CAAC,eAAe,EAAE;QACxB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC;MAC5D;IACF,CAAC,CAAC;EACJ;EAEA,iBAAiB,CAAC,CAAC,EAAE;IACnB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK;MAAC,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU;MAAE,SAAS,EAAE;IAAK,CAAC,CAAC,CAAC;EACrE;EAMA,cAAc,CAAC,CAAC,EAAE;IAChB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,CAAC,QAAQ,CAAC;MAAC,UAAU,EAAE,KAAK;MAAE,UAAU,EAAE;QAAC,OAAO,EAAE;MAAI;IAAC,CAAC,CAAC;IAC/D,0DAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;MACxB,IAAI,CAAC,QAAQ,CAAC;QAAC,UAAU,EAAE;UAAC,OAAO,EAAE,KAAK;UAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI;QAAE;MAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;MAAC,UAAU,EAAE;QAAC,OAAO,EAAE,KAAK;QAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE;MAAI;IAAC,CAAC,CAAC,CAAC;EACvF;EAEA,QAAQ,CAAC,IAAI,EAAE;IACb,IAAI,CAAC,QAAQ,CAAC;MAAC,UAAU,EAAE;IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,SAAS,IAAI;MACzB,MAAM,IAAI,GAAG,IAAI,+CAAO,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;MACtE,+CAAO,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC;MAQvC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,8CAAM,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;IAC1F,CAAC;IACD,IAAI,IAAI,CAAC,cAAc,EAAE;MACvB,0DAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC,MAAM;MACL,KAAK,CAAC,SAAS,CAAC;IAClB;EACF;EAKA,aAAa,CAAC,CAAC,EAAE;IACf,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,CAAC,QAAQ,CAAC;MAAC,UAAU,EAAE,KAAK;MAAE,SAAS,EAAE;QAAC,OAAO,EAAE;MAAI;IAAC,CAAC,CAAC;IAC9D,4DAAY,CAAC;MAAC,IAAI,EAAE;IAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI;MACvC,IAAI,CAAC,QAAQ,CAAC;QAAC,SAAS,EAAE;UAAC,OAAO,EAAE,KAAK;UAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI;QAAE;MAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;MAAC,SAAS,EAAE;QAAC,OAAO,EAAE,KAAK;QAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE;MAAI;IAAC,CAAC,CAAC,CAAC;EACtF;EAEA,YAAY,CAAC,IAAI,EAAE;IACjB,IAAI,CAAC,QAAQ,CAAC;MAAC,SAAS,EAAE;IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;MACzB;IACF;IAOA,gEAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI;MAC1E,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC;MAChF,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,IAAI,+DAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC;MACxG;IACF,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI;MACd,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;QACtB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAE,GAAG,IAAI,GAAG,CAAC,OAAO,IAAK,MAAM,EAAE,KAAK,CAAC;MAC3D;IACF,CAAC,CAAC;EACJ;EAQA,kBAAkB,CAAC,CAAC,EAAE;IACpB,CAAC,CAAC,cAAc,CAAC,CAAC;IAClB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;MACvB;IACF;IACA,IAAI,CAAC,UAAU,GAAG,SAAS,IAAI,CAAC,GAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAI,CAAC,CAAC,OAAO;IACrF,IAAI,CAAC,QAAQ,CAAC;MAAC,QAAQ,EAAE,IAAI;MAAE,eAAe,EAAE,KAAK;MAAE,SAAS,EAAE,KAAK;MAAE,UAAU,EAAE;IAAK,CAAC,CAAC;IAC5F,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IACzD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;IACzD,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE;MAAC,OAAO,EAAE;IAAK,CAAC,CAAC;IAC3E,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAO1D,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC;IACtD,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,CAAC;EAChF;EAEA,0BAA0B,GAAG;IAC3B,IAAI,QAAQ,CAAC,MAAM,EAAE;MACnB,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACzB;EACF;EAEA,cAAc,CAAC,CAAC,EAAE;IAChB,MAAM,CAAC,GAAG,SAAS,IAAI,CAAC,GAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAI,CAAC,CAAC,OAAO;IAC7E,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;MACxC;IACF;IACA,MAAM,UAAU,GAAI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAI,EAAE;IAC7C,IAAI,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;MAC7C,IAAI,CAAC,QAAQ,CAAC;QAAC,eAAe,EAAE;MAAU,CAAC,CAAC;IAC9C;EACF;EAEA,gBAAgB,GAAG;IACjB,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IAC5D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAC5D,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;IAC5D,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,gBAAgB,CAAC;IAC7D,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC;IACzD,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,0BAA0B,CAAC;IACjF,IAAI,CAAC,UAAU,GAAG,IAAI;IACtB,MAAM,SAAS,GAAG;MAAC,cAAc,EAAE,MAAM,CAAC;IAAC,CAAC;IAC5C,IAAI,IAAI,CAAC,qBAAqB,EAAE;MAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE;QAC9B,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,SAAS,CAAC;MACpD,CAAC,MAAM;QACL,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,SAAS,CAAC;MAClD;IACF;EACF;EAEA,MAAM,GAAG;IACP,MAAM;MAAE;IAAc,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI;IACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAChC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,GACzC,IAAI,CAAC,KAAK,CAAC,aAAa,GACvB,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GACjD,aAAa,CAAC,QAAQ,CAAC,gBAAgB,CAAE;IAE7C,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAC5D,cAAc,GAAG,MAAM;IAEzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAC3B;MAAK,EAAE,EAAC,qBAAqB;MAAA,WAC5B;QAAK,SAAS,EAAC,QAAQ;QAAA,UACrB;UAAG,IAAI,EAAC,GAAG;UAAC,OAAO,EAAE,CAAC,IAAI;YAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;UAAC,CAAE;UAAA,UAAC;YAAG,SAAS,EAAC,qBAAqB;YAAA,UAAC;UAAK,gBAAG;QAAC,gBAAG;MAAC,gBAC1H,CAAC,EACL,IAAI,CAAC,KAAK,CAAC,KAAK;IAAA,eACd,CAAC,GAAI,IAAI;IAChB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa;IAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,GACjD;MAAK,EAAE,EAAC,gBAAgB;MAAA,UACtB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,GACrC;QAAK,SAAS,EAAC,sBAAsB;QAAA,UAAC;MAAK,gBAAK,CAAC,GACjD,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KACpC;QAAwB,SAAS,EAAE,oBAAoB,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,GAAG,EAAE,CAAE;QAC7G,WAAW,EAAE,CAAC,IAAI;UAAE,CAAC,CAAC,cAAc,CAAC,CAAC;UAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAAE,CAAE;QACpE,YAAY,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC;UAAC,gBAAgB,EAAE;QAAC,CAAC,CAAE;QAAA,UACxD,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;MAAO,GAHjD,IAAI,CAAC,OAAO,OAIjB,CACN;IAAC,gBACD,CAAC,GAAI,IAAI;IAChB,OACE;MAAK,EAAE,EAAC,sBAAsB;MAAA,WAC3B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,IAAI,EAClC,YAAY,EACb;QAAK,EAAE,EAAC,oBAAoB;QAAA,UACzB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GACnB;UAAA,WACG,IAAI,CAAC,KAAK,CAAC,OAAO,GAChB,KAAK,IAAI;YAAK,SAAS,EAAC;UAAS,gBAAE,CAAC,GACpC,IAAI,CAAC,KAAK,CAAC,QAAQ,GACjB,8DAAC,2CAAQ;YAAC,QAAQ,EAAE;cAAA,UAAK,8DAAC,wDAAgB;gBAAC,EAAE,EAAC,cAAc;gBAAC,cAAc,EAAC,YAAY;gBACzF,WAAW,EAAC;cAAyC,gBAAC;YAAC,gBAAK,CAAE;YAAA,UAC5D,8DAAC,aAAa;cACZ,GAAG,EAAE,GAAG,IAAI;gBAAC,IAAI,CAAC,qBAAqB,GAAG,GAAG;cAAC,CAAE;cAChD,QAAQ,EAAE,IAAK;cACf,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,eAAgB;cACvC,mBAAmB,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAE;cACtD,SAAS,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;gBAAC,QAAQ,EAAE;cAAK,CAAC,CAAE;cACjD,UAAU,EAAE,IAAI,CAAC;YAAkB,gBAAC;UAAC,gBAC/B,CAAC,GACX;YAAU,EAAE,EAAC,oBAAoB;YAAC,WAAW,EAAE,MAAO;YACpD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAQ;YAAC,QAAQ,EAAE,IAAI,CAAC,mBAAoB;YAC9D,SAAS,EAAE,IAAI,CAAC,cAAe;YAC/B,GAAG,EAAE,GAAG,IAAI;cAAC,IAAI,CAAC,eAAe,GAAG,GAAG;YAAC;UAAE,gBAAE,CAAE,EAGnD,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAC1C;YAAG,IAAI,EAAC,GAAG;YAAC,OAAO,EAAE,IAAI,CAAC,gBAAiB;YAAC,KAAK,EAAC,IAAI;YAAA,UACpD;cAAG,SAAS,EAAC,0BAA0B;cAAA,UAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,GAAG;YAAiB,gBAAI;UAAC,gBAClG,CAAC,GAAG,IAAI,EACZ,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAC9C;YAAG,IAAI,EAAC,GAAG;YAAC,OAAO,EAAE,IAAI,CAAC,iBAAkB;YAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAE;YAAA,UACjG;cAAG,SAAS,EAAC,0BAA0B;cAAA,UAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,GAAG;YAAoB,gBAAI;UAAC,gBACtG,CAAC,GAAG,IAAI,EACZ,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,YAAY,GAClC;YAAG,IAAI,EAAC,GAAG;YAAC,OAAO,EAAE,IAAI,CAAC,UAAW;YAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAE;YAAA,UACnF;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAE;YAAQ,gBAAI;UAAC,gBAC3C,CAAC,GACJ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAClB;YAAG,IAAI,EAAC,GAAG;YAAC,WAAW,EAAE,IAAI,CAAC,kBAAmB;YAAC,YAAY,EAAE,IAAI,CAAC,kBAAmB;YACtF,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAE;YAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,uBAAuB,CAAE;YAAA,UACzF;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAC;YAAG,gBAAG;UAAC,gBACpC,CAAC,GACJ,IAAI,EAER;YAAO,IAAI,EAAC,MAAM;YAAC,GAAG,EAAE,GAAG,IAAI;cAAC,IAAI,CAAC,UAAU,GAAG,GAAG;YAAA,CAAE;YACrD,QAAQ,EAAE,IAAI,CAAC,gBAAiB;YAAC,KAAK,EAAE;cAAC,OAAO,EAAE;YAAM;UAAE,gBAAE,CAAC,EAC/D;YAAO,IAAI,EAAC,MAAM;YAAC,GAAG,EAAE,GAAG,IAAI;cAAC,IAAI,CAAC,WAAW,GAAG,GAAG;YAAA,CAAE;YAAC,MAAM,EAAC,kBAAkB;YAChF,QAAQ,EAAE,IAAI,CAAC,iBAAkB;YAAC,KAAK,EAAE;cAAC,OAAO,EAAE;YAAM;UAAE,gBAAE,CAAC,EAChE;YAAO,IAAI,EAAC,MAAM;YAAC,GAAG,EAAE,GAAG,IAAI;cAAC,IAAI,CAAC,YAAY,GAAG,GAAG;YAAA,CAAE;YAAC,MAAM,EAAC,SAAS;YAAC,OAAO,EAAC,aAAa;YAC9F,QAAQ,EAAE,IAAI,CAAC,iBAAkB;YAAC,KAAK,EAAE;cAAC,OAAO,EAAE;YAAM;UAAE,gBAAE,CAAC;QAAA,eAChE,CAAC,GAEH;UAAK,EAAE,EAAC,kBAAkB;UAAA,UAAE;QAAM,gBAAM;MAAC,gBAExC,CAAC,EACL,IAAI,CAAC,KAAK,CAAC,SAAS,GACnB;QAAK,EAAE,EAAC,aAAa;QAAA,WACnB;UAAK,EAAE,EAAC,kBAAkB;UAAA,WACxB;YAAG,IAAI,EAAC,GAAG;YAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,QAAQ,GAAG,EAAG;YACrE,OAAO,EAAE,CAAC,IAAI;cAAC,CAAC,CAAC,cAAc,CAAC,CAAC;cAAE,IAAI,CAAC,QAAQ,CAAC;gBAAC,QAAQ,EAAE;cAAO,CAAC,CAAC;YAAC,CAAE;YAAA,UAAC;UAAE,gBAAG,CAAC,EACjF;YAAG,IAAI,EAAC,GAAG;YAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,GAAG,QAAQ,GAAG,EAAG;YACtE,OAAO,EAAE,CAAC,IAAI;cAAC,CAAC,CAAC,cAAc,CAAC,CAAC;cAAE,IAAI,CAAC,QAAQ,CAAC;gBAAC,QAAQ,EAAE;cAAQ,CAAC,CAAC;YAAC,CAAE;YAAA,UAAC;UAAC,gBAAG,CAAC;QAAA,eAC9E,CAAC,EACN;UAAK,EAAE,EAAC,kBAAkB;UAAA,UACvB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,KAAK,CAAC,GACnF;YAAK,SAAS,EAAC,mBAAmB;YAAA,UAAC;UAAO,gBAAK,CAAC,GAChD,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KACnF;YAAG,IAAI,EAAC,GAAG;YAAiB,OAAO,EAAE,CAAC,IAAI;cAAC,CAAC,CAAC,cAAc,CAAC,CAAC;cAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YAAC,CAAE;YAAA,UAAE;UAAK,GAA/E,KAAK,GAAG,CAAC,OAA0E,CACrG;QAAC,gBACD,CAAC,EAIN;UAAK,EAAE,EAAC,oBAAoB;UAAA,WAC1B;YAAG,IAAI,EAAC,GAAG;YAAC,OAAO,EAAE,CAAC,IAAI;cAAC,CAAC,CAAC,cAAc,CAAC,CAAC;cAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAAC,CAAE;YAAC,KAAK,EAAC,IAAI;YAAA,UAChF;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAC;YAAS,gBAAG;UAAC,gBAC1C,CAAC,EACJ;YAAG,IAAI,EAAC,GAAG;YAAC,SAAS,EAAE,kBAAkB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,GAAG,EAAE,CAAE;YAChF,OAAO,EAAE,CAAC,IAAI;cAAC,CAAC,CAAC,cAAc,CAAC,CAAC;cAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAC,CAAE;YAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAE;YAAA,UACxG;cAAG,SAAS,EAAC,gBAAgB;cAAA,UAAE;YAAQ,gBAAI;UAAC,gBAC3C,CAAC;QAAA,eACD,CAAC;MAAA,eACH,CAAC,GAAG,IAAI,EACd,IAAI,CAAC,KAAK,CAAC,UAAU,GACpB;QAAK,EAAE,EAAC,cAAc;QAAA,WACpB;UAAG,IAAI,EAAC,GAAG;UAAC,OAAO,EAAE,CAAC,IAAI;YAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC;cAAC,UAAU,EAAE;YAAK,CAAC,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;UAAC,CAAE;UAAA,WAC5G;YAAG,SAAS,EAAC,gBAAgB;YAAA,UAAC;UAAK,gBAAG,CAAC;YAAA,UAAM;UAAE,gBAAM,CAAC;QAAA,eACrD,CAAC,EACJ;UAAG,IAAI,EAAC,GAAG;UAAC,OAAO,EAAE,CAAC,IAAI;YAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC;cAAC,UAAU,EAAE;YAAK,CAAC,CAAC;YAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;UAAC,CAAE;UAAA,WAC7G;YAAG,SAAS,EAAC,gBAAgB;YAAA,UAAC;UAAY,gBAAG,CAAC;YAAA,UAAM;UAAE,gBAAM,CAAC;QAAA,eAC5D,CAAC,EACJ;UAAG,IAAI,EAAC,GAAG;UAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,UAAW;UAC/D,OAAO,EAAE,CAAC,IAAI;YAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC;cAAC,UAAU,EAAE;YAAK,CAAC,CAAC;YAAE,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;UAAC,CAAE;UAAA,WACnK;YAAG,SAAS,EAAC,gBAAgB;YAAA,UAAC;UAAI,gBAAG,CAAC;YAAA,UAAM;UAAI,gBAAM,CAAC;QAAA,eACtD,CAAC,EACJ;UAAG,IAAI,EAAC,GAAG;UAAC,OAAO,EAAE,IAAI,CAAC,cAAe;UAAA,WACvC;YAAG,SAAS,EAAC,gBAAgB;YAAA,UAAC;UAAK,gBAAG,CAAC;YAAA,UAAM;UAAE,gBAAM,CAAC;QAAA,eACrD,CAAC,EACJ;UAAG,IAAI,EAAC,GAAG;UAAC,OAAO,EAAE,CAAC,IAAI;YAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC;cAAC,UAAU,EAAE;YAAK,CAAC,CAAC;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;UAAC,CAAE;UAAA,WAC3G;YAAG,SAAS,EAAC,gBAAgB;YAAA,UAAC;UAAW,gBAAG,CAAC;YAAA,UAAM;UAAE,gBAAM,CAAC;QAAA,eAC3D,CAAC,EACJ;UAAG,IAAI,EAAC,GAAG;UAAC,OAAO,EAAE,IAAI,CAAC,aAAc;UAAA,WACtC;YAAG,SAAS,EAAC,gBAAgB;YAAA,UAAC;UAAW,gBAAG,CAAC;YAAA,UAAM;UAAE,gBAAM,CAAC;QAAA,eAC3D,CAAC,EACJ;UAAG,IAAI,EAAC,GAAG;UAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,GAAG,UAAW;UAC/D,OAAO,EAAE,CAAC,IAAI;YAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC;cAAC,UAAU,EAAE;YAAK,CAAC,CAAC;YAAE,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;UAAC,CAAE;UAAA,WACnK;YAAG,SAAS,EAAC,gBAAgB;YAAA,UAAC;UAAQ,gBAAG,CAAC;YAAA,UAAM;UAAI,gBAAM,CAAC;QAAA,eAC1D,CAAC;MAAA,eACD,CAAC,GAAG,IAAI,EACd,IAAI,CAAC,KAAK,CAAC,UAAU,GACpB;QAAK,SAAS,EAAC,8BAA8B;QAAC,OAAO,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC;UAAC,UAAU,EAAE;QAAI,CAAC,CAAE;QAAA,UAC7F;UAAS,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAE;UAAA,WACzC;YAAA,WAAQ,OAAK;cAAG,IAAI,EAAC,GAAG;cAAC,OAAO,EAAE,CAAC,IAAI;gBAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAAE,IAAI,CAAC,QAAQ,CAAC;kBAAC,UAAU,EAAE;gBAAI,CAAC,CAAC;cAAC,CAAE;cAAA,UAAC;gBAAG,SAAS,EAAC,gBAAgB;gBAAA,UAAC;cAAK,gBAAG;YAAC,gBAAG,CAAC;UAAA,eAAQ,CAAC,EACrJ;YAAK,SAAS,EAAC,0BAA0B;YAAA,UACtC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG;cAAG,SAAS,EAAC,2BAA2B;cAAA,UAAC;YAAI,gBAAG,CAAC,GAChF,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG;cAAG,SAAS,EAAC,2BAA2B;cAAA,UAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG;YAAM,gBAAI,CAAC,GACvI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAClC;cAAG,IAAI,EAAC,GAAG;cAAoB,OAAO,EAAE,CAAC,IAAI;gBAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;cAAC,CAAE;cAAA,UAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;YAAO,GAA1G,IAAI,CAAC,OAAO,OAAkG,CAChI;UAAC,gBACD,CAAC;QAAA,eACC;MAAC,gBACP,CAAC,GAAG,IAAI,EACd,IAAI,CAAC,KAAK,CAAC,SAAS,GACnB;QAAK,SAAS,EAAC,8BAA8B;QAAC,OAAO,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC;UAAC,SAAS,EAAE;QAAI,CAAC,CAAE;QAAA,UAC5F;UAAS,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAE;UAAA,WACzC;YAAA,WAAQ,MAAI;cAAG,IAAI,EAAC,GAAG;cAAC,OAAO,EAAE,CAAC,IAAI;gBAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAAE,IAAI,CAAC,QAAQ,CAAC;kBAAC,SAAS,EAAE;gBAAI,CAAC,CAAC;cAAC,CAAE;cAAA,UAAC;gBAAG,SAAS,EAAC,gBAAgB;gBAAA,UAAC;cAAK,gBAAG;YAAC,gBAAG,CAAC;UAAA,eAAQ,CAAC,EACnJ;YAAK,SAAS,EAAC,0BAA0B;YAAA,UACtC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,GAAG;cAAG,SAAS,EAAC,2BAA2B;cAAA,UAAC;YAAI,gBAAG,CAAC,GAC/E,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG;cAAG,SAAS,EAAC,2BAA2B;cAAA,UAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,GAAG;YAAM,gBAAI,CAAC,GACrI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IACjC;cAAG,IAAI,EAAC,GAAG;cAAwB,OAAO,EAAE,CAAC,IAAI;gBAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;cAAC,CAAE;cAAA,UAC7F,eAAe,CAAC,IAAI;YAAC,GADP,IAAI,CAAC,WAAW,OAE9B,CACJ;UAAC,gBACD,CAAC;QAAA,eACC;MAAC,gBACP,CAAC,GAAG,IAAI;IAAA,eACZ,CAAC;EAEV;AACF;AAAC;AAED,+DAAe,sDAAU,CAAC,WAAW,CAAC,E","sources":["webpack://tinode-webapp/./src/views/logo-view.jsx","webpack://tinode-webapp/./src/views/messages-view.jsx","webpack://tinode-webapp/./src/widgets/attachment.jsx","webpack://tinode-webapp/./src/widgets/chat-message.jsx","webpack://tinode-webapp/./src/widgets/forward-bundle.jsx","webpack://tinode-webapp/./src/widgets/group-subs.jsx","webpack://tinode-webapp/./src/widgets/invitation.jsx","webpack://tinode-webapp/./src/widgets/meta-message.jsx","webpack://tinode-webapp/./src/widgets/pinned-messages.jsx","webpack://tinode-webapp/./src/widgets/received-marker.jsx","webpack://tinode-webapp/./src/widgets/send-message.jsx"],"sourcesContent":["/* Static placeholder shown in the message pane when no conversation is selected. */\nimport React from 'react';\n\nimport { BASE_APP_NAME } from '../config.js';\n\nfunction Icon({children}) { return {children}; }\n\nexport default class LogoView extends React.PureComponent {\n render() {\n return (\n
\n
\n forum\n

{BASE_APP_NAME}

\n

选择一个会话开始聊天

\n
\n
\n );\n }\n};\n","// Panel with a chat.\n\nimport React, { Suspense } from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Drafty, Tinode, TheCard } from 'tinode-sdk';\n\n// webpack.config.js maps the 'tinode-sdk' import to the global `tinode` UMD bundle, which only\n// re-exports {AccessMode, Drafty, TheCard, Tinode} (see umd/tinode.dev.js's own top-level export\n// list) -- LOCAL_SEQID was never one of them, despite tinode-sdk's ES module genuinely exporting\n// it (confirmed directly against umd/tinode.dev.js, which still defines it internally as\n// `const LOCAL_SEQID = 0xFFFFFFF;` and uses it in several of its own topic methods -- it's just\n// never attached to the UMD bundle's exported global object). Importing it by name here silently\n// resolved to `undefined` instead of a build error (an externals mapping can't tell \"not on this\n// object\" from \"doesn't exist\"), and every `seq < LOCAL_SEQID` below was therefore\n// `seq < undefined`, which JS always evaluates to false -- confirmed live: \"撤回\"\n// (menu_item_recall)never appeared in the long-press\n// menu for ANY message, own or admin, however fresh, because the seq-range check that's supposed\n// to just filter out not-yet-confirmed local placeholder messages was unconditionally rejecting\n// every real, server-confirmed message too. Hardcoding the same value the SDK itself uses (rather\n// than trying to change what webpack's externals map exposes, which every other page importing\n// from 'tinode-sdk' already depends on staying exactly as-is) is the narrowest fix.\nconst LOCAL_SEQID = 0xFFFFFFF;\n\nconst CallPanel = React.lazy(_ => import('../widgets/call-panel.jsx'));\nimport ChatMessage from '../widgets/chat-message.jsx';\nimport ContactBadges from '../widgets/contact-badges.jsx';\nconst DocPreview = React.lazy(_ => import('../widgets/doc-preview.jsx'));\nimport ErrorPanel from '../widgets/error-panel.jsx';\nimport GroupSubs from '../widgets/group-subs.jsx';\nconst ImagePreview = React.lazy(_ => import('../widgets/image-preview.jsx'));\nimport Invitation from '../widgets/invitation.jsx';\nimport LetterTile from '../widgets/letter-tile.jsx';\nimport LoadSpinner from '../widgets/load-spinner.jsx';\nimport LogoView from './logo-view.jsx';\nimport MetaMessage from '../widgets/meta-message.jsx';\nimport PinnedMessages from '../widgets/pinned-messages.jsx';\nimport { RiskConfirmDialog } from './security-support-view.jsx';\nimport SendMessage from '../widgets/send-message.jsx';\nconst TheCardPreview = React.lazy(_ => import('../widgets/the-card-preview.jsx'));\nconst VideoPreview = React.lazy(_ => import('../widgets/video-preview.jsx'));\n\nimport { DEFAULT_P2P_ACCESS_MODE, EDIT_PREVIEW_LENGTH, IMAGE_PREVIEW_DIM, IMMEDIATE_P2P_SUBSCRIPTION,\n DRAFTY_FR_MIME_TYPE_LEGACY, KEYPRESS_DELAY, MESSAGES_PAGE, MAX_EXTERN_ATTACHMENT_SIZE, MAX_IMAGE_DIM,\n MAX_INBAND_ATTACHMENT_SIZE, READ_DELAY, QUOTED_REPLY_LENGTH, VIDEO_PREVIEW_DIM } from '../config.js';\nimport { CALL_STATE_OUTGOING_INITATED, CALL_STATE_IN_PROGRESS } from '../constants.js';\nimport { blobToBase64, fileToBase64, imageScaled, importVCard, makeImageUrl } from '../lib/blob-helpers.js';\nimport { topicDisplayName } from '../lib/utils.js';\nimport { acceptGroupInvitation, checkURL, confirmRiskChallenge, createChatUploader, favoriteMessages, getBootstrap,\n getConversationContext, getFavorites, getFriendRequests, getGroupJoinRequests, getGroupMembers, getLatestGroupAnnouncement,\n getTopicDraft, recallMessage, updateTopicDraft } from '../lib/im-api.js';\nimport HashNavigation from '../lib/navigation.js';\nimport { bytesToHumanSize, relativeDateFormat, shortDateFormat } from '../lib/strformat.js';\n\n// Run timer with this frequency (ms) for checking notification queue.\nconst NOTIFICATION_EXEC_INTERVAL = 300;\n// Scroll distance before [go to latest message] button is shown.\nconst SHOW_GO_TO_LAST_DIST = 100;\n// Sctoll distance from the top when fetching the page of earlier messages is triggered.\nconst FETCH_PAGE_TRIGGER = 40;\n\nconst messages = defineMessages({\n // 已存在于 src/i18n/*.json(zh: \"消息已删除\"),这里只是注册引用,不是新增待翻译串\n message_deleted: {\n id: 'message_deleted',\n defaultMessage: 'message deleted',\n description: 'Placeholder shown in the timeline where a message was recalled or deleted',\n },\n online_now: {\n id: 'online_now',\n defaultMessage: 'online now',\n description: 'Indicator that the user or topic is currently online',\n },\n last_seen: {\n id: 'last_seen_timestamp',\n defaultMessage: 'Last seen: {timestamp}',\n description: 'Label for the timestamp of when the user or topic was last online'\n },\n not_found: {\n id: 'title_not_found',\n defaultMessage: 'Not found',\n description: 'Title shown when topic is not found'\n },\n channel: {\n id: 'channel',\n defaultMessage: 'channel',\n description: 'Subtitle shown for channels in MessagesView instead of last seen'\n },\n file_attachment_too_large: {\n id: 'file_attachment_too_large',\n defaultMessage: 'The file size {size} exceeds the {limit} limit.',\n description: 'Error message when attachment is too large'\n },\n invalid_content: {\n id: 'invalid_content',\n defaultMessage: 'invalid content',\n description: 'Shown when the message is unreadable'\n },\n editing_message: {\n id: 'editing_message',\n defaultMessage: 'Editing',\n description: 'Title over message editing preview'\n },\n drag_file: {\n id: 'drag_file',\n defaultMessage: 'Drag file here',\n description: 'Prompt on the file drag-n-drop overlay banner'\n },\n self_topic_name: {\n id: 'self_topic_name',\n defaultMessage: 'Saved messages',\n description: 'Name of self topic for UI'\n },\n subscriber_count: {\n id: 'subscriber_count',\n defaultMessage: '{count, plural, ' +\n 'one {{count, number} subscriber} ' +\n 'two {{count, number} subscribers} ' +\n 'three {{count, number} subscribers} ' +\n 'few {{count, number} subscribers} ' +\n 'many {{count, number} subscribers} ' +\n 'other {{count, number} subscribers}}',\n description: 'Count of channel subscribers'\n },\n member_count: {\n id: 'member_count',\n defaultMessage: '{count, plural, ' +\n 'one {{count, number} member} ' +\n 'two {{count, number} members} ' +\n 'three {{count, number} members} ' +\n 'few {{count, number} members} ' +\n 'many {{count, number} members} ' +\n 'other {{count, number} members}}',\n description: 'Count of group topic members'\n },\n cannot_parse_vcard: {\n id: 'cannot_parse_vcard',\n defaultMessage: 'Cannot parse vCard file.',\n description: 'Error message when vCard file cannot be parsed'\n }\n});\n\n// Checks if the access permissions are granted but not yet accepted.\nfunction isUnconfirmed(acs) {\n if (acs) {\n const ex = acs.getExcessive() || '';\n return acs.isJoiner('given') && (ex.includes('R') || ex.includes('W'));\n }\n return false;\n}\n\nfunction isPeerRestricted(acs) {\n if (acs) {\n const ms = acs.getMissing() || '';\n return acs.isJoiner('want') && (ms.includes('R') || ms.includes('W'));\n }\n return false;\n}\n\n// Synthetic \"所有人\" entry in the @提醒 picker (mentionSearch below) -- not a real user_id, just a\n// marker mentionSelected/sendMessage recognize to set head.mention_all instead of resolving a\n// Drafty MN entity to it. Never sent to the server as an actual id.\nconst MENTION_ALL_UID = '__mention_all__';\n\nfunction shouldPresentCallPanel(callState) {\n // Show call panel if either:\n // - call is outgoing (and the client is waiting for the other side to pick up) or,\n // - call is already in progress.\n return callState == CALL_STATE_OUTGOING_INITATED || callState == CALL_STATE_IN_PROGRESS;\n}\n\nclass MessagesView extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = MessagesView.getDerivedStateFromProps(props, {});\n // Not topic-specific, fetched once in componentDidMount -- unlike the rest of state this\n // is intentionally not touched by getDerivedStateFromProps on topic change.\n this.state.messagePolicy = null;\n this.state.toast = null;\n this.state.riskDialog = null;\n this.mentionedUsers = [];\n this.mentionAllPending = false;\n\n this.componentSetup = this.componentSetup.bind(this);\n this.leave = this.leave.bind(this);\n this.sendMessage = this.sendMessage.bind(this);\n this.handleRiskConfirm = this.handleRiskConfirm.bind(this);\n this.handleRiskCancel = this.handleRiskCancel.bind(this);\n this.retrySend = this.retrySend.bind(this);\n this.sendImageAttachment = this.sendImageAttachment.bind(this);\n this.sendVideoAttachment = this.sendVideoAttachment.bind(this);\n this.sendFileAttachment = this.sendFileAttachment.bind(this);\n this.sendAudioAttachment = this.sendAudioAttachment.bind(this);\n this.sendTheCardAttachment = this.sendTheCardAttachment.bind(this);\n this.sendKeyPress = this.sendKeyPress.bind(this);\n this.subscribe = this.subscribe.bind(this);\n this.handleScrollReference = this.handleScrollReference.bind(this);\n this.mountDnDEvents = this.mountDnDEvents.bind(this);\n this.handleScrollEvent = this.handleScrollEvent.bind(this);\n this.handleDescChange = this.handleDescChange.bind(this);\n this.handleSubsUpdated = this.handleSubsUpdated.bind(this);\n this.handleMessageUpdate = this.handleMessageUpdate.bind(this);\n this.handleAuxUpdate = this.handleAuxUpdate.bind(this);\n this.handleAllMessagesReceived = this.handleAllMessagesReceived.bind(this);\n this.handleInfoReceipt = this.handleInfoReceipt.bind(this);\n this.handleExpandMedia = this.handleExpandMedia.bind(this);\n this.handleClosePreview = this.handleClosePreview.bind(this);\n this.handleCallPanelToggle = this.handleCallPanelToggle.bind(this);\n this.handleFormResponse = this.handleFormResponse.bind(this);\n this.handleContextClick = this.handleContextClick.bind(this);\n this.handleShowMessageContextMenu = this.handleShowMessageContextMenu.bind(this);\n this.handleNewChatAcceptance = this.handleNewChatAcceptance.bind(this);\n this.handleEnablePeer = this.handleEnablePeer.bind(this);\n this.loadRelationshipContext = this.loadRelationshipContext.bind(this);\n this.loadGroupContext = this.loadGroupContext.bind(this);\n this.loadDraft = this.loadDraft.bind(this);\n this.handleComposerChange = this.handleComposerChange.bind(this);\n this.clearDraft = this.clearDraft.bind(this);\n this.mentionSearch = this.mentionSearch.bind(this);\n this.mentionSelected = this.mentionSelected.bind(this);\n this.handleShowAnnouncement = this.handleShowAnnouncement.bind(this);\n this.handleShowJoinRequests = this.handleShowJoinRequests.bind(this);\n this.handleSendFriendVerification = this.handleSendFriendVerification.bind(this);\n this.handleAcceptGroupInvitation = this.handleAcceptGroupInvitation.bind(this);\n this.handleBatchDelete = this.handleBatchDelete.bind(this);\n this.handleBatchFavorite = this.handleBatchFavorite.bind(this);\n this.handleAttachFile = this.handleAttachFile.bind(this);\n this.handleAttachImageOrVideo = this.handleAttachImageOrVideo.bind(this);\n this.handleCancelUpload = this.handleCancelUpload.bind(this);\n this.postReadNotification = this.postReadNotification.bind(this);\n this.clearNotificationQueue = this.clearNotificationQueue.bind(this);\n this.goToLatestMessage = this.goToLatestMessage.bind(this);\n this.handleFileDrop = this.handleFileDrop.bind(this);\n\n this.handlePickReply = this.handlePickReply.bind(this);\n this.handleEditMessage = this.handleEditMessage.bind(this);\n this.handleCancelReply = this.handleCancelReply.bind(this);\n this.handleQuoteClick = this.handleQuoteClick.bind(this);\n this.jumpToMessage = this.jumpToMessage.bind(this);\n this.handleUnpinMessage = this.handleUnpinMessage.bind(this);\n this.handleCallHangup = this.handleCallHangup.bind(this);\n\n this.isDragEnabled = this.isDragEnabled.bind(this);\n this.handleDragStart = this.handleDragStart.bind(this);\n this.handleDragIn = this.handleDragIn.bind(this);\n this.handleDragOut = this.handleDragOut.bind(this);\n this.handleDrag = this.handleDrag.bind(this);\n this.handleDrop = this.handleDrop.bind(this);\n\n this.chatMessageRefs = [];\n this.getOrCreateMessageRef = this.getOrCreateMessageRef.bind(this);\n this.getVisibleMessageRange = this.getVisibleMessageRange.bind(this);\n\n // Keeps track of the drag event.\n // Need a counter b/c the browser's 'drag' events may fire multiple times\n // when the user takes the mouse pointer over the container:\n // for the component itself and for all nested/child elements.\n this.dragCounter = 0;\n this.dndRef = null;\n\n this.readNotificationQueue = [];\n this.readNotificationTimer = null;\n\n this.keyPressTimer = null;\n }\n\n getOrCreateMessageRef(seqId) {\n if (this.chatMessageRefs[seqId]) {\n return this.chatMessageRefs[seqId];\n }\n const ref = React.createRef();\n this.chatMessageRefs[seqId] = ref;\n return ref;\n }\n\n getVisibleMessageRange(holderRect) {\n let min = Number.MAX_SAFE_INTEGER, max = -1;\n let visibilityStatus = false;\n this.chatMessageRefs.every((ref, seq) => {\n if (ref.current) {\n const { top, bottom, height } = ref.current.getBoundingClientRect();\n const visible = top <= holderRect.top ? holderRect.top - top <= height : bottom - holderRect.bottom <= height;\n if (visible) {\n visibilityStatus = true;\n min = Math.min(min, seq);\n max = Math.max(max, seq);\n } else if (visibilityStatus) {\n // The remaining elements are no longer visible, no need to iterate them.\n return false;\n }\n }\n return true;\n });\n\n return max >= min ? {min: min, max: max} : {min: 0, max: 0};\n }\n\n componentDidMount() {\n if (this.messagesScroller) {\n this.messagesScroller.addEventListener('scroll', this.handleScrollEvent);\n }\n\n // Drag and drop events\n this.mountDnDEvents(this.dndRef);\n\n this.componentSetup({}, {});\n\n // Ch.7: jump to a message found via chat-history search/media grid (content-library-view.jsx's\n // History) -- the componentDidUpdate check a few lines below only fires on a *change* to\n // jumpToSeq while this component stays mounted, but tinode-web.jsx never renders MessagesView\n // and a Ch.7 side panel at the same time (`!chapterSevenActive` gates it) -- every jump from\n // History's search results/image grid/video grid therefore unmounts the Ch.7 view and mounts a\n // *brand new* MessagesView instance with jumpToSeq already set on its very first render, which\n // componentDidUpdate never sees (it doesn't run for the initial mount). Confirmed live: the\n // seq stayed in the URL indefinitely (jumpToMessage's own `removeUrlParam` call never fired)\n // and the conversation opened at the bottom instead of scrolling to the found message --\n // 100% reproducible for every Ch.7 \"定位到消息来源\" entry point, not an intermittent timing issue.\n if (this.props.jumpToSeq) {\n const seq = parseInt(this.props.jumpToSeq, 10);\n const topicObj = this.props.tinode && this.props.topic ? this.props.tinode.getTopic(this.props.topic) : null;\n const attemptJump = () => this.jumpToMessage(seq);\n // A first-ever mount also means `componentSetup()` just above only *started* subscribing\n // this topic (subscribe() -> topic.subscribe() is async, fire-and-forget from here) --\n // jumpToMessage's own topic.getMeta() call requires an already-established subscription,\n // and firing immediately races ahead of it: confirmed live, this raced getMeta() call came\n // back as a real `{\"code\":403,\"text\":\"permission denied\"}` control message (not a local\n // guard, an actual rejected server round trip) while the real subscribe's own request was\n // still in flight one id apart. Poll the already-exposed isSubscribed() flag rather than\n // guessing a fixed delay or reworking subscribe()'s fire-and-forget call sites to expose\n // their promise; capped at 5s so a genuinely stuck subscribe still falls through to\n // jumpToMessage's own existing error handling instead of waiting forever.\n if (topicObj && !topicObj.isSubscribed()) {\n let tries = 0;\n const waitForSubscription = () => {\n if (topicObj.isSubscribed() || ++tries > 25) {\n attemptJump();\n } else {\n window.setTimeout(waitForSubscription, 200);\n }\n };\n waitForSubscription();\n } else {\n attemptJump();\n }\n }\n\n getBootstrap().then(data => {\n this.setState({messagePolicy: data.message_policy || null});\n }).catch(_ => {});\n }\n\n componentWillUnmount() {\n // componentSetup below has an identical guard for switching from one topic to another during an\n // active call -- but componentDidUpdate/componentSetup never runs on an actual unmount (leaving\n // the messaging section entirely for another chapter, or on mobile switching to the conversation\n // list while displayMobile). Without this, CallPanel's own componentWillUnmount only tears down\n // local media: it never notifies the peer or resets tinode-web.jsx's top-level callState/\n // callTopic, which then stay stuck at CALL_STATE_IN_PROGRESS. Navigating back to the call's topic\n // later remounts a \"zombie\" CallPanel -- its start() sees that stale CALL_STATE_IN_PROGRESS and\n // takes the \"we just accepted\" branch, which never calls getUserMedia(): no local media, every\n // control disabled, only hang-up works.\n if (this.state.rtcPanel) {\n this.handleCallHangup(this.state.topic, this.props.callSeq);\n }\n if (this.messagesScroller) {\n this.messagesScroller.removeEventListener('scroll', this.handleScrollEvent);\n }\n window.clearTimeout(this.toastTimer);\n\n // Flush all notifications.\n this.clearNotificationQueue();\n\n // Drag and drop events\n if (this.dndRef) {\n this.dndRef.removeEventListener('dragstart', this.handleDragStart);\n this.dndRef.removeEventListener('dragenter', this.handleDragIn);\n this.dndRef.removeEventListener('dragleave', this.handleDragOut);\n this.dndRef.removeEventListener('dragover', this.handleDrag);\n this.dndRef.removeEventListener('drop', this.handleDrop);\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n // Scroll last message into view on component update e.g. on message received\n // or vertical shrinking.\n if (this.messagesScroller &&\n (prevState.topic != this.state.topic || prevState.maxSeqId != this.state.maxSeqId ||\n prevState.minSeqId != this.state.minSeqId)) {\n // New message.\n if (this.state.scrollPosition < SHOW_GO_TO_LAST_DIST) {\n this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight -\n this.state.scrollPosition - this.messagesScroller.offsetHeight;\n }\n }\n\n if (!this.props.applicationVisible) {\n // If application is not visible, flush all unsent 'read' notifications.\n this.clearNotificationQueue();\n } else {\n // Otherwise assume there are unread messages.\n this.postReadNotification(0);\n }\n\n // Ch.7: jump to a message found via chat-history search (content-library-view.jsx's History),\n // passed in as a ?jumpseq= hash param rather than a normal prop since the navigation that gets us\n // here also has to change the *topic*, which content-library-view.jsx has no direct way to do.\n if (this.props.jumpToSeq && this.props.jumpToSeq != prevProps.jumpToSeq) {\n this.jumpToMessage(parseInt(this.props.jumpToSeq, 10));\n }\n\n this.componentSetup(prevProps, prevState);\n }\n\n componentSetup(prevProps, prevState) {\n const topic = this.props.tinode ? this.props.tinode.getTopic(this.state.topic) : undefined;\n if (this.state.topic != prevState.topic) {\n if (prevState.topic && !Tinode.isNewGroupTopicName(prevState.topic)) {\n this.leave(prevState.topic);\n if (prevState.rtcPanel) {\n this.handleCallHangup(prevState.topic, prevProps.callSeq);\n }\n }\n\n if (topic) {\n topic.onData = this.handleMessageUpdate;\n topic.onAllMessagesReceived = this.handleAllMessagesReceived;\n topic.onInfo = this.handleInfoReceipt;\n topic.onMetaDesc = this.handleDescChange;\n topic.onSubsUpdated = this.handleSubsUpdated;\n topic.onPres = this.handleSubsUpdated;\n topic.onAuxUpdated = this.handleAuxUpdate;\n }\n\n this.mentionedUsers = [];\n this.mentionAllPending = false;\n this.loadRelationshipContext(topic);\n this.loadGroupContext(topic);\n this.loadDraft(topic);\n }\n\n if (topic) {\n if ((this.state.topic != prevState.topic) || (this.props.myUserId && !prevProps.myUserId)) {\n // Don't immediately subscribe to a new p2p topic, wait for the first message.\n const newTopic = (this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic);\n if (topic.isP2PType() && newTopic && !IMMEDIATE_P2P_SUBSCRIPTION) {\n topic.getMeta(topic.startMetaQuery().withDesc().build());\n } else if (this.props.myUserId) {\n this.subscribe(topic);\n }\n } else if (topic.isSubscribed() && this.state.isReader && !prevState.isReader) {\n // If reader status has changed and data became available.\n topic.getMeta(topic.startMetaQuery().withLaterData().build());\n } else if (!topic.isSubscribed() && this.props.ready && !prevProps.ready) {\n // Connection restored (e.g. wake from sleep): resubscribe to the currently open topic.\n this.subscribe(topic);\n }\n }\n }\n\n static getDerivedStateFromProps(nextProps, prevState) {\n let nextState = {};\n if (!nextProps.topic) {\n // Default state: no topic.\n nextState = {\n minSeqId: -1,\n maxSeqId: -1,\n latestClearId: -1,\n onlineSubs: [],\n topic: null,\n title: '',\n avatar: null,\n isVerified: false,\n isStaff: false,\n isDangerous: false,\n deleted: false,\n docPreview: null,\n imagePreview: null,\n imagePostview: null,\n videoPreview: null,\n videoPostview: null,\n rtcPanel: null,\n minimizedCallPanel: false,\n typingIndicator: false,\n scrollPosition: 0,\n fetchingMessages: false,\n peerMessagingDisabled: false,\n channel: false,\n reply: null,\n contentToEdit: null,\n showGoToLastButton: false,\n dragging: false,\n pins: [],\n pinsLoaded: false,\n selectedPin: 0,\n subsVersion: 0,\n relationshipContext: null,\n pendingRequestMessage: null,\n groupRoles: null,\n myGroupRole: null,\n groupAnnouncement: null,\n pendingJoinRequests: 0,\n draftText: null,\n draftVersion: 0\n };\n } else if (nextProps.topic != prevState.topic) {\n const topic = nextProps.tinode.getTopic(nextProps.topic);\n\n nextState = {\n topic: nextProps.topic,\n deleted: topic._deleted,\n docPreview: null,\n imagePreview: null,\n imagePostview: null,\n videoPreview: null,\n videoPostview: null,\n rtcPanel: null,\n minimizedCallPanel: false,\n typingIndicator: false,\n scrollPosition: 0,\n fetchingMessages: false,\n showGoToLastButton: false,\n contentToEdit: null,\n dragging: false,\n selectedPin: 0,\n relationshipContext: null,\n pendingRequestMessage: null,\n groupRoles: null,\n myGroupRole: null,\n groupAnnouncement: null,\n pendingJoinRequests: 0,\n draftText: null,\n draftVersion: 0,\n // MessagesView isn't remounted on topic switch (no `key={topic}` at the call site in\n // tinode-web.jsx), so a pending risk-check dialog from the conversation just left would\n // otherwise survive the switch -- confirming it would then send the old topic's message\n // into whichever topic is now open, since doSend()'s `this.props.sendMessage` resolves the\n // topic to send to at call time, not at the time the dialog was raised.\n riskDialog: null\n };\n\n if (nextProps.forwardMessage) {\n if (nextProps.forwardMessage.content) {\n const content = nextProps.forwardMessage.content;\n const size = content?.length || (content?.size || 0);\n nextState.docPreview = {\n object: content,\n type: nextProps.forwardMessage.type,\n size: size\n };\n } else {\n // We are forwarding a message. Show preview.\n nextState.reply = {\n content: nextProps.forwardMessage.preview,\n seq: null\n };\n }\n } else {\n nextState.reply = null;\n }\n\n if (topic) {\n // Topic exists.\n const subs = [];\n\n if (nextProps.connected) {\n topic.subscribers((sub) => {\n if (sub.online && sub.user != nextProps.myUserId) {\n subs.push(sub);\n }\n });\n }\n\n Object.assign(nextState, {\n onlineSubs: subs\n });\n\n if (topic.isSelfType()) {\n Object.assign(nextState, {\n title: nextProps.intl.formatMessage(messages.self_topic_name),\n avatar: true\n });\n } else if (topic.public) {\n Object.assign(nextState, {\n title: topicDisplayName(topic.name, topic.public, ''),\n avatar: makeImageUrl(topic.public.photo)\n });\n } else {\n Object.assign(nextState, {\n title: '',\n avatar: null\n });\n }\n\n const peer = topic.p2pPeerDesc();\n if (peer) {\n Object.assign(nextState, {\n peerMessagingDisabled: isPeerRestricted(peer.acs)\n });\n } else if (prevState.peerMessagingDisabled) {\n Object.assign(nextState, {\n peerMessagingDisabled: false\n });\n }\n Object.assign(nextState, {\n minSeqId: topic.minMsgSeq(),\n maxSeqId: topic.maxMsgSeq(),\n latestClearId: topic.maxClearId(),\n channel: topic.isChannelType(),\n pins: (topic.aux('pins') || []).slice(),\n pinsLoaded: false\n });\n\n if (nextProps.callTopic == topic.name && shouldPresentCallPanel(nextProps.callState)) {\n nextState.rtcPanel = nextProps.callTopic;\n }\n } else {\n // Invalid topic.\n Object.assign(nextState, {\n minSeqId: -1,\n maxSeqId: -1,\n latestClearId: -1,\n onlineSubs: [],\n title: '',\n avatar: null,\n peerMessagingDisabled: false,\n channel: false,\n pins: [],\n pinsLoaded: false\n });\n }\n } else {\n // We are still in same topic. Show the call panel if necessary.\n if (nextProps.callTopic == prevState.topic && !prevState.rtcPanel &&\n shouldPresentCallPanel(nextProps.callState)) {\n nextState.rtcPanel = nextProps.callTopic;\n }\n }\n\n if (nextProps.acs) {\n if (nextProps.acs.isWriter() != prevState.isWriter) {\n nextState.isWriter = !prevState.isWriter;\n }\n if (nextProps.acs.isReader() != prevState.isReader) {\n nextState.isReader = !prevState.isReader;\n }\n if (nextProps.acs.isAdmin() != prevState.isAdmin) {\n nextState.isAdmin = !prevState.isAdmin;\n }\n if (!nextProps.acs.isReader('given') != prevState.readingBlocked) {\n nextState.readingBlocked = !prevState.readingBlocked;\n }\n if (nextProps.acs.isSharer() != prevState.isSharer) {\n nextState.isSharer = !prevState.isSharer;\n }\n } else {\n if (prevState.isWriter) {\n nextState.isWriter = false;\n }\n if (prevState.isReader) {\n nextState.isReader = false;\n }\n if (prevState.isAdmin) {\n nextState.isAdmin = false;\n }\n if (!prevState.readingBlocked) {\n nextState.readingBlocked = true;\n }\n if (prevState.isSharer) {\n nextState.isSharer = false;\n }\n }\n\n if (isUnconfirmed(nextProps.acs) == !prevState.unconformed) {\n nextState.unconfirmed = !prevState.unconformed;\n }\n\n // Clear subscribers online when there is no connection.\n if (!nextProps.connected && prevState.onlineSubs && prevState.onlineSubs.length > 0) {\n nextState.onlineSubs = [];\n }\n\n return nextState;\n }\n\n subscribe(topic) {\n if (!this.props.ready) {\n return;\n }\n\n // Is this a new topic?\n const newTopic = (this.props.newTopicParams && this.props.newTopicParams._topicName == this.props.topic);\n // Don't request the tags. They are useless unless the user\n // is the owner and is editing the topic.\n let getQuery = topic.startMetaQuery().withLaterDesc().withLaterSub().withAux();\n if (this.state.isReader || newTopic) {\n // Reading is either permitted or we don't know because it's a new topic. Ask for messages.\n //\n // withData(undefined, undefined, MESSAGES_PAGE) instead of the seemingly-more-natural\n // withLaterData(MESSAGES_PAGE): the latter asks the server for \"whatever is newer than\n // topic._maxSeq\", which is only correct when _maxSeq reflects a real, contiguous, locally-cached\n // history. But tinode-web.jsx's prefetchLatestMessagePreviews() (conversation list \"last\n // message\" preview) may have already called topic.subscribe(startMetaQuery().withLaterData(1))\n // for this exact topic the moment the chat list rendered -- often *before* this view ever mounts,\n // e.g. the very first time a brand-new conversation is opened in a fresh session -- which sets\n // _maxSeq to that one prefetched message's seq without caching anything before it. From that\n // point on withLaterData(MESSAGES_PAGE) asks for \"later than the one message I already have\" and\n // gets back nothing: confirmed live, a brand-new 4-message P2P conversation opened this way\n // rendered only the single latest message, silently missing the rest of the history.\n // withData(undefined, undefined, limit) has no such since-cursor -- it always asks for \"the\n // latest `limit` messages\" regardless of what the client thinks it already has, which is\n // correct both in this poisoned-prefetch case and in the plain fresh-topic case (there\n // topic._maxSeq is 0, so withLaterData(limit) already degrades to the exact same\n // since:undefined query -- this is a strict fix, not a behavior change for the common path).\n getQuery = getQuery.withData(undefined, undefined, MESSAGES_PAGE);\n if (this.state.isReader) {\n getQuery = getQuery.withLaterDel();\n }\n // And show \"loading\" spinner.\n this.setState({ fetchingMessages: true });\n }\n\n const setQuery = newTopic ? this.props.newTopicParams : undefined;\n const doSubscribe = () => topic.subscribe(getQuery.build(), setQuery)\n .then(ctrl => {\n if (ctrl.code == 303) {\n // Redirect to another topic requested.\n HashNavigation.navigateTo(HashNavigation.setUrlTopic('', ctrl.params.topic));\n return;\n }\n if (this.state.topic != ctrl.topic) {\n this.setState({topic: ctrl.topic});\n }\n if (this.state.deleted) {\n this.setState({deleted: false});\n }\n this.props.onNewTopicCreated(this.props.topic, ctrl.topic);\n // If there are unsent messages (except hard-failed and video call messages),\n // try sending them now. Hard-failed and unsent video call messages will be dropped.\n let discard = [];\n topic.queuedMessages(pub => {\n if (pub._sending) {\n return;\n }\n if (pub._fatal || (pub.head && pub.head.webrtc)) {\n // Filter out unsent failed & video call messages.\n discard.push(pub.seq);\n return;\n }\n if (topic.isSubscribed()) {\n this.retrySend(pub);\n }\n });\n if (discard.length > 0) {\n topic.delMessagesList(discard, true);\n }\n })\n .catch(err => {\n console.error(\"Failed subscription to\", this.state.topic, err);\n this.props.onError(err.message, 'err');\n const blankState = MessagesView.getDerivedStateFromProps({}, {});\n blankState.title = this.props.intl.formatMessage(messages.not_found);\n this.setState(blankState);\n });\n\n if (topic.isSubscribed()) {\n // Same prefetch race as the comment on the data query above: the topic may already be\n // \"attached\" server-side from prefetchLatestMessagePreviews' single-message subscribe, before\n // this view ever asked for anything. The SDK's own Topic.subscribe() unconditionally\n // short-circuits to `Promise.resolve(this)` once `_attached` is true (tinode.dev.js)\n // *without even looking at the getParams passed in* -- calling topic.subscribe(getQuery...)\n // directly in that state would silently no-op and this view would never receive the real\n // history/pinned-messages/peer read-receipts it just asked for. leave(false) clears _attached\n // (both client-side via _resetSub() and server-side, since it's a real round trip) without\n // discarding already-cached messages (that only happens for leave(true), i.e. unsubscribe) --\n // once it resolves, the follow-up doSubscribe() is guaranteed to be a genuine, un-shortcut\n // subscribe that gets the server to actually answer getQuery instead of silently dropping it.\n topic.leave(false).catch(_ => { /* best-effort; doSubscribe() below still needs to run */ }).then(doSubscribe);\n return;\n }\n\n doSubscribe();\n }\n\n leave(oldTopicName) {\n if (!oldTopicName || !this.props.tinode.isTopicCached(oldTopicName)) {\n return;\n }\n\n const oldTopic = this.props.tinode.getTopic(oldTopicName);\n if (oldTopic && oldTopic.isSubscribed()) {\n oldTopic.leave(false)\n .catch(_ => { /* do nothing here */ })\n .finally(_ => {\n // We don't care if the request succeeded or failed.\n // The topic is dead regardless.\n this.setState({fetchingMessages: false});\n oldTopic.onData = undefined;\n oldTopic.onAllMessagesReceived = undefined;\n oldTopic.onInfo = undefined;\n oldTopic.onMetaDesc = undefined;\n oldTopic.onSubsUpdated = undefined;\n oldTopic.onPres = undefined;\n oldTopic.onAuxUpdated = undefined;\n });\n }\n }\n\n // Don't use React.createRef as the ref.current is not available in componentDidMount in this component.\n handleScrollReference(node) {\n if (node) {\n node.addEventListener('scroll', this.handleScrollEvent);\n this.messagesScroller = node;\n this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight -\n this.state.scrollPosition - this.messagesScroller.offsetHeight;\n }\n }\n\n // Get older messages and show/hide [go to latest message] button.\n handleScrollEvent(event) {\n const pos = event.target.scrollHeight - event.target.scrollTop - event.target.offsetHeight;\n this.setState({\n scrollPosition: pos,\n // Show [go to latest message] if far enough from bottom and scrolling down.\n showGoToLastButton: (pos > SHOW_GO_TO_LAST_DIST) && (pos < this.state.scrollPosition),\n });\n\n if (this.state.fetchingMessages || this.processingScrollEvent) {\n return;\n }\n\n if (event.target.scrollTop <= FETCH_PAGE_TRIGGER) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (topic && topic.isSubscribed()) {\n this.processingScrollEvent = true;\n const {min, max} = this.getVisibleMessageRange(event.target.getBoundingClientRect());\n const gaps = topic.msgHasMoreMessages(min, max, false);\n if (gaps.length > 0) {\n this.setState({fetchingMessages: true}, _ => {\n topic.getMessagesPage(MESSAGES_PAGE, gaps, min, max)\n .catch(err => this.props.onError(err.message, 'err'))\n .finally(_ => this.setState({fetchingMessages: false}));\n });\n }\n }\n }\n this.processingScrollEvent = false;\n }\n\n /* Mount drag and drop events */\n mountDnDEvents(dnd) {\n if (dnd) {\n dnd.addEventListener('dragstart', this.handleDragStart);\n dnd.addEventListener('dragenter', this.handleDragIn);\n dnd.addEventListener('dragleave', this.handleDragOut);\n dnd.addEventListener('dragover', this.handleDrag);\n dnd.addEventListener('drop', this.handleDrop);\n this.dndRef = dnd;\n }\n }\n\n goToLatestMessage() {\n this.setState({scrollPosition: 0});\n if (this.messagesScroller) {\n this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.messagesScroller.offsetHeight;\n }\n }\n\n handleDescChange(desc) {\n if (Tinode.isSelfTopicName(this.props.topic)) {\n this.setState({\n title: this.props.intl.formatMessage(messages.self_topic_name),\n avatar: true\n });\n } else if (desc.public) {\n this.setState({\n title: topicDisplayName(this.props.topic, desc.public, ''),\n avatar: makeImageUrl(desc.public.photo)\n });\n } else {\n this.setState({\n title: '',\n avatar: null\n });\n }\n\n if (desc.acs) {\n this.setState({\n isWriter: desc.acs.isWriter(),\n isReader: desc.acs.isReader(),\n isAdmin: desc.acs.isAdmin(),\n readingBlocked: !desc.acs.isReader('given'),\n unconfirmed: isUnconfirmed(desc.acs),\n });\n }\n }\n\n postReadNotification(seq) {\n // Ignore notifications if the app is invisible or topic is not yet available.\n if (!this.props.applicationVisible || !this.state.topic) {\n return;\n }\n\n // Set up the timer if it's not running already.\n if (!this.readNotificationTimer) {\n this.readNotificationTimer = setInterval(_ => {\n if (this.readNotificationQueue.length == 0) {\n // Shut down the timer if the queue is empty.\n clearInterval(this.readNotificationTimer);\n this.readNotificationTimer = null;\n return;\n }\n\n let seq = -1;\n while (this.readNotificationQueue.length > 0) {\n const n = this.readNotificationQueue[0];\n if (n.topicName != this.state.topic) {\n // Topic has changed. Drop the notification.\n this.readNotificationQueue.shift();\n continue;\n }\n\n const now = new Date();\n if (n.sendAt <= now) {\n // Remove expired notification from queue.\n this.readNotificationQueue.shift();\n if (n.seq == 0 || Tinode.isServerAssignedSeq(n.seq)) {\n seq = Math.max(seq, n.seq);\n }\n } else {\n break;\n }\n }\n\n // Send only one notification for the whole batch of messages.\n if (seq >= 0) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (topic) {\n try {\n topic.noteRead(seq);\n } catch (err) {\n console.error(\"Failed to send read notification\", err);\n }\n }\n }\n }, NOTIFICATION_EXEC_INTERVAL);\n }\n\n const now = new Date();\n this.readNotificationQueue.push({\n topicName: this.state.topic,\n seq: seq,\n sendAt: now.setMilliseconds(now.getMilliseconds() + READ_DELAY)\n });\n }\n\n // Clear notification queue and timer.\n clearNotificationQueue() {\n this.readNotificationQueue = [];\n if (this.readNotificationTimer) {\n clearInterval(this.readNotificationTimer);\n this.readNotificationTimer = null;\n }\n }\n\n handleSubsUpdated() {\n if (this.state.topic) {\n const subs = [];\n const topic = this.props.tinode.getTopic(this.state.topic);\n topic.subscribers(sub => {\n if (sub.online && sub.user != this.props.myUserId) {\n subs.push(sub);\n }\n });\n const newState = {onlineSubs: subs, subsVersion: this.state.subsVersion + 1};\n const peer = topic.p2pPeerDesc();\n if (peer) {\n Object.assign(newState, {\n peerMessagingDisabled: isPeerRestricted(peer.acs)\n });\n } else if (this.state.peerMessagingDisabled) {\n Object.assign(newState, {\n peerMessagingDisabled: false\n });\n }\n this.setState(newState);\n }\n }\n\n // The 'msg' could be false-ish if some message ranges were deleted.\n handleMessageUpdate(msg) {\n if (!this.state.topic) {\n return;\n }\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (!msg) {\n // msg could be null if one or more messages were deleted.\n // Updating state to force redraw.\n this.setState({latestClearId: topic.maxClearId()});\n return;\n }\n\n clearTimeout(this.keyPressTimer)\n this.setState({maxSeqId: topic.maxMsgSeq(), minSeqId: topic.minMsgSeq(), typingIndicator: false}, _ => {\n // Scroll to the bottom if the message is added to the end of the message\n // list if already at the bottom, otherwise show [go to latest] button.\n // Implemented as a callback to be sure the scroll height has been updated.\n if (topic.isNewMessage(msg.seq)) {\n if (this.state.scrollPosition > SHOW_GO_TO_LAST_DIST) {\n this.setState({showGoToLastButton: true});\n } else {\n this.goToLatestMessage();\n }\n } else {\n if (this.messagesScroller) {\n this.messagesScroller.scrollTop = this.messagesScroller.scrollHeight - this.state.scrollPosition -\n this.messagesScroller.offsetHeight;\n }\n }\n });\n\n // Aknowledge messages except own messages. They are\n // automatically assumed to be read and recived.\n const status = topic.msgStatus(msg, true);\n if (status >= Tinode.MESSAGE_STATUS_SENT && msg.from != this.props.myUserId) {\n this.postReadNotification(msg.seq);\n }\n }\n\n handleAllMessagesReceived(count) {\n this.setState({fetchingMessages: false});\n if (!count) {\n // All messages received. Nothing left to receive.\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (topic) {\n // Send read notification for the absolute last message.\n this.postReadNotification(topic.seq);\n }\n return;\n }\n\n // Load pinned message too (if any);\n if (!this.state.pinsLoaded) {\n // This needs to be guarded to avoid an infinite loop.\n // The loop may happen if some pinned messages are deleted.\n const topic = this.props.tinode.getTopic(this.state.topic);\n this.setState({pinsLoaded: true}, _ => {\n topic.getPinnedMessages();\n });\n } else {\n this.setState({pinsLoaded: false});\n }\n }\n\n handleAuxUpdate(aux) {\n const pins = (aux['pins'] || []).slice();\n let selectedPin = this.state.selectedPin;\n if (pins.length > this.state.pins.length) {\n // New pins added, show the latest.\n selectedPin = 0;\n } else if (selectedPin >= pins.length) {\n selectedPin = Math.max(0, pins.length - 1);\n }\n this.setState({pins: pins, selectedPin: selectedPin});\n }\n\n handleInfoReceipt(info) {\n switch (info.what) {\n case 'kp': {\n clearTimeout(this.keyPressTimer);\n this.keyPressTimer = setTimeout(_ => this.setState({typingIndicator: false}), KEYPRESS_DELAY + 1000);\n if (!this.state.typingIndicator) {\n this.setState({typingIndicator: true});\n }\n break;\n }\n case 'read':\n case 'recv':\n // Redraw due to changed recv/read status.\n this.forceUpdate();\n break;\n default:\n console.info(\"Other change in topic: \", info.what);\n }\n }\n\n handleExpandMedia(content) {\n if (!content) {\n return;\n }\n\n if (content.video) {\n this.setState({videoPostview: content});\n } else {\n this.setState({imagePostview: content});\n }\n }\n\n handleClosePreview() {\n if (this.state.imagePreview && this.state.imagePreview.url) {\n URL.revokeObjectURL(this.state.imagePreview.url);\n }\n if (this.state.videoPreview && this.state.videoPreview.url) {\n URL.revokeObjectURL(this.state.videoPreview.url);\n }\n this.setState({\n imagePostview: null,\n imagePreview: null,\n docPreview: null,\n videoPreview: null,\n videoPostview: null,\n });\n this.props.onCancelForwardMessage();\n }\n\n handleFormResponse(action, text, data) {\n if (action == 'pub') {\n this.sendMessage(Drafty.attachJSON(Drafty.parse(text), data));\n } else if (action == 'url') {\n const url = new URL(data.ref);\n const params = url.searchParams;\n for (let key in data.resp) {\n if (data.resp.hasOwnProperty(key)) {\n params.set(key, data.resp[key]);\n }\n }\n ['name', 'seq'].forEach(key => {\n if (data[key]) {\n params.set(key, data[key]);\n }\n });\n params.set('uid', this.props.myUserId);\n params.set('topic', this.state.topic);\n url.search = params;\n window.open(url, '_blank');\n } else {\n console.info(\"Unknown action in form\", action);\n }\n }\n\n handleContextClick(e) {\n e.preventDefault();\n e.stopPropagation();\n this.props.showContextMenu({ topicName: this.state.topic, y: e.pageY, x: e.pageX });\n }\n\n handleShowMessageContextMenu(params, messageSpecificMenuItems) {\n if (params.userFrom == 'chan') {\n params.userFrom = this.state.topic;\n params.userName = this.state.title;\n }\n params.topicName = this.state.topic;\n let menuItems = messageSpecificMenuItems || [];\n // Picking \"回复\" on some other message while already editing one (this.state.reply.editing)\n // silently abandons the edit: handlePickReply overwrites this.state.reply wholesale but never\n // touches contentToEdit, so the composer keeps showing the message being edited while the\n // header/send-icon quietly switch to reply mode -- sending then posts that text as a brand new\n // reply to the other message, and the original edit is lost with no confirmation. Simplest fix\n // is the same one already used for menu_item_edit's window check: just don't offer the option\n // that would cause it, rather than trying to reconcile the two states after the fact.\n if (this.state.reply && this.state.reply.editing) {\n menuItems = menuItems.filter(item => item !== 'menu_item_reply');\n }\n const topic = this.props.tinode.getTopic(params.topicName);\n if (topic) {\n // Edit (Ch.4): chat-message.jsx already gated 'menu_item_edit' on writer + non-attachment\n // content, but has no access to the server-configured edit window (that's session-level state\n // living here, not a per-message prop) -- unlike recall just below, this was never actually\n // filtered by age, so an edit attempt on a message well past the window would only fail at\n // send time instead of never showing the option. Same window-check shape as recall's, just\n // removing the item after the fact instead of adding it, since base eligibility already ran.\n const editWindow = this.state.messagePolicy ? this.state.messagePolicy.edit_window_seconds : 0;\n if (menuItems.includes('menu_item_edit') && !(editWindow > 0 && params.timestamp &&\n params.timestamp.getTime() > (new Date().getTime() - editWindow * 1000))) {\n menuItems = menuItems.filter(item => item !== 'menu_item_edit');\n }\n menuItems.push('menu_item_copy', 'menu_item_favorite');\n // Recall (Ch.4): own message, real seq, and still inside the server-configured window.\n // Distinct from delete -- see context-menu.jsx recallOwnMessage for why both exist.\n // A group admin/owner can also recall *other* members' messages within the same window --\n // server/im_http.go's serveIMMessageRecall calls authorizeIMMessageMutation with\n // allowAdmin=true, so the backend has always accepted this; the reference screenshot\n // (消息页面—长按弹出.png) lists \"群撤回\" as its own, always-shown menu item alongside \"撤回\" --\n // this was previously never offered at all since the only condition checked was authorship.\n //\n // `params.seq > 0` alone is not enough to mean \"a real, server-persisted message\": Tinode\n // SDK gives every message that hasn't been confirmed by the server yet (still sending, or\n // failed outright) a local placeholder seq of LOCAL_SEQID (0xFFFFFFF = 268435455) -- a large\n // *positive* number, so it passed this check. Round 11 live testing reproduced this: sending\n // a message into a since-blocked P2P topic left a bubble stuck in \"发送失败\" with seq\n // 268435455, and this menu still offered \"撤回\" for it -- clicking it fired\n // POST /topics/.../messages/268435455/recall, which the server correctly rejects (no such\n // message), surfacing a confusing \"请求内容有误,请稍后重试\" toast for an action that should\n // never have been offered. `seq < LOCAL_SEQID` excludes exactly that placeholder range,\n // matching the same bound the SDK itself uses internally to distinguish a confirmed seq from\n // a queued one.\n const recallWindow = this.state.messagePolicy ? this.state.messagePolicy.recall_window_seconds : 0;\n const canRecallAsAdmin = topic.isGroupType() && topic.getAccessMode() && topic.getAccessMode().isAdmin();\n if ((params.userFrom == this.props.myUserId || canRecallAsAdmin) && params.seq > 0 && params.seq < LOCAL_SEQID &&\n recallWindow > 0 && params.timestamp && params.timestamp.getTime() > (new Date().getTime() - recallWindow * 1000)) {\n menuItems.push('menu_item_recall');\n }\n // Self -> (1) always hard-delete with [Delete] title.\n // P2P -> (1) hard-delete if allowed and not too old, (2) always soft-delete.\n // Group -> (1) hard-delete if allowed and not too old or owner, (2) always soft-delete.\n if (topic.isSelfType()) {\n // Hard-delete with plain [Delete] title.\n menuItems.push('message_delete_generic');\n } else {\n if (!topic.isChannelType()) {\n // P2P or normal group: always allow to soft-delete.\n menuItems.push('message_delete');\n }\n\n const acs = topic.getAccessMode();\n if (acs && acs.isDeleter()) {\n // Owner can always hard-delete regardless of age.\n let canDelete = acs.isOwner();\n if (!canDelete) {\n // Not owner: check message age if configured on the server.\n const maxDelAge = this.props.tinode.getServerParam(Tinode.MSG_DELETE_AGE, 0) | 0;\n // Make sure the message is not too old. This check is here just to make the UI\n // more user-friendly. The server will enforce the limit regardless of this.\n canDelete = maxDelAge == 0 || (maxDelAge > 0 && params.timestamp ?\n params.timestamp.getTime() > (new Date().getTime() - maxDelAge * 1000) : false);\n }\n if (canDelete) {\n // [Delete for All] title.\n menuItems.push('message_delete_hard');\n }\n }\n }\n }\n menuItems.push('menu_item_select');\n this.props.showContextMenu(params, menuItems);\n }\n\n handleNewChatAcceptance(action) {\n this.props.onNewChat(this.state.topic, action);\n }\n\n handleEnablePeer(e) {\n e.preventDefault();\n this.props.onChangePermissions(this.state.topic, DEFAULT_P2P_ACCESS_MODE, this.state.topic);\n }\n\n // Fetch the real friend/block/pending relationship state for a 1:1 topic so the UI can explain\n // (instead of silently disabling) why sending is restricted. Best-effort: a failed fetch just\n // leaves relationshipContext null and the existing isWriter-based disable stays in effect.\n loadRelationshipContext(topic) {\n if (!topic || !topic.isP2PType()) {\n return;\n }\n const topicName = topic.name;\n getConversationContext(topicName).then(data => {\n if (this.state.topic != topicName) {\n return;\n }\n this.setState({relationshipContext: data});\n this.loadPendingRequestMessage(topicName, data);\n }).catch(_ => {});\n }\n\n // 个人对话框(对方的状态).png / (我的状态).png:pending_inbound/pending_outbound 关系下,聊天\n // 页顶部第一条应该是发起好友申请时留的验证留言原文,以真实消息气泡的样式渲染(对方发的居左、\n // 自己发的居右),下面再跟现有的 #relationship-status-note 横幅。这条留言从来不是一条真实的\n // Tinode 消息(没有走 topic.publish(),只存在 im_friend_requests 表的 message 字段里),所以\n // 不会自然出现在 messageNodes 里——relationshipContextPayload 已经带了 request_id,用它去\n // GET /friend-requests 换真实留言文本;找不到(比如留言本身是空的)就回退成参考图里的默认文案。\n loadPendingRequestMessage(topicName, ctx) {\n const relationship = ctx && ctx.relationship;\n if (relationship != 'pending_inbound' && relationship != 'pending_outbound') {\n this.setState({pendingRequestMessage: null});\n return;\n }\n if (!ctx.request_id) {\n this.setState({pendingRequestMessage: {text: '请求添加你为好友', response: relationship == 'pending_inbound', ts: null}});\n return;\n }\n const direction = relationship == 'pending_inbound' ? 'inbound' : 'outbound';\n getFriendRequests(direction, 'all').then(data => {\n if (this.state.topic != topicName) {\n return;\n }\n const match = (data.items || []).find(item => item.request_id == ctx.request_id);\n this.setState({pendingRequestMessage: {\n text: (match && match.message) || '请求添加你为好友',\n response: relationship == 'pending_inbound',\n ts: match ? new Date(match.created_at) : null\n }});\n }).catch(_ => {\n if (this.state.topic == topicName) {\n this.setState({pendingRequestMessage: {text: '请求添加你为好友', response: relationship == 'pending_inbound', ts: null}});\n }\n });\n }\n\n // Ch.6: role badges (docs/images/群标识.png) and the announcement/join-request banners at the top of a\n // group chat (docs/images/群公告状态.png, 新邀请进群申请.png) all need data no P2P topic has -- fetch it\n // once per group-topic-load, same best-effort pattern as loadRelationshipContext above. Every `topic`\n // field these Ch.6 endpoints return is a real grp-prefixed native Tinode name (verified against the Go\n // source), so there's no Ch.5-style translation needed anywhere here.\n loadGroupContext(topic) {\n if (!topic || !topic.isGroupType() || topic.isChannelType()) {\n return;\n }\n const topicName = topic.name;\n getGroupMembers(topicName).then(data => {\n if (this.state.topic != topicName) {\n return;\n }\n const roles = {};\n (data.items || []).forEach(m => { roles[m.user_id] = m.role; });\n this.setState({groupRoles: roles, myGroupRole: roles[this.props.myUserId] || null});\n // Pending join requests can only be resolved by an admin/owner -- only they can act on the banner,\n // and only they pass requireIMGroupMember's IsAdmin() check on the list endpoint itself.\n if (roles[this.props.myUserId] == 'owner' || roles[this.props.myUserId] == 'admin') {\n getGroupJoinRequests(topicName, 'pending').then(reqData => {\n if (this.state.topic == topicName) {\n this.setState({pendingJoinRequests: (reqData.items || []).length});\n }\n }).catch(_ => {});\n }\n }).catch(_ => {});\n getLatestGroupAnnouncement(topicName).then(data => {\n if (this.state.topic == topicName) {\n this.setState({groupAnnouncement: (data && data.content) ? data : null});\n }\n }).catch(_ => {});\n }\n\n // 4.2-4.3 @提醒:只对群话题开放(私聊提@没有意义,也没有可选的\"其他成员\")。返回给\n // send-message.jsx 的选择器渲染,真正的 uid 解析在 mentionSelected 里记下来,供发送时\n // applyMentionResolution 使用。\n mentionSearch(query) {\n const topic = this.props.tinode ? this.props.tinode.getTopic(this.state.topic) : null;\n if (!topic || !topic.isGroupType()) {\n return Promise.resolve([]);\n }\n return getGroupMembers(this.state.topic, {mentionable: true, query}).then(data => {\n const items = data.items || [];\n // \"所有人\" (参考图 @人员—选择提醒人.png 里排在真实成员最前面的合成选项) -- server/topic.go's\n // validateAndNormalizeMentions rejects head.mention_all from anyone who isn't admin\n // (ErrPermissionDenied), so this is only offered to accounts GET .../members already told us\n // can actually use it -- an ineligible account would otherwise see the option, pick it, and\n // have the server silently reject the send.\n const canMentionAll = !!(data.permissions && data.permissions.can_mention_all);\n if (canMentionAll && '所有人'.includes((query || '').trim())) {\n return [{user_id: MENTION_ALL_UID, display_name: '所有人'}, ...items];\n }\n return items;\n });\n }\n\n mentionSelected(uid, name) {\n if (uid === MENTION_ALL_UID) {\n // Not a real Drafty mention to resolve -- sendMessage below reads this flag directly to set\n // head.mention_all, independent of the this.mentionedUsers/applyMentionResolution machinery\n // single-person @提醒 uses. The \"@所有人\" text itself still gets auto-detected by Drafty.parse\n // into an ordinary (uid-less) MN entity and renders highlighted like any other mention --\n // that's just decorative here since the real \"notify everyone\" effect comes from the head flag.\n this.mentionAllPending = true;\n return;\n }\n this.mentionedUsers = (this.mentionedUsers || []).filter(m => m.name !== name);\n this.mentionedUsers.push({uid, name});\n }\n\n // 4.1 跨话题草稿:话题一切换就去问服务端这个会话有没有存过草稿。原生话题名(P2P 用对方\n // user_id)直接可用,接口内部自己会做订阅存在性校验,不需要额外归一化。\n loadDraft(topic) {\n if (!topic) {\n return;\n }\n const topicName = topic.name;\n getTopicDraft(topicName).then(data => {\n if (this.state.topic != topicName) {\n return;\n }\n this.setState({draftText: data.content || '', draftVersion: data.version || 0});\n }).catch(_ => {});\n }\n\n // 输入框每次变化都会调这个(不在这里节流——防抖延迟统一放这一处,跟日报/月报草稿已有的\n // 600ms 防抖是同一个数值,方便以后统一调整)。编辑已有消息、转发预填内容这两种情况下\n // SendMessage 的文本框也会触发 onChange,但那些不是\"新写的草稿\",不应该覆盖真正的草稿。\n //\n // 定时器按话题分开存(this.draftSaveTimers 是个 map),不能像原来那样用单个共享句柄——\n // 那样话题A打字触发的600ms保存,会在300ms后切到话题B打字时被 clearTimeout 直接取消掉,\n // A刚打的字就再也不会发给服务器了。\n //\n // version 在这里(调用的当下,this.state.topic 必然还是 topicName,因为 onMessageChange\n // 只有当前激活话题的 SendMessage 实例会触发)同步捕获进闭包,不能等定时器触发时才去读\n // this.state.draftVersion——那时用户很可能已经切到别的话题,届时重新读到的要么是无关话题\n // 的版本号,要么在判断不匹配时退化成硬编码的 0。后端 PUT .../draft 对 version=0 是\"无条件\n // 跳过乐观锁校验直接覆盖\"而不是\"仅当草稿真的不存在时才创建\"(见\n // docs/IM-后端问题清单-2026-09-04.md),这个 0 一旦被真的发出去,可能无声覆盖掉这段时间里\n // 别的标签页/设备写入的更新草稿。\n handleComposerChange(text) {\n if (this.state.reply && this.state.reply.editing) {\n return;\n }\n if (this.props.forwardMessage) {\n return;\n }\n const topicName = this.state.topic;\n if (!topicName) {\n return;\n }\n const version = this.state.draftVersion || 0;\n this.draftSaveTimers = this.draftSaveTimers || {};\n if (this.draftSaveTimers[topicName]) {\n window.clearTimeout(this.draftSaveTimers[topicName]);\n }\n this.draftSaveTimers[topicName] = window.setTimeout(() => {\n delete this.draftSaveTimers[topicName];\n updateTopicDraft(topicName, text, [], version).then(d => {\n if (this.state.topic == topicName) {\n this.setState({draftVersion: d.version});\n }\n }).catch(_ => {});\n }, 600);\n }\n\n // 消息真的发出去之后,把服务端存的草稿清空——不然重新打开这个会话会看到已经发送过的旧文字。\n // 单纯等下一次防抖自然把空字符串存上去也能达到同样效果,但那样在\"发送后立刻切走\"这个真实\n // 会发生的场景里会有一个几百毫秒的窗口,草稿还是旧内容,不如发送成功后立刻清。\n // knownVersion 由调用方(sendMessage)在发送发起的那一刻同步捕获传入,原因同上——避免在\n // 发送成功回调触发时(用户很可能已经切换话题)重新派生出不可靠的版本号。\n clearDraft(topicName, knownVersion) {\n if (this.draftSaveTimers && this.draftSaveTimers[topicName]) {\n window.clearTimeout(this.draftSaveTimers[topicName]);\n delete this.draftSaveTimers[topicName];\n }\n const version = knownVersion != null ? knownVersion :\n (this.state.topic == topicName) ? (this.state.draftVersion || 0) : 0;\n updateTopicDraft(topicName, '', [], version).then(d => {\n if (this.state.topic == topicName) {\n this.setState({draftText: '', draftVersion: d.version});\n }\n }).catch(_ => {});\n }\n\n // Note: setUrlSidePanel only overwrites path[0] -- called with window.location.hash while a topic is\n // open (path[1] is the open topic), it leaves that segment in place, producing e.g.\n // \"#group-announcement-detail/grpXXX?topic=grpXXX\". handleHashRoute then re-parses path[1] as a topic\n // selector on every hashchange, fighting with the sidepanel that's trying to open and leaving the\n // whole view blank. Build the target hash from an empty path instead of the current one.\n handleShowAnnouncement(e) {\n e.preventDefault();\n // `from=chat` lets Announcement (group-management-view.jsx) tell this entry point apart from\n // the one via group-settings -- both land on the identical path[0]/topic hash otherwise, so\n // without it the \"back\" button can't know whether to return to group-settings or to this chat.\n let hash = HashNavigation.addUrlParam(HashNavigation.setUrlSidePanel('', 'group-announcement-detail'), 'topic', this.state.topic);\n hash = HashNavigation.addUrlParam(hash, 'from', 'chat');\n HashNavigation.navigateTo(hash);\n }\n\n handleShowJoinRequests(e) {\n e.preventDefault();\n // `from=chat` mirrors handleShowAnnouncement above -- lets JoinRequests (group-management-view.jsx)\n // return to this chat instead of always landing on group-governance.\n let hash = HashNavigation.addUrlParam(HashNavigation.setUrlSidePanel('', 'group-join-requests'), 'topic', this.state.topic);\n hash = HashNavigation.addUrlParam(hash, 'from', 'chat');\n HashNavigation.navigateTo(hash);\n }\n\n handleSendFriendVerification(e) {\n e.preventDefault();\n // Same stray-path[1] hazard as handleShowAnnouncement above (build from an empty base, not the\n // current hash, since a topic is open) -- this one additionally never set `uid`, which the\n // friend-verification page needs (contact-management-view.jsx's Verification reads hashParams.uid)\n // to know who the verification is for; for a P2P topic that's simply the topic name itself.\n HashNavigation.navigateTo(HashNavigation.addUrlParam(\n HashNavigation.setUrlSidePanel('', 'friend-verification'), 'uid', this.state.topic));\n }\n\n // 6.3 加入群聊.png:被邀请人在跟邀请人的会话里收到一张\"邀请你加入群聊……立即加入\"的卡片。\n // 后端 serveIMGroupInvitations 确实往这个 P2P 会话发了一条 x-im-type=system_action、\n // template=group_invitation_created 的消息,content.actions 里带着真实的\n // {type:\"group_invitation_accept\", label:\"立即加入\", target_id:}——但\n // chat-message.jsx 原来对所有 system_action/system_notice 消息一律只取 content.text 渲染成\n // 纯文本,这个 action 数据被整体丢弃,卡片上不会出现任何按钮,被邀请人无法接受邀请。\n // acceptGroupInvitation() 这个封装早就在 im-api.js 里,只是从未有调用点。\n handleAcceptGroupInvitation(invitationId) {\n return acceptGroupInvitation(invitationId).then(result => {\n if (result && result.status == 'joined') {\n this.showToast('已加入群聊');\n } else if (result && result.status == 'pending_approval') {\n this.showToast('申请已提交,等待管理员通过');\n } else {\n this.showToast('已处理该邀请');\n }\n return result;\n }).catch(err => {\n this.showToast(err.message || '加入群聊失败,请重试');\n throw err;\n });\n }\n\n showToast(text) {\n this.setState({toast: text});\n window.clearTimeout(this.toastTimer);\n // Matches div.toast.show's own fadein(0.5s) + hold(2.5s) + fadeout(0.5s) animation length,\n // so the class is removed right as the CSS fadeout finishes instead of cutting it short.\n this.toastTimer = window.setTimeout(() => this.setState({toast: null}), 3500);\n }\n\n handleBatchDelete() {\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (!topic || !this.props.selectedSeqs.length) {\n return;\n }\n // A selected message may still be queued/uploading (no server-confirmed seq yet, same case\n // context-menu.jsx's single-message deleteMessages guards with cancelSend before falling\n // back to delMessagesList). delMessagesList's normalizeRanges silently drops local-only\n // seqs instead of cancelling them, so left unfiltered a still-uploading attachment would\n // survive \"delete\" and get sent normally once its upload finishes.\n const remaining = this.props.selectedSeqs.filter(seq => !topic.cancelSend(seq));\n if (!remaining.length) {\n this.props.onExitSelectMode();\n return;\n }\n topic.delMessagesList(remaining, true).then(_ => {\n this.props.onExitSelectMode();\n }).catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n // Per docs/images/多选-选中对话内容-收藏成功.png the selection stays visible behind the toast --\n // unlike delete, favoriting doesn't remove the messages, so there's no reason to exit select mode.\n handleBatchFavorite() {\n if (!this.props.selectedSeqs.length) {\n return;\n }\n const topicName = this.state.topic;\n const seqs = this.props.selectedSeqs.slice();\n favoriteMessages(seqs.map(seq => ({topic: topicName, seq}))).then(() => {\n // `result.failed` can't be trusted here: the batch-create endpoint reuses one request-level\n // Idempotency-Key across every message in the batch (docs/IM-后端问题清单-2026-09-04.md,\n // 新增1), so every item after the first silently no-ops via ON DUPLICATE KEY UPDATE and gets\n // folded into `existing_count` -- indistinguishable, from this response alone, from a message\n // that really was already favorited. Re-reading the actual favorites list and checking which\n // of the messages we just asked for really landed sidesteps that ambiguity entirely.\n return getFavorites({type: 'all', limit: 100}).then(data => {\n const items = (data && data.items) || [];\n const landed = new Set(items\n .filter(it => it.source && it.source.topic == topicName)\n .map(it => String(it.source.seq)));\n const missing = seqs.filter(seq => !landed.has(String(seq)));\n if (missing.length === seqs.length) {\n this.props.onError('收藏失败', 'err');\n } else if (missing.length) {\n this.showToast(`已收藏 ${seqs.length - missing.length}/${seqs.length} 条`);\n } else {\n this.showToast('收藏成功');\n }\n });\n }).catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n sendKeyPress(audio) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n if (!topic.isSubscribed()) {\n return;\n }\n if (audio) {\n // Doc's default for the \"user is recording voice\" indicator is OFF unless product opts in\n // (a non-persisted {note what:\"kpa\"} broadcast to every other group member) -- this was firing\n // unconditionally on every recording, contradicting that documented default. No product signal\n // to turn it on yet, so this is a deliberate no-op rather than a removed feature: re-enable by\n // restoring `topic.noteRecording(true);` here if/when that's confirmed wanted.\n return;\n }\n topic.noteKeyPress();\n }\n\n // sendMessage sends the message with an optional subscription to topic first.\n // typeHint (Ch.7): the backend's imMessageType() classifier -- which drives every type-filtered list\n // in this chapter (favorites tabs, chat-history search/media tabs) -- only recognizes a flat\n // content.file_id/content.url key or an explicit head['x-im-type'] hint; it never walks a real\n // Drafty entity array. Since every attachment this app actually sends uses the standard ent[]\n // format (Drafty.attachFile/insertImage/insertVideo), none of them carry a flat file_id, so without\n // this hint every image/video/file/voice message silently classifies as plain \"text\" server-side.\n // Mutates a parsed Drafty document in place, upgrading any auto-detected \"@name\" MN entity whose\n // raw matched text equals a name the user actually picked from the mention dropdown into a real,\n // uid-bearing mention. Entities that don't match anything tracked (a literal \"@word\" the user just\n // typed, or an edited/mismatched name) are left with their raw text value -- Tinode's own renderer\n // already falls back to displaying that gracefully, this only upgrades the ones it safely can.\n applyMentionResolution(parsed) {\n if (!parsed || !Array.isArray(parsed.ent) || !this.mentionedUsers || !this.mentionedUsers.length) {\n return;\n }\n parsed.ent.forEach(e => {\n if (e.tp === 'MN' && e.data && typeof e.data.val === 'string') {\n const match = this.mentionedUsers.find(m => m.name === e.data.val);\n if (match) {\n e.data.val = match.uid;\n }\n }\n });\n }\n\n sendMessage(msg, uploadCompletionPromise, uploader, typeHint) {\n // Captured before the reply/edit branches below possibly rewrite `msg` into a Drafty object\n // (Drafty.append(...) for a reply-with-quote) -- the URL risk check further down keys off\n // `typeof msg == 'string'`, so without this a plain-text reply containing a link would silently\n // skip the check entirely (a fresh, non-reply message with the same text does get checked).\n const originalText = typeof msg === 'string' ? msg : null;\n let head;\n if (!msg && this.props.forwardMessage) {\n // We are forwarding a message.\n msg = this.props.forwardMessage.msg;\n head = this.props.forwardMessage.head;\n } else if (this.state.reply) {\n if (this.state.reply.editing) {\n if (msg == this.state.contentToEdit) {\n // Message unchanged.\n this.handleCancelReply();\n return;\n }\n // Editing an existing message.\n head = {replace: ':' + this.state.reply.seq};\n } else if (this.state.reply.content) {\n // Replying to a message in this topic.\n // Turn it into Drafty so we can make a quoted Drafty object later.\n head = {reply: '' + this.state.reply.seq};\n if (typeof msg == 'string') {\n msg = Drafty.parse(msg);\n this.applyMentionResolution(msg);\n }\n // Both tinode.dev.js helpers below mutate their first argument in place and return that\n // same reference (Drafty.sanitizeEntities: `return content` after patching content.ent[i]\n // itself; Drafty.append: `first.txt += ...`, `first.fmt.push(...)`, then `return first`) --\n // neither ever clones. Passing `this.state.reply.content` straight through used to hand this\n // live React-state object to both, so every call here permanently welded whatever `msg` this\n // particular attempt carried onto the quoted content the *reply itself* points to. Invisible\n // on an ordinary send since handleCancelReply() clears state.reply right after, discarding the\n // now-mutated copy along with it -- but the URL risk dialog above defers doSend (and this\n // append) until *after* the check resolves, and cancelling it deliberately leaves state.reply\n // alone so the reply survives (see doSend's own comment). Confirmed live: reply to a message,\n // type a flagged link, send, click \"取消发送\", send the exact same text again, confirm through\n // the dialog this time -- the composed message quoted the reply once but then repeated the\n // typed text twice, because the first (cancelled) attempt had already appended it into\n // state.reply.content, and the second attempt appended onto *that*. A deep clone here keeps\n // both helpers' in-place mutations confined to a throwaway copy every time, however many times\n // sendMessage runs for the same still-open reply.\n const replyContentCopy = JSON.parse(JSON.stringify(this.state.reply.content));\n msg = Drafty.append(Drafty.sanitizeEntities(replyContentCopy), msg);\n }\n } else if (typeof msg == 'string' && this.mentionedUsers && this.mentionedUsers.length) {\n // 4.2-4.3 @提醒:Drafty.parse 本来就会把纯文本里的\"@word\"自动识别成 MN 实体,但\n // data.val 存的是匹配到的原始文字(tinode.dev.js 的 ENTITY_TYPES 表,pack: val =>\n // ({val: val.slice(1)})),不是 uid——那是纯文本解析器,不可能凭空知道 uid。真正的 uid\n // 只在用户从选择器里点选时才知道,记在 this.mentionedUsers 里;这里按显示名回填,把\n // 自动识别出的占位符换成真的 uid。没有任何选过的提醒时完全不碰 msg,维持字符串原样,\n // 交给 SDK 自己在更底层 parse(跟这次改动之前完全一样的行为,不引入任何差异)。\n const parsed = Drafty.parse(msg);\n this.applyMentionResolution(parsed);\n msg = parsed;\n }\n // Was only cleared on topic switch -- picking someone from the @提醒 picker once left them\n // resolvable for every later message in the same topic too, so literal text \"@张三\" typed by\n // hand, pasted, or quoted from someone else in a LATER, unrelated message would silently turn\n // into a real mention of whoever was last picked under that name. A retry of a failed send\n // (retrySend) reuses the already-resolved Drafty content stored on the failed pub, not this\n // array, so clearing it here doesn't affect retries.\n this.mentionedUsers = [];\n if (this.mentionAllPending) {\n // server/topic.go's validateAndNormalizeMentions reads head.mention_all directly -- it's a\n // separate signal from the Drafty MN entity the \"@所有人\" text itself auto-parses into (that\n // entity has no real uid and is purely decorative here, same as any other unresolved mention).\n // Reset immediately after reading, same lifecycle as this.mentionedUsers just above -- a\n // \"所有人\" pick should only apply to the one message being sent right now, not linger into\n // later ones in the same topic.\n head = {...(head || {}), mention_all: true};\n this.mentionAllPending = false;\n }\n if (typeHint) {\n head = {...(head || {}), 'x-im-type': typeHint};\n }\n\n const topicForDraft = this.state.topic;\n // Captured now, not re-read inside the .then() below -- by the time send actually resolves\n // the user may have switched topics, and clearDraft falling back to a hardcoded 0 runs into\n // the same backend version=0-skips-the-lock issue explained in handleComposerChange above.\n const draftVersionAtSend = this.state.draftVersion || 0;\n const doSend = () => {\n // Was called eagerly above (right after building `msg`/`head` from `this.state.reply`/\n // `this.props.forwardMessage`), synchronously and unconditionally -- including on a message\n // that turns out to need the URL risk dialog below, which only resolves *after* this function\n // already returned. That meant clicking send on a reply/edit containing a link made the\n // \"回复\"/编辑 preview bar vanish immediately, before the user had even seen the risk prompt;\n // clicking \"取消发送\" then left the reply/edit permanently abandoned -- the quoted message was\n // gone from the composer with no way back except manually replying again, even though the user\n // only meant to cancel sending the flagged text, not the reply itself. Moving the call here\n // means it only fires at the point a send is actually going to happen: immediately for the\n // common non-URL case (this function runs synchronously right away, same timing as before),\n // or deferred until \"继续发送\" for a flagged one -- and never at all if the dialog is cancelled,\n // so the reply/edit state and its preview bar correctly survive a cancelled risk prompt.\n this.handleCancelReply();\n const result = this.props.sendMessage(msg, uploadCompletionPromise, uploader, head);\n // Only a plain-text compose (not a reply/edit/forward, all of which pass a Drafty object or\n // reuse contentToEdit rather than the persisted draft) has a server-side draft worth clearing.\n if (originalText != null && result && typeof result.then == 'function' && topicForDraft) {\n result.then(() => this.clearDraft(topicForDraft, draftVersionAtSend));\n }\n return result;\n };\n\n // Pre-send URL risk check (POST /security/urls/check) -- the only Ch.11 \"anti-fraud\" mechanism\n // with a real backend behind it. Only plain-text composed messages are checked (not forwards,\n // uploads, or already-Drafty content) since that's the one path a URL could plausibly be typed in.\n // Returns a promise resolving to `false` when the message was NOT sent (blocked/cancelled) so\n // send-message.jsx can leave the composer text intact instead of optimistically clearing it --\n // without this, a blocked message's text would just vanish with no failed-message trace to retry.\n // Was missing the `g` flag -- .match() without it only ever returns the FIRST url in the message,\n // so a second url (e.g. the phishing link in \"看这个 https://safe.example.com 但是别信这个\n // https://phish.example.com/login?token=abc\") never got checked at all as long as the first one\n // came back `allow`. Check every distinct url in the message and act on the riskiest verdict.\n const urlMatches = originalText && originalText.match(/https?:\\/\\/\\S+/g);\n if (urlMatches) {\n const RISK_RANK = {block: 2, warn: 1, allow: 0};\n const urls = Array.from(new Set(urlMatches));\n return Promise.all(urls.map(url => checkURL(url, 'message_compose'))).then(results => {\n // The user may have already switched to a different conversation while checkURL was\n // still in flight. getDerivedStateFromProps only protects against an ALREADY-shown\n // dialog surviving a later topic switch (it nulls riskDialog when nextProps.topic !=\n // prevState.topic) -- it can't protect against this .then() running AFTER that switch,\n // which would otherwise setState({riskDialog:{...}}) fresh right here, popping the risk\n // dialog up while a completely different conversation is now open. doSend() still calls\n // this.props.sendMessage using whatever topic is current AT CONFIRM TIME (see doSend's\n // own comment above), not the one this message was actually typed in, so confirming that\n // dialog would silently deliver this message into the wrong conversation. Confirmed live:\n // typed a flagged URL in topic A, switched to topic B before checkURL resolved, and the\n // resulting dialog rendered while viewing topic B -- confirming it delivered topic A's\n // message into topic B instead. If the topic has moved on, treat this message the same\n // as if it were abandoned -- no dialog, no send -- the same \"lost, but not hung forever\"\n // outcome already accepted just below for two flagged messages sent in quick succession.\n if (this.state.topic !== topicForDraft) {\n return false;\n }\n const result = results.reduce((worst, r) => (RISK_RANK[r.decision] || 0) > (RISK_RANK[worst.decision] || 0) ? r : worst);\n if (result.decision === 'allow') {\n return doSend();\n }\n return new Promise(resolve => {\n // riskDialog is a single slot -- if an earlier risk check is still awaiting the user's\n // decision (two messages sent in quick succession, both flagged), overwriting it here\n // would leave that first promise permanently unresolved and its message silently dropped\n // with send-message.jsx never told to stop holding it as unsent. Resolving it `false` first\n // means it's treated the same as the user cancelling it -- lost, but not hung forever.\n if (this.state.riskDialog) this.state.riskDialog.resolve(false);\n this.setState({riskDialog: {blocked: result.decision === 'block', challengeId: result.risk_challenge_id, send: doSend, resolve}});\n });\n }).catch(_ => doSend()); // Don't let a risk-check failure block sending altogether.\n }\n\n return doSend();\n }\n\n handleRiskConfirm() {\n const dialog = this.state.riskDialog;\n if (!dialog) return;\n this.setState({riskDialog: null});\n const finish = () => dialog.resolve(dialog.send());\n if (dialog.challengeId) {\n confirmRiskChallenge(dialog.challengeId, 'continue').then(finish).catch(finish);\n } else {\n finish();\n }\n }\n\n handleRiskCancel() {\n const dialog = this.state.riskDialog;\n if (!dialog) return;\n this.setState({riskDialog: null});\n if (dialog.challengeId && !dialog.blocked) {\n confirmRiskChallenge(dialog.challengeId, 'cancel').catch(_ => {});\n }\n dialog.resolve(false);\n }\n\n // Retry sending a message.\n retrySend(pub) {\n this.props.sendMessage(pub.content, undefined, undefined, pub.head)\n .then(_ => {\n // All good. Remove the original message draft from the cache.\n const topic = this.props.tinode.getTopic(this.state.topic);\n topic.delMessagesList([pub.seq], true);\n });\n }\n\n // sendFileAttachment sends the file as Drafty message:\n // - if file is too large, upload it and send a s link.\n // - if file is small enough, just send it in-band.\n sendFileAttachment(file) {\n // Server-provided limit reduced for base64 encoding and overhead.\n const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize',\n MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0;\n\n if (TheCard.isFileSupported(file.type, file.name) || file.type == TheCard.contentType) {\n // This is a vCard file, try to convert and send as TheCard.\n if (this.sendTheCardAttachment(file, maxInbandAttachmentSize)) {\n // Successfully sent as TheCard.\n return;\n }\n // Sending as TheCard failed, fall through to sending as generic file attachment.\n }\n\n // If the attachment is a JSON file, then use 'application/octet-stream' instead of 'application/json'.\n // This is a temporary workaround for the collision with the 'application/json' MIME type of form responses.\n // Remove this code in 2026 or so.\n const jsonMimeConverter = (fileType) => fileType === DRAFTY_FR_MIME_TYPE_LEGACY ? 'application/octet-stream' : fileType;\n\n if (file.size > maxInbandAttachmentSize) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = createChatUploader(this.props.tinode);\n if (!uploader) {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n return;\n }\n const uploadCompletionPromise = uploader.upload(file);\n const msg = Drafty.attachFile(null, {\n mime: jsonMimeConverter(file.type),\n filename: file.name,\n size: file.size,\n urlPromise: uploadCompletionPromise\n });\n // Pass data and the uploader to the TinodeWeb.\n this.sendMessage(msg, uploadCompletionPromise, uploader, 'file');\n } else {\n // Small enough to send inband.\n fileToBase64(file)\n .then(b64 => this.sendMessage(Drafty.attachFile(null, {\n mime: jsonMimeConverter(b64.mime),\n data: b64.bits,\n filename: b64.name,\n size: file.size\n }), undefined, undefined, 'file'))\n .catch(err => this.props.onError(err.message, 'err'));\n }\n }\n\n // Convert attached vCard to TheCard and send.\n sendTheCardAttachment(file, maxInbandAttachmentSize) {\n if (file.size > maxInbandAttachmentSize) {\n // Cannot convert to TheCard, send as a generic file attachment instead.\n return false;\n }\n\n if (file.type == TheCard.contentType) {\n // Already TheCard, no need to convert.\n this.sendMessage(Drafty.appendTheCard(null, file.object));\n return true;\n }\n\n importVCard(file)\n .then(card => {\n this.sendMessage(Drafty.appendTheCard(null, card));\n })\n .catch(err => {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_parse_vcard, {error: err.message}), 'err');\n });\n return true;\n }\n\n // handleAttachFile method is called when [Attach file] button is clicked: launch attachment preview.\n handleAttachFile(file) {\n const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', MAX_EXTERN_ATTACHMENT_SIZE);\n\n if (file.size > maxExternAttachmentSize) {\n // Too large.\n this.props.onError(this.props.intl.formatMessage(messages.file_attachment_too_large,\n {size: bytesToHumanSize(file.size), limit: bytesToHumanSize(maxExternAttachmentSize)}), 'err');\n } else {\n this.setState({\n docPreview: {\n file: file,\n name: file.name,\n size: file.size,\n type: file.type\n }\n });\n }\n }\n\n handleCallHangup(topic, seq) {\n this.props.onVideoCallClosed();\n this.setState({\n rtcPanel: null\n });\n this.props.onCallHangup(topic, seq);\n }\n\n handleCallPanelToggle() {\n this.setState({minimizedCallPanel: !this.state.minimizedCallPanel});\n }\n\n // sendImageAttachment sends the image bits as Drafty message.\n sendImageAttachment(caption, blob) {\n const mime = this.state.imagePreview.mime;\n const width = this.state.imagePreview.width;\n const height = this.state.imagePreview.height;\n const fname = this.state.imagePreview.filename;\n\n // Server-provided limit reduced for base64 encoding and overhead.\n const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize',\n MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0;\n\n if (blob.size > maxInbandAttachmentSize) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = createChatUploader(this.props.tinode);\n if (!uploader) {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n return;\n }\n const uploadCompletionPromise = uploader.upload(blob);\n\n // Make small preview to show while uploading.\n imageScaled(blob, IMAGE_PREVIEW_DIM, IMAGE_PREVIEW_DIM, -1, false)\n // Convert tiny image into base64 for serialization and previewing.\n .then(scaled => blobToBase64(scaled.blob))\n .then(b64 => {\n let msg = Drafty.insertImage(null, 0, {\n mime: mime,\n _tempPreview: b64.bits, // This preview will not be serialized.\n bits: b64.bits, // Image thumbnail.\n width: width,\n height: height,\n filename: fname,\n size: blob.size,\n urlPromise: uploadCompletionPromise\n });\n if (caption) {\n msg = Drafty.appendLineBreak(msg);\n msg = Drafty.append(msg, Drafty.parse(caption));\n }\n // Pass data and the uploader to the TinodeWeb.\n this.sendMessage(msg, uploadCompletionPromise, uploader, 'image');\n })\n .catch(err => this.props.onError(err, 'err'));\n return;\n }\n\n // Send the image inband if it's not too big. The image has been scaled already\n // in image preview.\n blobToBase64(blob)\n .then(b64 => {\n let msg = Drafty.insertImage(null, 0, {\n mime: b64.mime,\n bits: b64.bits,\n width: width,\n height: height,\n filename: fname,\n size: blob.size\n });\n if (caption) {\n msg = Drafty.appendLineBreak(msg);\n msg = Drafty.append(msg, Drafty.parse(caption));\n }\n this.sendMessage(msg, undefined, undefined, 'image');\n });\n }\n\n // sendVideoAttachment sends the video bits as Drafty message.\n sendVideoAttachment(caption, videoBlob, previewBlob, params) {\n const width = params.width;\n const height = params.height;\n\n // Server-provided limit reduced for base64 encoding and overhead.\n const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize',\n MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0;\n\n const uploads = [];\n let uploader;\n if ((videoBlob.size + previewBlob.size) > maxInbandAttachmentSize) {\n // One or both are too large to send inband. Uploading out of band and sending as a link.\n uploader = createChatUploader(this.props.tinode);\n if (!uploader) {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n return;\n }\n\n uploads[0] = videoBlob.size > maxInbandAttachmentSize * 0.675 ? uploader.upload(videoBlob) : null;\n uploads[1] = previewBlob.size > maxInbandAttachmentSize * 0.275 ? uploader.upload(previewBlob) : null;\n }\n\n if (uploads.length == 0) {\n // Both video and preview are small enough to send inband.\n Promise.all([blobToBase64(videoBlob), blobToBase64(previewBlob)])\n .then(b64s => {\n const [v64, i64] = b64s;\n let msg = Drafty.insertVideo(null, 0, {\n mime: v64.mime,\n bits: v64.bits,\n preview: i64.bits,\n premime: i64.mime,\n width: width,\n height: height,\n duration: params.duration,\n filename: params.name,\n size: videoBlob.size\n });\n if (caption) {\n msg = Drafty.appendLineBreak(msg);\n msg = Drafty.append(msg, Drafty.parse(caption));\n }\n this.sendMessage(msg, undefined, undefined, 'video');\n });\n return;\n }\n\n const uploadCompletionPromise = Promise.all(uploads);\n\n const b64conv = [];\n // Small video converted to base64.\n b64conv[0] = uploads[0] ? null : blobToBase64(videoBlob);\n // Full-size preview fits inline.\n b64conv[1] = uploads[1] ? null : imageScaled(previewBlob, MAX_IMAGE_DIM, MAX_IMAGE_DIM, -1, false)\n .then(scaled => blobToBase64(scaled.blob));\n // Small preview to show while uploading.\n b64conv[2] = imageScaled(previewBlob, VIDEO_PREVIEW_DIM, VIDEO_PREVIEW_DIM, -1, false)\n .then(scaled => blobToBase64(scaled.blob));\n // Convert tiny image into base64 for serialization and previewing.\n Promise.all(b64conv)\n .then(b64s => {\n const [video, img, preview] = b64s;\n let msg = Drafty.insertVideo(null, 0, {\n mime: params.mime,\n bits: video ? video.bits : null,\n _tempPreview: preview.bits,\n preview: img ? img.bits : preview.bits,\n premime: img ? img.mime : preview.mime,\n width: width,\n height: height,\n duration: params.duration,\n filename: params.name,\n size: videoBlob.size,\n urlPromise: uploadCompletionPromise\n });\n\n if (caption) {\n msg = Drafty.appendLineBreak(msg);\n msg = Drafty.append(msg, Drafty.parse(caption));\n }\n // Pass data and the uploader to the TinodeWeb.\n this.sendMessage(msg, uploadCompletionPromise, uploader, 'video');\n })\n .catch(err => this.props.onError(err.message, 'err'));\n }\n\n // handleAttachImageOrVideo method is called when [Attach image or video] button is clicked: launch image or video preview.\n handleAttachImageOrVideo(file) {\n const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', MAX_EXTERN_ATTACHMENT_SIZE);\n\n if (file.type.startsWith('video/')) {\n this.setState({videoPreview: {\n url: URL.createObjectURL(file),\n blob: file,\n filename: file.name,\n size: file.size,\n mime: file.type\n }});\n return;\n }\n\n // Get image dimensions and size, optionally scale it down.\n imageScaled(file, MAX_IMAGE_DIM, MAX_IMAGE_DIM, maxExternAttachmentSize, false)\n .then(scaled => {\n this.setState({imagePreview: {\n url: URL.createObjectURL(scaled.blob),\n blob: scaled.blob,\n filename: scaled.name,\n width: scaled.width,\n height: scaled.height,\n size: scaled.blob.size,\n mime: scaled.mime\n }});\n }).catch(err => {\n this.props.onError(err.message, 'err');\n });\n }\n\n // handleFileDrop is called when the user drags & drops a file upon the message view.\n handleFileDrop(files) {\n if (!files || files.length == 0) {\n return;\n }\n const file = files[0];\n if (file.type && file.type.startsWith('image/')) {\n this.handleAttachImageOrVideo(file);\n } else {\n this.handleAttachFile(file);\n }\n }\n\n // sendAudioAttachment sends audio bits inband as Drafty message (no preview).\n sendAudioAttachment(url, preview, duration) {\n fetch(url)\n .then(result => result.blob())\n .then(blob => {\n // Server-provided limit reduced for base64 encoding and overhead.\n const maxInbandAttachmentSize = this.props.tinode.getServerParam('maxMessageSize', MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024;\n if (blob.size > maxInbandAttachmentSize) {\n // Too large to send inband - uploading out of band and sending as a link.\n const uploader = createChatUploader(this.props.tinode);\n if (!uploader) {\n this.props.onError(this.props.intl.formatMessage(messages.cannot_initiate_upload));\n return;\n }\n const uploadCompletionPromise = uploader.upload(blob);\n const msg = Drafty.appendAudio(null, {\n mime: blob.type,\n size: blob.size,\n duration: duration,\n preview: preview,\n urlPromise: uploadCompletionPromise\n });\n // Pass data and the uploader to the TinodeWeb.\n this.sendMessage(msg, uploadCompletionPromise, uploader, 'voice');\n } else {\n // Small enough to send inband.\n blobToBase64(blob)\n .then(b64 => {\n this.sendMessage(Drafty.appendAudio(null, {\n mime: b64.mime,\n bits: b64.bits,\n size: blob.size,\n duration: duration,\n preview: preview,\n }), undefined, undefined, 'voice')\n })\n }\n })\n .catch(err => {this.props.onError(err.message, 'err')});;\n }\n\n handleCancelUpload(seq, uploader) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n const found = topic.findMessage(seq);\n if (found) {\n found._cancelled = true;\n }\n uploader.cancel();\n }\n\n // seq: seq ID of the source message\n // context: message content.\n // senderId: UID of the sender of the source message.\n // senderName: full name of the sender of the original message.\n handlePickReply(seq, content, senderId, senderName) {\n if (!seq || !content) {\n this.setState({reply: null});\n return;\n }\n\n content = typeof content == 'string' ? Drafty.init(content) : content;\n if (Drafty.isValid(content)) {\n content = Drafty.replyContent(content, QUOTED_REPLY_LENGTH);\n } else {\n // /!\\ invalid content.\n content = Drafty.append(Drafty.init('\\u26A0 '),\n Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));\n }\n\n this.setState({\n reply: {\n content: Drafty.quote(senderName, senderId, content),\n seq: seq\n }\n });\n this.props.onCancelForwardMessage();\n }\n\n // seq: seq ID of the message to edit.\n // context: message content.\n handleEditMessage(seq, content) {\n if (!seq || !content) {\n this.setState({reply: null});\n return;\n }\n\n content = typeof content == 'string' ? Drafty.init(content) : content;\n const editable = Drafty.toMarkdown(content);\n if (Drafty.isValid(content)) {\n content = Drafty.replyContent(content, EDIT_PREVIEW_LENGTH);\n } else {\n // /!\\ invalid content.\n content = Drafty.append(Drafty.init('\\u26A0 '),\n Drafty.wrapInto(this.props.intl.formatMessage(messages.invalid_content), 'EM'));\n }\n\n this.setState({\n reply: {\n content: Drafty.quote(this.props.intl.formatMessage(messages.editing_message), null, content),\n seq: seq,\n editing: true\n },\n contentToEdit: editable\n });\n this.props.onCancelForwardMessage();\n }\n\n\n handleCancelReply() {\n this.setState({reply: null, contentToEdit: null});\n this.props.onCancelForwardMessage();\n }\n\n handleQuoteClick(replyToSeq) {\n const ref = this.getOrCreateMessageRef(replyToSeq);\n if (ref && ref.current) {\n ref.current.scrollIntoView({block: \"center\", behavior: \"smooth\"});\n ref.current.classList.add('flash');\n setTimeout(_ => {ref.current.classList.remove('flash')} , 1000);\n } else {\n // Most commonly hit when the target message was deleted/recalled after being found by\n // Ch.7 chat-history search but before this click -- never gets a ref\n // (see jumpToMessage below), so without this the click did nothing visible at all.\n console.error(\"Unresolved message ref\", replyToSeq);\n if (this.props.onError) {\n this.props.onError('该消息已被删除或撤回', 'err');\n }\n }\n }\n\n // Ch.7 chat-history search result -> jump to the message in the real conversation. handleQuoteClick\n // only scrolls to a message already present in this topic's locally-cached message list (used\n // elsewhere for quoted-reply/pinned-message jumps, where that's always true); a search result can\n // point at a message far outside whatever window happens to be loaded, so fetch a window around it\n // first via the native SDK (not the REST search API -- handleQuoteClick reads refs off the SDK's own\n // local topic cache, so the data has to land there, which only getMeta does).\n jumpToMessage(seq) {\n const topic = this.props.tinode && this.props.topic ? this.props.tinode.getTopic(this.props.topic) : null;\n if (!topic || !seq || isNaN(seq)) {\n return;\n }\n HashNavigation.navigateTo(HashNavigation.removeUrlParam(window.location.hash, 'jumpseq'));\n const jump = () => window.setTimeout(() => this.handleQuoteClick(seq), 150);\n if (topic.findMessage(seq)) {\n jump();\n } else {\n topic.getMeta(topic.startMetaQuery().withData(Math.max(1, seq - 20), seq + 21, 41).build())\n .then(jump).catch(err => this.props.onError(err.message, 'err'));\n }\n }\n\n handleUnpinMessage(seq) {\n const topic = this.props.tinode.getTopic(this.state.topic);\n topic.pinMessage(seq, false);\n }\n\n isDragEnabled() {\n // Same editing-state guard as the attach-panel props in render() (see the `editingMessage`\n // local there) -- drag&drop is a second, independent path into handleFileDrop below, which\n // calls handleAttachImageOrVideo/handleAttachFile directly rather than through those props, so\n // gating only the props left this route as a full bypass of that guard: dropping a file while\n // editing a message (without touching the \"+\" button at all) still replaced the edited\n // message's content via sendMessage's head.replace, with no confirmation.\n const editingMessage = !!(this.state.reply && this.state.reply.editing);\n return this.state.isWriter && !this.state.unconfirmed && !this.props.forwardMessage &&\n !this.state.peerMessagingDisabled && !editingMessage;\n }\n\n handleDragStart(e) {\n e.preventDefault();\n e.stopPropagation();\n e.dataTransfer.clearData();\n }\n\n handleDragIn(e) {\n e.preventDefault();\n e.stopPropagation();\n this.dragCounter++;\n if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {\n this.setState({dragging: true});\n }\n }\n\n handleDragOut(e) {\n e.preventDefault();\n e.stopPropagation();\n this.dragCounter--;\n if (this.dragCounter <= 0) {\n this.setState({dragging: false});\n }\n }\n\n handleDrag(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n handleDrop(e) {\n e.preventDefault();\n e.stopPropagation();\n this.setState({dragging: false});\n if (this.isDragEnabled() && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n this.handleFileDrop(e.dataTransfer.files);\n this.dragCounter = 0;\n }\n }\n\n render() {\n const {formatMessage} = this.props.intl;\n\n // P2P call is an overlay, not a separate component because it cannot be\n // re-mounted between full screen/minimized.\n const overlay = this.state.rtcPanel &&\n
}>\n \n ;\n\n const riskDialog = this.state.riskDialog &&\n ;\n\n let component;\n if (!this.state.topic) {\n component = ;\n\n } else {\n let component2;\n if (this.state.imagePreview) {\n // Preview image before sending.\n component2 = (\n
}>\n \n \n );\n } else if (this.state.videoPreview) {\n // Preview video.\n component2 =
}>\n \n ;\n\n } else if (this.state.imagePostview) {\n // Expand received image.\n component2 =
}>\n \n ;\n\n } else if (this.state.videoPostview) {\n // Play received video.\n component2 = }>\n \n ;\n\n } else if (this.state.docPreview) {\n // Preview attachment before sending.\n if (TheCard.isFileSupported(this.state.docPreview.type, this.state.docPreview.name) ||\n this.state.docPreview.type == TheCard.contentType) {\n component2 = }>\n \n ;\n } else {\n component2 = }>\n \n ;\n }\n } else {\n const topic = this.props.tinode.getTopic(this.state.topic);\n const isChannel = topic.isChannelType() || topic.chan;\n const groupTopic = topic.isGroupType() && !isChannel;\n const icon_badges = [];\n if (topic.trusted) {\n if (topic.trusted.verified) {\n icon_badges.push({icon: 'verified', color: 'badge-inv'});\n }\n if (topic.trusted.staff) {\n icon_badges.push({icon: 'staff', color: 'badge-inv'});\n }\n if (topic.trusted.danger) {\n icon_badges.push({icon: 'dangerous', color: 'badge-inv'});\n }\n }\n\n const pinnedMessages = [];\n this.state.pins.forEach(seq => pinnedMessages.push(topic.latestMsgVersion(seq) || topic.findMessage(seq)));\n\n const messageNodes = [];\n let previousFrom = null;\n let prevDate = null;\n // Set upfront (not just inside the loop below) so an empty (zero-message) conversation still\n // gets the base .chat-box class instead of leaving
    with no class at all.\n let chatBoxClass = groupTopic ? 'chat-box group' : 'chat-box';\n topic.messages((msg, prev, next, i) => {\n let nextFrom = next ? (next.from || 'chan') : null;\n\n let sequence = 'single';\n let thisFrom = msg.from || 'chan';\n if (thisFrom == previousFrom) {\n if (thisFrom == nextFrom) {\n sequence = 'middle';\n } else {\n sequence = 'last';\n }\n } else if (thisFrom == nextFrom) {\n sequence = 'first';\n }\n previousFrom = thisFrom;\n\n const isReply = !(thisFrom == this.props.myUserId);\n const deliveryStatus = topic.msgStatus(msg, true);\n\n let userFrom = thisFrom, userName, userAvatar;\n const user = topic.userDesc(thisFrom);\n if (user && user.public) {\n userName = user.public.fn;\n userAvatar = makeImageUrl(user.public.photo);\n }\n\n // Ref for this chat message.\n const ref = this.getOrCreateMessageRef(msg.seq);\n let replyToSeq = msg.head ? parseInt(msg.head.reply) : null;\n if (!replyToSeq || isNaN(replyToSeq)) {\n replyToSeq = null;\n }\n\n // group_invitation_created is the one system_action template with a real, backend-honored\n // action button (see chat-message.jsx's renderGroupInvitationCard) -- it still needs the\n // full ChatMessage bubble treatment. Every other system_action/system_notice template is\n // purely informational and belongs in the plain centered style below.\n const systemActions = msg.content && typeof msg.content == 'object' && Array.isArray(msg.content.actions) ?\n msg.content.actions : null;\n const isActionableSystemMessage = systemActions && systemActions.some(a => a && a.type == 'group_invitation_accept');\n const isPlainSystemMessage = msg.head && (msg.head['x-im-type'] == 'system_notice' || msg.head['x-im-type'] == 'system_action') &&\n !isActionableSystemMessage && msg.content && typeof msg.content == 'object' && typeof msg.content.text == 'string';\n\n if (msg.hi) {\n // Deleted message.\n messageNodes.push(\n \n );\n } else if (isPlainSystemMessage) {\n const thisDate = new Date(msg.ts);\n if (!prevDate || prevDate.toDateString() != thisDate.toDateString()) {\n messageNodes.push(\n \n );\n prevDate = thisDate;\n }\n messageNodes.push(\n \n );\n } else {\n const thisDate = new Date(msg.ts);\n // This message was sent on a different date than the previous.\n if (!prevDate || prevDate.toDateString() != thisDate.toDateString()) {\n messageNodes.push(\n \n );\n prevDate = thisDate;\n }\n messageNodes.push(\n \n );\n }\n });\n\n let lastSeen = null;\n if (isChannel) {\n if (topic.subcnt) {\n lastSeen = formatMessage(messages.subscriber_count, {count: topic.subcnt});\n }\n } else {\n const cont = this.props.tinode.getMeTopic().getContact(this.state.topic);\n if (cont) {\n if (Tinode.isP2PTopicName(cont.topic)) {\n if (cont.online) {\n lastSeen = formatMessage(messages.online_now);\n } else if (cont.seen) {\n lastSeen = formatMessage(messages.last_seen,\n {timestamp: shortDateFormat(cont.seen.when, this.props.intl.locale)});\n // TODO: also handle user agent in c.seen.ua\n }\n } else if (Tinode.isGroupTopicName(cont.topic)) {\n if (topic.subcnt) {\n lastSeen = formatMessage(messages.member_count, {count: topic.subcnt});\n }\n }\n }\n }\n const avatar = this.state.avatar || true;\n const online = this.state.deleted || topic.isSelfType() ? null :\n this.props.online ? 'online' + (this.state.typingIndicator ? ' typing' : '') : 'offline';\n\n const titleClass = 'panel-title' + (this.state.deleted ? ' deleted' : '');\n const darkModeClass = this.props.colorSchema == 'dark' ? 'dark' : '';\n // sendMessage() unconditionally sends whatever content it's given with head={replace:...}\n // while this.state.reply.editing is set (see sendMessage above) -- it has no way to tell\n // \"the user is still editing the original text\" apart from \"the user just picked a photo/\n // file/card/favorite from the attachment panel while that edit was still open\". Gating the\n // attach entry points closed here (same mechanism already used for forwardMessage below) is\n // simpler and safer than trying to teach sendMessage to distinguish those cases after the fact.\n const editingMessage = !!(this.state.reply && this.state.reply.editing);\n\n let messagesComponent = (\n <>\n {this.state.groupAnnouncement ?\n \n campaign\n {this.state.groupAnnouncement.content}\n chevron_right\n : null}\n {this.state.pendingJoinRequests > 0 ?\n \n person_add_alt\n 新邀请进群申请({this.state.pendingJoinRequests})\n chevron_right\n : null}\n
    \n \n
    \n
      \n {this.state.pendingRequestMessage ?\n <>\n {this.state.pendingRequestMessage.ts ?\n : null}\n
    • \n
      \n
      \n
      \n
      {this.state.pendingRequestMessage.text}
      \n
      \n
      \n
      \n
    • \n : null}\n {messageNodes}\n
    \n
    \n {!this.state.isReader ?\n
    \n {this.state.readingBlocked ?\n
    \n \n
    \n : null }\n
    \n : null }\n
    \n check {this.state.toast}\n
    \n
    \n {this.state.peerMessagingDisabled && !this.state.unconfirmed ?\n
    \n block .\n
    : null}\n {!this.state.unconfirmed && this.state.relationshipContext &&\n this.state.relationshipContext.relationship == 'pending_inbound' ?\n
    以上是打招呼的消息
    : null}\n {!this.state.unconfirmed && this.state.relationshipContext &&\n this.state.relationshipContext.relationship == 'pending_outbound' ?\n
    好友申请正在等待处理
    : null}\n {!this.state.unconfirmed && this.state.relationshipContext &&\n this.state.relationshipContext.relationship == 'none' ?\n
    你们还不是好友,发送消息前需先验证 发送朋友验证
    : null}\n {this.props.selectMode ?\n \n : this.state.unconfirmed ?\n \n :\n }\n \n );\n\n component2 = (\n <>\n
    \n {this.props.displayMobile ?\n {e.preventDefault(); this.leave(this.state.topic); this.props.onHideMessagesView();}}>\n arrow_back\n \n :\n null}\n
    \n \n {!isChannel ? : null}\n
    \n
    \n
    {\n this.state.title ||\n \n }
    \n
    {lastSeen}
    \n
    \n
    \n {!this.props.displayMobile && this.state.pins.length > 0 ?\n this.setState({selectedPin: index})}\n onSelected={this.handleQuoteClick}\n onCancel={this.handleUnpinMessage} />\n : null}\n {groupTopic ?\n :\n null\n }\n \n
    \n {this.props.displayMobile ?\n <>\n {this.state.pins.length > 0 ?\n this.setState({selectedPin: index})}\n onSelected={this.handleQuoteClick}\n onCancel={this.handleUnpinMessage} />\n : null\n }\n \n \n : null}\n \n {messagesComponent}\n {this.state.dragging && this.isDragEnabled() ?\n
    {formatMessage(messages.drag_file)}
    \n : null}\n \n );\n }\n component =
    {component2}{overlay}{riskDialog}
    \n }\n return component;\n }\n};\n\nexport default injectIntl(MessagesView);\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport FileProgress from './file-progress.jsx';\nimport { createFileDownloader } from '../lib/im-api.js';\nimport { bytesToHumanSize } from '../lib/strformat.js';\nimport { isUrlRelative, sanitizeUrl } from '../lib/utils.js';\n\n// Same broad-category icon+color convention already established for file cards elsewhere\n// (content-library-view.jsx / group-management-view.jsx's FILE_TYPE_META) -- this was the one place\n// that never adopted it and instead used the same generic gray icon for every attachment regardless\n// of type. This client-side mime sniff exists only because chat attachments (unlike a group file\n// or a favorite) don't carry a server-computed file_type field to look up directly.\nconst ATTACHMENT_TYPE_META = {image: ['image', '#3ba55c'], video: ['videocam', '#3b82c4'], audio: ['audiotrack', '#8b5cf6'], document: ['description', '#e05d44'], file: ['insert_drive_file', '#8a8f98']};\nfunction attachmentTypeFromMime(mime) {\n const m = (mime || '').toLowerCase();\n if (m.startsWith('image/')) return 'image';\n if (m.startsWith('video/')) return 'video';\n if (m.startsWith('audio/')) return 'audio';\n if (m === 'application/pdf' || m === 'text/plain' || m.includes('msword') || m.includes('wordprocessingml') ||\n m.includes('spreadsheetml') || m.includes('presentationml') || m === 'application/vnd.ms-excel' || m === 'application/vnd.ms-powerpoint') {\n return 'document';\n }\n return 'file';\n}\n\nexport default class Attachment extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n downloader: null,\n progress: 0\n };\n\n this.downloadFile = this.downloadFile.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n }\n\n downloadFile(url, filename, mimetype) {\n if (!url) {\n this.props.onError(\"Invalid download URL '\" + url + \"'\");\n return;\n }\n\n // Same wrong-header bug as content-library-view.jsx's DownloadPage (X-Tinode-APIKey/\n // X-Tinode-Auth, neither recognized by this backend) -- confirmed live: clicking \"保存\" on any\n // real chat file attachment 403'd with \"valid API key required\". createFileDownloader() is the\n // fixed-headers drop-in with the same download()/cancel() interface.\n const downloader = createFileDownloader(this.props.tinode);\n this.setState({downloader: downloader});\n downloader.download(url, filename, mimetype,\n loaded => this.setState({progress: loaded / this.props.size}),\n err => this.props.onError(err, 'err')\n )\n .then(_ => this.setState({downloader: null, progress: 0}))\n .catch(err => {\n if (err) {\n this.props.onError(\"Error downloading file: \" + err.message, 'err');\n }\n this.setState({downloader: null, progress: 0});\n });\n }\n\n handleCancel() {\n if (this.props.uploading) {\n this.props.onCancelUpload();\n } else if (this.state.downloader) {\n this.state.downloader.cancel();\n }\n }\n\n render() {\n let filename = this.props.filename || 'file_attachment';\n if (filename.length > 36) {\n filename = filename.substr(0, 16) + '...' + filename.substr(-16);\n }\n let size = this.props.size > 0 ?\n ({bytesToHumanSize(this.props.size)}) :\n null;\n\n // Detect if the download URL is relative or absolute.\n // If the URL is relative use LargeFileHelper to attach authentication\n // credentials to the request.\n let url, helperFunc;\n if (!this.props.uploading && !this.state.downloader && isUrlRelative(this.props.downloadUrl)) {\n // Relative URL. Use download helper.\n url = '#';\n helperFunc = (e) => {\n e.preventDefault();\n this.downloadFile(this.props.downloadUrl, this.props.filename, this.props.mimetype);\n };\n } else {\n url = sanitizeUrl(this.props.downloadUrl);\n helperFunc = null;\n }\n const downloadWidget = <>file_download ;\n const [icon, color] = ATTACHMENT_TYPE_META[attachmentTypeFromMime(this.props.mimetype)];\n return (\n
    \n
    {icon}
    \n
    \n
    {filename} {size}
    \n {this.props.uploading || this.state.downloader ?\n \n :\n
    {url ?\n {downloadWidget}\n :\n {downloadWidget}\n }
    \n }\n
    \n
    \n );\n }\n};\n","// Single chat message bubble, sent or received.\n\nimport React from 'react';\nimport { FormattedMessage, injectIntl } from 'react-intl';\nimport { Drafty, Tinode, TheCard } from 'tinode-sdk';\n\nimport Attachment from './attachment.jsx';\nimport ForwardBundle from './forward-bundle.jsx';\nimport LetterTile from './letter-tile.jsx';\nimport ReceivedMarker from './received-marker.jsx'\n\nimport { fullFormatter } from '../lib/formatters.js';\nimport { sanitizeUrl } from '../lib/utils.js';\nimport HashNavigation from '../lib/navigation.js';\n\n// 4.9 语音未读红点:纯客户端概念,没有对应的后端字段——原生 Tinode 的 recv/read 只标记到\n// \"这条消息本身有没有被看到\",跟\"这条语音有没有被真的点开听过\"是两回事(文字消息看一眼就算\n// 读过,语音消息可能只是划过去、根本没点开播放)。按话题分别记一份\"已播放过的 seq 集合\"在\n// localStorage,跟\"最近使用表情\"是同一类不需要后端参与的本地小状态。\n// Key还要按登录账号分——P2P话题名本身就是对方user_id,跟\"我是谁\"无关;这个应用已知同一浏览器\n// origin下多个账号共享localStorage(多标签页各自登录不同账号),不带uid会导致账号A点开播放过\n// 的语音,在账号B自己与同一个人/同一个群的独立会话里也显示成\"已读\"。\nconst VOICE_PLAYED_KEY_PREFIX = 'im-voice-played:';\nfunction isVoicePlayed(myUid, topic, seq) {\n try {\n const list = JSON.parse(localStorage.getItem(VOICE_PLAYED_KEY_PREFIX + myUid + ':' + topic) || '[]');\n return Array.isArray(list) && list.includes(seq);\n } catch (_) {\n return false;\n }\n}\nfunction markVoicePlayed(myUid, topic, seq) {\n try {\n const key = VOICE_PLAYED_KEY_PREFIX + myUid + ':' + topic;\n const list = JSON.parse(localStorage.getItem(key) || '[]');\n const set = Array.isArray(list) ? list : [];\n if (!set.includes(seq)) {\n // Cap so a very long-lived topic doesn't grow this without bound.\n localStorage.setItem(key, JSON.stringify(set.concat(seq).slice(-500)));\n }\n } catch (_) { /* ignore */ }\n}\n\nclass BaseChatMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n progress: 0,\n voicePlayed: isVoicePlayed(props.tinode.getCurrentUserID(), props.topic, props.seq),\n invitationBusy: false,\n invitationResult: null,\n invitationError: null\n };\n\n if (props.uploader) {\n props.uploader.onProgress = this.handleProgress.bind(this);\n }\n\n this.handleExpandImage = this.handleExpandImage.bind(this);\n this.handlePlayVideo = this.handlePlayVideo.bind(this);\n this.handleFormButtonClick = this.handleFormButtonClick.bind(this);\n this.handleQuoteClick = this.handleQuoteClick.bind(this);\n this.handleContextClick = this.handleContextClick.bind(this);\n this.handleTouchStart = this.handleTouchStart.bind(this);\n this.handleTouchMove = this.handleTouchMove.bind(this);\n this.handleTouchEnd = this.handleTouchEnd.bind(this);\n this.handleCancelUpload = this.handleCancelUpload.bind(this);\n this.handleDraftyClick = this.handleDraftyClick.bind(this);\n this.handleVoicePlayed = this.handleVoicePlayed.bind(this);\n this.handleAcceptGroupInvitation = this.handleAcceptGroupInvitation.bind(this);\n\n this.formatterContext = {\n formatMessage: props.intl.formatMessage.bind(props.intl),\n viewportWidth: props.viewportWidth,\n authorizeURL: props.tinode.authorizeURL.bind(props.tinode),\n\n onHandleClick: this.handleDraftyClick,\n // formatters.js's 'AU' case wires this to AudioPlayer's onPlay -- see handleVoicePlayed below\n // for why this needs to live on the instance (closes over this specific message's seq/topic)\n // rather than being a static, prop-derived value like the other formatterContext entries.\n onVoicePlayed: this.handleVoicePlayed\n };\n }\n\n handleDraftyClick = (e, action) => {\n switch (action) {\n case 'image':\n this.handleExpandImage(e);\n break;\n case 'video':\n this.handlePlayVideo(e);\n break;\n case 'form_button':\n this.handleFormButtonClick(e);\n break;\n case 'quote':\n this.handleQuoteClick(e);\n break;\n case 'contact_chat':\n e.preventDefault();\n try {\n // tinode:topic/usr123abc -> usr123abc\n const pathname = new URL(e.target.dataset.val)?.pathname;\n const parts = pathname.split('/').filter(Boolean);\n HashNavigation.navigateTo(HashNavigation.setUrlTopic('', parts.pop() || ''));\n } catch (error) {\n console.error(\"Invalid URL:\", error);\n }\n break;\n case 'contact_find':\n e.preventDefault();\n let hashUrl = HashNavigation.setUrlSidePanel(window.location.hash, 'newtpk');\n hashUrl = HashNavigation.addUrlParam(hashUrl, 'q', e.target.dataset.val);\n hashUrl = HashNavigation.addUrlParam(hashUrl, 'tab', 'find');\n HashNavigation.navigateTo(hashUrl);\n break;\n default:\n // No special handling; let the browser deal with it.\n console.info('Unhandled drafty action.', action, e.target.dataset);\n break;\n }\n }\n\n handleExpandImage(e) {\n e.preventDefault();\n this.props.onExpandMedia({\n url: e.target.src,\n filename: e.target.dataset.name,\n width: e.target.dataset.width,\n height: e.target.dataset.height,\n size: e.target.dataset.size,\n type: e.target.dataset.mime\n });\n }\n\n handlePlayVideo(e) {\n e.preventDefault();\n this.props.onExpandMedia({\n video: true,\n url: e.target.dataset.src,\n preview: e.target.src,\n filename: e.target.dataset.name,\n width: e.target.dataset.width,\n height: e.target.dataset.height,\n duration: e.target.dataset.duration,\n size: e.target.dataset.size,\n type: e.target.dataset.mime\n });\n }\n\n handleFormButtonClick(e) {\n e.preventDefault();\n const data = {\n seq: this.props.seq\n };\n data.resp = {};\n if (e.target.dataset.name) {\n data.resp[e.target.dataset.name] = e.target.dataset.val ? e.target.dataset.val :\n e.target.dataset.val === undefined ? 1 : '' + e.target.dataset.val;\n }\n if (e.target.dataset.act == 'url') {\n data.ref = sanitizeUrl(e.target.dataset.ref) || 'about:blank';\n }\n const text = e.target.dataset.title || 'unknown';\n this.props.onFormResponse(e.target.dataset.act, text, data);\n }\n\n // docs/images/消息页面—长按弹出.png names this \"long-press\", but the only wiring that ever existed\n // was handleContextClick below, bound to a click on the tiny .menuTrigger chevron -- no touchstart/\n // setTimeout path, checked across this file's entire history. Real touch devices have no way to\n // trigger it that matches the reference image. This adds an actual press-and-hold gesture on the\n // bubble itself, reusing the same menu-building logic so both paths stay in sync.\n handleTouchStart(e) {\n if (!this.props.showContextMenu || this.props.selectMode) {\n return;\n }\n const touch = e.touches && e.touches[0];\n this.longPressOrigin = {x: touch ? touch.pageX : e.pageX, y: touch ? touch.pageY : e.pageY};\n this.longPressTimer = window.setTimeout(() => {\n this.longPressTimer = null;\n this.openContextMenu(this.longPressOrigin.x, this.longPressOrigin.y);\n }, 500);\n }\n\n handleTouchMove(e) {\n if (!this.longPressOrigin) {\n return;\n }\n const touch = e.touches && e.touches[0];\n const x = touch ? touch.pageX : e.pageX;\n const y = touch ? touch.pageY : e.pageY;\n // A real press-and-hold shouldn't fire if the finger is actually scrolling the list.\n if (Math.abs(x - this.longPressOrigin.x) > 10 || Math.abs(y - this.longPressOrigin.y) > 10) {\n this.cancelLongPress();\n }\n }\n\n handleTouchEnd() {\n this.cancelLongPress();\n }\n\n cancelLongPress() {\n if (this.longPressTimer) {\n window.clearTimeout(this.longPressTimer);\n this.longPressTimer = null;\n }\n this.longPressOrigin = null;\n }\n\n componentWillUnmount() {\n this.cancelLongPress();\n }\n\n handleContextClick(e) {\n e.preventDefault();\n e.stopPropagation();\n this.openContextMenu(e.pageX, e.pageY);\n }\n\n openContextMenu(x, y) {\n const menuItems = [];\n if (this.props.received == Tinode.MESSAGE_STATUS_FAILED) {\n menuItems.push('menu_item_send_retry');\n }\n if (this.props.received > Tinode.MESSAGE_STATUS_FATAL) {\n if (this.props.userIsWriter) {\n menuItems.push('menu_item_reply');\n if (!this.props.response) {\n let immutable = false;\n Drafty.entities(this.props.content, (_0, _1, tp) => {\n immutable = ['AU', 'EX', 'FM', 'IM', 'TC', 'VC', 'VD'].includes(tp);\n return immutable;\n });\n if (!immutable) {\n Drafty.styles(this.props.content, tp => {\n immutable = ['QQ'].includes(tp);\n return immutable;\n });\n }\n if (!immutable) {\n menuItems.push('menu_item_edit');\n }\n }\n }\n if (this.props.userIsAdmin) {\n menuItems.push(this.props.pinned ? 'menu_item_unpin' : 'menu_item_pin');\n }\n }\n menuItems.push('menu_item_forward');\n\n this.props.showContextMenu({\n seq: this.props.seq,\n replace: this.props.edited ? parseInt(this.props.edited.split(':')[1]) : 0,\n content: this.props.content,\n head: this.props.head,\n userFrom: this.props.userFrom,\n userName: this.props.userName,\n y: y,\n x: x,\n pickReply: this.props.pickReply,\n editMessage: this.props.editMessage,\n timestamp: this.props.timestamp,\n }, menuItems);\n }\n\n handleProgress(ratio) {\n this.setState({progress: ratio});\n }\n\n handleCancelUpload() {\n this.props.onCancelUpload(this.props.seq, this.props.uploader);\n }\n\n handleVoicePlayed() {\n if (this.state.voicePlayed) {\n return;\n }\n markVoicePlayed(this.props.tinode.getCurrentUserID(), this.props.topic, this.props.seq);\n this.setState({voicePlayed: true});\n }\n\n handleQuoteClick(e) {\n e.preventDefault();\n e.stopPropagation();\n const replyToSeq = this.props.replyToSeq;\n if (replyToSeq) {\n this.props.onQuoteClick(replyToSeq);\n }\n }\n\n // See the long comment above messages-view.jsx's handleAcceptGroupInvitation for the backstory --\n // this just drives this one message bubble's own busy/done/error display around that call.\n handleAcceptGroupInvitation(invitationId) {\n if (this.state.invitationBusy || this.state.invitationResult || !this.props.onAcceptGroupInvitation) {\n return;\n }\n this.setState({invitationBusy: true, invitationError: null});\n this.props.onAcceptGroupInvitation(invitationId).then(result => {\n this.setState({invitationBusy: false, invitationResult: (result && result.status) || 'joined'});\n }).catch(err => {\n this.setState({invitationBusy: false, invitationError: (err && err.message) || '操作失败,请重试'});\n });\n }\n\n // docs/images/加入群聊.png: a card with the inviter's notice text and a single \"立即加入\" button.\n // Only rendered for the one system_action template that actually carries an actionable\n // `content.actions` entry -- every other system_action/system_notice message keeps falling through\n // to the plain-text path right below, unchanged.\n renderGroupInvitationCard(text, action) {\n const {invitationBusy, invitationResult, invitationError} = this.state;\n return
    \n
    {text}
    \n {invitationResult == 'joined' ? 已加入群聊 :\n invitationResult == 'pending_approval' ? 已提交申请,等待管理员通过 :\n invitationResult ? {invitationResult} :\n }\n {invitationError ? {invitationError} : null}\n
    ;\n }\n\n // Reason caption shown under a failed outgoing message in a 1:1 chat, based on the real\n // relationship state (see docs/images/个人对话—拉黑状态/已读状态.png and .../个人对话—删除状态.png).\n // Returns null for relationships that don't explain a send failure (friend, pending, unknown) so\n // a plain network failure doesn't get a misleading relationship-based caption.\n renderFailReason() {\n if (this.props.response ||\n (this.props.received != Tinode.MESSAGE_STATUS_FAILED && this.props.received != Tinode.MESSAGE_STATUS_FATAL)) {\n return null;\n }\n if (this.props.relationship == 'blocked_by_peer' || this.props.relationship == 'blocked_by_me') {\n return
    消息已发送,但被对方拒收了
    ;\n }\n if (this.props.relationship == 'none') {\n return
    你还不是他(她)朋友。发送朋友验证
    ;\n }\n return null;\n }\n\n render() {\n const sideClass = this.props.sequence + ' ' + (this.props.response ? 'left' : 'right');\n const bubbleClass = (this.props.sequence == 'single' || this.props.sequence == 'last') ? 'bubble tip' : 'bubble';\n const avatar = this.props.userAvatar || true;\n const isFailed = !this.props.response &&\n (this.props.received == Tinode.MESSAGE_STATUS_FAILED || this.props.received == Tinode.MESSAGE_STATUS_FATAL);\n const failReason = this.renderFailReason();\n // 4.9 语音未读红点:只对收到的(response=true)语音消息生效——自己发的语音不需要提醒自己听。\n let isVoiceMessage = false;\n if (this.props.response && this.props.mimeType == Drafty.getContentType() && Drafty.isValid(this.props.content)) {\n Drafty.entities(this.props.content, (_0, _1, tp) => {\n if (tp === 'AU') { isVoiceMessage = true; }\n return isVoiceMessage;\n });\n }\n const showVoiceUnreadDot = isVoiceMessage && !this.state.voicePlayed;\n let textSizeClass = 'message-content';\n const fullDisplay = (this.props.isGroup && this.props.response &&\n (this.props.sequence == 'single' || this.props.sequence == 'last'));\n\n let content = this.props.content;\n // Server-generated conversation notices (`system_notice`, e.g. `friend_added` sent once when two\n // users become friends -- see server's publishIMConversationSystemNotice) and group system-action\n // events (`system_action`, e.g. group_member_joined/join_request_approved/governance changes --\n // server/im_http.go's group event publishers) both carry a custom JSON shape\n // ({template, text, actors/actions, ...}), not Drafty and not a plain string, so without this\n // they fall through to the generic \"invalid content\" placeholder below -- a real, human-readable\n // message like \"有成员通过审批加入了群聊。\" was rendering as a bare warning icon. Reduce either to\n // its `text` upfront so the existing plain-string path renders it as an ordinary bubble -- these\n // are meant to read like a normal message, not a special banner.\n //\n // One template is the exception: `group_invitation_created` (docs/images/加入群聊.png) is the one\n // system_action message that actually carries a real, backend-honored action -- confirmed live\n // against server/im_http.go's serveIMGroupInvitations, content.actions[0] is\n // {type:\"group_invitation_accept\", label:\"立即加入\", target_id:}, and\n // acceptGroupInvitation() already existed in im-api.js with zero call sites because this action\n // data was being thrown away right here along with everything else system_action carries. Collapsing\n // it to bare text (like every other system_action template correctly does) left the invitee with no\n // way to ever accept -- the reference image's whole point is the \"立即加入\" button.\n const systemActions = content && typeof content == 'object' && Array.isArray(content.actions) ? content.actions : null;\n const inviteAction = this.props.head && this.props.head['x-im-type'] === 'system_action' && systemActions &&\n systemActions.find(a => a && a.type === 'group_invitation_accept');\n let invitationCard = null;\n if (inviteAction && typeof content.text == 'string') {\n invitationCard = this.renderGroupInvitationCard(content.text, inviteAction);\n } else if (this.props.head && (this.props.head['x-im-type'] === 'system_notice' || this.props.head['x-im-type'] === 'system_action') &&\n content && typeof content == 'object' && typeof content.text == 'string') {\n content = content.text;\n }\n // 合并转发(服务端 mode=\"bundle\" 生成的消息)同样不是 Drafty,content 是\n // {bundle_id, title, item_count, preview, items, source_refs, comment}。不认这个类型的话\n // 一样会落到下面的 \"invalid content\" 兜底。渲染成一张可展开的\"聊天记录\"卡片。\n let bundleCard = null;\n if (this.props.head && this.props.head['x-im-type'] === 'forward_bundle' &&\n content && typeof content == 'object' && (content.items || content.preview)) {\n bundleCard = ;\n }\n const attachments = [];\n if (this.props.mimeType == Drafty.getContentType() && Drafty.isValid(content)) {\n Drafty.attachments(content, (att, i) => {\n if (Drafty.isFormResponseType(att.mime)) {\n // Don't show json drafty form response objects as attachments.\n // They are not meant for users.\n return;\n }\n attachments.push();\n }, this);\n const tree = Drafty.format(content, fullFormatter, this.formatterContext);\n content = React.createElement(React.Fragment, null, tree);\n } else if (typeof content == 'string') {\n // Make font bigger for emoji-only messages.\n // Must use 'new RegExp(...)' because React does not like /{1-5}/.\n if (new RegExp('^\\\\p{RGI_Emoji}{1,5}$', 'v').test(content || '')) {\n // Content consists of 1-5 emoji characters. Count how many and use it to increase the font size.\n textSizeClass += ' emoji-' + (content || '').match(/\\p{RGI_Emoji}/vg).length;\n }\n } else if (content == null) {\n // Tinode's wire protocol marks a recalled message by nulling its `content` in place (the seq\n // slot stays, everything else is gone) -- see server's message.recalled handling and\n // IM-前后端对接文档.md 1256行. That's a *different* deletion shape from the msg.hi-flagged kind\n // messages-view.jsx already handles by rendering a dedicated \n // instead of a ChatMessage at all (deletedText is that component's own prop, not this one's --\n // there's no equivalent plumbed in here). Recalled messages still go through ordinary ChatMessage,\n // so without this branch a null content fell all the way through to the generic \"invalid content\"\n // case below -- confirmed live: recalling a message left the *other* party's chat showing a bare\n // \"⚠ invalid content\" (无效内容) row where \"消息已删除\" belongs (the recalling side just drops the\n // row from its own list locally, unaffected by this). Reuses the exact same i18n id/defaultMessage\n // messages-view.jsx's `messages.message_deleted` already registers (translated zh string:\n // \"消息已删除\"), not a new string. `content == null` (not `===`) intentionally also catches\n // `undefined`, same as every other falsy-content branch here.\n content = <>block \n ;\n } else {\n content = <>warning_amber \n \n }\n\n return (\n
  • \n {this.props.selectMode ?\n this.props.onToggleSelect(this.props.seq)}>\n {this.props.selected ? 'check_circle' : 'radio_button_unchecked'}\n : null}\n {this.props.isGroup && this.props.response ?\n
    \n {fullDisplay ?\n :\n null}\n
    :\n null}\n {isFailed && failReason ?\n error : null}\n
    \n
    \n {showVoiceUnreadDot ? : null}\n
    \n
    \n {invitationCard || bundleCard || content}\n {attachments}\n
    \n {this.props.timestamp ?\n \n : null}\n
    \n {this.props.showContextMenu && !this.props.selectMode ?\n \n \n expand_more\n \n : null\n }\n
    \n {failReason}\n {fullDisplay ?\n
    \n {this.props.userName ||\n \n }\n {this.props.senderRole == 'owner' ? 群主 :\n this.props.senderRole == 'admin' ? 管理员 : null}\n
    \n : null\n }\n
    \n
  • \n );\n }\n};\n\nconst IntlChatMessage = injectIntl(BaseChatMessage);\nconst ChatMessage = React.forwardRef((props, ref) => );\n\nexport default ChatMessage;\n","// 合并转发卡片(第4章 4.20)。\n//\n// 服务端在 `POST /v1/im/messages/forward` 的 mode=\"bundle\" 下会生成一条消息,\n// head 带 `x-im-type: \"forward_bundle\"`,content 形如:\n// {bundle_id, title, item_count, preview:[{from,type,summary,ts}], items:[...], source_refs, comment}\n// 这个结构不是 Drafty,所以不加这个渲染的话会落到 chat-message 的 \"invalid content\" 兜底。\n//\n// items[] 里已经带了每条被转发消息的完整快照,所以\"查看完整记录\"是就地展开,不需要额外请求。\nimport React from 'react';\n\n// 快照里的 from 是不带 usr 前缀的裸 uid(与收藏快照一致)。先补前缀再查本地会话缓存拿显示名,\n// 查不到就不显示发送者——宁可少一行,也不要把一串 uid 摆在摘要前面。\nfunction senderName(tinode, from) {\n const raw = (from || '').trim();\n if (!raw) return '';\n const uid = raw.startsWith('usr') ? raw : 'usr' + raw;\n const topic = tinode && tinode.getTopic ? tinode.getTopic(uid) : null;\n const pub = topic && topic.public;\n return (pub && (pub.fn || pub.name)) || '';\n}\n\nconst TYPE_LABEL = {image: '[图片]', video: '[视频]', voice: '[语音]', file: '[文件]', link: '[链接]'};\n\nfunction lineText(entry) {\n if (!entry) return '';\n const summary = (entry.summary || entry.text || '').trim();\n if (summary) return summary;\n return TYPE_LABEL[entry.type] || '';\n}\n\nexport default class ForwardBundle extends React.PureComponent {\n constructor(props) {\n super(props);\n this.state = {expanded: false};\n this.handleToggle = this.handleToggle.bind(this);\n }\n\n handleToggle(e) {\n e.preventDefault();\n e.stopPropagation();\n this.setState(s => ({expanded: !s.expanded}));\n }\n\n render() {\n const c = this.props.content || {};\n const count = Number(c.item_count) || (Array.isArray(c.items) ? c.items.length : 0);\n // 收起时用 preview(服务端已截到最多 3 条);展开时用 items(全量)。\n const rows = this.state.expanded ? (c.items || []) : (c.preview || []);\n const comment = (c.comment || '').trim();\n\n return
    \n
    {c.title || '聊天记录'}
    \n
      \n {rows.map((entry, i) => {\n const who = senderName(this.props.tinode, entry.from);\n return
    • \n {who ? {who}: : null}{lineText(entry)}\n
    • ;\n })}\n
    \n {count > rows.length || this.state.expanded ?\n :\n
    共 {count} 条消息
    }\n {comment ?
    {comment}
    : null}\n
    ;\n }\n}\n","// GroupSubs: a list of group subscribers currently online.\n// Show in the topic title bar\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { MAX_ONLINE_IN_TOPIC } from '../config.js'\n\nimport LetterTile from './letter-tile.jsx';\nimport { makeImageUrl } from '../lib/blob-helpers.js';\n\nexport default class GroupSubs extends React.Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n const usersOnline = [];\n const totalCount = (this.props.subscribers || []).length;\n const countToShow = Math.min(MAX_ONLINE_IN_TOPIC, totalCount);\n\n (this.props.subscribers || []).some((sub) => {\n usersOnline.push(\n
    \n \n
    \n );\n return usersOnline.length == countToShow;\n });\n if (usersOnline.length == 0) {\n return null;\n }\n return (\n
    {usersOnline} {totalCount > countToShow ?\n \n \n : null}\n
    \n );\n }\n};\n","// A single topic or user.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class Invitation extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleButtonAction = this.handleButtonAction.bind(this);\n }\n\n handleButtonAction(evt, data) {\n evt.preventDefault();\n this.props.onAction(data);\n }\n\n render() {\n return (\n
    \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n );\n }\n};\n","// Message bubble with non-payload content, such as an indicator of deleted content or a date stamp.\n\nimport React from 'react';\n\nexport default class MetaMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n }\n\n render() {\n let content = null;\n let bubbleClass = 'bubble';\n if (this.props.date) {\n // A date badge.\n content = <>{this.props.date}\n bubbleClass += ' date';\n } else if (this.props.deleted) {\n // 撤回/删除占位。messages-view.jsx 对 msg.hi 的消息一直在传 deleted={true},但这里从来\n // 没有处理过这个分支,于是整个组件走到下面的 `return null` —— 撤回一条消息之后时间线上\n // 什么都不剩,看不出这里曾经有过一条消息。文案复用已有的 message_deleted(\"消息已删除\")。\n content = {this.props.deletedText || '消息已删除'};\n bubbleClass += ' deleted';\n } else if (this.props.systemText) {\n // docs/images/内容沟通对话3-开启进群验证与拉人状态.png:群系统事件(成员加入/退出/角色变更/\n // 群公告发布等)在参考图里是居中的纯灰字,不带头像、不带气泡、不带发送者名字——跟这里的\n // 日期分隔条是同一种视觉语言。这类消息之前是当成普通消息交给 ChatMessage 渲染的(服务端\n // 这类消息没有真实的 `from`,chat-message.jsx 的 fullDisplay 逻辑因此在系统消息下方多画出\n // 一行解析不到发送者、回退成\"未找到\"的作者名,明显不该出现)。\n content = {this.props.systemText};\n bubbleClass += ' system';\n }\n\n if (!content) {\n return <>{null}\n }\n\n return (\n
  • \n
    \n
    \n {content}\n
    \n
    \n
  • \n );\n }\n};\n","// Send message form.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { Drafty } from 'tinode-sdk';\n\nimport { previewFormatter } from '../lib/formatters.js';\nimport { MIN_SWIPE_DISTANCE } from '../config.js';\n\nconst messages = defineMessages({\n message_not_found: {\n id: 'message_not_found',\n defaultMessage: 'message not found',\n description: 'Pinned message is not found'\n },\n message_deleted: {\n id: 'message_deleted',\n defaultMessage: 'message deleted',\n description: 'Pinned message is deleted'\n }\n});\n\nclass PinnedMessages extends React.PureComponent {\n constructor(props) {\n super(props);\n\n // Starting location of the touch gesture.\n this.touchX = null;\n this.touchY = null;\n\n this.touchSurface = React.createRef();\n\n this.getSelectedIndex = this.getSelectedIndex.bind(this);\n this.handleCancel = this.handleCancel.bind(this);\n this.handleSelected = this.handleSelected.bind(this);\n this.handleMoveNext = this.handleMoveNext.bind(this);\n this.handleMovePrev = this.handleMovePrev.bind(this);\n this.handleTouchEventStart = this.handleTouchEventStart.bind(this);\n this.handleTouchEventEnd = this.handleTouchEventEnd.bind(this);\n this.handleTouchCancel = this.handleTouchCancel.bind(this);\n }\n\n componentDidMount() {\n this.touchSurface.current.addEventListener('touchstart', this.handleTouchEventStart, {passive: true});\n this.touchSurface.current.addEventListener('touchend', this.handleTouchEventEnd, {passive: true});\n this.touchSurface.current.addEventListener('touchcancel', this.handleTouchCancel, {passive: true});\n }\n\n componentWillUnmount() {\n this.touchSurface.current.removeEventListener('touchstart', this.handleTouchEventStart);\n this.touchSurface.current.removeEventListener('touchend', this.handleTouchEventEnd);\n this.touchSurface.current.removeEventListener('touchcancel', this.handleTouchCancel);\n }\n getSelectedIndex() {\n const list = (this.props.pins || []);\n return list.length - this.props.selected - 1;\n }\n\n handleCancel(e) {\n e.preventDefault();\n this.props.onCancel(this.props.pins[this.getSelectedIndex()]);\n }\n\n handleSelected(e) {\n e.preventDefault();\n this.props.onSelected(this.props.pins[this.getSelectedIndex()]);\n }\n\n handleMoveNext(e, isTouch) {\n // Don't call preventDefault for touch events.\n isTouch || e.preventDefault();\n e.stopPropagation();\n const idx = Math.max(this.props.selected - 1, 0);\n if (idx != this.props.selected) {\n this.props.setSelected(idx);\n }\n }\n\n handleMovePrev(e, isTouch) {\n // Don't call preventDefault for touch events.\n isTouch || e.preventDefault();\n e.stopPropagation();\n const idx = Math.min(this.props.selected + 1, (this.props.pins || []).length - 1);\n if (idx != this.props.selected) {\n this.props.setSelected(idx);\n }\n }\n\n handleTouchEventStart(e) {\n if (e.touches.length == 1) {\n this.touchX = e.touches[0].clientX;\n this.touchY = e.touches[0].clientY;\n }\n }\n\n handleTouchEventEnd(e) {\n if (this.touchX === null || e.changedTouches.length != 1) {\n this.touchX = null;\n return;\n }\n\n const dX = this.touchX - e.changedTouches[0].clientX;\n const dY = this.touchY - e.changedTouches[0].clientY;\n this.touchX = null;\n\n if (Math.abs(dX) > Math.abs(dY) || Math.abs(dY) < MIN_SWIPE_DISTANCE) {\n // Horizontal swipe or too short vertical swipe.\n return;\n }\n\n if (dY > 0) {\n this.handleMovePrev(e, true);\n } else {\n this.handleMoveNext(e, true);\n }\n }\n\n handleTouchCancel() {\n this.touchX = null;\n }\n\n render() {\n const selected = this.getSelectedIndex();\n let messageShown = (this.props.messages || [])[selected];\n messageShown = messageShown ?\n messageShown._deleted ?\n {this.props.intl.formatMessage(messages.message_deleted)}\n :\n Drafty.format(messageShown.content, previewFormatter, {\n formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\n authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\n })\n :\n {this.props.intl.formatMessage(messages.message_not_found)};\n\n const dots = [];\n this.props.pins.forEach(seq => {\n const cn = dots.length == selected ? 'adot' : 'dot';\n dots.push(
    );\n });\n\n return (\n
    \n {this.props.isAdmin ?\n
    \n close\n
    :\n
    push_pin
    \n }\n
    {dots}
    \n

    {messageShown}

    \n
    \n \n {selected > 0 ?\n \n expand_less\n \n : null\n }\n \n \n {this.props.selected > 0 ?\n \n expand_more\n \n : null\n }\n \n
    \n
    \n );\n }\n}\n\nexport default injectIntl(PinnedMessages);\n","// Received/read indicator.\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Tinode } from 'tinode-sdk';\n\nimport { deliveryMarker } from '../lib/utils.js';\n\nconst messages = defineMessages({\n message_sending: {\n id: 'message_sending',\n defaultMessage: 'sending...',\n description: 'Message being sent, in place of time stamp'\n },\n message_sending_failed: {\n id: 'message_sending_failed',\n defaultMessage: 'failed',\n description: 'Failed to send message, in place of time stamp'\n },\n message_edited_marker: {\n id: 'message_edited_marker',\n defaultMessage: ', edited',\n description: 'Marker indicating that the message was edited'\n }\n});\n\nclass ReceivedMarker extends React.PureComponent {\n render() {\n const {formatMessage} = this.props.intl;\n let timestamp;\n if (this.props.received <= Tinode.MESSAGE_STATUS_SENDING) {\n timestamp = formatMessage(messages.message_sending);\n } else if (this.props.received == Tinode.MESSAGE_STATUS_FAILED ||\n this.props.received == Tinode.MESSAGE_STATUS_FATAL) {\n timestamp = formatMessage(messages.message_sending_failed);\n } else {\n timestamp = this.props.timestamp.toLocaleTimeString(this.props.intl.locale, { timeStyle: 'short' });\n }\n\n const icon = deliveryMarker(this.props.received);\n // icon.color is only set for the failed/read cases (deliveryMarker's other {name} results omit\n // the key entirely) -- string-concatenating it unconditionally put the literal text \"undefined\"\n // into the className for sending/sent/received messages.\n const marker = icon ? {icon.name} : null;\n const edited = this.props.edited ? formatMessage(messages.message_edited_marker) : null;\n\n return (\n \n {timestamp}{edited}{'\\u00a0'}{marker}\n \n );\n }\n};\n\nexport default injectIntl(ReceivedMarker);\n","// Send message form.\nimport React, { Suspense } from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { Drafty, TheCard } from 'tinode-sdk';\n\n// Lazy-loading AudioRecorder because it's quite large due to\n// a dependency on webm-duration-fix.\nconst AudioRecorder = React.lazy(_ => import('./audio-recorder.jsx'));\n\nimport { KEYPRESS_DELAY } from '../config.js';\nimport { filePasted } from '../lib/blob-helpers.js';\nimport { replyFormatter } from '../lib/formatters.js';\nimport { forwardFavorites, getFavorites, getFileUrl, getFriends, translateReason } from '../lib/im-api.js';\n\n// 4.5-4.6 表情面板:参考图确认了\"只有2个tab\"(😊表情 / ♡)和\"发送按钮浅蓝禁用、深蓝启用\"这两点,\n// 但没有任何一张图能看清第二个tab具体展示什么内容——判断为\"常用\"(这是这类两tab设计里最常见的\n// 语义,也是本项目其它地方唯一有本地存储依据能撑起来的一种:不存在一个真实的\"收藏表情\"后端概念)。\n// 表情本身的具体清单——纠正一处之前的误判:参考图`表情包展开(发送按钮默认状态).png`/`表情包\n// 发送页面.png`其实清楚画出了一套具体的经典\"黄脸\"贴图(微信/QQ经典表情那种视觉风格),不是没有\n// 图片依据。只是这个项目没有对应的贴图素材资源,做不到跟截图完全一致的视觉,退而求其次选了一组\n// 常见、覆盖面广的系统 Unicode 表情——这是素材缺口下的折中方案,不是\"没有依据、随便选的\"。\nconst EMOJI_LIST = ['😀', '😁', '😂', '🤣', '😃', '😄', '😅', '😆', '😉', '😊', '😋', '😎', '😍', '😘',\n '🥰', '😗', '😙', '😚', '🙂', '🤗', '🤩', '🤔', '🤨', '😐', '😑', '😶', '🙄', '😏', '😣', '😥', '😮',\n '🤐', '😯', '😪', '😫', '🥱', '😴', '😌', '😛', '😜', '😝', '🤤', '😒', '😓', '😔', '😕', '🙃', '🤑',\n '😲', '☹️', '🙁', '😖', '😞', '😟', '😤', '😢', '😭', '😦', '😧', '😨', '😩', '🤯', '😬', '😰', '😱',\n '🥵', '🥶', '😳', '🤪', '😵', '😡', '😠', '🤬', '😷', '🤒', '🤕', '🤢', '🤮', '🥳', '🥴', '🥺', '🤫',\n '🤭', '🧐', '🤓', '😈', '👿', '👍', '👎', '👏', '🙌', '🤝', '🙏', '💪', '❤️', '🧡', '💛', '💚', '💙',\n '💜', '🖤', '💔', '💕', '💯', '🔥', '🎉', '🎂', '🌹', '☀️', '🌙', '⭐'];\n// 跟 content-library-view.jsx 的 TYPE_LABEL 是同一套值(那边是 view 层,这边是 widget,不方便\n// 互相 import,就近各自维护一份小常量)。收藏摘要要优先读 snapshot.content.txt 这个结构化字段,\n// 不能像最初那版一样直接展示 snapshot.text——那是整条 content 原样 JSON.stringify 的结果\n// (例如 {\"txt\":\"...\"}),不是给人看的,之前联调时真被这个坑绊了一次才发现。\nconst FAVORITE_TYPE_LABEL = {image: '[图片]', video: '[视频]', voice: '[语音]', file: '[文件]', link: '[链接]', text: '[文本]'};\nfunction favoriteSummary(item) {\n // image/video/voice favorites' snapshot.content.txt is a placeholder single space in this\n // project's convention (confirmed via a real GET /favorites response) -- reading it as the\n // summary showed a blank line instead of a type label for these three types.\n if (item.type === 'image' || item.type === 'video' || item.type === 'voice') {\n return FAVORITE_TYPE_LABEL[item.type];\n }\n const content = item.snapshot && item.snapshot.content;\n // A text favorite's snapshot.content is a plain string, not a {txt:...} Drafty object --\n // content.txt on it is undefined, which used to fall through all the way to the internal\n // item.type value (\"text\") being shown to the user verbatim.\n if (typeof content === 'string' && content.trim()) return content;\n if (content && typeof content.txt === 'string' && content.txt.trim()) return content.txt;\n return FAVORITE_TYPE_LABEL[item.type] || item.type || item.favorite_id;\n}\nconst RECENT_EMOJI_KEY = 'im-recent-emoji';\nconst MAX_RECENT_EMOJI = 30;\nfunction loadRecentEmoji() {\n try {\n const raw = JSON.parse(localStorage.getItem(RECENT_EMOJI_KEY) || '[]');\n return Array.isArray(raw) ? raw : [];\n } catch (_) {\n return [];\n }\n}\nfunction pushRecentEmoji(emoji) {\n try {\n const list = [emoji].concat(loadRecentEmoji().filter(e => e !== emoji)).slice(0, MAX_RECENT_EMOJI);\n localStorage.setItem(RECENT_EMOJI_KEY, JSON.stringify(list));\n } catch (_) { /* ignore */ }\n}\n\nconst messages = defineMessages({\n messaging_disabled: {\n id: 'messaging_disabled_prompt',\n defaultMessage: 'Messaging disabled',\n description: 'Prompt in SendMessage in read-only topic'\n },\n type_new_message: {\n id: 'new_message_prompt',\n defaultMessage: 'New message',\n description: 'Prompt in send message field'\n },\n add_image_caption: {\n id: 'image_caption_prompt',\n defaultMessage: 'Image caption',\n description: 'Prompt in SendMessage for attached image'\n },\n file_attachment_too_large: {\n id: 'file_attachment_too_large',\n defaultMessage: 'The file size {size} exceeds the {limit} limit.',\n description: 'Error message when attachment is too large'\n },\n cannot_initiate_upload: {\n id: 'cannot_initiate_file_upload',\n defaultMessage: 'Cannot initiate file upload.',\n description: 'Generic error messagewhen attachment fails'\n },\n icon_title_record_voice: {\n id: 'icon_title_record_voice',\n defaultMessage: 'Record voice message',\n description: 'Icon tool tip for recording a voice message'\n },\n icon_title_attach_file: {\n id: 'icon_title_attach_file',\n defaultMessage: 'Attach file',\n description: 'Icon tool tip for attaching a file'\n },\n icon_title_add_image: {\n id: 'icon_title_add_image',\n defaultMessage: 'Add image',\n description: 'Icon tool tip for attaching an image'\n },\n icon_title_send: {\n id: 'icon_title_send',\n defaultMessage: 'Send message',\n description: 'Icon tool tip for sending a message'\n },\n});\n\nclass SendMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n quote: null,\n message: '',\n audioRec: false,\n audioAvailable: !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia),\n // @提醒选择器:mentionQuery 非 null 时显示面板;mentionStart 是触发这次匹配的\"@\"在\n // message 里的字符下标(不是 fmt/grapheme 下标,纯 JS 字符串下标,跟 slice 配对用)。\n mentionQuery: null,\n mentionResults: [],\n mentionHighlight: 0,\n emojiOpen: false,\n emojiTab: 'emoji',\n recentEmoji: loadRecentEmoji(),\n attachOpen: false,\n cardPicker: null,\n favPicker: null,\n audioCancelling: false,\n };\n\n // Timestamp when the previous key press was sent to the server.\n this.keypressTimestamp = 0;\n\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n this.handleAttachImage = this.handleAttachImage.bind(this);\n this.handleAttachFile = this.handleAttachFile.bind(this);\n this.handleAttachAudio = this.handleAttachAudio.bind(this);\n this.handleSend = this.handleSend.bind(this);\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleMessageTyping = this.handleMessageTyping.bind(this);\n this.handleDropAttach = this.handleDropAttach.bind(this);\n\n this.handleQuoteClick = this.handleQuoteClick.bind(this);\n this.selectMention = this.selectMention.bind(this);\n this.startHoldRecording = this.startHoldRecording.bind(this);\n this.handleHoldMove = this.handleHoldMove.bind(this);\n this.endHoldRecording = this.endHoldRecording.bind(this);\n this.handleHoldVisibilityChange = this.handleHoldVisibilityChange.bind(this);\n this.toggleEmojiPanel = this.toggleEmojiPanel.bind(this);\n this.insertEmoji = this.insertEmoji.bind(this);\n this.deleteLastChar = this.deleteLastChar.bind(this);\n this.toggleAttachPanel = this.toggleAttachPanel.bind(this);\n this.openCardPicker = this.openCardPicker.bind(this);\n this.openFavPicker = this.openFavPicker.bind(this);\n this.sendCard = this.sendCard.bind(this);\n this.sendFavorite = this.sendFavorite.bind(this);\n\n this.formatReply = this.formatReply.bind(this);\n }\n\n componentDidMount() {\n if (this.messageEditArea) {\n this.messageEditArea.addEventListener('paste', this.handlePasteEvent, false);\n if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\n this.messageEditArea.focus();\n }\n }\n\n this.setState({quote: this.formatReply()});\n }\n\n componentWillUnmount() {\n if (this.messageEditArea) {\n this.messageEditArea.removeEventListener('paste', this.handlePasteEvent, false);\n }\n if (this.mentionSearchTimer) {\n window.clearTimeout(this.mentionSearchTimer);\n }\n window.removeEventListener('mousemove', this.handleHoldMove);\n window.removeEventListener('mouseup', this.endHoldRecording);\n window.removeEventListener('touchmove', this.handleHoldMove);\n window.removeEventListener('touchend', this.endHoldRecording);\n window.removeEventListener('blur', this.endHoldRecording);\n document.removeEventListener('visibilitychange', this.handleHoldVisibilityChange);\n }\n\n componentDidUpdate(prevProps) {\n if (this.messageEditArea) {\n if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\n this.messageEditArea.focus();\n }\n\n // Adjust height of the message area for the amount of text.\n this.messageEditArea.style.height = '0px';\n this.messageEditArea.style.height = this.messageEditArea.scrollHeight + 'px';\n }\n\n if (prevProps.topicName != this.props.topicName) {\n this.setState({message: this.props.initMessage || '', audioRec: false, quote: null, mentionQuery: null,\n mentionResults: [], emojiOpen: false, attachOpen: false, cardPicker: null, favPicker: null});\n } else if (!prevProps.disabled && this.props.disabled && this.state.audioRec) {\n // isWriter/etc are real-time ACS bits (messages-view.jsx re-derives them from {pres}/{meta}),\n // so `disabled` can flip to true mid-recording -- the other party blocking you, being removed\n // from a group, or getting muted, all without the user releasing the hold-to-talk button first.\n // Unmounting here (rather than leaving it mounted under a now-hidden branch)\n // is what actually stops the mic via its componentWillUnmount; without this the recording just\n // sits there with `disabled` true and no surviving UI able to end it, and if `disabled` later\n // reverts to false in the same topic, this stale `true` would remount a fresh \n // with no user gesture at all -- silently starting to record again on its own.\n //\n // By the time this runs, React has already committed the `disabled` render and unmounted\n // (its ref callback nulled this.audioRecorderInstance), so endHoldRecording()'s\n // own handleDone/handleDelete call is a no-op here -- it's called anyway for the six\n // mousemove/mouseup/touchmove/touchend/blur/visibilitychange listeners startHoldRecording\n // registered on window/document, which endHoldRecording always removes unconditionally\n // regardless of whether the recorder instance is still around. Skipping this left them\n // dangling until the next real mouseup/touchend/blur/tab-switch happened to fire.\n this.endHoldRecording();\n this.setState({audioRec: false});\n } else if (prevProps.initMessage != this.props.initMessage) {\n const msg = this.props.initMessage || '';\n this.setState({message: msg}, _ => {\n // messageEditArea can be null here: initMessage (draft/edit content) can change while the\n // textarea itself is unmounted, e.g. noInput during an active forward, or disabled while\n // ACS is still resolving right after a topic switch.\n if (this.messageEditArea) {\n // If there is text, scroll to bottom and set caret to the end.\n this.messageEditArea.scrollTop = this.messageEditArea.scrollHeight;\n this.messageEditArea.setSelectionRange(msg.length, msg.length);\n }\n });\n }\n if (prevProps.reply != this.props.reply) {\n this.setState({quote: this.formatReply()});\n }\n }\n\n formatReply() {\n return this.props.reply ?\n Drafty.format(this.props.reply.content, replyFormatter, {\n formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\n authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\n }) : null;\n }\n\n handlePasteEvent(e) {\n if (this.props.disabled) {\n return;\n }\n // onAttachImage/onAttachFile are explicitly null while forwarding a message\n // (messages-view.jsx) -- pasting a file in that state used to throw\n // \"onAttachImage is not a function\" instead of just not attaching anything.\n // FIXME: handle large files too.\n if (filePasted(e,\n file => { if (this.props.onAttachImage) { this.props.onAttachImage(file); } },\n file => { if (this.props.onAttachFile) { this.props.onAttachFile(file); } },\n this.props.onError)) {\n\n // If a file was pasted, don't paste base64 data into input field.\n e.preventDefault();\n }\n }\n\n handleAttachImage(e) {\n if (e.target.files && e.target.files.length > 0 && this.props.onAttachImage) {\n this.props.onAttachImage(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleAttachFile(e) {\n if (e.target.files && e.target.files.length > 0 && this.props.onAttachFile) {\n this.props.onAttachFile(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleDropAttach(files) {\n if (files && files.length > 0 && this.props.onAttachFile) {\n this.props.onAttachFile(files[0]);\n }\n }\n\n handleAttachAudio(url, preview, duration) {\n this.setState({audioRec: false});\n if (this.props.onAttachAudio) {\n this.props.onAttachAudio(url, preview, duration);\n }\n }\n\n handleSend(e) {\n e.preventDefault();\n const message = this.state.message.trim();\n if (message || this.props.acceptBlank || this.props.noInput) {\n const result = this.props.onSendMessage(message);\n // onSendMessage may return a promise resolving to `false` when a pre-send risk check blocked\n // or the user cancelled it -- in that case keep the composer text so nothing typed is lost.\n if (result && typeof result.then == 'function') {\n result.then(sent => { if (sent !== false) this.setState({message: ''}); });\n } else {\n this.setState({message: ''});\n }\n }\n }\n\n /* Send on Enter key */\n handleKeyPress(e) {\n if (this.state.audioRec) {\n // Ignore key presses while audio is being recorded.\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n if (this.state.mentionQuery != null) {\n if (e.key === 'Escape') {\n e.preventDefault();\n this.setState({mentionQuery: null, mentionResults: []});\n return;\n }\n if (this.state.mentionResults.length > 0 && (e.key === 'ArrowDown' || e.key === 'ArrowUp')) {\n e.preventDefault();\n const delta = e.key === 'ArrowDown' ? 1 : -1;\n const count = this.state.mentionResults.length;\n this.setState({mentionHighlight: (this.state.mentionHighlight + delta + count) % count});\n return;\n }\n if (e.key === 'Enter' && this.state.mentionResults.length > 0) {\n e.preventDefault();\n e.stopPropagation();\n this.selectMention(this.state.mentionResults[this.state.mentionHighlight]);\n return;\n }\n }\n\n // Enter pressed: either send, or enter a new line.\n if (e.key === 'Enter') {\n if (this.props.sendOnEnter == 'plain') {\n // Have Shift-Enter insert a line break instead\n if (!e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this.handleSend(e);\n }\n } else {\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this.handleSend(e);\n }\n }\n }\n }\n\n handleMessageTyping(e) {\n this.setState({message: e.target.value});\n this.updateMentionState(e.target.value, e.target.selectionStart);\n if (this.props.onMessageChange) {\n this.props.onMessageChange(e.target.value);\n }\n if (this.props.onKeyPress) {\n const now = new Date().getTime();\n if (now - this.keypressTimestamp > KEYPRESS_DELAY) {\n this.props.onKeyPress();\n this.keypressTimestamp = now;\n }\n }\n }\n\n // 4.2-4.3 @提醒:只在群聊里挂 onMentionSearch(messages-view.jsx 只给群话题传这个 prop)。\n // 触发条件是\"光标前最近一个'@','@'前面是空白或整段开头,'@'和光标之间没有空白\"——这样\n // \"联系xx@xx.com\"这种邮箱场景里的@不会被误当成提醒触发。\n updateMentionState(text, caret) {\n if (!this.props.onMentionSearch || caret == null) {\n return;\n }\n const before = text.slice(0, caret);\n const match = /(?:^|\\s)@([^\\s@]*)$/.exec(before);\n if (!match) {\n if (this.state.mentionQuery != null) {\n this.setState({mentionQuery: null, mentionResults: []});\n }\n return;\n }\n const query = match[1];\n const start = caret - query.length - 1;\n this.setState({mentionQuery: query, mentionStart: start, mentionHighlight: 0});\n if (this.mentionSearchTimer) {\n window.clearTimeout(this.mentionSearchTimer);\n }\n this.mentionSearchTimer = window.setTimeout(() => {\n this.props.onMentionSearch(query).then(results => {\n // mentionQuery may have moved on (user kept typing, or closed the picker) by the time this\n // resolves -- only apply it if we're still showing a picker at all, matching the same\n // stale-response guard used everywhere else responses race state.\n if (this.state.mentionQuery != null) {\n this.setState({mentionResults: results || []});\n }\n }).catch(() => {});\n }, 200);\n }\n\n selectMention(item) {\n const {message, mentionStart, mentionQuery} = this.state;\n if (mentionStart == null || mentionQuery == null) {\n return;\n }\n const name = item.group_nickname || item.display_name || item.user_id;\n const insertion = '@' + name + ' ';\n const end = mentionStart + 1 + mentionQuery.length;\n const newMessage = message.slice(0, mentionStart) + insertion + message.slice(end);\n const caretPos = mentionStart + insertion.length;\n this.setState({message: newMessage, mentionQuery: null, mentionResults: []});\n if (this.props.onMentionSelected) {\n this.props.onMentionSelected(item.user_id, name);\n }\n if (this.props.onMessageChange) {\n this.props.onMessageChange(newMessage);\n }\n // Textarea's own DOM value needs the same update -- setState alone re-renders with the right\n // `value` prop, but the caret placement below needs the element's real value/selection to\n // already match, and doing it in the same tick (rather than waiting on the render) avoids a\n // visible flash of the stale text with the caret in the wrong place.\n requestAnimationFrame(() => {\n if (this.messageEditArea) {\n this.messageEditArea.focus();\n this.messageEditArea.setSelectionRange(caretPos, caretPos);\n }\n });\n }\n\n handleQuoteClick(e) {\n e.preventDefault();\n e.stopPropagation();\n if (this.props.reply && this.props.onQuoteClick) {\n const replyToSeq = this.props.reply.seq;\n this.props.onQuoteClick(replyToSeq);\n }\n }\n\n // 组合面板图标切换规律(核对图片确认):表情/附件两个入口固定在输入框右侧;哪个面板当前\n // 展开,对应的那个图标就变成\"⌨\"(点击收起换回键盘),另一个保持原样不变——不是两个一起变。\n // 这里只做了表情这一侧,附件面板(4.13/4.9-4.14)另外接线时要遵守同一条规则,不要各自发明。\n toggleEmojiPanel(e) {\n e.preventDefault();\n this.setState(s => ({emojiOpen: !s.emojiOpen, attachOpen: false, audioRec: false}));\n }\n\n insertEmoji(emoji) {\n const ta = this.messageEditArea;\n const start = ta ? ta.selectionStart : this.state.message.length;\n const end = ta ? ta.selectionEnd : this.state.message.length;\n const newMessage = this.state.message.slice(0, start) + emoji + this.state.message.slice(end);\n pushRecentEmoji(emoji);\n this.setState({message: newMessage, recentEmoji: loadRecentEmoji()});\n if (this.props.onMessageChange) {\n this.props.onMessageChange(newMessage);\n }\n const caretPosEmoji = start + emoji.length;\n requestAnimationFrame(() => {\n if (this.messageEditArea) {\n this.messageEditArea.focus();\n this.messageEditArea.setSelectionRange(caretPosEmoji, caretPosEmoji);\n }\n });\n }\n\n // 参考图的表情面板自带一个退格键,让\"只点表情不碰键盘\"这条路径也能删掉打错的字符——用\n // Array.from 而不是 slice(0,-1) 切最后一个 Unicode 码点,避免把一个占两个UTF-16码元的emoji\n // (比如复合肤色/家庭类emoji)齐腰斩断,删出半个乱码字符。\n deleteLastChar() {\n const ta = this.messageEditArea;\n const start = ta ? ta.selectionStart : this.state.message.length;\n const end = ta ? ta.selectionEnd : this.state.message.length;\n let newMessage, caretPos;\n if (start !== end) {\n newMessage = this.state.message.slice(0, start) + this.state.message.slice(end);\n caretPos = start;\n } else if (start > 0) {\n const before = Array.from(this.state.message.slice(0, start));\n before.pop();\n newMessage = before.join('') + this.state.message.slice(start);\n caretPos = before.join('').length;\n } else {\n return;\n }\n this.setState({message: newMessage});\n if (this.props.onMessageChange) {\n this.props.onMessageChange(newMessage);\n }\n requestAnimationFrame(() => {\n if (this.messageEditArea) {\n this.messageEditArea.focus();\n this.messageEditArea.setSelectionRange(caretPos, caretPos);\n }\n });\n }\n\n toggleAttachPanel(e) {\n e.preventDefault();\n this.setState(s => ({attachOpen: !s.attachOpen, emojiOpen: false}));\n }\n\n // 3.12/4.9-4.14 发名片:选一个好友,生成一张只含姓名+头像+该好友 uid 的名片消息发到当前会话。\n // uid 必须用 TheCard.setTinodeID 写进 comm 数组(vCard 的\"tinode\"协议项),不是随便塞进某个\n // 字段——widgets/the-card-mini.jsx 点开这张卡片时用 TheCard.getFirstTinodeID(card) 读这个\n // 协议项来判断\"发消息\"按钮该指向谁,写错地方那个按钮会永远不出现。\n openCardPicker(e) {\n e.preventDefault();\n this.setState({attachOpen: false, cardPicker: {loading: true}});\n getFriends().then(data => {\n this.setState({cardPicker: {loading: false, items: data.items || []}});\n }).catch(() => this.setState({cardPicker: {loading: false, items: [], error: true}}));\n }\n\n sendCard(item) {\n this.setState({cardPicker: null});\n const build = avatarUrl => {\n const card = new TheCard(item.display_name || item.user_id, avatarUrl);\n TheCard.setTinodeID(card, item.user_id);\n // Every other attachment sender (image/video/file/voice) threads a typeHint through to\n // messages-view.jsx's sendMessage(msg, uploadCompletionPromise, uploader, typeHint) so the\n // backend's imMessageType() classifier -- which only ever looks at head['x-im-type'] or a flat\n // content.file_id/url, never at real Drafty entities -- doesn't fall through to its \"text\"\n // default. This call was only ever passing the first argument, so every card message has been\n // silently misclassified as plain text (confirmed live: search/history summarize it as raw\n // Drafty JSON instead of a name).\n this.props.onSendMessage(Drafty.appendTheCard(null, card), undefined, undefined, 'card');\n };\n if (item.avatar_file_id) {\n getFileUrl(item.avatar_file_id).then(build).catch(() => build(undefined));\n } else {\n build(undefined);\n }\n }\n\n // 收藏发送:走的是 Ch.7 已有的 forwardFavorites REST 接口(转发收藏的同一个接口,目标只给\n // 当前会话一个),不经过 onSendMessage/Drafty——收藏本来就是后端已经存好快照的独立资源,\n // 不是本地新拼一条消息。\n openFavPicker(e) {\n e.preventDefault();\n this.setState({attachOpen: false, favPicker: {loading: true}});\n getFavorites({type: 'all'}).then(data => {\n this.setState({favPicker: {loading: false, items: data.items || []}});\n }).catch(() => this.setState({favPicker: {loading: false, items: [], error: true}}));\n }\n\n sendFavorite(item) {\n this.setState({favPicker: null});\n if (!this.props.topicName) {\n return;\n }\n // 这个接口恒定 200,真实成败要看 items[].status(跟批量收藏/批量转发是同一套设计,全局代码\n // 审查那一轮已经在其它几处调用点踩过同一个坑并修过——这是新写的这处,同样的坑要一起避开,\n // 不能只 .catch 网络层错误就当万事大吉。联调时真的用这条路径测出过 200 OK 但\n // items[0].status:\"failed\"、reason:\"PERMISSION_DENIED\" 的情况(对方是真实好友、这个会话\n // 本身正常能发消息),看起来是后端这个接口自己的权限判断有问题,不是本地能修的,如实报错\n // 而不是假装发送成功。\n forwardFavorites([item.favorite_id], [this.props.topicName]).then(result => {\n const failed = (result && result.items || []).filter(r => r.status === 'failed');\n if (failed.length && this.props.onError) {\n this.props.onError('发送失败:' + (translateReason(failed[0].reason) || failed[0].reason || '未知原因'), 'err');\n }\n }).catch(err => {\n if (this.props.onError) {\n this.props.onError((err && err.message) || '发送失败', 'err');\n }\n });\n }\n\n // 4.7-4.9 按住说话 + 上滑取消:mousedown/touchstart 直接挂载 AudioRecorder(挂载即开始录音,\n // 这一步跟原来点一下进入录音模式完全一样,没有改 AudioRecorder 自己的录音逻辑),松手时通过\n // ref 直接调它的 handleDone/handleDelete——这两个方法本来是绑给它自己按钮的 onClick,要求一个\n // 带 preventDefault 的事件对象,这里传一个最小的假事件满足这个要求,除此之外没有更深地伸手进\n // 它的内部状态。上滑距离阈值 80px 是参照大多数同类应用(微信等)的常见取值,没有对应的可验证\n // 数值来源,明确记录不是抄的哪个具体规格。\n startHoldRecording(e) {\n e.preventDefault();\n if (this.state.audioRec) {\n return;\n }\n this.holdStartY = 'touches' in e ? (e.touches[0] && e.touches[0].clientY) : e.clientY;\n this.setState({audioRec: true, audioCancelling: false, emojiOpen: false, attachOpen: false});\n window.addEventListener('mousemove', this.handleHoldMove);\n window.addEventListener('mouseup', this.endHoldRecording);\n window.addEventListener('touchmove', this.handleHoldMove, {passive: false});\n window.addEventListener('touchend', this.endHoldRecording);\n // mouseup/touchend only fire for a release point still inside this window/tab -- dragging the\n // pointer out of the browser entirely, switching tabs/apps, or a permission prompt stealing\n // focus (e.g. the very getUserMedia prompt this recording itself triggered, on a second call)\n // all leave the mic running with no further event this listener pair will ever see. Ending the\n // recording (same finish-or-cancel logic as a normal release, per the cancel-zone check) on\n // either signal is a safer default than waiting indefinitely for a mouseup that may never come.\n window.addEventListener('blur', this.endHoldRecording);\n document.addEventListener('visibilitychange', this.handleHoldVisibilityChange);\n }\n\n handleHoldVisibilityChange() {\n if (document.hidden) {\n this.endHoldRecording();\n }\n }\n\n handleHoldMove(e) {\n const y = 'touches' in e ? (e.touches[0] && e.touches[0].clientY) : e.clientY;\n if (y == null || this.holdStartY == null) {\n return;\n }\n const cancelling = (this.holdStartY - y) > 80;\n if (cancelling !== this.state.audioCancelling) {\n this.setState({audioCancelling: cancelling});\n }\n }\n\n endHoldRecording() {\n window.removeEventListener('mousemove', this.handleHoldMove);\n window.removeEventListener('mouseup', this.endHoldRecording);\n window.removeEventListener('touchmove', this.handleHoldMove);\n window.removeEventListener('touchend', this.endHoldRecording);\n window.removeEventListener('blur', this.endHoldRecording);\n document.removeEventListener('visibilitychange', this.handleHoldVisibilityChange);\n this.holdStartY = null;\n const fakeEvent = {preventDefault: () => {}};\n if (this.audioRecorderInstance) {\n if (this.state.audioCancelling) {\n this.audioRecorderInstance.handleDelete(fakeEvent);\n } else {\n this.audioRecorderInstance.handleDone(fakeEvent);\n }\n }\n }\n\n render() {\n const { formatMessage } = this.props.intl;\n const prompt = this.props.disabled ?\n formatMessage(messages.messaging_disabled) :\n (this.props.messagePrompt ?\n formatMessage(messages[this.props.messagePrompt]) :\n formatMessage(messages.type_new_message));\n\n const sendIcon = (this.props.reply && this.props.reply.editing) ?\n 'check_circle' : 'send';\n\n const quote = this.state.quote ?\n () : null;\n const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;\n const mentionPanel = this.state.mentionQuery != null ?\n (
    \n {this.state.mentionResults.length === 0 ?\n
    无匹配成员
    :\n this.state.mentionResults.map((item, i) => (\n
    { e.preventDefault(); this.selectMention(item); }}\n onMouseEnter={() => this.setState({mentionHighlight: i})}>\n {item.group_nickname || item.display_name || item.user_id}\n
    \n ))}\n
    ) : null;\n return (\n
    \n {!this.props.noInput ? quote : null}\n {mentionPanel}\n
    \n {!this.props.disabled ?\n <>\n {this.props.noInput ?\n (quote ||
    ) :\n (this.state.audioRec ?\n (
    }>\n {this.audioRecorderInstance = ref;}}\n holdMode={true}\n cancelling={this.state.audioCancelling}\n onRecordingProgress={_ => this.props.onKeyPress(true)}\n onDeleted={_ => this.setState({audioRec: false})}\n onFinished={this.handleAttachAudio}/>\n ) :\n