/* V4.3.101: Google Fonts import removed (it leaked every visitor IP to Google); system fonts are used. */500;600;700&family=Noto+Sans+Arabic:wght@400;500;600;700&family=Noto+Sans+Bengali:wght@400;500;600;700&family=Noto+Sans+Devanagari:wght@400;500;600;700&family=Noto+Sans+Thai:wght@400;500;600;700&family=Noto+Sans+Hebrew:wght@400;500;600;700&display=swap');
:root{--bg:#0b1118;--side:#0e151d;--chat:#0b1219;--line:#1b2732;--text:#eef3f7;--muted:#728293;--accent:#2aabee;--bubble:#17232e;--mine:#195d78}*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;font-family:Inter,'Noto Sans Arabic','Noto Sans Devanagari','Noto Sans Bengali','Noto Sans Thai','Noto Sans Hebrew',system-ui,sans-serif;background:var(--bg);color:var(--text)}body{overflow:hidden}button,input,textarea{font:inherit}button{cursor:pointer}.hidden{display:none!important}
.auth{height:100%;min-height:100%;display:grid;place-items:center;background:radial-gradient(circle at 15% 30%,#18304755,transparent 32%),radial-gradient(circle at 90% 70%,#123c3c3d,transparent 30%),#0b1118}.authShell{width:min(980px,92vw);min-height:620px;display:grid;grid-template-columns:1fr 420px;gap:70px;align-items:center}.authBrand{position:absolute;top:28px;left:32px;display:flex;gap:10px;align-items:center;font-size:15px}.authBrand span{width:34px;height:34px;border-radius:10px;background:#f3f7fa;color:#0d141b;display:grid;place-items:center;font-weight:800}.authIntro{padding-left:35px}.authKicker{font-size:10px;letter-spacing:2px;color:#6e8396;font-weight:700}.authIntro h1{font-size:54px;line-height:1.02;letter-spacing:-2.7px;margin:18px 0}.authIntro p{color:#718396;max-width:400px;line-height:1.7;font-size:14px}.authBox{width:420px}.authBox h2{font-size:27px;margin:0 0 5px;letter-spacing:-.8px}.hint{color:#718396;font-size:12px;margin:0 0 25px}.authBox label{display:block;color:#8b9aab;font-size:11px;margin:16px 0}.authBox input,.authBox textarea{width:100%;border:0;border-bottom:1px solid #2a3845;background:transparent;color:#fff;outline:none;padding:10px 2px;border-radius:0}.authBox input:focus,.authBox textarea:focus{border-color:#6cabc7}.prefix{display:flex;align-items:center;border-bottom:1px solid #2a3845}.prefix input{border:0}.prefix span{color:#637487}.langPicker{position:relative;margin-top:4px}.langPicker>button{width:100%;border:0;border-bottom:1px solid #2a3845;background:transparent;color:#fff;padding:10px 2px;display:flex;justify-content:space-between}.langMenu{display:none;position:absolute;z-index:40;left:0;right:0;top:100%;margin-top:7px;background:#121c25;border:1px solid #293845;border-radius:13px;overflow:hidden;box-shadow:0 20px 70px #000b}.langPicker.open .langMenu{display:block}.langMenu>input{background:#0d151d;border:0;padding:12px}.langMenu>div{max-height:260px;overflow:auto}.langMenu button{width:100%;border:0;background:transparent;color:#e9eef2;padding:10px 13px;display:flex;justify-content:space-between;text-align:left}.langMenu button:hover{background:#1a2834}.langMenu small{color:#607488}.addEmail{margin-top:20px;width:100%;border:0;background:transparent;color:#aebbc6;padding:0;display:flex;align-items:center;gap:8px;text-align:left}.addEmail span{font-size:18px}.addEmail small{margin-left:auto;color:#647588}.emailWrap{max-height:0;opacity:0;transform:translateY(-10px);overflow:hidden;transition:max-height .25s ease,opacity .2s ease,transform .25s ease}.emailWrap.show{max-height:110px;opacity:1;transform:none}.emailWrap p{font-size:10px;color:#647689;margin:7px 0}.primary,.secondary{width:100%;border:0;border-radius:11px;padding:13px 15px;margin-top:19px;font-weight:600}.primary{background:#f1f5f8;color:#0d151d}.primary span{float:right}.secondary{background:#1a3443;color:#e8f0f4}.textBtn{width:100%;border:0;background:transparent;color:#7890a4;padding:12px;margin-top:4px}.tabs{display:flex;border-bottom:1px solid var(--line);margin:20px 0}.tabs button{flex:1;border:0;border-bottom:2px solid transparent;background:transparent;color:#708397;padding:11px}.tabs .on{color:#fff;border-color:var(--accent)}
.messenger{width:100%;height:100%;display:grid;grid-template-columns:330px 1fr;background:var(--chat)}.sidebar{position:relative;display:flex;flex-direction:column;background:var(--side);border-right:1px solid var(--line);min-width:0}.sideHead{height:64px;display:flex;align-items:center;padding:0 14px;gap:10px}.myAvatar{width:35px;height:35px;border:0;border-radius:11px;background:#f1f5f8;color:#0c151d;font-weight:800}.brandName{font-weight:700;font-size:14px;letter-spacing:.5px}.newChatBtn{margin-left:auto;width:35px;height:35px;border:0;border-radius:11px;background:#172632;color:#a9c0cf;font-size:22px}.search{margin:0 11px 12px;height:39px;border-radius:10px;background:#16212b;display:flex;align-items:center;padding:0 11px;color:#687b8d}.search input{width:100%;border:0;outline:0;background:transparent;color:#fff;padding:0 7px;font-size:12px}.sectionTitle{padding:0 15px 8px;color:#566b7e;font-size:10px;text-transform:uppercase;letter-spacing:1.2px}.users{overflow:auto;padding:0 6px}.user{width:100%;display:flex;align-items:center;gap:10px;border:0;background:transparent;color:#fff;padding:9px;border-radius:10px;text-align:left}.user:hover,.user.active{background:#17232d}.user small{display:block;color:#64788b;font-size:9px;margin-top:3px}.noChats{text-align:center;color:#65798c;font-size:11px;padding:40px 20px;line-height:1.8}.noChats button{border:0;background:transparent;color:#2aabee}.sideFoot{margin-top:auto;border-top:1px solid var(--line);padding:7px;display:flex}.sideFoot button{flex:1;border:0;background:transparent;color:#6e8295;padding:10px;font-size:11px}.chat{position:relative;display:flex;flex-direction:column;min-width:0;background:var(--chat)}.chatHead{height:64px;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 17px;gap:11px}.avatar{width:41px;height:41px;border-radius:13px;display:grid;place-items:center;color:#fff;font-weight:700;flex:none}.peer{display:flex;flex-direction:column}.peer b{font-size:13px}.peer small{font-size:9px;color:#6e8294;margin-top:4px}.iconBtn{margin-left:auto;border:0;background:transparent;color:#8295a7;font-size:15px;padding:10px}.back{display:none;border:0;background:transparent;color:#9aabba;font-size:29px}.messages{flex:1;overflow:auto;padding:25px 9%;display:flex;flex-direction:column;gap:4px;background:radial-gradient(circle at 50% 0,#15212b3d,transparent 42%)}.empty{margin:auto;text-align:center;color:#6d8091}.emptyLogo{margin:auto;width:48px;height:48px;border-radius:15px;background:#17242e;display:grid;place-items:center;font-weight:800}.empty h2{font-size:19px;color:#dbe4ea;margin:13px 0 4px}.empty p{font-size:11px;margin:0}.bubble{max-width:min(620px,72%);align-self:flex-start;background:var(--bubble);border-radius:15px 15px 15px 4px;padding:8px 11px;line-height:1.5;font-size:13px;word-break:break-word;white-space:pre-wrap}.bubble.me{align-self:flex-end;background:var(--mine);border-radius:15px 15px 4px 15px}.bubble span{float:right;color:#8ea0ae;font-size:8px;margin:6px 0 0 9px}.composer{display:flex;gap:6px;align-items:center;padding:9px 12px;border-top:1px solid var(--line);background:#0f171f}.composer input{height:42px;flex:1;border:0;outline:0;border-radius:11px;background:#17232d;color:#fff;padding:0 13px;font-size:12px}.attach,.send{width:42px;height:42px;border:0;border-radius:11px}.attach{background:transparent;color:#7890a2;font-size:22px}.send{background:#2aabee;color:#fff;font-weight:800}
.menu{position:absolute;z-index:30;display:none;background:#121c25;border:1px solid #273743;border-radius:12px;box-shadow:0 18px 60px #000a;overflow:hidden;padding:5px}.menu.show{display:block}.menu button{display:block;width:190px;text-align:left;border:0;background:transparent;color:#dbe3e9;padding:10px 12px;border-radius:8px;font-size:11px}.menu button:hover{background:#1c2a35}.accountMenu{top:52px;left:10px}.chatMenu{right:12px;top:55px}.modal{position:fixed;inset:0;z-index:70;background:#0009;display:grid;place-items:center;padding:18px}.modalBox{position:relative;width:min(440px,100%);background:#111b24;border:1px solid #263641;border-radius:17px;padding:25px;box-shadow:0 30px 100px #000b}.modalBox.compact{width:min(390px,100%)}.modalClose{position:absolute;right:12px;top:10px;border:0;background:transparent;color:#758a9b;font-size:22px}.modalIcon{width:42px;height:42px;border-radius:13px;background:#192934;display:grid;place-items:center;color:#9fc2d5;font-size:23px}.modalBox h2{margin:13px 0 5px}.modalBox p{color:#758899;font-size:11px;line-height:1.7}.choice{width:100%;display:flex;align-items:center;gap:12px;background:#16232d;color:#fff;border:0;border-radius:12px;padding:13px;margin-top:9px;text-align:left}.choice>span{font-size:22px;color:#8eafc0}.choice b,.choice small{display:block}.choice small{color:#6f8293;font-size:9px;margin-top:4px}.bigInput{width:100%;background:#0d151c;border:1px solid #2b3b47;color:#fff;border-radius:11px;padding:13px;outline:0;margin-top:10px}.scannerBox{width:min(440px,100%)}#qr-reader{width:100%;margin-top:15px;border:0!important}#qr-reader__scan_region{border-radius:12px;overflow:hidden}#qr-reader button{background:#1a3443!important;color:#fff!important;border:0!important;border-radius:8px!important;padding:8px!important}.words{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:17px 0}.words div{background:#0d151d;border:1px solid #22303c;border-radius:8px;padding:8px;font-size:11px}.words b{color:#627688;margin-right:7px}.profileBox{text-align:center}.profileTop .avatar{margin:auto}.profileTop h2{margin-bottom:0}.profileTop p{margin-top:4px}.qrWrap{margin:16px auto 12px;background:#fff;width:196px;height:196px;border-radius:15px;display:grid;place-items:center}.qrWrap canvas{border-radius:5px}.shareCode{background:#0d151d;border:1px solid #23323e;border-radius:12px;padding:10px;text-align:left}.shareCode small{display:block;color:#687d8f;font-size:9px}.shareCode b{display:block;font-family:ui-monospace,monospace;font-size:12px;letter-spacing:.4px;margin:7px 0;color:#dbe6ed}.shareCode button{border:0;background:#1a3342;color:#a9c8d7;border-radius:7px;padding:6px 9px;font-size:9px}.profileRows{text-align:left;border-top:1px solid var(--line);margin-top:14px}.profileRows div{display:flex;justify-content:space-between;padding:11px 0;font-size:10px}.profileRows span{color:#718496}.profileRows b{font-weight:500}.toast{position:fixed;z-index:100;left:50%;bottom:24px;transform:translate(-50%,14px);background:#eef3f6;color:#0d151d;padding:10px 15px;border-radius:10px;font-size:11px;opacity:0;pointer-events:none;transition:.2s}.toast.show{opacity:1;transform:translate(-50%,0)}
@media(max-width:820px){.authShell{display:block;width:100%;padding:80px 28px 30px}.authIntro{display:none}.authBox{width:min(430px,100%);margin:auto}.authBrand{top:22px;left:22px}.messenger{display:block}.sidebar{height:100%;border:0}.chat{position:absolute;inset:0;transform:translateX(100%);transition:transform .22s ease}.chat.mobileOpen{transform:none}.back{display:block}.messages{padding:18px 12px}.bubble{max-width:86%}.sideFoot{padding-bottom:max(7px,env(safe-area-inset-bottom))}}

/* SENTUAL interaction and mobile polish */
textarea#message{height:42px;min-height:42px;max-height:132px;resize:none;line-height:20px;padding-top:10px;padding-bottom:10px;overflow-y:auto}
.menu{animation:menuIn .13s ease-out;transform-origin:top left}
@keyframes menuIn{from{opacity:0;transform:translateY(-4px) scale(.98)}to{opacity:1;transform:none}}
.modal{overflow:auto}
.filePreviewBox{width:min(520px,100%);padding:20px}
.previewTitle{font-size:17px;font-weight:700;margin-bottom:14px}
.attachmentPreview{min-height:120px;max-height:390px;border-radius:14px;background:#0b1219;border:1px solid #243440;display:flex;align-items:center;justify-content:center;overflow:hidden;margin-bottom:12px}
.attachmentPreview img,.attachmentPreview video{display:block;max-width:100%;max-height:360px;object-fit:contain}
.attachmentPreview audio{width:92%}
.attachmentFile{display:flex;align-items:center;gap:12px;padding:20px;width:100%}.attachmentFileIcon{width:48px;height:48px;border-radius:14px;background:#1b2b36;display:grid;place-items:center;font-size:22px}.attachmentFile b{display:block}.attachmentFile small{display:block;color:#738797;margin-top:4px}
.captionInput{width:100%;border:1px solid #2a3b47;background:#111b23;color:#fff;border-radius:12px;padding:11px 12px;outline:none;resize:none;min-height:54px}.captionInput:focus{border-color:#397f9f}
.previewActions{display:flex;gap:8px;align-items:center}.previewActions .textBtn{width:auto;flex:1}.previewActions .primary{width:auto;min-width:130px}
.profileModal{padding:0}.profileModal .profileBox{max-height:min(760px,calc(100vh - 36px));overflow:auto}
@media(max-width:820px){
  .modal.profileModal{padding:0;display:block;background:var(--bg)}
  .profileModal .profileBox{width:100%;height:100dvh;max-height:none;border:0;border-radius:0;padding:24px 20px calc(28px + env(safe-area-inset-bottom));box-shadow:none;display:flex;flex-direction:column;justify-content:flex-start;overflow:auto}
  .profileModal .modalClose{top:max(12px,env(safe-area-inset-top));right:14px;width:40px;height:40px;border-radius:12px;background:#17232d;z-index:2}
  .profileModal .profileTop{padding-top:28px}
  .profileModal .qrWrap{width:180px;height:180px;margin:18px auto 14px}
  .profileModal .shareCode{margin-bottom:4px}
  .profileModal .profileRows{margin-top:8px}
  .profileModal .secondary{flex:none}
  .filePreviewBox{width:100%;height:auto;min-height:100dvh;border:0;border-radius:0;box-shadow:none;padding:24px 16px calc(24px + env(safe-area-inset-bottom));justify-content:flex-start}
  .filePreviewBox .modalClose{top:12px;right:12px}
  .attachmentPreview{min-height:180px;max-height:55vh}
}
@media(min-width:821px){.profileModal .profileBox{width:430px}}

.fileCaption{display:block;color:#a8b7c3;font-size:11px;margin-top:6px;white-space:pre-wrap;line-height:1.45}.filePreview b{display:block}.filePreview small{display:block;color:#738797;font-size:9px;margin-top:3px}

/* SENTUAL interaction patch */
.pinnedBar{position:absolute;top:64px;left:0;right:0;z-index:12;display:flex;align-items:center;gap:10px;padding:8px 16px;background:color-mix(in srgb,var(--chat) 92%,#2aabee 8%);border-bottom:1px solid var(--line);box-shadow:0 8px 20px #0002}.pinnedBar>div{min-width:0;display:flex;flex-direction:column}.pinnedBar small{font-size:9px;color:#2aabee}.pinnedBar b{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pinnedBar button{margin-left:auto;border:0;background:transparent;color:var(--muted);font-size:17px}.pinGlyph{color:#2aabee}.messageContextMenu{min-width:190px}.messageContextMenu button{width:180px}.confirmBox{width:min(420px,calc(100vw - 32px));text-align:center;padding:28px}.confirmIcon{width:46px;height:46px;margin:0 auto 12px;border-radius:50%;display:grid;place-items:center;background:#1b3341;color:#8eb7ca;font-weight:800}.confirmBox h2{font-size:18px}.confirmBox p{margin:7px 0 20px}.confirmActions{display:flex;justify-content:center;gap:9px}.confirmActions button{min-width:100px;border:0;border-radius:10px;padding:11px 18px;font-weight:700}.confirmNo{background:#26333d;color:#b8c5ce}.confirmYes{background:#2aabee;color:#fff}.danger.confirmYes{background:#d95c63}.isPinned{outline:1px solid #2aabee55}.qrWrap img{display:block;width:180px;height:180px;object-fit:contain;border-radius:5px}.hidden{display:none!important}
:root[data-theme="light"] .pinnedBar{background:#edf4f8}.confirmBox{background:var(--side)}:root[data-theme="light"] .confirmBox{background:#fff;color:#18212b}:root[data-theme="light"] .confirmNo{background:#edf1f4;color:#394752}:root[data-theme="light"] .confirmYes{background:#2589c9;color:#fff}
@media(max-width:820px){.pinnedBar{top:calc(64px + env(safe-area-inset-top));padding:8px 12px}.confirmBox{border-radius:18px;padding:26px 20px}.messageContextMenu{min-width:180px}}

/* ===== SENTUAL targeted visual fixes ===== */
.pixelAvatar{background-size:50px 50px!important;background-position:center;background-repeat:no-repeat;background-color:transparent!important;image-rendering:pixelated}
.officialBadge{display:inline-grid;place-items:center;width:14px;height:14px;margin-inline-start:5px;border-radius:50%;background:#2aabee;color:#fff;font-size:9px;font-weight:900;vertical-align:middle}
.searchGroupTitle{padding:8px 15px 5px;color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:1.1px}
.searchResult{margin-bottom:2px;position:relative}
.messageSearchResult{padding-right:70px}
.messageSearchResult time{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:8px;color:var(--muted);white-space:nowrap}
.sessionsPane{display:block;text-align:left}
.sessionsPane.hidden{display:none!important}
.sessionsHeader{display:flex;align-items:center;gap:10px;margin-bottom:16px}
.sessionsHeader h2{margin:0;font-size:20px}
.sessionsHeader p{margin:4px 0 0;color:var(--muted);font-size:10px}
.sessionsBack{width:36px;height:36px;border:0;border-radius:10px;background:#17232d;color:var(--text);font-size:25px}
.sessionsList{display:grid;gap:8px;margin-top:12px;max-height:58vh;overflow:auto}
.sessionRow{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--surface,#17232d);border:1px solid var(--line);border-radius:12px;padding:12px}
.sessionInfo{min-width:0}.sessionInfo b{display:block;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sessionInfo small{display:block;color:var(--muted);font-size:9px;margin-top:4px;line-height:1.5}
.sessionLogout{width:34px;height:34px;border:0;border-radius:10px;background:#fee8e8;color:#d94b4b;font-size:15px;flex:none}
:root[data-theme="light"] .sessionsBack{background:#eef2f5;color:#18232d}
:root[data-theme="light"] .sessionRow{background:#fff;border-color:#dce4ea}
:root[data-theme="light"] .sessionLogout{background:#fff0f0;color:#d24d4d}
:root[data-theme="light"] .messageSearchResult time{color:#7a8792}
@media(max-width:820px){
  .profileModal .profileBox{padding-top:24px}
  .sessionsPane{min-height:calc(100dvh - 48px)}
  .sessionsList{max-height:none;overflow:visible}
  .sessionsHeader{padding-top:8px}
  .sessionsBack{width:40px;height:40px}
  .messageSearchResult{padding-right:58px}
  .messageSearchResult time{font-size:7px}
}

/* Final interaction fixes */
.user{position:relative;cursor:pointer}.userMain{min-width:0;flex:1}.userMore{margin-left:auto;flex:0 0 30px;width:30px;height:30px;border:0;border-radius:9px;background:transparent;color:var(--muted);font-size:14px;opacity:.7}.userMore:hover{background:var(--line);opacity:1}
.contextTime{padding:8px 12px 6px;border-top:1px solid var(--line);color:var(--muted);font-size:9px;white-space:nowrap}.messageContextMenu{padding-bottom:4px}.userContextMenu{min-width:220px}
.blockedNotice{margin:auto;text-align:center;color:var(--muted);max-width:360px;padding:30px}.blockedNoticeIcon{width:52px;height:52px;border-radius:16px;background:#26343d;color:#e36d73;display:grid;place-items:center;margin:0 auto 14px;font-size:28px}.blockedNotice h2{color:var(--text);font-size:18px;margin:0 0 6px}.blockedNotice p{margin:0;font-size:11px}
.blockedComposer{flex:1;text-align:center;color:#d96b6b;font-size:12px;padding:11px 12px}.composer.blocked .attach,.composer.blocked textarea,.composer.blocked .send{display:none}.composer.blocked{justify-content:center}
@media(max-width:820px){.userMore{width:34px;height:34px}.contextMenu{max-width:calc(100vw - 16px)}.messageContextMenu{min-width:190px}.blockedNotice{padding:24px}}

/* SENTUAL final UI precision pass */
html,body,#auth,#messenger{touch-action:pan-x pan-y;overscroll-behavior:none;-webkit-text-size-adjust:100%;}
input,textarea,select{font-size:16px;}
.user{min-height:58px;}
.userMore{margin-left:auto;display:grid;place-items:center;background:transparent!important;color:var(--muted);font-size:16px;line-height:1;opacity:.9;}
.userMore:hover{background:var(--line)!important;color:var(--text);}
.searchResult{width:100%;background:transparent!important;color:var(--text)!important;border:0!important;box-shadow:none!important;text-align:left;}
.searchResult:hover{background:var(--side)!important;}
.messageSearchResult{width:100%;}
.messageContextMenu button{font-size:12px!important;padding:11px 12px!important;min-height:38px;}
.messageContextTime{border-top:1px solid var(--line);margin:5px 5px 0;padding:7px 7px 3px;color:var(--muted);font-size:9px!important;line-height:1.35;white-space:nowrap;}
.contextTime{font-size:9px!important;}
.menu button,.choice,.primary,.secondary,.textBtn,.walletAdd,.walletSend,.sessionsBack,.sessionLogout,.themeToggle,.modalClose,.attach,.send,.newChatBtn{transition:background .16s ease,border-color .16s ease,color .16s ease,transform .12s ease,opacity .16s ease;}
.menu button:active,.choice:active,.primary:active,.secondary:active,.walletAdd:active,.walletSend:active,.sessionsBack:active,.sessionLogout:active,.themeToggle:active,.attach:active,.send:active,.newChatBtn:active{transform:scale(.98);}
.menu button{border:0;border-radius:9px;background:transparent;}
.modalClose{width:34px;height:34px;display:grid;place-items:center;border-radius:10px;}
.modalClose:hover{background:var(--line)!important;color:var(--text)!important;}
.attach{background:#17232d!important;color:#9ab0bf!important;border:1px solid #24333f!important;}
.attach:hover{background:#1d2c38!important;color:var(--text)!important;}
.send{border:0!important;box-shadow:0 6px 18px #168ac233;}
.themeToggle{position:absolute;left:18px;top:18px;width:40px;height:40px;border:1px solid var(--line);border-radius:11px;display:grid;place-items:center;background:var(--surface,#17232d);color:var(--text);}
.themeToggle svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;}
@media(max-width:820px){.searchResult{min-height:58px;padding:9px!important;}.userMore{width:34px;height:34px;}.messageContextMenu button{font-size:12px!important;min-height:40px;}.profileModal .themeToggle{left:18px;}}

/* ===== SENTUAL universal scrollbar system ===== */
html, body, #auth, #messenger, .sidebar, .users, .chat, .messages, .composer, .composer textarea,
.menu, .langMenu>div, .profileBox, .sessionsPane, .sessionsList, .walletList, .modalBox, .filePreviewBox,
.attachmentPreview, #qr-reader, .words, .managementBox {
  scrollbar-width: thin;
  scrollbar-color: #304b5b transparent;
}

html::-webkit-scrollbar, body::-webkit-scrollbar, #auth::-webkit-scrollbar, #messenger::-webkit-scrollbar,
.sidebar::-webkit-scrollbar, .users::-webkit-scrollbar, .chat::-webkit-scrollbar, .messages::-webkit-scrollbar,
.composer::-webkit-scrollbar, .composer textarea::-webkit-scrollbar, .menu::-webkit-scrollbar,
.langMenu>div::-webkit-scrollbar, .profileBox::-webkit-scrollbar, .sessionsPane::-webkit-scrollbar,
.sessionsList::-webkit-scrollbar, .walletList::-webkit-scrollbar, .modalBox::-webkit-scrollbar,
.filePreviewBox::-webkit-scrollbar, .attachmentPreview::-webkit-scrollbar, #qr-reader::-webkit-scrollbar,
.words::-webkit-scrollbar, .managementBox::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}

html::-webkit-scrollbar-track, body::-webkit-scrollbar-track, #auth::-webkit-scrollbar-track, #messenger::-webkit-scrollbar-track,
.sidebar::-webkit-scrollbar-track, .users::-webkit-scrollbar-track, .chat::-webkit-scrollbar-track, .messages::-webkit-scrollbar-track,
.composer::-webkit-scrollbar-track, .composer textarea::-webkit-scrollbar-track, .menu::-webkit-scrollbar-track,
.langMenu>div::-webkit-scrollbar-track, .profileBox::-webkit-scrollbar-track, .sessionsPane::-webkit-scrollbar-track,
.sessionsList::-webkit-scrollbar-track, .walletList::-webkit-scrollbar-track, .modalBox::-webkit-scrollbar-track,
.filePreviewBox::-webkit-scrollbar-track, .attachmentPreview::-webkit-scrollbar-track, #qr-reader::-webkit-scrollbar-track,
.words::-webkit-scrollbar-track, .managementBox::-webkit-scrollbar-track {
  background: transparent;
}

html::-webkit-scrollbar-thumb, body::-webkit-scrollbar-thumb, #auth::-webkit-scrollbar-thumb, #messenger::-webkit-scrollbar-thumb,
.sidebar::-webkit-scrollbar-thumb, .users::-webkit-scrollbar-thumb, .chat::-webkit-scrollbar-thumb, .messages::-webkit-scrollbar-thumb,
.composer::-webkit-scrollbar-thumb, .composer textarea::-webkit-scrollbar-thumb, .menu::-webkit-scrollbar-thumb,
.langMenu>div::-webkit-scrollbar-thumb, .profileBox::-webkit-scrollbar-thumb, .sessionsPane::-webkit-scrollbar-thumb,
.sessionsList::-webkit-scrollbar-thumb, .walletList::-webkit-scrollbar-thumb, .modalBox::-webkit-scrollbar-thumb,
.filePreviewBox::-webkit-scrollbar-thumb, .attachmentPreview::-webkit-scrollbar-thumb, #qr-reader::-webkit-scrollbar-thumb,
.words::-webkit-scrollbar-thumb, .managementBox::-webkit-scrollbar-thumb {
  background: #304b5b;
  border-radius: 999px;
  border: 2px solid transparent;
  background-clip: padding-box;
}

html::-webkit-scrollbar-thumb:hover, body::-webkit-scrollbar-thumb:hover, #auth::-webkit-scrollbar-thumb:hover, #messenger::-webkit-scrollbar-thumb:hover,
.sidebar::-webkit-scrollbar-thumb:hover, .users::-webkit-scrollbar-thumb:hover, .chat::-webkit-scrollbar-thumb:hover, .messages::-webkit-scrollbar-thumb:hover,
.composer::-webkit-scrollbar-thumb:hover, .composer textarea::-webkit-scrollbar-thumb:hover, .menu::-webkit-scrollbar-thumb:hover,
.langMenu>div::-webkit-scrollbar-thumb:hover, .profileBox::-webkit-scrollbar-thumb:hover, .sessionsPane::-webkit-scrollbar-thumb:hover,
.sessionsList::-webkit-scrollbar-thumb:hover, .walletList::-webkit-scrollbar-thumb:hover, .modalBox::-webkit-scrollbar-thumb:hover,
.filePreviewBox::-webkit-scrollbar-thumb:hover, .attachmentPreview::-webkit-scrollbar-thumb:hover, #qr-reader::-webkit-scrollbar-thumb:hover,
.words::-webkit-scrollbar-thumb:hover, .managementBox::-webkit-scrollbar-thumb:hover {
  background: #496474;
  border-radius: 999px;
  border: 2px solid transparent;
  background-clip: padding-box;
}

/* The composer itself stays fixed; only a growing message field may scroll. */
.composer textarea {
  flex: 1;
  min-width: 0;
  min-height: 42px;
  max-height: 132px;
  resize: none;
  overflow-y: auto;
  overflow-x: hidden;
  border: 0;
  outline: 0;
  border-radius: 11px;
  background: #17232d;
  color: #fff;
  padding: 10px 13px;
  font-size: 12px;
  line-height: 1.45;
}
.composer textarea:focus { background: #192630; }

:root[data-theme="light"] .composer textarea {
  background: #fff;
  color: #18232d;
}
:root[data-theme="light"] .composer textarea:focus { background: #fff; }

/* Keep the sessions list scrollable on mobile instead of disabling its scrollbar. */
@media(max-width:820px){
  .sessionsList{
    max-height:calc(100dvh - 150px);
    overflow:auto;
    padding-right:2px;
  }
  .profileModal .profileBox{
    overflow-y:auto;
    overflow-x:hidden;
  }
}


/* ===== SENTUAL mobile long-press / search jump ===== */
.bubble{touch-action:pan-y;user-select:text;-webkit-user-select:text;}
.searchJumpTarget{animation:sentualSearchJump 1.1s ease-out;}
@keyframes sentualSearchJump{
  0%{outline:2px solid #2aabee;outline-offset:3px;}
  100%{outline:2px solid transparent;outline-offset:3px;}
}
@media(max-width:820px){
  .bubble{touch-action:pan-y;}
}

/* SENTUAL v4 — automatic RTL/LTR message rendering */
.bubble[dir="auto"]{unicode-bidi:plaintext;text-align:start;}
#message[dir="auto"]{unicode-bidi:plaintext;text-align:start;}
.fileCaption{unicode-bidi:plaintext;text-align:start;}

/* ===== SENTUAL v5: attachment cards + notifications ===== */
.bubble.file{
  width:min(390px,76%);
  max-width:min(390px,76%);
  padding:0!important;
  overflow:hidden;
  border:1px solid color-mix(in srgb,var(--line) 78%,#2aabee 22%);
  background:color-mix(in srgb,var(--bubble) 93%,#2aabee 7%);
  color:var(--text);
  text-align:left;
  box-shadow:0 4px 14px rgba(0,0,0,.08);
}
.bubble.file.me{background:color-mix(in srgb,var(--mine) 92%,#2aabee 8%)}
.filePreview{display:grid!important;grid-template-columns:48px minmax(0,1fr);align-items:center;gap:11px;padding:11px 12px;min-height:68px}
.filePreview .fileIcon{width:48px!important;height:48px!important;border-radius:14px!important;background:color-mix(in srgb,#2aabee 18%,var(--chat) 82%)!important;color:#71c9ef;font-size:19px;display:grid;place-items:center;border:1px solid #2aabee2e}
.filePreview>span:last-child{min-width:0;display:block}
.filePreview b{font-size:12px;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text)}
.filePreview small{font-size:9px!important;color:var(--muted)!important;margin-top:5px!important;letter-spacing:.01em}
.fileCaption{font-style:normal;margin-top:7px!important;padding-top:7px;border-top:1px solid var(--line);font-size:11px!important;color:var(--text)!important;white-space:pre-wrap;overflow-wrap:anywhere}
:root[data-theme="light"] .bubble.file{background:#eef4f8;border-color:#d9e4ea;box-shadow:0 3px 12px #2637470b}
:root[data-theme="light"] .bubble.file.me{background:#dff2fc}
:root[data-theme="light"] .filePreview .fileIcon{background:#dcecf5!important;color:#187ea9}
.notificationBox{text-align:left}.notificationActions{display:flex;gap:9px;justify-content:flex-end;margin-top:18px}.notificationActions .secondary,.notificationActions .primary{width:auto;margin:0;min-width:120px}.notificationGlyph{font-size:22px}
@media(max-width:820px){.bubble.file{width:min(360px,88%);max-width:88%}.notificationActions{flex-direction:column-reverse}.notificationActions .secondary,.notificationActions .primary{width:100%}}
.fileMessageTime{display:block!important;float:none!important;text-align:right!important;padding:0 11px 7px;margin:0!important;font-size:8px!important;color:var(--muted)!important}

/* v6 attachment layout: never inherit the message timestamp span rules. */
.bubble.attachmentCard{width:360px;max-width:85%;white-space:normal;border:1px solid var(--line);border-radius:18px 18px 18px 5px;padding:0!important;overflow:hidden}
.bubble.attachmentCard.me{border-radius:18px 18px 5px 18px}
.attachmentCard .filePreview{grid-template-columns:54px minmax(0,1fr);gap:13px;padding:15px;min-height:84px}
.attachmentCard .fileIcon{width:54px!important;height:54px!important;display:grid!important;place-items:center;border-radius:15px!important;background:#2aabee24;color:#76d4ff;flex:none}
.attachmentCard .fileIcon svg{display:block;width:27px;height:27px}
.attachmentCard .fileDetails{min-width:0;text-align:start}
.attachmentCard .fileDetails b{display:block;font-size:16px!important;font-weight:650;line-height:1.4;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.attachmentCard .fileDetails small{display:block;font-size:11px!important;line-height:1.5;margin-top:5px!important;color:var(--muted)!important;direction:ltr}
.attachmentCard .attachmentCaption{padding:10px 14px 5px;white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.6;text-align:start}
.attachmentCard .fileMessageTime{font-size:10px!important;padding:5px 12px 8px}
.inlineMedia{width:100%;overflow:hidden}.inlineMedia:empty{min-height:140px}
.inlineMedia img,.inlineMedia video{display:block;width:100%;max-height:420px;object-fit:contain;background:#080d12}
.photoOpen{display:block;width:100%;padding:0;border:0;background:transparent;cursor:zoom-in}
.inlineMedia audio{display:block;width:calc(100% - 24px);height:42px;margin:0 12px 8px;color-scheme:dark}
.mediaStatus{display:block;width:100%;padding:28px 14px;border:0;color:var(--muted);background:transparent;font-size:12px;text-align:center}
.mediaStatus a{color:var(--accent)}.mediaExpand{border:0;background:transparent;color:var(--accent);padding:8px 12px;font-size:11px}
.mediaViewer{position:fixed;inset:0;width:100vw;max-width:none;height:100dvh;max-height:none;border:0;margin:0;padding:76px 20px 20px;background:#080d12f5;color:white;overflow:auto;text-align:center}
.mediaViewer::backdrop{background:#000c}.mediaViewer header{position:fixed;top:0;left:0;right:0;display:flex;align-items:center;gap:20px;padding:16px 22px;background:#0b1219;z-index:1;text-align:left}
.mediaViewer header b{margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px}.mediaViewer a{color:#76d4ff;font-size:13px}.mediaViewer button{border:0;background:#ffffff12;color:white;border-radius:10px;width:40px;height:40px;font-size:28px}
.mediaViewer>img,.mediaViewer>video{max-width:100%;max-height:calc(100dvh - 110px);object-fit:contain;margin:auto}.mediaViewer>img{cursor:zoom-in}.mediaViewer>img.zoomed{max-width:none;max-height:none;cursor:zoom-out}
.user b .unreadDot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#ff4b5d;margin-inline-start:8px;vertical-align:middle;flex:none}
:root[data-theme="light"] .inlineMedia audio{color-scheme:light}
@media(max-width:820px){.bubble.attachmentCard{max-width:92%}.attachmentCard .fileDetails b{font-size:15px!important}.mediaViewer{padding:76px 8px 12px}}


/* v7 scrollbar fallback for builds that load app.css directly */
*{scrollbar-width:thin;scrollbar-color:#365363 transparent}
*::-webkit-scrollbar{width:8px;height:8px}
*::-webkit-scrollbar-button{display:none;width:0;height:0}
*::-webkit-scrollbar-track{background:transparent}
*::-webkit-scrollbar-thumb{background:#365363;border:2px solid transparent;background-clip:padding-box;border-radius:999px}
*::-webkit-scrollbar-thumb:hover{background:#4a6a7b;border:2px solid transparent;background-clip:padding-box}

/* ===== SENTUAL v9 targeted fixes: one unread dot, sessions back, stable attachment cards ===== */
.sessionsPane{position:relative!important;text-align:left!important;padding-top:0!important}
.sessionsHeader{position:relative!important;display:flex!important;align-items:flex-start!important;min-height:46px!important;padding:0 0 0 50px!important;margin:0 0 16px!important}
.sessionsHeader>div{min-width:0!important;padding-top:1px!important}
.sessionsHeader h2{margin:0!important;font-size:20px!important;line-height:1.25!important;color:var(--text)!important}
.sessionsHeader p{margin:5px 0 0!important;color:var(--muted)!important;font-size:10px!important}
.sessionsBack{position:absolute!important;left:0!important;top:0!important;width:38px!important;height:38px!important;display:grid!important;place-items:center!important;padding:0!important;margin:0!important;border:1px solid var(--line)!important;border-radius:11px!important;background:var(--bubble)!important;color:var(--text)!important;box-shadow:none!important}
.sessionsBack svg{width:19px!important;height:19px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.9!important;stroke-linecap:round!important;stroke-linejoin:round!important}
.sessionsBack:hover{background:#1d2b36!important;border-color:#315064!important}
:root[data-theme="light"] .sessionsBack{background:#edf2f5!important;color:#1c2a34!important;border-color:#d6e0e7!important}
:root[data-theme="light"] .sessionsBack:hover{background:#e4ebef!important}

/* Attachment cards must never collapse to border-only lines. */
.bubble.file.attachmentCard{display:flex!important;flex-direction:column!important;flex:0 0 auto!important;width:min(380px,85%)!important;min-width:240px!important;min-height:82px!important;height:auto!important;max-height:none!important;padding:0!important;overflow:hidden!important;visibility:visible!important;opacity:1!important;border:1px solid #2a4050!important;border-radius:17px 17px 17px 5px!important;background:var(--bubble)!important;color:var(--text)!important}
.bubble.file.attachmentCard.me{align-self:flex-end!important;border-radius:17px 17px 5px 17px!important;background:var(--mine)!important;border-color:#2f718a!important}
.attachmentCard .filePreview{display:grid!important;grid-template-columns:50px minmax(0,1fr)!important;align-items:center!important;width:100%!important;min-height:76px!important;height:auto!important;padding:12px 13px!important;gap:12px!important;overflow:visible!important;visibility:visible!important;opacity:1!important}
.attachmentCard .fileIcon{display:grid!important;place-items:center!important;width:50px!important;height:50px!important;min-width:50px!important;min-height:50px!important;float:none!important;margin:0!important;border-radius:14px!important;background:#2aabee20!important;color:#77d4ff!important;border:1px solid #2aabee2c!important}
.attachmentCard .fileIcon svg{display:block!important;width:26px!important;height:26px!important;fill:none!important;stroke:currentColor!important}
.attachmentCard .fileDetails{display:block!important;min-width:0!important;width:100%!important;height:auto!important;overflow:hidden!important;visibility:visible!important;opacity:1!important;float:none!important;text-align:start!important}
.attachmentCard .fileDetails b{display:block!important;max-width:100%!important;color:var(--text)!important;font-size:13px!important;font-weight:650!important;line-height:1.35!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}
.attachmentCard .fileDetails small{display:block!important;margin-top:5px!important;color:var(--muted)!important;font-size:9px!important;line-height:1.35!important;direction:ltr!important;white-space:nowrap!important}
.attachmentCard .inlineMedia{display:grid!important;place-items:center!important;width:100%!important;min-height:150px!important;height:auto!important;overflow:hidden!important;background:#080e14!important;border-bottom:1px solid #24343f!important}
.attachmentCard.attachment-audio .inlineMedia{min-height:64px!important;padding:10px 0 0!important;background:transparent!important;border-bottom:0!important}
.attachmentCard .mediaStatus{display:grid!important;place-items:center!important;width:100%!important;min-height:80px!important;padding:18px!important;color:var(--muted)!important;background:transparent!important;border:0!important}
.attachmentCard .attachmentCaption{display:block!important;width:100%!important;height:auto!important;padding:9px 13px 4px!important;color:var(--text)!important;white-space:pre-wrap!important;overflow-wrap:anywhere!important}
.attachmentCard .fileMessageTime{display:block!important;align-self:flex-end!important;padding:4px 11px 8px!important;margin:0!important;color:#8ea0ae!important;font-size:9px!important;line-height:1!important;float:none!important}
:root[data-theme="light"] .bubble.file.attachmentCard{background:#f4f8fb!important;border-color:#d3e0e7!important}
:root[data-theme="light"] .bubble.file.attachmentCard.me{background:#dff3fb!important;border-color:#b7dce9!important}
:root[data-theme="light"] .attachmentCard .inlineMedia{background:#eef3f6!important;border-color:#d3e0e7!important}
@media(max-width:820px){.sessionsHeader{padding-left:50px!important}.sessionsBack{width:40px!important;height:40px!important}.bubble.file.attachmentCard{width:min(350px,92%)!important;min-width:220px!important;max-width:92%!important}}



/* ===== SENTUAL v10: sidebar scrolling, stable hover, wallet cards ===== */
.sidebar{min-height:0;overflow:hidden}
.users{flex:1 1 auto;min-height:0;overflow-y:auto!important;overflow-x:hidden!important;overscroll-behavior:contain;padding-bottom:8px;scrollbar-gutter:stable}
.user{transition:background-color .14s ease,color .14s ease!important;will-change:background-color;-webkit-tap-highlight-color:transparent}
.user:hover{background:color-mix(in srgb,var(--text) 7%,transparent)!important}
.user.active,.user.active:hover{background:transparent!important}
.user:active{background:color-mix(in srgb,var(--text) 9%,transparent)!important;transform:none!important}
.user:focus{outline:none}.user:focus-visible{outline:1px solid color-mix(in srgb,var(--accent) 45%,transparent);outline-offset:-1px}
:root[data-theme="light"] .user:hover{background:#e7edf1!important}
:root[data-theme="light"] .user.active,:root[data-theme="light"] .user.active:hover{background:transparent!important}
.walletBox{max-height:min(720px,calc(100dvh - 36px));display:flex;flex-direction:column;overflow:hidden}
.walletList{min-height:0;max-height:470px;overflow-y:auto;overflow-x:hidden;padding-right:3px;scrollbar-gutter:stable}
.walletMessage{display:flex!important;flex-direction:column!important;gap:10px;min-width:220px;max-width:min(360px,76%)!important;padding:12px!important;white-space:normal!important;border:1px solid color-mix(in srgb,var(--accent) 20%,var(--line));background:color-mix(in srgb,var(--bubble) 95%,var(--accent) 5%)!important}
.walletMessage.me{background:color-mix(in srgb,var(--mine) 92%,var(--accent) 8%)!important}
.walletMessageHead{display:flex;align-items:center;gap:10px;min-width:0}
.walletMessageIcon{float:none!important;width:42px;height:42px;margin:0!important;display:grid;place-items:center;flex:none;border-radius:13px;background:color-mix(in srgb,var(--accent) 18%,var(--chat));color:#74d0f7;font-size:20px}
.walletMessageHead>div{min-width:0;flex:1}.walletMessageHead small{display:block;color:var(--muted);font-size:9px;line-height:1.2}.walletMessageHead b{display:block;margin-top:3px;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--text)}
.walletCopyAddress{width:100%;height:38px;border:1px solid color-mix(in srgb,var(--accent) 23%,var(--line));border-radius:11px;background:linear-gradient(180deg,color-mix(in srgb,var(--text) 7%,transparent),color-mix(in srgb,var(--text) 3%,transparent));color:var(--text);font-size:11px;font-weight:600;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);transition:background .14s ease,border-color .14s ease}
.walletCopyAddress:hover{background:linear-gradient(180deg,color-mix(in srgb,var(--text) 11%,transparent),color-mix(in srgb,var(--text) 5%,transparent));border-color:color-mix(in srgb,var(--accent) 42%,var(--line))}
.walletCopyAddress:disabled{opacity:.45;cursor:default}
.walletMessageTime{align-self:flex-end;color:var(--muted);font-size:9px;line-height:1;margin-top:-2px}
:root[data-theme="light"] .walletMessage{background:#f4f8fb!important;border-color:#d4e1e8}.walletMessage.me:where(:root[data-theme="light"] *){background:#dff2fb!important}
:root[data-theme="light"] .walletMessageIcon{background:#dcecf5;color:#187ea9}:root[data-theme="light"] .walletCopyAddress{background:#ffffffa8;border-color:#d3e0e7;color:#1d2b35}
@media(max-width:820px){.walletMessage{max-width:88%!important}.walletBox{max-height:100dvh}.walletList{max-height:calc(100dvh - 250px)}}

:root[data-theme="light"] .walletMessage.me{background:#dff2fb!important;border-color:#b9dce8!important}


/* ===== SENTUAL v11: spacing, simple wallet message, statistics ===== */
.users .user + .user{margin-top:2px}
.walletTextBubble{white-space:normal!important}
.walletTextLabel{font-weight:600;line-height:1.45;white-space:pre-wrap;overflow-wrap:anywhere}
.walletInlineAddress{display:block;appearance:none;-webkit-appearance:none;max-width:100%;margin:3px 0 0;padding:0;border:0;background:transparent;color:inherit;font:inherit;font-size:12px;line-height:1.5;text-align:start;direction:ltr;unicode-bidi:plaintext;white-space:normal;overflow-wrap:anywhere;cursor:pointer;border-radius:4px}
.walletInlineAddress:hover{color:#bfe9fb;text-decoration:underline;text-underline-offset:2px}
.walletInlineAddress:focus-visible{outline:1px solid color-mix(in srgb,var(--accent) 55%,transparent);outline-offset:2px}
:root[data-theme="light"] .walletInlineAddress:hover{color:#0e6f96}
.statsBox{width:min(620px,calc(100vw - 36px));max-height:min(760px,calc(100dvh - 36px));overflow:auto}
.statsTotal{display:flex;align-items:center;justify-content:space-between;margin:17px 0 14px;padding:15px 16px;border:1px solid var(--line);border-radius:13px;background:var(--bubble)}
.statsTotal span{font-size:11px;color:var(--muted)}.statsTotal b{font-size:24px;letter-spacing:-.5px;color:var(--text)}
.statsTableWrap{overflow:auto;border:1px solid var(--line);border-radius:13px;scrollbar-gutter:stable}
.statsTable{width:100%;border-collapse:collapse;min-width:500px;background:var(--chat)}
.statsTable th,.statsTable td{padding:12px 14px;border-bottom:1px solid var(--line);font-size:11px;text-align:right;color:var(--text);white-space:nowrap}
.statsTable thead th{font-size:9px;text-transform:uppercase;letter-spacing:.7px;color:var(--muted);font-weight:600;background:color-mix(in srgb,var(--bubble) 82%,transparent)}
.statsTable th:first-child,.statsTable td:first-child{text-align:left}.statsTable tbody th{font-weight:600}.statsTable tr:last-child th,.statsTable tr:last-child td{border-bottom:0}
.statsLoading{text-align:center!important;color:var(--muted)!important;padding:24px!important}
:root[data-theme="light"] .statsTotal,:root[data-theme="light"] .statsTable{background:#f5f8fa}
@media(max-width:820px){.statsBox{width:100%;height:100dvh;max-height:none;border:0;border-radius:0;padding:72px 16px calc(22px + env(safe-area-inset-bottom))}.statsBox .modalClose{top:max(18px,env(safe-area-inset-top));right:18px}.statsTableWrap{max-width:100%}}


/* ===== SENTUAL v12: selection + non-sticky conversation press state ===== */
html,body,body *{
  -webkit-user-select:none!important;
  user-select:none!important;
  -webkit-touch-callout:none;
}
#chat .messages,#chat .messages *,#chat .composer textarea,#chat .composer input{
  -webkit-user-select:text!important;
  user-select:text!important;
  -webkit-touch-callout:default;
}



/* ===== SENTUAL v13: protected displayed media ===== */
#profileQr,
#messages .inlineMedia img,#messages .inlineMedia video,
.mediaViewer>img,.mediaViewer>video,
#attachmentPreview img,#attachmentPreview video{
  -webkit-touch-callout:none!important;
  -webkit-user-drag:none!important;
  user-drag:none!important;
  user-select:none!important;
  -webkit-user-select:none!important;
}
.mediaViewer .mediaViewerDownload{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:36px;padding:0 13px;border:1px solid #2aabee55;
  border-radius:10px;background:#2aabee18;color:#9bdfff!important;
  text-decoration:none;font-size:11px!important;font-weight:600;
  transition:background .15s ease,border-color .15s ease,transform .15s ease;
}
.mediaViewer .mediaViewerDownload:hover{background:#2aabee2b;border-color:#2aabee88}
.mediaViewer .mediaViewerDownload:active{transform:scale(.97)}

/* ===== SENTUAL v15: minimal attachment composer ===== */
.attachmentModal{padding:18px;background:color-mix(in srgb,#02070b 72%,transparent);backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px)}
.filePreviewBox{width:min(480px,calc(100vw - 36px));min-height:0!important;max-height:calc(100dvh - 36px);padding:16px!important;border:1px solid var(--line)!important;border-radius:22px!important;background:var(--side)!important;color:var(--text)!important;box-shadow:0 28px 90px #0008;overflow:auto!important;display:block!important}
.filePreviewHeader{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:13px;padding:1px 1px 0}
.filePreviewHeader>div{min-width:0}.filePreviewHeader .previewTitle{margin:0!important;color:var(--text)!important;font-size:16px!important;font-weight:700;letter-spacing:-.2px;line-height:1.3}.previewSubtitle{margin-top:3px;color:var(--muted);font-size:10px;line-height:1.35}
.filePreviewBox .previewClose{position:static!important;flex:none;width:34px;height:34px;padding:0;border:1px solid var(--line)!important;border-radius:11px!important;background:var(--bubble)!important;color:var(--muted)!important;font-size:19px!important;line-height:1;display:grid;place-items:center;transition:background .14s ease,color .14s ease,transform .14s ease}.filePreviewBox .previewClose:hover{background:color-mix(in srgb,var(--bubble) 88%,var(--text) 12%)!important;color:var(--text)!important}.filePreviewBox .previewClose:active{transform:scale(.96)}
.attachmentPreview{width:100%;min-height:190px!important;max-height:46dvh!important;margin:0!important;border:1px solid var(--line)!important;border-radius:17px!important;background:var(--chat)!important;overflow:hidden;display:grid!important;place-items:center!important;position:relative}.attachmentPreview img,.attachmentPreview video{display:block!important;width:auto!important;max-width:100%!important;height:auto!important;max-height:46dvh!important;object-fit:contain!important;border-radius:0!important}.attachmentPreview video{background:var(--chat)}.attachmentPreview audio{width:calc(100% - 28px)!important;margin:18px 14px;color-scheme:dark}.attachmentAudioPanel{width:100%;min-height:190px;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:18px;padding:24px}.attachmentAudioGlyph,.attachmentPlaceholder{width:62px;height:62px;border-radius:18px;background:color-mix(in srgb,var(--accent) 14%,var(--bubble));border:1px solid color-mix(in srgb,var(--accent) 24%,var(--line));color:var(--accent);display:grid;place-items:center;font-size:25px}.attachmentPlaceholder{margin:54px auto}
.attachmentMeta{display:flex;align-items:center;gap:10px;min-width:0;margin:10px 0 11px;padding:9px 10px;border:1px solid var(--line);border-radius:13px;background:color-mix(in srgb,var(--bubble) 78%,transparent)}.attachmentMetaIcon{width:34px;height:34px;flex:none;border-radius:10px;background:color-mix(in srgb,var(--accent) 13%,var(--chat));color:var(--accent);display:grid;place-items:center;font-size:14px}.attachmentMetaText{min-width:0;flex:1}.attachmentMetaText b{display:block;color:var(--text);font-size:11px;font-weight:600;line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.attachmentMetaText small{display:block;margin-top:3px;color:var(--muted);font-size:9px;line-height:1.25}
.captionWrap{position:relative}.captionInput{display:block;width:100%!important;min-height:56px!important;max-height:120px!important;margin:0!important;padding:12px 58px 12px 13px!important;border:1px solid var(--line)!important;border-radius:14px!important;background:var(--chat)!important;color:var(--text)!important;outline:0!important;resize:none!important;line-height:1.45;overflow:auto}.captionInput::placeholder{color:color-mix(in srgb,var(--muted) 86%,transparent)}.captionInput:focus{border-color:color-mix(in srgb,var(--accent) 55%,var(--line))!important;box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 10%,transparent)}.captionOptional{position:absolute;right:11px;top:11px;color:var(--muted);font-size:9px;pointer-events:none}
.previewActions{display:grid!important;grid-template-columns:1fr 1.25fr;gap:9px!important;align-items:center;margin-top:11px}.previewActions button{width:100%!important;height:43px!important;margin:0!important;padding:0 14px!important;border-radius:13px!important;font-size:12px!important;font-weight:650!important;box-shadow:none!important;transition:transform .13s ease,background .13s ease,border-color .13s ease}.previewActions button:active{transform:scale(.98)}.previewCancel{border:1px solid var(--line)!important;background:var(--bubble)!important;color:var(--text)!important}.previewCancel:hover{background:color-mix(in srgb,var(--bubble) 88%,var(--text) 12%)!important}.previewSend{border:1px solid color-mix(in srgb,var(--accent) 72%,#fff 8%)!important;background:var(--accent)!important;color:#fff!important;display:flex;align-items:center;justify-content:center;gap:8px}.previewSend:hover{background:color-mix(in srgb,var(--accent) 90%,#fff 10%)!important}.previewSend span{float:none!important;margin:0!important;color:inherit!important;font-size:14px!important}
:root[data-theme="light"] .attachmentModal{background:#34424d59}:root[data-theme="light"] .filePreviewBox{background:#f8fafb!important;border-color:#d6e0e7!important;box-shadow:0 24px 70px #21313f26}:root[data-theme="light"] .attachmentPreview{background:#eef3f6!important;border-color:#d6e0e7!important}:root[data-theme="light"] .attachmentPreview video{background:#eef3f6}:root[data-theme="light"] .attachmentPreview audio{color-scheme:light}:root[data-theme="light"] .attachmentMeta{background:#fff;border-color:#d8e1e7}:root[data-theme="light"] .attachmentMetaIcon{background:#e4f1f7}:root[data-theme="light"] .captionInput{background:#fff!important;border-color:#d3dde4!important;color:#17212b!important}:root[data-theme="light"] .previewCancel{background:#edf2f5!important;border-color:#d5dfe5!important;color:#26343e!important}:root[data-theme="light"] .filePreviewBox .previewClose{background:#edf2f5!important;border-color:#d5dfe5!important;color:#607381!important}
@media(max-width:820px){.modal.attachmentModal{padding:10px 10px max(10px,env(safe-area-inset-bottom));place-items:end center}.filePreviewBox{width:100%!important;min-height:0!important;height:auto!important;max-height:calc(100dvh - max(20px,env(safe-area-inset-top)))!important;padding:14px!important;border:1px solid var(--line)!important;border-radius:24px!important;box-shadow:0 -18px 70px #0007!important}.filePreviewHeader{margin-bottom:11px}.attachmentPreview{min-height:180px!important;max-height:42dvh!important}.attachmentPreview img,.attachmentPreview video{max-height:42dvh!important}.attachmentAudioPanel{min-height:180px}.attachmentMeta{margin:9px 0 10px}.captionInput{min-height:54px!important;max-height:104px!important}.previewActions{grid-template-columns:1fr 1.2fr;margin-top:10px}.previewActions button{height:44px!important;border-radius:13px!important}}


/* ===== SENTUAL v23: profile email + close button ===== */
.profileEmailRow{align-items:center!important;gap:12px}.profileEmailValue{display:flex!important;align-items:center;justify-content:flex-end!important;gap:8px;padding:0!important;min-width:0}.profileEmailValue b{max-width:190px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profileInlineAction{border:1px solid var(--line);background:var(--bubble);color:var(--accent);border-radius:8px;padding:6px 9px;font-size:9px;font-weight:650;line-height:1;white-space:nowrap}.profileInlineAction:hover{background:color-mix(in srgb,var(--bubble) 84%,var(--accent) 16%)}
.profileModal .profileClose{top:12px;right:12px;width:36px;height:36px;padding:0;border:1px solid var(--line);border-radius:12px;background:color-mix(in srgb,var(--bubble) 82%,transparent);color:var(--muted);display:grid;place-items:center;z-index:4}.profileModal .profileClose svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round}.profileModal .profileClose:hover{background:var(--bubble)!important;color:var(--text)!important}.profileModal .profileClose:active{transform:scale(.96)}
.emailSettingsBox{text-align:left}.emailSettingsLabel{display:block;margin-top:15px;color:var(--muted);font-size:10px}.emailSettingsLabel .bigInput{margin-top:7px}.emailSettingsSend{margin-top:12px}.emailVerifyStep{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}.emailCodeDestination{font-size:10px;line-height:1.55;color:var(--muted);padding:9px 10px;border-radius:10px;background:color-mix(in srgb,var(--bubble) 78%,transparent)}.emailSettingsIcon{font-size:18px;font-weight:700}
:root[data-theme="light"] .profileInlineAction{background:#edf3f6;border-color:#d8e1e7;color:#27779c}:root[data-theme="light"] .profileModal .profileClose{background:#edf2f5;border-color:#d5dfe5;color:#607381}:root[data-theme="light"] .emailCodeDestination{background:#f1f4f7}
@media(max-width:820px){.profileModal .profileClose{top:max(14px,env(safe-area-inset-top));right:16px;width:38px;height:38px;border-radius:12px}.profileEmailValue b{max-width:145px}.emailSettingsBox{width:100%;max-width:none;border-radius:20px}}


/* ===== SENTUAL v31: final visual/accessibility polish ===== */
.modal{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}
.modalClose{width:40px!important;height:40px!important;padding:0!important;border:1px solid color-mix(in srgb,var(--line) 82%,transparent)!important;border-radius:12px!important;background:color-mix(in srgb,var(--side) 88%,transparent)!important;color:var(--muted)!important;display:grid!important;place-items:center!important;line-height:1!important;transition:background .16s ease,border-color .16s ease,color .16s ease,transform .16s ease}
.modalClose svg{width:18px!important;height:18px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.9!important;stroke-linecap:round!important;stroke-linejoin:round!important;pointer-events:none}
.modalClose:hover{background:color-mix(in srgb,var(--bubble) 96%,transparent)!important;color:var(--text)!important;border-color:color-mix(in srgb,var(--muted) 48%,var(--line))!important}
.modalClose:active{transform:scale(.96)}
button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 75%,white);outline-offset:2px}
.toast{max-width:min(440px,calc(100vw - 28px));bottom:calc(22px + env(safe-area-inset-bottom));padding:11px 14px;border:1px solid color-mix(in srgb,var(--line) 80%,transparent);background:color-mix(in srgb,var(--bubble) 94%,#0b1118);color:var(--text);box-shadow:0 18px 55px #0007;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-weight:500;text-align:center}
:root[data-theme="light"] .modalClose{background:#eef3f6!important;border-color:#d8e1e7!important;color:#6f7f8b!important}
:root[data-theme="light"] .modalClose:hover{background:#e3eaef!important;color:#17232d!important;border-color:#c9d5dc!important}
:root[data-theme="light"] .toast{background:#ffffffed;color:#17232d;border-color:#d7e0e6;box-shadow:0 18px 55px #20303d24}
.choice,.primary,.secondary,.previewSend,.previewCancel,.send,.attach,.newChatBtn,.myAvatar{transition:transform .12s ease,filter .16s ease,background .16s ease,border-color .16s ease}
.choice:active,.primary:active,.secondary:active,.previewSend:active,.previewCancel:active,.send:active,.attach:active,.newChatBtn:active,.myAvatar:active{transform:scale(.985)}
@media(max-width:820px){.modalClose{top:max(14px,env(safe-area-inset-top))!important;right:14px!important}.profileModal .modalClose{top:max(18px,env(safe-area-inset-top))!important;right:18px!important}.toast{bottom:calc(16px + env(safe-area-inset-bottom))}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{scroll-behavior:auto!important;animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}

/* ===== SENTUAL v32: unified controls + message delivery status ===== */
button:not(.bubble):not(.photoOpen):not(.walletInlineAddress){
  border-radius:12px;
  transition:background .16s ease,border-color .16s ease,color .16s ease,transform .12s ease,box-shadow .16s ease,filter .16s ease!important;
  -webkit-tap-highlight-color:transparent;
}
button:not(.bubble):not(.photoOpen):not(.walletInlineAddress):not(:disabled):hover{filter:brightness(1.07)}
button:not(.bubble):not(.photoOpen):not(.walletInlineAddress):not(:disabled):active{transform:scale(.96)}
button:disabled{cursor:default;opacity:.5}

:where(.modalClose,.profileClose,.iconBtn,.back,.attach,.send,.newChatBtn,.themeToggle,.sessionsBack,.sessionLogout,.pinnedBar>button,.mediaViewer header button){
  border:1px solid color-mix(in srgb,var(--line) 82%,transparent)!important;
  background:color-mix(in srgb,var(--side) 88%,transparent)!important;
  color:var(--muted)!important;
  box-shadow:0 5px 18px #0002;
}
:where(.modalClose,.profileClose,.iconBtn,.back,.attach,.send,.newChatBtn,.themeToggle,.sessionsBack,.sessionLogout,.pinnedBar>button,.mediaViewer header button):not(:disabled):hover{
  background:color-mix(in srgb,var(--bubble) 96%,transparent)!important;
  color:var(--text)!important;
  border-color:color-mix(in srgb,var(--muted) 48%,var(--line))!important;
}
.send{background:color-mix(in srgb,var(--accent) 88%,var(--side) 12%)!important;color:#fff!important;border-color:color-mix(in srgb,var(--accent) 66%,var(--line))!important}
.primary,.secondary,.choice,.textBtn,.walletAdd,.walletSend,.profileInlineAction,.previewCancel,.previewSend,.dropCancel,.confirmActions button,.menu button,.shareCode button,.langPicker>button,.langMenu button,.tabs button,.noChats button{
  border-radius:12px!important;
  border:1px solid color-mix(in srgb,var(--line) 82%,transparent)!important;
  box-shadow:0 4px 15px #00000012;
}
.menu button,.langMenu button,.tabs button,.textBtn,.noChats button{box-shadow:none}
:root[data-theme="light"] :where(.modalClose,.profileClose,.iconBtn,.back,.attach,.newChatBtn,.themeToggle,.sessionsBack,.sessionLogout,.pinnedBar>button,.mediaViewer header button){background:#eef3f6!important;border-color:#d8e1e7!important;color:#607381!important;box-shadow:0 5px 16px #24354112}
:root[data-theme="light"] :where(.modalClose,.profileClose,.iconBtn,.back,.attach,.newChatBtn,.themeToggle,.sessionsBack,.sessionLogout,.pinnedBar>button,.mediaViewer header button):not(:disabled):hover{background:#e3eaef!important;color:#17232d!important;border-color:#c9d5dc!important}

.bubble>.messageStamp{float:right!important;display:inline-flex!important;align-items:center!important;justify-content:flex-end!important;gap:4px!important;margin:6px 0 0 9px!important;color:#8ea0ae!important;font-size:8px!important;line-height:1.2!important;white-space:nowrap!important;direction:ltr!important;unicode-bidi:isolate!important}
.bubble>.messageStamp>span{float:none!important;display:inline!important;margin:0!important;padding:0!important;color:inherit!important;font-size:inherit!important;line-height:inherit!important;white-space:nowrap!important}
.bubble>.messageStamp .messageStampState::before{content:'·';margin-right:4px;color:currentColor}
.bubble>.messageStamp.pending{color:#a9bac6!important}
.bubble>.messageStamp.failed{color:#ff9a9a!important}
.attachmentCard>.messageStamp{width:100%;padding:0 12px 9px;margin:0!important;float:none!important;display:flex!important}
.walletTextBubble>.messageStamp{float:right!important}
.pendingSend{opacity:.96}
.sendFailed{outline:1px solid #d86a6a66}


/* ===== SENTUAL v33: keyboard-safe composer + neutral search focus ===== */
.search,.search:focus,.search:focus-within{
  border:1px solid transparent!important;
  outline:none!important;
  box-shadow:none!important;
}
.search input,.search input:focus,.search input:focus-visible{
  border:0!important;
  border-color:transparent!important;
  outline:none!important;
  outline-offset:0!important;
  box-shadow:none!important;
  -webkit-appearance:none;
  appearance:none;
}
@media(max-width:820px){
  .chat.mobileOpen{
    inset:auto 0 auto 0!important;
    top:var(--sentual-vv-top,0px)!important;
    bottom:auto!important;
    height:var(--sentual-vv-height,var(--sentual-screen-height))!important;
    min-height:0!important;
    max-height:none!important;
  }
  .chat.mobileOpen .messages{min-height:0!important;}
  .chat.mobileOpen .composer{
    flex:0 0 auto!important;
    position:relative!important;
    z-index:25;
  }
}


/* ===== SENTUAL v34: transparent input focus, clean menus, brand mark, iOS loader ===== */
/* Never let browser/iOS focus treatment paint a blue ring around text inputs. */
input:focus:not(#sentualFocusGuard),input:focus-visible:not(#sentualFocusGuard),
textarea:focus:not(#sentualFocusGuard),textarea:focus-visible:not(#sentualFocusGuard),
select:focus:not(#sentualFocusGuard),select:focus-visible:not(#sentualFocusGuard){
  outline:none!important;
  outline-offset:0!important;
  box-shadow:none!important;
  border-color:transparent!important;
  -webkit-tap-highlight-color:transparent!important;
}

/* Welcome / sign-in screen: inputs stay visually borderless even before focus. */
#loginBox input,#loginBox textarea,
#loginBox input:focus,#loginBox textarea:focus,
#loginBox input:focus-visible,#loginBox textarea:focus-visible{
  border-color:transparent!important;
  outline:none!important;
  box-shadow:none!important;
}

/* Only these three account-menu actions lose their individual borders. */
#accountMenu{padding:5px 0!important;}
#accountMenu>button{
  border:0!important;
  border-radius:0!important;
  box-shadow:none!important;
}
#accountMenu>button+button{
  border-top:1px solid color-mix(in srgb,var(--muted) 20%,transparent)!important;
}

/* Chat three-dot menu: anchor to the header/button area instead of the page top. */
.chatHead{position:relative;}
#chatMenu{
  top:calc(100% - 2px)!important;
  right:8px!important;
  padding:5px 0!important;
}
#chatMenu>button{
  border:0!important;
  border-radius:0!important;
  box-shadow:none!important;
}
#chatMenu>button:not(.hidden)+button:not(.hidden){
  border-top:1px solid color-mix(in srgb,var(--muted) 20%,transparent)!important;
}

/* Supplied SENTUAL logo. */
.sentualBrandImg{display:block;width:100%;height:100%;object-fit:contain;user-select:none;-webkit-user-drag:none;pointer-events:none;}
.authBrand span,.iosInstallMark,.emptyLogo,.brandAvatar{
  background:#fff!important;
  color:transparent!important;
  overflow:hidden;
}
.authBrand span{padding:3px;box-shadow:0 5px 18px #00000018;}
.authBrand span .sentualBrandImg{border-radius:7px;}
.iosInstallMark{padding:5px;}
.emptyLogo{
  width:58px!important;
  height:58px!important;
  padding:6px!important;
  border-radius:17px!important;
  box-shadow:0 10px 30px #00000018;
}
.brandAvatar{
  padding:4px!important;
}
:root[data-theme="light"] .emptyLogo,:root[data-theme="light"] .brandAvatar,:root[data-theme="light"] .authBrand span{
  box-shadow:0 7px 22px #1b2b3818;
}

/* Small low-contrast iOS-style activity indicator while a chat key/history is prepared. */
.chatLoading{
  position:absolute;
  left:50%;
  top:50%;
  z-index:18;
  transform:translate(-50%,-50%);
  display:grid;
  place-items:center;
  width:34px;
  height:34px;
  border-radius:50%;
  pointer-events:none;
  color:color-mix(in srgb,var(--muted) 72%,var(--text));
  opacity:.62;
}
.chatLoading.hidden{display:none!important;}
.iosSpinner{position:relative;width:22px;height:22px;}
.iosSpinner i{
  position:absolute;
  left:10px;
  top:1px;
  width:2px;
  height:6px;
  border-radius:999px;
  background:currentColor;
  transform-origin:1px 10px;
  transform:rotate(var(--r));
  animation:sentualIOSSpinner .96s linear infinite;
  animation-delay:var(--d);
}
@keyframes sentualIOSSpinner{0%,8.33%{opacity:1}58%,100%{opacity:.14}}
@media(prefers-reduced-motion:reduce){.iosSpinner i{animation-duration:1.4s!important;}}
@media(max-width:820px){
  #chatMenu{top:calc(100% - 1px)!important;right:10px!important;}
  .chatLoading{top:50%;}
}

/* ===== SENTUAL v35: avatar visibility, neutral rounded menu hover, attachment spacing, desktop text scale, emoji sizing ===== */
/* Account and in-chat action menus only: preserve separators, but make hover/press soft, neutral and rounded. */
#accountMenu,#chatMenu{
  padding:5px!important;
}
#accountMenu>button,#chatMenu>button{
  border:0!important;
  border-radius:8px!important;
  box-shadow:none!important;
  transition:background-color .12s ease,color .12s ease!important;
}
#accountMenu>button+button,#chatMenu>button:not(.hidden)+button:not(.hidden){
  border-top:1px solid color-mix(in srgb,var(--muted) 20%,transparent)!important;
}
#accountMenu>button:hover,#accountMenu>button:focus-visible,#accountMenu>button:active,
#chatMenu>button:hover,#chatMenu>button:focus-visible,#chatMenu>button:active{
  background:color-mix(in srgb,#808080 18%,transparent)!important;
  color:var(--text)!important;
  filter:none!important;
}
:root[data-theme="light"] #accountMenu>button:hover,
:root[data-theme="light"] #accountMenu>button:focus-visible,
:root[data-theme="light"] #accountMenu>button:active,
:root[data-theme="light"] #chatMenu>button:hover,
:root[data-theme="light"] #chatMenu>button:focus-visible,
:root[data-theme="light"] #chatMenu>button:active{
  background:rgba(92,99,106,.11)!important;
}

/* The + attachment popover keeps its existing look, with 2px vertical breathing room between actions. */
#attachMenu>button+button{margin-top:2px!important;}

/* Desktop only: slightly larger text bubbles. Mobile dimensions stay untouched. */
@media(min-width:821px){
  .messages{gap:5px;}
  .bubble:not(.attachmentCard){
    max-width:min(720px,74%);
    padding:10px 13px;
    font-size:15px;
    line-height:1.52;
    border-radius:17px 17px 17px 5px;
  }
  .bubble.me:not(.attachmentCard){border-radius:17px 17px 5px 17px;}
  .bubble>.messageStamp{font-size:9px!important;margin-top:7px!important;}
}

/* Emoji-only messages: 1 very large, 2 large, 3 moderately large; 4+ stay normal. */
.bubble.sentualEmojiOnly{line-height:1.06!important;letter-spacing:0!important;}
.bubble.sentualEmoji1{font-size:56px!important;padding-top:7px!important;padding-bottom:7px!important;}
.bubble.sentualEmoji2{font-size:44px!important;padding-top:7px!important;padding-bottom:7px!important;}
.bubble.sentualEmoji3{font-size:34px!important;padding-top:7px!important;padding-bottom:7px!important;}
.bubble.sentualEmojiOnly>.messageStamp{font-size:8px!important;line-height:1.2!important;margin-top:7px!important;}
@media(max-width:820px){
  .bubble.sentualEmoji1{font-size:52px!important;}
  .bubble.sentualEmoji2{font-size:40px!important;}
  .bubble.sentualEmoji3{font-size:32px!important;}
}


/* ===== SENTUAL v36: neutral context menus, single-emoji sticker mode, local date separators ===== */
/* Right-click / long-press menus: 3px breathing room between actions on desktop and mobile. */
.contextMenu>button{
  margin:0!important;
  border:0!important;
  border-radius:8px!important;
  box-shadow:none!important;
  transition:background-color .12s ease,color .12s ease!important;
}
.contextMenu>button+button{margin-top:3px!important;}
.contextMenu>button:hover,
.contextMenu>button:focus-visible,
.contextMenu>button:active{
  background:rgba(128,128,128,.18)!important;
  color:var(--text)!important;
  filter:none!important;
  outline:none!important;
}
:root[data-theme="light"] .contextMenu>button:hover,
:root[data-theme="light"] .contextMenu>button:focus-visible,
:root[data-theme="light"] .contextMenu>button:active{
  background:rgba(92,99,106,.12)!important;
  color:var(--text)!important;
}

/* Exactly one emoji behaves like a sticker: larger glyph, no message bubble surface. */
.bubble.sentualEmoji1,
.bubble.me.sentualEmoji1{
  background:transparent!important;
  border:0!important;
  border-radius:0!important;
  box-shadow:none!important;
  outline:0!important;
  padding:2px 2px 3px!important;
  font-size:72px!important;
  line-height:1!important;
  max-width:none!important;
}
.bubble.sentualEmoji1>.messageStamp{
  margin-top:4px!important;
  background:transparent!important;
}
@media(max-width:820px){
  .bubble.sentualEmoji1,.bubble.me.sentualEmoji1{font-size:68px!important;}
}

/* Telegram-like local-day separators. Date boundaries are calculated in JS from the user's device timezone. */
.sentualDateSeparator{
  align-self:center;
  flex:none;
  margin:10px auto 7px;
  padding:4px 10px;
  border-radius:999px;
  background:color-mix(in srgb,var(--muted) 38%,transparent);
  color:color-mix(in srgb,var(--text) 94%,transparent);
  font-size:11px;
  line-height:1.25;
  font-weight:600;
  white-space:nowrap;
  user-select:none;
  -webkit-user-select:none;
  pointer-events:none;
  box-shadow:0 1px 4px #00000010;
}
:root[data-theme="light"] .sentualDateSeparator{
  background:rgba(117,132,145,.28);
  color:#fff;
}
@media(max-width:820px){
  .sentualDateSeparator{margin:9px auto 6px;padding:4px 9px;font-size:11px;}
}


/* ===== SENTUAL v37: delete-confirm cleanup, mobile QR frame, restored empty-state brand ===== */
.confirmBox.noConfirmIcon .confirmIcon{
  display:none!important;
}

/* Keep desktop QR sizing untouched. On mobile, restore the same visible white frame
   around the QR and clip its corners so the black QR never looks sharper/larger than its card. */
@media(max-width:820px){
  .profileModal .qrWrap{
    width:196px!important;
    height:196px!important;
    padding:8px!important;
    border-radius:16px!important;
    overflow:hidden!important;
    background:#fff!important;
  }
  .profileModal .qrWrap #profileQr{
    display:block!important;
    width:180px!important;
    height:180px!important;
    max-width:180px!important;
    max-height:180px!important;
    border-radius:9px!important;
    object-fit:contain!important;
  }
}



/* SENTUAL v41 source parity: runtime v41 overrides are embedded in index.php so the offline shell is self-contained. */


/* ===== SENTUAL v42: popup geometry, 1s target flash, stable photo placeholders, neutral glass viewer ===== */
@keyframes sentualV42MessageFlashKey{
  0%{filter:brightness(1);box-shadow:0 0 0 0 rgba(79,177,229,0)}
  8%{filter:brightness(1.28);box-shadow:0 0 0 3px rgba(79,177,229,.22)}
  74%{filter:brightness(1.28);box-shadow:0 0 0 3px rgba(79,177,229,.22)}
  100%{filter:brightness(1);box-shadow:0 0 0 0 rgba(79,177,229,0)}
}
.bubble.sentualMessageFlash{animation:sentualV42MessageFlashKey 1.35s cubic-bezier(.22,.8,.2,1)!important}

/* Close buttons on centered cards are positioned from the card itself, never from the phone safe-area. */
.modal:not(.profileModal) .modalBox>.modalClose,
.modal:not(.profileModal) .modalBox .previewClose{
  position:absolute!important;top:14px!important;right:14px!important;width:38px!important;height:38px!important;margin:0!important;transform:none!important;z-index:20!important;
}
.modalClose:hover,.modalClose:focus-visible{filter:none!important;box-shadow:none!important;outline:0!important}
@media(max-width:820px){
  .profileModal .profileBox>.modalClose,.statsBox>.modalClose,.filePreviewBox .previewClose{top:calc(14px + env(safe-area-inset-top))!important;right:16px!important}
  #newChatModal .modalClose,#codeModal .modalClose,#scannerModal .modalClose,#chatPasswordModal .modalClose,#chatPasswordRecoveryModal .modalClose,#emailSettingsModal .modalClose,#walletModal .modalClose,#deleteAccountModal .modalClose,#managementModal .modalClose,#broadcastModal .modalClose{top:14px!important;right:14px!important}
}

/* Photo cards reserve their final geometry before encrypted media finishes downloading. */
.inlineMedia-image.sentualPhotoPlaceholder{position:relative!important;width:100%!important;overflow:hidden!important;background:#11171d!important;isolation:isolate}
.inlineMedia-image.sentualPhotoPlaceholder:not(.sentualPhotoHasGeometry){min-height:190px!important}
.inlineMedia-image.sentualPhotoPlaceholder.hasPreview::before{content:'';position:absolute;inset:-18px;z-index:0;background-image:var(--sentual-photo-preview);background-size:cover;background-position:center;filter:blur(16px) saturate(.88);transform:scale(1.08);opacity:.88;transition:opacity .34s ease}
.inlineMedia-image.sentualPhotoPlaceholder::after{content:'';position:absolute;inset:0;z-index:0;background:rgba(15,18,22,.16);transition:opacity .34s ease}
.inlineMedia-image.sentualPhotoPlaceholder .mediaStatus{position:relative;z-index:1}
.inlineMedia-image.sentualPhotoPlaceholder.hasPreview .mediaStatus{opacity:0!important;pointer-events:none!important}
.inlineMedia-image.sentualPhotoPlaceholder .photoOpen{position:relative;z-index:2;width:100%;height:100%;opacity:0;transition:opacity .32s cubic-bezier(.22,1,.36,1)}
.inlineMedia-image.sentualPhotoPlaceholder .photoOpen img{display:block;width:100%!important;height:100%!important;max-height:none!important;object-fit:cover!important}
.inlineMedia-image.sentualPhotoPlaceholder.sentualPhotoLoaded .photoOpen{opacity:1}
.inlineMedia-image.sentualPhotoPlaceholder.sentualPhotoLoaded::before,.inlineMedia-image.sentualPhotoPlaceholder.sentualPhotoLoaded::after{opacity:0}
@media(max-width:820px){.attachmentCard.attachment-image .inlineMedia.sentualPhotoPlaceholder.sentualPhotoHasGeometry{min-height:0!important}.attachmentCard.attachment-image .inlineMedia.sentualPhotoPlaceholder:not(.sentualPhotoHasGeometry){min-height:210px!important}}

/* Neutral iOS-like glass instead of a blue viewer surface. */
.mediaViewer{background:rgba(18,18,20,.48)!important;backdrop-filter:blur(26px) saturate(.86)!important;-webkit-backdrop-filter:blur(26px) saturate(.86)!important}
.mediaViewer::backdrop{background:rgba(8,8,10,.42)!important;backdrop-filter:blur(18px)!important;-webkit-backdrop-filter:blur(18px)!important}
.mediaViewerAction,.mediaViewer .mediaViewerDownload,.mediaViewer .mediaViewerClose,
.mediaViewerAction:hover,.mediaViewer .mediaViewerDownload:hover,.mediaViewer .mediaViewerClose:hover,
.mediaViewerAction:focus-visible,.mediaViewer .mediaViewerDownload:focus-visible,.mediaViewer .mediaViewerClose:focus-visible{
  background:rgba(34,34,37,.64)!important;border:1px solid rgba(255,255,255,.14)!important;color:#fff!important;box-shadow:0 10px 34px rgba(0,0,0,.24)!important;outline:0!important;filter:none!important;backdrop-filter:blur(20px) saturate(.95)!important;-webkit-backdrop-filter:blur(20px) saturate(.95)!important
}
.mediaViewerAction:active{background:rgba(44,44,48,.7)!important}

/* Session cards stay readable in the light theme and never render an invisible device label. */
:root[data-theme="light"] .sessionsPane{color:#18232d!important}
:root[data-theme="light"] .sessionRow{background:#fff!important;border-color:#dce5eb!important;color:#18232d!important}
:root[data-theme="light"] .sessionInfo b{display:block!important;color:#18232d!important;opacity:1!important}
:root[data-theme="light"] .sessionInfo small{color:#71808d!important;opacity:1!important}



/* ===== SENTUAL v43: compact reply previews ===== */
.replyQuote{width:fit-content!important;max-width:min(320px,72vw)!important;min-width:0!important;box-sizing:border-box!important}
.replyQuote span{display:-webkit-box!important;white-space:normal!important;overflow:hidden!important;text-overflow:ellipsis!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:2!important;line-clamp:2!important;overflow-wrap:anywhere!important;word-break:break-word!important}
.bubble.sentualHasReply{max-width:min(620px,72%)!important}
@media(max-width:820px){.replyQuote{max-width:min(300px,72vw)!important}.bubble.sentualHasReply{max-width:86%!important}}


/* ===== SENTUAL v44: native scroll control, compact replies, smooth delete, optimistic media ===== */
.replyQuote{max-width:min(250px,62vw)!important}
.replyQuote span{-webkit-line-clamp:2!important;line-clamp:2!important;line-height:1.35!important;max-height:2.7em!important}
.bubble.sentualHasReply{width:fit-content!important;max-width:min(560px,72%)!important}
@media(max-width:820px){.replyQuote{max-width:min(238px,64vw)!important}.bubble.sentualHasReply{max-width:86%!important}}

#chat{--sentual-composer-height:62px}
.scrollBottomBtn{
 position:absolute;z-index:19;right:16px;bottom:calc(var(--sentual-composer-height,62px) + 14px);
 width:42px;height:42px;border:1px solid rgba(15,30,42,.08);border-radius:50%;padding:0;
 display:grid;place-items:center;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(9px) scale(.94);
 transition:opacity .2s ease,transform .28s cubic-bezier(.22,1,.36,1),visibility .2s ease;
 background:rgba(255,255,255,.70);color:#0a1118;box-shadow:0 7px 24px rgba(8,18,28,.13);
 backdrop-filter:blur(18px) saturate(1.15);-webkit-backdrop-filter:blur(18px) saturate(1.15);
 -webkit-tap-highlight-color:transparent;outline:0
}
.scrollBottomBtn.show{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0) scale(1)}
.scrollBottomBtn svg{width:19px;height:19px;display:block;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.scrollBottomBtn:hover,.scrollBottomBtn:focus-visible{filter:none!important;outline:0!important;box-shadow:0 7px 24px rgba(8,18,28,.13)!important}
.scrollBottomBtn:active{transform:scale(.94)}
:root:not([data-theme="light"]) .scrollBottomBtn{background:rgba(5,49,79,.70);color:#fff;border-color:rgba(255,255,255,.08);box-shadow:0 8px 28px rgba(0,0,0,.22)}
@media(max-width:820px){.scrollBottomBtn{right:12px;bottom:calc(var(--sentual-composer-height,62px) + 11px);width:40px;height:40px}}

.bubble.sentualMessageRemoving{overflow:hidden!important;box-sizing:border-box!important;transform-origin:center bottom;will-change:height,max-height,opacity,transform,margin,padding}
.bubble.sentualMessageRemovingGo{
 opacity:0!important;transform:scale(.94) translateY(-5px)!important;height:0!important;max-height:0!important;min-height:0!important;
 margin-top:0!important;margin-bottom:0!important;padding-top:0!important;padding-bottom:0!important;border-width:0!important;
 transition:opacity .18s ease,transform .26s cubic-bezier(.4,0,.2,1),height .3s cubic-bezier(.22,1,.36,1),max-height .3s cubic-bezier(.22,1,.36,1),margin .3s ease,padding .3s ease!important
}

.sentualVideoDeferred{position:relative;min-height:205px;display:grid;place-items:center;overflow:hidden;border-radius:inherit;background:#101820;isolation:isolate}
.sentualVideoDeferred::before{content:"";position:absolute;inset:-12px;background-image:var(--sentual-video-poster);background-size:cover;background-position:center;filter:blur(10px);transform:scale(1.05);opacity:.72;z-index:-2}
.sentualVideoDeferred::after{content:"";position:absolute;inset:0;background:rgba(7,12,17,.32);z-index:-1}
.sentualVideoDownloadButton{width:54px;height:54px;border:1px solid rgba(255,255,255,.18);border-radius:50%;display:grid;place-items:center;background:rgba(18,27,35,.58);color:#fff;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 9px 28px rgba(0,0,0,.2);font-size:22px;outline:0!important}
.sentualVideoDownloadButton:hover,.sentualVideoDownloadButton:focus-visible{filter:none!important;outline:0!important;box-shadow:0 9px 28px rgba(0,0,0,.2)!important}
.sentualVideoDownloadButton.loading{pointer-events:none;animation:sentualV44DownloadPulse .85s ease-in-out infinite alternate}
.sentualVideoDownloadProgress{position:absolute;left:9px;top:9px;z-index:3;padding:4px 7px;border-radius:8px;background:rgba(8,13,18,.58);color:#fff;font-size:9px;font-weight:600;line-height:1;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-variant-numeric:tabular-nums;letter-spacing:.01em}
@keyframes sentualV44DownloadPulse{to{transform:scale(.92);opacity:.72}}

.sentualOptimisticPhoto{position:relative}
.sentualOptimisticPhoto .photoOpen img{transition:filter .38s cubic-bezier(.22,1,.36,1),transform .38s cubic-bezier(.22,1,.36,1),opacity .3s ease}
.sentualOptimisticPhotoPending .photoOpen img,.sentualOptimisticPhotoSending .photoOpen img{filter:blur(13px) saturate(.88);transform:scale(1.045);opacity:.9}
.sentualOptimisticPhotoUploaded .photoOpen img{filter:none;transform:scale(1);opacity:1}
.sentualPhotoSendStatus{position:absolute;z-index:8;left:9px;top:9px;display:flex;align-items:center;gap:6px;max-width:calc(100% - 18px);padding:4px 7px;border-radius:8px;background:rgba(9,16,21,.55);color:#fff;font-size:9px;font-weight:600;line-height:1.15;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);pointer-events:none;transition:opacity .24s ease,transform .24s ease}
.sentualPhotoSendStatus.failed{background:rgba(91,22,27,.66);pointer-events:auto}
.sentualPhotoSendStatus button{border:0!important;outline:0!important;background:transparent!important;color:#fff!important;padding:0!important;margin:0!important;font:inherit!important;font-weight:700!important;text-decoration:underline;text-underline-offset:2px;box-shadow:none!important}
.sentualPhotoSendStatus.sent{opacity:0;transform:translateY(-4px)}
.sentualVideoTranscoder{position:fixed!important;width:2px!important;height:2px!important;left:-20px!important;top:-20px!important;opacity:.001!important;pointer-events:none!important;z-index:-1!important}
.sentualVideoDownloadButton svg{width:23px;height:23px;display:block;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}


/* ===== SENTUAL v45: keyboard cover + compact single-emoji delivery stamp ===== */
@media(max-width:820px){
  /* The chat itself is resized to visualViewport while iOS shows the keyboard. Extend its own
     background below that viewport so the translucent keyboard accessory bar can never reveal
     the conversation list underneath. */
  html.sentual-keyboard-open .chat.mobileOpen::after{
    content:"";position:absolute;left:0;right:0;top:100%;height:100vh;background:var(--chat);pointer-events:none;z-index:0
  }
  html.sentual-keyboard-open .chat.mobileOpen .composer{touch-action:pan-y manipulation}
}
.bubble.sentualEmoji1,.bubble.me.sentualEmoji1{
  position:relative!important;width:max-content!important;min-width:0!important;max-width:120px!important;
  padding:2px 2px 17px!important;overflow:visible!important
}
.bubble.sentualEmoji1>.messageStamp{
  position:absolute!important;left:2px!important;right:auto!important;bottom:2px!important;top:auto!important;
  float:none!important;margin:0!important;width:max-content!important;max-width:116px!important;
  justify-content:flex-start!important;transform:none!important
}


/* ===== SENTUAL v47: lock iOS composer panning and never expose contacts behind an open chat ===== */
@media(max-width:820px){
  #messenger.sentualChatCover #chat.mobileOpen{z-index:20;isolation:isolate;}
  #messenger.sentualChatCover:not(.sentualBackActive) > .sidebar{visibility:hidden;}
  #messenger.sentualChatCover.sentualBackActive > .sidebar{visibility:visible;}
  html.sentual-keyboard-open #chat.mobileOpen{
    top:var(--sentual-vv-top,0px)!important;
    bottom:auto!important;
    transform:translate3d(0,0,0)!important;
    overscroll-behavior:none!important;
  }
  html.sentual-keyboard-open #chat.mobileOpen .composer,
  html.sentual-keyboard-open #chat.mobileOpen #message{
    touch-action:none!important;
    overscroll-behavior:none!important;
  }
}

/* ===== SENTUAL v48: profile-photo placeholders/cache presentation ===== */
.sentualAvatarStable{background-position:center,center!important;background-repeat:no-repeat,no-repeat!important;background-size:cover,cover!important;background-clip:padding-box!important;overflow:hidden!important}
.avatarPhoto.sentualAvatarStable{image-rendering:auto!important}
#peerAvatar.sentualAvatarStable{background-color:#1d2b36;cursor:default;-webkit-tap-highlight-color:transparent;transition:none!important}
:root[data-theme="light"] #peerAvatar.sentualAvatarStable,.lightTheme #peerAvatar.sentualAvatarStable{background-color:#e5ebef}


/* ===== SENTUAL v49: reversible menus + sealed composer gestures ===== */
.menu{
  display:block!important;
  visibility:hidden;
  opacity:0;
  pointer-events:none;
  transform:translate3d(0,var(--sentual-menu-shift,-7px),0) scale(.965);
  transform-origin:var(--sentual-menu-origin,top left);
  transition:opacity .16s ease,transform .19s cubic-bezier(.2,.82,.2,1),visibility 0s linear .19s!important;
  animation:none!important;
  will-change:transform,opacity;
}
.menu.show{
  visibility:visible;
  opacity:1;
  pointer-events:auto;
  transform:translate3d(0,0,0) scale(1);
  transition:opacity .16s ease,transform .19s cubic-bezier(.2,.82,.2,1),visibility 0s!important;
}
#accountMenu{--sentual-menu-origin:top left;--sentual-menu-shift:-7px}
#chatMenu{--sentual-menu-origin:top right;--sentual-menu-shift:-7px}
#attachMenu{--sentual-menu-origin:bottom left;--sentual-menu-shift:7px}
.contextMenu{--sentual-menu-origin:center top;--sentual-menu-shift:5px}
@media(max-width:820px){
  #messenger.sentualChatCover{isolation:isolate;background:var(--chat)!important;}
  #messenger.sentualChatCover:not(.sentualBackActive)::before{
    content:"";position:fixed;inset:-100vh -100vw;z-index:19;background:var(--chat);pointer-events:none;
  }
  #messenger.sentualChatCover #chat.mobileOpen{z-index:20!important;background:var(--chat)!important;}
  #messenger.sentualChatCover:not(.sentualBackActive) > .sidebar{visibility:hidden!important;opacity:0!important;pointer-events:none!important;}
  #messenger.sentualChatCover.sentualBackActive > .sidebar{visibility:visible!important;opacity:1!important;pointer-events:auto!important;}
  #chat.mobileOpen #message{
    touch-action:none!important;
    overscroll-behavior:none!important;
    -webkit-overflow-scrolling:auto!important;
    overflow-y:hidden!important;
  }
  #chat.mobileOpen .composer{overscroll-behavior:none!important;}
  html.sentual-keyboard-open,html.sentual-keyboard-open body,html.sentual-keyboard-open #messenger{background:var(--chat)!important;}
}


/* ===== SENTUAL v50: link cards, copy-safe text and profile build label ===== */
.bubble>.messageStamp,.bubble>.fileMessageTime,.bubble>.replyQuote,.bubble>.sendRetryRow,.bubble>.sentualPhotoSendStatus,.sentualLinkPreview{
  -webkit-user-select:none!important;user-select:none!important;
}
.sentualMessageText{-webkit-user-select:text!important;user-select:text!important;white-space:pre-wrap!important;overflow-wrap:anywhere;word-break:break-word;float:none!important;color:inherit!important;font-size:inherit!important;line-height:inherit!important;margin:0!important;padding:0!important}
.sentualMessageLink{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.bubble.me .sentualMessageLink{color:inherit}.sentualMessageLink:hover{opacity:.84}
.bubble.sentualHasLinkPreview{max-width:min(620px,78%)}
.sentualLinkPreview{display:flex;flex-direction:column;width:min(430px,100%);max-width:100%;margin-top:8px;overflow:hidden;border:1px solid color-mix(in srgb,var(--line) 72%,transparent);border-left:3px solid var(--accent);border-radius:12px;background:color-mix(in srgb,var(--side) 66%,transparent);color:var(--text);text-decoration:none!important;white-space:normal!important;cursor:pointer;box-sizing:border-box;transition:transform .14s ease,background .14s ease,opacity .14s ease;-webkit-tap-highlight-color:transparent}
.sentualLinkPreview:hover{background:color-mix(in srgb,var(--bubble) 88%,var(--side) 12%);transform:translateY(-1px)}.sentualLinkPreview:active{transform:scale(.992)}
.sentualLinkPreviewImage{display:block;width:100%;height:auto;max-height:230px;object-fit:cover;background:color-mix(in srgb,var(--side) 84%,transparent);border:0;pointer-events:none}
.sentualLinkPreviewBody{display:flex;flex-direction:column;gap:4px;padding:10px 11px;min-width:0;text-align:left;direction:ltr}
.sentualLinkPreviewBody small{display:block;color:var(--muted);font-size:9px;line-height:1.35;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sentualLinkPreviewBody b{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:12px;line-height:1.38;font-weight:700;color:var(--text)}
.sentualLinkPreviewDescription{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:3;color:var(--muted);font-size:10px;line-height:1.5}
.bubble.me .sentualLinkPreview{background:color-mix(in srgb,var(--mine) 84%,var(--side) 16%);border-color:color-mix(in srgb,var(--accent) 28%,var(--line) 72%);border-left-color:color-mix(in srgb,var(--accent) 82%,white 18%)}
.profileVersion{margin:17px auto 1px;text-align:center;color:var(--muted);opacity:.72;font-size:9px;line-height:1;letter-spacing:.25px;font-weight:500;-webkit-user-select:none;user-select:none}
@media(max-width:820px){.bubble.sentualHasLinkPreview{max-width:88%}.sentualLinkPreview{width:min(78vw,410px)}.sentualLinkPreviewImage{max-height:210px}.profileVersion{margin-top:19px;padding-bottom:2px}}

/* ===== SENTUAL v51: attachment photo editor + stable avatar pinch ===== */
.previewHeaderButtons{display:flex;align-items:center;gap:5px;margin-left:auto;flex:none}
.previewHeaderButtons .modalClose{position:static!important;inset:auto!important;margin:0!important;flex:none}
.previewEdit svg{fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.previewEdit.hidden{display:none!important}

.photoEditModal{position:fixed;inset:0;z-index:190;display:grid;place-items:center;padding:max(12px,env(safe-area-inset-top)) 12px max(12px,env(safe-area-inset-bottom));background:rgba(2,5,8,.84);backdrop-filter:blur(24px) saturate(1.08);-webkit-backdrop-filter:blur(24px) saturate(1.08)}
.photoEditModal.hidden{display:none!important}
.photoEditShell{width:min(690px,100%);height:min(900px,calc(100dvh - 24px));min-height:420px;display:flex;flex-direction:column;overflow:hidden;border:1px solid rgba(255,255,255,.12);border-radius:31px;background:rgba(10,15,20,.84);box-shadow:0 30px 100px rgba(0,0,0,.55);color:#fff}
.photoEditHeader{flex:none;text-align:center;padding:17px 22px 11px;background:linear-gradient(180deg,rgba(10,15,20,.96),rgba(10,15,20,.68));user-select:none;-webkit-user-select:none}
.photoEditHeader b{display:block;font-size:16px;line-height:1.25}.photoEditHeader span{display:block;margin-top:4px;font-size:10px;color:rgba(232,240,246,.58)}
.photoEditStage{position:relative;flex:1;min-height:0;overflow:hidden;background:#05080a;touch-action:none;user-select:none;-webkit-user-select:none;isolation:isolate}
.photoEditStage canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none}
.photoEditCropFrame{position:absolute;box-sizing:border-box;border:1.5px solid rgba(255,255,255,.96);box-shadow:0 0 0 9999px rgba(0,0,0,.48),0 0 0 1px rgba(0,0,0,.25) inset;cursor:move;touch-action:none;z-index:4;will-change:left,top,width,height}
.photoEditCropFrame::before,.photoEditCropFrame::after{content:"";position:absolute;pointer-events:none;opacity:.42}
.photoEditCropFrame::before{left:33.333%;top:0;bottom:0;width:33.333%;border-left:1px solid rgba(255,255,255,.45);border-right:1px solid rgba(255,255,255,.45)}
.photoEditCropFrame::after{top:33.333%;left:0;right:0;height:33.333%;border-top:1px solid rgba(255,255,255,.45);border-bottom:1px solid rgba(255,255,255,.45)}
.photoEditCropFrame.hidden{display:none!important}
.photoEditHandle{position:absolute;width:24px;height:24px;z-index:5;touch-action:none}
.photoEditHandle::before,.photoEditHandle::after{content:"";position:absolute;background:#fff;border-radius:2px}
.photoEditHandle::before{width:18px;height:3px}.photoEditHandle::after{width:3px;height:18px}
.photoEditHandle.nw{left:-4px;top:-4px;cursor:nwse-resize}.photoEditHandle.nw::before{left:0;top:0}.photoEditHandle.nw::after{left:0;top:0}
.photoEditHandle.ne{right:-4px;top:-4px;cursor:nesw-resize}.photoEditHandle.ne::before{right:0;top:0}.photoEditHandle.ne::after{right:0;top:0}
.photoEditHandle.sw{left:-4px;bottom:-4px;cursor:nesw-resize}.photoEditHandle.sw::before{left:0;bottom:0}.photoEditHandle.sw::after{left:0;bottom:0}
.photoEditHandle.se{right:-4px;bottom:-4px;cursor:nwse-resize}.photoEditHandle.se::before{right:0;bottom:0}.photoEditHandle.se::after{right:0;bottom:0}
.photoEditSubtools{flex:none;min-height:52px;display:flex;align-items:center;justify-content:center;gap:10px;padding:7px 16px;background:rgba(7,11,15,.88);border-top:1px solid rgba(255,255,255,.07);user-select:none;-webkit-user-select:none}
.photoEditSubtools.hidden{display:none!important}.photoEditSubtools button{width:42px;height:38px;padding:0;border:0;border-radius:15px;background:rgba(255,255,255,.075);color:#fff;display:grid;place-items:center;box-shadow:none;transform:none}.photoEditSubtools button:active{transform:scale(.94)}
.photoEditSubtools button svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.photoEditSubtools .photoEditReset{width:auto;min-width:62px;padding:0 8px;background:transparent;font-size:10px;letter-spacing:.45px;color:rgba(255,255,255,.84)}
.photoEditDrawTools{gap:13px}.photoEditColor{width:34px;height:34px;border-radius:50%;overflow:hidden;border:2px solid rgba(255,255,255,.7);background:#fff;display:block}.photoEditColor input{width:48px;height:48px;border:0;padding:0;margin:-7px;cursor:pointer}.photoEditBrush{width:min(230px,42vw);accent-color:#fff}
.photoEditControls{flex:none;display:grid;grid-template-columns:58px 1fr 58px;align-items:center;gap:13px;padding:12px 18px calc(12px + env(safe-area-inset-bottom));background:linear-gradient(180deg,rgba(6,10,14,.76),rgba(6,10,14,.96));border-top:1px solid rgba(255,255,255,.08)}
.photoEditRound{width:56px;height:56px;padding:0;border:1px solid rgba(255,255,255,.14);border-radius:50%;display:grid;place-items:center;color:#fff;background:rgba(255,255,255,.10);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);box-shadow:0 8px 24px rgba(0,0,0,.26);transform:none}.photoEditRound:active{transform:scale(.94)}.photoEditRound svg{width:27px;height:27px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.photoEditApply{background:rgba(42,171,238,.92);border-color:rgba(83,194,247,.7)}.photoEditApply:disabled{opacity:.55}
.photoEditToolDock{justify-self:center;min-width:142px;height:56px;padding:4px 7px;display:flex;align-items:center;justify-content:center;gap:5px;border:1px solid rgba(255,255,255,.12);border-radius:28px;background:rgba(255,255,255,.10);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);box-shadow:0 8px 24px rgba(0,0,0,.22)}
.photoEditTool{width:58px;height:46px;padding:0;border:0;border-radius:21px;display:grid;place-items:center;background:transparent;color:rgba(255,255,255,.72);box-shadow:none;transform:none}.photoEditTool.active{background:rgba(255,255,255,.12);color:#fff}.photoEditTool:active{transform:scale(.94)}.photoEditTool svg{width:27px;height:27px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.photoEditStage.drawMode{cursor:crosshair}.photoEditStage.cropMode{cursor:default}

@media(max-width:820px){
  .photoEditModal{padding:0}.photoEditShell{width:100%;height:var(--sentual-screen-height,100dvh);max-height:none;border:0;border-radius:0}.photoEditHeader{padding-top:calc(14px + env(safe-area-inset-top))}.photoEditControls{padding-left:20px;padding-right:20px}.photoEditSubtools{padding-left:12px;padding-right:12px}
}

/* SENTUAL v51 final mobile fixes */
#avatarCropStage{touch-action:none!important;overscroll-behavior:none!important;-webkit-touch-callout:none!important}
#avatarCropStage img{touch-action:none!important}
@media(max-width:820px){
  .bubble:not(.attachmentCard):not(.sentualEmojiOnly){font-size:13px!important;line-height:1.5!important}
}


/* ===== SENTUAL v53: password keyboard fit + reliable touch markup ===== */
.conversationPasswordGate{flex:1 0 100%!important;height:100%!important;min-height:100%!important;box-sizing:border-box!important;align-self:stretch!important}
@media(max-width:820px){
  html.sentual-password-keyboard #messages{overflow:hidden!important;overscroll-behavior:none!important;padding-top:8px!important;padding-bottom:8px!important}
  html.sentual-password-keyboard .conversationPasswordGate{padding:8px 14px!important;place-items:center!important}
  html.sentual-password-keyboard .conversationPasswordGateCard{max-height:calc(100% - 8px)!important;overflow:auto!important;-webkit-overflow-scrolling:touch}
}
.photoEditStage.drawMode,.photoEditStage.drawMode canvas{touch-action:none!important;-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important}


/* ===== SENTUAL v55: desktop media, unread boundary, modern reply quote ===== */
.sentualNewMessagesDivider{width:100%;display:grid;grid-template-rows:1px auto;place-items:center;align-self:stretch;margin:13px 0 10px;pointer-events:none;-webkit-user-select:none;user-select:none}
.sentualNewMessagesDivider i{display:block;width:100%;height:1px;background:color-mix(in srgb,var(--accent) 36%,var(--line) 64%);box-shadow:0 1px 5px rgba(0,0,0,.08)}
.sentualNewMessagesDivider span{float:none!important;margin:5px 0 0!important;padding:0 7px!important;color:color-mix(in srgb,var(--accent) 72%,var(--muted) 28%)!important;font-size:9px!important;font-weight:600!important;line-height:1.2!important;letter-spacing:.12px;background:var(--chat);border-radius:8px}

#messages .bubble>.replyQuote{position:relative!important;display:block!important;width:fit-content!important;min-width:108px!important;max-width:min(285px,64vw)!important;margin:0 0 7px!important;padding:7px 10px 7px 13px!important;box-sizing:border-box!important;border:1px solid color-mix(in srgb,var(--accent) 18%,var(--line) 82%)!important;border-left:0!important;border-radius:11px!important;background:color-mix(in srgb,var(--side) 62%,transparent)!important;box-shadow:inset 0 1px 0 rgba(255,255,255,.025),0 1px 3px rgba(0,0,0,.055)!important;overflow:hidden!important;text-align:start!important;white-space:normal!important}
#messages .bubble>.replyQuote::before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:3px;border-radius:0 4px 4px 0;background:color-mix(in srgb,var(--accent) 88%,white 12%)}
#messages .bubble>.replyQuote b{display:block!important;margin:0 0 2px!important;color:color-mix(in srgb,var(--accent) 80%,var(--text) 20%)!important;font-size:10px!important;font-weight:700!important;line-height:1.3!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}
#messages .bubble>.replyQuote span{display:-webkit-box!important;float:none!important;margin:0!important;padding:0!important;color:color-mix(in srgb,var(--text) 62%,var(--muted) 38%)!important;font-size:10.5px!important;line-height:1.38!important;font-weight:450!important;white-space:normal!important;overflow:hidden!important;text-overflow:ellipsis!important;-webkit-box-orient:vertical!important;-webkit-line-clamp:2!important;line-clamp:2!important;max-height:2.76em!important;word-break:break-word!important;overflow-wrap:anywhere!important}
#messages .bubble.me>.replyQuote{background:color-mix(in srgb,var(--mine) 67%,var(--side) 33%)!important;border-color:color-mix(in srgb,var(--accent) 25%,var(--line) 75%)!important}

@media(min-width:821px){
  #messages .bubble.file.attachmentCard.attachment-image{position:relative!important;width:min(430px,70%)!important;min-width:0!important;max-width:70%!important;min-height:0!important;padding:0!important;border:0!important;border-radius:18px 18px 18px 6px!important;background:transparent!important;box-shadow:none!important;overflow:hidden!important}
  #messages .bubble.file.attachmentCard.attachment-image.me{border-radius:18px 18px 6px 18px!important}
  #messages .attachmentCard.attachment-image .filePreview{display:none!important}
  #messages .attachmentCard.attachment-image .inlineMedia{display:grid!important;place-items:center!important;width:100%!important;min-height:160px!important;border:0!important;border-radius:inherit!important;background:#080e14!important;overflow:hidden!important}
  #messages .attachmentCard.attachment-image .inlineMedia.sentualPhotoHasGeometry{min-height:0!important}
  #messages .attachmentCard.attachment-image .inlineMedia img{display:block!important;width:100%!important;height:100%!important;max-height:68vh!important;object-fit:cover!important;border:0!important;background:#080e14!important}
  #messages .attachmentCard.attachment-image .attachmentCaption{position:relative!important;z-index:3;margin-top:3px!important;padding:9px 11px 25px!important;border:0!important;border-radius:12px!important;background:var(--bubble)!important;color:var(--text)!important}
  #messages .attachmentCard.attachment-image.me .attachmentCaption{background:var(--mine)!important}
  #messages .attachmentCard.attachment-image>.messageStamp{position:absolute!important;z-index:5;right:7px!important;bottom:6px!important;width:auto!important;padding:3px 6px!important;margin:0!important;border-radius:8px!important;background:rgba(0,0,0,.52)!important;color:#fff!important;box-shadow:none!important;backdrop-filter:blur(7px)!important;-webkit-backdrop-filter:blur(7px)!important}
  #messages .attachmentCard.attachment-image>.attachmentCaption~.messageStamp{right:8px!important;bottom:7px!important;background:color-mix(in srgb,var(--bubble) 74%,transparent)!important;color:var(--muted)!important}
  #messages .attachmentCard.attachment-image.me>.attachmentCaption~.messageStamp{background:color-mix(in srgb,var(--mine) 78%,transparent)!important}
}


/* ===== SENTUAL v56: protected previews + custom/persistent audio ===== */
.sentualLinkPreview,.sentualLinkPreview *{-webkit-touch-callout:none!important;-webkit-user-select:none!important;user-select:none!important}
.sentualLinkPreview{outline:0!important}

/* media/card geometry is application-controlled; browser anchoring may not reinterpret async loads */
#messages{overflow-anchor:none!important}
#messages>.bubble{overflow-anchor:none}

/* Inline audio player */
#messages .attachmentCard.attachment-audio{width:min(455px,82%)!important;min-width:290px!important;overflow:visible!important}
#messages .attachmentCard.attachment-audio>.filePreview{display:none!important}
#messages .attachmentCard.attachment-audio .inlineMedia{display:block!important;min-height:0!important;padding:0!important;background:transparent!important;border:0!important;overflow:visible!important}
.sentualAudioCard{display:grid;grid-template-columns:50px minmax(0,1fr) 36px;align-items:center;gap:10px;width:100%;min-height:76px;padding:10px 11px;border:1px solid color-mix(in srgb,var(--accent) 18%,var(--line));border-radius:17px;background:color-mix(in srgb,var(--side) 78%,transparent);box-shadow:0 4px 18px rgba(0,0,0,.08);color:var(--text);direction:ltr}
.bubble.me .sentualAudioCard{background:color-mix(in srgb,var(--mine) 76%,var(--side) 24%);border-color:color-mix(in srgb,var(--accent) 25%,var(--line))}
.sentualAudioArt{position:relative;width:50px;height:50px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 38%,#20313d),#16232d);color:#bcecff;font-size:20px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.06);overflow:visible}
.sentualAudioArt>span{opacity:.5;pointer-events:none}.sentualAudioPlay{position:absolute;inset:5px;border:0;border-radius:50%;display:grid;place-items:center;background:rgba(6,13,19,.58);color:#fff;font-size:15px;line-height:1;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);outline:0!important;box-shadow:none!important}.sentualAudioPlay:active{transform:scale(.92)}
.sentualAudioMain{min-width:0;display:flex;flex-direction:column;gap:9px}.sentualAudioMain>b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:1.25;color:var(--text)}
.sentualAudioProgressRow{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px}.sentualAudioProgress{width:100%;height:3px;margin:0;accent-color:var(--accent);cursor:pointer}.sentualAudioTime{font-size:8.5px;line-height:1;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.sentualAudioDownload{width:34px;height:34px;padding:0;border:1px solid color-mix(in srgb,var(--accent) 20%,var(--line));border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--bubble) 74%,transparent);color:var(--accent);outline:0!important;box-shadow:none!important}.sentualAudioDownload svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.sentualAudioDownload:active{transform:scale(.92)}
:root[data-theme="light"] .sentualAudioCard{background:rgba(255,255,255,.84);border-color:#d7e2e9}:root[data-theme="light"] .bubble.me .sentualAudioCard{background:#dff3fb;border-color:#badde9}:root[data-theme="light"] .sentualAudioDownload{background:rgba(255,255,255,.72)}

/* Persistent top player. It belongs to the messenger shell, not a conversation, so navigation never removes it. */
.messenger{position:relative}
.sentualGlobalAudioPlayer{position:absolute;z-index:120;top:0;left:0;right:0;height:46px;display:grid;grid-template-columns:31px 34px 31px minmax(140px,1fr) auto 34px 38px 34px 32px;align-items:center;gap:4px;padding:5px 9px;border-bottom:1px solid rgba(255,255,255,.08);background:rgba(13,25,36,.96);color:#f1f6f9;box-shadow:0 5px 22px rgba(0,0,0,.18);backdrop-filter:blur(18px) saturate(1.08);-webkit-backdrop-filter:blur(18px) saturate(1.08)}
.sentualGlobalAudioPlayer.hidden{display:none!important}.messenger.sentualGlobalAudioActive{padding-top:46px}
.sentualGlobalAudioPlayer button{height:32px;padding:0;border:0;border-radius:9px;background:transparent;color:#9cc8df;display:grid;place-items:center;font-size:15px;outline:0!important;box-shadow:none!important}.sentualGlobalAudioPlayer button:active{background:rgba(255,255,255,.08);transform:scale(.94)}
.sentualGlobalAudioPlay{color:#70c8f1!important;font-size:16px!important}.sentualGlobalAudioMain{min-width:0;display:grid;grid-template-columns:auto minmax(70px,1fr);align-items:center;gap:11px}.sentualGlobalAudioTitle{min-width:0;max-width:430px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.2;color:#fff}.sentualGlobalAudioRange{width:100%;height:3px;margin:0;accent-color:#55bff0}.sentualGlobalAudioClock{font-size:9px;color:#8ba9bb;font-variant-numeric:tabular-nums;white-space:nowrap}.sentualGlobalAudioSpeed{font-size:9px!important;font-weight:700}.sentualGlobalAudioClose{color:#738b9b!important;font-size:20px!important}.sentualGlobalAudioDownload{font-size:19px!important}#sentualGlobalAudio{display:none!important}

@media(max-width:820px){
  #messages .attachmentCard.attachment-audio{width:min(92%,410px)!important;min-width:260px!important;max-width:92%!important}
  .sentualAudioCard{grid-template-columns:46px minmax(0,1fr) 34px;min-height:70px;padding:9px}.sentualAudioArt{width:46px;height:46px}.sentualAudioMain>b{font-size:11px}.sentualAudioTime{font-size:8px}
  .sentualGlobalAudioPlayer{position:fixed;height:calc(46px + env(safe-area-inset-top));padding-top:calc(5px + env(safe-area-inset-top));grid-template-columns:30px 34px 30px minmax(80px,1fr) auto 32px 32px 30px;gap:2px;padding-left:7px;padding-right:7px}
  .sentualGlobalAudioMute{display:none!important}.sentualGlobalAudioTitle{font-size:10px;max-width:none}.sentualGlobalAudioMain{display:block}.sentualGlobalAudioRange{display:block;margin-top:5px}.sentualGlobalAudioClock{font-size:8px}.sentualGlobalAudioPlayer button{height:30px}
  .messenger.sentualGlobalAudioActive{padding-top:calc(46px + env(safe-area-inset-top))}
  .messenger.sentualGlobalAudioActive .sideHead{padding-top:0!important;height:64px!important}
  .messenger.sentualGlobalAudioActive .chat{top:calc(46px + env(safe-area-inset-top))!important}
  .messenger.sentualGlobalAudioActive .chatHead{padding-top:0!important;height:64px!important}
}


/* ===== SENTUAL v57: music UI, upload progress and reactions ===== */
#messages .attachmentCard.attachment-audio{width:min(430px,86%)!important;min-width:300px!important;padding:0!important;border:0!important;background:transparent!important;overflow:visible!important}
.sentualV57AudioCard{position:relative;display:grid;grid-template-columns:54px minmax(0,1fr) 38px;align-items:center;gap:10px;min-height:78px;padding:9px 10px;border:1px solid color-mix(in srgb,var(--accent) 18%,var(--line));border-radius:18px;background:color-mix(in srgb,#102231 88%,transparent);color:#edf7fb;box-shadow:0 7px 22px rgba(0,0,0,.15);direction:ltr;overflow:hidden}
.bubble.me .sentualV57AudioCard{background:color-mix(in srgb,var(--mine) 36%,#102231 64%)}
.sentualV57AudioArt{position:relative;width:54px;height:54px;border-radius:50%;display:grid;place-items:center;overflow:hidden;background:linear-gradient(145deg,#283a48,#10202c);color:#94d7f4;font-size:21px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}.sentualV57AudioArt img{width:100%;height:100%;object-fit:cover}.sentualV57AudioArt>span{opacity:.72}
.sentualV57AudioPlay{position:absolute;inset:6px;border:0!important;border-radius:50%!important;background:rgba(4,10,15,.56)!important;color:white!important;display:grid!important;place-items:center!important;font-size:15px!important;box-shadow:none!important;outline:0!important;backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px)}.sentualV57AudioPlay:active{transform:scale(.91)}
.sentualV57AudioMain{min-width:0;display:flex;flex-direction:column;gap:5px;overflow:hidden}.sentualV57AudioMain b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;line-height:1.3;color:#fff}.sentualV57AudioSub{font-size:10px;line-height:1;color:#7f9aad;font-variant-numeric:tabular-nums;white-space:nowrap}.sentualV57AudioProgress{width:100%;height:3px;margin:3px 0 0;accent-color:#54bff0;cursor:pointer}
.sentualV57AudioDownload{width:34px!important;height:34px!important;padding:0!important;border:0!important;border-radius:50%!important;display:grid!important;place-items:center!important;background:#249be0!important;color:#fff!important;box-shadow:0 5px 14px rgba(27,145,211,.28)!important;outline:0!important}.sentualV57AudioDownload svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.sentualV57AudioDownload:active{transform:scale(.91)}
:root[data-theme="light"] .sentualV57AudioCard{background:#10283a;border-color:#173d55}.sentualV57AudioCard.buffering::after{content:'';position:absolute;left:0;bottom:0;height:2px;width:28%;background:#4bbcf1;animation:sentualV57Buffer 1s ease-in-out infinite alternate}@keyframes sentualV57Buffer{to{transform:translateX(250%)}}

.sentualV57TopPlayer{position:absolute!important;z-index:130!important;top:0!important;left:0!important;right:0!important;height:44px!important;display:grid!important;grid-template-columns:auto minmax(140px,1fr) auto auto!important;align-items:center!important;gap:10px!important;padding:0 10px 3px!important;background:#102231!important;color:#eef8fd!important;border-bottom:1px solid #20384a!important;box-shadow:0 5px 18px rgba(0,0,0,.18)!important;overflow:hidden!important}.sentualV57TopPlayer.hidden{display:none!important}.sentualV57TopControls,.sentualV57TopTools{display:flex;align-items:center;gap:2px;min-width:0}.sentualV57TopPlayer button{width:30px!important;height:30px!important;padding:0!important;border:0!important;border-radius:8px!important;background:transparent!important;color:#76b8df!important;box-shadow:none!important;outline:0!important;font-size:12px!important;display:grid!important;place-items:center!important}.sentualV57TopPlayer button:active,.sentualV57TopPlayer button.active{background:rgba(90,188,238,.12)!important;color:#5bc3f4!important;transform:scale(.94)}.sentualV57TopPlay{font-size:15px!important;color:#65c6f3!important}.sentualV57TopTitle{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:#fff}.sentualV57TopClock{font-size:10px;color:#89a9bd;font-variant-numeric:tabular-nums}.sentualV57TopProgress{position:absolute;left:0;right:0;bottom:-1px;width:100%;height:3px;margin:0;accent-color:#3db7ef;border:0}.sentualV57TopPlayer #sentualGlobalAudio{display:none!important}.messenger.sentualGlobalAudioActive{padding-top:44px!important}
@media(max-width:820px){#messages .attachmentCard.attachment-audio{width:min(92%,410px)!important;min-width:270px!important}.sentualV57AudioCard{grid-template-columns:50px minmax(0,1fr) 36px;min-height:72px;padding:8px}.sentualV57AudioArt{width:50px;height:50px}.sentualV57TopPlayer{position:fixed!important;height:calc(44px + env(safe-area-inset-top))!important;padding-top:env(safe-area-inset-top)!important;grid-template-columns:auto minmax(80px,1fr) auto!important;gap:4px!important}.sentualV57TopClock{display:none}.sentualV57TopTools button[data-act="shuffle"],.sentualV57TopTools button[data-act="repeat"]{display:none!important}.messenger.sentualGlobalAudioActive{padding-top:calc(44px + env(safe-area-inset-top))!important}.messenger.sentualGlobalAudioActive .chat{top:calc(44px + env(safe-area-inset-top))!important}}

.sentualV57UploadBubble{min-width:280px!important;max-width:min(430px,86%)!important;padding:10px 11px!important}.sentualV57UploadBody{display:grid;grid-template-columns:46px minmax(0,1fr);align-items:center;gap:10px}.sentualV57UploadIcon{width:46px;height:46px;border-radius:14px;display:grid;place-items:center;background:color-mix(in srgb,var(--accent) 16%,var(--side));color:var(--accent);font-size:18px}.sentualV57UploadMain{min-width:0;display:flex;flex-direction:column;gap:5px}.sentualV57UploadMain>b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.sentualV57UploadStatus{font-size:9px;color:var(--muted);display:flex;align-items:center;gap:7px}.sentualV57UploadProgress{position:relative;display:block;width:100%;height:3px;border-radius:99px;background:color-mix(in srgb,var(--line) 80%,transparent);overflow:hidden}.sentualV57UploadProgress::after{content:'';position:absolute;inset:0 auto 0 0;width:var(--p,0%);border-radius:inherit;background:var(--accent);transition:width .12s linear}.sentualV57UploadRetry{border:0!important;background:transparent!important;color:var(--danger,#ff5c64)!important;padding:0!important;font-size:9px!important;text-decoration:underline;box-shadow:none!important}
.sentualOptimisticPhoto .sentualPhotoSendStatus{font-variant-numeric:tabular-nums}

.messageContextMenu .sentualReactionPicker{display:flex!important;align-items:center;gap:5px;width:100%;max-width:100%;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;padding:5px 4px 8px;margin:0 0 4px;border-bottom:1px solid color-mix(in srgb,var(--line) 75%,transparent);overscroll-behavior:contain;scroll-behavior:smooth}.messageContextMenu .sentualReactionPicker::-webkit-scrollbar{display:none}.messageContextMenu .sentualReactionChoice{flex:0 0 36px!important;width:36px!important;height:36px!important;min-width:36px!important;padding:0!important;border:0!important;border-radius:12px!important;background:color-mix(in srgb,var(--side) 82%,transparent)!important;font-size:20px!important;line-height:1!important;display:grid!important;place-items:center!important;box-shadow:none!important}.messageContextMenu .sentualReactionChoice:active{transform:scale(.9)}
.sentualReactionStrip{display:flex;gap:3px;flex-wrap:wrap;align-items:center;margin:4px 0 0;position:relative;z-index:8;direction:ltr}.sentualReactionChip{height:21px!important;min-width:27px!important;padding:1px 6px!important;border:1px solid color-mix(in srgb,var(--accent) 18%,var(--line))!important;border-radius:999px!important;background:color-mix(in srgb,var(--side) 78%,transparent)!important;color:var(--text)!important;font-size:11px!important;line-height:1!important;box-shadow:none!important}.sentualReactionChip.mine{background:color-mix(in srgb,var(--accent) 20%,var(--side))!important;border-color:color-mix(in srgb,var(--accent) 42%,var(--line))!important}


/* ===== SENTUAL v58: corrected music player placement/theme/progress ===== */
.sentualV57AudioProgress,.sentualV57TopProgress{
  --played:0%;--buffered:0%;-webkit-appearance:none!important;appearance:none!important;border:0!important;outline:0!important;
  background:linear-gradient(90deg,var(--accent) 0 var(--played),color-mix(in srgb,var(--accent) 28%,var(--line)) var(--played) var(--buffered),color-mix(in srgb,var(--line) 78%,transparent) var(--buffered) 100%)!important;
  border-radius:999px!important;overflow:visible!important;box-shadow:none!important
}
.sentualV57AudioProgress{height:4px!important;margin:4px 0 0!important}
.sentualV57AudioProgress::-webkit-slider-runnable-track,.sentualV57TopProgress::-webkit-slider-runnable-track{height:4px;background:transparent;border:0;border-radius:999px}
.sentualV57AudioProgress::-moz-range-track,.sentualV57TopProgress::-moz-range-track{height:4px;background:transparent;border:0;border-radius:999px}
.sentualV57AudioProgress::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:10px;height:10px;margin-top:-3px;border:0;border-radius:50%;background:var(--accent);box-shadow:0 1px 4px rgba(0,0,0,.2)}
.sentualV57AudioProgress::-moz-range-thumb{width:10px;height:10px;border:0;border-radius:50%;background:var(--accent);box-shadow:0 1px 4px rgba(0,0,0,.2)}
.sentualV57TopProgress::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:8px;height:8px;margin-top:-2px;border:0;border-radius:50%;background:var(--accent);box-shadow:0 1px 4px rgba(0,0,0,.18)}
.sentualV57TopProgress::-moz-range-thumb{width:8px;height:8px;border:0;border-radius:50%;background:var(--accent)}
.sentualV57AudioPlay svg,.sentualV57TopPlayer button svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.sentualV57AudioPlay svg path:first-child:only-child{fill:currentColor;stroke:currentColor}

/* Correct light-theme message player instead of forcing a dark card. */
:root[data-theme="light"] .sentualV57AudioCard{background:rgba(255,255,255,.94)!important;border-color:#d6e2e9!important;color:#17252f!important;box-shadow:0 8px 24px rgba(31,58,74,.11)!important}
:root[data-theme="light"] .bubble.me .sentualV57AudioCard{background:#eef8fd!important;border-color:#c9e5f2!important}
:root[data-theme="light"] .sentualV57AudioMain b{color:#17252f!important}
:root[data-theme="light"] .sentualV57AudioSub{color:#708593!important}
:root[data-theme="light"] .sentualV57AudioArt{background:linear-gradient(145deg,#edf4f7,#dfeaf0)!important;color:#2b8fbd!important;box-shadow:inset 0 0 0 1px rgba(35,73,94,.08)!important}
:root[data-theme="light"] .sentualV57AudioPlay{background:rgba(23,42,54,.76)!important;color:#fff!important}

/* Dock the persistent player in normal chat flow, directly below the profile/header. */
.sentualV57TopPlayer{
  position:relative!important;z-index:14!important;top:auto!important;left:auto!important;right:auto!important;flex:0 0 48px!important;width:100%!important;height:48px!important;
  display:grid!important;grid-template-columns:auto minmax(120px,1fr) auto auto!important;align-items:center!important;gap:9px!important;padding:0 10px 4px!important;
  background:rgba(15,35,49,.97)!important;color:#eef8fd!important;border:0!important;border-bottom:1px solid #203b4d!important;box-shadow:0 4px 13px rgba(0,0,0,.13)!important;overflow:hidden!important;
  backdrop-filter:blur(16px)!important;-webkit-backdrop-filter:blur(16px)!important
}
.sentualV57TopPlayer.hidden{display:none!important}.sentualV58TopTrack{min-width:0;overflow:hidden}.sentualV57TopTitle{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px!important;color:#f4f8fb!important}
.sentualV57TopClock{font-size:10px!important;color:#86a6b9!important;font-variant-numeric:tabular-nums;white-space:nowrap}
.sentualV57TopControls,.sentualV57TopTools{display:flex;align-items:center;gap:2px;min-width:0}.sentualV57TopPlayer button{width:30px!important;height:30px!important;padding:0!important;border:0!important;border-radius:9px!important;background:transparent!important;color:#74bce4!important;box-shadow:none!important;outline:0!important;display:grid!important;place-items:center!important;transform:none!important}
.sentualV57TopPlayer button:hover{background:rgba(89,185,234,.08)!important}.sentualV57TopPlayer button:active,.sentualV57TopPlayer button.active{background:rgba(89,185,234,.14)!important;color:#59c5f5!important;transform:scale(.93)!important}
.sentualV57TopPlayer button svg{width:17px;height:17px}.sentualV58Speed{grid-template-columns:auto auto!important;width:auto!important;min-width:42px!important;padding:0 5px!important;gap:2px!important}.sentualV58Speed small{font-size:8px;font-weight:700;color:currentColor}
.sentualV57TopProgress{position:absolute!important;left:0!important;right:0!important;bottom:0!important;width:100%!important;height:3px!important;margin:0!important}
.sentualV57TopPlayer #sentualGlobalAudio{display:none!important}
.messenger.sentualGlobalAudioActive{padding-top:0!important}.messenger.sentualGlobalAudioActive .chat{top:auto!important}.chat.sentualAudioDocked .pinnedBar{top:112px!important}

:root[data-theme="light"] .sentualV57TopPlayer{background:rgba(247,251,253,.97)!important;color:#1d303d!important;border-bottom-color:#d6e2e8!important;box-shadow:0 5px 15px rgba(32,63,80,.10)!important}
:root[data-theme="light"] .sentualV57TopTitle{color:#1a2a35!important}:root[data-theme="light"] .sentualV57TopClock{color:#728897!important}:root[data-theme="light"] .sentualV57TopPlayer button{color:#4f829f!important}:root[data-theme="light"] .sentualV57TopPlayer button:hover{background:rgba(42,171,238,.08)!important}:root[data-theme="light"] .sentualV57TopPlayer button:active,:root[data-theme="light"] .sentualV57TopPlayer button.active{background:rgba(42,171,238,.14)!important;color:#1f95ce!important}

@media(max-width:820px){
  .sentualV57TopPlayer{position:relative!important;flex-basis:46px!important;height:46px!important;padding:0 7px 3px!important;grid-template-columns:auto minmax(70px,1fr) auto!important;gap:3px!important}
  .sentualV57TopClock{display:none!important}.sentualV57TopTools{gap:0!important}.sentualV57TopTools button[data-act="shuffle"]{display:none!important}.sentualV57TopTools button[data-act="speed"]{display:none!important}.sentualV57TopPlayer button{width:28px!important;height:28px!important}.sentualV58Speed{min-width:28px!important;padding:0!important}.chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top) + 46px)!important}
}

/* Reactions should feel immediate even before the network round trip completes. */
.sentualReactionStrip{transition:opacity .12s ease,transform .12s ease}.sentualReactionChip{transition:background .12s ease,border-color .12s ease,transform .1s ease}.sentualReactionChip.mine{transform:translateY(-1px)}


/* ===== SENTUAL v59: mobile-safe music dock, modern timelines, cancellable uploads ===== */
/* Never let the legacy global-player layout class override the iOS visual viewport. */
@media(max-width:820px){
  .messenger.sentualGlobalAudioActive #chat.mobileOpen,
  #messenger.sentualGlobalAudioActive #chat.mobileOpen{
    top:var(--sentual-vv-top,0px)!important;
    bottom:auto!important;
    height:var(--sentual-vv-height,var(--sentual-screen-height))!important;
    min-height:0!important;
    max-height:none!important;
  }
}

/* Player lives in chat flow under the contact header. It opens down and closes up. */
.sentualV57TopPlayer{
  min-height:0!important;height:0!important;flex:0 0 0!important;
  padding-top:0!important;padding-bottom:0!important;
  opacity:0!important;transform:translate3d(0,-14px,0)!important;
  pointer-events:none!important;border-bottom-width:0!important;
  transition:height .24s cubic-bezier(.2,.82,.2,1),flex-basis .24s cubic-bezier(.2,.82,.2,1),padding .24s cubic-bezier(.2,.82,.2,1),opacity .16s ease,transform .24s cubic-bezier(.2,.82,.2,1),border-color .2s ease!important;
  will-change:height,transform,opacity;
}
.sentualV57TopPlayer.sentualPlayerVisible{
  height:50px!important;flex-basis:50px!important;padding:0 10px 4px!important;
  opacity:1!important;transform:translate3d(0,0,0)!important;pointer-events:auto!important;
  border-bottom-width:1px!important;
}
@media(max-width:820px){
  .sentualV57TopPlayer.sentualPlayerVisible{height:48px!important;flex-basis:48px!important;padding:0 7px 3px!important}
}
.chat.sentualAudioDocked .pinnedBar{top:calc(64px + 50px)!important}
@media(max-width:820px){.chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top) + 48px)!important}}

/* Precise timeline: browser range is only the invisible hit target. */
.sentualV59Timeline{--played:0%;--buffered:0%;position:relative;width:100%;height:18px;display:block;touch-action:none;cursor:pointer;isolation:isolate}
.sentualV59TimelineRail,.sentualV59TimelineBuffer,.sentualV59TimelinePlayed{position:absolute;left:0;top:50%;height:4px;transform:translateY(-50%);border-radius:999px;pointer-events:none}
.sentualV59TimelineRail{right:0;background:color-mix(in srgb,var(--line) 76%,transparent)}
.sentualV59TimelineBuffer{width:var(--buffered);background:color-mix(in srgb,var(--accent) 30%,var(--line));transition:width .18s linear}
.sentualV59TimelinePlayed{width:var(--played);background:var(--accent);transition:width .08s linear;box-shadow:0 0 0 1px color-mix(in srgb,var(--accent) 8%,transparent)}
.sentualV59TimelineKnob{position:absolute;z-index:2;left:var(--played);top:50%;width:10px;height:10px;border-radius:50%;background:var(--accent);transform:translate(-50%,-50%);box-shadow:0 1px 5px rgba(0,0,0,.22);pointer-events:none;transition:left .08s linear,transform .12s ease}
.sentualV59Timeline:hover .sentualV59TimelineKnob{transform:translate(-50%,-50%) scale(1.12)}
.sentualV59Timeline input[type="range"]{position:absolute!important;z-index:4!important;inset:0!important;width:100%!important;height:100%!important;margin:0!important;padding:0!important;opacity:0!important;appearance:none!important;-webkit-appearance:none!important;cursor:pointer!important;background:transparent!important;border:0!important;box-shadow:none!important}
.sentualV59Timeline.compact{height:13px}.sentualV59Timeline.compact .sentualV59TimelineRail,.sentualV59Timeline.compact .sentualV59TimelineBuffer,.sentualV59Timeline.compact .sentualV59TimelinePlayed{height:3px}.sentualV59Timeline.compact .sentualV59TimelineKnob{width:8px;height:8px}

/* Inline audio card polish. */
#messages .attachmentCard.attachment-audio{width:min(445px,88%)!important;min-width:300px!important}
.sentualV57AudioCard.sentualV59AudioCard{grid-template-columns:56px minmax(0,1fr) 38px;gap:11px;min-height:82px;padding:10px 11px;border-radius:19px;background:color-mix(in srgb,#102231 90%,transparent);border:1px solid color-mix(in srgb,var(--accent) 18%,var(--line));box-shadow:0 8px 24px rgba(0,0,0,.14)}
.sentualV59AudioCard .sentualV57AudioArt{width:56px;height:56px}.sentualV59AudioCard .sentualV57AudioPlay{inset:7px;background:rgba(5,13,18,.58)!important;transition:transform .13s ease,background .13s ease}.sentualV59AudioCard .sentualV57AudioPlay:hover{background:rgba(5,13,18,.68)!important}.sentualV59AudioCard .sentualV57AudioMain{gap:1px}.sentualV59AudioCard .sentualV57AudioMain b{font-size:13px;letter-spacing:-.08px}.sentualV59AudioCard .sentualV57AudioSub{font-size:9px;margin-top:2px}.sentualV59AudioCard .sentualV59Timeline{margin-top:2px}
.sentualV59AudioCard .sentualV57AudioDownload{width:36px!important;height:36px!important;transition:transform .13s ease,filter .13s ease}.sentualV59AudioCard .sentualV57AudioDownload:hover{filter:brightness(1.06)}
:root[data-theme="light"] .sentualV59AudioCard{background:rgba(255,255,255,.96)!important;border-color:#d6e5ed!important;box-shadow:0 9px 26px rgba(46,75,91,.10)!important}:root[data-theme="light"] .bubble.me .sentualV59AudioCard{background:#eef8fd!important}
@media(max-width:820px){#messages .attachmentCard.attachment-audio{width:min(94%,430px)!important;min-width:272px!important}.sentualV57AudioCard.sentualV59AudioCard{grid-template-columns:52px minmax(0,1fr) 36px;gap:9px;min-height:76px;padding:9px}.sentualV59AudioCard .sentualV57AudioArt{width:52px;height:52px}}

/* Top/docked player refinements and clear repeat state. */
.sentualV57TopPlayer.sentualV59TopPlayer{grid-template-columns:auto minmax(130px,1fr) auto auto!important;gap:8px!important;background:rgba(15,35,49,.96)!important}
.sentualV59TopPlayer .sentualV59TopTrack{display:flex;flex-direction:column;justify-content:center;min-width:0;gap:1px}.sentualV59TopPlayer .sentualV57TopTitle{font-size:12px!important;line-height:1.2}.sentualV59TopPlayer .sentualV59TopSub{font-size:8px;color:#7899ad;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sentualV59TopPlayer .sentualV59Timeline{position:absolute;left:0;right:0;bottom:0;width:100%;height:10px}.sentualV59TopPlayer .sentualV59TimelineRail,.sentualV59TopPlayer .sentualV59TimelineBuffer,.sentualV59TopPlayer .sentualV59TimelinePlayed{top:auto;bottom:0;transform:none}.sentualV59TopPlayer .sentualV59TimelineKnob{top:auto;bottom:-2.5px;transform:translateX(-50%)}.sentualV59TopPlayer button[data-act="repeat"].active{color:#39b9f3!important;background:rgba(57,185,243,.13)!important}.sentualV59TopPlayer button[data-act="repeat"].active svg{filter:drop-shadow(0 0 3px rgba(57,185,243,.28))}.sentualV59TopPlayer .sentualRepeatDot{fill:currentColor;stroke:none}
:root[data-theme="light"] .sentualV57TopPlayer.sentualV59TopPlayer{background:rgba(248,252,254,.97)!important;border-bottom-color:#d8e4ea!important}:root[data-theme="light"] .sentualV59TopPlayer .sentualV59TopSub{color:#78909e}
@media(max-width:820px){.sentualV57TopPlayer.sentualV59TopPlayer{grid-template-columns:auto minmax(70px,1fr) auto!important;gap:3px!important}.sentualV59TopPlayer .sentualV59TopSub{display:none}.sentualV59TopPlayer .sentualV57TopTools button[data-act="shuffle"],.sentualV59TopPlayer .sentualV57TopTools button[data-act="speed"]{display:none!important}.sentualV59TopPlayer .sentualV57TopTools button[data-act="repeat"]{display:grid!important}}

/* Modern upload placeholder with real cancel action for every attachment type. */
.sentualV57UploadBubble.sentualV59UploadBubble{min-width:292px!important;max-width:min(450px,88%)!important;padding:0!important;background:transparent!important;border:0!important;overflow:visible!important}
.sentualV59UploadBubble .sentualV57UploadBody{position:relative;display:grid;grid-template-columns:52px minmax(0,1fr) 34px;align-items:center;gap:10px;min-height:78px;padding:10px 10px 10px 11px;border-radius:18px;border:1px solid color-mix(in srgb,var(--accent) 15%,var(--line));background:color-mix(in srgb,var(--side) 92%,transparent);box-shadow:0 8px 24px rgba(0,0,0,.10);overflow:hidden}
.sentualV59UploadIcon{width:52px;height:52px;border-radius:16px;display:grid;place-items:center;color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--side));border:1px solid color-mix(in srgb,var(--accent) 14%,var(--line));line-height:0}.sentualV59UploadIcon svg{width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sentualV59UploadBubble .sentualV57UploadMain{gap:3px;min-width:0}.sentualV59UploadBubble .sentualV57UploadMain>b{font-size:12px;line-height:1.3;color:var(--text)}.sentualV59UploadBubble .sentualV57UploadStatus{font-size:9px;line-height:1.2;color:var(--muted);min-height:12px}.sentualV59UploadBubble .sentualV57UploadProgress{height:4px;margin-top:2px;background:color-mix(in srgb,var(--line) 78%,transparent)}
.sentualUploadCancel{width:32px!important;height:32px!important;min-width:32px!important;padding:0!important;border:1px solid color-mix(in srgb,var(--line) 82%,transparent)!important;border-radius:50%!important;background:color-mix(in srgb,var(--side) 84%,transparent)!important;color:var(--muted)!important;display:grid!important;place-items:center!important;box-shadow:none!important;outline:0!important;transition:transform .13s ease,background .13s ease,color .13s ease,opacity .13s ease}.sentualUploadCancel svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}.sentualUploadCancel:hover{background:color-mix(in srgb,var(--danger,#ef6368) 10%,var(--side))!important;color:var(--danger,#ef6368)!important}.sentualUploadCancel:active{transform:scale(.9)}
.sentualOptimisticPhoto>.sentualUploadCancel{position:absolute!important;z-index:10;right:9px;top:9px;background:rgba(8,15,20,.52)!important;color:#fff!important;border-color:rgba(255,255,255,.14)!important;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}
.sentualUploadCancelling{pointer-events:none!important;opacity:.65!important;transform:scale(.985)!important;transition:opacity .16s ease,transform .16s ease!important}.sentualUploadCancelled{opacity:0!important;transform:scale(.96) translateY(4px)!important}
:root[data-theme="light"] .sentualV59UploadBubble .sentualV57UploadBody{background:rgba(255,255,255,.93);border-color:#d9e4ea;box-shadow:0 8px 22px rgba(37,64,78,.08)}:root[data-theme="light"] .sentualV59UploadIcon{background:#eff7fb;border-color:#d8eaf2}:root[data-theme="light"] .sentualV59UploadBubble .sentualUploadCancel{background:#f4f8fa!important;color:#6d7f8b!important;border-color:#d8e3e9!important}

/* Custom textarea right-click copy menu. */
.sentualInputContextMenu{position:fixed;z-index:10020;min-width:132px;padding:5px;border:1px solid color-mix(in srgb,var(--line) 88%,transparent);border-radius:12px;background:color-mix(in srgb,var(--side) 96%,transparent);box-shadow:0 16px 46px rgba(0,0,0,.22);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);opacity:0;transform:translateY(4px) scale(.97);pointer-events:none;transition:opacity .12s ease,transform .14s cubic-bezier(.2,.82,.2,1)}.sentualInputContextMenu.show{opacity:1;transform:none;pointer-events:auto}.sentualInputContextMenu button{width:100%;height:34px;border:0;border-radius:8px;background:transparent;color:var(--text);display:flex;align-items:center;gap:8px;padding:0 10px;font-size:11px;text-align:left}.sentualInputContextMenu button:hover{background:color-mix(in srgb,var(--bubble) 78%,transparent)}.sentualInputContextMenu svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}:root[data-theme="light"] .sentualInputContextMenu{background:rgba(255,255,255,.96);border-color:#dce5ea;box-shadow:0 15px 42px rgba(41,61,73,.14)}

/* ===== SENTUAL v60: exact audio geometry + stable media cards ===== */
.chatHead{position:relative;z-index:8}
.sentualV60TopPlayer{position:relative!important;z-index:6!important;width:100%!important;max-width:none!important;overflow:hidden!important;box-sizing:border-box!important;height:0!important;min-height:0!important;flex:0 0 0!important;padding:0!important;margin:0!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;opacity:1!important;transform:none!important;visibility:hidden!important;pointer-events:none!important;transition:height .25s cubic-bezier(.22,.8,.22,1),flex-basis .25s cubic-bezier(.22,.8,.22,1),visibility 0s linear .25s!important}
.sentualV60TopPlayer .sentualV60TopInner{position:relative;height:52px;display:grid;grid-template-columns:auto 36px minmax(120px,1fr) auto auto;align-items:center;gap:8px;padding:0 10px 7px;background:rgba(15,35,49,.96);border-bottom:1px solid rgba(100,165,199,.16);box-shadow:0 6px 18px rgba(0,0,0,.12);backdrop-filter:blur(18px) saturate(1.08);-webkit-backdrop-filter:blur(18px) saturate(1.08);transform:translateY(-100%);transition:transform .25s cubic-bezier(.22,.8,.22,1)}
.sentualV60TopPlayer.sentualPlayerVisible{height:52px!important;flex-basis:52px!important;visibility:visible!important;pointer-events:auto!important;transition:height .25s cubic-bezier(.22,.8,.22,1),flex-basis .25s cubic-bezier(.22,.8,.22,1),visibility 0s!important}
.sentualV60TopPlayer.sentualPlayerVisible .sentualV60TopInner{transform:translateY(0)}
.sentualV60TopPlayer.sentualV60PlayerClosed{border:0!important;background:transparent!important;box-shadow:none!important}
.sentualV60TopPlayer .sentualV57TopControls,.sentualV60TopPlayer .sentualV57TopTools{display:flex;align-items:center;gap:2px;min-width:0}
.sentualV60TopPlayer button{width:30px!important;height:30px!important;padding:0!important;border:0!important;border-radius:9px!important;background:transparent!important;color:#78bfe5!important;box-shadow:none!important;outline:0!important;display:grid!important;place-items:center!important;filter:none!important}
.sentualV60TopPlayer button:hover{background:transparent!important;filter:none!important}.sentualV60TopPlayer button:active,.sentualV60TopPlayer button.active{background:rgba(88,190,241,.12)!important;transform:scale(.94)!important;color:#55c0f2!important}
.sentualV60TopPlayer button svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.sentualV60TopPlayer .sentualV57TopPlay svg path{fill:currentColor;stroke:none}
.sentualV60TopPlayer .sentualV58Speed{width:auto!important;min-width:34px!important}.sentualV60TopPlayer .sentualV58Speed span{font-size:9px;font-weight:700}
.sentualV60TopArt{width:32px;height:32px;border-radius:9px;overflow:hidden;background:#183142;display:grid;place-items:center}.sentualV60TopArt img{display:block;width:100%;height:100%;object-fit:cover}.sentualV60TopPlayer .sentualV59TopTrack{min-width:0}.sentualV60TopPlayer .sentualV57TopTitle{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#f4f8fb!important;font-size:12px!important}.sentualV60TopPlayer .sentualV59TopSub{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:8px;color:#819bab}.sentualV60TopPlayer .sentualV57TopClock{font-size:9px;color:#86a5b7;font-variant-numeric:tabular-nums;white-space:nowrap}
.sentualV60TopPlayer .sentualV59TopTimeline{position:absolute!important;left:7px!important;right:7px!important;bottom:0!important;width:auto!important;height:12px!important}
:root[data-theme="light"] .sentualV60TopPlayer .sentualV60TopInner{background:rgba(250,252,254,.98)!important;border-bottom-color:#d8e4ea!important;box-shadow:0 5px 14px rgba(36,63,78,.08)!important}:root[data-theme="light"] .sentualV60TopPlayer .sentualV57TopTitle{color:#1c2b35!important}:root[data-theme="light"] .sentualV60TopPlayer .sentualV59TopSub,:root[data-theme="light"] .sentualV60TopPlayer .sentualV57TopClock{color:#778d9b!important}:root[data-theme="light"] .sentualV60TopPlayer button{color:#3e86ad!important}:root[data-theme="light"] .sentualV60TopArt{background:#e8f1f6}
.chat.sentualAudioDocked .pinnedBar{top:calc(64px + 52px)!important}
.sentualV60Timeline{height:22px!important;overflow:visible!important;outline:0!important;touch-action:none!important;-webkit-tap-highlight-color:transparent!important;background:transparent!important}
.sentualV60Timeline:hover,.sentualV60Timeline:active,.sentualV60Timeline:focus{background:transparent!important;box-shadow:none!important;filter:none!important}
.sentualV60Timeline .sentualV59TimelineRail,.sentualV60Timeline .sentualV59TimelineBuffer,.sentualV60Timeline .sentualV59TimelinePlayed{left:6px!important;top:50%!important;height:4px!important;transform:translateY(-50%)!important;border-radius:999px!important}
.sentualV60Timeline .sentualV59TimelineRail{right:6px!important}.sentualV60Timeline .sentualV59TimelineBuffer,.sentualV60Timeline .sentualV59TimelinePlayed{max-width:calc(100% - 12px)!important}
.sentualV60Timeline .sentualV59TimelineKnob{left:clamp(6px,var(--played),calc(100% - 6px))!important;top:50%!important;bottom:auto!important;width:12px!important;height:12px!important;transform:translate(-50%,-50%)!important;transition:none!important;box-shadow:0 1px 4px rgba(0,0,0,.18)!important}
.sentualV60Timeline.scrubbing .sentualV59TimelineKnob{transform:translate(-50%,-50%) scale(1.18)!important}.sentualV60Timeline .sentualV59TimelinePlayed{transition:none!important}.sentualV60Timeline .sentualV59TimelineBuffer{transition:width .12s linear!important}.sentualV60TimelineBridge{display:none!important}
.sentualV60TopPlayer .sentualV60Timeline{height:14px!important}.sentualV60TopPlayer .sentualV60Timeline .sentualV59TimelineRail,.sentualV60TopPlayer .sentualV60Timeline .sentualV59TimelineBuffer,.sentualV60TopPlayer .sentualV60Timeline .sentualV59TimelinePlayed{height:3px!important}
#messages .attachmentCard.attachment-audio{background:transparent!important;border:0!important;padding:0!important;overflow:visible!important;box-shadow:none!important}
.sentualV60AudioCard{position:relative!important;grid-template-columns:56px minmax(0,1fr) 38px!important;min-height:90px!important;padding:10px 11px 24px!important;overflow:hidden!important;border-radius:20px!important}
.sentualV60AudioCard .sentualV57AudioMain{overflow:visible!important}.sentualV60AudioCard .sentualV59InlineTimeline{margin-top:0!important}.sentualV60AudioStamp{position:absolute;right:12px;bottom:6px;font-size:8px;line-height:1;color:#7f95a4;font-variant-numeric:tabular-nums;white-space:nowrap;pointer-events:none}.bubble.me .sentualV60AudioStamp{color:#7d95a4}
.sentualV60AudioCard .sentualV57AudioDownload svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}.sentualV60AudioCard .sentualV57AudioPlay svg{width:18px;height:18px;fill:currentColor;stroke:none}
:root[data-theme="light"] .sentualV60AudioCard{background:#fff!important;border-color:#d7e4eb!important;box-shadow:0 8px 24px rgba(38,66,81,.09)!important}:root[data-theme="light"] .bubble.me .sentualV60AudioCard{background:#eef8fd!important}:root[data-theme="light"] .sentualV60AudioCard .sentualV57AudioMain b{color:#17242e!important}:root[data-theme="light"] .sentualV60AudioCard .sentualV57AudioSub,:root[data-theme="light"] .sentualV60AudioStamp{color:#738794!important}
#messages .attachmentCard.attachment-image .inlineMedia,#messages .attachmentCard.attachment-image .inlineMedia-image{background:transparent!important}
#messages .attachmentCard.attachment-image .inlineMedia img{background:transparent!important;object-fit:cover!important}
@media(max-width:820px){.sentualV60TopPlayer.sentualPlayerVisible{height:54px!important;flex-basis:54px!important}.sentualV60TopPlayer .sentualV60TopInner{height:54px;grid-template-columns:auto 30px minmax(70px,1fr) auto;padding:0 7px 8px;gap:4px}.sentualV60TopPlayer .sentualV57TopClock{display:none}.sentualV60TopPlayer .sentualV57TopTools button[data-act="shuffle"],.sentualV60TopPlayer .sentualV57TopTools button[data-act="speed"]{display:none!important}.sentualV60TopPlayer .sentualV57TopTools{gap:0}.sentualV60TopPlayer button{width:28px!important;height:28px!important}.sentualV60TopArt{width:28px;height:28px;border-radius:8px}.sentualV60TopPlayer .sentualV57TopTitle{font-size:10px!important}.sentualV60TopPlayer .sentualV59TopSub{display:none}.chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top) + 54px)!important}#messages .attachmentCard.attachment-audio{width:min(94%,430px)!important;min-width:272px!important}.sentualV60AudioCard{grid-template-columns:52px minmax(0,1fr) 36px!important;min-height:86px!important;padding:9px 9px 23px!important;gap:9px!important}.sentualV60AudioCard .sentualV57AudioArt{width:52px!important;height:52px!important}}

/* ===== SENTUAL v60 FINAL: native Apple system type, exact media geometry, stable/modern audio ===== */
:root{--sentual-system-font:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","SF Arabic","Segoe UI",system-ui,sans-serif}
html,body,button,input,textarea,select,.bubble,.menu,.modal,.sentualGlobalAudioPlayer{font-family:var(--sentual-system-font)!important}

/* Photos use their real display geometry: no artificial black letterbox canvas around the image. */
#messages .attachmentCard.attachment-image{width:auto!important;max-width:min(560px,88%)!important;min-width:0!important;background:transparent!important;border:0!important;overflow:visible!important;padding:0!important}
#messages .attachmentCard.attachment-image .inlineMedia,
#messages .inlineMedia-image.sentualPhotoPlaceholder{width:auto!important;min-width:0!important;min-height:0!important;height:auto!important;background:transparent!important;border:0!important;overflow:hidden!important;border-radius:17px!important}
#messages .inlineMedia-image.sentualPhotoPlaceholder .photoOpen{display:block!important;width:100%!important;height:100%!important;min-height:0!important;background:transparent!important}
#messages .inlineMedia-image.sentualPhotoPlaceholder .photoOpen img{display:block!important;width:100%!important;height:100%!important;max-width:100%!important;max-height:none!important;object-fit:fill!important;background:transparent!important}
@media(max-width:820px){#messages .attachmentCard.attachment-image{max-width:94%!important}}

/* Timeline is a custom pointer surface. No native gray hover/tap flash; thumb has enough inset room. */
.sentualV59Timeline.sentualV60Timeline,.sentualV60Timeline{position:relative!important;background:transparent!important;box-shadow:none!important;outline:0!important;-webkit-tap-highlight-color:transparent!important;touch-action:none!important;overflow:visible!important;user-select:none!important;-webkit-user-select:none!important}
.sentualV60Timeline:hover,.sentualV60Timeline:active,.sentualV60Timeline:focus-within{background:transparent!important;box-shadow:none!important;filter:none!important}
.sentualV60Timeline .sentualV59TimelineRail,.sentualV60Timeline .sentualV59TimelineBuffer,.sentualV60Timeline .sentualV59TimelinePlayed{height:4px!important;border:0!important;box-shadow:none!important}
.sentualV60Timeline .sentualV59TimelinePlayed{transition:width .055s linear!important}
.sentualV60Timeline .sentualV59TimelineBuffer{transition:width .12s linear!important}
.sentualV60Timeline .sentualV59TimelineKnob{width:11px!important;height:11px!important;box-shadow:0 1px 4px rgba(0,0,0,.18)!important;transition:left .055s linear!important;transform:translate(-50%,-50%)!important}
.sentualV60Timeline:hover .sentualV59TimelineKnob{transform:translate(-50%,-50%)!important}
.sentualV60Timeline.sentualTimelineDragging .sentualV59TimelinePlayed,.sentualV60Timeline.sentualTimelineDragging .sentualV59TimelineKnob{transition:none!important}
.sentualV60Timeline input[type="range"]{pointer-events:none!important;background:transparent!important;box-shadow:none!important;outline:0!important;-webkit-tap-highlight-color:transparent!important}

/* One coherent inline audio surface, including timestamp + Sent. */
#messages .attachmentCard.attachment-audio{width:min(470px,88%)!important;min-width:310px!important;padding:0!important;background:transparent!important;border:0!important;overflow:visible!important}
.sentualV60AudioCard{position:relative!important;display:grid!important;grid-template-columns:58px minmax(0,1fr) 40px!important;align-items:center!important;gap:11px!important;min-height:100px!important;padding:10px 11px 27px!important;border-radius:20px!important;overflow:hidden!important;background:color-mix(in srgb,#102b3d 93%,transparent)!important;border:1px solid color-mix(in srgb,var(--accent) 20%,var(--line))!important;box-shadow:0 9px 26px rgba(0,0,0,.13)!important}
.sentualV60AudioCard .sentualV57AudioArt{width:58px!important;height:58px!important;border-radius:17px!important;overflow:hidden!important}
.sentualV60AudioCard .sentualV57AudioMain{min-width:0!important;overflow:visible!important;padding-right:2px!important}
.sentualV60AudioCard .sentualV57AudioMain>b{display:block!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important;font-size:13px!important;line-height:1.25!important}
.sentualV60AudioCard .sentualV57AudioSub{display:block!important;margin-top:3px!important;font-size:9.5px!important;line-height:1.15!important}
.sentualV60AudioCard .sentualV59InlineTimeline{width:calc(100% - 12px)!important;margin:3px 6px 0!important;height:18px!important}
.sentualV60AudioCard .sentualV57AudioDownload{width:38px!important;height:38px!important;border-radius:50%!important}
.sentualV60AudioStamp{position:absolute!important;right:10px!important;bottom:7px!important;width:auto!important;max-width:calc(100% - 20px)!important;padding:0!important;margin:0!important;display:flex!important;align-items:center!important;justify-content:flex-end!important;gap:0!important;float:none!important;background:transparent!important;color:var(--muted)!important;font-size:9px!important;line-height:1!important;white-space:nowrap!important;direction:ltr!important;box-shadow:none!important}
.sentualV60AudioStamp span{float:none!important;margin:0!important;padding:0!important;color:inherit!important;font-size:inherit!important}
:root[data-theme="light"] .sentualV60AudioCard{background:rgba(245,251,254,.98)!important;border-color:#d3e4ec!important;color:#182b36!important;box-shadow:0 9px 25px rgba(38,67,83,.09)!important}
:root[data-theme="light"] .bubble.me .sentualV60AudioCard{background:#eaf7fd!important;border-color:#c7e4f1!important}
:root[data-theme="light"] .sentualV60AudioStamp{color:#718894!important}
@media(max-width:820px){#messages .attachmentCard.attachment-audio{width:min(94%,440px)!important;min-width:278px!important}.sentualV60AudioCard{grid-template-columns:54px minmax(0,1fr) 38px!important;gap:9px!important;min-height:94px!important;padding:9px 9px 26px!important}.sentualV60AudioCard .sentualV57AudioArt{width:54px!important;height:54px!important}}

/* Dock is in normal chat flow *below* .chatHead. Its height/clip opens downward; it never translates across the user's name. */
.sentualV57TopPlayer.sentualV60TopPlayer{position:relative!important;z-index:16!important;top:auto!important;left:auto!important;right:auto!important;width:100%!important;height:0!important;min-height:0!important;flex:0 0 0!important;display:grid!important;grid-template-columns:36px auto minmax(110px,1fr) auto auto!important;align-items:center!important;gap:7px!important;padding:0 10px!important;margin:0!important;opacity:0!important;transform:none!important;clip-path:inset(0 0 100% 0)!important;pointer-events:none!important;overflow:hidden!important;border:0!important;border-bottom:0 solid transparent!important;box-shadow:none!important;background:rgba(15,35,49,.975)!important;color:#edf7fb!important;transition:height .25s cubic-bezier(.22,1,.36,1),flex-basis .25s cubic-bezier(.22,1,.36,1),opacity .16s ease,clip-path .25s cubic-bezier(.22,1,.36,1),border-color .18s ease,box-shadow .18s ease!important;will-change:height,clip-path,opacity!important}
.sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{height:56px!important;flex-basis:56px!important;opacity:1!important;clip-path:inset(0)!important;pointer-events:auto!important;border-bottom-width:1px!important;border-bottom-color:#1e3a4c!important;box-shadow:0 4px 13px rgba(0,0,0,.12)!important}
.sentualV60TopArt{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;overflow:hidden;background:color-mix(in srgb,var(--accent) 10%,#142838);color:#73c8ee;flex:none}.sentualV60TopArt img{width:100%;height:100%;display:block;object-fit:cover}.sentualV60TopArt svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sentualV60TopPlayer .sentualV57TopControls,.sentualV60TopPlayer .sentualV57TopTools{display:flex!important;align-items:center!important;gap:1px!important;min-width:0!important}.sentualV60TopPlayer button{width:30px!important;height:30px!important;border-radius:9px!important;background:transparent!important;color:#78bfe5!important;outline:0!important;box-shadow:none!important;-webkit-tap-highlight-color:transparent!important}.sentualV60TopPlayer button:hover{background:transparent!important;filter:none!important}.sentualV60TopPlayer button:active,.sentualV60TopPlayer button.active{background:rgba(63,178,233,.12)!important;color:#53c2f4!important;transform:scale(.93)!important}.sentualV60TopPlayer .sentualV59TopTrack{min-width:0!important;overflow:hidden!important}.sentualV60TopPlayer .sentualV57TopTitle{font-size:12px!important;line-height:1.15!important}.sentualV60TopPlayer .sentualV59TopSub{font-size:8.5px!important;line-height:1.1!important;color:#84a3b5!important}.sentualV60TopPlayer .sentualV57TopClock{font-size:9.5px!important}
.sentualV60TopPlayer .sentualV59TopTimeline{position:absolute!important;left:10px!important;right:10px!important;bottom:1px!important;width:auto!important;height:14px!important;margin:0!important}.sentualV60TopPlayer .sentualV59TopTimeline .sentualV59TimelineRail,.sentualV60TopPlayer .sentualV59TopTimeline .sentualV59TimelineBuffer,.sentualV60TopPlayer .sentualV59TopTimeline .sentualV59TimelinePlayed{top:50%!important;bottom:auto!important;transform:translateY(-50%)!important;height:3px!important}.sentualV60TopPlayer .sentualV59TopTimeline .sentualV59TimelineKnob{top:50%!important;bottom:auto!important;width:9px!important;height:9px!important;transform:translate(-50%,-50%)!important}
.sentualV60TopPlayer.hidden{display:none!important;border:0!important;box-shadow:none!important}.sentualV60TopPlayer.sentualPlayerClosing{border-bottom-color:transparent!important;box-shadow:none!important}
:root[data-theme="light"] .sentualV57TopPlayer.sentualV60TopPlayer{background:rgba(248,252,254,.985)!important;color:#1b303d!important}
:root[data-theme="light"] .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{border-bottom-color:#d7e4ea!important;box-shadow:0 4px 12px rgba(40,66,80,.07)!important}:root[data-theme="light"] .sentualV60TopPlayer .sentualV57TopTitle{color:#172a35!important}:root[data-theme="light"] .sentualV60TopPlayer .sentualV59TopSub,:root[data-theme="light"] .sentualV60TopPlayer .sentualV57TopClock{color:#718996!important}:root[data-theme="light"] .sentualV60TopArt{background:#edf6fa;color:#2b99cc}
.chat.sentualAudioDocked .pinnedBar{top:120px!important}
@media(max-width:820px){.sentualV57TopPlayer.sentualV60TopPlayer{grid-template-columns:32px auto minmax(68px,1fr) auto!important;gap:3px!important;padding:0 7px!important}.sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{height:54px!important;flex-basis:54px!important}.sentualV60TopArt{width:30px;height:30px;border-radius:9px}.sentualV60TopPlayer .sentualV57TopControls button[data-act="prev"],.sentualV60TopPlayer .sentualV57TopControls button[data-act="next"],.sentualV60TopPlayer .sentualV57TopTools button[data-act="shuffle"],.sentualV60TopPlayer .sentualV57TopTools button[data-act="speed"]{display:none!important}.sentualV60TopPlayer .sentualV57TopTools{gap:0!important}.sentualV60TopPlayer .sentualV57TopClock{display:none!important}.sentualV60TopPlayer .sentualV59TopSub{display:none!important}.chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top) + 54px)!important}}

/* ===== SENTUAL v60 final visual fixes ===== */
.chatHead{z-index:30!important;background:var(--chat)!important}
.sentualV57TopPlayer.sentualV60TopPlayer{z-index:20!important;background:transparent!important;border:0!important;box-shadow:none!important}
.sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{background:rgba(15,35,49,.975)!important;border-bottom:1px solid #1e3a4c!important;box-shadow:0 4px 13px rgba(0,0,0,.12)!important}
.sentualV57TopPlayer.sentualV60TopPlayer:not(.sentualPlayerVisible){border:0!important;box-shadow:none!important;background:transparent!important}
:root[data-theme="light"] .sentualV57TopPlayer.sentualV60TopPlayer{background:transparent!important}
:root[data-theme="light"] .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{background:rgba(248,252,254,.985)!important;border-bottom-color:#d7e4ea!important}
.sentualV60Timeline input[type="range"]{position:absolute!important;width:1px!important;height:1px!important;opacity:0!important;clip-path:inset(50%)!important;pointer-events:none!important;margin:0!important;padding:0!important;border:0!important}
.sentualV60Timeline .sentualV59TimelineRail{left:6px!important;right:6px!important;width:auto!important}
.sentualV60Timeline .sentualV59TimelinePlayed{left:6px!important;width:var(--played-w,0px)!important;max-width:calc(100% - 12px)!important;transition:width .045s linear!important}
.sentualV60Timeline .sentualV59TimelineBuffer{left:6px!important;width:var(--buffered-w,0px)!important;max-width:calc(100% - 12px)!important}
.sentualV60Timeline .sentualV59TimelineKnob{left:var(--played-x,6px)!important;transition:left .045s linear!important}
.sentualV60Timeline.sentualTimelineDragging .sentualV59TimelinePlayed,.sentualV60Timeline.sentualTimelineDragging .sentualV59TimelineKnob{transition:none!important}
.sentualV60Timeline:hover,.sentualV60Timeline:focus,.sentualV60Timeline:focus-within,.sentualV60Timeline:active{background:transparent!important;outline:0!important;box-shadow:none!important;-webkit-tap-highlight-color:transparent!important}
#messages .attachmentCard.attachment-image .inlineMedia,#messages .attachmentCard.attachment-image .photoOpen,#messages .attachmentCard.attachment-image img{background:transparent!important}
#messages .attachmentCard.attachment-image .photoOpen{padding:0!important;border:0!important;line-height:0!important}
.sentualV60AudioCard>.sentualV60AudioStamp{position:absolute!important;right:10px!important;bottom:7px!important;margin:0!important;float:none!important;z-index:3!important}

/* ===== SENTUAL v61: iOS safe header + stable initial paint + hard-visible player controls ===== */
@media(max-width:820px){
  html.sentual-ios{--sentual-v61-safe-top:max(env(safe-area-inset-top),48px)}
  html.sentual-ios .sideHead{
    padding-top:var(--sentual-v61-safe-top)!important;
    height:calc(64px + var(--sentual-v61-safe-top))!important;
    min-height:calc(64px + var(--sentual-v61-safe-top))!important;
  }
  html.sentual-ios .chatHead{
    padding-top:var(--sentual-v61-safe-top)!important;
    height:calc(64px + var(--sentual-v61-safe-top))!important;
    min-height:calc(64px + var(--sentual-v61-safe-top))!important;
  }
  html.sentual-ios #accountMenu{top:calc(58px + var(--sentual-v61-safe-top))!important}
  html.sentual-ios #chatMenu{top:calc(58px + var(--sentual-v61-safe-top))!important}
  html.sentual-ios .pinnedBar{top:calc(64px + var(--sentual-v61-safe-top))!important}
  html.sentual-ios .chat.sentualAudioDocked .pinnedBar{top:calc(64px + var(--sentual-v61-safe-top) + 54px)!important}
}

/* No visible message-by-message movement while the initial history is still being assembled. */
#messages.sentualV61InitialBatch>*{visibility:hidden!important}
#messages.sentualV61InitialBatch{scroll-behavior:auto!important}

/* Keep reaction DOM alive between syncs; only values change. */
.sentualReactionStrip{contain:layout style;will-change:auto!important}
.sentualReactionChip{backface-visibility:hidden;-webkit-backface-visibility:hidden}

/* Pause must remain visible in the dock on both themes and on WebKit. */
.sentualV57TopPlayer button[data-act="play"] .sentualV61PauseSvg,
.sentualV60TopPlayer button[data-act="play"] .sentualV61PauseSvg,
.sentualV57AudioPlay .sentualV61PauseSvg{display:block!important;width:18px!important;height:18px!important;opacity:1!important;visibility:visible!important;overflow:visible!important}
.sentualV61PauseBar{fill:currentColor!important;stroke:none!important;opacity:1!important}
:root[data-theme="light"] .sentualV60TopPlayer button[data-act="play"]{color:#237fae!important}


/* ===== SENTUAL v62: viewport-safe mobile shell + zero-shift image loading ===== */
@media(max-width:820px){
  html.sentual-ios{
    --sentual-v62-safe-top:max(env(safe-area-inset-top),var(--sentual-safe-top-fallback,47px));
    --sentual-v62-safe-bottom:max(env(safe-area-inset-bottom),var(--sentual-safe-bottom-fallback,34px));
  }
  html.sentual-ios .sideHead,
  html.sentual-ios .chatHead{
    padding-top:var(--sentual-v62-safe-top)!important;
    height:calc(64px + var(--sentual-v62-safe-top))!important;
    min-height:calc(64px + var(--sentual-v62-safe-top))!important;
  }
  html.sentual-ios #accountMenu{top:calc(58px + var(--sentual-v62-safe-top))!important}
  html.sentual-ios #chatMenu{top:calc(58px + var(--sentual-v62-safe-top))!important}
  html.sentual-ios .pinnedBar{top:calc(64px + var(--sentual-v62-safe-top))!important}
  html.sentual-ios .chat.sentualAudioDocked .pinnedBar{top:calc(64px + var(--sentual-v62-safe-top) + 54px)!important}
  html.sentual-ios #chat.mobileOpen .composer{
    padding-bottom:calc(9px + var(--sentual-v62-safe-bottom))!important;
  }
  #chat.mobileOpen{
    top:var(--sentual-vv-top,0px)!important;
    bottom:auto!important;
    height:var(--sentual-vv-height,100dvh)!important;
    min-height:0!important;
    max-height:none!important;
  }
}

/* A photo bubble has its final dimensions before decryption finishes. CSS must not override the
   locked inline width/height. Loading changes blur/opacity only, never geometry. */
#messages .inlineMedia-image.sentualPhotoPlaceholder.sentualV60ExactPhoto{
  min-width:0!important;
  min-height:0!important;
  max-width:100%!important;
  flex:none!important;
  contain:layout paint!important;
}
#messages .inlineMedia-image.sentualPhotoPlaceholder.sentualV60ExactPhoto .photoOpen{
  width:100%!important;height:100%!important;min-width:0!important;min-height:0!important;
}
#messages .inlineMedia-image.sentualPhotoPlaceholder.sentualV60ExactPhoto .photoOpen img{
  width:100%!important;height:100%!important;min-width:0!important;min-height:0!important;object-fit:cover!important;
}
#messages .inlineMedia-image.sentualPhotoPlaceholder.hasPreview::before{
  filter:blur(16px) saturate(.88)!important;transform:scale(1.08)!important;
}
#messages .inlineMedia-image.sentualPhotoPlaceholder.sentualPhotoLoaded .photoOpen img{
  filter:none!important;transform:none!important;
}

/* ===== SENTUAL v63: isolated delivery stamps + immutable photo boxes ===== */
/* Timestamp/delivery metadata owns a separate row. It can no longer float through Persian/RTL text. */
#messages .bubble:not(.attachmentCard):not(.sentualEmojiOnly):not(.walletTextBubble)>.sentualMessageText{
  display:block!important;float:none!important;width:auto!important;max-width:100%!important;margin:0!important;padding:0!important;
}
#messages .bubble:not(.attachmentCard):not(.sentualEmojiOnly):not(.walletTextBubble)>.messageStamp{
  position:static!important;inset:auto!important;float:none!important;clear:both!important;display:flex!important;align-items:center!important;justify-content:flex-end!important;
  width:max-content!important;max-width:100%!important;margin:4px 0 0 auto!important;padding:0!important;transform:none!important;direction:ltr!important;unicode-bidi:isolate!important;
  white-space:nowrap!important;line-height:1.15!important;
}
#messages .bubble:not(.attachmentCard):not(.sentualEmojiOnly):not(.walletTextBubble)>.messageStamp>span{
  float:none!important;display:inline!important;margin:0!important;padding:0!important;white-space:nowrap!important;
}

/* The image element is paint-only. The holder's explicit box is the sole source of layout geometry. */
#messages .inlineMedia-image.sentualV63PhotoLocked{
  position:relative!important;box-sizing:border-box!important;flex:0 0 auto!important;min-width:0!important;min-height:0!important;max-width:100%!important;
  contain:size layout paint!important;overflow:hidden!important;
}
#messages .inlineMedia-image.sentualV63PhotoLocked>.mediaStatus{
  position:absolute!important;inset:0!important;width:100%!important;height:100%!important;min-height:0!important;margin:0!important;
}
#messages .inlineMedia-image.sentualV63PhotoLocked>.photoOpen{
  position:absolute!important;inset:0!important;display:block!important;width:100%!important;height:100%!important;min-width:0!important;min-height:0!important;margin:0!important;padding:0!important;
}
#messages .inlineMedia-image.sentualV63PhotoLocked>.photoOpen>img{
  position:absolute!important;inset:0!important;display:block!important;width:100%!important;height:100%!important;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;
  object-fit:cover!important;margin:0!important;padding:0!important;border:0!important;
}


/* ===== SENTUAL v67: requested Copy button + faster/larger reactions ===== */
.profileModal .shareCode{position:relative!important;padding-right:126px!important}
.profileModal .shareCode>button{position:absolute!important;right:18px!important;left:auto!important;top:50%!important;transform:translateY(-50%)!important;margin:0!important;width:auto!important;min-width:72px!important;height:34px!important;padding:0 12px!important;border:0!important;border-radius:8px!important;background:color-mix(in srgb,var(--side) 88%,var(--bubble) 12%)!important;color:var(--text)!important;font-size:10px!important;font-weight:500!important;line-height:34px!important;text-align:center!important;box-shadow:none!important;filter:none!important}
.profileModal .shareCode>button:hover,.profileModal .shareCode>button:focus-visible,.profileModal .shareCode>button:active{background:rgba(128,128,128,.18)!important;color:var(--text)!important;transform:translateY(-50%)!important;filter:none!important;outline:none!important;box-shadow:none!important}
:root[data-theme="light"] .profileModal .shareCode>button{background:#eef2f5!important;color:#24313c!important}
:root[data-theme="light"] .profileModal .shareCode>button:hover,:root[data-theme="light"] .profileModal .shareCode>button:focus-visible,:root[data-theme="light"] .profileModal .shareCode>button:active{background:rgba(92,99,106,.12)!important;color:#24313c!important}
.userIndicators{margin-left:auto;display:flex;align-items:center;justify-content:flex-end;gap:10px;flex:none;min-width:32px;padding-inline-start:10px}
.userIndicators .unreadDot{display:inline-block;width:11px;height:11px;border-radius:50%;background:#ff4b5d;flex:none}
.userIndicators .unreadDot.muted{background:#77838e!important}
.userIndicators .reactionUnreadHeart{display:inline-flex;align-items:center;justify-content:center;width:11px;height:11px;color:#ff4b5d;font-style:normal;flex:none}.userIndicators .reactionUnreadHeart svg{display:block;width:11px;height:11px;fill:currentColor}.userIndicators .reactionUnreadHeart.muted{color:#77838e!important}
.messageContextMenu .sentualReactionPicker{gap:7px!important;padding:8px 5px 11px!important}
.messageContextMenu .sentualReactionChoice{flex-basis:49px!important;width:49px!important;height:49px!important;min-width:49px!important;border-radius:15px!important;font-size:29px!important;-webkit-tap-highlight-color:transparent!important;transition:none!important}
.messageContextMenu .sentualReactionChoice:hover,.messageContextMenu .sentualReactionChoice:focus-visible,.messageContextMenu .sentualReactionChoice:active{background:color-mix(in srgb,var(--side) 82%,transparent)!important;color:inherit!important;transform:none!important;filter:none!important;outline:none!important}
.sentualReactionStrip{gap:5px!important;margin-top:5px!important}
.sentualReactionChip{height:30px!important;min-width:39px!important;padding:1px 9px!important;font-size:17px!important;-webkit-tap-highlight-color:transparent!important;transition:none!important}
.sentualReactionChip.mine,.sentualReactionChip:hover,.sentualReactionChip:focus-visible,.sentualReactionChip:active,.sentualReactionChip.mine:hover,.sentualReactionChip.mine:focus-visible,.sentualReactionChip.mine:active{background:color-mix(in srgb,var(--side) 78%,transparent)!important;border-color:color-mix(in srgb,var(--accent) 18%,var(--line))!important;color:var(--text)!important;transform:none!important;filter:none!important;outline:none!important}
.bubble.sentualEmoji1{font-size:78px!important}
@media(max-width:820px){.bubble.sentualEmoji1,.bubble.me.sentualEmoji1{font-size:74px!important}}

/* ===== SENTUAL v68: no sticky conversation hover after touch scrolling ===== */
@media (hover:none), (pointer:coarse){
  #users .user:hover:not(.active),#users .user:active:not(.active){background:transparent!important;transform:none!important}
}



/* ===== SENTUAL V4.2.10: release update banner ===== */
.sentualUpdateBanner{margin:0 11px 11px;padding:8px 8px 8px 11px;min-height:42px;border:1px solid color-mix(in srgb,var(--accent) 22%,var(--line));border-radius:11px;background:color-mix(in srgb,var(--accent) 8%,var(--side));display:flex;align-items:center;gap:10px;color:var(--text)}
.sentualUpdateBanner>span{min-width:0;flex:1;font-size:10px;line-height:1.35;color:var(--muted)}
.sentualUpdateBanner>button{flex:none;width:auto;min-width:65px;height:30px;margin:0;padding:0 11px;border:0;border-radius:8px;background:color-mix(in srgb,var(--side) 76%,var(--accent) 24%);color:var(--text);font-size:10px;font-weight:600;box-shadow:none;outline:0}
.sentualUpdateBanner>button:hover,.sentualUpdateBanner>button:focus-visible{background:color-mix(in srgb,var(--side) 64%,var(--accent) 36%)}
.sentualUpdateBanner>button:active{transform:none!important}
.sentualUpdateBanner>button:disabled{opacity:.6;cursor:default}
:root[data-theme="light"] .sentualUpdateBanner{background:#f4f9fc;border-color:#d7e7f0}
:root[data-theme="light"] .sentualUpdateBanner>span{color:#627687}
:root[data-theme="light"] .sentualUpdateBanner>button{background:#e4f0f6;color:#23536b}

/* ===== SENTUAL V4.2.11: requested video + mobile music presentation ===== */
/* Videos use the same stable, media-first geometry as photos. The filename row is never shown. */
#messages .attachmentCard.attachment-video.sentualV4211VideoBubble{
  position:relative!important;width:max-content!important;max-width:92%!important;min-width:0!important;padding:0!important;overflow:visible!important;
}
#messages .sentualV4211VideoBubble>.filePreview{display:none!important}
#messages .sentualV4211VideoBubble:not(.sentualV4211VideoHasCaption){background:transparent!important;border-color:transparent!important;box-shadow:none!important}
#messages .sentualV4211VideoBox{
  position:relative!important;display:block!important;min-width:0!important;min-height:0!important;max-width:100%!important;overflow:hidden!important;
  border-radius:18px!important;background:#080d12!important;isolation:isolate!important;contain:size layout paint!important;flex:0 0 auto!important;
}
#messages .sentualV4211VideoBox::before{
  content:""!important;position:absolute!important;inset:-14px!important;z-index:0!important;display:block!important;
  background-image:var(--sentual-v4211-video-poster)!important;background-size:cover!important;background-position:center!important;background-repeat:no-repeat!important;
  filter:blur(15px) saturate(.88)!important;transform:scale(1.09)!important;opacity:.94!important;transition:opacity .18s ease!important;pointer-events:none!important;
}
#messages .sentualV4211VideoBox::after{
  content:""!important;position:absolute!important;inset:0!important;z-index:1!important;background:rgba(5,10,14,.16)!important;opacity:1!important;transition:opacity .18s ease!important;pointer-events:none!important;
}
#messages .sentualV4211VideoBox.sentualV4211VideoReady::before,#messages .sentualV4211VideoBox.sentualV4211VideoReady::after{opacity:0!important}
#messages .sentualV4211VideoBox>.mediaStatus{position:absolute!important;inset:0!important;z-index:2!important;width:100%!important;height:100%!important;min-height:0!important;margin:0!important;background:transparent!important}
#messages .sentualV4211VideoBox video{position:absolute!important;inset:0!important;z-index:2!important;display:block!important;width:100%!important;height:100%!important;min-width:0!important;min-height:0!important;max-width:none!important;max-height:none!important;margin:0!important;background:transparent!important;object-fit:cover!important}
#messages .sentualV4211VideoBox .sentualVideoDownloadButton{position:absolute!important;left:50%!important;top:50%!important;z-index:5!important;transform:translate(-50%,-50%)!important;margin:0!important}
#messages .sentualV4211VideoBox .sentualVideoDownloadButton:active{transform:translate(-50%,-50%) scale(.96)!important}
#messages .sentualV4211VideoBox .sentualVideoDownloadProgress{left:9px!important;top:9px!important;z-index:6!important}
#messages .sentualV4211VideoBubble>.mediaExpand{display:none!important}
#messages .sentualV4211VideoBubble>.attachmentCaption{padding:9px 12px 3px!important;background:inherit!important}
#messages .sentualV4211VideoBubble:not(.sentualV4211VideoHasCaption)>.fileMessageTime{
  position:absolute!important;right:8px!important;bottom:7px!important;z-index:8!important;width:auto!important;padding:3px 6px!important;margin:0!important;border-radius:8px!important;
  background:rgba(0,0,0,.5)!important;color:#fff!important;backdrop-filter:blur(7px)!important;-webkit-backdrop-filter:blur(7px)!important;
}
#messages .sentualV4211VideoBubble.sentualV4211VideoHasCaption>.fileMessageTime{padding:3px 11px 8px!important}

/* The optimistic video is also a fixed-size blurred media tile, not a filename card. */
#messages .sentualV4211VideoUpload{width:max-content!important;max-width:92%!important;min-width:0!important;padding:0!important;background:transparent!important;border:0!important;box-shadow:none!important}
#messages .sentualV4211VideoUpload .sentualV57UploadBody{
  position:relative!important;display:block!important;min-width:0!important;min-height:0!important;max-width:100%!important;padding:0!important;overflow:hidden!important;border-radius:18px!important;background:#080d12!important;contain:size layout paint!important;isolation:isolate!important;
}
#messages .sentualV4211VideoUpload .sentualV57UploadBody::before{content:"";position:absolute;inset:-14px;z-index:0;background-image:var(--sentual-v4211-video-poster);background-size:cover;background-position:center;filter:blur(15px) saturate(.88);transform:scale(1.09);opacity:.94}
#messages .sentualV4211VideoUpload .sentualV57UploadBody::after{content:"";position:absolute;inset:0;z-index:1;background:rgba(5,10,14,.22)}
#messages .sentualV4211VideoUpload .sentualV57UploadIcon,#messages .sentualV4211VideoUpload .sentualV57UploadMain>b{display:none!important}
#messages .sentualV4211VideoUpload .sentualV57UploadMain{position:absolute!important;left:9px!important;right:48px!important;top:9px!important;z-index:3!important;display:block!important;padding:0!important}
#messages .sentualV4211VideoUpload .sentualV57UploadStatus{display:inline-flex!important;padding:4px 7px!important;border-radius:8px!important;background:rgba(8,13,18,.58)!important;color:#fff!important;backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important}
#messages .sentualV4211VideoUpload .sentualV57UploadProgress{position:absolute!important;left:9px!important;right:9px!important;bottom:9px!important;width:auto!important;z-index:4!important;background:rgba(255,255,255,.28)!important}
#messages .sentualV4211VideoUpload .sentualUploadCancel{position:absolute!important;right:9px!important;top:9px!important;z-index:5!important;background:rgba(8,13,18,.58)!important;color:#fff!important;border-color:rgba(255,255,255,.16)!important}

/* Audio cards no longer expose a download control. */
#messages .sentualV60AudioCard{grid-template-columns:58px minmax(0,1fr)!important}
#messages .sentualV60AudioCard .sentualV57AudioDownload{display:none!important}
@media(max-width:820px){#messages .sentualV60AudioCard{grid-template-columns:54px minmax(0,1fr)!important}}

/* Mobile compact player: play/pause left, title + artist center, close right. */
@media(max-width:820px){
  .sentualV57TopPlayer.sentualV60TopPlayer{grid-template-columns:48px minmax(0,1fr) 48px!important;grid-template-rows:64px!important;gap:4px!important;padding:0 7px!important;background:color-mix(in srgb,var(--side) 97%,transparent)!important;color:var(--text)!important;border-radius:0!important;overflow:hidden!important}
  .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{height:64px!important;flex-basis:64px!important;border-bottom:1px solid var(--line)!important;box-shadow:0 5px 16px rgba(0,0,0,.08)!important}
  .sentualV60TopPlayer .sentualV60TopArt{display:none!important}
  .sentualV60TopPlayer .sentualV57TopControls{grid-column:1!important;grid-row:1!important;display:grid!important;place-items:center!important;width:48px!important;height:64px!important;margin:0!important;padding:0!important}
  .sentualV60TopPlayer .sentualV57TopControls button[data-act="prev"],.sentualV60TopPlayer .sentualV57TopControls button[data-act="next"]{display:none!important}
  .sentualV60TopPlayer .sentualV57TopControls button[data-act="play"]{display:grid!important;width:44px!important;height:44px!important;margin:0!important;padding:0!important;border-radius:12px!important;color:var(--text)!important;background:transparent!important;transform:none!important}
  .sentualV60TopPlayer .sentualV57TopControls button[data-act="play"] svg{width:27px!important;height:27px!important}
  .sentualV60TopPlayer .sentualV59TopTrack{grid-column:2!important;grid-row:1!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;min-width:0!important;height:64px!important;padding:0 5px!important;text-align:center!important;cursor:pointer!important;-webkit-tap-highlight-color:transparent!important;outline:0!important}
  .sentualV60TopPlayer .sentualV57TopTitle{display:block!important;width:100%!important;color:var(--text)!important;font-size:15px!important;font-weight:600!important;line-height:1.22!important;text-align:center!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}
  .sentualV60TopPlayer .sentualV59TopSub{display:block!important;width:100%!important;margin-top:3px!important;color:var(--muted)!important;font-size:10.5px!important;line-height:1.15!important;text-align:center!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important}
  .sentualV60TopPlayer .sentualV57TopClock,.sentualV60TopPlayer .sentualV59TopTimeline,.sentualV60TopPlayer>.sentualV60Timeline{display:none!important}
  .sentualV60TopPlayer .sentualV57TopTools{grid-column:3!important;grid-row:1!important;display:grid!important;place-items:center!important;width:48px!important;height:64px!important;margin:0!important;padding:0!important}
  .sentualV60TopPlayer .sentualV57TopTools>button{display:none!important}
  .sentualV60TopPlayer .sentualV57TopTools>button[data-act="close"]{display:grid!important;width:44px!important;height:44px!important;padding:0!important;border-radius:12px!important;background:transparent!important;color:var(--text)!important;transform:none!important}
  .sentualV60TopPlayer .sentualV57TopTools>button[data-act="close"] svg{width:25px!important;height:25px!important}
  .chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top) + 64px)!important}
  :root[data-theme="light"] .sentualV57TopPlayer.sentualV60TopPlayer{background:rgba(250,252,253,.985)!important}
}

/* Current-chat music list. */
.sentualV4211PlaylistOverlay,.sentualV4211FullPlayerOverlay{position:fixed;inset:0;z-index:300;background:rgba(0,0,0,.32);display:flex;align-items:flex-end;justify-content:center;padding:12px;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.sentualV4211PlaylistSheet{width:min(620px,100%);max-height:min(68dvh,620px);display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--line);border-radius:24px;background:var(--side);color:var(--text);box-shadow:0 18px 60px rgba(0,0,0,.25)}
.sentualV4211PlaylistHead{height:54px;display:flex;align-items:center;padding:0 10px 0 18px;border-bottom:1px solid var(--line);flex:none}.sentualV4211PlaylistHead>b{font-size:16px}.sentualV4211PlaylistHead>button{margin-left:auto;width:38px;height:38px;padding:0;border:0;border-radius:12px;background:transparent;color:var(--muted);font-size:28px;line-height:1;box-shadow:none}
.sentualV4211PlaylistList{overflow:auto;padding:7px}.sentualV4211PlaylistRow{width:100%;min-height:62px;display:grid;grid-template-columns:48px minmax(0,1fr) auto;align-items:center;gap:11px;padding:7px 9px;border:0;border-radius:14px;background:transparent;color:var(--text);text-align:left;box-shadow:none}.sentualV4211PlaylistRow.active{background:color-mix(in srgb,var(--accent) 11%,transparent)}.sentualV4211PlaylistArt{width:48px;height:48px;border-radius:12px;overflow:hidden;display:grid;place-items:center;background:var(--bubble);color:var(--accent)}.sentualV4211PlaylistArt img{width:100%;height:100%;display:block;object-fit:cover}.sentualV4211PlaylistArt svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8}.sentualV4211PlaylistText{min-width:0;display:block}.sentualV4211PlaylistText>b,.sentualV4211PlaylistText>small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sentualV4211PlaylistText>b{font-size:13px}.sentualV4211PlaylistText>small{margin-top:4px;color:var(--muted);font-size:10px}.sentualV4211PlaylistDuration{color:var(--muted);font-size:10px;font-variant-numeric:tabular-nums}

/* Rounded iOS/Android bottom full player. */
.sentualV4211FullPlayerOverlay{z-index:310;padding:max(12px,env(safe-area-inset-top)) 12px max(12px,env(safe-area-inset-bottom))}
.sentualV4211FullPlayerSheet{width:min(680px,100%);padding:22px 20px 18px;border:1px solid var(--line);border-radius:22px;background:var(--side);color:var(--text);box-shadow:0 20px 70px rgba(0,0,0,.28);overflow:hidden}
html.sentual-ios .sentualV4211FullPlayerSheet{border-radius:32px;padding-bottom:max(18px,calc(env(safe-area-inset-bottom) + 8px))}
.sentualV4211FullHead{display:grid;grid-template-columns:64px minmax(0,1fr);align-items:center;gap:14px}.sentualV4211FullArt{width:64px;height:64px;border-radius:15px;overflow:hidden;display:grid;place-items:center;background:var(--bubble);color:var(--accent)}.sentualV4211FullArt img{width:100%;height:100%;display:block;object-fit:cover}.sentualV4211FullArt svg{width:28px;height:28px;fill:none;stroke:currentColor;stroke-width:1.8}.sentualV4211FullMeta{min-width:0}.sentualV4211FullMeta>b,.sentualV4211FullMeta>small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sentualV4211FullMeta>b{font-size:20px;line-height:1.25}.sentualV4211FullMeta>small{margin-top:5px;color:var(--muted);font-size:13px}
.sentualV4211FullTimeline{margin:23px 4px 0}.sentualV4211FullTimeline>input{display:block;width:100%;height:22px;margin:0;accent-color:var(--text);touch-action:none}.sentualV4211FullTimeline>div{display:flex;justify-content:space-between;margin-top:2px;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}
.sentualV4211FullControls{display:grid;grid-template-columns:52px 1fr 76px 1fr 52px;align-items:center;gap:8px;margin-top:17px}.sentualV4211FullControls>button{height:58px;padding:0;border:0;border-radius:18px;background:transparent;color:var(--text);display:grid;place-items:center;box-shadow:none;transform:none!important;-webkit-tap-highlight-color:transparent}.sentualV4211FullControls>button svg{width:31px;height:31px;fill:currentColor;stroke:none}.sentualV4211FullControls>button.play{width:76px;height:76px;justify-self:center;border-radius:50%;background:color-mix(in srgb,var(--text) 10%,transparent)}.sentualV4211FullControls>button.play svg{width:39px;height:39px}.sentualV4211FullControls>button.speed{position:relative;width:52px;height:58px}.sentualV4211FullControls>button.speed svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8}.sentualV4211FullControls>button.speed>small{position:absolute;left:50%;bottom:2px;transform:translateX(-50%);font-size:9px;font-weight:700;white-space:nowrap}.sentualV4211FullControls>button[data-act="repeat"] svg{fill:none;stroke:currentColor;stroke-width:1.8}.sentualV4211FullControls>button.active{color:var(--accent)}
:root[data-theme="light"] .sentualV4211PlaylistSheet,:root[data-theme="light"] .sentualV4211FullPlayerSheet{background:#fff;border-color:#d7e2e8}
@media(max-width:430px){.sentualV4211FullPlayerSheet{padding-left:16px;padding-right:16px}.sentualV4211FullControls{grid-template-columns:48px 1fr 70px 1fr 48px;gap:4px}.sentualV4211FullControls>button.play{width:70px;height:70px}}
/* Keep the full-player transport glyphs crisp and semantically correct. */
.sentualV4211FullControls>button svg{fill:none!important;stroke:currentColor!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}
.sentualV4211FullControls>button.play svg{fill:currentColor!important;stroke:none!important}

/* ===== SENTUAL V4.2.12: voice composer, recorder and waveform voice bubbles ===== */
#composerSubmit{display:grid!important;place-items:center!important;padding:0!important;-webkit-tap-highlight-color:transparent!important}
#composerSubmit svg{width:22px;height:22px;display:block;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
#composerSubmit.voiceMode{background:color-mix(in srgb,var(--bubble) 88%,var(--accent) 12%)!important;color:var(--accent)!important}
#composerSubmit.textMode{background:var(--accent)!important;color:#fff!important}
:root[data-theme="light"] #composerSubmit.voiceMode{background:#eef4f8!important;color:#358bb8!important}
.sentualV4212InputMenu{min-width:146px!important}.sentualV4212InputMenu button+button{margin-top:2px!important}

.sentualVoiceRecorderOverlay{position:fixed;inset:0;z-index:360;display:flex;align-items:flex-end;justify-content:center;padding:14px;background:rgba(0,0,0,.26);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
.sentualVoiceRecorderSheet{width:min(560px,100%);padding:17px 17px max(17px,env(safe-area-inset-bottom));border:1px solid var(--line);border-radius:24px;background:var(--side);color:var(--text);box-shadow:0 22px 72px rgba(0,0,0,.28)}
html.sentual-ios .sentualVoiceRecorderSheet{border-radius:30px}
.sentualVoiceRecorderHead{display:grid;grid-template-columns:14px 1fr auto;align-items:center;gap:9px;min-height:28px}.sentualVoiceRecorderHead>b{font-size:14px}.sentualVoiceRecorderHead time{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.sentualVoiceRecordingDot{width:9px;height:9px;border-radius:50%;background:#ff4b5d;box-shadow:0 0 0 0 rgba(255,75,93,.35);animation:sentualVoiceDot 1.15s infinite}
.sentualVoiceRecorderSheet.paused .sentualVoiceRecordingDot{animation:none;opacity:.45}
@keyframes sentualVoiceDot{0%{box-shadow:0 0 0 0 rgba(255,75,93,.38);opacity:1}60%{box-shadow:0 0 0 8px rgba(255,75,93,0);opacity:.62}100%{box-shadow:0 0 0 0 rgba(255,75,93,0);opacity:1}}
.sentualVoiceLiveWave,.sentualVoiceReviewWave{height:76px;display:flex;align-items:center;justify-content:center;gap:3px;margin:12px 0;padding:0 3px;overflow:hidden}
.sentualVoiceLiveWave i,.sentualVoiceReviewWave i{display:block;width:4px;min-height:8px;border-radius:99px;background:var(--accent);transition:height .08s linear;opacity:.82}
.sentualVoiceRecorderSheet.paused .sentualVoiceLiveWave i{opacity:.35}
.sentualVoiceRecordControls,.sentualVoiceReviewControls{display:grid;grid-template-columns:52px 1fr 52px;align-items:center;gap:15px;margin-top:5px}.sentualVoiceRecordControls button,.sentualVoiceReviewControls button{width:52px;height:52px;padding:0;border:1px solid var(--line);border-radius:17px;background:var(--bubble);color:var(--text);display:grid;place-items:center;box-shadow:none;transform:none!important}.sentualVoiceRecordControls button.primaryAction,.sentualVoiceReviewControls button.preview{justify-self:center;width:64px;height:64px;border-radius:50%;background:var(--accent);color:#fff;border-color:transparent}.sentualVoiceRecordControls button[data-act="stop"]{justify-self:end}.sentualVoiceReviewControls button.sendVoice{justify-self:end;background:var(--accent);color:#fff;border-color:transparent}.sentualVoiceRecordControls svg,.sentualVoiceReviewControls svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.sentualVoiceReviewControls button.preview svg{width:28px;height:28px}.sentualVoiceReviewControls button.sendVoice svg{width:25px;height:25px}
.sentualVoiceReview{padding-top:2px}.sentualVoiceReviewWave{position:relative;height:66px;margin-bottom:7px}.sentualVoiceReviewWave::before,.sentualVoiceReviewWave::after{content:"";position:absolute;top:0;bottom:0;z-index:2;background:color-mix(in srgb,var(--side) 74%,transparent);pointer-events:none}.sentualVoiceReviewWave::before{left:0;width:var(--trim-start,0%)}.sentualVoiceReviewWave::after{right:0;width:calc(100% - var(--trim-end,100%))}
.sentualVoiceTrim{padding:0 4px 4px}.sentualVoiceTrim label{display:grid;grid-template-columns:42px 1fr;align-items:center;gap:8px;margin-top:5px;color:var(--muted);font-size:9px}.sentualVoiceTrim input{width:100%;accent-color:var(--accent)}.sentualVoiceTrimTimes{display:flex;justify-content:space-between;margin:2px 0 0 50px;color:var(--muted);font-size:9px;font-variant-numeric:tabular-nums}
:root[data-theme="light"] .sentualVoiceRecorderSheet{background:#fff;border-color:#d8e3e9}.sentualVoiceRecorderOverlay.hidden{display:none!important}

#messages .sentualVoiceBubble{position:relative!important;width:min(430px,86%)!important;max-width:86%!important;min-width:250px!important;padding:0!important;overflow:hidden!important;border:0!important;background:transparent!important;box-shadow:none!important;white-space:normal!important}
#messages .sentualVoiceCard{position:relative;min-height:92px;display:grid;grid-template-columns:68px minmax(0,1fr);align-items:center;gap:9px;padding:11px 15px 20px 11px;border:1px solid var(--line);border-radius:20px 20px 20px 6px;background:var(--bubble);color:var(--text);overflow:hidden}
#messages .sentualVoiceBubble.me .sentualVoiceCard{border-radius:20px 20px 6px 20px;background:#2d7fe8;border-color:#2d7fe8;color:#fff}
#messages .sentualVoicePlay{width:58px;height:58px;padding:0;border:0;border-radius:50%;display:grid;place-items:center;background:var(--text);color:var(--bubble);box-shadow:none;transform:none!important;-webkit-tap-highlight-color:transparent!important}
#messages .sentualVoiceBubble.me .sentualVoicePlay{background:#fff;color:#2d7fe8}
#messages .sentualVoicePlay svg{width:30px;height:30px;display:block;fill:currentColor;stroke:none}
#messages .sentualVoicePlay svg path[d^="M9 6v"]{fill:none;stroke:currentColor;stroke-width:2.6;stroke-linecap:round}
#messages .sentualVoiceMain{min-width:0;padding-right:1px}.sentualVoiceWave{height:43px;display:flex;align-items:center;gap:2.6px;cursor:pointer;touch-action:none;-webkit-tap-highlight-color:transparent}.sentualVoiceWave i{display:block;flex:1 1 0;min-width:2px;max-width:4px;border-radius:99px;background:color-mix(in srgb,var(--muted) 62%,transparent);transition:background .08s linear}.sentualVoiceBubble.me .sentualVoiceWave i{background:rgba(255,255,255,.42)}.sentualVoiceWave i.played{background:var(--accent)}.sentualVoiceBubble.me .sentualVoiceWave i.played{background:#fff}
.sentualVoiceInfo{height:15px;display:flex;align-items:center;gap:7px;margin-top:1px;color:var(--muted);font-size:10px;font-variant-numeric:tabular-nums}.sentualVoiceBubble.me .sentualVoiceInfo{color:rgba(255,255,255,.73)}.sentualVoiceInfoDot{width:6px;height:6px;border-radius:50%;background:currentColor;opacity:.85}
#messages .sentualVoiceStamp{position:absolute!important;right:10px!important;bottom:5px!important;width:auto!important;padding:0!important;margin:0!important;float:none!important;display:flex!important;align-items:center!important;background:transparent!important;color:var(--muted)!important;font-size:8px!important;line-height:1!important;direction:ltr!important;white-space:nowrap!important}.sentualVoiceBubble.me .sentualVoiceStamp{color:rgba(255,255,255,.72)!important}.sentualVoiceStamp span{float:none!important;margin:0!important;color:inherit!important;font-size:inherit!important}
:root[data-theme="light"] #messages .sentualVoiceCard{background:#fff;border-color:#dbe5eb;color:#1b2831}:root[data-theme="light"] #messages .sentualVoiceBubble.me .sentualVoiceCard{background:#2d7fe8;border-color:#2d7fe8;color:#fff}
@media(max-width:820px){#messages .sentualVoiceBubble{width:min(390px,90%)!important;max-width:90%!important;min-width:235px!important}#messages .sentualVoiceCard{grid-template-columns:61px minmax(0,1fr);min-height:86px;padding-left:9px;padding-right:12px}#messages .sentualVoicePlay{width:54px;height:54px}.sentualVoiceRecorderSheet{border-radius:22px}.sentualVoiceLiveWave{height:68px}}


/* ===== SENTUAL V4.2.13: requested download breathing + compact voice surface ===== */
.sentualVideoDownloadButton.loading{pointer-events:auto!important;animation:none!important}
#messages .sentualV4211VideoBox .sentualVideoDownloadButton.loading{animation:sentualV4213DownloadBreathe 1.05s ease-in-out infinite!important}
@keyframes sentualV4213DownloadBreathe{0%,100%{transform:translate(-50%,-50%) scale(1);opacity:1}50%{transform:translate(-50%,-50%) scale(.88);opacity:.76}}
#messages .sentualV4211VideoBox .sentualVideoDownloadButton.loading:active{animation-play-state:paused!important;transform:translate(-50%,-50%) scale(.9)!important}

.sentualVoiceRecorderHead{grid-template-columns:14px minmax(0,1fr) auto!important;direction:ltr!important}
.sentualVoiceRecorderHead>b{grid-column:2!important;min-width:0!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}
.sentualVoiceRecorderHead time{grid-column:3!important;justify-self:end!important;text-align:right!important;white-space:nowrap!important;margin-left:12px!important}

#messages .sentualVoiceBubble{width:min(380px,84%)!important;max-width:84%!important;min-width:248px!important}
#messages .sentualVoiceCard{grid-template-columns:48px minmax(0,1fr) 40px!important;gap:8px!important;min-height:76px!important;padding:8px 9px 21px!important;border-radius:18px 18px 18px 6px!important;background:color-mix(in srgb,#102b3d 93%,transparent)!important;border:1px solid color-mix(in srgb,var(--accent) 20%,var(--line))!important;color:var(--text)!important;box-shadow:0 7px 20px rgba(0,0,0,.11)!important}
#messages .sentualVoiceBubble.me .sentualVoiceCard{border-radius:18px 18px 6px 18px!important;background:color-mix(in srgb,var(--mine) 76%,var(--side) 24%)!important;border-color:color-mix(in srgb,var(--accent) 25%,var(--line))!important;color:var(--text)!important}
#messages .sentualVoicePlay{width:44px!important;height:44px!important;background:rgba(6,13,19,.58)!important;color:#fff!important}
#messages .sentualVoiceBubble.me .sentualVoicePlay{background:rgba(6,13,19,.58)!important;color:#fff!important}
#messages .sentualVoicePlay svg{width:23px!important;height:23px!important}
#messages .sentualVoiceMain{min-width:0!important;padding:0!important}
#messages .sentualVoiceWave{height:34px!important;gap:2px!important;touch-action:none!important;user-select:none!important;-webkit-user-select:none!important}
#messages .sentualVoiceWave i{min-width:2px!important;max-width:3px!important;background:color-mix(in srgb,var(--muted) 64%,transparent)!important}
#messages .sentualVoiceBubble.me .sentualVoiceWave i{background:color-mix(in srgb,var(--muted) 64%,transparent)!important}
#messages .sentualVoiceWave i.played,#messages .sentualVoiceBubble.me .sentualVoiceWave i.played{background:var(--accent)!important}
#messages .sentualVoiceInfo{height:13px!important;margin-top:0!important;gap:4px!important;color:var(--muted)!important;font-size:8.5px!important;line-height:1!important}
#messages .sentualVoiceBubble.me .sentualVoiceInfo{color:var(--muted)!important}
.sentualVoiceTimeSep{opacity:.72}
#messages .sentualVoiceSpeed{width:38px!important;height:42px!important;padding:0!important;border:0!important;border-radius:12px!important;background:transparent!important;color:var(--muted)!important;display:grid!important;grid-template-rows:23px 11px!important;place-items:center!important;align-self:center!important;box-shadow:none!important;transform:none!important;-webkit-tap-highlight-color:transparent!important}
#messages .sentualVoiceSpeed svg{width:20px!important;height:20px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.8!important;stroke-linecap:round!important;stroke-linejoin:round!important}
#messages .sentualVoiceSpeed small{font-size:8.5px!important;line-height:1!important;font-weight:700!important;color:inherit!important;white-space:nowrap!important}
#messages .sentualVoiceSpeed:active{background:transparent!important;transform:none!important}
#messages .sentualVoiceStamp{right:9px!important;bottom:5px!important;color:var(--muted)!important;font-size:8px!important}
#messages .sentualVoiceBubble.me .sentualVoiceStamp{color:var(--muted)!important}
:root[data-theme="light"] #messages .sentualVoiceCard{background:rgba(245,251,254,.98)!important;border-color:#d3e4ec!important;color:#182b36!important;box-shadow:0 7px 20px rgba(38,67,83,.08)!important}
:root[data-theme="light"] #messages .sentualVoiceBubble.me .sentualVoiceCard{background:#eaf7fd!important;border-color:#c7e4f1!important;color:#182b36!important}
@media(max-width:820px){#messages .sentualVoiceBubble{width:min(360px,86%)!important;max-width:86%!important;min-width:240px!important}#messages .sentualVoiceCard{grid-template-columns:46px minmax(0,1fr) 38px!important;min-height:72px!important;padding:7px 8px 20px!important;gap:7px!important}#messages .sentualVoicePlay{width:42px!important;height:42px!important}#messages .sentualVoiceWave{height:32px!important}}


/* ===== SENTUAL V4.2.14: reference mobile music player + timeline interaction ===== */
@media(max-width:820px){
  .sentualV57TopPlayer.sentualV60TopPlayer{
    position:relative!important;width:calc(100% - 16px)!important;max-width:none!important;height:58px!important;min-height:58px!important;flex-basis:58px!important;margin:6px 8px 0!important;padding:0 8px!important;
    display:grid!important;grid-template-columns:52px minmax(0,1fr) 52px!important;grid-template-rows:56px!important;gap:0!important;
    border:1px solid var(--line)!important;border-radius:29px!important;background:color-mix(in srgb,var(--side) 98%,transparent)!important;color:var(--text)!important;box-shadow:0 7px 22px rgba(0,0,0,.08)!important;overflow:hidden!important;
  }
  .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{height:58px!important;flex-basis:58px!important;border-bottom:1px solid var(--line)!important}
  .sentualV60TopPlayer>.sentualV60TopArt,.sentualV60TopPlayer>.sentualV57TopClock{display:none!important}
  .sentualV60TopPlayer>.sentualV57TopControls{grid-column:1!important;grid-row:1!important;width:52px!important;height:56px!important;display:grid!important;place-items:center!important;margin:0!important;padding:0!important}
  .sentualV60TopPlayer>.sentualV57TopControls>button:not([data-act="play"]){display:none!important}
  .sentualV60TopPlayer>.sentualV57TopControls>button[data-act="play"]{display:grid!important;place-items:center!important;width:46px!important;height:46px!important;padding:0!important;margin:0!important;border:0!important;border-radius:50%!important;background:transparent!important;color:var(--text)!important;box-shadow:none!important;transform:none!important}
  .sentualV60TopPlayer>.sentualV57TopControls>button[data-act="play"] svg{width:29px!important;height:29px!important}
  .sentualV60TopPlayer>.sentualV59TopTrack{grid-column:2!important;grid-row:1!important;height:56px!important;min-width:0!important;padding:7px 8px 9px!important;display:flex!important;flex-direction:column!important;justify-content:center!important;align-items:center!important;text-align:center!important;cursor:pointer!important}
  .sentualV60TopPlayer .sentualV57TopTitle{width:100%!important;font-size:15px!important;font-weight:500!important;line-height:1.2!important;color:var(--text)!important;text-align:center!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}
  .sentualV60TopPlayer .sentualV59TopSub{display:block!important;width:100%!important;margin-top:3px!important;font-size:10.5px!important;line-height:1.1!important;color:var(--muted)!important;text-align:center!important;white-space:nowrap!important;overflow:hidden!important;text-overflow:ellipsis!important}
  .sentualV60TopPlayer>.sentualV57TopTools{grid-column:3!important;grid-row:1!important;width:52px!important;height:56px!important;display:grid!important;place-items:center!important;margin:0!important;padding:0!important}
  .sentualV60TopPlayer>.sentualV57TopTools>button:not([data-act="close"]){display:none!important}
  .sentualV60TopPlayer>.sentualV57TopTools>button[data-act="close"]{display:grid!important;place-items:center!important;width:46px!important;height:46px!important;padding:0!important;border:0!important;border-radius:50%!important;background:transparent!important;color:var(--text)!important;box-shadow:none!important;transform:none!important}
  .sentualV60TopPlayer>.sentualV57TopTools>button[data-act="close"] svg{width:27px!important;height:27px!important}
  .sentualV60TopPlayer>.sentualV59TopTimeline{display:block!important;position:absolute!important;left:0!important;right:0!important;bottom:-1px!important;width:100%!important;height:8px!important;margin:0!important;z-index:6!important}
  .sentualV60TopPlayer>.sentualV59TopTimeline .sentualV59TimelineRail,.sentualV60TopPlayer>.sentualV59TopTimeline .sentualV59TimelineBuffer,.sentualV60TopPlayer>.sentualV59TopTimeline .sentualV59TimelinePlayed{left:0!important;right:0!important;top:auto!important;bottom:0!important;height:3px!important;transform:none!important;border-radius:0!important}
  .sentualV60TopPlayer>.sentualV59TopTimeline .sentualV59TimelineKnob{display:none!important}
  .sentualV60TopPlayer>.sentualV59TopTimeline .sentualV59TimelineRail{background:color-mix(in srgb,var(--line) 88%,transparent)!important}
  .sentualV60TopPlayer>.sentualV59TopTimeline .sentualV59TimelinePlayed{background:var(--text)!important}
  .chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top) + 64px)!important}
  :root[data-theme="light"] .sentualV57TopPlayer.sentualV60TopPlayer{background:rgba(251,253,254,.99)!important}
}

/* Playlist closely follows the supplied iOS sheet reference. */
.sentualV4214PlaylistOverlay{background:rgba(25,33,38,.34)!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;padding:12px!important}
.sentualV4214PlaylistSheet{width:min(680px,100%)!important;max-height:min(72dvh,650px)!important;border-radius:30px!important;background:var(--side)!important;border:1px solid color-mix(in srgb,var(--line) 88%,transparent)!important;box-shadow:0 24px 70px rgba(0,0,0,.24)!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistHead{height:66px!important;padding:0 14px 0 28px!important;border-bottom:1px solid var(--line)!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistHead>b{font-size:23px!important;line-height:1!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistHead>button{width:46px!important;height:46px!important;padding:0!important;border-radius:50%!important;background:transparent!important;color:var(--muted)!important;display:grid!important;place-items:center!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistHead>button svg{width:27px!important;height:27px!important;fill:none!important;stroke:currentColor!important;stroke-width:2!important;stroke-linecap:round!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistList{padding:10px 12px 14px!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistRow{min-height:82px!important;grid-template-columns:60px minmax(0,1fr) auto!important;gap:14px!important;padding:10px 12px!important;border-radius:20px!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistRow.active{background:color-mix(in srgb,var(--accent) 10%,var(--side))!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistArt{width:60px!important;height:60px!important;border-radius:16px!important;background:color-mix(in srgb,var(--bubble) 92%,transparent)!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistArt svg{width:29px!important;height:29px!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistText>b{font-size:18px!important;line-height:1.2!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistText>small{font-size:13px!important;margin-top:6px!important}
.sentualV4214PlaylistSheet .sentualV4211PlaylistDuration{font-size:13px!important;padding-left:8px!important}
:root[data-theme="light"] .sentualV4214PlaylistSheet{background:#fff!important}

/* Full player: artwork/title/share, timeline + elapsed/total, speed/prev/play/next/repeat. */
.sentualV4214FullPlayerOverlay{background:rgba(25,33,38,.34)!important;backdrop-filter:blur(8px)!important;-webkit-backdrop-filter:blur(8px)!important;padding:12px!important;align-items:flex-end!important}
.sentualV4214FullPlayerSheet{width:min(720px,100%)!important;padding:24px 24px 22px!important;border-radius:26px!important;background:var(--side)!important;border:1px solid color-mix(in srgb,var(--line) 88%,transparent)!important;box-shadow:0 24px 80px rgba(0,0,0,.28)!important}
html.sentual-ios .sentualV4214FullPlayerSheet{border-radius:34px!important;padding-bottom:max(24px,calc(env(safe-area-inset-bottom) + 12px))!important}
.sentualV4214FullPlayerSheet .sentualV4211FullHead{grid-template-columns:72px minmax(0,1fr) 56px!important;gap:16px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullArt{width:72px!important;height:72px!important;border-radius:17px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullArt svg{width:31px!important;height:31px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullMeta>b{font-size:24px!important;line-height:1.2!important}
.sentualV4214FullPlayerSheet .sentualV4211FullMeta>small{margin-top:6px!important;font-size:16px!important;color:var(--muted)!important}
.sentualV4214Share{width:56px!important;height:56px!important;padding:0!important;border:0!important;border-radius:16px!important;background:transparent!important;color:var(--text)!important;display:grid!important;place-items:center!important;box-shadow:none!important;transform:none!important}
.sentualV4214Share svg{width:31px!important;height:31px!important;fill:none!important;stroke:currentColor!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}
.sentualV4214FullPlayerSheet .sentualV4211FullTimeline{margin:26px 4px 0!important;touch-action:none!important}
.sentualV4214FullPlayerSheet .sentualV4211FullTimeline>input{height:28px!important;touch-action:none!important;accent-color:var(--text)!important}
.sentualV4214FullPlayerSheet .sentualV4211FullTimeline>div{margin-top:3px!important;font-size:13px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullControls{grid-template-columns:58px 1fr 82px 1fr 58px!important;gap:8px!important;margin-top:20px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullControls>button{height:66px!important;border-radius:20px!important;background:transparent!important;color:var(--text)!important}
.sentualV4214FullPlayerSheet .sentualV4211FullControls>button svg{width:38px!important;height:38px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullControls>button.play{width:82px!important;height:82px!important;border-radius:50%!important;background:transparent!important}
.sentualV4214FullPlayerSheet .sentualV4211FullControls>button.play svg{width:46px!important;height:46px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullControls>button.speed{width:58px!important;height:66px!important;grid-template-rows:35px 15px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullControls>button.speed svg{width:27px!important;height:27px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullControls>button.speed>small{bottom:0!important;font-size:11px!important}
.sentualV4214FullPlayerSheet .sentualV4211FullControls>button.active{color:var(--accent)!important}
:root[data-theme="light"] .sentualV4214FullPlayerSheet{background:#fff!important}
@media(max-width:430px){.sentualV4214FullPlayerSheet{padding-left:18px!important;padding-right:18px!important}.sentualV4214FullPlayerSheet .sentualV4211FullHead{grid-template-columns:64px minmax(0,1fr) 48px!important;gap:13px!important}.sentualV4214FullPlayerSheet .sentualV4211FullArt{width:64px!important;height:64px!important}.sentualV4214FullPlayerSheet .sentualV4211FullMeta>b{font-size:20px!important}.sentualV4214FullPlayerSheet .sentualV4211FullMeta>small{font-size:14px!important}.sentualV4214FullPlayerSheet .sentualV4211FullControls{grid-template-columns:50px 1fr 74px 1fr 50px!important;gap:3px!important}.sentualV4214FullPlayerSheet .sentualV4211FullControls>button.play{width:74px!important;height:74px!important}}

/* Reaction options remain a little larger; the newest-used option is moved to the start by JS. */
.messageContextMenu .sentualReactionChoice{flex-basis:46px!important;width:46px!important;height:46px!important;min-width:46px!important;font-size:27px!important;border-radius:15px!important}

/* Voice timeline is an interaction island: dragging never arms reply/context. */
.sentualVoiceWave,.sentualV60Timeline,.sentualV4211FullTimeline{touch-action:none!important;-webkit-user-select:none!important;user-select:none!important}

.sentualV4214FullPlayerSheet .sentualV4211FullControls>button.transportSkip svg{fill:currentColor!important;stroke:none!important;width:42px!important;height:42px!important}

/* ===== SENTUAL V4.2.15: requested player/reaction/voice precision fixes ===== */
/* While the full player is open, keep the compact bar's geometry but do not leave its white surface visible through the blur. */
@media(max-width:820px){
  .sentualV57TopPlayer.sentualV60TopPlayer.sentualFullPlayerOpen{opacity:0!important;background:transparent!important;border-color:transparent!important;box-shadow:none!important;pointer-events:none!important}
}

/* Slightly smaller full player, while retaining the same iPhone-style bottom sheet proportions. */
.sentualV4215FullPlayerSheet{width:min(660px,calc(100% - 8px))!important;padding:20px 20px 18px!important}
.sentualV4215FullPlayerSheet .sentualV4211FullHead{grid-template-columns:62px minmax(0,1fr) 48px!important;gap:13px!important}
.sentualV4215FullPlayerSheet .sentualV4211FullArt{width:62px!important;height:62px!important;border-radius:15px!important}
.sentualV4215FullPlayerSheet .sentualV4211FullMeta>b{font-size:20px!important}
.sentualV4215FullPlayerSheet .sentualV4211FullMeta>small{font-size:14px!important;margin-top:4px!important}
.sentualV4215FullPlayerSheet .sentualV4214Share{width:48px!important;height:48px!important;border-radius:14px!important}
.sentualV4215FullPlayerSheet .sentualV4214Share svg{width:27px!important;height:27px!important}
.sentualV4215FullPlayerSheet .sentualV4211FullTimeline{margin:20px 3px 0!important}
.sentualV4215FullPlayerSheet .sentualV4211FullControls{grid-template-columns:50px 1fr 72px 1fr 50px!important;gap:5px!important;margin-top:14px!important}
.sentualV4215FullPlayerSheet .sentualV4211FullControls>button{height:58px!important;border-radius:17px!important}
.sentualV4215FullPlayerSheet .sentualV4211FullControls>button.play{width:72px!important;height:72px!important}
.sentualV4215FullPlayerSheet .sentualV4211FullControls>button.play svg{width:39px!important;height:39px!important}
.sentualV4215FullPlayerSheet .sentualV4211FullControls>button.transportSkip svg,.sentualV4215FullPlayerSheet .sentualV4211FullControls>button[data-act="repeat"] svg{width:32px!important;height:32px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.8!important;stroke-linecap:round!important;stroke-linejoin:round!important}
.sentualV4215FullPlayerSheet .sentualV4211FullControls>button.speed{width:50px!important;height:58px!important;display:grid!important;grid-template-columns:1fr!important;grid-template-rows:1fr!important;place-items:center!important}
.sentualV4215SpeedGlyph{width:34px;height:34px;border:1.8px solid currentColor;border-radius:50%;display:grid;place-items:center;font-size:10px;font-weight:750;line-height:1;letter-spacing:-.25px;color:currentColor}
.sentualV4215FullPlayerSheet .sentualV4211FullControls>button.speed:active .sentualV4215SpeedGlyph{transform:scale(.94)}
@media(max-width:430px){.sentualV4215FullPlayerSheet{padding:18px 16px 16px!important}.sentualV4215FullPlayerSheet .sentualV4211FullControls{grid-template-columns:46px 1fr 68px 1fr 46px!important}.sentualV4215FullPlayerSheet .sentualV4211FullControls>button.play{width:68px!important;height:68px!important}}

/* Four reaction choices fit in the visible top row of the existing message options menu. */
.messageContextMenu .sentualReactionPicker{gap:5px!important;padding:6px 5px 8px!important}
.messageContextMenu .sentualReactionChoice{flex:0 0 38px!important;width:38px!important;height:38px!important;min-width:38px!important;border-radius:12px!important;font-size:23px!important}

/* Desktop waveform bars span the whole available timeline instead of ending early. */
@media(min-width:821px){
  #messages .sentualVoiceWave{width:100%!important;justify-content:space-between!important;gap:0!important}
  #messages .sentualVoiceWave i{flex:0 0 3px!important;width:3px!important;min-width:3px!important;max-width:3px!important}
}

/* Privacy control replaces the elapsed recorder clock only after recording has stopped. */
.sentualVoicePrivacy{display:none;width:38px;height:38px;padding:0;border:1px solid var(--line);border-radius:13px;background:var(--bubble);color:var(--muted);place-items:center;justify-self:end;box-shadow:none!important;transform:none!important;-webkit-tap-highlight-color:transparent!important}
.sentualVoicePrivacy svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.sentualVoicePrivacy.active{background:color-mix(in srgb,var(--accent) 14%,var(--bubble));border-color:color-mix(in srgb,var(--accent) 50%,var(--line));color:var(--accent)}
.sentualVoiceRecorderOverlay.reviewMode .sentualVoiceRecorderHead time{display:none!important}
.sentualVoiceRecorderOverlay.reviewMode .sentualVoicePrivacy{display:grid!important;grid-column:3!important}
.sentualVoiceRecorderOverlay:not(.reviewMode) .sentualVoicePrivacy{display:none!important}

/* ===== SENTUAL V4.2.16: flat compact music bar + voice loading + reaction alignment ===== */
@media(max-width:820px){
  .sentualV57TopPlayer.sentualV60TopPlayer{width:100%!important;max-width:none!important;height:64px!important;min-height:64px!important;flex-basis:64px!important;margin:0!important;padding:0 7px!important;grid-template-columns:48px minmax(0,1fr) 48px!important;grid-template-rows:64px!important;border-left:0!important;border-right:0!important;border-top:0!important;border-radius:0!important;background:color-mix(in srgb,var(--side) 97%,transparent)!important;box-shadow:none!important;overflow:hidden!important}
  .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{height:64px!important;flex-basis:64px!important;border-bottom:1px solid var(--line)!important;box-shadow:none!important}
  .sentualV60TopPlayer>.sentualV57TopControls,.sentualV60TopPlayer>.sentualV59TopTrack,.sentualV60TopPlayer>.sentualV57TopTools{height:64px!important}
  .sentualV60TopPlayer>.sentualV57TopControls{width:48px!important}.sentualV60TopPlayer>.sentualV57TopTools{width:48px!important}
  .sentualV60TopPlayer>.sentualV57TopControls>button[data-act="play"],.sentualV60TopPlayer>.sentualV57TopTools>button[data-act="close"]{width:44px!important;height:44px!important;border-radius:12px!important}
  .sentualV60TopPlayer>.sentualV59TopTimeline{left:0!important;right:0!important;bottom:-1px!important;width:100%!important}
  .chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top) + 64px)!important}
  :root[data-theme="light"] .sentualV57TopPlayer.sentualV60TopPlayer{background:rgba(250,252,253,.985)!important}
}

.sentualVoiceCard.voiceLoading .sentualVoicePlay{position:relative!important;cursor:wait!important}
.sentualVoiceCard.voiceLoading .sentualVoicePlay>svg{opacity:0!important}
.sentualVoiceCard.voiceLoading .sentualVoicePlay::after{content:"";position:absolute;width:19px;height:19px;border:2px solid rgba(255,255,255,.32);border-top-color:#fff;border-radius:50%;animation:sentualVoiceLoadingSpin .72s linear infinite}
@keyframes sentualVoiceLoadingSpin{to{transform:rotate(360deg)}}
#sentualVoiceMedia{display:block!important}

.messageContextMenu .sentualReactionPicker{box-sizing:border-box!important;width:calc(100% + 6px)!important;max-width:none!important;margin-left:-3px!important;margin-right:-3px!important;padding-left:2px!important;padding-right:2px!important;justify-content:flex-start!important;scroll-padding-left:0!important}

/* ===== SENTUAL V4.2.17: compact player, stable gestures, palettes and admin layout ===== */
@media(max-width:820px){
  .sentualV57TopPlayer.sentualV60TopPlayer{height:54px!important;min-height:54px!important;flex-basis:54px!important;grid-template-columns:44px minmax(0,1fr) 44px!important;grid-template-rows:54px!important;padding:0 5px!important}
  .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{height:54px!important;flex-basis:54px!important}
  .sentualV60TopPlayer>.sentualV57TopControls,.sentualV60TopPlayer>.sentualV59TopTrack,.sentualV60TopPlayer>.sentualV57TopTools{height:54px!important}
  .sentualV60TopPlayer>.sentualV57TopControls,.sentualV60TopPlayer>.sentualV57TopTools{width:44px!important}
  .sentualV60TopPlayer>.sentualV57TopControls>button[data-act="play"],.sentualV60TopPlayer>.sentualV57TopTools>button[data-act="close"]{width:40px!important;height:40px!important;border-radius:10px!important}
  .sentualV60TopPlayer .sentualV57TopTitle{font-size:14px!important}.sentualV60TopPlayer .sentualV59TopSub{font-size:9.5px!important;margin-top:2px!important}
  .sentualV57TopPlayer.sentualV60TopPlayer.sentualV4217FullHidden,.sentualV57TopPlayer.sentualV60TopPlayer.sentualFullPlayerOpen{display:none!important;height:0!important;min-height:0!important;flex-basis:0!important;border:0!important}
}
.sentualV57AudioCard.musicLoading .sentualV57AudioPlay{position:relative!important}.sentualV57AudioCard.musicLoading .sentualV57AudioPlay>svg{opacity:0!important}.sentualV57AudioCard.musicLoading .sentualV57AudioPlay::after{content:"";position:absolute;width:18px;height:18px;border:2px solid color-mix(in srgb,currentColor 28%,transparent);border-top-color:currentColor;border-radius:50%;animation:sentualVoiceLoadingSpin .72s linear infinite}.sentualV57AudioCard.musicDownloading .sentualV57AudioSub{font-variant-numeric:tabular-nums}
.sentualVoiceWave,.sentualV60Timeline,.sentualV4211FullTimeline{touch-action:pan-y!important;-webkit-user-select:none!important;user-select:none!important}.sentualV4211FullTimeline input{pointer-events:none!important}

/* Only plain text-message contents may be selected/copied in the chat. */
#chat,#messages,#messages *{-webkit-user-select:none;user-select:none}#messages .bubble:not(.file):not(.walletMessage){-webkit-user-select:text;user-select:text}#messages .bubble:not(.file):not(.walletMessage) .messageStamp,#messages .bubble:not(.file):not(.walletMessage) .replyQuote,#messages .bubble:not(.file):not(.walletMessage) .sentualReactionStrip{-webkit-user-select:none!important;user-select:none!important}

/* Admin panel stays reachable and compact on every screen. */
#managementModal{align-items:center!important;overflow:hidden!important}#managementModal>.modalBox{width:min(560px,calc(100vw - 24px))!important;max-height:calc(100dvh - 24px)!important;overflow:auto!important;padding:20px!important}#managementModal .modalClose{position:sticky!important;top:0!important;float:right!important;margin:-4px -4px 4px 8px!important;z-index:8!important;background:var(--side)!important}#managementModal .choice{margin-top:7px!important;padding:11px 12px!important;min-height:52px!important}@media(min-width:600px){#managementModal>.modalBox{display:block!important}#managementModal .choice{width:calc(50% - 5px)!important;display:inline-flex!important;vertical-align:top!important;margin-right:6px!important}#managementModal .manageLabel{display:block!important;clear:both!important}}

/* Profile custom themes + double-tap settings. */
.sentualV4217ProfileSettings{margin:14px 0 2px;padding-top:13px;border-top:1px solid var(--line);text-align:left}.sentualSettingsTitle{font-size:10px;font-weight:650;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:9px}.sentualThemePresets{display:grid;grid-template-columns:repeat(4,1fr);gap:7px}.sentualThemePreset{border:1px solid var(--line);border-radius:12px;background:var(--bubble);color:var(--text);padding:8px 4px;display:grid;place-items:center;gap:5px;font-size:9px}.sentualThemePreset i{width:28px;height:18px;border-radius:7px;border:1px solid #0002;box-shadow:inset 0 0 0 1px #fff3}.sentualThemePreset[data-palette="minimal"] i{background:linear-gradient(135deg,#fff 0 50%,#d9dee2 50%)}.sentualThemePreset[data-palette="rose"] i{background:linear-gradient(135deg,#fff7fa 0 50%,#e782a9 50%)}.sentualThemePreset[data-palette="midnight"] i{background:linear-gradient(135deg,#07111d 0 50%,#236aa2 50%)}.sentualThemePreset[data-palette="obsidian"] i{background:linear-gradient(135deg,#050505 0 50%,#292929 50%)}.sentualThemePreset.active{outline:2px solid var(--accent);outline-offset:1px}.sentualGestureTitle{margin-top:14px}.sentualDoubleTapSettings{display:flex;align-items:center;justify-content:space-between;gap:10px}.sentualTapMode{display:flex;border:1px solid var(--line);border-radius:10px;padding:2px;background:var(--side)}.sentualTapMode button{border:0;background:transparent;color:var(--muted);padding:7px 10px;border-radius:8px;font-size:9px}.sentualTapMode button.active{background:var(--bubble);color:var(--text)}.sentualDoubleTapSettings label{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:9px}.sentualDoubleTapSettings select{height:32px;border:1px solid var(--line);border-radius:9px;background:var(--bubble);color:var(--text);padding:0 7px;font-size:15px}

/* Palette presets. */
:root[data-palette="minimal"]{--bg:#f4f5f6;--side:#ffffff;--chat:#ffffff;--line:#d8dde1;--text:#111418;--muted:#737b82;--accent:#41474d;--bubble:#f0f2f3;--mine:#e4e7e9}:root[data-palette="minimal"] .messages{background:#fff!important}:root[data-palette="minimal"] .composer,:root[data-palette="minimal"] .chatHead,:root[data-palette="minimal"] .search,:root[data-palette="minimal"] .modalBox{background:#fff!important}
:root[data-palette="rose"]{--bg:#fff5f8;--side:#fff9fb;--chat:#fff7fa;--line:#efd7e0;--text:#291820;--muted:#98717f;--accent:#d84f86;--bubble:#fff0f5;--mine:#f8d7e5}:root[data-palette="rose"] .messages{background:radial-gradient(circle at 50% 0,#f7bfd51c,transparent 44%),#fff7fa!important}:root[data-palette="rose"] .search,:root[data-palette="rose"] .composer,:root[data-palette="rose"] .modalBox{background:#fff9fb!important}
:root[data-palette="midnight"]{--bg:#040b13;--side:#07111d;--chat:#050e18;--line:#17324a;--text:#edf7ff;--muted:#7593aa;--accent:#4aa8ff;--bubble:#0c1b29;--mine:#104c73}:root[data-palette="midnight"] .messages{background:radial-gradient(circle at 50% 0,#164b7338,transparent 46%),#050e18!important}:root[data-palette="midnight"] .search,:root[data-palette="midnight"] .composer,:root[data-palette="midnight"] .modalBox{background:#081522!important}
:root[data-palette="obsidian"]{--bg:#020202;--side:#070707;--chat:#030303;--line:#282828;--text:#f5f5f5;--muted:#949494;--accent:#f2f2f2;--bubble:#121212;--mine:#252525}:root[data-palette="obsidian"] .messages{background:#030303!important}:root[data-palette="obsidian"] .search,:root[data-palette="obsidian"] .composer,:root[data-palette="obsidian"] .modalBox{background:#090909!important}:root[data-palette="obsidian"] .send{background:#f1f1f1!important;color:#080808!important}
@media(max-width:420px){.sentualThemePresets{grid-template-columns:repeat(2,1fr)}.sentualDoubleTapSettings{align-items:stretch;flex-direction:column}.sentualDoubleTapSettings label{justify-content:space-between}}

/* ===== SENTUAL V4.2.19 ===== */
/* Thinner flat music bar; generic Audio subtitle removed. */
@media(max-width:820px){
  .sentualV57TopPlayer.sentualV60TopPlayer{height:46px!important;min-height:46px!important;flex-basis:46px!important;grid-template-columns:40px minmax(0,1fr) 40px!important;grid-template-rows:46px!important;padding:0 4px!important;border-radius:0!important}
  .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{height:46px!important;min-height:46px!important;flex-basis:46px!important}
  .sentualV60TopPlayer>.sentualV57TopControls,.sentualV60TopPlayer>.sentualV59TopTrack,.sentualV60TopPlayer>.sentualV57TopTools{height:46px!important}
  .sentualV60TopPlayer>.sentualV57TopControls,.sentualV60TopPlayer>.sentualV57TopTools{width:40px!important}
  .sentualV60TopPlayer>.sentualV57TopControls>button[data-act="play"],.sentualV60TopPlayer>.sentualV57TopTools>button[data-act="close"]{width:36px!important;height:36px!important;border-radius:9px!important}
  .sentualV60TopPlayer .sentualV57TopTitle{font-size:13px!important;line-height:1.15!important}
  .sentualV60TopPlayer .sentualV59TopSub{display:none!important}
  .sentualV60TopPlayer .sentualV59TopTrack{height:46px!important;justify-content:center!important;padding:0 6px!important}
  .chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top) + 46px)!important}
  .sidebar>.sentualV57TopPlayer.sentualV60TopPlayer{order:0;flex:none!important;width:100%!important;border-top:1px solid var(--line)!important;border-bottom:1px solid var(--line)!important}
}
/* Music loading spinner stays exactly in the center of the play circle. */
.sentualV57AudioCard.musicLoading .sentualV57AudioPlay{position:absolute!important;inset:7px!important;display:grid!important;place-items:center!important}
.sentualV57AudioCard.musicLoading .sentualV57AudioPlay::after{left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;transform:translate(-50%,-50%)!important;transform-origin:center!important;animation:sentualV4218MusicSpin .72s linear infinite!important}
@keyframes sentualV4218MusicSpin{from{transform:translate(-50%,-50%) rotate(0)}to{transform:translate(-50%,-50%) rotate(360deg)}}

/* Theme chooser: neutral selection, no blue hover/focus halo. */
.sentualV4217ProfileSettings{margin:14px 0 8px!important}
.sentualThemePresets{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:8px!important}
.sentualThemePreset{min-height:58px!important;border:1px solid var(--line)!important;border-radius:14px!important;background:var(--side)!important;color:var(--text)!important;outline:0!important;box-shadow:none!important;transition:border-color .12s ease,background .12s ease!important}
.sentualThemePreset:hover,.sentualThemePreset:focus,.sentualThemePreset:focus-visible,.sentualThemePreset:active{outline:0!important;box-shadow:none!important;transform:none!important;background:var(--side)!important;border-color:color-mix(in srgb,var(--text) 22%,var(--line))!important}
.sentualThemePreset.active{outline:0!important;outline-offset:0!important;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 46%,transparent)!important;border-color:color-mix(in srgb,var(--text) 38%,var(--line))!important}
.sentualThemePreset i{width:31px!important;height:19px!important;border-radius:7px!important}
.sentualThemePreset[data-palette="default"] i{background:linear-gradient(135deg,#f7f9fb 0 50%,#0b1219 50%)!important}
.sentualThemePreset[data-palette="mono"] i{background:linear-gradient(135deg,#fff 0 50%,#050505 50%)!important}
.sentualThemePreset[data-palette="rose"] i{background:linear-gradient(135deg,#fff1f7 0 50%,#401223 50%)!important}
.sentualThemePreset[data-palette="green"] i{background:linear-gradient(135deg,#f0fff5 0 50%,#082517 50%)!important}
/* Default is the original SENTUAL light/dark palette. */
:root[data-palette="default"][data-theme="dark"]{--bg:#0b1118;--side:#0e151d;--chat:#0b1219;--line:#1b2732;--text:#eef3f7;--muted:#728293;--accent:#2aabee;--bubble:#17232e;--mine:#195d78}
:root[data-palette="default"][data-theme="light"]{--bg:#f4f7fa;--side:#ffffff;--chat:#f7f9fb;--line:#e1e7ec;--text:#18212b;--muted:#71808f;--accent:#2aabee;--bubble:#e8edf2;--mine:#d9f0ff}
:root[data-palette="mono"][data-theme="light"]{--bg:#f7f7f7;--side:#fff;--chat:#fff;--line:#d8d8d8;--text:#101010;--muted:#777;--accent:#202020;--bubble:#f1f1f1;--mine:#e4e4e4}
:root[data-palette="mono"][data-theme="dark"]{--bg:#000;--side:#050505;--chat:#000;--line:#2f2f2f;--text:#f7f7f7;--muted:#929292;--accent:#f1f1f1;--bubble:#121212;--mine:#242424}
:root[data-palette="rose"][data-theme="light"]{--bg:#fff5f9;--side:#fffafd;--chat:#fff7fa;--line:#efcfdd;--text:#27171e;--muted:#946d7c;--accent:#db4e88;--bubble:#fff0f5;--mine:#f9d8e6}
:root[data-palette="rose"][data-theme="dark"]{--bg:#090507;--side:#10080c;--chat:#0b0608;--line:#512033;--text:#fff1f6;--muted:#bb859a;--accent:#f05b98;--bubble:#1c0d13;--mine:#411426}
:root[data-palette="green"][data-theme="light"]{--bg:#f4fbf6;--side:#fbfffc;--chat:#f7fcf8;--line:#d2e5d7;--text:#15221a;--muted:#708578;--accent:#27945a;--bubble:#eaf5ed;--mine:#d2edda}
:root[data-palette="green"][data-theme="dark"]{--bg:#040a06;--side:#07110b;--chat:#050c08;--line:#173c28;--text:#effaf3;--muted:#7ba38a;--accent:#43c77a;--bubble:#0d1c13;--mine:#123d24}
:root[data-palette="mono"] .messages{background:var(--chat)!important}:root[data-palette="rose"] .messages{background:radial-gradient(circle at 50% 0,color-mix(in srgb,var(--accent) 9%,transparent),transparent 45%),var(--chat)!important}:root[data-palette="green"] .messages{background:radial-gradient(circle at 50% 0,color-mix(in srgb,var(--accent) 8%,transparent),transparent 45%),var(--chat)!important}
:root[data-palette="mono"] .search,:root[data-palette="mono"] .composer,:root[data-palette="mono"] .modalBox,:root[data-palette="rose"] .search,:root[data-palette="rose"] .composer,:root[data-palette="rose"] .modalBox,:root[data-palette="green"] .search,:root[data-palette="green"] .composer,:root[data-palette="green"] .modalBox{background:var(--side)!important}

/* Conversation settings modal. */
.sentualConversationSettingsModal{z-index:94!important}.sentualConversationSettingsBox{width:min(520px,100%)!important;max-height:min(780px,calc(100dvh - 30px))!important;overflow:auto!important;text-align:left!important;padding:22px!important}.sentualConversationSettingsHead{display:flex;align-items:center;gap:12px;padding-right:38px;margin-bottom:15px}.sentualConversationSettingsIcon{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;background:var(--bubble);color:var(--accent);flex:none}.sentualConversationSettingsIcon svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.sentualConversationSettingsHead h2{margin:0!important;font-size:18px}.sentualConversationSettingsHead p{margin:3px 0 0!important;font-size:10px}.sentualSettingCard{padding:13px;border:1px solid var(--line);border-radius:15px;background:color-mix(in srgb,var(--side) 80%,var(--bubble) 20%);margin-top:10px}.sentualSettingCardTitle b,.sentualSettingCardTitle small{display:block}.sentualSettingCardTitle b{font-size:12px}.sentualSettingCardTitle small{margin-top:3px;color:var(--muted);font-size:9px;line-height:1.45}.sentualSegmented{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin-top:11px;padding:3px;border-radius:11px;background:var(--bubble)}.sentualSegmented button{height:34px;border:0;border-radius:9px;background:transparent;color:var(--muted);font-size:10px;box-shadow:none!important;outline:0!important}.sentualSegmented button.active{background:var(--side);color:var(--text);box-shadow:0 1px 5px rgba(0,0,0,.08)!important}.sentualDefaultReactionRow,.sentualReactionFieldLabel{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:11px;color:var(--muted);font-size:10px}.sentualDefaultReactionRow select{width:78px;height:36px;border:1px solid var(--line);border-radius:10px;background:var(--side);color:var(--text);font-size:18px;padding:0 9px}.sentualReactionFieldLabel{display:block}.sentualReactionFieldLabel>span{display:block;margin-bottom:5px}.sentualReactionFieldLabel .bigInput{margin:0!important;font-size:18px!important;letter-spacing:4px!important;min-height:42px}.sentualPremiumOnly{margin-top:10px;padding:10px;border-radius:11px;background:var(--bubble);color:var(--muted);font-size:9px;text-align:center}.sentualCustomSelected{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}.sentualOrderedReaction{height:34px;display:flex;align-items:center;border:1px solid var(--line);border-radius:11px;background:var(--side);overflow:hidden}.sentualOrderedReaction>b{font-size:18px;padding:0 5px}.sentualOrderedReaction>button{width:25px;height:32px;padding:0;border:0;background:transparent;color:var(--muted);box-shadow:none!important;outline:0!important}.sentualOrderedReaction>.remove{color:#d26970}.sentualAllReactionGrid{display:grid;grid-template-columns:repeat(8,1fr);gap:5px;margin-top:11px}.sentualAllReaction{height:36px;padding:0;border:1px solid var(--line);border-radius:10px;background:var(--side);font-size:18px;box-shadow:none!important;outline:0!important}.sentualAllReaction.active{background:color-mix(in srgb,var(--accent) 10%,var(--side));border-color:color-mix(in srgb,var(--accent) 35%,var(--line))}@media(max-width:460px){.sentualConversationSettingsBox{padding:18px 14px!important}.sentualAllReactionGrid{grid-template-columns:repeat(6,1fr)}}

/* Blank-row swipe gets the same visible Reply motion as swiping the message itself. */
#messages .bubble.sentualReplySwipe{will-change:transform!important}

/* ===== SENTUAL V4.2.19 ===== */
/* The compact music strip occupies space only while it is actually visible. */
.sentualGlobalAudioPlayer.hidden,.sentualV57TopPlayer.hidden{display:none!important;pointer-events:none!important}
.sentualV57TopPlayer.sentualPlayerClosing{height:0!important;min-height:0!important;max-height:0!important;flex-basis:0!important;padding:0!important;margin:0!important;border:0!important;opacity:0!important;overflow:hidden!important;pointer-events:none!important}
@media(max-width:820px){
  .sentualV57TopPlayer.sentualV60TopPlayer{height:40px!important;min-height:40px!important;max-height:40px!important;flex-basis:40px!important;grid-template-columns:36px minmax(0,1fr) 36px!important;grid-template-rows:40px!important;padding:0 3px!important;border-radius:0!important}
  .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{height:40px!important;min-height:40px!important;max-height:40px!important;flex-basis:40px!important}
  .sentualV60TopPlayer>.sentualV57TopControls,.sentualV60TopPlayer>.sentualV59TopTrack,.sentualV60TopPlayer>.sentualV57TopTools{height:40px!important;min-height:40px!important}
  .sentualV60TopPlayer>.sentualV57TopControls,.sentualV60TopPlayer>.sentualV57TopTools{width:36px!important}
  .sentualV60TopPlayer>.sentualV57TopControls>button[data-act="play"],.sentualV60TopPlayer>.sentualV57TopTools>button[data-act="close"]{width:32px!important;height:32px!important;border-radius:8px!important}
  .sentualV60TopPlayer .sentualV59TopTrack{height:40px!important;padding:0 5px!important}
  .sentualV60TopPlayer .sentualV57TopTitle{font-size:12px!important;line-height:1.1!important}
  .chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top) + 40px)!important}
  .sidebar>.sentualV57TopPlayer.sentualV60TopPlayer{order:initial!important;width:auto!important;margin:0 11px 10px!important;border:1px solid var(--line)!important;border-radius:11px!important;overflow:hidden!important;flex:none!important}
}

/* Music download loading: one centered spinner, no travelling blue bar beneath the card. */
.sentualV57AudioCard.buffering::after,.sentualV57AudioCard.musicLoading::after{display:none!important;content:none!important;animation:none!important}
.sentualV57AudioCard.musicLoading .sentualV57AudioPlay{position:absolute!important;inset:7px!important;display:grid!important;place-items:center!important;color:transparent!important;overflow:visible!important}
.sentualV57AudioCard.musicLoading .sentualV57AudioPlay svg,.sentualV57AudioCard.musicLoading .sentualV57AudioPlay>span{opacity:0!important}
.sentualV57AudioCard.musicLoading .sentualV57AudioPlay::after{content:""!important;display:block!important;position:absolute!important;left:50%!important;top:50%!important;width:20px!important;height:20px!important;margin:-11px 0 0 -11px!important;border:2px solid color-mix(in srgb,var(--accent) 24%,transparent)!important;border-top-color:var(--accent)!important;border-right-color:var(--accent)!important;border-radius:50%!important;transform:none!important;transform-origin:center!important;animation:sentualV4219MusicSpinner .72s linear infinite!important}
@keyframes sentualV4219MusicSpinner{to{transform:rotate(360deg)!important}}

/* Smooth outgoing launch from the composer area. */
.sentualMessageLaunch{opacity:.15!important;transform:translate3d(0,24px,0) scale(.96)!important;transform-origin:85% 100%!important;transition:transform .31s cubic-bezier(.18,.74,.22,1),opacity .22s ease!important;will-change:transform,opacity}
.sentualMessageLaunch.sentualMessageLaunchIn{opacity:1!important;transform:translate3d(0,0,0) scale(1)!important}

/* Password gate owns its own scroll; the messages viewport never pans the gate halfway down. */
#messages:has(.conversationPasswordGate){overflow:hidden!important;overscroll-behavior:none!important;scroll-behavior:auto!important}
.conversationPasswordGate{position:sticky!important;top:0!important;left:0!important;width:100%!important;min-height:100%!important;height:100%!important;overflow:hidden!important}
.conversationPasswordGateCard{max-height:calc(100% - 18px)!important;overflow:auto!important;overscroll-behavior:contain!important;-webkit-overflow-scrolling:touch}

/* Conversation settings and admin/statistics remain reachable on small screens and with iOS safe areas. */
.sentualConversationSettingsModal,#managementModal,#statisticsModal{overflow:auto!important;align-items:flex-start!important;padding-top:max(14px,env(safe-area-inset-top))!important;padding-bottom:max(42px,env(safe-area-inset-bottom))!important;-webkit-overflow-scrolling:touch!important}
.sentualConversationSettingsBox,#managementModal>.modalBox,#statisticsModal>.modalBox{margin:auto!important;max-height:none!important;overflow:visible!important;padding-top:54px!important}
.sentualConversationSettingsBox>.modalClose,#managementModal .modalClose,#statisticsModal .modalClose{position:sticky!important;float:right!important;right:0!important;top:0!important;margin-top:-42px!important;margin-right:0!important;z-index:12!important;background:var(--side)!important;border:1px solid var(--line)!important;border-radius:11px!important;width:36px!important;height:36px!important;display:grid!important;place-items:center!important}
.sentualAdminStorageStats{margin-top:14px;padding:13px;border:1px solid var(--line);border-radius:14px;background:var(--side);text-align:left}
.sentualAdminStorageHead{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px}.sentualAdminStorageHead b{font-size:12px}.sentualAdminStorageHead strong{font-size:11px;color:var(--accent)}
.sentualAdminStorageGrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.sentualAdminStorageGrid>div{padding:9px;border-radius:10px;background:var(--bubble);display:flex;justify-content:space-between;gap:8px}.sentualAdminStorageGrid span{font-size:9px;color:var(--muted)}.sentualAdminStorageGrid b{font-size:10px}.sentualAdminStorageStats>small{display:block;margin-top:9px;color:var(--muted);font-size:8px;line-height:1.5}

/* Non-default palettes: no inherited blue surfaces. Default palette intentionally has no overrides here. */
:root[data-palette="mono"],:root[data-palette="rose"],:root[data-palette="green"]{--sentual-control:color-mix(in srgb,var(--side) 74%,var(--bubble) 26%);--sentual-control-strong:color-mix(in srgb,var(--bubble) 72%,var(--side) 28%);--sentual-accent-soft:color-mix(in srgb,var(--accent) 13%,var(--side));--sentual-accent-border:color-mix(in srgb,var(--accent) 43%,var(--line))}
:root[data-palette="mono"] #messenger,:root[data-palette="rose"] #messenger,:root[data-palette="green"] #messenger,
:root[data-palette="mono"] .sidebar,:root[data-palette="rose"] .sidebar,:root[data-palette="green"] .sidebar,
:root[data-palette="mono"] .chat,:root[data-palette="rose"] .chat,:root[data-palette="green"] .chat{background:var(--chat)!important;color:var(--text)!important}
:root[data-palette="mono"] .sidebar,:root[data-palette="rose"] .sidebar,:root[data-palette="green"] .sidebar{background:var(--side)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .chatHead,:root[data-palette="rose"] .chatHead,:root[data-palette="green"] .chatHead,
:root[data-palette="mono"] .composer,:root[data-palette="rose"] .composer,:root[data-palette="green"] .composer{background:var(--side)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .search,:root[data-palette="rose"] .search,:root[data-palette="green"] .search,
:root[data-palette="mono"] #message,:root[data-palette="rose"] #message,:root[data-palette="green"] #message,
:root[data-palette="mono"] .composer textarea,:root[data-palette="rose"] .composer textarea,:root[data-palette="green"] .composer textarea,
:root[data-palette="mono"] .bigInput,:root[data-palette="rose"] .bigInput,:root[data-palette="green"] .bigInput,
:root[data-palette="mono"] .passwordInput,:root[data-palette="rose"] .passwordInput,:root[data-palette="green"] .passwordInput,
:root[data-palette="mono"] select,:root[data-palette="rose"] select,:root[data-palette="green"] select{background:var(--sentual-control)!important;color:var(--text)!important;border-color:var(--line)!important;caret-color:var(--accent)!important}
:root[data-palette="mono"] .search input,:root[data-palette="rose"] .search input,:root[data-palette="green"] .search input{background:transparent!important;color:var(--text)!important}
:root[data-palette="mono"] .attach,:root[data-palette="rose"] .attach,:root[data-palette="green"] .attach,
:root[data-palette="mono"] .newChatBtn,:root[data-palette="rose"] .newChatBtn,:root[data-palette="green"] .newChatBtn,
:root[data-palette="mono"] .iconBtn,:root[data-palette="rose"] .iconBtn,:root[data-palette="green"] .iconBtn,
:root[data-palette="mono"] .back,:root[data-palette="rose"] .back,:root[data-palette="green"] .back,
:root[data-palette="mono"] .themeToggle,:root[data-palette="rose"] .themeToggle,:root[data-palette="green"] .themeToggle,
:root[data-palette="mono"] .modalClose,:root[data-palette="rose"] .modalClose,:root[data-palette="green"] .modalClose{background:var(--sentual-control)!important;color:var(--muted)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .send,:root[data-palette="rose"] .send,:root[data-palette="green"] .send,
:root[data-palette="mono"] #composerSubmit,:root[data-palette="rose"] #composerSubmit,:root[data-palette="green"] #composerSubmit,
:root[data-palette="mono"] .passwordPrimary,:root[data-palette="rose"] .passwordPrimary,:root[data-palette="green"] .passwordPrimary{background:var(--accent)!important;color:var(--side)!important;border-color:var(--sentual-accent-border)!important}
:root[data-palette="mono"] .secondary,:root[data-palette="rose"] .secondary,:root[data-palette="green"] .secondary,
:root[data-palette="mono"] .choice,:root[data-palette="rose"] .choice,:root[data-palette="green"] .choice,
:root[data-palette="mono"] .profileInlineAction,:root[data-palette="rose"] .profileInlineAction,:root[data-palette="green"] .profileInlineAction{background:var(--sentual-control)!important;color:var(--text)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .menu,:root[data-palette="rose"] .menu,:root[data-palette="green"] .menu{background:var(--side)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .menu button,:root[data-palette="rose"] .menu button,:root[data-palette="green"] .menu button{color:var(--text)!important}
:root[data-palette="mono"] .menu button:hover,:root[data-palette="rose"] .menu button:hover,:root[data-palette="green"] .menu button:hover{background:var(--sentual-control)!important}
:root[data-palette="mono"] .modalBox,:root[data-palette="rose"] .modalBox,:root[data-palette="green"] .modalBox,
:root[data-palette="mono"] .sentualConversationSettingsBox,:root[data-palette="rose"] .sentualConversationSettingsBox,:root[data-palette="green"] .sentualConversationSettingsBox{background:var(--side)!important;border-color:var(--line)!important;color:var(--text)!important}
:root[data-palette="mono"] .sentualSettingCard,:root[data-palette="rose"] .sentualSettingCard,:root[data-palette="green"] .sentualSettingCard,
:root[data-palette="mono"] .sentualSegmented,:root[data-palette="rose"] .sentualSegmented,:root[data-palette="green"] .sentualSegmented{background:var(--sentual-control)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .sentualSegmented button.active,:root[data-palette="rose"] .sentualSegmented button.active,:root[data-palette="green"] .sentualSegmented button.active{background:var(--side)!important;color:var(--text)!important}
:root[data-palette="mono"] .sentualAllReaction,:root[data-palette="rose"] .sentualAllReaction,:root[data-palette="green"] .sentualAllReaction,
:root[data-palette="mono"] .sentualOrderedReaction,:root[data-palette="rose"] .sentualOrderedReaction,:root[data-palette="green"] .sentualOrderedReaction{background:var(--sentual-control)!important;border-color:var(--line)!important;color:var(--text)!important}
:root[data-palette="mono"] .sentualAllReaction.active,:root[data-palette="rose"] .sentualAllReaction.active,:root[data-palette="green"] .sentualAllReaction.active{background:var(--sentual-accent-soft)!important;border-color:var(--sentual-accent-border)!important}
:root[data-palette="mono"] .sentualV57AudioCard,:root[data-palette="rose"] .sentualV57AudioCard,:root[data-palette="green"] .sentualV57AudioCard,
:root[data-palette="mono"] .sentualVoiceCard,:root[data-palette="rose"] .sentualVoiceCard,:root[data-palette="green"] .sentualVoiceCard,
:root[data-palette="mono"] .attachmentCard,:root[data-palette="rose"] .attachmentCard,:root[data-palette="green"] .attachmentCard{background:var(--bubble)!important;border-color:var(--line)!important;color:var(--text)!important}
:root[data-palette="mono"] .sentualV57AudioPlay,:root[data-palette="rose"] .sentualV57AudioPlay,:root[data-palette="green"] .sentualV57AudioPlay,
:root[data-palette="mono"] .sentualVoicePlay,:root[data-palette="rose"] .sentualVoicePlay,:root[data-palette="green"] .sentualVoicePlay{background:var(--sentual-control-strong)!important;color:var(--accent)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .sentualV57TopPlayer,:root[data-palette="rose"] .sentualV57TopPlayer,:root[data-palette="green"] .sentualV57TopPlayer{background:var(--side)!important;color:var(--text)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .sentualV57TopPlayer button,:root[data-palette="rose"] .sentualV57TopPlayer button,:root[data-palette="green"] .sentualV57TopPlayer button{color:var(--accent)!important;background:transparent!important}
:root[data-palette="mono"] .sentualUpdateBanner,:root[data-palette="rose"] .sentualUpdateBanner,:root[data-palette="green"] .sentualUpdateBanner{background:var(--sentual-accent-soft)!important;border-color:var(--sentual-accent-border)!important}
:root[data-palette="mono"] .sentualUpdateBanner>button,:root[data-palette="rose"] .sentualUpdateBanner>button,:root[data-palette="green"] .sentualUpdateBanner>button{background:var(--sentual-control)!important;color:var(--text)!important}
:root[data-palette="mono"] .user:hover,:root[data-palette="mono"] .user.active,:root[data-palette="rose"] .user:hover,:root[data-palette="rose"] .user.active,:root[data-palette="green"] .user:hover,:root[data-palette="green"] .user.active{background:var(--sentual-control)!important}
:root[data-palette="mono"] .shareCode,:root[data-palette="rose"] .shareCode,:root[data-palette="green"] .shareCode{background:var(--sentual-control)!important;border-color:var(--line)!important;color:var(--text)!important}
:root[data-palette="mono"] .shareCode button,:root[data-palette="rose"] .shareCode button,:root[data-palette="green"] .shareCode button{background:var(--sentual-control-strong)!important;color:var(--text)!important;border-color:var(--line)!important}

/* Keep theme tiles neutral; no blue focus ring/hover residue. */
.sentualThemePreset,.sentualThemePreset:hover,.sentualThemePreset:active,.sentualThemePreset:focus,.sentualThemePreset:focus-visible{outline:none!important;box-shadow:none!important;-webkit-tap-highlight-color:transparent!important}
.sentualThemePreset.active{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--text) 40%,transparent)!important}

/* Reaction/settings grids stay comfortably reachable and wrap custom additions. */
.sentualAllReactionGrid{grid-template-columns:repeat(7,minmax(0,1fr))!important}.sentualCustomSelected{padding-bottom:4px!important}@media(max-width:460px){.sentualAllReactionGrid{grid-template-columns:repeat(5,minmax(0,1fr))!important}}

/* High-specificity palette cleanup for media/composer rules that predate palettes. */
:root[data-palette="mono"] #messages .sentualVoiceCard,:root[data-palette="rose"] #messages .sentualVoiceCard,:root[data-palette="green"] #messages .sentualVoiceCard,
:root[data-palette="mono"] #messages .sentualVoiceBubble.me .sentualVoiceCard,:root[data-palette="rose"] #messages .sentualVoiceBubble.me .sentualVoiceCard,:root[data-palette="green"] #messages .sentualVoiceBubble.me .sentualVoiceCard{background:var(--bubble)!important;border-color:var(--sentual-accent-border)!important;color:var(--text)!important;box-shadow:0 7px 20px rgba(0,0,0,.09)!important}
:root[data-palette="mono"] #messages .sentualV60AudioCard,:root[data-palette="rose"] #messages .sentualV60AudioCard,:root[data-palette="green"] #messages .sentualV60AudioCard,
:root[data-palette="mono"] #messages .sentualV57AudioCard,:root[data-palette="rose"] #messages .sentualV57AudioCard,:root[data-palette="green"] #messages .sentualV57AudioCard{background:var(--bubble)!important;border-color:var(--sentual-accent-border)!important;color:var(--text)!important;box-shadow:0 7px 20px rgba(0,0,0,.09)!important}
:root[data-palette="mono"] #messages .bubble.me .sentualV60AudioCard,:root[data-palette="rose"] #messages .bubble.me .sentualV60AudioCard,:root[data-palette="green"] #messages .bubble.me .sentualV60AudioCard{background:color-mix(in srgb,var(--mine) 72%,var(--bubble) 28%)!important}
:root[data-palette="mono"] #messages .sentualVoicePlay,:root[data-palette="rose"] #messages .sentualVoicePlay,:root[data-palette="green"] #messages .sentualVoicePlay,
:root[data-palette="mono"] #messages .sentualVoiceBubble.me .sentualVoicePlay,:root[data-palette="rose"] #messages .sentualVoiceBubble.me .sentualVoicePlay,:root[data-palette="green"] #messages .sentualVoiceBubble.me .sentualVoicePlay{background:var(--sentual-control-strong)!important;color:var(--accent)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible,:root[data-palette="rose"] .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible,:root[data-palette="green"] .sentualV57TopPlayer.sentualV60TopPlayer.sentualPlayerVisible{background:var(--side)!important;border-color:var(--line)!important;color:var(--text)!important;box-shadow:none!important}
:root[data-palette="mono"] .sentualV60TopArt,:root[data-palette="rose"] .sentualV60TopArt,:root[data-palette="green"] .sentualV60TopArt{background:var(--sentual-control)!important;color:var(--accent)!important}
:root[data-palette="mono"] .sentualV57TopTitle,:root[data-palette="rose"] .sentualV57TopTitle,:root[data-palette="green"] .sentualV57TopTitle{color:var(--text)!important}
:root[data-palette="mono"] .filePreview .fileIcon,:root[data-palette="rose"] .filePreview .fileIcon,:root[data-palette="green"] .filePreview .fileIcon,
:root[data-palette="mono"] .attachmentCard .fileIcon,:root[data-palette="rose"] .attachmentCard .fileIcon,:root[data-palette="green"] .attachmentCard .fileIcon{background:var(--sentual-accent-soft)!important;color:var(--accent)!important;border-color:var(--sentual-accent-border)!important}
:root[data-palette="mono"] .profileModal .shareCode>button,:root[data-palette="rose"] .profileModal .shareCode>button,:root[data-palette="green"] .profileModal .shareCode>button{background:var(--sentual-control-strong)!important;color:var(--text)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .profileModal .shareCode>button:hover,:root[data-palette="rose"] .profileModal .shareCode>button:hover,:root[data-palette="green"] .profileModal .shareCode>button:hover{background:var(--sentual-control-strong)!important;color:var(--text)!important}

/* Palette pass for secondary screens/controls; media canvases themselves intentionally stay black. */
:root[data-palette="mono"] :where(.filePreviewBox,.attachmentMeta,.captionInput,.previewCancel,.sessionRow,.emailSettingsBox,.walletBox,.confirmBox,.statsBox,.notificationBox,.replyComposerBar,.pinnedBar,.scrollBottomBtn),
:root[data-palette="rose"] :where(.filePreviewBox,.attachmentMeta,.captionInput,.previewCancel,.sessionRow,.emailSettingsBox,.walletBox,.confirmBox,.statsBox,.notificationBox,.replyComposerBar,.pinnedBar,.scrollBottomBtn),
:root[data-palette="green"] :where(.filePreviewBox,.attachmentMeta,.captionInput,.previewCancel,.sessionRow,.emailSettingsBox,.walletBox,.confirmBox,.statsBox,.notificationBox,.replyComposerBar,.pinnedBar,.scrollBottomBtn){background:var(--side)!important;color:var(--text)!important;border-color:var(--line)!important}
:root[data-palette="mono"] :where(.attachmentPreview,.emailCodeDestination,.walletList,.sentualPremiumOnly),
:root[data-palette="rose"] :where(.attachmentPreview,.emailCodeDestination,.walletList,.sentualPremiumOnly),
:root[data-palette="green"] :where(.attachmentPreview,.emailCodeDestination,.walletList,.sentualPremiumOnly){background:var(--sentual-control)!important;color:var(--text)!important;border-color:var(--line)!important}
:root[data-palette="mono"] :where(.previewSend,.confirmYes),:root[data-palette="rose"] :where(.previewSend,.confirmYes),:root[data-palette="green"] :where(.previewSend,.confirmYes){background:var(--accent)!important;color:var(--side)!important;border-color:var(--sentual-accent-border)!important}
:root[data-palette="mono"] :where(.filePreviewBox .previewClose,.sessionsBack,.sessionLogout),:root[data-palette="rose"] :where(.filePreviewBox .previewClose,.sessionsBack,.sessionLogout),:root[data-palette="green"] :where(.filePreviewBox .previewClose,.sessionsBack,.sessionLogout){background:var(--sentual-control)!important;color:var(--muted)!important;border-color:var(--line)!important}
:root[data-palette="mono"] .replyQuote,:root[data-palette="rose"] .replyQuote,:root[data-palette="green"] .replyQuote{background:var(--sentual-control)!important;border-color:var(--sentual-accent-border)!important;color:var(--text)!important}
:root[data-palette="mono"] .sentualReactionChoice,:root[data-palette="rose"] .sentualReactionChoice,:root[data-palette="green"] .sentualReactionChoice,
:root[data-palette="mono"] .sentualReactionChip,:root[data-palette="rose"] .sentualReactionChip,:root[data-palette="green"] .sentualReactionChip{background:var(--sentual-control)!important;border-color:var(--line)!important;color:var(--text)!important}
:root[data-palette="mono"] .sentualReactionChip.mine,:root[data-palette="rose"] .sentualReactionChip.mine,:root[data-palette="green"] .sentualReactionChip.mine{background:var(--sentual-accent-soft)!important;border-color:var(--sentual-accent-border)!important}
:root[data-palette="mono"] .sentualDateSeparator,:root[data-palette="rose"] .sentualDateSeparator,:root[data-palette="green"] .sentualDateSeparator{background:var(--sentual-control-strong)!important;color:var(--text)!important}

/* ===== SENTUAL V4.2.20 ===== */
/* Password gate: the browser document itself must never pan when iOS focuses the unlock field. */
@media(max-width:820px){
  html.sentual-v4220-password-focus{overflow:hidden!important;overscroll-behavior:none!important}html.sentual-v4220-password-focus body{position:fixed!important;inset:0!important;width:100%!important;height:100%!important;overflow:hidden!important;overscroll-behavior:none!important}
  html.sentual-v4220-password-focus #chat.mobileOpen{position:fixed!important;left:0!important;right:0!important;top:0!important;bottom:auto!important;height:var(--sentual-vv-height,100dvh)!important;transform:none!important}
  html.sentual-v4220-password-focus #messages{position:relative!important;scroll-behavior:auto!important;overflow:hidden!important}
  html.sentual-v4220-password-focus .conversationPasswordGate{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;min-height:0!important;padding:8px 14px!important;place-items:center!important;overflow:hidden!important}
  html.sentual-v4220-password-focus .conversationPasswordGateCard{max-height:calc(100% - 16px)!important;overflow:auto!important;margin:0!important}
}

/* Photos use the same cancellable download affordance as deferred videos. */
.inlineMedia-image.sentualPhotoDeferred{position:relative!important;overflow:hidden!important;background:var(--bubble)!important}
.inlineMedia-image.sentualPhotoDeferred::before{content:"";position:absolute;inset:-10px;background-image:var(--sentual-photo-preview);background-size:cover;background-position:center;filter:blur(13px) saturate(.82);transform:scale(1.07);opacity:.88;z-index:0}
.inlineMedia-image.sentualPhotoDeferred>.sentualVideoDownloadProgress,.inlineMedia-image.sentualPhotoDeferred>.sentualPhotoDownloadButton{z-index:4!important}
.sentualPhotoDownloadButton{position:absolute!important;left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;transform:translate(-50%,-50%)!important}
.sentualPhotoDownloadButton.loading{animation:sentualV4213DownloadBreathe 1.15s ease-in-out infinite!important}

/* Profile media preference. V4.3.28 uses the same switch component as Notifications. */
.sentualAutoMediaSetting{margin-top:12px!important;}

/* Sessions as a modal sheet, visually aligned with Conversation settings. */
.sentualSessionsModal{overflow:auto!important;align-items:flex-start!important;padding-top:max(14px,env(safe-area-inset-top))!important;padding-bottom:max(32px,env(safe-area-inset-bottom))!important;-webkit-overflow-scrolling:touch!important}
.sentualSessionsBox{width:min(430px,100%)!important;margin:auto!important;padding:22px!important;border-radius:22px!important;max-height:none!important}
.sentualSessionsHead{display:flex;align-items:center;gap:12px;padding-right:42px;margin-bottom:15px;text-align:left}.sentualSessionsHead h2{margin:0!important;font-size:18px}.sentualSessionsHead p{margin:3px 0 0!important;font-size:9px;color:var(--muted)}
.sentualSessionsIcon{width:42px;height:42px;flex:none;border-radius:13px;background:color-mix(in srgb,var(--accent) 10%,var(--side));color:var(--accent);display:grid;place-items:center}.sentualSessionsIcon svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sentualSessionsBox>.modalClose{top:12px!important;right:12px!important}.sentualSessionsList{max-height:min(58dvh,520px)!important;overflow:auto!important;padding-right:2px}.sentualSessionsLoading{padding:24px;text-align:center;color:var(--muted);font-size:10px}

/* The music bar is an in-flow strip; never a transparent fixed/absolute layer over contacts. */
@media(max-width:820px){
  #messenger.sentualGlobalAudioActive{padding-top:0!important}
  #messenger.sentualGlobalAudioActive #chat.mobileOpen{top:var(--sentual-vv-top,0px)!important}
  #sentualGlobalAudioPlayer.sentualV60TopPlayer{position:relative!important;inset:auto!important;left:auto!important;right:auto!important;top:auto!important;bottom:auto!important;z-index:8!important}
  .sidebar>#sentualGlobalAudioPlayer.sentualV60TopPlayer{position:relative!important;inset:auto!important;width:calc(100% - 22px)!important;max-width:none!important;margin:0 11px 10px!important;border:1px solid var(--line)!important;border-radius:11px!important;overflow:hidden!important;flex:0 0 40px!important;pointer-events:auto!important}
  .sidebar>#sentualGlobalAudioPlayer.sentualV60TopPlayer.hidden{display:none!important;pointer-events:none!important}
}

/* Soft accent glow below the composer, fading into the keyboard area. */
@media(max-width:820px){
  #chat.mobileOpen .composer::after{content:"";position:absolute;z-index:0;left:0;right:0;top:100%;height:74px;pointer-events:none;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 15%,transparent) 0%,color-mix(in srgb,var(--accent) 7%,transparent) 32%,transparent 100%)}
}


/* ===== SENTUAL V4.2.21: deterministic music loading + non-blocking in-flow bar ===== */
.sentualV57AudioCard.buffering::after,.sentualV57AudioCard.musicLoading::after{display:none!important;content:none!important;animation:none!important}
#messages .sentualV60AudioCard.musicLoading .sentualV57AudioPlay{position:absolute!important;inset:7px!important;display:grid!important;place-items:center!important;overflow:visible!important;color:var(--accent)!important}
#messages .sentualV60AudioCard.musicLoading .sentualV57AudioPlay>svg,#messages .sentualV60AudioCard.musicLoading .sentualV57AudioPlay>span{opacity:0!important}
#messages .sentualV60AudioCard.musicLoading .sentualV57AudioPlay::after{content:""!important;display:block!important;position:absolute!important;left:50%!important;top:50%!important;width:19px!important;height:19px!important;margin:-10.5px 0 0 -10.5px!important;border:2px solid color-mix(in srgb,var(--accent) 28%,transparent)!important;border-top-color:var(--accent)!important;border-radius:50%!important;transform:none!important;animation:sentualVoiceLoadingSpin .72s linear infinite!important}
@media(max-width:820px){
  #sentualGlobalAudioPlayer.sentualV60TopPlayer{position:relative!important;inset:auto!important;left:auto!important;right:auto!important;top:auto!important;bottom:auto!important;z-index:8!important;transform:none!important;clip-path:none!important;transition:none!important;will-change:auto!important;pointer-events:auto!important}
  #sentualGlobalAudioPlayer.sentualV60TopPlayer.hidden,#sentualGlobalAudioPlayer.sentualV60TopPlayer[aria-hidden="true"]{display:none!important;pointer-events:none!important}
  #sentualGlobalAudioPlayer.sentualV60TopPlayer.sentualPlayerVisible{display:grid!important;opacity:1!important;visibility:visible!important;clip-path:none!important}
  .sidebar>#sentualGlobalAudioPlayer.sentualV60TopPlayer{position:relative!important;inset:auto!important;z-index:8!important;pointer-events:auto!important}
  #messenger:not(.sentualChatCover)>.chat:not(.mobileOpen){pointer-events:none!important}
}

/* ===== SENTUAL V4.2.22: deterministic music spinner + isolated contacts controller ===== */
#messages .sentualV60AudioCard.musicLoading .sentualV57AudioPlay::after,
#messages .sentualV57AudioCard.musicLoading .sentualV57AudioPlay::after{content:none!important;display:none!important;animation:none!important}
#messages .sentualV57AudioCard.musicLoading .sentualV57AudioPlay{color:var(--accent)!important}
.sentualV4222MusicSpinner{display:block!important;width:22px!important;height:22px!important;box-sizing:border-box!important;border:2.5px solid color-mix(in srgb,var(--accent) 24%,transparent)!important;border-top-color:var(--accent)!important;border-right-color:var(--accent)!important;border-radius:50%!important;animation:sentualV4222MusicSpin .68s linear infinite!important;transform-origin:50% 50%!important;pointer-events:none!important}
@keyframes sentualV4222MusicSpin{from{transform:rotate(0deg)}to{transform:rotate(360deg)}}

@media(max-width:820px){
  /* The real audio element remains in #chat forever. Only its compact visual bar is hidden on Contacts. */
  #chat>#sentualGlobalAudioPlayer.sentualV4222ChatBarHidden{display:none!important;pointer-events:none!important}
  #chat>#sentualGlobalAudioPlayer:not(.sentualV4222ChatBarHidden){display:grid!important;position:relative!important;inset:auto!important;z-index:8!important;pointer-events:auto!important}
  #sentualV4222HomeAudioPlayer{position:relative!important;z-index:4!important;box-sizing:border-box!important;width:calc(100% - 22px)!important;height:46px!important;min-height:46px!important;margin:0 11px 10px!important;padding:0 4px!important;border:1px solid var(--line)!important;border-radius:11px!important;background:var(--side)!important;color:var(--text)!important;display:grid!important;grid-template-columns:40px minmax(0,1fr) 40px!important;align-items:center!important;overflow:hidden!important;box-shadow:none!important;pointer-events:auto!important;isolation:isolate!important}
  #sentualV4222HomeAudioPlayer.hidden,#sentualV4222HomeAudioPlayer[aria-hidden="true"]{display:none!important;pointer-events:none!important}
  #sentualV4222HomeAudioPlayer button{position:relative!important;z-index:2!important;height:38px!important;min-width:0!important;margin:0!important;padding:0!important;border:0!important;border-radius:9px!important;background:transparent!important;color:var(--text)!important;box-shadow:none!important;outline:0!important;transform:none!important;-webkit-tap-highlight-color:transparent!important}
  #sentualV4222HomeAudioPlayer .sentualV4222HomePlay{font-size:20px!important;color:var(--accent)!important}
  #sentualV4222HomeAudioPlayer .sentualV4222HomeMeta{display:block!important;text-align:center!important;overflow:hidden!important}
  #sentualV4222HomeAudioPlayer .sentualV4222HomeMeta b{display:block!important;max-width:100%!important;overflow:hidden!important;text-overflow:ellipsis!important;white-space:nowrap!important;font-size:13px!important;line-height:1.15!important;font-weight:550!important;color:var(--text)!important}
  #sentualV4222HomeAudioPlayer .sentualV4222HomeClose{font-size:30px!important;font-weight:300!important;line-height:1!important}
  #sentualV4222HomeAudioPlayer .sentualV4222HomeProgress{position:absolute!important;z-index:3!important;left:0!important;right:0!important;bottom:0!important;height:2px!important;background:linear-gradient(90deg,var(--accent) 0 var(--p,0%),color-mix(in srgb,var(--line) 75%,transparent) var(--p,0%) 100%)!important;pointer-events:none!important}
  /* Never allow the closed chat/player to become a transparent hit target over Contacts. */
  #messenger>.chat:not(.mobileOpen){pointer-events:none!important}
  #messenger>.sidebar{pointer-events:auto!important}
}

/* ===== SENTUAL V4.2.23: final music/home interaction fixes ===== */
/* V4.2.20 had a broad >span opacity rule for the old loading implementation. The real spinner is a span too. */
#messages .sentualV57AudioCard.musicLoading .sentualV57AudioPlay>.sentualV4222MusicSpinner,
#messages .sentualV60AudioCard.musicLoading .sentualV57AudioPlay>.sentualV4222MusicSpinner{opacity:1!important;visibility:visible!important;display:block!important;animation:sentualV4222MusicSpin .68s linear infinite!important}
/* Never show the obsolete moving loader below an audio bubble. */
#messages .sentualV57AudioCard.musicLoading::after,#messages .sentualV60AudioCard.musicLoading::after,
#messages .sentualV57AudioCard.musicDownloading::after,#messages .sentualV60AudioCard.musicDownloading::after{content:none!important;display:none!important;animation:none!important}
@media(max-width:820px){
  /* Contacts must remain the only hit-test surface when chat is closed. */
  #messenger>.chat:not(.mobileOpen){pointer-events:none!important}
  #messenger>.sidebar{pointer-events:auto!important}
  #sentualV4222HomeAudioPlayer:not(.hidden){display:grid!important;visibility:visible!important;opacity:1!important;pointer-events:auto!important}
}


/* ===== SENTUAL V4.2.24: music removed; voice messages remain ===== */
#sentualGlobalAudioPlayer,
#sentualV4222HomeAudioPlayer,
.sentualV4211FullPlayerOverlay,
.sentualV4211PlaylistOverlay,
.sentualV4214FullPlayerOverlay,
.sentualV4214PlaylistOverlay{
  display:none!important;visibility:hidden!important;pointer-events:none!important;
  position:static!important;width:0!important;height:0!important;min-height:0!important;max-height:0!important;
  margin:0!important;padding:0!important;border:0!important;overflow:hidden!important;opacity:0!important;
}
#messages .attachment-audio:not(.sentualVoiceBubble){display:none!important;pointer-events:none!important}
#messenger.sentualGlobalAudioActive{padding-top:0!important}
#chat.sentualAudioDocked{padding-top:0!important}
.chat.sentualAudioDocked .pinnedBar{top:64px!important}
@media(max-width:820px){.chat.sentualAudioDocked .pinnedBar{top:calc(64px + env(safe-area-inset-top))!important}}

/* ===== SENTUAL V4.2.25: JS owns chat anchoring; disable browser's second compensation layer ===== */
#messages{overflow-anchor:none!important}
#messages>.bubble,#messages .inlineMedia,#messages .sentualVoiceCard{overflow-anchor:none!important}

/* ===== SENTUAL V4.2.26: iOS keyboard gap precision ===== */
@media(max-width:820px){
  /* Keep the composer height unchanged, but move its controls 4px closer to the keyboard. */
  html.sentual-ios.sentual-keyboard-open #chat.mobileOpen .composer{
    padding-top:13px!important;
    padding-bottom:calc(5px + var(--sentual-v62-safe-bottom))!important;
  }

  /* The area between the composer and iOS keyboard must be a soft accent shadow, not a solid panel. */
  html.sentual-ios.sentual-keyboard-open #chat.mobileOpen::after{
    background:linear-gradient(180deg,
      color-mix(in srgb,var(--accent) 11%,var(--chat)) 0%,
      color-mix(in srgb,var(--accent) 7%,transparent) 30px,
      color-mix(in srgb,var(--accent) 3%,transparent) 56px,
      transparent 88px)!important;
  }

  /* Blend the bottom edge of the composer into the keyboard gap with the same soft fade. */
  html.sentual-ios.sentual-keyboard-open #chat.mobileOpen .composer::after{
    height:70px!important;
    background:linear-gradient(180deg,
      color-mix(in srgb,var(--accent) 12%,transparent) 0%,
      color-mix(in srgb,var(--accent) 6%,transparent) 34%,
      transparent 100%)!important;
  }
}

/* ===== SENTUAL V4.2.27: actual iOS composer shift + visible keyboard fade ===== */
@media(max-width:820px){
  /* Do not depend on the UA helper class: keyboard-open is the authoritative state. */
  html.sentual-keyboard-open #chat.mobileOpen .composer{
    position:relative!important;
    isolation:isolate!important;
    overflow:visible!important;
    /* The old solid composer panel was what kept the whole gap flat/blue. */
    background:linear-gradient(180deg,
      color-mix(in srgb,var(--accent) 8%,var(--chat)) 0%,
      color-mix(in srgb,var(--accent) 6%,var(--chat)) 34%,
      color-mix(in srgb,var(--accent) 3.5%,transparent) 68%,
      transparent 100%)!important;
  }

  /* Move the visible composer controls down by exactly 4px without changing total composer height. */
  html.sentual-keyboard-open #chat.mobileOpen .composer>.attach,
  html.sentual-keyboard-open #chat.mobileOpen .composer>#message,
  html.sentual-keyboard-open #chat.mobileOpen .composer>#composerSubmit,
  html.sentual-keyboard-open #chat.mobileOpen .composer>#blockedComposer{
    position:relative!important;
    top:4px!important;
  }

  /* Fade the remaining visual gap into true transparency instead of extending a solid panel. */
  html.sentual-keyboard-open #chat.mobileOpen .composer::after{
    content:""!important;
    position:absolute!important;
    z-index:-1!important;
    left:0!important;
    right:0!important;
    top:100%!important;
    height:76px!important;
    pointer-events:none!important;
    background:linear-gradient(180deg,
      color-mix(in srgb,var(--accent) 7%,transparent) 0%,
      color-mix(in srgb,var(--accent) 4%,transparent) 32%,
      color-mix(in srgb,var(--accent) 1.5%,transparent) 64%,
      transparent 100%)!important;
  }

  /* The chat extension below visualViewport must use the same fade, never var(--chat). */
  html.sentual-keyboard-open #chat.mobileOpen::after{
    background:linear-gradient(180deg,
      color-mix(in srgb,var(--accent) 6%,transparent) 0%,
      color-mix(in srgb,var(--accent) 2.5%,transparent) 42%,
      transparent 100%)!important;
  }
}


/* ===== SENTUAL V4.2.28: upload badge, non-selectable chat, stable keyboard header, PIN keypad ===== */
/* Chat content is copied only through the message context-menu Copy command. */
#chat,#chat *{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important}
#chat #message{-webkit-user-select:text!important;user-select:text!important;-webkit-touch-callout:default!important}

/* Keep the photo-upload label optically centered inside its own pill. */
.sentualOptimisticPhoto .sentualPhotoSendStatus{
  min-height:28px!important;height:28px!important;box-sizing:border-box!important;
  display:inline-flex!important;align-items:center!important;justify-content:center!important;
  padding:0 10px!important;line-height:1!important;text-align:center!important;
}
.sentualOptimisticPhoto .sentualPhotoSendStatus>span{display:block!important;float:none!important;margin:0!important;padding:0!important;line-height:1!important;text-align:center!important}

@media(max-width:820px){
  /* visualViewport.offsetTop changes during iOS keyboard animation; never let it drag the peer header. */
  html.sentual-keyboard-open #chat.mobileOpen{top:0!important;transform:none!important}
  html.sentual-keyboard-open #chat.mobileOpen .chatHead{transform:none!important;translate:none!important}
}

/* Six-digit PIN UI: no native text field, therefore no native keyboard viewport jump. */
.sentualPinDots{display:flex;align-items:center;justify-content:center;gap:14px;margin:12px auto 20px}
.sentualPinDots i{display:block;width:12px;height:12px;border-radius:50%;border:1.8px solid color-mix(in srgb,var(--text) 68%,transparent);background:transparent;transition:transform .12s ease,background .12s ease,border-color .12s ease}
.sentualPinDots i.filled{background:var(--text);border-color:var(--text);transform:scale(1.04)}
.sentualPinKeypad{width:min(330px,88vw);margin:0 auto;display:grid;grid-template-columns:repeat(3,1fr);gap:14px 18px;justify-items:center;touch-action:manipulation}
.sentualPinKey{width:82px;height:82px;border:1px solid color-mix(in srgb,var(--text) 11%,transparent)!important;border-radius:50%!important;background:color-mix(in srgb,var(--text) 7%,transparent)!important;color:var(--text)!important;display:grid!important;place-items:center!important;padding:0!important;margin:0!important;box-shadow:none!important;font-size:34px!important;font-weight:400!important;line-height:1!important;-webkit-tap-highlight-color:transparent!important;transform:none!important}
.sentualPinKey:active{background:color-mix(in srgb,var(--text) 13%,transparent)!important;transform:scale(.96)!important}
.sentualPinKey.sentualPinDelete{background:transparent!important;border-color:transparent!important;font-size:0!important}
.sentualPinKey.sentualPinDelete svg{width:31px;height:31px;fill:none;stroke:var(--text);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sentualPinKey.sentualPinSpacer{visibility:hidden;pointer-events:none}
.sentualPinHint{text-align:center;color:var(--muted);font-size:11px;line-height:1.5;min-height:18px;margin:0 0 8px}
.sentualPinHint.error{color:#d65b65!important}
.sentualPinSetup .sentualPinKeypad{width:min(300px,100%);gap:10px 14px}
.sentualPinSetup .sentualPinKey{width:68px;height:68px;font-size:28px!important}
.sentualPinSetup .sentualPinDots{margin:10px auto 14px}
.sentualPinSetup .passwordPrimary{width:100%;margin-top:17px}

/* Locked-chat gate is a full surface, not a bordered card. */
#messages.sentualPinGateActive{padding:0!important;overflow:hidden!important;background:var(--chat)!important}
.conversationPasswordGate.sentualPinGate{width:100%!important;height:100%!important;min-height:100%!important;padding:20px 16px 18px!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;background:var(--chat)!important;border:0!important;border-radius:0!important;box-shadow:none!important;box-sizing:border-box!important}
.conversationPasswordGate.sentualPinGate .sentualPinGateTitle{text-align:center;margin:0 0 4px;font-size:20px;font-weight:700;color:var(--text)}
.conversationPasswordGate.sentualPinGate .sentualPinGateSub{text-align:center;margin:0 0 4px;font-size:11px;color:var(--muted)}
.conversationPasswordGate.sentualPinGate .conversationPasswordGateError{min-height:18px;margin:6px 0 2px;text-align:center}
.conversationPasswordGate.sentualPinGate .passwordEmailRecovery{margin-top:14px}
@media(max-width:380px),(max-height:690px){
  .sentualPinKeypad{gap:9px 15px}.sentualPinKey{width:68px;height:68px;font-size:29px!important}.sentualPinDots{margin:8px auto 12px}
}

@media(max-width:820px){
  .conversationPasswordGate.sentualPinGate{
    position:fixed!important;inset:0!important;z-index:60!important;
    min-height:100dvh!important;height:100dvh!important;
    padding:calc(28px + env(safe-area-inset-top)) 18px calc(22px + env(safe-area-inset-bottom))!important;
  }
  .sentualPinGateBack{position:absolute!important;left:18px!important;top:calc(14px + env(safe-area-inset-top))!important;width:44px!important;height:44px!important;border:1px solid color-mix(in srgb,var(--text) 12%,transparent)!important;border-radius:14px!important;background:color-mix(in srgb,var(--text) 6%,transparent)!important;color:var(--text)!important;font-size:32px!important;line-height:1!important;display:grid!important;place-items:center!important;padding:0!important;box-shadow:none!important}
}


/* ===== SENTUAL V4.2.29: PIN recovery placement, fixed OTP sheet, correct iOS composer position ===== */
/* Exactly 15px below the bottom-row zero key and centered under the keypad. */
.conversationPasswordGate.sentualPinGate .passwordEmailRecovery{
  align-self:center!important;display:block!important;width:max-content!important;max-width:90%!important;
  margin:15px auto 0!important;padding-left:0!important;padding-right:0!important;text-align:center!important;
}

/* Email recovery is a fixed vertical sheet; horizontal finger movement must never pan/drag it. */
#chatPasswordRecoveryModal{
  position:fixed!important;inset:0!important;width:100vw!important;max-width:100vw!important;
  overflow-x:hidden!important;overscroll-behavior-x:none!important;touch-action:pan-y!important;
}
#chatPasswordRecoveryModal .recoveryCodeBox{
  width:min(390px,calc(100vw - 32px))!important;max-width:calc(100vw - 32px)!important;
  margin:auto!important;left:auto!important;right:auto!important;transform:none!important;
  overscroll-behavior-x:none!important;touch-action:pan-y!important;
}

@media(max-width:820px){
  /* Keep the peer header pinned at y=0, but make the chat bottom follow the REAL visual-viewport
     bottom. Previous V4.2.28 forced top=0 while keeping only visualViewport.height, which placed
     the composer hundreds of pixels above the iOS keyboard. top + height is the keyboard edge. */
  html.sentual-keyboard-open #chat.mobileOpen{
    top:0!important;bottom:auto!important;
    height:calc(var(--sentual-vv-height,100dvh) + var(--sentual-vv-top,0px))!important;
    min-height:0!important;max-height:none!important;transform:none!important;
  }
}

/* ===== SENTUAL V4.2.30: keyboard-close composer geometry + minimal mobile auth ===== */
@media(max-width:820px){
  /* While iOS keyboard is visible, safe-area bottom belongs to the keyboard itself. Do not add it
     again inside the composer. The visible controls sit only 4px above the keyboard/accessory area. */
  html.sentual-keyboard-open #chat.mobileOpen .composer{
    padding:6px 12px 4px!important;
    min-height:0!important;
  }
  html.sentual-keyboard-open #chat.mobileOpen .composer>.attach,
  html.sentual-keyboard-open #chat.mobileOpen .composer>#message,
  html.sentual-keyboard-open #chat.mobileOpen .composer>#composerSubmit,
  html.sentual-keyboard-open #chat.mobileOpen .composer>#blockedComposer{
    top:0!important;transform:none!important;
  }
  /* Keep the accent fade visual only; it must never create layout space. */
  html.sentual-keyboard-open #chat.mobileOpen .composer::after{
    top:100%!important;height:32px!important;
    background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 8%,transparent) 0%,color-mix(in srgb,var(--accent) 3%,transparent) 45%,transparent 100%)!important;
  }

  /* Mobile auth is a single quiet surface: logo first, product name second, then the active flow. */
  #auth.auth{
    display:block!important;min-height:100dvh!important;height:100dvh!important;overflow:auto!important;
    background:var(--chat)!important;color:var(--text)!important;-webkit-overflow-scrolling:touch;
  }
  #auth .authShell{
    width:100%!important;min-height:100dvh!important;padding:calc(36px + env(safe-area-inset-top)) 22px calc(28px + env(safe-area-inset-bottom))!important;
    display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:flex-start!important;gap:0!important;box-sizing:border-box!important;
  }
  #auth .authIntro{display:none!important}
  #auth .authBrand{
    position:static!important;inset:auto!important;transform:none!important;display:flex!important;flex-direction:column!important;
    align-items:center!important;justify-content:center!important;gap:10px!important;margin:0 auto 34px!important;color:var(--text)!important;
  }
  #auth .authBrand span{
    width:76px!important;height:76px!important;border-radius:22px!important;padding:0!important;background:transparent!important;box-shadow:0 12px 34px rgba(20,46,65,.12)!important;overflow:hidden!important;
  }
  #auth .authBrand span .sentualBrandImg{width:100%!important;height:100%!important;border-radius:22px!important}
  #auth .authBrand b{font-size:22px!important;line-height:1!important;letter-spacing:.7px!important;font-weight:760!important}
  #auth .authBox{width:min(430px,100%)!important;margin:0 auto!important}
  #auth #loginBox,#auth #registerBox{width:100%!important}
  #auth #loginBox>h2,#auth #loginBox>.hint{display:none!important}
  #auth #recoveryPanel>label{font-size:0!important;margin:0!important;color:transparent!important}
  #auth #recoveryInput{
    display:block!important;width:100%!important;min-height:112px!important;max-height:150px!important;resize:none!important;
    padding:15px 16px!important;margin:0!important;border:1px solid var(--line)!important;border-radius:18px!important;
    background:var(--side)!important;color:var(--text)!important;box-shadow:0 8px 28px rgba(38,70,92,.07)!important;
    font-size:15px!important;line-height:1.55!important;caret-color:var(--accent)!important;
  }
  #auth #recoveryInput::placeholder{color:color-mix(in srgb,var(--muted) 78%,transparent)!important}
  #auth .primary,#auth .secondary{
    min-height:50px!important;border-radius:16px!important;margin-top:12px!important;padding:0 16px!important;
    display:flex!important;align-items:center!important;justify-content:center!important;gap:9px!important;box-shadow:none!important;
  }
  #auth #recoveryPanel>.primary{background:var(--accent)!important;color:#fff!important}
  #auth .sentualAuthButtonText{float:none!important;display:inline-block!important;margin:0!important;font-size:13px!important;line-height:1!important}
  #auth .sentualAuthSpinner{display:none!important;flex:none!important;width:20px!important;height:20px!important;color:currentColor!important}
  #auth .sentualAuthBusy .sentualAuthSpinner{display:inline-block!important}
  #auth .sentualAuthBusy{opacity:.88!important;cursor:wait!important}
  #auth .emailLoginLink{
    width:max-content!important;max-width:100%!important;margin:8px auto 0!important;padding:8px 6px!important;
    color:var(--accent)!important;font-size:10.5px!important;line-height:1.2!important;text-align:center!important;
  }
  #auth #loginBox>button.textBtn:last-child{margin:14px auto 0!important;color:var(--muted)!important;font-size:10.5px!important}

  /* Email sign-in keeps email entry simple, then switches to the same six-digit private keypad language. */
  #auth #emailPanel{padding-top:4px!important}
  #auth #emailPanel>label:first-child{font-size:10px!important;color:var(--muted)!important;margin:0!important}
  #auth #loginEmail{
    margin-top:7px!important;padding:0 14px!important;height:50px!important;border:1px solid var(--line)!important;border-radius:16px!important;
    background:var(--side)!important;color:var(--text)!important;font-size:15px!important;box-shadow:0 8px 24px rgba(38,70,92,.06)!important;
  }
  #auth #sentualEmailCodeButton{background:color-mix(in srgb,var(--accent) 10%,var(--side))!important;color:var(--accent)!important;border:1px solid color-mix(in srgb,var(--accent) 22%,var(--line))!important}
  #auth .sentualV430LegacyOtp,#auth .sentualV430LegacyEmailSubmit{display:none!important}
  #auth .sentualMobileEmailOtp{padding:14px 0 0!important;text-align:center!important}
  #auth .sentualMobileEmailStatus{margin:0 auto 7px!important;color:var(--muted)!important;font-size:10px!important;line-height:1.45!important}
  #auth .sentualMobileEmailOtp.error .sentualMobileEmailStatus{color:#d65b65!important}
  #auth .sentualMobileEmailOtp .sentualPinDots{margin:8px auto 14px!important;gap:11px!important}
  #auth .sentualMobileEmailOtp .sentualPinDots i{width:10px!important;height:10px!important}
  #auth .sentualMobileEmailOtp .sentualPinKeypad{width:min(284px,88vw)!important;gap:10px 14px!important}
  #auth .sentualMobileEmailOtp .sentualPinKey{width:64px!important;height:64px!important;font-size:27px!important;background:color-mix(in srgb,var(--text) 6%,transparent)!important}
  #auth .sentualMobileEmailOtp .sentualPinKey.sentualPinDelete svg{width:27px!important;height:27px!important}
  #auth .sentualMobileEmailSubmit{background:var(--accent)!important;color:#fff!important;margin-top:15px!important}
  #auth #emailPanel>.textBtn{width:max-content!important;margin:10px auto 0!important;color:var(--accent)!important;font-size:10.5px!important}

  /* Registration uses the same minimal card language without changing its fields or flow. */
  #auth #registerBox h2{font-size:22px!important;letter-spacing:-.4px!important;text-align:center!important;margin:0 0 5px!important;color:var(--text)!important}
  #auth #registerBox>.hint{text-align:center!important;margin:0 0 20px!important;color:var(--muted)!important}
  #auth #registerBox label{font-size:10px!important;color:var(--muted)!important;margin:12px 0!important}
  #auth #registerBox input,#auth #registerBox .langPicker>button{
    min-height:48px!important;margin-top:6px!important;padding:0 13px!important;border:1px solid var(--line)!important;border-radius:15px!important;
    background:var(--side)!important;color:var(--text)!important;box-shadow:none!important;
  }
  #auth #registerBox .langPicker>button{align-items:center!important}
  #auth #registerBox .addEmail{margin-top:14px!important;padding:9px 2px!important;color:var(--muted)!important}
  #auth #registerBox>.primary{background:var(--accent)!important;color:#fff!important}
  #auth #registerBox>.textBtn{color:var(--accent)!important;font-size:10.5px!important}
}
/* V4.2.30 auth spinner must never appear idle on wider layouts if the viewport changes after boot. */
#auth .sentualAuthSpinner{display:none}
#auth .sentualAuthBusy .sentualAuthSpinner{display:inline-block}


/* ===== SENTUAL V4.2.31: Apple-like centered auth + segmented native OTP ===== */
@media(max-width:820px){
  :root[data-theme="light"] #auth.auth{background:#fff!important;color:#000!important}
  :root:not([data-theme="light"]) #auth.auth{background:#000!important;color:#fff!important}
  #auth.auth{overflow-y:auto!important;overflow-x:hidden!important}
  #auth .authShell{
    width:100%!important;min-height:100dvh!important;padding:calc(env(safe-area-inset-top) + 28px) 24px calc(env(safe-area-inset-bottom) + 28px)!important;
    display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;gap:0!important;
  }
  #auth .authBrand{position:relative!important;inset:auto!important;margin:0 auto 46px!important;gap:13px!important;z-index:1!important}
  #auth .authBrand span{
    position:relative!important;width:68px!important;height:68px!important;border-radius:20px!important;overflow:visible!important;
    background:transparent!important;box-shadow:none!important;isolation:isolate!important;
  }
  #auth .authBrand span::before,#auth .authBrand span::after{
    content:"";position:absolute;inset:-7px;border:1.5px solid rgba(0,0,0,.28);border-radius:26px;z-index:-1;opacity:0;
    animation:sentualV431LogoWave 2.35s cubic-bezier(.2,.7,.25,1) infinite;pointer-events:none;
  }
  #auth .authBrand span::after{animation-delay:1.175s}
  :root:not([data-theme="light"]) #auth .authBrand span::before,:root:not([data-theme="light"]) #auth .authBrand span::after{border-color:rgba(255,255,255,.34)}
  @keyframes sentualV431LogoWave{0%{transform:scale(.82);opacity:0}18%{opacity:.38}72%,100%{transform:scale(1.58);opacity:0}}
  #auth .authBrand span .sentualBrandImg{width:100%!important;height:100%!important;border-radius:20px!important;position:relative!important;z-index:2!important}
  #auth .authBrand b{font-size:20px!important;line-height:1!important;font-weight:750!important;letter-spacing:.5px!important;color:currentColor!important}
  #auth .authBox{width:min(390px,100%)!important;margin:0 auto!important;text-align:center!important}
  #auth #loginBox{width:100%!important}
  #auth #loginBox>h2,#auth #loginBox>.hint{display:none!important}

  /* 12-word field: the sign-in action lives inside the field, so the next visible row is Create account. */
  #auth #recoveryPanel{position:relative!important;width:100%!important;margin:0!important}
  #auth #recoveryPanel>label{display:block!important;margin:0!important;font-size:0!important;color:transparent!important}
  #auth #recoveryInput{
    width:100%!important;min-height:86px!important;max-height:112px!important;margin:0!important;padding:20px 66px 18px 18px!important;resize:none!important;
    border:0!important;border-radius:17px!important;background:#f2f2f7!important;color:#111!important;box-shadow:none!important;
    font-size:16px!important;line-height:1.45!important;caret-color:#0a84ff!important;text-align:left!important;
  }
  :root:not([data-theme="light"]) #auth #recoveryInput{background:#1c1c1e!important;color:#fff!important;caret-color:#0a84ff!important}
  #auth #recoveryInput::placeholder{color:#a0a0a8!important}
  #auth #sentualRecoveryLoginButton{
    position:absolute!important;right:12px!important;bottom:12px!important;width:44px!important;height:44px!important;min-height:44px!important;margin:0!important;padding:0!important;
    border:0!important;border-radius:50%!important;background:#0a84ff!important;color:#fff!important;display:grid!important;place-items:center!important;box-shadow:none!important;
  }
  #auth #sentualRecoveryLoginButton .sentualRecoveryArrow{font-size:23px!important;line-height:1!important;transform:translateY(-1px)}
  #auth #sentualRecoveryLoginButton.sentualAuthBusy .sentualRecoveryArrow{display:none!important}
  #auth #sentualRecoveryLoginButton .sentualAuthSpinner{width:19px!important;height:19px!important;color:#fff!important}
  #auth .sentualAuthRecoveryLinks{display:flex!important;flex-direction:column!important;align-items:center!important;gap:2px!important;margin:18px auto 0!important}
  #auth .sentualAuthRecoveryLinks.hidden{display:none!important}
  #auth .sentualAuthRecoveryLinks button{width:max-content!important;min-height:0!important;margin:0!important;padding:7px 10px!important;border:0!important;background:transparent!important;box-shadow:none!important;font-size:15px!important;font-weight:400!important;line-height:1.2!important}
  #auth .sentualAuthCreateLink{color:var(--text)!important}
  :root[data-theme="light"] #auth .sentualAuthCreateLink{color:#111!important}
  #auth .emailLoginLink{color:#007aff!important}

  /* Email mode uses the same quiet App Store language. */
  #auth.sentualAuthEmailMode .authBrand{margin-bottom:34px!important}
  #auth #emailPanel{width:100%!important;padding:0!important;margin:0!important;text-align:center!important}
  #auth .sentualEmailTitle h2{margin:0!important;font-size:27px!important;line-height:1.15!important;letter-spacing:-.55px!important;color:var(--text)!important}
  :root[data-theme="light"] #auth .sentualEmailTitle h2{color:#000!important}
  #auth .sentualEmailTitle p{margin:9px auto 24px!important;max-width:320px!important;color:#6e6e73!important;font-size:13px!important;line-height:1.45!important}
  #auth .sentualEmailAddressLabel{display:block!important;margin:0!important;font-size:0!important;color:transparent!important}
  #auth #loginEmail{
    width:100%!important;height:58px!important;margin:0!important;padding:0 17px!important;border:0!important;border-radius:16px!important;
    background:#f2f2f7!important;color:#111!important;font-size:16px!important;box-shadow:none!important;text-align:left!important;
  }
  :root:not([data-theme="light"]) #auth #loginEmail{background:#1c1c1e!important;color:#fff!important}
  #auth #loginEmail::placeholder{color:#a0a0a8!important}
  #auth #sentualEmailCodeButton{
    width:max-content!important;min-height:0!important;height:auto!important;margin:13px auto 0!important;padding:8px 10px!important;border:0!important;background:transparent!important;color:#007aff!important;
    border-radius:10px!important;box-shadow:none!important;font-size:15px!important;font-weight:400!important;
  }
  #auth #sentualEmailCodeButton .sentualAuthSpinner{width:17px!important;height:17px!important;color:#007aff!important}
  #auth .sentualV430LegacyOtp,#auth .sentualV430LegacyEmailSubmit,#auth .sentualPinDots,#auth .sentualPinKeypad{display:none!important}
  #auth .sentualMobileEmailOtp{padding:22px 0 0!important;margin:0!important;text-align:center!important}
  #auth .sentualMobileEmailStatus{margin:0 0 15px!important;color:#6e6e73!important;font-size:12px!important;line-height:1.4!important}
  #auth .sentualEmailOtpRow{position:relative!important;display:grid!important;grid-template-columns:repeat(6,1fr)!important;gap:8px!important;width:100%!important;margin:0 auto!important;direction:ltr!important}
  #auth .sentualEmailOtpDigit{
    width:100%!important;min-width:0!important;height:56px!important;margin:0!important;padding:0!important;border:1.5px solid #d1d1d6!important;border-radius:12px!important;
    background:#f2f2f7!important;color:#111!important;text-align:center!important;font-size:24px!important;font-weight:600!important;line-height:56px!important;outline:none!important;box-shadow:none!important;
    caret-color:#0a84ff!important;transition:border-color .14s ease,background .14s ease,color .14s ease,transform .14s ease!important;
  }
  :root:not([data-theme="light"]) #auth .sentualEmailOtpDigit{background:#1c1c1e!important;border-color:#3a3a3c!important;color:#fff!important}
  #auth .sentualEmailOtpDigit:focus{border-color:#0a84ff!important}
  #auth .sentualEmailOtpDigit.filled{border-color:#34c759!important;background:rgba(52,199,89,.055)!important}
  #auth .sentualEmailOtpRow.error{animation:sentualV431OtpShake .36s ease-in-out 0s 2!important}
  #auth .sentualEmailOtpRow.error .sentualEmailOtpDigit{border-color:#ff3b30!important;background:rgba(255,59,48,.075)!important;color:#ff3b30!important}
  #auth .sentualEmailOtpRow.verified .sentualEmailOtpDigit{border-color:#34c759!important;background:rgba(52,199,89,.08)!important;color:#248a3d!important}
  @keyframes sentualV431OtpShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-7px)}75%{transform:translateX(7px)}}
  #auth .sentualOtpCheckSpinner{position:absolute!important;right:-1px!important;top:-28px!important;display:none!important;width:18px!important;height:18px!important;color:#007aff!important}
  #auth .sentualEmailOtpRow.checking .sentualOtpCheckSpinner{display:block!important}
  #auth #emailPanel>.textBtn{width:max-content!important;margin:18px auto 0!important;padding:8px 10px!important;color:#007aff!important;font-size:14px!important}

  /* Registration stays available, but no auth-mode switch may briefly expose the email panel. */
  #auth #emailPanel.hidden,#auth #registerBox.hidden,#auth #loginBox.hidden{display:none!important}
}


/* ===== SENTUAL V4.2.32: input press fidelity + auth viewport/register cleanup ===== */
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]),
textarea{
  -webkit-tap-highlight-color:transparent!important;
  tap-highlight-color:transparent!important;
  transition:transform .12s cubic-bezier(.2,.72,.25,1),background-color .12s ease,border-color .12s ease!important;
  background-clip:padding-box!important;
  filter:none!important;
}
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]).sentualInputPress,
textarea.sentualInputPress{transform:scale(.992)!important;filter:none!important}
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]):focus,
textarea:focus{transform:none!important;filter:none!important}

@media(max-width:820px){
  /* Keep auth painted over the entire physical viewport even after iOS closes its keyboard. */
  #auth.auth{
    position:fixed!important;inset:0!important;width:100vw!important;height:100dvh!important;min-height:100svh!important;max-height:none!important;
    overflow-y:auto!important;overflow-x:hidden!important;overscroll-behavior:none!important;
  }
  #auth .authShell{width:100%!important;min-height:100%!important;height:auto!important;background:transparent!important}
  /* The mark is enough on mobile; remove the duplicate SENTUAL word below it in every auth mode. */
  #auth .authBrand b{display:none!important}
  #auth .authBrand{margin-bottom:42px!important}

  /* Never let iOS paint a dark pressed/focused fill over auth fields. */
  #auth input:not([type="range"]),#auth textarea,
  #auth input:not([type="range"]):active,#auth textarea:active,
  #auth input:not([type="range"]):focus,#auth textarea:focus,
  #auth input:not([type="range"]):focus-visible,#auth textarea:focus-visible{
    -webkit-tap-highlight-color:transparent!important;-webkit-appearance:none!important;appearance:none!important;
    filter:none!important;box-shadow:none!important;
  }
  :root[data-theme="light"] #auth #recoveryInput,
  :root[data-theme="light"] #auth #recoveryInput:active,
  :root[data-theme="light"] #auth #recoveryInput:focus{background:#f2f2f7!important;color:#111!important}
  :root:not([data-theme="light"]) #auth #recoveryInput,
  :root:not([data-theme="light"]) #auth #recoveryInput:active,
  :root:not([data-theme="light"]) #auth #recoveryInput:focus{background:#1c1c1e!important;color:#fff!important}
  :root[data-theme="light"] #auth #loginEmail,
  :root[data-theme="light"] #auth #loginEmail:active,
  :root[data-theme="light"] #auth #loginEmail:focus,
  :root[data-theme="light"] #auth #registerBox input,
  :root[data-theme="light"] #auth #registerBox input:active,
  :root[data-theme="light"] #auth #registerBox input:focus{background:#fff!important;color:#111!important}
  :root:not([data-theme="light"]) #auth #loginEmail,
  :root:not([data-theme="light"]) #auth #loginEmail:active,
  :root:not([data-theme="light"]) #auth #loginEmail:focus,
  :root:not([data-theme="light"]) #auth #registerBox input,
  :root:not([data-theme="light"]) #auth #registerBox input:active,
  :root:not([data-theme="light"]) #auth #registerBox input:focus{background:#1c1c1e!important;color:#fff!important}

  /* Registration now has only name + optional email. */
  #auth #registerBox label{margin:12px 0!important}
  #auth #registerBox .langPicker,#auth #registerBox label:has(.langPicker){display:none!important}
  #auth #registerBox .addEmail{margin-top:16px!important}
}

/* ===== SENTUAL V4.2.33: auth consistency + final iOS composer geometry ===== */
@media(max-width:820px){
  /* Both secondary auth actions use the same native-link color. */
  #auth .sentualAuthCreateLink,
  #auth .emailLoginLink,
  #auth #registerBox>.textBtn{color:#007aff!important}

  /* Email entry must visually match the 12-word recovery field. */
  :root[data-theme="light"] #auth #loginEmail,
  :root[data-theme="light"] #auth #loginEmail:active,
  :root[data-theme="light"] #auth #loginEmail:focus{
    background:#f2f2f7!important;color:#111!important;border:0!important;box-shadow:none!important
  }
  :root:not([data-theme="light"]) #auth #loginEmail,
  :root:not([data-theme="light"]) #auth #loginEmail:active,
  :root:not([data-theme="light"]) #auth #loginEmail:focus{
    background:#1c1c1e!important;color:#fff!important;border:0!important;box-shadow:none!important
  }

  /* Language UI is gone, not merely hidden by layout. */
  #auth #registerBox .langPicker,#auth #registerBox [data-language-row],#auth #registerBox .languageRow{display:none!important}

  /* While the keyboard is open, there is no artificial panel/gap below the composer. */
  html.sentual-keyboard-open #chat.mobileOpen .composer{
    margin:0!important;padding:5px 12px 3px!important;min-height:0!important;bottom:auto!important
  }
  html.sentual-keyboard-open #chat.mobileOpen .composer::after{
    top:100%!important;height:4px!important;background:linear-gradient(180deg,color-mix(in srgb,var(--accent) 6%,transparent),transparent)!important
  }
  html.sentual-keyboard-open #chat.mobileOpen::after{
    height:4px!important;background:transparent!important
  }
}


/* ===== SENTUAL V4.2.34: auth link parity + softer chat motion ===== */
@media(max-width:820px){
  /* Create account must be visually identical to the email sign-in link. */
  #auth #sentualAuthRecoveryLinks .sentualAuthCreateLink,
  #auth #sentualAuthRecoveryLinks .emailLoginLink{
    color:#007aff!important;
    -webkit-text-fill-color:#007aff!important;
    opacity:1!important;
  }

  /* Native-iOS-like chat transitions: no harsh linear jumps. */
  #chat.chat{transition:transform .34s cubic-bezier(.22,1,.36,1)!important;}
  #messages .bubble.sentualReplySwipe{transition:none!important;}
  #messages .bubble.sentualReplySnap{transition:transform .32s cubic-bezier(.22,1,.36,1)!important;}
  .sentualMessageLaunch{
    transform:translate3d(0,18px,0) scale(.975)!important;
    transition:transform .38s cubic-bezier(.22,1,.36,1),opacity .26s ease!important;
  }
  .sentualMessageLaunch.sentualMessageLaunchIn{transform:translate3d(0,0,0) scale(1)!important;}
}


/* ===== SENTUAL V4.2.35: centered auth spinner + clean video compression HUD ===== */
@media(max-width:820px){
  #auth #sentualRecoveryLoginButton{position:absolute!important;}
  #auth #sentualRecoveryLoginButton.sentualAuthBusy .sentualAuthSpinner{
    display:block!important;position:absolute!important;left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;
    width:22px!important;height:22px!important;margin:0!important;transform:translate(-50%,-50%)!important;float:none!important;
  }
}
#messages .sentualV4211VideoUpload .sentualV57UploadMain{left:12px!important;right:48px!important;top:12px!important;}
#messages .sentualV4211VideoUpload .sentualV57UploadStatus{
  display:block!important;width:max-content!important;max-width:calc(100% - 4px)!important;padding:0!important;margin:0!important;
  border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  color:#fff!important;text-shadow:0 1px 3px rgba(0,0,0,.65)!important;line-height:1.25!important;
}
#messages .sentualV4211VideoUpload .sentualV57UploadProgress{
  position:absolute!important;left:12px!important;right:12px!important;top:auto!important;bottom:12px!important;width:auto!important;height:4px!important;margin:0!important;z-index:6!important;
  background:rgba(255,255,255,.30)!important;
}
#messages .sentualV4211VideoUpload .sentualV57UploadIcon{display:none!important;}


/* ===== SENTUAL V4.2.36: sticky chat date + stable voice speed icon/history loader ===== */
#messages>.sentualDateSeparator{position:sticky!important;top:9px!important;z-index:32!important;width:max-content!important;max-width:calc(100% - 28px)!important;align-self:center!important;backdrop-filter:blur(14px)!important;-webkit-backdrop-filter:blur(14px)!important}
.sentualHistoryLoader{position:absolute!important;z-index:45!important;left:50%!important;top:72px!important;transform:translateX(-50%)!important;width:38px!important;height:30px!important;border-radius:999px!important;display:grid!important;place-items:center!important;background:color-mix(in srgb,var(--chat) 72%,transparent)!important;backdrop-filter:blur(14px)!important;-webkit-backdrop-filter:blur(14px)!important;pointer-events:none!important;box-shadow:0 3px 14px rgba(0,0,0,.08)!important}
.sentualHistoryLoader.hidden{display:none!important}.sentualHistoryLoader .iosSpinner{width:17px!important;height:17px!important}
#messages .sentualVoiceSpeedGauge{display:block!important;width:20px!important;height:20px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.8!important;stroke-linecap:round!important;stroke-linejoin:round!important}
#messages .sentualVoiceSpeedGauge circle{fill:currentColor!important;stroke:none!important}


/* ===== SENTUAL V4.2.38: compact numeric voice-speed icon + one stable floating date ===== */
#messages>.sentualDateSeparator{position:static!important;top:auto!important;z-index:2!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
.sentualStickyDateBadge{position:absolute!important;z-index:46!important;top:74px!important;left:50%!important;transform:translateX(-50%)!important;padding:4px 11px!important;border-radius:999px!important;background:color-mix(in srgb,var(--muted) 42%,transparent)!important;color:color-mix(in srgb,var(--text) 96%,transparent)!important;font-size:11px!important;font-weight:650!important;line-height:1.25!important;white-space:nowrap!important;pointer-events:none!important;backdrop-filter:blur(14px)!important;-webkit-backdrop-filter:blur(14px)!important;box-shadow:0 2px 9px rgba(0,0,0,.08)!important;transition:opacity .12s ease!important}
.sentualStickyDateBadge.hidden,.sentualStickyDateBadge.sentualStickyDateSuppressed{opacity:0!important;visibility:hidden!important}
#messages .sentualVoiceSpeed{width:40px!important;height:40px!important;min-width:40px!important;padding:0!important;border:0!important;border-radius:50%!important;background:transparent!important;display:grid!important;place-items:center!important;grid-template-rows:1fr!important;color:var(--muted)!important;box-shadow:none!important}
#messages .sentualVoiceSpeed>small,#messages .sentualVoiceSpeed>.sentualVoiceSpeedGauge{display:none!important}
#messages .sentualVoiceSpeedDial{display:block!important;width:34px!important;height:34px!important;overflow:visible!important}
#messages .sentualVoiceSpeedDial .dialArc{fill:none!important;stroke:currentColor!important;stroke-width:1.65!important;stroke-linecap:round!important}
#messages .sentualVoiceSpeedDial .dialTick{fill:none!important;stroke:currentColor!important;stroke-width:1.45!important;stroke-linecap:round!important;opacity:.72!important}
#messages .sentualVoiceSpeedDial text{fill:currentColor!important;stroke:none!important;font:700 8.8px -apple-system,BlinkMacSystemFont,"SF Pro Text",system-ui,sans-serif!important;letter-spacing:-.3px!important}

/* ===== SENTUAL V4.2.39: device-independent mobile chat viewport ===== */
@media(max-width:820px){
  /* When the software keyboard is closed the chat must fill the actual dynamic viewport.
     Do not reuse visualViewport.height here: on compact iPhones Safari can keep that value
     shorter than the screen after its bars/keyboard settle, leaving a large dead strip below
     the composer. */
  html:not(.sentual-keyboard-open) #chat.mobileOpen{
    position:fixed!important;
    inset:0!important;
    top:0!important;
    right:0!important;
    bottom:0!important;
    left:0!important;
    width:100%!important;
    height:100dvh!important;
    min-height:100dvh!important;
    max-height:100dvh!important;
    transform:none!important;
  }

  /* Safe area is part of the composer only once. Older rules added a hard 34px fallback plus
     normal padding, which exaggerated the bottom space on smaller iPhones such as XS. */
  html.sentual-ios:not(.sentual-keyboard-open) #chat.mobileOpen .composer{
    padding-top:9px!important;
    padding-right:12px!important;
    padding-bottom:max(9px,env(safe-area-inset-bottom))!important;
    padding-left:12px!important;
    margin:0!important;
  }

  /* The accent fade is keyboard-only. Outside keyboard mode these old pseudo-elements visually
     extended the composer below its real box and made the empty bottom area look even larger. */
  html:not(.sentual-keyboard-open) #chat.mobileOpen .composer::after,
  html:not(.sentual-keyboard-open) #chat.mobileOpen::after{
    content:none!important;
    display:none!important;
    height:0!important;
    background:none!important;
  }

  /* Keyboard mode remains driven by visualViewport, with only the intended tiny keyboard gap. */
  html.sentual-keyboard-open #chat.mobileOpen{
    position:fixed!important;
    left:0!important;
    right:0!important;
    top:0!important;
    bottom:auto!important;
    width:100%!important;
    height:calc(var(--sentual-vv-height,100dvh) + var(--sentual-vv-top,0px))!important;
    min-height:0!important;
    max-height:none!important;
  }
  html.sentual-keyboard-open #chat.mobileOpen .composer{
    flex:0 0 auto!important;
    margin:0!important;
    padding:5px 12px 3px!important;
  }
}

/* ===== SENTUAL V4.2.40: floating date sits below the chat header, never over the peer name ===== */
@media(max-width:820px){
  .sentualStickyDateBadge{
    top:calc(64px + env(safe-area-inset-top) + 9px)!important;
    padding:4px 10px!important;
    background:color-mix(in srgb,var(--muted) 28%,transparent)!important;
    color:rgba(255,255,255,.96)!important;
    font-size:11px!important;
    font-weight:600!important;
    line-height:1.25!important;
    box-shadow:0 1px 5px rgba(0,0,0,.05)!important;
    backdrop-filter:blur(12px)!important;
    -webkit-backdrop-filter:blur(12px)!important;
  }
  html.sentual-ios .sentualStickyDateBadge{
    top:calc(64px + var(--sentual-v62-safe-top,47px) + 9px)!important;
  }
  :root[data-theme="light"] .sentualStickyDateBadge{
    background:rgba(117,132,145,.28)!important;
    color:rgba(255,255,255,.98)!important;
  }
}

/* ===== SENTUAL V4.2.41: realtime edge swipe + legible voice controls/pending upload ===== */
@media(max-width:820px){
  #chat.sentualBackDragging{transition:none!important;will-change:transform!important;}
  #messenger.sentualBackActive #chat.sentualBackDragging{transition:none!important;}
}
#messages .sentualVoiceCard{grid-template-columns:52px minmax(0,1fr) 50px!important;gap:9px!important;}
#messages .sentualVoiceInfo{font-size:11.5px!important;height:17px!important;line-height:1.1!important;gap:5px!important;font-weight:560!important;font-variant-numeric:tabular-nums!important;}
#messages .sentualVoiceElapsed,#messages .sentualVoiceDuration,#messages .sentualVoiceTimeSep{font-size:11.5px!important;line-height:1.1!important;}
#messages .sentualVoiceSpeed{width:48px!important;height:48px!important;min-width:48px!important;border-radius:15px!important;display:grid!important;place-items:center!important;color:var(--muted)!important;}
#messages .sentualVoiceSpeedDialV4241{display:block!important;width:44px!important;height:44px!important;overflow:visible!important;}
#messages .sentualVoiceSpeedDialV4241 .dialArc{fill:none!important;stroke:currentColor!important;stroke-width:2.05!important;stroke-linecap:round!important;opacity:.92!important;}
#messages .sentualVoiceSpeedDialV4241 .dialAccent{fill:none!important;stroke:currentColor!important;stroke-width:2.05!important;stroke-linecap:round!important;stroke-linejoin:round!important;}
#messages .sentualVoiceSpeedDialV4241 text{fill:currentColor!important;stroke:none!important;font:750 11.5px -apple-system,BlinkMacSystemFont,"SF Pro Text",system-ui,sans-serif!important;letter-spacing:-.45px!important;}
@media(max-width:820px){
  #messages .sentualVoiceCard{grid-template-columns:48px minmax(0,1fr) 46px!important;}
  #messages .sentualVoiceSpeed{width:44px!important;height:44px!important;min-width:44px!important;}
  #messages .sentualVoiceSpeedDialV4241{width:41px!important;height:41px!important;}
  #messages .sentualVoiceInfo,#messages .sentualVoiceElapsed,#messages .sentualVoiceDuration,#messages .sentualVoiceTimeSep{font-size:10.5px!important;}
}
#messages .sentualVoicePending .sentualVoiceWave{pointer-events:none!important;opacity:.78!important;}
#messages .sentualVoicePendingCard{position:relative!important;}
#messages .sentualVoiceUploadControl{position:relative!important;overflow:visible!important;}
#messages .sentualVoiceUploadRing{position:absolute!important;inset:-7px!important;border-radius:50%!important;border:2px solid color-mix(in srgb,var(--accent) 18%,transparent)!important;border-top-color:var(--accent)!important;border-right-color:color-mix(in srgb,var(--accent) 68%,transparent)!important;animation:sentualV4241VoiceUploadSpin .78s linear infinite!important;pointer-events:none!important;}
#messages .sentualVoiceUploadIcon{position:relative!important;z-index:2!important;width:100%!important;height:100%!important;display:grid!important;place-items:center!important;}
#messages .sentualVoiceUploadIcon svg{width:22px!important;height:22px!important;}
#messages .sentualVoiceUploadPaused .sentualVoiceUploadRing{animation-play-state:paused!important;opacity:.35!important;}
#messages .sentualVoicePendingInfo{justify-content:space-between!important;min-width:0!important;}
#messages .sentualVoiceUploadStatus{display:none!important;}
#messages .sentualVoicePendingSpeedSpacer{width:46px!important;height:1px!important;display:block!important;}
@keyframes sentualV4241VoiceUploadSpin{to{transform:rotate(360deg)}}

/* ===== SENTUAL V4.2.42: larger voice speed control + attachment reaction placement + realtime edge back ===== */
/* Voice speed must stay readable on desktop as well as mobile.  The rate is inside the control itself. */
#messages .sentualVoiceCard{grid-template-columns:52px minmax(0,1fr) 68px!important;gap:10px!important;}
#messages .sentualVoiceSpeed{
  width:64px!important;height:64px!important;min-width:64px!important;padding:0!important;
  border:0!important;border-radius:20px!important;background:transparent!important;
  display:grid!important;place-items:center!important;color:var(--muted)!important;
}
#messages .sentualVoiceSpeedDialV4242{display:block!important;width:60px!important;height:60px!important;overflow:visible!important;}
#messages .sentualVoiceSpeedDialV4242 .speedRing{fill:none!important;stroke:currentColor!important;stroke-width:2!important;opacity:.72!important;}
#messages .sentualVoiceSpeedDialV4242 .speedTick{fill:none!important;stroke:currentColor!important;stroke-width:2.2!important;stroke-linecap:round!important;opacity:.9!important;}
#messages .sentualVoiceSpeedDialV4242 text{
  fill:currentColor!important;stroke:none!important;
  font:780 15px -apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text",system-ui,sans-serif!important;
  letter-spacing:-.55px!important;
}
#messages .sentualVoiceInfo,
#messages .sentualVoiceElapsed,
#messages .sentualVoiceDuration,
#messages .sentualVoiceTimeSep{font-size:13px!important;line-height:1.15!important;font-variant-numeric:tabular-nums!important;}

/* Reactions on files/media belong near the bottom edge of the card, not glued to its upper-left edge. */
#messages .bubble.file.attachmentCard>.sentualReactionStrip{
  align-self:flex-start!important;
  margin-top:10px!important;
  margin-right:0!important;
  margin-bottom:10px!important;
  margin-left:26px!important;
  padding:0!important;
  transform:none!important;
}
#messages .bubble.file.attachmentCard>.sentualReactionStrip .sentualReactionChip.mine{transform:none!important;}

@media(max-width:820px){
  #messages .sentualVoiceCard{grid-template-columns:48px minmax(0,1fr) 54px!important;gap:8px!important;}
  #messages .sentualVoiceSpeed{width:52px!important;height:52px!important;min-width:52px!important;border-radius:17px!important;}
  #messages .sentualVoiceSpeedDialV4242{width:49px!important;height:49px!important;}
  #messages .sentualVoiceSpeedDialV4242 text{font-size:12.5px!important;}
  #messages .sentualVoiceInfo,
  #messages .sentualVoiceElapsed,
  #messages .sentualVoiceDuration,
  #messages .sentualVoiceTimeSep{font-size:11px!important;}

  /* Horizontal edge navigation is fully JS-driven; never animate while the finger owns it. */
  #chat.sentualBackDraggingV4242{transition:none!important;will-change:transform!important;}
  #messenger.sentualBackActive #chat.sentualBackDraggingV4242{transition:none!important;}
}

/* ===== SENTUAL V4.2.44: oversized voice-speed glyph + precise reaction placement ===== */
/* Keep the voice bubble/card geometry unchanged. Only the speed glyph overflows its existing small cell. */
#messages .sentualVoiceCard{grid-template-columns:52px minmax(0,1fr) 40px!important;}
#messages .sentualVoiceSpeed{
  width:40px!important;height:40px!important;min-width:40px!important;
  overflow:visible!important;border-radius:14px!important;
  display:grid!important;place-items:center!important;
}
#messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4244{
  display:block!important;width:108px!important;height:108px!important;max-width:none!important;max-height:none!important;
  overflow:visible!important;transform:translateX(-12px)!important;pointer-events:none!important;
}
#messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4244 .speedRing{fill:color-mix(in srgb,var(--bubble) 64%,transparent)!important;stroke:currentColor!important;stroke-width:2.8!important;opacity:.96!important;}
#messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4244 .speedArc{fill:none!important;stroke:currentColor!important;stroke-width:4.2!important;stroke-linecap:round!important;}
#messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4244 .speedNeedle{fill:none!important;stroke:currentColor!important;stroke-width:3.2!important;stroke-linecap:round!important;}
#messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4244 text{
  fill:currentColor!important;stroke:none!important;
  font:850 21px -apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text",system-ui,sans-serif!important;
  letter-spacing:-.8px!important;
}
@media(max-width:820px){
  #messages .sentualVoiceCard{grid-template-columns:48px minmax(0,1fr) 38px!important;}
  #messages .sentualVoiceSpeed{width:38px!important;height:38px!important;min-width:38px!important;}
  #messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4244{width:94px!important;height:94px!important;transform:translateX(-10px)!important;}
  #messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4244 text{font-size:19px!important;}
}
/* Only captionless photo/video reactions hug the media's own left edge. Generic file-card reactions stay at 26px above. */
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia>.sentualReactionStrip,
#messages .bubble.file.attachmentCard.attachment-video.sentualCaptionlessMedia>.sentualReactionStrip{
  margin-top:8px!important;margin-right:0!important;margin-bottom:8px!important;margin-left:6px!important;
  align-self:flex-start!important;transform:none!important;
}



/* ===== SENTUAL V4.2.46: playback-speed badge + strong white voice-upload spinner ===== */
/* Keep the voice card geometry compact; only the speed icon itself gets a clearer footprint. */
#messages .sentualVoiceCard{grid-template-columns:52px minmax(0,1fr) 64px!important;gap:9px!important;}
#messages .sentualVoiceSpeed{
  width:62px!important;height:62px!important;min-width:62px!important;padding:0!important;
  border:0!important;border-radius:19px!important;background:transparent!important;overflow:visible!important;
  display:grid!important;place-items:center!important;color:var(--muted)!important;
}
#messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4246{display:block!important;width:62px!important;height:62px!important;overflow:visible!important;pointer-events:none!important;}
#messages .sentualVoiceSpeedDialV4244,#messages .sentualVoiceSpeedDialV4245{display:none!important;}
#messages .sentualVoiceSpeedDialV4246 .speedFace{fill:color-mix(in srgb,var(--bubble) 66%,transparent)!important;stroke:currentColor!important;stroke-width:2.2!important;opacity:.96!important;}
#messages .sentualVoiceSpeedDialV4246 .speedCrown,#messages .sentualVoiceSpeedDialV4246 .speedMark{fill:none!important;stroke:currentColor!important;stroke-linecap:round!important;stroke-linejoin:round!important;}
#messages .sentualVoiceSpeedDialV4246 .speedCrown{stroke-width:2.6!important;opacity:.78!important;}
#messages .sentualVoiceSpeedDialV4246 .speedMark{stroke-width:2.2!important;opacity:.72!important;}
#messages .sentualVoiceSpeedDialV4246 .speedRate{fill:currentColor!important;stroke:none!important;font:800 16px -apple-system,BlinkMacSystemFont,"SF Pro Text",system-ui,sans-serif!important;letter-spacing:-.75px!important;}
@media(max-width:820px){
  #messages .sentualVoiceCard{grid-template-columns:48px minmax(0,1fr) 58px!important;gap:8px!important;}
  #messages .sentualVoiceSpeed{width:56px!important;height:56px!important;min-width:56px!important;border-radius:18px!important;}
  #messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4246{width:56px!important;height:56px!important;}
  #messages .sentualVoiceSpeedDialV4246 .speedRate{font-size:14.5px!important;}
}

/* Pending voice upload: unmistakable white spinner, tight to the button, with a truly centered X. */
#messages .sentualVoiceUploadControl{position:relative!important;overflow:visible!important;display:grid!important;place-items:center!important;}
#messages .sentualVoiceUploadRing{
  position:absolute!important;inset:-4px!important;border:0!important;border-radius:50%!important;
  background:conic-gradient(from 0deg,#fff 0 88deg,rgba(255,255,255,.22) 88deg 360deg)!important;
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px))!important;
  mask:radial-gradient(farthest-side,transparent calc(100% - 3px),#000 calc(100% - 2.5px))!important;
  animation:sentualV4241VoiceUploadSpin .72s linear infinite!important;pointer-events:none!important;z-index:1!important;
  filter:drop-shadow(0 0 1px rgba(0,0,0,.14))!important;
}
#messages .sentualVoiceUploadIcon{position:absolute!important;inset:0!important;z-index:2!important;display:grid!important;place-items:center!important;width:auto!important;height:auto!important;}
#messages .sentualVoiceUploadIcon svg.sentualVoiceUploadCancelSvg{display:block!important;width:24px!important;height:24px!important;fill:none!important;stroke:#fff!important;stroke-width:2.45!important;stroke-linecap:round!important;stroke-linejoin:round!important;transform:none!important;}
#messages .sentualVoiceUploadControl:disabled{opacity:.72!important;}
#messages .sentualVoiceUploadCancelling .sentualVoiceUploadRing{animation-duration:.48s!important;opacity:.55!important;}

/* Every reaction strip belongs inside its message bubble/card. Reserve a small footer so it never hangs outside. */
#messages>.bubble.sentualHasReactions{position:relative!important;padding-bottom:34px!important;}
#messages>.bubble.file.attachmentCard.sentualHasReactions{padding-bottom:34px!important;}
#messages>.bubble.sentualHasReactions>.sentualReactionStrip{
  position:absolute!important;left:10px!important;right:auto!important;bottom:7px!important;top:auto!important;
  margin:0!important;padding:0!important;transform:none!important;align-self:auto!important;z-index:12!important;
}
#messages>.bubble.sentualHasReactions>.sentualReactionStrip .sentualReactionChip.mine{transform:none!important;}
/* Cancel all older per-file/per-caption reaction offsets. */
#messages .bubble.file.attachmentCard>.sentualReactionStrip,
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia>.sentualReactionStrip,
#messages .bubble.file.attachmentCard.attachment-video.sentualCaptionlessMedia>.sentualReactionStrip{
  position:absolute!important;left:10px!important;right:auto!important;bottom:7px!important;top:auto!important;
  margin:0!important;padding:0!important;transform:none!important;
}

/* Before a deferred photo/video download starts, show its known plain size in the same progress badge. */
#messages .sentualMediaSizeBeforeDownload:empty{display:none!important;}

/* ===== SENTUAL V4.2.47: compact speed badge, reliable voice-send ring, restore reaction spacing ===== */
/* Only the speed control changes size/icon; the voice card itself stays compact. */
#messages .sentualVoiceCard{grid-template-columns:52px minmax(0,1fr) 50px!important;gap:8px!important;}
#messages .sentualVoiceSpeed{
  width:50px!important;height:40px!important;min-width:50px!important;padding:0!important;
  border:0!important;border-radius:12px!important;background:transparent!important;overflow:visible!important;
  display:grid!important;place-items:center!important;color:var(--muted)!important;
}
#messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4247{
  display:block!important;width:50px!important;height:40px!important;max-width:none!important;max-height:none!important;
  overflow:visible!important;pointer-events:none!important;
}
#messages .sentualVoiceSpeedDialV4244,
#messages .sentualVoiceSpeedDialV4245,
#messages .sentualVoiceSpeedDialV4246{display:none!important;}
#messages .sentualVoiceSpeedDialV4247 .speedFrame{
  fill:color-mix(in srgb,var(--bubble) 58%,transparent)!important;
  stroke:currentColor!important;stroke-width:1.8!important;opacity:.96!important;
}
#messages .sentualVoiceSpeedDialV4247 .speedChevrons{
  fill:none!important;stroke:currentColor!important;stroke-width:2.15!important;
  stroke-linecap:round!important;stroke-linejoin:round!important;opacity:.82!important;
}
#messages .sentualVoiceSpeedDialV4247 .speedRate{
  fill:currentColor!important;stroke:none!important;
  font:800 11px -apple-system,BlinkMacSystemFont,"SF Pro Text",system-ui,sans-serif!important;
  letter-spacing:-.45px!important;
}
@media(max-width:820px){
  #messages .sentualVoiceCard{grid-template-columns:48px minmax(0,1fr) 46px!important;gap:7px!important;}
  #messages .sentualVoiceSpeed{width:46px!important;height:37px!important;min-width:46px!important;border-radius:11px!important;}
  #messages .sentualVoiceSpeed svg.sentualVoiceSpeedDialV4247{width:46px!important;height:37px!important;}
  #messages .sentualVoiceSpeedDialV4247 .speedRate{font-size:10.5px!important;}
}

/* Use the exact same border-spinner language as voice download: white, close to the button, always visible while pending. */
#messages .sentualVoicePending .sentualVoiceUploadControl{
  position:relative!important;overflow:visible!important;display:grid!important;place-items:center!important;
  padding:0!important;
}
#messages .sentualVoicePending .sentualVoiceUploadRing{
  display:block!important;position:absolute!important;inset:-2px!important;box-sizing:border-box!important;
  border:2.5px solid rgba(255,255,255,.32)!important;border-top-color:#fff!important;border-right-color:#fff!important;
  border-radius:50%!important;background:none!important;-webkit-mask:none!important;mask:none!important;
  animation:sentualVoiceLoadingSpin .72s linear infinite!important;transform-origin:50% 50%!important;
  pointer-events:none!important;z-index:1!important;filter:none!important;
}
/* Draw the cancel X from two centered strokes so font/SVG baselines can never shift it. */
#messages .sentualVoicePending .sentualVoiceUploadIcon{display:none!important;}
#messages .sentualVoicePending .sentualVoiceUploadControl::before,
#messages .sentualVoicePending .sentualVoiceUploadControl::after{
  content:""!important;display:block!important;position:absolute!important;left:50%!important;top:50%!important;
  width:18px!important;height:2.5px!important;border-radius:999px!important;background:#fff!important;
  z-index:3!important;transform-origin:50% 50%!important;pointer-events:none!important;
}
#messages .sentualVoicePending .sentualVoiceUploadControl::before{transform:translate(-50%,-50%) rotate(45deg)!important;}
#messages .sentualVoicePending .sentualVoiceUploadControl::after{transform:translate(-50%,-50%) rotate(-45deg)!important;}
#messages .sentualVoiceUploadCancelling .sentualVoiceUploadRing{animation-duration:.48s!important;opacity:.55!important;}

/* Undo the V4.2.45 global reaction footer that created the huge detached gap. */
#messages>.bubble.sentualHasReactions:not(.file){padding-bottom:8px!important;}
#messages>.bubble.file.attachmentCard.sentualHasReactions{padding-bottom:0!important;}
#messages>.bubble.sentualHasReactions>.sentualReactionStrip{
  position:relative!important;left:auto!important;right:auto!important;bottom:auto!important;top:auto!important;
  margin:5px 0 0 0!important;padding:0!important;transform:none!important;align-self:flex-start!important;z-index:8!important;
}
/* File cards: keep a modest inset, not the giant empty footer. */
#messages .bubble.file.attachmentCard>.sentualReactionStrip{
  position:relative!important;left:auto!important;right:auto!important;bottom:auto!important;top:auto!important;
  margin:6px 0 7px 14px!important;padding:0!important;transform:none!important;align-self:flex-start!important;
}
/* Captionless photo/video: align close to the media edge without floating far below it. */
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia>.sentualReactionStrip,
#messages .bubble.file.attachmentCard.attachment-video.sentualCaptionlessMedia>.sentualReactionStrip{
  position:relative!important;left:auto!important;right:auto!important;bottom:auto!important;top:auto!important;
  margin:5px 0 5px 8px!important;padding:0!important;transform:none!important;align-self:flex-start!important;
}

/* ===== SENTUAL V4.2.48: desktop auth parity + transparent account-status cards ===== */
@keyframes sentualV448LogoWave{0%{transform:scale(.82);opacity:0}18%{opacity:.38}72%,100%{transform:scale(1.58);opacity:0}}
@media(min-width:821px){
  #auth.auth{position:fixed!important;inset:0!important;width:100vw!important;height:100dvh!important;min-height:100vh!important;overflow:auto!important;background:#fff!important;color:#000!important;}
  :root:not([data-theme="light"]) #auth.auth{background:#000!important;color:#fff!important;}
  #auth .authShell{width:100%!important;min-height:100dvh!important;padding:42px 28px!important;display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:center!important;gap:0!important;}
  #auth .authIntro{display:none!important;}
  #auth .authBrand{position:relative!important;inset:auto!important;margin:0 auto 42px!important;display:flex!important;justify-content:center!important;align-items:center!important;}
  #auth .authBrand b{display:none!important;}
  #auth .authBrand span{position:relative!important;width:68px!important;height:68px!important;border-radius:20px!important;background:transparent!important;overflow:visible!important;box-shadow:none!important;isolation:isolate!important;}
  #auth .authBrand span::before,#auth .authBrand span::after{content:"";position:absolute;inset:-7px;border:1.5px solid rgba(0,0,0,.28);border-radius:26px;z-index:-1;opacity:0;animation:sentualV448LogoWave 2.35s cubic-bezier(.2,.7,.25,1) infinite;pointer-events:none;}
  #auth .authBrand span::after{animation-delay:1.175s;}
  :root:not([data-theme="light"]) #auth .authBrand span::before,:root:not([data-theme="light"]) #auth .authBrand span::after{border-color:rgba(255,255,255,.34);}
  #auth .authBrand .sentualBrandImg{width:100%!important;height:100%!important;border-radius:20px!important;}
  #auth .authBox{width:min(390px,calc(100vw - 48px))!important;margin:0 auto!important;text-align:center!important;}
  #auth #loginBox>h2,#auth #loginBox>.hint{display:none!important;}
  #auth #recoveryPanel{position:relative!important;width:100%!important;margin:0!important;}
  #auth #recoveryPanel>label{display:block!important;margin:0!important;font-size:0!important;color:transparent!important;}
  #auth #recoveryInput{width:100%!important;min-height:86px!important;max-height:112px!important;margin:0!important;padding:20px 66px 18px 18px!important;resize:none!important;border:0!important;border-radius:17px!important;background:#f2f2f7!important;color:#111!important;box-shadow:none!important;font-size:16px!important;line-height:1.45!important;caret-color:#0a84ff!important;text-align:left!important;}
  :root:not([data-theme="light"]) #auth #recoveryInput{background:#1c1c1e!important;color:#fff!important;}
  #auth #sentualRecoveryLoginButton{position:absolute!important;right:12px!important;bottom:12px!important;width:44px!important;height:44px!important;min-height:44px!important;margin:0!important;padding:0!important;border:0!important;border-radius:50%!important;background:#0a84ff!important;color:#fff!important;display:grid!important;place-items:center!important;}
  #auth .sentualAuthRecoveryLinks{display:flex!important;flex-direction:column!important;align-items:center!important;gap:2px!important;margin:18px auto 0!important;}
  #auth .sentualAuthRecoveryLinks.hidden{display:none!important;}
  #auth .sentualAuthRecoveryLinks button{width:max-content!important;min-height:0!important;margin:0!important;padding:7px 10px!important;border:0!important;background:transparent!important;box-shadow:none!important;font-size:15px!important;font-weight:400!important;line-height:1.2!important;color:#007aff!important;-webkit-text-fill-color:#007aff!important;}
  #auth #emailPanel{width:100%!important;padding:0!important;margin:0!important;text-align:center!important;}
  #auth .sentualEmailTitle h2{margin:0!important;font-size:27px!important;line-height:1.15!important;letter-spacing:-.55px!important;color:currentColor!important;}
  #auth .sentualEmailTitle p{margin:9px auto 24px!important;max-width:320px!important;color:#6e6e73!important;font-size:13px!important;line-height:1.45!important;}
  #auth .sentualEmailAddressLabel{display:block!important;margin:0!important;font-size:0!important;color:transparent!important;}
  #auth #loginEmail{width:100%!important;height:58px!important;margin:0!important;padding:0 17px!important;border:0!important;border-radius:16px!important;background:#f2f2f7!important;color:#111!important;font-size:16px!important;box-shadow:none!important;text-align:left!important;}
  :root:not([data-theme="light"]) #auth #loginEmail{background:#1c1c1e!important;color:#fff!important;}
  #auth #sentualEmailCodeButton{width:max-content!important;min-height:0!important;height:auto!important;margin:13px auto 0!important;padding:8px 10px!important;border:0!important;background:transparent!important;color:#007aff!important;border-radius:10px!important;box-shadow:none!important;font-size:15px!important;font-weight:400!important;}
  #auth .sentualV430LegacyOtp,#auth .sentualV430LegacyEmailSubmit,#auth .sentualPinDots,#auth .sentualPinKeypad{display:none!important;}
  #auth .sentualMobileEmailOtp{padding:22px 0 0!important;margin:0!important;text-align:center!important;}
  #auth .sentualEmailOtpRow{position:relative!important;display:grid!important;grid-template-columns:repeat(6,1fr)!important;gap:8px!important;width:100%!important;margin:0 auto!important;direction:ltr!important;}
  #auth .sentualEmailOtpDigit{width:100%!important;min-width:0!important;height:56px!important;margin:0!important;padding:0!important;border:1.5px solid #d1d1d6!important;border-radius:12px!important;background:#f2f2f7!important;color:#111!important;text-align:center!important;font-size:24px!important;font-weight:600!important;outline:none!important;box-shadow:none!important;caret-color:#0a84ff!important;}
  :root:not([data-theme="light"]) #auth .sentualEmailOtpDigit{background:#1c1c1e!important;border-color:#3a3a3c!important;color:#fff!important;}
  #auth .sentualEmailOtpDigit:focus{border-color:#0a84ff!important;}
  #auth .sentualEmailOtpDigit.filled{border-color:#34c759!important;background:rgba(52,199,89,.055)!important;}
  #auth .sentualEmailOtpRow.error .sentualEmailOtpDigit{border-color:#ff3b30!important;background:rgba(255,59,48,.075)!important;color:#ff3b30!important;}
  #auth #registerBox{width:100%!important;text-align:center!important;}
  #auth #registerBox h2{font-size:27px!important;margin:0 0 7px!important;color:currentColor!important;}
  #auth #registerBox .hint{margin:0 0 22px!important;color:#6e6e73!important;}
  #auth #registerBox label{margin:12px 0!important;color:#6e6e73!important;font-size:12px!important;}
  #auth #registerBox input{width:100%!important;height:58px!important;padding:0 17px!important;border:0!important;border-radius:16px!important;background:#f2f2f7!important;color:#111!important;box-shadow:none!important;font-size:16px!important;}
  :root:not([data-theme="light"]) #auth #registerBox input{background:#1c1c1e!important;color:#fff!important;}
  #auth #registerBox .addEmail{margin-top:16px!important;color:#6e6e73!important;}
  #auth #registerBox .primary{height:52px!important;border-radius:16px!important;background:#0a84ff!important;color:#fff!important;}
  #auth #registerBox>.textBtn{color:#007aff!important;-webkit-text-fill-color:#007aff!important;}
}

#messages .sentualStatusNotice{width:min(370px,84%);margin:20px auto;padding:20px 22px 22px;display:flex;flex-direction:column;align-items:center;text-align:center;border:1px solid color-mix(in srgb,var(--line) 68%,transparent);border-radius:28px;background:color-mix(in srgb,var(--bubble) 58%,transparent);backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);box-shadow:0 14px 42px rgba(12,28,40,.08);user-select:none;-webkit-user-select:none;}
#messages .sentualStatusNotice img{display:block;width:142px;height:142px;object-fit:contain;margin:0 auto 8px;pointer-events:none;}
#messages .sentualStatusNotice strong{font-size:20px;line-height:1.2;color:var(--text);font-weight:750;letter-spacing:-.25px;}
#messages .sentualStatusNotice p{max-width:300px;margin:9px auto 0;color:var(--muted);font-size:13px;line-height:1.5;}
@media(max-width:820px){#messages .sentualStatusNotice{width:min(340px,88%);padding:18px 18px 20px;border-radius:24px}#messages .sentualStatusNotice img{width:128px;height:128px}}


/* ===== SENTUAL V4.2.49: native busy button, no-selection UI, neutral input press ===== */
/* Desktop and mobile use the same recovery button: busy means spinner only, centered. */
#auth #sentualRecoveryLoginButton.sentualAuthBusy .sentualRecoveryArrow{display:none!important;visibility:hidden!important;opacity:0!important}
#auth #sentualRecoveryLoginButton.sentualAuthBusy .sentualAuthSpinner{
  display:block!important;position:absolute!important;left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;
  width:21px!important;height:21px!important;margin:0!important;float:none!important;transform:translate(-50%,-50%)!important;color:#fff!important;
}

/* Nothing in the application UI is selectable. Text entry fields remain editable/selectable. */
html,body,body *{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important}
input,textarea,[contenteditable="true"],[contenteditable=""]{-webkit-user-select:text!important;user-select:text!important;-webkit-touch-callout:default!important}

/* Input press feedback is motion only. Never flash a dark native active background. */
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]),textarea{
  -webkit-tap-highlight-color:transparent!important;outline:none!important;filter:none!important;opacity:1!important;
  transition:transform .13s cubic-bezier(.22,1,.36,1),border-color .13s ease!important;
}
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]).sentualInputPress,
textarea.sentualInputPress{transform:scale(.988)!important;background-color:var(--sentual-input-live-bg)!important;background-image:var(--sentual-input-live-image)!important}
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]):active,
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]):focus,
textarea:active,textarea:focus{filter:none!important;opacity:1!important;background-color:var(--sentual-input-live-bg)!important;background-image:var(--sentual-input-live-image)!important}


/* ===== SENTUAL V4.2.50: compact destructive modal + auth icons + scrollable multiline composer ===== */
#confirmModal .confirmBox{overflow:hidden!important;}
#confirmModal #confirmBody{max-width:100%!important;overflow-wrap:anywhere!important;word-break:normal!important;white-space:normal!important;line-height:1.45!important;margin:8px auto 18px!important;}
#confirmModal .confirmActions{position:relative!important;z-index:1!important;}

#auth #sentualRecoveryLoginButton .sentualRecoveryArrow{display:grid!important;place-items:center!important;width:100%!important;height:100%!important;float:none!important;}
#auth #sentualRecoveryLoginButton .sentualRecoveryArrow svg{display:block!important;width:25px!important;height:25px!important;fill:none!important;stroke:currentColor!important;stroke-width:2.8!important;stroke-linecap:round!important;stroke-linejoin:round!important;}
#auth #emailPanel{position:relative!important;}
#auth .sentualAuthEmailBack{position:absolute!important;left:-2px!important;top:-4px!important;width:40px!important;height:40px!important;padding:0!important;margin:0!important;border:0!important;border-radius:12px!important;background:transparent!important;color:#007aff!important;display:grid!important;place-items:center!important;z-index:3!important;-webkit-tap-highlight-color:transparent!important;}
#auth .sentualAuthEmailBack svg{width:27px!important;height:27px!important;fill:none!important;stroke:currentColor!important;stroke-width:2.7!important;stroke-linecap:round!important;stroke-linejoin:round!important;}
#auth .sentualLegacyEmailBackText{display:none!important;}

#chat textarea#message{overflow-y:auto!important;-webkit-overflow-scrolling:touch!important;touch-action:pan-y!important;overscroll-behavior:contain!important;scrollbar-width:none!important;}
#chat textarea#message::-webkit-scrollbar{width:0!important;height:0!important;}


/* ===== SENTUAL V4.2.52: scroll long message drafts inside the composer ===== */
#chat textarea#message{
  overflow-y:auto!important;
  overflow-x:hidden!important;
  -webkit-overflow-scrolling:touch!important;
  touch-action:pan-y!important;
  overscroll-behavior-y:contain!important;
  scrollbar-width:none!important;
}
#chat textarea#message::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}


/* ===== SENTUAL V4.2.53: chat text is UI, never native-selectable ===== */
#chat #messages,#chat #messages *,#chat #messages .sentualMessageText,#chat #messages .bubble,#chat #messages .replyQuote,#chat #messages .fileCaption{
  -webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important;cursor:default!important;
}
#chat #messages img,#chat #messages video,#chat #messages svg{-webkit-user-drag:none!important;user-drag:none!important;}

/* ===== SENTUAL V4.2.54: stable large photos + slightly larger mobile chat text ===== */
@media(max-width:820px){
  #messages .bubble.file.attachmentCard.attachment-image{width:min(440px,94%)!important;max-width:94%!important;}
  #messages .bubble.file.attachmentCard.attachment-image .inlineMedia-image,
  #messages .bubble.file.attachmentCard.attachment-image .photoOpen{max-width:100%!important;}
  #messages .bubble:not(.attachmentCard):not(.sentualEmojiOnly):not(.walletTextBubble){font-size:16.5px!important;line-height:1.47!important;}
  #messages .bubble:not(.attachmentCard) .sentualMessageText{font-size:inherit!important;line-height:inherit!important;}
}

/* ===== SENTUAL V4.2.55: outgoing photo alignment + stable optimistic voice commit ===== */
/* V4.2.54 gave photo bubbles a wide fixed card, but portrait media kept its own narrower locked
   width and defaulted to the card's left edge.  Align the media itself to the message side. */
#messages > .bubble.file.attachmentCard.attachment-image.me{
  align-self:flex-end!important;
  margin-left:auto!important;
  margin-right:0!important;
}
#messages > .bubble.file.attachmentCard.attachment-image:not(.me){
  align-self:flex-start!important;
  margin-left:0!important;
  margin-right:auto!important;
}
#messages > .bubble.file.attachmentCard.attachment-image.me > .inlineMedia,
#messages > .bubble.file.attachmentCard.attachment-image.me > .inlineMedia-image,
#messages > .bubble.file.attachmentCard.attachment-image.me .inlineMedia-image{
  margin-left:auto!important;
  margin-right:0!important;
}
#messages > .bubble.file.attachmentCard.attachment-image:not(.me) > .inlineMedia,
#messages > .bubble.file.attachmentCard.attachment-image:not(.me) > .inlineMedia-image,
#messages > .bubble.file.attachmentCard.attachment-image:not(.me) .inlineMedia-image{
  margin-left:0!important;
  margin-right:auto!important;
}
/* Pending and committed voice cards share the same outer geometry so server commit cannot resize
   the row and produce a one-frame bounce. */
#messages > .sentualVoiceBubble.sentualVoicePending,
#messages > .sentualVoiceBubble[data-message-id]{
  contain:layout style!important;
}


/* ===== SENTUAL V4.2.56: stable upload rows + smoother desktop micro-motion ===== */
#messages{overflow-anchor:none!important;}
#messages>.sentualV4256StableUpload{overflow-anchor:none!important;}
/* The optimistic row must reserve its final space throughout encryption/upload. */
#messages>.sentualV4256StableUpload{transition:opacity .18s ease,filter .18s ease!important;}
#messages>.sentualV4256StableUpload.sendFailed{filter:saturate(.82)!important;}

@media(min-width:821px) and (prefers-reduced-motion:no-preference){
  .conversation{transition:background-color .18s ease,transform .22s cubic-bezier(.22,1,.36,1),box-shadow .18s ease!important;}
  .conversation:hover{transform:translate3d(2px,0,0);}
  .menu.show,#attachMenu.show,#messageContextMenu.show{transform-origin:top left;animation:sentualV4256MenuIn .18s cubic-bezier(.22,1,.36,1) both;}
  .profileBox,.managementBox,.sessionsPane,.modalBox{scroll-behavior:smooth;}
  button:not(:disabled){transition:transform .16s cubic-bezier(.22,1,.36,1),opacity .16s ease,box-shadow .18s ease!important;}
  button:not(:disabled):active{transform:scale(.975);}
}
@keyframes sentualV4256MenuIn{from{opacity:0;transform:translate3d(0,-5px,0) scale(.985)}to{opacity:1;transform:translate3d(0,0,0) scale(1)}}


/* ===== SENTUAL V4.2.57: persistent input paint + single outgoing viewport lock ===== */
/* The neutral-input system stores the field's real unfocused paint in these variables. Keep the
   active/focused state visually identical to the resting state instead of allowing WebKit/native
   focus painting (or a stale transparent value) to replace it. */
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]):active,
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]):focus,
input:not([type="range"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="color"]):not([type="button"]):not([type="submit"]):focus-visible,
textarea:active,textarea:focus,textarea:focus-visible{
  background-color:var(--sentual-input-live-bg)!important;
  background-image:var(--sentual-input-live-image)!important;
  filter:none!important;
  opacity:1!important;
}
/* Main chat composer is explicitly backed by theme variables as a final paint fallback. */
#chat .composer textarea#message{
  --sentual-input-live-bg:color-mix(in srgb,var(--bubble) 96%,var(--chat) 4%);
  --sentual-input-live-image:none;
}
:root[data-theme="light"] #chat .composer textarea#message{
  --sentual-input-live-bg:#fff;
  --sentual-input-live-image:none;
}
/* Outgoing scroll corrections are JS-owned. Native anchoring must not add a second compensation. */
#messages.sentualV4257OutgoingLock{overflow-anchor:none!important;scroll-behavior:auto!important;}


/* ===== SENTUAL V4.2.58: geometrically centered header controls + native profile scrolling ===== */
.newChatBtn{
  display:grid!important;
  place-items:center!important;
  align-self:center!important;
  padding:0!important;
  line-height:0!important;
  margin-top:0!important;
  margin-bottom:0!important;
}
.back{
  align-self:center!important;
  padding:0!important;
  line-height:0!important;
  margin-top:0!important;
  margin-bottom:0!important;
}
.newChatBtn svg,.back svg{
  display:block!important;
  width:18px!important;
  height:18px!important;
  margin:0!important;
  overflow:visible!important;
  fill:none!important;
  stroke:currentColor!important;
  stroke-width:1.9!important;
  stroke-linecap:round!important;
  stroke-linejoin:round!important;
}
@media(max-width:820px){
  .back{
    display:grid!important;
    place-items:center!important;
    width:40px!important;
    height:40px!important;
    flex:0 0 40px!important;
  }
}
@media(min-width:821px){
  .profileModal .profileBox{
    scroll-behavior:auto!important;
    overscroll-behavior:contain!important;
  }
}


/* ===== SENTUAL V4.2.59: exact composer attachment icon centering ===== */
#chat .composer>.attach{
  display:grid!important;
  place-items:center!important;
  align-self:flex-end!important;
  width:42px!important;
  height:42px!important;
  flex:0 0 42px!important;
  padding:0!important;
  margin:0!important;
  line-height:0!important;
}
#chat .composer>.attach>svg{
  display:block!important;
  width:18px!important;
  height:18px!important;
  margin:0!important;
  padding:0!important;
  overflow:visible!important;
  fill:none!important;
  stroke:currentColor!important;
  stroke-width:1.9!important;
  stroke-linecap:round!important;
  stroke-linejoin:round!important;
  transform:none!important;
}

/* ===== SENTUAL V4.2.60: visible search-hit emphasis ===== */
@keyframes sentualV4260SearchHit{
  0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 0%,transparent);filter:brightness(1)}
  10%{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 72%,transparent),0 0 0 7px color-mix(in srgb,var(--accent) 18%,transparent);filter:brightness(1.2)}
  70%{box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 62%,transparent),0 0 0 7px color-mix(in srgb,var(--accent) 14%,transparent);filter:brightness(1.16)}
  100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--accent) 0%,transparent);filter:brightness(1)}
}
#messages>.bubble.sentualSearchJumpTarget{
  position:relative!important;
  z-index:3!important;
  animation:sentualV4260SearchHit 1.6s cubic-bezier(.22,.8,.2,1)!important;
}


/* ===== SENTUAL V4.2.62: unified captioned photo bubble ===== */
/* A photo with a caption should read as one message bubble, not as an image plus a detached text pill. */
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia){
  display:flex!important;
  flex-direction:column!important;
  gap:0!important;
  width:max-content!important;
  max-width:min(560px,88%)!important;
  padding:0!important;
  border:0!important;
  border-radius:18px 18px 18px 6px!important;
  overflow:hidden!important;
  background:var(--bubble)!important;
  box-shadow:none!important;
}
#messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia){
  border-radius:18px 18px 6px 18px!important;
  background:var(--mine)!important;
}
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.inlineMedia,
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.inlineMedia-image,
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia) .inlineMedia-image.sentualPhotoPlaceholder{
  align-self:stretch!important;
  margin:0!important;
  border-radius:18px 18px 0 0!important;
}
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia) .photoOpen,
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia) .photoOpen img{
  border-radius:0!important;
}
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.attachmentCaption{
  display:block!important;
  width:auto!important;
  margin:0!important;
  padding:10px 12px 0!important;
  background:transparent!important;
  border:0!important;
  border-radius:0!important;
  color:var(--text)!important;
  font-size:15px!important;
  line-height:1.5!important;
  white-space:pre-wrap!important;
  overflow-wrap:anywhere!important;
}
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.messageStamp,
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.fileMessageTime,
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.attachmentCaption~.messageStamp,
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.attachmentCaption~.fileMessageTime{
  position:static!important;
  inset:auto!important;
  float:none!important;
  clear:both!important;
  display:flex!important;
  align-items:center!important;
  justify-content:flex-end!important;
  align-self:flex-end!important;
  width:max-content!important;
  max-width:100%!important;
  margin:3px 12px 10px auto!important;
  padding:0!important;
  border-radius:0!important;
  background:transparent!important;
  color:var(--muted)!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
  line-height:1.12!important;
}
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.messageStamp>span,
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.fileMessageTime>span{
  color:inherit!important;
}
@media(max-width:820px){
  #messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia){max-width:94%!important;}
  #messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.attachmentCaption{font-size:16px!important;padding:10px 12px 0!important;}
  #messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.messageStamp,
  #messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.fileMessageTime,
  #messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.attachmentCaption~.messageStamp,
  #messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.attachmentCaption~.fileMessageTime{margin:4px 12px 10px auto!important;font-size:11px!important;}
}


/* ===== SENTUAL V4.2.63: palette-synced modal actions + composer submit ===== */
:root{
  --sentual-accent-ink:#fff;
  --sentual-control:color-mix(in srgb,var(--side) 76%,var(--bubble) 24%);
  --sentual-control-strong:color-mix(in srgb,var(--bubble) 72%,var(--side) 28%);
  --sentual-accent-soft:color-mix(in srgb,var(--accent) 13%,var(--side));
  --sentual-accent-border:color-mix(in srgb,var(--accent) 42%,var(--line));
}
:root[data-palette="mono"][data-theme="dark"],
:root[data-palette="obsidian"]{--sentual-accent-ink:#090b0d;}

/* Modal surfaces and neutral actions inherit the active palette instead of old fixed blue/gray values. */
.modal .modalBox,
#confirmModal .confirmBox,
#notificationModal .notificationBox{
  background:var(--side)!important;
  color:var(--text)!important;
  border-color:var(--line)!important;
}
.modal .modalBox p,
#confirmModal #confirmBody{color:var(--muted)!important;}
.modal .modalIcon,
#confirmModal .confirmIcon{
  background:var(--sentual-accent-soft)!important;
  color:var(--accent)!important;
  border:1px solid var(--sentual-accent-border)!important;
}
#confirmModal .confirmNo,
.modal .secondary,
.modal .previewCancel{
  background:var(--sentual-control)!important;
  color:var(--text)!important;
  border-color:var(--line)!important;
}
#confirmModal .confirmNo:hover,
.modal .secondary:hover,
.modal .previewCancel:hover{
  background:var(--sentual-control-strong)!important;
  color:var(--text)!important;
  filter:none!important;
}
/* Normal affirmative popup actions use the palette accent. Destructive warningConfirm remains red. */
#confirmModal .confirmBox.actionConfirm .confirmYes,
#confirmModal .confirmBox:not(.warningConfirm) .confirmYes,
.modal .primary,
.modal .previewSend,
#notificationModal .notificationActions .primary{
  background:var(--accent)!important;
  color:var(--sentual-accent-ink)!important;
  border-color:var(--sentual-accent-border)!important;
  box-shadow:none!important;
}
#confirmModal .confirmBox.actionConfirm .confirmYes:hover,
#confirmModal .confirmBox:not(.warningConfirm) .confirmYes:hover,
.modal .primary:hover,
.modal .previewSend:hover,
#notificationModal .notificationActions .primary:hover{
  background:color-mix(in srgb,var(--accent) 90%,var(--text) 10%)!important;
  color:var(--sentual-accent-ink)!important;
  filter:none!important;
}
#confirmModal .confirmBox.warningConfirm .confirmIcon{
  background:color-mix(in srgb,#d95c63 13%,var(--side))!important;
  color:#d95c63!important;
  border-color:color-mix(in srgb,#d95c63 42%,var(--line))!important;
}

/* Send and Voice are two states of the same themed composer action. */
#chat .composer .send,
#chat #composerSubmit.textMode{
  background:var(--accent)!important;
  color:var(--sentual-accent-ink)!important;
  border-color:var(--sentual-accent-border)!important;
  box-shadow:0 7px 20px color-mix(in srgb,var(--accent) 22%,transparent)!important;
}
#chat #composerSubmit.voiceMode{
  background:var(--sentual-accent-soft)!important;
  color:var(--accent)!important;
  border-color:var(--sentual-accent-border)!important;
  box-shadow:0 7px 20px color-mix(in srgb,var(--accent) 11%,transparent)!important;
}
#chat #composerSubmit.textMode svg,
#chat #composerSubmit.voiceMode svg{stroke:currentColor!important;}
#chat #composerSubmit:not(:disabled):hover{filter:brightness(1.04)!important;}
#chat #composerSubmit:not(:disabled):active{filter:none!important;}


/* ===== SENTUAL V4.2.64: popup menus always above the floating date ===== */
/* chatHead is a stacking context, so raising #chatMenu alone cannot beat the sticky-date layer. */
.chatHead.sentualMenuRaised{z-index:60!important;}
#chatMenu.show{z-index:65!important;}
#messageContextMenu.show,#userContextMenu.show{z-index:65!important;}
.composer.sentualMenuRaised{position:relative;z-index:60!important;}
#attachMenu.show{z-index:65!important;}
.sentualStickyDateBadge{z-index:46!important;}

/* Let the outer bubble own the delete collapse without descendants painting outside it. */
#messages>.bubble.sentualDeleting{overflow:hidden!important;contain:layout paint!important;will-change:height,opacity,transform!important;}


/* ===== SENTUAL V4.2.65: tall-media delete stability ===== */
#messages>.bubble.sentualDeleting{flex:none!important;transform-origin:50% 50%!important;}

/* ===== SENTUAL V4.2.66: message sizing, reactions, context selection ===== */
.sentualMessageScaleRow{margin-top:14px;padding-top:13px;border-top:1px solid var(--line);text-align:left}
.sentualMessageScaleHead{display:flex;align-items:flex-start;justify-content:space-between;gap:14px}
.sentualMessageScaleHead b,.sentualMessageScaleHead small{display:block}.sentualMessageScaleHead b{font-size:11px;color:var(--text)}.sentualMessageScaleHead small{margin-top:3px;color:var(--muted);font-size:9px;line-height:1.45}.sentualMessageScaleHead output{flex:none;min-width:44px;text-align:right;color:var(--accent);font-size:11px;font-weight:700}
.sentualMessageScaleControl{display:grid;grid-template-columns:18px minmax(0,1fr) 24px;align-items:center;gap:8px;margin-top:10px;color:var(--muted);font-size:10px}.sentualMessageScaleControl .large{font-size:16px}.sentualMessageScaleControl input[type="range"]{width:100%;accent-color:var(--accent)}

@media(min-width:821px){
  #messages>.bubble:not(.attachmentCard):not(.sentualEmojiOnly):not(.walletTextBubble):not(.walletMessage){font-size:var(--sentual-msg-font-desktop,15px)!important;padding:var(--sentual-msg-pad-y,10px) var(--sentual-msg-pad-x,13px)!important;border-radius:var(--sentual-msg-radius,17px) var(--sentual-msg-radius,17px) var(--sentual-msg-radius,17px) 5px!important}
  #messages>.bubble.me:not(.attachmentCard):not(.sentualEmojiOnly):not(.walletTextBubble):not(.walletMessage){border-radius:var(--sentual-msg-radius,17px) var(--sentual-msg-radius,17px) 5px var(--sentual-msg-radius,17px)!important}
  #messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.attachmentCaption{font-size:var(--sentual-msg-caption-desktop,15px)!important}
}
@media(max-width:820px){
  #messages>.bubble:not(.attachmentCard):not(.sentualEmojiOnly):not(.walletTextBubble):not(.walletMessage){font-size:var(--sentual-msg-font-mobile,16.5px)!important;padding:var(--sentual-msg-pad-y,10px) var(--sentual-msg-pad-x,13px)!important}
  #messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.attachmentCaption{font-size:var(--sentual-msg-caption-mobile,16px)!important}
}

/* Reactions on image messages stay attached to the same visual side as the media. */
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia{display:flex!important;flex-direction:column!important}
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia.me>.sentualReactionStrip{width:max-content!important;align-self:auto!important;margin:6px 8px 5px auto!important;left:auto!important;right:auto!important;transform:none!important}
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia:not(.me)>.sentualReactionStrip{width:max-content!important;align-self:auto!important;margin:6px auto 5px 8px!important;left:auto!important;right:auto!important;transform:none!important}

/* Hold feedback and selected-message focus. */
#messages>.bubble.sentualContextPressing{transform:translate3d(0,2px,0) scale(.965)!important;filter:brightness(.9)!important;transition:transform .14s cubic-bezier(.2,.8,.2,1),filter .14s ease!important;z-index:25!important}
#messages>.bubble.sentualContextSelected{position:relative!important;z-index:45!important;transform:translate3d(0,-4px,0) scale(1)!important;filter:none!important;opacity:1!important;transition:transform .2s cubic-bezier(.22,1,.36,1),filter .18s ease,opacity .18s ease!important}
#messages>.bubble.sentualContextSelected.sentualContextClosing{transform:translate3d(0,0,0) scale(1)!important}
.messageContextMenu.sentualV4266ContextMenu{z-index:90!important;transform-origin:top center;transition:opacity .16s ease,transform .18s cubic-bezier(.22,1,.36,1)!important}
.messageContextMenu.sentualV4266ContextMenu.sentualV4266ContextEntering{opacity:0!important;transform:translateY(-7px) scale(.985)!important}

@media(max-width:820px){
  #messages.sentualMobileContextMode>*:not(.sentualContextSelected){filter:blur(4px) brightness(.72)!important;opacity:.62!important;transition:filter .18s ease,opacity .18s ease!important}
  #messages.sentualMobileContextMode.sentualContextClosing>*:not(.sentualContextSelected){filter:none!important;opacity:1!important}
  #chat.sentualMobileMessageContext .chatHead,#chat.sentualMobileMessageContext .composer,#chat.sentualMobileMessageContext .pinnedBar,#chat.sentualMobileMessageContext .scrollBottomBtn{filter:blur(3px) brightness(.72)!important;opacity:.68!important;transition:filter .18s ease,opacity .18s ease!important;pointer-events:none!important}
  #chat.sentualMobileMessageContext.sentualContextClosing .chatHead,#chat.sentualMobileMessageContext.sentualContextClosing .composer,#chat.sentualMobileMessageContext.sentualContextClosing .pinnedBar,#chat.sentualMobileMessageContext.sentualContextClosing .scrollBottomBtn{filter:none!important;opacity:1!important}
  .messageContextMenu.sentualV4266ContextMenu{position:fixed!important;max-height:min(46vh,360px)!important;overflow:auto!important;overscroll-behavior:contain!important}
}
@media(min-width:821px){
  #messages.sentualDesktopContextMode>*:not(.sentualContextSelected){filter:brightness(.58)!important;opacity:.7!important;transition:filter .16s ease,opacity .16s ease!important}
  #messages.sentualDesktopContextMode.sentualContextClosing>*:not(.sentualContextSelected){filter:none!important;opacity:1!important}
  #chat.sentualDesktopMessageContext .chatHead,#chat.sentualDesktopMessageContext .composer{filter:brightness(.72)!important;transition:filter .16s ease!important}
  #chat.sentualDesktopMessageContext.sentualContextClosing .chatHead,#chat.sentualDesktopMessageContext.sentualContextClosing .composer{filter:none!important}
}


/* ===== SENTUAL V4.2.67: mobile photo long-press focus + split desktop reaction geometry ===== */
@media(max-width:820px){
  /* Selected photo stays crisp while the rest of the chat is blurred. It shrinks and lifts so the action menu remains on-screen. */
  #messages>.bubble.sentualContextSelected.attachment-image,
  #messages>.bubble.sentualContextSelected.attachment-video{
    transform:translate3d(0,var(--sentual-context-lift,-18px),0) scale(var(--sentual-context-scale,.90))!important;
    transform-origin:center center!important;
    transition:transform .24s cubic-bezier(.22,1,.36,1),filter .18s ease,opacity .18s ease!important;
    will-change:transform!important;
  }
  #messages>.bubble.sentualContextSelected.attachment-image.sentualContextClosing,
  #messages>.bubble.sentualContextSelected.attachment-video.sentualContextClosing{
    transform:translate3d(0,0,0) scale(1)!important;
  }
}

@media(min-width:821px){
  /* Desktop captionless photos only: reaction is on the same bottom line, immediately left of the time/status pill. */
  #messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia{position:relative!important;}
  #messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia>.sentualReactionStrip{
    position:absolute!important;
    left:auto!important;
    right:calc(9px + var(--sentual-media-stamp-width,58px) + 7px)!important;
    bottom:6px!important;
    top:auto!important;
    margin:0!important;
    width:max-content!important;
    max-width:calc(100% - var(--sentual-media-stamp-width,58px) - 32px)!important;
    z-index:13!important;
    transform:none!important;
    align-self:auto!important;
  }
}


/* ===== SENTUAL V4.2.68: safer mobile long-press geometry + left-anchored media reactions + wider text scaling ===== */
@media(max-width:820px){
  #messages.sentualMobileContextMode>*:not(.sentualContextSelected){filter:blur(4px)!important;opacity:1!important;transition:filter .18s ease,opacity .18s ease!important}
  #chat.sentualMobileMessageContext .chatHead,#chat.sentualMobileMessageContext .composer,#chat.sentualMobileMessageContext .pinnedBar,#chat.sentualMobileMessageContext .scrollBottomBtn{filter:blur(3px)!important;opacity:1!important;transition:filter .18s ease,opacity .18s ease!important;pointer-events:none!important}
}

@media(min-width:821px){
  .composer textarea,#message{font-size:var(--sentual-input-font-desktop,15px)!important;line-height:1.48!important}
}
@media(max-width:820px){
  .composer textarea,#message{font-size:var(--sentual-input-font-mobile,16px)!important;line-height:1.48!important}
}
#peerName{font-size:var(--sentual-chat-title-font,14px)!important}
#peerStatus{font-size:var(--sentual-chat-subtitle-font,11px)!important}
#users .userMain>b{font-size:var(--sentual-list-title-font,13px)!important}
#users .userMain>small{font-size:var(--sentual-list-subtitle-font,10px)!important}

#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia>.sentualReactionStrip,
#messages .bubble.file.attachmentCard.attachment-video.sentualCaptionlessMedia>.sentualReactionStrip{
  position:relative!important;left:auto!important;right:auto!important;bottom:auto!important;top:auto!important;
  width:max-content!important;max-width:calc(100% - 18px)!important;margin:6px 0 5px 8px!important;padding:0!important;
  transform:none!important;align-self:flex-start!important;z-index:8!important;
}


/* ===== SENTUAL V4.2.69: desktop reaction below-left + true selected-message blur ===== */
@media(min-width:821px){
  /* A captionless desktop photo keeps its reaction row OUTSIDE the photo bubble,
     directly below it and aligned to the bubble's left edge. */
  #messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia.sentualHasReactions{
    position:relative!important;
    overflow:visible!important;
    margin-bottom:32px!important;
  }
  #messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia>.sentualReactionStrip{
    position:absolute!important;
    left:0!important;
    right:auto!important;
    top:calc(100% + 6px)!important;
    bottom:auto!important;
    margin:0!important;
    padding:0!important;
    width:max-content!important;
    max-width:100%!important;
    align-self:auto!important;
    transform:none!important;
    z-index:14!important;
  }

  /* Desktop context selection: no global tint/color shift. Everything around the selected
     message is softly blurred while the selected bubble and action menu remain crisp. */
  #messages.sentualDesktopContextMode>*:not(.sentualContextSelected){
    filter:blur(3.2px)!important;
    opacity:1!important;
    transition:filter .18s ease,opacity .18s ease!important;
  }
  #messages.sentualDesktopContextMode.sentualContextClosing>*:not(.sentualContextSelected){
    filter:none!important;
    opacity:1!important;
  }
  #chat.sentualDesktopMessageContext .chatHead,
  #chat.sentualDesktopMessageContext .composer,
  #chat.sentualDesktopMessageContext .pinnedBar,
  #chat.sentualDesktopMessageContext .scrollBottomBtn{
    filter:blur(2.6px)!important;
    opacity:1!important;
    transition:filter .18s ease,opacity .18s ease!important;
    pointer-events:none!important;
  }
  #chat.sentualDesktopMessageContext.sentualContextClosing .chatHead,
  #chat.sentualDesktopMessageContext.sentualContextClosing .composer,
  #chat.sentualDesktopMessageContext.sentualContextClosing .pinnedBar,
  #chat.sentualDesktopMessageContext.sentualContextClosing .scrollBottomBtn{
    filter:none!important;
    opacity:1!important;
  }
  #messages>.bubble.sentualContextSelected{
    filter:none!important;
    opacity:1!important;
    transform:translate3d(0,var(--sentual-desktop-context-lift,-8px),0) scale(1)!important;
    transition:transform .23s cubic-bezier(.22,1,.36,1),filter .18s ease,opacity .18s ease!important;
    will-change:transform!important;
  }
  #messages>.bubble.sentualContextSelected.sentualContextClosing{
    transform:translate3d(0,0,0) scale(1)!important;
  }
  .messageContextMenu.sentualV4266ContextMenu{
    transform-origin:top left!important;
  }
}


/* ===== SENTUAL V4.2.71: no dark press flash + stable captionless photo reactions ===== */
/* Long-press feedback must never dim the photo/message. Keep only a tiny motion cue. */
#messages>.bubble.sentualContextPressing{
  filter:none!important;
  opacity:1!important;
  transform:translate3d(0,1px,0) scale(.985)!important;
  transition:transform .15s cubic-bezier(.22,1,.36,1)!important;
}

/* The message-size slider is fully custom/neutral so tapping or dragging never paints a native dark flash. */
#sentualMessageScaleRow,#sentualMessageScaleRow *,
.sentualMessageScaleControl,.sentualMessageScaleControl *{
  -webkit-tap-highlight-color:transparent!important;
}
#sentualMessageScaleRange{
  -webkit-appearance:none!important;appearance:none!important;
  width:100%!important;height:24px!important;margin:0!important;padding:0!important;
  background:transparent!important;border:0!important;outline:0!important;box-shadow:none!important;
  filter:none!important;opacity:1!important;cursor:pointer!important;
}
#sentualMessageScaleRange:active,#sentualMessageScaleRange:focus,#sentualMessageScaleRange:focus-visible{
  background:transparent!important;outline:0!important;box-shadow:none!important;filter:none!important;opacity:1!important;
}
#sentualMessageScaleRange::-webkit-slider-runnable-track{
  height:4px!important;border:0!important;border-radius:999px!important;background:var(--line)!important;box-shadow:none!important;
}
#sentualMessageScaleRange::-webkit-slider-thumb{
  -webkit-appearance:none!important;appearance:none!important;width:16px!important;height:16px!important;margin-top:-6px!important;
  border:0!important;border-radius:50%!important;background:var(--accent)!important;box-shadow:none!important;filter:none!important;
}
#sentualMessageScaleRange:active::-webkit-slider-thumb{filter:none!important;box-shadow:none!important;transform:none!important}
#sentualMessageScaleRange::-moz-range-track{height:4px!important;border:0!important;border-radius:999px!important;background:var(--line)!important;box-shadow:none!important}
#sentualMessageScaleRange::-moz-range-thumb{width:16px!important;height:16px!important;border:0!important;border-radius:50%!important;background:var(--accent)!important;box-shadow:none!important;filter:none!important}

/* Captionless photos use one geometry on mobile and desktop: reaction chips are outside the media,
   directly below and aligned to the photo bubble's LEFT edge. The bubble reserves the measured strip height. */
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia.sentualHasReactions{
  position:relative!important;
  overflow:visible!important;
  margin-bottom:var(--sentual-captionless-reaction-space,40px)!important;
}
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia>.sentualReactionStrip,
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia.me>.sentualReactionStrip,
#messages .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia:not(.me)>.sentualReactionStrip{
  position:absolute!important;
  left:0!important;right:auto!important;
  top:calc(100% + 6px)!important;bottom:auto!important;
  margin:0!important;padding:0!important;
  width:max-content!important;max-width:min(330px,calc(100vw - 28px))!important;
  display:flex!important;flex-wrap:wrap!important;justify-content:flex-start!important;align-items:center!important;
  align-self:auto!important;transform:none!important;z-index:18!important;
  overflow:visible!important;
}


/* ===== SENTUAL V4.2.72: interface-wide text sizing without layout zoom ===== */
/* Main/sidebar */
.brandName{font-size:var(--sentual-ui-14,14px)!important}
.search input{font-size:var(--sentual-ui-12,12px)!important}
.sectionTitle{font-size:var(--sentual-tiny-10,10px)!important}
#users .userMain>b{font-size:var(--sentual-list-title-font,13px)!important}
#users .userMain>small,.user small{font-size:var(--sentual-list-subtitle-font,10px)!important}
.noChats{font-size:var(--sentual-ui-11,11px)!important}
.noChats button,.sideFoot button{font-size:var(--sentual-ui-11,11px)!important}
.empty h2{font-size:var(--sentual-ui-title-20,19px)!important}
.empty p{font-size:var(--sentual-ui-11,11px)!important}

/* Chat chrome / composer / pinned UI */
#peerName,.peer b{font-size:var(--sentual-chat-title-font,14px)!important}
#peerStatus,.peer small{font-size:var(--sentual-chat-subtitle-font,10px)!important}
.pinnedBar small{font-size:var(--sentual-tiny-9,9px)!important}
.pinnedBar b{font-size:var(--sentual-ui-11,11px)!important}
.blockedNotice h2{font-size:var(--sentual-ui-title-18,18px)!important}
.blockedNotice p,.blockedComposer{font-size:var(--sentual-ui-11,11px)!important}
.toast{font-size:var(--sentual-ui-11,11px)!important}

/* Menus and context menus */
.menu button,.contextMenu button,.messageContextMenu button,.userContextMenu button,.attachMenu button,
.langMenu button,.langPicker>button{font-size:var(--sentual-ui-11,11px)!important}
.messageContextTime,.contextTime{font-size:var(--sentual-tiny-9,9px)!important}
.searchGroupTitle{font-size:var(--sentual-tiny-9,9px)!important}

/* Generic modal typography. Dimensions are intentionally unchanged; only type scales. */
.modalBox h2,.confirmBox h2{font-size:var(--sentual-ui-title-20,20px)!important}
.modalBox p,.confirmBox p,.hint{font-size:var(--sentual-ui-11,11px)!important}
.choice b{font-size:var(--sentual-ui-12,12px)!important}
.choice small{font-size:var(--sentual-tiny-9,9px)!important}
.primary,.secondary,.textBtn,.tabs button,.confirmActions button,.dropCancel,
.walletAdd,.walletSend,.previewCancel,.previewSend{font-size:var(--sentual-ui-11,11px)!important}
.words div{font-size:var(--sentual-ui-11,11px)!important}

/* Profile and its embedded settings */
.profileTop h2{font-size:var(--sentual-ui-title-20,20px)!important}
.profileTop p{font-size:var(--sentual-ui-11,11px)!important}
.shareCode small{font-size:var(--sentual-tiny-9,9px)!important}
.shareCode b{font-size:var(--sentual-ui-12,12px)!important}
.profileModal .shareCode>button,.shareCode button,.profileInlineAction{font-size:var(--sentual-tiny-10,10px)!important}
.profileRows div{font-size:var(--sentual-ui-10,10px)!important}
.profileVersion{font-size:var(--sentual-tiny-9,9px)!important}
.sentualSettingsTitle{font-size:var(--sentual-tiny-10,10px)!important}
.sentualThemePreset,.sentualTapMode button,.sentualDoubleTapSettings label{font-size:var(--sentual-tiny-9,9px)!important}
.sentualMessageScaleHead b{font-size:var(--sentual-ui-11,11px)!important}
.sentualMessageScaleHead small{font-size:var(--sentual-tiny-9,9px)!important}
.sentualMessageScaleHead output{font-size:var(--sentual-ui-11,11px)!important}
.sentualMessageScaleControl{font-size:var(--sentual-ui-10,10px)!important}
.sentualMessageScaleControl .large{font-size:var(--sentual-ui-16,16px)!important}

/* Sessions / account / email settings */
.sessionsHeader h2{font-size:var(--sentual-ui-title-20,20px)!important}
.sessionsHeader p,.emailSettingsLabel,.emailCodeDestination{font-size:var(--sentual-ui-10,10px)!important}
.sessionInfo b{font-size:var(--sentual-ui-11,11px)!important}
.sessionInfo small{font-size:var(--sentual-tiny-9,9px)!important}

/* Conversation settings */
.sentualConversationSettingsHead h2{font-size:var(--sentual-ui-title-18,18px)!important}
.sentualConversationSettingsHead p{font-size:var(--sentual-ui-10,10px)!important}
.sentualSettingCardTitle b{font-size:var(--sentual-ui-12,12px)!important}
.sentualSettingCardTitle small{font-size:var(--sentual-tiny-9,9px)!important}
.sentualSegmented button,.sentualDefaultReactionRow,.sentualReactionFieldLabel{font-size:var(--sentual-ui-10,10px)!important}
.sentualPremiumOnly{font-size:var(--sentual-tiny-9,9px)!important}

/* Attachments / previews */
.filePreviewHeader .previewTitle,.previewTitle{font-size:var(--sentual-ui-16,16px)!important}
.previewSubtitle{font-size:var(--sentual-ui-10,10px)!important}
.attachmentMetaText b{font-size:var(--sentual-ui-11,11px)!important}
.attachmentMetaText small,.captionOptional{font-size:var(--sentual-tiny-9,9px)!important}

/* Statistics and secondary pages */
.statsTotal span{font-size:var(--sentual-ui-11,11px)!important}
.statsTotal b{font-size:var(--sentual-ui-24,24px)!important}
.statsTable th,.statsTable td{font-size:var(--sentual-ui-11,11px)!important}
.statsTable thead th{font-size:var(--sentual-tiny-9,9px)!important}

/* Text-entry controls: desktop follows the UI scale; mobile never drops below 16px (prevents browser zoom). */
@media(min-width:821px){
  .bigInput,.captionInput,.passwordInput,.codeInput,.broadcastCaption,.emailSettingsBox input,.walletBox input,.walletBox textarea{font-size:var(--sentual-ui-12,12px)!important}
}
@media(max-width:820px){
  .bigInput,.captionInput,.passwordInput,.codeInput,.broadcastCaption,.emailSettingsBox input,.walletBox input,.walletBox textarea{font-size:max(16px,var(--sentual-ui-12,12px))!important}
}

/* ===== SENTUAL V4.2.73: right-aligned message actions + transparent media hold feedback ===== */
#messages>.bubble{
  -webkit-tap-highlight-color:transparent!important;
}
#messages>.bubble.attachment-image,
#messages>.bubble.attachment-image .inlineMedia,
#messages>.bubble.attachment-image .inlineMedia-image,
#messages>.bubble.attachment-image .photoOpen,
#messages>.bubble.attachment-image .photoOpen:active,
#messages>.bubble.attachment-image .photoOpen:focus,
#messages>.bubble.attachment-image .photoOpen:focus-visible,
#messages>.bubble.attachment-image img,
#messages>.bubble.attachment-image.sentualContextPressing,
#messages>.bubble.attachment-image.sentualContextSelected{
  -webkit-tap-highlight-color:transparent!important;
  background-color:transparent!important;
  outline:0!important;
  box-shadow:none!important;
  filter:none!important;
  opacity:1!important;
}
#messages>.bubble.attachment-image .photoOpen,
#messages>.bubble.attachment-image .inlineMedia,
#messages>.bubble.attachment-image .inlineMedia-image{
  transition:background-color .22s ease,opacity .22s ease,filter .22s ease!important;
}
/* While the long-press timer is charging, keep the photo visually unchanged and use only a tiny soft motion. */
#messages>.bubble.sentualContextPressing{
  background-color:inherit!important;
  filter:none!important;
  opacity:1!important;
  transform:translate3d(0,.5px,0) scale(.994)!important;
  transition:transform .22s cubic-bezier(.22,1,.36,1)!important;
}
#messages>.bubble.attachment-image.sentualContextPressing{
  background:transparent!important;
}
.messageContextMenu.sentualV4266ContextMenu{
  transform-origin:top right!important;
}

@media(max-width:820px){
  #messages>.bubble{
    -webkit-touch-callout:none!important;
  }
  /* The selected media is dynamically scaled/lifted by JS so the action menu ends >=50px above the viewport bottom. */
  #messages>.bubble.sentualContextSelected.attachment-image,
  #messages>.bubble.sentualContextSelected.attachment-video{
    transform:translate3d(0,var(--sentual-context-lift,-18px),0) scale(var(--sentual-context-scale,.90))!important;
    transform-origin:center center!important;
    transition:transform .28s cubic-bezier(.22,1,.36,1),filter .2s ease,opacity .2s ease!important;
    will-change:transform!important;
  }
  #messages>.bubble.sentualContextSelected.attachment-image.sentualContextClosing,
  #messages>.bubble.sentualContextSelected.attachment-video.sentualContextClosing{
    transform:translate3d(0,0,0) scale(1)!important;
    transition:transform .24s cubic-bezier(.22,1,.36,1)!important;
  }
}

/* ===== SENTUAL V4.2.74: media-width reaction anchoring + smoother GPU-only delete ===== */
#messages{position:relative!important;}
#messages>.bubble.sentualDeletingV4274{
  overflow:hidden!important;
  will-change:transform,opacity!important;
  backface-visibility:hidden!important;
  -webkit-backface-visibility:hidden!important;
}

/* Captionless portrait images live inside a wider message row. Reactions must follow the actual
   visible image holder, not that wider row. Same rule on desktop and mobile. */
#messages>.bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia.sentualHasReactions{
  position:relative!important;
  overflow:visible!important;
  margin-bottom:var(--sentual-captionless-reaction-space,38px)!important;
}
#messages>.bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia>.sentualReactionStrip,
#messages>.bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia.me>.sentualReactionStrip,
#messages>.bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia:not(.me)>.sentualReactionStrip{
  position:absolute!important;
  left:var(--sentual-captionless-media-left,0px)!important;
  right:auto!important;
  top:calc(100% + 6px)!important;
  bottom:auto!important;
  margin:0!important;
  padding:0!important;
  width:max-content!important;
  max-width:var(--sentual-captionless-media-width,100%)!important;
  display:flex!important;
  flex-wrap:wrap!important;
  justify-content:flex-start!important;
  align-items:center!important;
  transform:none!important;
  z-index:18!important;
}

@media(min-width:821px){
  .messageContextMenu.sentualV4266ContextMenu{transform-origin:top right!important;}
}

/* ===== SENTUAL V4.2.75: deletion stays in-flow until the fade finishes ===== */
#messages>.bubble.sentualDeletingV4275{
  position:relative!important;
  pointer-events:none!important;
  will-change:transform,opacity!important;
  backface-visibility:hidden!important;
  -webkit-backface-visibility:hidden!important;
  contain:none!important;
}

/* ===== SENTUAL V4.2.76: navigation paint stability ===== */
#messages.sentualV4276ChatEntering>*{visibility:hidden!important}
.profileBox,.managementBox,.sessionsPane,.modalBox{scroll-behavior:auto!important}
@media(max-width:820px){
  #messageContextMenu{will-change:transform,opacity;}
}

/* ===== SENTUAL V4.2.77: locked context viewport + complete blur + selected-row lift ===== */
html.sentualV4277ContextLocked #messages{
  overscroll-behavior:none!important;
  scroll-behavior:auto!important;
}
html.sentualV4277ContextLocked #chat{
  overscroll-behavior:none!important;
}

/* V4.2.73 intentionally forced image bubbles to filter:none; that also made unselected media stay
   sharp behind the context sheet. Context mode has higher priority: every non-selected row blurs,
   including photos, videos, files, voice/file cards and their descendants. */
@media(max-width:820px){
  #messages.sentualMobileContextMode>.bubble:not(.sentualContextSelected),
  #messages.sentualMobileContextMode>.bubble.attachment-image:not(.sentualContextSelected),
  #messages.sentualMobileContextMode>.bubble.attachment-video:not(.sentualContextSelected),
  #messages.sentualMobileContextMode>.bubble.file:not(.sentualContextSelected),
  #messages.sentualMobileContextMode>.bubble.attachmentCard:not(.sentualContextSelected){
    filter:blur(4px)!important;
    opacity:1!important;
  }
  #messages>.bubble.sentualContextSelected{
    transform:translate3d(0,var(--sentual-context-lift,-4px),0) scale(var(--sentual-context-scale,1))!important;
    transform-origin:center center!important;
    filter:none!important;
    opacity:1!important;
    transition:transform .28s cubic-bezier(.22,1,.36,1),filter .2s ease,opacity .2s ease!important;
    will-change:transform!important;
  }
  #messages>.bubble.sentualContextSelected.sentualContextClosing{
    transform:translate3d(0,0,0) scale(1)!important;
    transition:transform .25s cubic-bezier(.22,1,.36,1)!important;
  }
  html.sentualV4277ContextLocked #messages{touch-action:none!important;}
}
@media(min-width:821px){
  #messages.sentualDesktopContextMode>.bubble:not(.sentualContextSelected),
  #messages.sentualDesktopContextMode>.bubble.attachment-image:not(.sentualContextSelected),
  #messages.sentualDesktopContextMode>.bubble.attachment-video:not(.sentualContextSelected),
  #messages.sentualDesktopContextMode>.bubble.file:not(.sentualContextSelected),
  #messages.sentualDesktopContextMode>.bubble.attachmentCard:not(.sentualContextSelected){
    filter:blur(3.2px)!important;
    opacity:1!important;
  }
}

/* Swipe-to-dismiss glass follows --sentual-viewer-* variables updated from the drag distance. */
.mediaViewer{
  --sentual-viewer-blur:22px;
  --sentual-viewer-backdrop-blur:16px;
  --sentual-viewer-bg-alpha:.60;
  --sentual-viewer-backdrop-alpha:.50;
  background:rgba(6,10,14,var(--sentual-viewer-bg-alpha))!important;
  backdrop-filter:blur(var(--sentual-viewer-blur)) saturate(.92)!important;
  -webkit-backdrop-filter:blur(var(--sentual-viewer-blur)) saturate(.92)!important;
  transition:opacity .27s cubic-bezier(.22,1,.36,1),background-color .08s linear,backdrop-filter .08s linear,-webkit-backdrop-filter .08s linear!important;
}
.mediaViewer::backdrop{
  background:rgba(3,7,10,var(--sentual-viewer-backdrop-alpha))!important;
  backdrop-filter:blur(var(--sentual-viewer-backdrop-blur))!important;
  -webkit-backdrop-filter:blur(var(--sentual-viewer-backdrop-blur))!important;
}


/* ===== SENTUAL V4.2.79: desktop scroll stability ===== */
@media(min-width:821px){
  #messages{overflow-anchor:none!important;scroll-behavior:auto!important;}
}

/* ===== SENTUAL V4.2.81: one stable transform for selected messages ===== */
@media(max-width:820px){
  #messages>.bubble.sentualContextSelected{
    transform:translate3d(0,var(--sentual-context-lift,0px),0) scale(var(--sentual-context-scale,1))!important;
    transform-origin:top right!important;
    transition:transform .26s cubic-bezier(.22,1,.36,1),filter .18s ease,opacity .18s ease!important;
    will-change:transform!important;
  }
  #messages>.bubble.sentualContextSelected.sentualContextClosing{
    transform:translate3d(0,0,0) scale(1)!important;
  }
}
@media(min-width:821px){
  #messages>.bubble.sentualContextSelected{
    transform:translate3d(0,var(--sentual-desktop-context-lift,0px),0) scale(1)!important;
    transform-origin:top right!important;
    transition:transform .22s cubic-bezier(.22,1,.36,1),filter .16s ease,opacity .16s ease!important;
    will-change:transform!important;
  }
  #messages>.bubble.sentualContextSelected.sentualContextClosing{
    transform:translate3d(0,0,0) scale(1)!important;
  }
}


/* ===== SENTUAL V4.2.84: pinned selected-message compositor layer ===== */
#messages>.sentualV4282ContextPlaceholder{
  padding:0!important;border:0!important;margin:0!important;background:transparent!important;box-shadow:none!important;opacity:0!important;filter:none!important;
}
#messages>.bubble.sentualV4282Pinned{
  box-sizing:border-box!important;
  backface-visibility:hidden!important;-webkit-backface-visibility:hidden!important;
  -webkit-font-smoothing:antialiased!important;
  filter:none!important;opacity:1!important;
}
/* Older selected-state rules must never compose a second transform on the pinned row. */
#messages>.bubble.sentualV4282Pinned.sentualContextSelected,
#messages>.bubble.sentualV4282Pinned.sentualContextSelected.sentualContextClosing{
  transform:var(--sentual-v4282-transform,none);
}

/* ===== SENTUAL V4.2.88: final context-sheet geometry ===== */
#messageContextMenu.sentualV4288ContextMenu{
  position:fixed!important;
  z-index:120!important;
  transform:none!important;
  transform-origin:top right!important;
  animation:none!important;
  margin:0!important;
}
#messages>.bubble.sentualV4288Selected{
  filter:none!important;
  opacity:1!important;
  backface-visibility:hidden!important;
  -webkit-backface-visibility:hidden!important;
}
/* Context background is blur-only: no dim/brightness/color flash. */
@media(max-width:820px){
  #messages.sentualMobileContextMode>.bubble:not(.sentualV4288Selected){filter:blur(4px)!important;opacity:1!important;}
  #chat.sentualMobileMessageContext .chatHead,
  #chat.sentualMobileMessageContext .composer,
  #chat.sentualMobileMessageContext .pinnedBar,
  #chat.sentualMobileMessageContext .scrollBottomBtn{filter:blur(3px)!important;opacity:1!important;}
  html.sentualV4288ContextLocked #messages{touch-action:none!important;overscroll-behavior:none!important;}
}
@media(min-width:821px){
  #messages.sentualDesktopContextMode>.bubble:not(.sentualV4288Selected){filter:blur(3.2px)!important;opacity:1!important;}
  #chat.sentualDesktopMessageContext .chatHead,
  #chat.sentualDesktopMessageContext .composer{filter:blur(2.4px)!important;opacity:1!important;}
}

/* ===== SENTUAL V4.2.92: single-owner message context ===== */
#chat.sentualV4292Mode{isolation:isolate}
#chat>.sentualV4292Overlay{
  position:absolute!important;inset:0!important;z-index:100001!important;
  background:rgba(4,10,15,.14)!important;
  -webkit-backdrop-filter:blur(5px)!important;backdrop-filter:blur(5px)!important;
  pointer-events:auto!important;
}
#messages.sentualV4292ScrollLocked{
  overflow-y:hidden!important;overscroll-behavior:none!important;scrollbar-gutter:stable!important;
}
#messages>.bubble.sentualV4292Selected{
  z-index:100002!important;filter:none!important;opacity:1!important;isolation:isolate!important;
}
#messageContextMenu.sentualV4292Menu{
  position:fixed!important;z-index:100003!important;transform:none!important;animation:none!important;
}


/* ===== SENTUAL V4.2.93: smooth media-viewer close glass =====
   The dialog already stays mounted for the close animation; fade the actual
   backdrop blur/background during that window instead of dropping it on remove. */
.mediaViewer{
  transition:opacity .27s cubic-bezier(.22,1,.36,1),background-color .27s cubic-bezier(.22,1,.36,1),backdrop-filter .27s cubic-bezier(.22,1,.36,1),-webkit-backdrop-filter .27s cubic-bezier(.22,1,.36,1)!important;
}
.mediaViewer::backdrop{
  transition:background-color .27s cubic-bezier(.22,1,.36,1),backdrop-filter .27s cubic-bezier(.22,1,.36,1),-webkit-backdrop-filter .27s cubic-bezier(.22,1,.36,1)!important;
}
.mediaViewer.mediaViewerClosing{
  --sentual-viewer-blur:0px!important;
  --sentual-viewer-backdrop-blur:0px!important;
  --sentual-viewer-bg-alpha:0!important;
  --sentual-viewer-backdrop-alpha:0!important;
  background:rgba(6,10,14,0)!important;
  backdrop-filter:blur(0px) saturate(.92)!important;
  -webkit-backdrop-filter:blur(0px) saturate(.92)!important;
}
.mediaViewer.mediaViewerClosing::backdrop{
  background:rgba(3,7,10,0)!important;
  backdrop-filter:blur(0px)!important;
  -webkit-backdrop-filter:blur(0px)!important;
}



/* ===== SENTUAL V4.2.95: one desktop scroll owner ===== */
@media(min-width:821px){#messages{overflow-anchor:none!important;scroll-behavior:auto!important;}}

/* ===== SENTUAL V4.2.98: stable chat viewport + animated new-chat + progressive avatars ===== */
#messages{
  overflow-anchor:none!important;
  scrollbar-gutter:stable!important;
  overscroll-behavior:contain!important;
}

/* The + control has a short tactile motion; opening the sheet no longer feels like a hard cut. */
.newChatBtn.sentualV4298Pulse{animation:sentualV4298PlusPulse .34s cubic-bezier(.22,1,.36,1)}
.newChatBtn.sentualV4298Pulse svg{animation:sentualV4298PlusGlyph .34s cubic-bezier(.22,1,.36,1)}
@keyframes sentualV4298PlusPulse{
  0%{transform:scale(1);filter:brightness(1)}
  42%{transform:scale(.89);filter:brightness(1.16)}
  100%{transform:scale(1);filter:brightness(1)}
}
@keyframes sentualV4298PlusGlyph{
  0%{transform:rotate(0deg) scale(1)}
  48%{transform:rotate(92deg) scale(.9)}
  100%{transform:rotate(180deg) scale(1)}
}
#newChatModal.sentualV4298ModalEnter{animation:sentualV4298ModalFade .24s cubic-bezier(.22,1,.36,1) both}
#newChatModal.sentualV4298ModalEnter>.modalBox{animation:sentualV4298ModalCard .3s cubic-bezier(.22,1,.36,1) both}
#newChatModal.sentualV4298ModalLeave{animation:sentualV4298ModalFadeOut .18s ease both}
#newChatModal.sentualV4298ModalLeave>.modalBox{animation:sentualV4298ModalCardOut .18s ease both}
@keyframes sentualV4298ModalFade{from{opacity:0;backdrop-filter:blur(0);-webkit-backdrop-filter:blur(0)}to{opacity:1;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}}
@keyframes sentualV4298ModalCard{from{opacity:0;transform:translate3d(0,12px,0) scale(.965)}to{opacity:1;transform:translate3d(0,0,0) scale(1)}}
@keyframes sentualV4298ModalFadeOut{from{opacity:1}to{opacity:0}}
@keyframes sentualV4298ModalCardOut{from{opacity:1;transform:translate3d(0,0,0) scale(1)}to{opacity:0;transform:translate3d(0,7px,0) scale(.98)}}

/* Premium/official profile photos: tiny preview first, full image crossfades after decode. */
.sentualAvatarProgressive{
  position:relative!important;
  overflow:hidden!important;
  isolation:isolate!important;
  background-image:var(--sentual-avatar-current,var(--sentual-avatar-fallback))!important;
  background-size:cover!important;
  background-position:center!important;
}
.sentualAvatarProgressive::before,.sentualAvatarProgressive::after{
  content:"";position:absolute;inset:-4px;pointer-events:none;border-radius:inherit;background-position:center;background-repeat:no-repeat;background-size:cover;
}
.sentualAvatarProgressive::before{
  z-index:0;background-image:var(--sentual-avatar-preview),var(--sentual-avatar-fallback);filter:blur(4.2px) saturate(.9);transform:scale(1.09);opacity:1;
  transition:opacity .34s ease,filter .34s ease,transform .34s cubic-bezier(.22,1,.36,1);
}
.sentualAvatarProgressive::after{
  z-index:1;background-image:var(--sentual-avatar-full);opacity:0;transform:scale(1.035);
  transition:opacity .36s cubic-bezier(.22,1,.36,1),transform .42s cubic-bezier(.22,1,.36,1);
}
.sentualAvatarProgressive.sentualAvatarFull::before{opacity:0;filter:blur(1px);transform:scale(1.015)}
.sentualAvatarProgressive.sentualAvatarFull::after{opacity:1;transform:scale(1)}
@media (prefers-reduced-motion:reduce){
  .newChatBtn.sentualV4298Pulse,#newChatModal.sentualV4298ModalEnter,#newChatModal.sentualV4298ModalEnter>.modalBox,#newChatModal.sentualV4298ModalLeave,#newChatModal.sentualV4298ModalLeave>.modalBox{animation-duration:.01ms!important}
  .sentualAvatarProgressive::before,.sentualAvatarProgressive::after{transition-duration:.01ms!important}
}


/* ===== SENTUAL V4.2.99: caption bidi parity with the message composer ===== */
.captionInput[dir="auto"],.broadcastCaption[dir="auto"],#messages .attachmentCaption[dir="auto"],#messages .fileCaption[dir="auto"]{
  unicode-bidi:plaintext!important;
  text-align:start!important;
}
.captionInput[dir="auto"]{
  padding-inline-start:13px!important;
  padding-inline-end:58px!important;
}
.captionWrap.sentualCaptionRtl .captionOptional{right:auto!important;left:11px!important;}
.captionWrap.sentualCaptionLtr .captionOptional,.captionWrap:not(.sentualCaptionRtl) .captionOptional{left:auto!important;right:11px!important;}


/* ===== SENTUAL V4.3.00: reliable premium avatar reveal ===== */
.sentualAvatarProgressive{background-image:var(--sentual-avatar-current,var(--sentual-avatar-fallback))!important}
.sentualAvatarProgressive::after{content:none!important;display:none!important}
.sentualAvatarProgressive.sentualAvatarFull::before,.sentualAvatarProgressive.sentualAvatarLoadFailed::before{opacity:0;filter:blur(0);transform:scale(1)}
.sentualAvatarProgressive.sentualAvatarFull{background-image:var(--sentual-avatar-current,var(--sentual-avatar-full),var(--sentual-avatar-fallback))!important}


/* ===== SENTUAL V4.3.01: avatar photo is authoritative; blur is overlay-only ===== */
.sentualAvatarProgressive{
  background-image:var(--sentual-avatar-full),var(--sentual-avatar-fallback)!important;
  background-size:cover,cover!important;
  background-position:center,center!important;
  background-repeat:no-repeat,no-repeat!important;
}
.sentualAvatarProgressive::before{
  content:""!important;
  display:block!important;
  background-image:var(--sentual-avatar-preview),var(--sentual-avatar-fallback)!important;
  opacity:1;
  filter:blur(4.2px) saturate(.9);
  transform:scale(1.09);
  transition:opacity .34s ease,filter .34s ease,transform .34s cubic-bezier(.22,1,.36,1)!important;
}
.sentualAvatarProgressive::after{content:none!important;display:none!important}
.sentualAvatarProgressive.sentualAvatarFull::before{opacity:0!important;filter:blur(1px)!important;transform:scale(1.015)!important}
.sentualAvatarProgressive.sentualAvatarLoadFailed::before{opacity:1!important;filter:blur(4.2px) saturate(.9)!important;transform:scale(1.09)!important}

/* ===== SENTUAL V4.3.03: direct avatar photo rendering ===== */
.sentualAvatarStable.avatarPhoto,
#users .avatar.avatarPhoto,
#peerAvatar.avatarPhoto,
#myAvatar.avatarPhoto,
#profileAvatar.avatarPhoto{
  background-size:cover!important;
  background-position:center!important;
  background-repeat:no-repeat!important;
  image-rendering:auto!important;
}
.sentualAvatarStable.avatarPhoto::before,.sentualAvatarStable.avatarPhoto::after{content:none!important;display:none!important;}


/* ===== SENTUAL V4.3.04: scanner permission reveal ===== */
#scannerModal .scannerBox{transition:transform .26s cubic-bezier(.22,1,.36,1),opacity .22s ease}
#scannerModal #qr-reader{min-height:230px;display:grid;place-items:center;transition:opacity .32s ease,filter .38s cubic-bezier(.22,1,.36,1),transform .38s cubic-bezier(.22,1,.36,1);will-change:opacity,filter,transform}
#scannerModal.sentualV4304CameraPending #qr-reader{opacity:.52;filter:blur(7px) saturate(.82);transform:scale(.985)}
#scannerModal.sentualV4304CameraReady #qr-reader{opacity:1;filter:blur(0) saturate(1);transform:scale(1)}
#scannerModal #qr-reader video{opacity:.08;filter:blur(8px);transform:scale(1.025);transition:opacity .34s ease,filter .4s cubic-bezier(.22,1,.36,1),transform .42s cubic-bezier(.22,1,.36,1)!important;will-change:opacity,filter,transform}
#scannerModal.sentualV4304CameraReady #qr-reader video{opacity:1;filter:blur(0);transform:scale(1)}
#scannerModal .sentualV4304ScannerLoading{padding:76px 20px;opacity:.72;animation:sentualV4304ScannerPulse 1.05s ease-in-out infinite alternate}
@keyframes sentualV4304ScannerPulse{from{opacity:.42;transform:scale(.985)}to{opacity:.82;transform:scale(1)}}
@media(prefers-reduced-motion:reduce){#scannerModal .scannerBox,#scannerModal #qr-reader,#scannerModal #qr-reader video{transition-duration:.01ms!important}.sentualV4304ScannerLoading{animation:none!important}}


/* ===== SENTUAL V4.3.07: viewer controls + shared popup motion + PIN management ===== */
.mediaViewer .mediaViewerActions{
  opacity:var(--sentual-viewer-actions-opacity,var(--sentual-media-opacity,1))!important;
  transform:translate3d(0,0,0)!important;
  transition:opacity .22s cubic-bezier(.22,1,.36,1),transform .24s cubic-bezier(.22,1,.36,1)!important;
  will-change:opacity,transform;
}
.mediaViewer.mediaViewerClosing .mediaViewerActions,.mediaViewer.mediaDismissed .mediaViewerActions{opacity:0!important;transform:translate3d(0,8px,0)!important;pointer-events:none!important;}
.sentualV4307PinActions{margin-top:16px!important;}
.sentualV4307PinFlow .sentualPinKeypad{margin-top:2px!important;width:min(300px,100%)!important;gap:10px 14px!important;}
.sentualV4307PinFlow .sentualPinKey{width:68px!important;height:68px!important;font-size:28px!important;}
.sentualV4307PinFlow .sentualPinDots{margin:10px auto 14px!important;}

.modal.sentualV4307PopupOpening{animation:sentualV4307PopupFadeIn .24s cubic-bezier(.22,1,.36,1) both!important;}
.modal.sentualV4307PopupOpening>.modalBox{animation:sentualV4307PopupCardIn .3s cubic-bezier(.22,1,.36,1) both!important;}
.modal.sentualV4307PopupClosing{pointer-events:none!important;animation:sentualV4307PopupFadeOut .19s ease both!important;}
.modal.sentualV4307PopupClosing>.modalBox{animation:sentualV4307PopupCardOut .19s ease both!important;}
.photoEditModal.sentualV4307PopupOpening,.avatarCropModal.sentualV4307PopupOpening{animation:sentualV4307PopupFadeIn .24s cubic-bezier(.22,1,.36,1) both!important;}
.photoEditModal.sentualV4307PopupOpening>*,.avatarCropModal.sentualV4307PopupOpening>*{animation:sentualV4307PopupCardIn .3s cubic-bezier(.22,1,.36,1) both!important;}
.photoEditModal.sentualV4307PopupClosing,.avatarCropModal.sentualV4307PopupClosing{pointer-events:none!important;animation:sentualV4307PopupFadeOut .19s ease both!important;}
.photoEditModal.sentualV4307PopupClosing>*,.avatarCropModal.sentualV4307PopupClosing>*{animation:sentualV4307PopupCardOut .19s ease both!important;}
@keyframes sentualV4307PopupFadeIn{from{opacity:0;backdrop-filter:blur(0);-webkit-backdrop-filter:blur(0)}to{opacity:1}}
@keyframes sentualV4307PopupCardIn{from{opacity:0;transform:translate3d(0,12px,0) scale(.966)}to{opacity:1;transform:translate3d(0,0,0) scale(1)}}
@keyframes sentualV4307PopupFadeOut{from{opacity:1}to{opacity:0}}
@keyframes sentualV4307PopupCardOut{from{opacity:1;transform:translate3d(0,0,0) scale(1)}to{opacity:0;transform:translate3d(0,7px,0) scale(.982)}}
@media(prefers-reduced-motion:reduce){
  .modal.sentualV4307PopupOpening,.modal.sentualV4307PopupOpening>.modalBox,.modal.sentualV4307PopupClosing,.modal.sentualV4307PopupClosing>.modalBox,
  .photoEditModal.sentualV4307PopupOpening,.photoEditModal.sentualV4307PopupOpening>*,.photoEditModal.sentualV4307PopupClosing,.photoEditModal.sentualV4307PopupClosing>*,
  .avatarCropModal.sentualV4307PopupOpening,.avatarCropModal.sentualV4307PopupOpening>*,.avatarCropModal.sentualV4307PopupClosing,.avatarCropModal.sentualV4307PopupClosing>*{animation-duration:.01ms!important;}
}


/* ===== SENTUAL V4.3.11: history spinner belongs to the date pill ===== */
#messages>.sentualDateSeparator{
  display:inline-flex!important;
  direction:ltr!important;
  align-items:center!important;
  justify-content:center!important;
  width:max-content!important;
  max-width:calc(100% - 28px)!important;
  transition:padding .24s cubic-bezier(.22,1,.36,1),transform .24s cubic-bezier(.22,1,.36,1)!important;
}

#messages>.sentualDateSeparator>.sentualDateText{
  display:inline-block!important;
  unicode-bidi:plaintext!important;
  white-space:nowrap!important;
}
#messages>.sentualDateSeparator>.sentualHistoryLoader{
  position:static!important;
  inset:auto!important;
  z-index:auto!important;
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  flex:0 0 14px!important;
  width:14px!important;
  height:14px!important;
  margin:0 5px 0 0!important;
  padding:0!important;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
  color:currentColor!important;
  opacity:.72!important;
  overflow:hidden!important;
  pointer-events:none!important;
  transform:scale(1)!important;
  transform-origin:center!important;
  transition:width .24s cubic-bezier(.22,1,.36,1),flex-basis .24s cubic-bezier(.22,1,.36,1),margin-right .24s cubic-bezier(.22,1,.36,1),opacity .18s ease,transform .24s cubic-bezier(.22,1,.36,1)!important;
}
#messages>.sentualDateSeparator>.sentualHistoryLoader.hidden{
  display:inline-flex!important;
  flex-basis:0!important;
  width:0!important;
  margin-right:0!important;
  opacity:0!important;
  transform:scale(.62)!important;
}
#messages>.sentualDateSeparator>.sentualHistoryLoader .iosSpinner{
  flex:0 0 13px!important;
  width:13px!important;
  height:13px!important;
  transform:scale(.72)!important;
  transform-origin:center!important;
}
#messages>.sentualDateSeparator>.sentualHistoryLoader .iosSpinner i{background:currentColor!important;}
/* Safety fallback used only before the first date row exists; never float over the profile header. */
#messages>.sentualHistoryLoader.sentualHistoryLoaderFallback{
  position:static!important;
  align-self:center!important;
  display:inline-flex!important;
  width:14px!important;
  height:14px!important;
  margin:5px auto 0!important;
  padding:0!important;
  background:transparent!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
  opacity:.58!important;
  transform:none!important;
}
#messages>.sentualHistoryLoader.sentualHistoryLoaderFallback.hidden{display:none!important;}

/* ===== SENTUAL V4.3.12: compact history spinner inside date pill ===== */
#messages>.sentualDateSeparator>.sentualHistoryLoader{
  position:relative!important;
  flex:0 0 10px!important;
  width:10px!important;
  height:10px!important;
  margin:0 4px 0 0!important;
  overflow:visible!important;
}
#messages>.sentualDateSeparator>.sentualHistoryLoader.hidden{
  flex-basis:0!important;
  width:0!important;
  margin-right:0!important;
  opacity:0!important;
  transform:scale(.58)!important;
  overflow:hidden!important;
}
#messages>.sentualDateSeparator>.sentualHistoryLoader .iosSpinner{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:22px!important;
  height:22px!important;
  transform:translate(-50%,-50%) scale(.44)!important;
  transform-origin:center!important;
}
#messages>.sentualHistoryLoader.sentualHistoryLoaderFallback{
  width:10px!important;
  height:10px!important;
}
#messages>.sentualHistoryLoader.sentualHistoryLoaderFallback .iosSpinner{
  transform:scale(.44)!important;
  transform-origin:center!important;
}

/* ===== SENTUAL V4.3.13: desktop composer height + fullscreen editor ===== */
.composerInputShell{flex:1;min-width:0;position:relative;display:flex;align-items:stretch}
.composerInputShell>textarea#message{width:100%}
.composer.blocked .composerInputShell{display:none!important}
.sentualComposerExpandBtn{display:none}

@media(min-width:821px){
  .composer{position:relative}
  .composerInputShell>textarea#message{
    min-height:48px!important;
    height:48px;
    max-height:216px!important;
    padding-top:12px;
    padding-bottom:12px;
    line-height:1.45;
    transition:height .18s cubic-bezier(.2,.8,.2,1),border-radius .22s ease,background-color .18s ease;
  }
  .composer.sentualComposerHasExpander .composerInputShell>textarea#message{padding-right:48px}
  .sentualComposerExpandBtn{
    position:absolute;
    top:8px;
    right:8px;
    z-index:3;
    width:32px;
    height:32px;
    padding:0;
    border:0!important;
    border-radius:9px;
    background:transparent!important;
    color:var(--muted);
    opacity:0;
    pointer-events:none;
    display:grid;
    place-items:center;
    transform:translateY(3px) scale(.92);
    transition:opacity .18s ease,transform .22s cubic-bezier(.2,.8,.2,1),color .18s ease;
    box-shadow:none!important;
    -webkit-tap-highlight-color:transparent;
  }
  .composer.sentualComposerHasExpander .sentualComposerExpandBtn,
  .composer.sentualComposerFullscreen .sentualComposerExpandBtn{
    opacity:.78;
    pointer-events:auto;
    transform:translateY(0) scale(1);
  }
  .sentualComposerExpandBtn:hover{opacity:1;color:var(--text)}
  .sentualComposerExpandBtn:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 72%,transparent);outline-offset:2px}
  .sentualComposerExpandBtn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;transition:transform .3s cubic-bezier(.2,.8,.2,1)}
  .composer.sentualComposerFullscreen .sentualComposerExpandBtn svg{transform:rotate(180deg)}

  .composer.sentualComposerFullscreen .composerInputShell{
    position:fixed;
    inset:0;
    z-index:12000;
    padding:20px;
    background:var(--chat);
    align-items:stretch;
    animation:sentualComposerFullscreenIn .2s cubic-bezier(.2,.8,.2,1) both;
  }
  .composer.sentualComposerFullscreen .composerInputShell>textarea#message{
    width:100%!important;
    height:100%!important;
    min-height:0!important;
    max-height:none!important;
    border-radius:18px!important;
    padding:54px 24px 24px!important;
    font-size:15px;
    line-height:1.6;
    overflow:auto!important;
    box-shadow:0 18px 70px rgba(0,0,0,.16);
  }
  .composer.sentualComposerFullscreen .sentualComposerExpandBtn{
    position:fixed;
    top:30px;
    right:30px;
    z-index:12002;
  }
  html.sentualComposerFullscreenOpen{overflow:hidden!important}
}
@keyframes sentualComposerFullscreenIn{
  from{opacity:.82;transform:scale(.992)}
  to{opacity:1;transform:scale(1)}
}
@media(prefers-reduced-motion:reduce){
  .sentualComposerExpandBtn,.sentualComposerExpandBtn svg,.composerInputShell>textarea#message{transition:none!important}
  .composer.sentualComposerFullscreen .composerInputShell{animation:none!important}
}


/* ===== SENTUAL V4.3.14: media viewer action order/copy ===== */
.mediaViewer .mediaViewerActions{direction:ltr!important;gap:14px!important;padding-right:12px!important;}
.mediaViewer .mediaViewerDownload{order:1!important;}
.mediaViewer .sentualViewerCopy{order:2!important;}
.mediaViewer .mediaViewerClose{order:3!important;margin-right:10px!important;}
.mediaViewer .sentualViewerCopy{display:inline-grid!important;place-items:center!important;flex:0 0 40px!important;width:40px!important;height:40px!important;padding:0!important;border-radius:999px!important;}
.mediaViewer .sentualViewerCopy svg{width:19px!important;height:19px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.8!important;stroke-linecap:round!important;stroke-linejoin:round!important;}
.mediaViewer .sentualViewerCopy:disabled{opacity:.48!important;pointer-events:none!important;}

/* ===== SENTUAL V4.3.16: desktop composer fullscreen stays inside chat pane ===== */
@media(min-width:821px){
  .composer.sentualComposerFullscreen{
    position:absolute!important;
    inset:0!important;
    z-index:12000!important;
    display:block!important;
    padding:20px!important;
    margin:0!important;
    border:0!important;
    background:var(--chat)!important;
  }
  .composer.sentualComposerFullscreen>.composerInputShell{
    position:absolute!important;
    inset:20px!important;
    width:auto!important;
    height:auto!important;
    padding:0!important;
    background:transparent!important;
    display:flex!important;
    align-items:stretch!important;
  }
  .composer.sentualComposerFullscreen>.attach,
  .composer.sentualComposerFullscreen>#composerSubmit,
  .composer.sentualComposerFullscreen>#replyComposerBar,
  .composer.sentualComposerFullscreen>#attachMenu,
  .composer.sentualComposerFullscreen>#blockedComposer{
    display:none!important;
  }
  .composer.sentualComposerFullscreen .composerInputShell>textarea#message{
    width:100%!important;
    height:100%!important;
    min-height:0!important;
    max-height:none!important;
    padding:54px 24px 24px!important;
  }
  .composer.sentualComposerFullscreen .sentualComposerExpandBtn{
    position:absolute!important;
    top:12px!important;
    right:12px!important;
    z-index:3!important;
  }
}


/* ===== SENTUAL V4.3.17: viewer mobile action geometry ===== */
.mediaViewer .mediaViewerActions{direction:ltr!important;gap:12px!important;justify-content:flex-end!important;}
.mediaViewer .mediaViewerDownload{order:1!important;}
.mediaViewer .sentualViewerCopy{order:2!important;display:inline-flex!important;align-items:center!important;justify-content:center!important;flex:0 0 44px!important;width:44px!important;min-width:44px!important;max-width:44px!important;height:44px!important;min-height:44px!important;max-height:44px!important;aspect-ratio:1/1!important;padding:0!important;border-radius:50%!important;-webkit-border-radius:50%!important;box-sizing:border-box!important;overflow:hidden!important;}
.mediaViewer .sentualViewerCopy:hover,.mediaViewer .sentualViewerCopy:focus-visible,.mediaViewer .sentualViewerCopy:active{border-radius:50%!important;-webkit-border-radius:50%!important;}
.mediaViewer .mediaViewerClose{order:3!important;margin-right:0!important;}
@media(max-width:820px){
  .mediaViewer .mediaViewerActions{left:auto!important;right:calc(14px + env(safe-area-inset-right))!important;bottom:calc(14px + env(safe-area-inset-bottom))!important;transform:none!important;max-width:calc(100vw - 28px - env(safe-area-inset-left) - env(safe-area-inset-right))!important;padding-right:0!important;}
  .mediaViewer.mediaZoomed .mediaViewerActions{transform:translateY(calc(100% + 34px))!important;}
  .mediaViewer.mediaViewerClosing .mediaViewerActions,.mediaViewer.mediaDismissed .mediaViewerActions{transform:translateY(8px)!important;}
}


/* ===== SENTUAL V4.3.18: center viewer actions ===== */
.mediaViewer .mediaViewerActions{justify-content:center!important;}
@media(max-width:820px){
  .mediaViewer .mediaViewerActions{left:50%!important;right:auto!important;transform:translateX(-50%)!important;max-width:calc(100vw - 28px - env(safe-area-inset-left) - env(safe-area-inset-right))!important;}
  .mediaViewer.mediaZoomed .mediaViewerActions{transform:translate(-50%,calc(100% + 34px))!important;}
  .mediaViewer.mediaViewerClosing .mediaViewerActions,.mediaViewer.mediaDismissed .mediaViewerActions{transform:translate(-50%,8px)!important;}
}


/* ===== SENTUAL V4.3.19: exact desktop centering for viewer actions ===== */
.mediaViewer .mediaViewerActions{left:50%!important;right:auto!important;justify-content:center!important;padding-right:0!important;transform:translateX(-50%)!important;}
.mediaViewer .mediaViewerClose{margin-right:0!important;}
@media(min-width:821px){
  .mediaViewer .mediaViewerActions{width:max-content!important;max-width:calc(100vw - 48px)!important;}
  .mediaViewer.mediaZoomed .mediaViewerActions{transform:translate(-50%,calc(100% + 34px))!important;}
  .mediaViewer.mediaViewerClosing .mediaViewerActions,.mediaViewer.mediaDismissed .mediaViewerActions{transform:translate(-50%,8px)!important;}
}


/* ===== SENTUAL V4.3.20: viewer pinch/pan and full action hide on zoom ===== */
.mediaViewer .mediaViewerStage{touch-action:none!important;cursor:grab;}
.mediaViewer.mediaZoomed .mediaViewerStage{cursor:grab;}
.mediaViewer.panning .mediaViewerStage,.mediaViewer.mediaPanning .mediaViewerStage{cursor:grabbing;}
.mediaViewer.mediaZoomed .mediaViewerActions{transform:translate(-50%,calc(100% + 96px))!important;opacity:0!important;pointer-events:none!important;}
@media(max-width:820px){
  .mediaViewer.mediaZoomed .mediaViewerActions{transform:translate(-50%,calc(100% + 96px))!important;}
}


/* ===== SENTUAL V4.3.23: mobile controls + search result geometry ===== */
@media(max-width:820px){
  .scrollBottomBtn{
    right:12px!important;
    bottom:calc(var(--sentual-composer-height,62px) + env(safe-area-inset-bottom) + 12px)!important;
  }
}

#users .messageSearchResult{
  position:relative!important;
  display:grid!important;
  grid-template-columns:41px minmax(0,1fr)!important;
  align-items:start!important;
  gap:10px!important;
  min-height:unset!important;
  padding:11px 10px 24px!important;
  border-radius:0!important;
}
#users .messageSearchResult:not(:last-child){
  border-bottom:1px solid color-mix(in srgb,var(--line) 82%,transparent)!important;
}
#users .messageSearchResult>.avatar{
  grid-column:1!important;
  align-self:start!important;
}
#users .messageSearchResult>.searchResultBody{
  grid-column:2!important;
  display:flex!important;
  flex-direction:column!important;
  min-width:0!important;
}
#users .messageSearchResult>.searchResultBody>small{
  display:block!important;
  white-space:normal!important;
  overflow:visible!important;
  text-overflow:clip!important;
  line-height:1.58!important;
  margin-top:4px!important;
  padding-right:0!important;
}
#users .messageSearchResult>.searchResultBody>time{
  position:absolute!important;
  right:10px!important;
  bottom:2px!important;
  top:auto!important;
  transform:none!important;
  display:block!important;
  margin:0!important;
  font-size:9px!important;
  line-height:1!important;
  color:var(--muted)!important;
  white-space:nowrap!important;
  text-align:right!important;
}


/* ===== SENTUAL V4.3.24: search footer time + retired start notice ===== */
.sentualHistoryStartNotice{display:none!important;}
#users .messageSearchResult{
  position:relative!important;
  display:grid!important;
  grid-template-columns:41px minmax(0,1fr)!important;
  align-items:start!important;
  gap:10px!important;
  min-height:unset!important;
  padding:11px 10px 28px!important;
  border-radius:0!important;
  border-bottom:1px solid color-mix(in srgb,var(--line) 82%,transparent)!important;
}
#users .messageSearchResult>.avatar{grid-column:1!important;grid-row:1!important;align-self:start!important;}
#users .messageSearchResult>.searchResultBody{grid-column:2!important;grid-row:1!important;display:flex!important;flex-direction:column!important;min-width:0!important;position:static!important;}
#users .messageSearchResult>.searchResultBody>small{display:block!important;white-space:normal!important;overflow:visible!important;text-overflow:clip!important;line-height:1.58!important;margin-top:4px!important;padding:0!important;}
#users .messageSearchResult>time{
  position:absolute!important;
  right:10px!important;
  bottom:3px!important;
  top:auto!important;
  left:auto!important;
  transform:none!important;
  margin:0!important;
  padding:0!important;
  font-size:9px!important;
  line-height:1!important;
  color:var(--muted)!important;
  white-space:nowrap!important;
  text-align:right!important;
  z-index:2!important;
}


/* ===== SENTUAL V4.3.25: deterministic mobile reply/back gestures ===== */
@media(max-width:820px){
  #chat.sentualV4325BackDragging{transition:none!important;will-change:transform!important;}
  #messages>.bubble.sentualReplySwipe{touch-action:pan-y!important;}
}


/* ===== SENTUAL V4.3.26: notification setting ===== */
.sentualNotificationSettings{margin-top:15px;padding-top:14px;border-top:1px solid var(--line);}
.sentualNotificationSetting{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:12px 13px;border:1px solid var(--line);border-radius:14px;background:var(--side);cursor:pointer;user-select:none;-webkit-user-select:none;}
.sentualNotificationSetting>span{min-width:0;display:flex;flex-direction:column;gap:4px;}
.sentualNotificationSetting b{font-size:11px;font-weight:650;color:var(--text);}
.sentualNotificationSetting small{font-size:9px;line-height:1.45;color:var(--muted);}
.sentualNotificationSetting input{position:absolute;opacity:0;pointer-events:none;}
.sentualNotificationSetting>i{position:relative;flex:0 0 42px;width:42px;height:24px;border-radius:999px;background:color-mix(in srgb,var(--muted) 32%,var(--line));transition:background .18s ease,opacity .18s ease;}
.sentualNotificationSetting>i::after{content:"";position:absolute;left:3px;top:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 2px 7px #0003;transition:transform .2s cubic-bezier(.22,1,.36,1);}
.sentualNotificationSetting input:checked+i{background:var(--accent);}
.sentualNotificationSetting input:checked+i::after{transform:translateX(18px);}
.sentualNotificationSetting.disabled{opacity:.62;cursor:default;}
.sentualNotificationSetting:has(input:disabled)>i{opacity:.6;}


/* ===== SENTUAL V4.3.27: notification setting state ===== */
.sentualNotificationSetting.busy{cursor:progress!important;}
.sentualNotificationSetting.busy>i{opacity:.72!important;}

/* V4.3.27: profile photo editing is available to Free accounts too. */
.profileAvatarEdit.hidden{display:grid!important;}


/* ===== SENTUAL V4.3.28: unified settings switches ===== */
.sentualAutoMediaSetting,.sentualNotificationSetting{box-sizing:border-box;}
.sentualAutoMediaSetting>span,.sentualNotificationSetting>span{min-width:0;}


/* ===== SENTUAL V4.3.30: paint only the final chat-entry position ===== */
#messages.sentualV4329EntryStaging{
  visibility:hidden!important;
  pointer-events:none!important;
}


/* ===== SENTUAL V4.3.30: messages originate from the bottom ===== */
/* scrollTop cannot move a short conversation because it has no scroll range.  The zero-height
   flex item below consumes only unused vertical space, so short chats sit above the composer while
   long chats keep normal top-to-bottom scrolling and history pagination. */
#messages{overflow-anchor:none!important;scroll-behavior:auto!important;}
#messages.sentualV4330HasMessages::before{
  content:"";
  display:block;
  flex:0 0 0;
  min-height:0;
  margin-top:auto;
  pointer-events:none;
}
#messages.sentualV4330EntryStaging{
  visibility:hidden!important;
  pointer-events:none!important;
}


/* ===== SENTUAL V4.3.35: wallet follows the active user theme ===== */
#walletModal .walletBox{background:var(--side)!important;border-color:var(--line)!important;color:var(--text)!important;}
#walletModal .modalIcon{background:color-mix(in srgb,var(--accent) 14%,var(--side))!important;border:1px solid color-mix(in srgb,var(--accent) 36%,var(--line))!important;color:var(--accent)!important;}
#walletModal .modalClose{background:color-mix(in srgb,var(--bubble) 72%,var(--side) 28%)!important;border:1px solid var(--line)!important;color:var(--muted)!important;}
#walletModal .walletList{background:transparent!important;color:var(--text)!important;}
#walletModal .walletRow{background:color-mix(in srgb,var(--bubble) 74%,var(--side) 26%)!important;border:1px solid color-mix(in srgb,var(--accent) 24%,var(--line))!important;color:var(--text)!important;box-shadow:0 8px 22px color-mix(in srgb,var(--bg) 18%,transparent)!important;}
#walletModal .walletRow input,#walletModal .walletRow textarea{background:transparent!important;color:var(--text)!important;border-color:var(--line)!important;caret-color:var(--accent)!important;}
#walletModal .walletRow input::placeholder,#walletModal .walletRow textarea::placeholder{color:var(--muted)!important;opacity:.88;}
#walletModal .walletRow input:focus,#walletModal .walletRow textarea:focus{border-color:color-mix(in srgb,var(--accent) 58%,var(--line))!important;outline:0!important;}
#walletModal .removeWallet{color:var(--muted)!important;background:transparent!important;}
#walletModal .removeWallet:hover{color:var(--accent)!important;}
#walletModal .walletAdd{background:transparent!important;border:1px dashed color-mix(in srgb,var(--accent) 48%,var(--line))!important;color:var(--accent)!important;}
#walletModal .walletAdd:hover{background:color-mix(in srgb,var(--accent) 7%,transparent)!important;border-color:color-mix(in srgb,var(--accent) 70%,var(--line))!important;}
#walletModal .walletSend{background:color-mix(in srgb,var(--accent) 12%,var(--bubble))!important;border:1px solid color-mix(in srgb,var(--accent) 30%,var(--line))!important;color:var(--accent)!important;}
#walletModal .primary{background:var(--accent)!important;color:#fff!important;border:1px solid color-mix(in srgb,var(--accent) 78%,var(--text) 8%)!important;}
#walletModal .primary:hover{background:color-mix(in srgb,var(--accent) 90%,var(--text) 10%)!important;}


/* ===== SENTUAL V4.3.36: sessions, security popup, profile-sized conversation settings ===== */
.sessionLogout.sentualSessionTrash{
  width:34px!important;height:34px!important;flex:0 0 34px!important;
  padding:0!important;border:1px solid var(--line)!important;border-radius:50%!important;
  background:color-mix(in srgb,var(--bubble) 74%,var(--side) 26%)!important;
  color:var(--muted)!important;display:grid!important;place-items:center!important;
  box-shadow:none!important;
}
.sessionLogout.sentualSessionTrash svg{width:17px!important;height:17px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.7!important;stroke-linecap:round!important;stroke-linejoin:round!important;}
.sessionLogout.sentualSessionTrash:hover{color:#d76870!important;border-color:color-mix(in srgb,#d76870 42%,var(--line))!important;background:color-mix(in srgb,#d76870 8%,var(--side))!important;}

.profileSecurityRow{align-items:center!important;}
.profileSecurityLink{border:0!important;padding:0!important;margin:0!important;background:transparent!important;color:var(--accent)!important;font:inherit!important;font-weight:600!important;cursor:pointer!important;text-decoration:underline!important;text-decoration-thickness:1px!important;text-underline-offset:3px!important;box-shadow:none!important;}
.profileSecurityLink:hover{opacity:.82!important;}
.profileSecurityLink:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 48%,transparent)!important;outline-offset:4px!important;border-radius:4px!important;}

.sentualSecurityModal{z-index:96!important;padding:18px!important;}
.sentualSecurityBox{
  width:min(430px,100%)!important;
  height:min(720px,calc(100dvh - 36px))!important;
  max-height:min(760px,calc(100dvh - 36px))!important;
  padding:22px!important;
  display:flex!important;flex-direction:column!important;
  overflow:hidden!important;text-align:left!important;
  background:var(--side)!important;border-color:var(--line)!important;color:var(--text)!important;
}
.sentualSecurityBox>.modalClose{top:12px!important;right:12px!important;width:36px!important;height:36px!important;border-radius:12px!important;border:1px solid var(--line)!important;background:color-mix(in srgb,var(--bubble) 82%,transparent)!important;color:var(--muted)!important;display:grid!important;place-items:center!important;z-index:5!important;}
.sentualSecurityBox>.modalClose svg{width:17px!important;height:17px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.9!important;stroke-linecap:round!important;}
.sentualSecurityHead{display:flex!important;align-items:center!important;gap:12px!important;padding-right:44px!important;margin:0 0 16px!important;flex:none!important;}
.sentualSecurityIcon{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;flex:none;background:color-mix(in srgb,var(--accent) 11%,var(--side));border:1px solid color-mix(in srgb,var(--accent) 25%,var(--line));color:var(--accent);}
.sentualSecurityIcon svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;}
.sentualSecurityHead h2{margin:0!important;font-size:18px!important;line-height:1.2!important;color:var(--text)!important;}
.sentualSecurityHead p{margin:4px 0 0!important;font-size:9.5px!important;color:var(--muted)!important;}
.sentualSecurityScroll{flex:1 1 auto!important;min-height:0!important;overflow:auto!important;overscroll-behavior:contain!important;-webkit-overflow-scrolling:touch!important;padding:0 3px 8px 0!important;outline:0!important;}
.sentualSecurityScroll section{padding:13px 0!important;border-top:1px solid var(--line)!important;}
.sentualSecurityScroll section:first-child{border-top:0!important;padding-top:2px!important;}
.sentualSecurityScroll h3,.sentualSecurityScroll .sentualSecurityIntro>b{display:block;margin:0 0 6px!important;font-size:11.5px!important;color:var(--text)!important;}
.sentualSecurityScroll p{margin:0!important;font-size:10px!important;line-height:1.72!important;color:var(--muted)!important;}
.sentualSecurityScroll p+p{margin-top:9px!important;}
.sentualSecurityIntro{padding:13px!important;border:1px solid color-mix(in srgb,var(--accent) 23%,var(--line))!important;border-radius:14px!important;background:color-mix(in srgb,var(--accent) 6%,var(--side))!important;margin-bottom:4px!important;}
.sentualSecurityFacts{display:grid!important;gap:7px!important;margin:9px 0 10px!important;}
.sentualSecurityFacts>div{display:flex!important;justify-content:space-between!important;align-items:center!important;gap:12px!important;padding:9px 10px!important;border:1px solid var(--line)!important;border-radius:10px!important;background:color-mix(in srgb,var(--bubble) 70%,var(--side) 30%)!important;}
.sentualSecurityFacts span{font-size:9px!important;color:var(--muted)!important;}
.sentualSecurityFacts b{font-size:9.5px!important;color:var(--text)!important;text-align:right!important;}
.sentualSecurityPromise{margin-top:2px!important;padding:13px!important;border:1px solid color-mix(in srgb,var(--accent) 24%,var(--line))!important;border-radius:14px!important;background:color-mix(in srgb,var(--accent) 5%,var(--side))!important;}

/* Conversation settings now uses the same profile-window geometry instead of the oversized sheet. */
.sentualConversationSettingsModal{z-index:94!important;padding:18px!important;place-items:center!important;align-items:center!important;overflow:hidden!important;}
.sentualConversationSettingsBox{
  width:min(430px,100%)!important;
  max-width:430px!important;
  max-height:min(760px,calc(100dvh - 36px))!important;
  overflow:auto!important;
  margin:auto!important;
  padding:25px!important;
  border-radius:17px!important;
}
.sentualConversationSettingsBox>.modalClose{position:absolute!important;float:none!important;top:12px!important;right:12px!important;margin:0!important;width:36px!important;height:36px!important;border-radius:12px!important;}
.sentualConversationSettingsHead{padding-right:42px!important;}

@media(max-width:820px){
  .sentualSecurityModal,.sentualConversationSettingsModal{padding:0!important;display:block!important;background:var(--bg)!important;overflow:hidden!important;}
  .sentualSecurityBox,.sentualConversationSettingsBox{
    width:100%!important;max-width:none!important;height:100dvh!important;max-height:none!important;
    border:0!important;border-radius:0!important;box-shadow:none!important;
    padding:76px 18px calc(28px + env(safe-area-inset-bottom))!important;
  }
  .sentualSecurityBox{overflow:hidden!important;}
  .sentualConversationSettingsBox{overflow:auto!important;}
  .sentualSecurityBox>.modalClose,.sentualConversationSettingsBox>.modalClose{top:max(18px,env(safe-area-inset-top))!important;right:18px!important;width:38px!important;height:38px!important;}
  .sentualSecurityHead{padding-right:0!important;}
  .sentualSecurityScroll{padding-right:2px!important;}
}


/* ===== SENTUAL V4.3.37: security profile control + long-form security article ===== */
.profileSecurityLink{
  border:1px solid var(--line)!important;
  background:var(--bubble)!important;
  color:var(--accent)!important;
  border-radius:8px!important;
  padding:6px 9px!important;
  margin:0!important;
  font-size:9px!important;
  font-weight:650!important;
  line-height:1!important;
  white-space:nowrap!important;
  text-decoration:none!important;
  box-shadow:none!important;
  cursor:pointer!important;
}
.profileSecurityLink:hover{background:color-mix(in srgb,var(--bubble) 84%,var(--accent) 16%)!important;opacity:1!important;}
.profileSecurityLink:focus-visible{outline:2px solid color-mix(in srgb,var(--accent) 48%,transparent)!important;outline-offset:2px!important;border-radius:8px!important;}
:root[data-theme="light"] .profileSecurityLink{background:#edf3f6!important;border-color:#d8e1e7!important;color:#27779c!important;}

.sentualSecurityScroll{padding:0 6px 14px 0!important;}
.sentualSecurityArticle{display:block!important;margin:0!important;padding:0!important;color:var(--muted)!important;}
.sentualSecurityArticle h3{
  margin:22px 0 8px!important;
  padding:0!important;
  border:0!important;
  background:none!important;
  color:var(--text)!important;
  font-size:12px!important;
  line-height:1.35!important;
  font-weight:700!important;
}
.sentualSecurityArticle h3:first-of-type{margin-top:18px!important;}
.sentualSecurityArticle p{
  margin:0 0 12px!important;
  padding:0!important;
  border:0!important;
  border-radius:0!important;
  background:none!important;
  color:var(--muted)!important;
  font-size:10.5px!important;
  line-height:1.82!important;
  box-shadow:none!important;
}
.sentualSecurityArticle p strong{color:var(--text)!important;font-weight:700!important;}
.sentualSecurityIntro,.sentualSecurityFacts,.sentualSecurityPromise{all:unset;}

@media(max-width:820px){
  /* Mobile only: keep the close control comfortably below the status-bar/safe-area. Desktop is untouched. */
  .sentualSecurityBox{padding-top:calc(env(safe-area-inset-top) + 96px)!important;}
  .sentualSecurityBox>.modalClose{
    top:calc(env(safe-area-inset-top) + 30px)!important;
    right:18px!important;
  }
  .sentualSecurityHead{margin-bottom:18px!important;}
  .sentualSecurityArticle p{font-size:11px!important;line-height:1.86!important;}
  .sentualSecurityArticle h3{font-size:12.5px!important;}
}


/* ===== SENTUAL V4.3.38: true full-screen mobile Security + visible close + pill Security control ===== */
.profileSecurityLink{
  border-radius:999px!important;
  padding-left:11px!important;
  padding-right:11px!important;
}
.profileSecurityLink:focus-visible{border-radius:999px!important;}

@media(max-width:820px){
  /* Mobile only. Desktop security geometry stays exactly as-is. */
  #sentualSecurityModal.sentualSecurityModal{
    position:fixed!important;
    inset:0!important;
    width:100vw!important;
    height:100dvh!important;
    min-height:100dvh!important;
    max-height:none!important;
    margin:0!important;
    padding:0!important;
    overflow:hidden!important;
    display:block!important;
    background:var(--side)!important;
    border:0!important;
    border-radius:0!important;
  }
  #sentualSecurityModal.sentualSecurityModal.hidden{display:none!important;}
  #sentualSecurityModal .sentualSecurityBox{
    position:fixed!important;
    inset:0!important;
    width:100vw!important;
    max-width:none!important;
    height:100dvh!important;
    min-height:100dvh!important;
    max-height:none!important;
    margin:0!important;
    padding:max(70px,calc(env(safe-area-inset-top) + 54px)) 18px calc(16px + env(safe-area-inset-bottom))!important;
    border:0!important;
    border-radius:0!important;
    box-shadow:none!important;
    background:var(--side)!important;
    overflow:hidden!important;
    display:flex!important;
    flex-direction:column!important;
  }
  #sentualSecurityModal .sentualSecurityBox>.sentualSecurityClose{
    position:fixed!important;
    top:max(54px,calc(env(safe-area-inset-top) + 10px))!important;
    right:16px!important;
    left:auto!important;
    bottom:auto!important;
    width:42px!important;
    height:42px!important;
    margin:0!important;
    padding:0!important;
    z-index:1000!important;
    display:grid!important;
    place-items:center!important;
    opacity:1!important;
    visibility:visible!important;
    pointer-events:auto!important;
    border-radius:13px!important;
    background:color-mix(in srgb,var(--bubble) 92%,var(--side) 8%)!important;
    border:1px solid var(--line)!important;
    color:var(--text)!important;
    box-shadow:0 8px 24px #0003!important;
  }
  #sentualSecurityModal .sentualSecurityHead{
    flex:0 0 auto!important;
    padding-right:52px!important;
    margin:0 0 18px!important;
  }
  #sentualSecurityModal .sentualSecurityScroll{
    flex:1 1 0!important;
    min-height:0!important;
    height:auto!important;
    max-height:none!important;
    overflow-y:auto!important;
    overflow-x:hidden!important;
    padding:0 4px 22px 0!important;
    margin:0!important;
    overscroll-behavior:contain!important;
    -webkit-overflow-scrolling:touch!important;
  }
}


/* ===== SENTUAL V4.3.39: mobile Conversation settings close visibility ===== */
@media(max-width:820px){
  #sentualConversationSettingsModal.sentualConversationSettingsModal{
    position:fixed!important;
    inset:0!important;
    width:100vw!important;
    height:100dvh!important;
    min-height:100dvh!important;
    max-height:none!important;
    margin:0!important;
    padding:0!important;
    overflow:hidden!important;
    display:block!important;
  }
  #sentualConversationSettingsModal.sentualConversationSettingsModal.hidden{display:none!important;}
  #sentualConversationSettingsModal .sentualConversationSettingsBox{
    position:fixed!important;
    inset:0!important;
    width:100vw!important;
    max-width:none!important;
    height:100dvh!important;
    min-height:100dvh!important;
    max-height:none!important;
    margin:0!important;
    padding:max(70px,calc(env(safe-area-inset-top) + 54px)) 18px calc(20px + env(safe-area-inset-bottom))!important;
    border:0!important;
    border-radius:0!important;
    box-shadow:none!important;
    overflow-y:auto!important;
    overflow-x:hidden!important;
    -webkit-overflow-scrolling:touch!important;
  }
  #sentualConversationSettingsModal .sentualConversationSettingsBox>.modalClose{
    position:fixed!important;
    float:none!important;
    top:max(54px,calc(env(safe-area-inset-top) + 10px))!important;
    right:16px!important;
    left:auto!important;
    bottom:auto!important;
    width:42px!important;
    height:42px!important;
    margin:0!important;
    padding:0!important;
    z-index:1000!important;
    display:grid!important;
    place-items:center!important;
    opacity:1!important;
    visibility:visible!important;
    pointer-events:auto!important;
    border-radius:13px!important;
    background:color-mix(in srgb,var(--bubble) 92%,var(--side) 8%)!important;
    border:1px solid var(--line)!important;
    color:var(--text)!important;
    box-shadow:0 8px 24px #0003!important;
  }
  #sentualConversationSettingsModal .sentualConversationSettingsHead{
    padding-right:52px!important;
  }
}


/* ===== SENTUAL V4.3.40: fixed mobile modal headers + entrance motion ===== */
@keyframes sentualV4340ModalBackdropIn{
  from{opacity:0}
  to{opacity:1}
}
@keyframes sentualV4340ModalPanelIn{
  0%{opacity:0;transform:translateY(18px) scale(.985)}
  100%{opacity:1;transform:translateY(0) scale(1)}
}

/* Entrance/exit motion is owned only by the shared V4.3.07 popup-motion controller.
   Keeping one animation owner prevents Conversation settings from visually opening twice. */

.sentualConversationSettingsBox{
  display:flex!important;
  flex-direction:column!important;
  overflow:hidden!important;
}
.sentualConversationSettingsHead{
  flex:0 0 auto!important;
  position:relative!important;
  z-index:6!important;
  background:var(--side)!important;
}
.sentualConversationSettingsScroll{
  flex:1 1 auto!important;
  min-height:0!important;
  overflow-y:auto!important;
  overflow-x:hidden!important;
  overscroll-behavior:contain!important;
  -webkit-overflow-scrolling:touch!important;
  padding:0 2px 8px 0!important;
}

@media(max-width:820px){
  /* Both mobile pages keep their title area stationary; only the body scrolls. */
  #sentualSecurityModal .sentualSecurityBox,
  #sentualConversationSettingsModal .sentualConversationSettingsBox{
    display:flex!important;
    flex-direction:column!important;
    overflow:hidden!important;
  }
  #sentualSecurityModal .sentualSecurityHead,
  #sentualConversationSettingsModal .sentualConversationSettingsHead{
    position:relative!important;
    z-index:20!important;
    flex:0 0 auto!important;
    background:var(--side)!important;
    padding-bottom:14px!important;
    margin-bottom:0!important;
  }
  #sentualSecurityModal .sentualSecurityScroll,
  #sentualConversationSettingsModal .sentualConversationSettingsScroll{
    flex:1 1 0!important;
    min-height:0!important;
    height:auto!important;
    max-height:none!important;
    overflow-y:auto!important;
    overflow-x:hidden!important;
    overscroll-behavior:contain!important;
    -webkit-overflow-scrolling:touch!important;
  }
  #sentualConversationSettingsModal .sentualConversationSettingsScroll{
    padding:0 2px calc(18px + env(safe-area-inset-bottom)) 0!important;
  }
  #sentualSecurityModal .sentualSecurityScroll{
    padding-top:0!important;
  }
  /* Keep the close controls floating above the stationary headers. */
  #sentualSecurityModal .sentualSecurityClose,
  #sentualConversationSettingsModal .modalClose{
    position:fixed!important;
    z-index:1001!important;
  }

}

@media(prefers-reduced-motion:reduce){
  .sentualSecurityModal:not(.hidden),
  .sentualConversationSettingsModal:not(.hidden),
  .sentualSecurityModal:not(.hidden) .sentualSecurityBox,
  .sentualConversationSettingsModal:not(.hidden) .sentualConversationSettingsBox{
    animation:none!important;
  }
}


/* ===== SENTUAL V4.3.41: professional security article + support contact ===== */
.sentualSecuritySupport{
  margin:34px 0 10px!important;
  padding:24px 0 4px!important;
  border-top:1px solid var(--line)!important;
  display:flex!important;
  flex-direction:column!important;
  gap:10px!important;
  align-items:stretch!important;
}
.sentualSecuritySupport p{
  margin:0!important;
  color:var(--text)!important;
  font-size:12px!important;
  line-height:1.55!important;
  font-weight:700!important;
  text-align:right!important;
}
.sentualSecuritySupport button{
  width:100%!important;
  min-height:44px!important;
  padding:0 18px!important;
  border:1px solid color-mix(in srgb,var(--accent) 36%,var(--line))!important;
  border-radius:14px!important;
  background:color-mix(in srgb,var(--accent) 10%,var(--side))!important;
  color:var(--accent)!important;
  font:inherit!important;
  font-size:12px!important;
  font-weight:750!important;
  cursor:pointer!important;
  transition:transform .16s ease,background-color .16s ease,border-color .16s ease,opacity .16s ease!important;
}
.sentualSecuritySupport button:hover{background:color-mix(in srgb,var(--accent) 16%,var(--side))!important;border-color:color-mix(in srgb,var(--accent) 52%,var(--line))!important;}
.sentualSecuritySupport button:active{transform:scale(.985)!important;}
.sentualSecuritySupport button:disabled{opacity:.55!important;cursor:default!important;transform:none!important;}
@media(max-width:820px){
  .sentualSecuritySupport{margin-top:38px!important;padding-bottom:calc(12px + env(safe-area-inset-bottom))!important;}
  .sentualSecuritySupport button{min-height:48px!important;border-radius:15px!important;font-size:13px!important;}
}


/* ===== SENTUAL V4.3.43: single modal animation owner + Security support alignment ===== */
.sentualSecuritySupport{
  direction:ltr!important;
  text-align:left!important;
  margin-bottom:0!important;
  padding-bottom:0!important;
}
.sentualSecuritySupport p{
  direction:ltr!important;
  text-align:left!important;
}
@media(max-width:820px){
  /* Remove the stacked bottom spacing from the article/support footer. The safe area is applied once. */
  #sentualSecurityModal .sentualSecurityBox{
    padding-bottom:0!important;
  }
  #sentualSecurityModal .sentualSecurityScroll{
    padding-bottom:max(0px,env(safe-area-inset-bottom))!important;
  }
  #sentualSecurityModal .sentualSecuritySupport{
    margin-bottom:0!important;
    padding-bottom:0!important;
  }
}


/* ===== SENTUAL V4.3.44: mobile Conversation full-height + profile controls follow active theme ===== */
/* The private chat code card and Security control now derive every visual color from the active palette. */
.profileModal .shareCode{
  background:color-mix(in srgb,var(--accent) 5%,var(--side) 95%)!important;
  border:1px solid color-mix(in srgb,var(--accent) 22%,var(--line))!important;
  color:var(--text)!important;
}
.profileModal .shareCode small{color:var(--muted)!important;}
.profileModal .shareCode b{color:var(--text)!important;}
.profileModal .shareCode>button{
  border:1px solid color-mix(in srgb,var(--accent) 28%,var(--line))!important;
  background:color-mix(in srgb,var(--accent) 10%,var(--side) 90%)!important;
  color:var(--accent)!important;
}
.profileModal .shareCode>button:hover,
.profileModal .shareCode>button:focus-visible,
.profileModal .shareCode>button:active{
  background:color-mix(in srgb,var(--accent) 16%,var(--side) 84%)!important;
  color:var(--accent)!important;
  border-color:color-mix(in srgb,var(--accent) 42%,var(--line))!important;
}
.profileModal .profileSecurityLink{
  background:color-mix(in srgb,var(--accent) 10%,var(--side) 90%)!important;
  border-color:color-mix(in srgb,var(--accent) 28%,var(--line))!important;
  color:var(--accent)!important;
}
.profileModal .profileSecurityLink:hover,
.profileModal .profileSecurityLink:focus-visible,
.profileModal .profileSecurityLink:active{
  background:color-mix(in srgb,var(--accent) 16%,var(--side) 84%)!important;
  border-color:color-mix(in srgb,var(--accent) 42%,var(--line))!important;
  color:var(--accent)!important;
}

@media(max-width:820px){
  /* Match the Security page: no synthetic bottom gap; only the real device safe-area remains scrollable. */
  #sentualConversationSettingsModal .sentualConversationSettingsBox{
    padding-bottom:0!important;
  }
  #sentualConversationSettingsModal .sentualConversationSettingsScroll{
    padding-bottom:max(0px,env(safe-area-inset-bottom))!important;
    margin-bottom:0!important;
  }
}


/* ===== SENTUAL V4.3.48: desktop chat entry has no transient composer motion ===== */
@media(min-width:821px){
  .composer.sentualV4347DesktopEntryStable .composerInputShell>textarea#message{
    transition:none!important;
  }
}


/* ===== SENTUAL V4.3.48: desktop composer side controls share one baseline ===== */
@media(min-width:821px){
  #chat .composer>.attach{
    align-self:center!important;
  }
}


/* ===== SENTUAL V4.3.49: unread-below indicator ===== */
.scrollBottomBtn::after{
  content:"";position:absolute;right:2px;top:2px;width:9px;height:9px;border-radius:50%;
  background:#ef3340;box-shadow:0 0 0 2px color-mix(in srgb,var(--bg) 88%,transparent);
  opacity:0;transform:scale(.45);pointer-events:none;
  transition:opacity .18s ease,transform .24s cubic-bezier(.22,1,.36,1);
}
.scrollBottomBtn.sentualHasUnreadBelow::after{opacity:1;transform:scale(1)}


/* ===== SENTUAL V4.3.50: metadata + quarantined link preview ===== */
#messagePreviewLinkAction{color:var(--accent)!important}
.sentualQuarantinePreview{width:min(520px,100%);height:286px;margin-top:8px;border:1px solid color-mix(in srgb,var(--accent) 30%,var(--line));border-radius:13px;overflow:hidden;background:color-mix(in srgb,var(--side) 92%,var(--bubble) 8%);position:relative;opacity:0;transform:translateY(5px);transition:opacity .2s ease,transform .24s cubic-bezier(.22,1,.36,1);direction:ltr}
.sentualQuarantinePreview.sentualQuarantineReveal,.sentualQuarantinePreview.sentualQuarantineLoading{opacity:1;transform:none}
.sentualQuarantineFrame{display:block;width:100%;height:100%;border:0;background:#fff;pointer-events:none;user-select:none;-webkit-user-select:none;touch-action:none}
.sentualQuarantineLoadingText{position:absolute;inset:0;display:grid;place-items:center;color:var(--muted);font-size:10px;letter-spacing:.02em}
.bubble.sentualHasQuarantinePreview{max-width:min(650px,82%)}
@media(max-width:820px){.sentualQuarantinePreview{width:min(78vw,430px);height:255px}.bubble.sentualHasQuarantinePreview{max-width:90%}}

.sentualMessageLink{-webkit-touch-callout:none!important}


/* ===== SENTUAL V4.3.51: desktop keyboard-reply scroll containment ===== */
@media(min-width:821px){
  html,body{overflow:hidden!important;overscroll-behavior:none!important;}
  #messenger,.messenger{height:100%!important;min-height:0!important;overflow:hidden!important;}
  #chat.chat{height:100%!important;min-height:0!important;overflow:hidden!important;}
  #chat #messages{min-height:0!important;overscroll-behavior:contain!important;}
}


/* ===== SENTUAL V4.3.53: link preview/menu consistency + desktop cursor ===== */
#messageContextMenu #messagePreviewLinkAction,
.contextMenu #messagePreviewLinkAction,
#messagePreviewLinkAction{color:inherit!important;-webkit-text-fill-color:currentColor!important;}
@media(min-width:821px){
  html,body,#messenger,#chat,#messages{cursor:default!important;}
  #message{cursor:text!important;caret-color:var(--accent)!important;}
  #messages a.sentualMessageLink,#messages a.sentualLinkPreview,.scrollBottomBtn,#chat button{cursor:pointer!important;}
}

/* ===== SENTUAL V4.3.53: quarantine preview remains static and non-interactive ===== */
.sentualQuarantinePreview,.sentualQuarantinePreview *{overscroll-behavior:none!important;}
.sentualQuarantineFrame{overflow:hidden!important;pointer-events:none!important;touch-action:none!important;}
.sentualQuarantineLoadingText{padding:16px;text-align:center;}


/* ===== SENTUAL V4.3.55: screenshot Safe Preview + refined multi-select delete ===== */
.sentualQuarantinePreview{background:color-mix(in srgb,var(--side) 96%,var(--bubble) 4%)!important;}
.sentualQuarantineScreenshot{display:block;width:100%;height:100%;object-fit:cover;object-position:top center;background:#fff;pointer-events:none!important;user-select:none!important;-webkit-user-select:none!important;}
.sentualQuarantineCaptureFrame{position:fixed!important;left:-12000px!important;top:0!important;width:900px!important;height:560px!important;border:0!important;opacity:0!important;pointer-events:none!important;z-index:-1!important;}
.sentualQuarantineLoadingText{display:flex!important;flex-direction:column;align-items:center;justify-content:center;gap:6px!important;}
.sentualQuarantineLoadingText b{font-size:11px;color:var(--text);font-weight:650}.sentualQuarantineLoadingText small{font-size:9px;color:var(--muted)}
.sentualSafePreviewSpinner{width:22px;height:22px;border:2px solid color-mix(in srgb,var(--muted) 25%,transparent);border-top-color:var(--accent);border-radius:50%;animation:sentualSafePreviewSpin .8s linear infinite}
@keyframes sentualSafePreviewSpin{to{transform:rotate(360deg)}}
#messageContextMenu #messageSelectAction{border-top:1px solid color-mix(in srgb,var(--line) 72%,transparent)!important;margin-top:3px!important;padding-top:10px!important;}
#chat.sentualMultiSelectMode .chatHead{isolation:isolate;}
/* Never resize/re-pad header controls while selection mode is active. Only their glyph/action changes. */
#chat.sentualMultiSelectMode .chatHead .back.sentualMultiCancelBtn{visibility:visible!important;opacity:1!important;pointer-events:auto!important;}
#chat.sentualMultiSelectMode .chatHead .back.sentualMultiCancelBtn svg{width:18px!important;height:18px!important;fill:none!important;stroke:currentColor!important;stroke-width:1.9!important;stroke-linecap:round!important;stroke-linejoin:round!important;}
@media(min-width:821px){#chat.sentualMultiSelectMode .chatHead .back.sentualMultiCancelBtn{display:none!important;}}
@media(max-width:820px){#chat.sentualMultiSelectMode .chatHead .back.sentualMultiCancelBtn{display:grid!important;}}
#chat .chatHead .chatMenuBtn.sentualMultiDeleteBtn{color:#FF4545!important;-webkit-text-fill-color:#FF4545!important;background:transparent!important;border:0!important;}
#chat .chatHead .chatMenuBtn.sentualMultiDeleteBtn:hover,#chat .chatHead .chatMenuBtn.sentualMultiDeleteBtn:focus-visible{background:transparent!important;border:0!important;filter:none!important;}
#chat .chatHead .chatMenuBtn.sentualMultiDeleteBtn:disabled{opacity:.42!important;cursor:default!important;}
#chat .chatHead .chatMenuBtn.sentualMultiDeleteBtn .sentualMultiTrashIcon{display:block;width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;pointer-events:none;}
/* In select mode the whole bubble is the hit target. Children (images, videos, links, audio controls, buttons)
   cannot receive clicks, preview, play, navigate or open a media viewer. */
#messages.sentualMultiSelectMessages>.bubble[data-message-id]{cursor:pointer!important;transition:filter .16s ease,box-shadow .16s ease!important;-webkit-tap-highlight-color:transparent!important;}
#messages.sentualMultiSelectMessages>.bubble[data-message-id] *{pointer-events:none!important;}
#messages.sentualMultiSelectMessages>.bubble[data-message-id] video,
#messages.sentualMultiSelectMessages>.bubble[data-message-id] audio{pointer-events:none!important;}
/* Persistent version of the existing reply/search target flash. No outline/check badge and no layout shift. */
#messages.sentualMultiSelectMessages>.bubble.sentualMultiSelected{filter:brightness(1.28)!important;box-shadow:0 0 0 3px rgba(79,177,229,.22)!important;}
.sentualMultiCheck{display:none!important;}


/* ===== SENTUAL V4.3.58: message links are intentionally inert ===== */
#messages .sentualMessageLink{
  cursor:text!important;
  pointer-events:auto!important;
  -webkit-tap-highlight-color:transparent!important;
}
#messages .sentualLinkPreview{
  cursor:default!important;
  pointer-events:auto!important;
  -webkit-tap-highlight-color:transparent!important;
}
#messages .sentualMessageLink[aria-disabled="true"],
#messages .sentualLinkPreview[aria-disabled="true"]{
  cursor:inherit!important;
}
#messages .sentualLinkPreview[aria-disabled="true"]{cursor:default!important;}

/* ===== SENTUAL V4.3.60: popup date parity + profile-sized Management + suspension UX ===== */
/* The floating day badge must use the exact same text color as the in-flow day separators. */
.sentualDateSeparator,.sentualStickyDateBadge{color:color-mix(in srgb,var(--text) 94%,transparent)!important;}
.sentualStickyDateBadge{font-weight:600!important;}
:root[data-theme="light"] .sentualDateSeparator,:root[data-theme="light"] .sentualStickyDateBadge{color:#fff!important;}
@media(max-width:820px){
  .sentualDateSeparator,.sentualStickyDateBadge{color:color-mix(in srgb,var(--text) 94%,transparent)!important;}
  :root[data-theme="light"] .sentualDateSeparator,:root[data-theme="light"] .sentualStickyDateBadge{color:#fff!important;}
}

.managementModal{z-index:96!important;padding:18px!important;place-items:center!important;align-items:center!important;overflow:hidden!important;}
.managementBox{
  width:min(430px,100%)!important;max-width:430px!important;
  height:min(720px,calc(100dvh - 36px))!important;max-height:min(760px,calc(100dvh - 36px))!important;
  padding:22px!important;display:flex!important;flex-direction:column!important;overflow:hidden!important;
  text-align:left!important;background:var(--side)!important;border-color:var(--line)!important;color:var(--text)!important;
}
.managementBox>.modalClose{top:12px!important;right:12px!important;width:36px!important;height:36px!important;border-radius:12px!important;z-index:5!important;}
.managementHead{display:flex!important;align-items:center!important;gap:12px!important;padding-right:44px!important;margin:0 0 16px!important;flex:none!important;}
.managementIcon{width:42px;height:42px;border-radius:13px;display:grid;place-items:center;flex:none;background:color-mix(in srgb,var(--accent) 11%,var(--side));border:1px solid color-mix(in srgb,var(--accent) 25%,var(--line));color:var(--accent);}
.managementIcon svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;}
.managementHead h2{margin:0!important;font-size:18px!important;line-height:1.2!important;color:var(--text)!important;}
.managementHead p{margin:4px 0 0!important;font-size:9.5px!important;line-height:1.45!important;color:var(--muted)!important;}
.managementScroll{flex:1 1 auto!important;min-height:0!important;overflow:auto!important;overscroll-behavior:contain!important;-webkit-overflow-scrolling:touch!important;padding:0 3px 8px 0!important;}
.managementScroll .manageLabel{display:block;margin:0 0 10px;color:var(--muted);font-size:9.5px;}
.managementScroll .manageLabel .bigInput{margin-top:6px!important;}
.manageSuspendCard{margin:12px 0 10px;padding:13px;border:1px solid color-mix(in srgb,#FF4545 26%,var(--line));border-radius:15px;background:color-mix(in srgb,#FF4545 5%,var(--side));}
.manageSectionTitle b,.manageSectionTitle small{display:block;}.manageSectionTitle b{font-size:12px;color:var(--text)}.manageSectionTitle small{margin-top:4px;font-size:9px;line-height:1.5;color:var(--muted)}
.manageDaysLabel{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:11px;color:var(--muted);font-size:10px}.manageDaysLabel>div{display:flex;align-items:center;gap:7px}.manageDaysLabel .bigInput{width:92px!important;height:38px!important;margin:0!important;padding:8px 10px!important;text-align:center!important}.manageDaysLabel small{font-size:9px;color:var(--muted)}
.manageSuspendChoice{margin-top:11px!important;border:1px solid color-mix(in srgb,#FF4545 28%,var(--line))!important;background:color-mix(in srgb,#FF4545 7%,var(--side))!important}.manageSuspendChoice>span,.manageSuspendChoice b{color:#FF4545!important}.manageSuspendChoice small{color:var(--muted)!important}

@media(max-width:820px){
  .managementModal{padding:0!important;display:block!important;background:var(--bg)!important;overflow:hidden!important;}
  .managementBox{width:100%!important;max-width:none!important;height:100dvh!important;max-height:none!important;border:0!important;border-radius:0!important;box-shadow:none!important;padding:76px 18px calc(28px + env(safe-area-inset-bottom))!important;}
  .managementBox>.modalClose{top:max(18px,env(safe-area-inset-top))!important;right:18px!important;width:38px!important;height:38px!important;}
  .managementHead{padding-right:0!important;}
  .managementScroll{padding-right:2px!important;}
}

/* A temporarily suspended account can still read/send text in the official support chat, but the
   rest of the mutation UI is removed. The API independently enforces the same restriction. */
html.sentualAccountSuspended .newChatBtn,
html.sentualAccountSuspended #chat .attach,
html.sentualAccountSuspended #chat .chatMenuBtn,
html.sentualAccountSuspended #messageContextMenu,
html.sentualAccountSuspended #userContextMenu,
html.sentualAccountSuspended #sentualConversationSettingsBtn,
html.sentualAccountSuspended #profileAvatarEdit,
html.sentualAccountSuspended #profileEmailAction,
html.sentualAccountSuspended #profileModal .themeToggle,
html.sentualAccountSuspended #profileModal .profileSecurityLink,
html.sentualAccountSuspended #profileModal #profileMain>button.secondary,
html.sentualAccountSuspended #profileModal #profileMain>button.dangerBtn{display:none!important;}

/* V4.3.60 Management geometry hard override: older #managementModal rules used higher specificity.
   Keep this sheet pixel-aligned with Security / Conversation settings on desktop and truly full-screen on mobile. */
#managementModal.managementModal{
  z-index:96!important;
  padding:18px!important;
  place-items:center!important;
  align-items:center!important;
  overflow:hidden!important;
}
#managementModal>.managementBox{
  width:min(430px,100%)!important;
  max-width:430px!important;
  height:min(720px,calc(100dvh - 36px))!important;
  max-height:min(760px,calc(100dvh - 36px))!important;
  margin:auto!important;
  padding:22px!important;
  display:flex!important;
  flex-direction:column!important;
  overflow:hidden!important;
}
#managementModal>.managementBox>.modalClose{
  position:absolute!important;
  float:none!important;
  top:12px!important;
  right:12px!important;
  margin:0!important;
  width:36px!important;
  height:36px!important;
}
#managementModal>.managementBox>.managementScroll{
  flex:1 1 auto!important;
  min-height:0!important;
  overflow:auto!important;
}
@media(max-width:820px){
  #managementModal.managementModal{
    padding:0!important;
    display:block!important;
    align-items:stretch!important;
    overflow:hidden!important;
    background:var(--bg)!important;
  }
  #managementModal>.managementBox{
    width:100vw!important;
    max-width:none!important;
    height:100dvh!important;
    max-height:100dvh!important;
    margin:0!important;
    padding:76px 18px calc(28px + env(safe-area-inset-bottom))!important;
    border:0!important;
    border-radius:0!important;
    box-shadow:none!important;
    overflow:hidden!important;
  }
  #managementModal>.managementBox>.modalClose{
    position:absolute!important;
    top:max(18px,env(safe-area-inset-top))!important;
    right:18px!important;
    margin:0!important;
    width:38px!important;
    height:38px!important;
  }
  #managementModal>.managementBox>.managementScroll{
    overflow:auto!important;
    padding-right:2px!important;
  }
}


/* ===== SENTUAL V4.3.60: Management visibility invariant + admin chat-code action ===== */
/* The previous mobile fullscreen rule forced display:block even while the modal had .hidden.
   Keep .hidden authoritative at every viewport size. */
#managementModal.managementModal.hidden{
  display:none!important;
  visibility:hidden!important;
  pointer-events:none!important;
}
@media(max-width:820px){
  #managementModal.managementModal:not(.hidden){
    display:block!important;
    visibility:visible!important;
    pointer-events:auto!important;
  }
}
#adminCopyChatCodeAction.hidden{display:none!important;}


/* ===== SENTUAL V4.3.61: Management suspension controls + confirm overlay ownership ===== */
/* Confirmation dialogs opened from Management must sit above the Management sheet instead of behind it. */
#confirmModal{z-index:180!important;}
#confirmModal:not(.hidden){display:grid!important;visibility:visible!important;pointer-events:auto!important;}
.manageUnsuspendChoice{margin-top:8px!important;border:1px solid color-mix(in srgb,var(--accent) 28%,var(--line))!important;background:color-mix(in srgb,var(--accent) 7%,var(--side))!important;}
.manageUnsuspendChoice>span,.manageUnsuspendChoice b{color:var(--accent)!important;}
.manageUnsuspendChoice small{color:var(--muted)!important;}


/* ===== SENTUAL V4.3.62: stable home search height ===== */
/* Keep the existing search geometry, but never let the sidebar flex layout shrink it.
   The conversation list remains the flexible, scrollable region. */
.sidebar > .search{
  flex:0 0 auto!important;
  flex-shrink:0!important;
  min-height:39px!important;
  height:39px!important;
}

/* ===== SENTUAL V4.3.68: requested QR/share-code + default light accent ===== */
#profileModal .qrWrap{display:none!important}
:root[data-palette="default"][data-theme="light"]{
  --accent:#0A84FF;
  --mine:#0A84FF;
}
:root[data-palette="default"][data-theme="light"] .send,
:root[data-palette="default"][data-theme="light"] .officialBadge,
:root[data-palette="default"][data-theme="light"] .confirmYes:not(.danger){background:#0A84FF!important}
:root[data-palette="default"][data-theme="light"] .noChats button,
:root[data-palette="default"][data-theme="light"] .pinnedBar small,
:root[data-palette="default"][data-theme="light"] .pinGlyph{color:#0A84FF!important}
:root[data-palette="default"][data-theme="light"] #profileModal .shareCode>#profileCode{color:#0A84FF!important}
:root[data-palette="default"][data-theme="light"] #messages>.bubble.me:not(.attachmentCard):not(.walletMessage):not(.walletTextBubble):not(.sentualEmojiOnly){background:#0A84FF!important;color:#fff!important}
:root[data-palette="default"][data-theme="light"] #messages>.bubble.me:not(.attachmentCard):not(.walletMessage):not(.walletTextBubble):not(.sentualEmojiOnly)>.messageStamp,
:root[data-palette="default"][data-theme="light"] #messages>.bubble.me:not(.attachmentCard):not(.walletMessage):not(.walletTextBubble):not(.sentualEmojiOnly)>.messageStamp>span{color:rgba(255,255,255,.78)!important}
:root[data-palette="default"][data-theme="light"] #messages>.bubble.me:not(.attachmentCard):not(.walletMessage):not(.walletTextBubble):not(.sentualEmojiOnly)>.replyQuote{background:rgba(255,255,255,.14)!important;border-color:rgba(255,255,255,.28)!important;color:#fff!important}

#profileModal .shareCode{display:grid!important;grid-template-columns:minmax(0,1fr) auto!important;grid-template-rows:auto auto!important;align-items:end!important;column-gap:10px!important;row-gap:4px!important;padding:10px!important}
#profileModal .shareCode>small{grid-column:1/-1!important;margin:0!important}
#profileModal .shareCode>#profileCode{grid-column:1!important;grid-row:2!important;min-width:0!important;margin:0!important;overflow-wrap:anywhere!important;align-self:center!important}
#profileModal .shareCode>.shareCodeActions{grid-column:2!important;grid-row:2!important;display:flex!important;align-items:center!important;gap:7px!important;margin:0!important;padding:0!important}
#profileModal .shareCode>.shareCodeActions>button{
  position:static!important;inset:auto!important;transform:none!important;margin:0!important;padding:0!important;
  width:34px!important;min-width:34px!important;max-width:34px!important;height:34px!important;min-height:34px!important;max-height:34px!important;aspect-ratio:1/1!important;
  display:grid!important;place-items:center!important;border:1px solid var(--accent)!important;border-radius:8px!important;
  background:var(--accent)!important;background-image:none!important;color:var(--side)!important;line-height:1!important;box-shadow:none!important;filter:none!important;
}
#profileModal .shareCode>.shareCodeActions>button:hover,
#profileModal .shareCode>.shareCodeActions>button:focus-visible,
#profileModal .shareCode>.shareCodeActions>button:active{transform:none!important;background:var(--accent)!important;border-color:var(--accent)!important;color:var(--side)!important;filter:brightness(.94)!important}
#profileModal .shareCode>.shareCodeActions svg{width:17px!important;height:17px!important;display:block!important;fill:none!important;stroke:currentColor!important;stroke-width:1.8!important;stroke-linecap:round!important;stroke-linejoin:round!important}

.sentualChatCodeQrModal{z-index:96!important}
.sentualChatCodeQrBox{text-align:center!important;width:min(390px,calc(100vw - 30px))!important}
.sentualChatCodeQrBox>h2{margin-bottom:5px!important}
.sentualChatCodeQrBox>p{margin-top:0!important}
.sentualChatCodeQrCanvas{width:268px;height:268px;max-width:100%;margin:18px auto 2px;padding:8px;border-radius:20px;background:#fff;display:grid;place-items:center;box-shadow:0 12px 38px rgba(0,0,0,.12)}
.sentualChatCodeQrCanvas>img{display:block;width:252px;height:252px;max-width:100%;object-fit:contain;border-radius:12px;background:#fff}
#profileModal .qrWrap{overflow:hidden!important}
#profileModal #profileQr{background:#fff!important}


/* ===== SENTUAL V4.3.68: chat-menu separator + faster mobile PIN input ===== */
#chatMenu>#chatDeleteAction{
  border-top:1px solid color-mix(in srgb,var(--muted) 20%,transparent)!important;
}
.conversationPasswordGate .sentualPinKey,#chatPasswordModal .sentualPinKey{touch-action:manipulation!important;-webkit-user-select:none!important;user-select:none!important;}


/* ===== SENTUAL V4.3.68: QR monochrome render guard ===== */
#chatCodeQr{filter:none!important;mix-blend-mode:normal!important;opacity:1!important;background:#fff!important;}


/* ===== SENTUAL V4.3.83: management desktop geometry + mobile scroll button position ===== */
@media(min-width:821px){
  #managementModal.managementModal{
    display:grid!important;
    place-items:center!important;
    align-items:center!important;
    padding:18px!important;
    overflow:hidden!important;
    background:rgba(7,12,18,.58)!important;
  }
  #managementModal>.managementBox{
    width:min(560px,calc(100vw - 36px))!important;
    max-height:calc(100dvh - 36px)!important;
    margin:0!important;
    display:flex!important;
    flex-direction:column!important;
    overflow:hidden!important;
    padding:20px!important;
    background:var(--side)!important;
  }
  #managementModal>.managementBox>.modalClose{
    position:sticky!important;
    top:0!important;
    right:0!important;
    align-self:flex-end!important;
    margin:-4px -4px 8px 0!important;
    z-index:9!important;
  }
  #managementModal>.managementBox>.managementScroll{
    flex:1 1 auto!important;
    min-height:0!important;
    overflow:auto!important;
    padding:0 2px 2px 0!important;
    margin:0!important;
  }
}
/* ===== SENTUAL V4.3.83: QR center, first-open modal motion, management geometry, mobile scroll control ===== */
/* Native editing gestures are intentionally enabled only inside editable auth controls. */
#auth #recoveryInput,#auth #loginEmail,#auth #otp,#auth .sentualEmailOtpDigit{
  -webkit-user-select:text!important;user-select:text!important;-webkit-touch-callout:default!important;touch-action:auto!important;
}

/* First opening must animate too: bind motion directly to visible state, not only to a JS-added class. */
@media (prefers-reduced-motion:no-preference){
  #sentualSecurityModal.sentualSecurityModal:not(.hidden):not(.sentualV4307PopupClosing),
  #sentualConversationSettingsModal.sentualConversationSettingsModal:not(.hidden):not(.sentualV4307PopupClosing),
  #sentualSessionsModal.sentualSessionsModal:not(.hidden):not(.sentualV4307PopupClosing),
  #managementModal.managementModal:not(.hidden):not(.sentualV4307PopupClosing){
    animation:sentualV4307PopupFadeIn .24s cubic-bezier(.22,1,.36,1) both!important;
  }
  #sentualSecurityModal.sentualSecurityModal:not(.hidden):not(.sentualV4307PopupClosing)>.sentualSecurityBox,
  #sentualConversationSettingsModal.sentualConversationSettingsModal:not(.hidden):not(.sentualV4307PopupClosing)>.sentualConversationSettingsBox,
  #sentualSessionsModal.sentualSessionsModal:not(.hidden):not(.sentualV4307PopupClosing)>.sentualSessionsBox,
  #managementModal.managementModal:not(.hidden):not(.sentualV4307PopupClosing)>.managementBox{
    animation:sentualV4307PopupCardIn .30s cubic-bezier(.22,1,.36,1) both!important;
    will-change:transform,opacity;
  }
}

/* Desktop Management goes back to the same stable centered modal geometry as the other settings pages. */
@media(min-width:821px){
  #managementModal.managementModal:not(.hidden){
    position:fixed!important;inset:0!important;display:grid!important;place-items:center!important;align-items:center!important;
    width:auto!important;height:auto!important;padding:18px!important;overflow:hidden!important;background:rgba(7,12,18,.58)!important;
  }
  #managementModal>.managementBox{
    position:relative!important;width:min(430px,calc(100vw - 36px))!important;max-width:430px!important;
    height:min(720px,calc(100dvh - 36px))!important;max-height:min(760px,calc(100dvh - 36px))!important;
    margin:0!important;padding:22px!important;display:flex!important;flex-direction:column!important;overflow:hidden!important;
    background:var(--side)!important;border:1px solid var(--line)!important;border-radius:17px!important;
  }
  #managementModal>.managementBox>.modalClose{
    position:absolute!important;top:12px!important;right:12px!important;left:auto!important;margin:0!important;
    width:36px!important;height:36px!important;z-index:9!important;
  }
  #managementModal>.managementBox>.managementHead{padding-right:44px!important;margin:0 0 16px!important;}
  #managementModal>.managementBox>.managementScroll{flex:1 1 auto!important;min-height:0!important;overflow:auto!important;padding:0 3px 8px 0!important;margin:0!important;}
}

/* Mobile Management owns the full viewport including the bottom safe area, so no page strip can show through. */
@media(max-width:820px){
  #managementModal.managementModal:not(.hidden){
    position:fixed!important;inset:0 0 -1px 0!important;width:100vw!important;height:calc(100dvh + 1px)!important;min-height:calc(100dvh + 1px)!important;
    margin:0!important;padding:0!important;display:block!important;overflow:hidden!important;background:var(--side)!important;border:0!important;
  }
  #managementModal>.managementBox{
    position:absolute!important;inset:0!important;width:100%!important;max-width:none!important;height:100%!important;max-height:none!important;
    margin:0!important;padding:max(76px,calc(env(safe-area-inset-top) + 58px)) 18px max(28px,calc(env(safe-area-inset-bottom) + 18px))!important;
    border:0!important;border-radius:0!important;box-shadow:none!important;background:var(--side)!important;overflow:hidden!important;
  }
  #managementModal>.managementBox>.modalClose{position:fixed!important;top:max(18px,env(safe-area-inset-top))!important;right:18px!important;margin:0!important;}
  #managementModal>.managementBox>.managementScroll{min-height:0!important;overflow:auto!important;padding-right:2px!important;}
}


/* ===== SENTUAL V4.3.83: auth input ownership + corrected mobile scroll-button clearance ===== */
#auth input,#auth textarea{
  pointer-events:auto!important;
  -webkit-user-select:text!important;
  user-select:text!important;
  -webkit-touch-callout:default!important;
  touch-action:auto!important;
}
#auth button{pointer-events:auto!important;touch-action:manipulation!important;}
@media(max-width:820px){
  #chat .scrollBottomBtn{
    right:12px!important;
    bottom:calc(var(--sentual-composer-height,62px) + max(18px,env(safe-area-inset-bottom)))!important;
  }
}


/* ===== SENTUAL V4.3.83: mobile scroll-button equal edge spacing ===== */
@media(max-width:820px){
  #chat .scrollBottomBtn{
    right:12px!important;
    bottom:calc(var(--sentual-composer-height,62px) + 12px)!important;
  }
}


/* ===== SENTUAL V4.3.83: requested mobile scroll-button offsets only ===== */
@media(max-width:820px){
  #chat .scrollBottomBtn{
    right:10px!important;
    bottom:calc(var(--sentual-composer-height,62px) + 10px)!important;
  }
}

/* ===== SENTUAL V4.3.83: stable mobile scroll-button anchor ===== */
/* On mobile, anchor to the actual bottom edge of the message viewport instead of
   deriving the position from a composer-height variable that can briefly lag. */
@media(max-width:820px){
  #chat .scrollBottomBtn{
    right:10px!important;
    top:var(--sentual-scroll-mobile-top,calc(100% - var(--sentual-composer-height,62px) - 50px))!important;
    bottom:auto!important;
  }
}


/* ===== SENTUAL V4.3.83: outgoing media colors, light-palette date pills, QR card ===== */
/* Match outgoing photo captions and metadata to the same colors used by ordinary outgoing text. */
:root{
  --sentual-outgoing-text:var(--text);
  --sentual-outgoing-meta:var(--muted);
}
:root[data-palette="default"][data-theme="light"]{
  --sentual-outgoing-text:#fff;
  --sentual-outgoing-meta:rgba(255,255,255,.78);
}
#messages .bubble.file.attachmentCard.me>.attachmentCaption{
  color:var(--sentual-outgoing-text)!important;
}
#messages .bubble.file.attachmentCard.me>.messageStamp,
#messages .bubble.file.attachmentCard.me>.fileMessageTime,
#messages .bubble.file.attachmentCard.me>.attachmentCaption~.messageStamp,
#messages .bubble.file.attachmentCard.me>.attachmentCaption~.fileMessageTime,
#messages .bubble.file.attachmentCard.me>.messageStamp>span,
#messages .bubble.file.attachmentCard.me>.fileMessageTime>span{
  color:var(--sentual-outgoing-meta)!important;
}

/* Only the in-flow date pill is recolored; the floating sticky date badge stays untouched. */
:root[data-theme="light"][data-palette="mono"] #messages>.sentualDateSeparator,
:root[data-theme="light"][data-palette="rose"] #messages>.sentualDateSeparator,
:root[data-theme="light"][data-palette="green"] #messages>.sentualDateSeparator{
  background:color-mix(in srgb,var(--accent) 82%,transparent)!important;
  color:#fff!important;
}

/* QR artwork sits close to its white card, with no shadow and no sharp corner spill. */
.sentualChatCodeQrCanvas{
  width:268px!important;
  height:268px!important;
  padding:3px!important;
  border-radius:20px!important;
  overflow:hidden!important;
  background:#fff!important;
  box-shadow:none!important;
}
.sentualChatCodeQrCanvas>img{
  display:block!important;
  width:100%!important;
  height:100%!important;
  max-width:none!important;
  object-fit:contain!important;
  border-radius:17px!important;
  background:#fff!important;
}
.sentualChatCodeQrValue{
  margin:12px auto 2px!important;
  max-width:100%!important;
  color:var(--accent)!important;
  font-family:"Cascadia Code","Cascadia Mono","Cascadia",ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",monospace!important;
  font-size:13px!important;
  font-weight:600!important;
  line-height:1.35!important;
  letter-spacing:.35px!important;
  overflow-wrap:anywhere!important;
  user-select:text!important;
  -webkit-user-select:text!important;
}


/* ===== SENTUAL V4.3.83: media caption parity + pending photo stamp ===== */
/* Outgoing captioned photos use the exact readable foreground treatment of ordinary outgoing messages. */
#messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia){
  color:var(--sentual-outgoing-text,var(--text))!important;
}
#messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.attachmentCaption{
  color:var(--sentual-outgoing-text,var(--text))!important;
}
#messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.messageStamp,
#messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.fileMessageTime,
#messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.messageStamp>span,
#messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.fileMessageTime>span{
  color:var(--sentual-outgoing-meta,var(--muted))!important;
}
/* Default light's normal outgoing message is blue with white text, so media must be identical. */
:root[data-theme="light"][data-palette="default"] #messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia){
  background:#0A84FF!important;
  color:#fff!important;
}
:root[data-theme="light"][data-palette="default"] #messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.attachmentCaption{
  color:#fff!important;
}
:root[data-theme="light"][data-palette="default"] #messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.messageStamp,
:root[data-theme="light"][data-palette="default"] #messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.fileMessageTime,
:root[data-theme="light"][data-palette="default"] #messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.messageStamp>span,
:root[data-theme="light"][data-palette="default"] #messages .bubble.file.attachmentCard.attachment-image.me:not(.sentualCaptionlessMedia)>.fileMessageTime>span{
  color:rgba(255,255,255,.78)!important;
}
/* Pending photos now reserve the final timestamp/status row immediately, so the caption never sits on the bottom edge. */
#messages .sentualOptimisticPhoto>.sentualPhotoSendStatus:not(.failed){display:none!important;}
#messages .sentualOptimisticPhoto>.messageStamp.pending{
  display:flex!important;
  position:static!important;
  inset:auto!important;
  align-self:flex-end!important;
  width:max-content!important;
  margin:4px 12px 10px auto!important;
  padding:0!important;
  background:transparent!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}


/* ===== SENTUAL V4.3.83: reliable edge-back + contained captioned photos ===== */
@media(max-width:820px){
  /* Keep Safari's own horizontal page gesture from taking ownership halfway through Sentual's back swipe. */
  #chat.mobileOpen{overscroll-behavior-x:none!important;touch-action:pan-y!important;}
}

/* The media box owns the width of a captioned photo message. Long captions wrap inside it instead
   of widening the colored bubble while the locked photo keeps a smaller independent width. */
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia){
  width:var(--sentual-caption-photo-width,max-content)!important;
  max-width:min(560px,88%)!important;
  min-width:0!important;
  box-sizing:border-box!important;
  overflow:hidden!important;
}
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.inlineMedia,
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.inlineMedia-image{
  max-width:100%!important;
  box-sizing:border-box!important;
  flex:0 0 auto!important;
}
#messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia)>.attachmentCaption{
  width:100%!important;
  max-width:100%!important;
  min-width:0!important;
  box-sizing:border-box!important;
  overflow-wrap:anywhere!important;
  word-break:break-word!important;
}
@media(max-width:820px){
  #messages .bubble.file.attachmentCard.attachment-image:not(.sentualCaptionlessMedia){max-width:94%!important;}
}


/* ===== SENTUAL V4.3.83: voice/file bubbles follow the active message palette ===== */
/* Incoming file/voice cards use the same surface/text family as ordinary incoming messages. */
#messages>.bubble.file.attachmentCard:not(.me):not(.attachment-image):not(.attachment-video){
  background:var(--bubble)!important;
  color:var(--text)!important;
  border-color:color-mix(in srgb,var(--text) 10%,var(--line))!important;
}
#messages>.bubble.file.attachmentCard:not(.me):not(.attachment-image):not(.attachment-video) .fileDetails b,
#messages>.bubble.file.attachmentCard:not(.me):not(.attachment-image):not(.attachment-video) .attachmentCaption{
  color:var(--text)!important;
}
#messages>.bubble.file.attachmentCard:not(.me):not(.attachment-image):not(.attachment-video) .fileDetails small,
#messages>.bubble.file.attachmentCard:not(.me):not(.attachment-image):not(.attachment-video)>.fileMessageTime,
#messages>.bubble.file.attachmentCard:not(.me):not(.attachment-image):not(.attachment-video)>.messageStamp,
#messages>.bubble.file.attachmentCard:not(.me):not(.attachment-image):not(.attachment-video)>.fileMessageTime>span,
#messages>.bubble.file.attachmentCard:not(.me):not(.attachment-image):not(.attachment-video)>.messageStamp>span{
  color:var(--muted)!important;
}

/* Outgoing files use exactly the outgoing message background/foreground for the selected theme. */
#messages>.bubble.file.attachmentCard.me:not(.attachment-image):not(.attachment-video){
  background:var(--mine)!important;
  color:var(--sentual-outgoing-text,var(--text))!important;
  border-color:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 14%,transparent)!important;
}
#messages>.bubble.file.attachmentCard.me:not(.attachment-image):not(.attachment-video) .fileDetails b,
#messages>.bubble.file.attachmentCard.me:not(.attachment-image):not(.attachment-video) .attachmentCaption{
  color:var(--sentual-outgoing-text,var(--text))!important;
}
#messages>.bubble.file.attachmentCard.me:not(.attachment-image):not(.attachment-video) .fileDetails small,
#messages>.bubble.file.attachmentCard.me:not(.attachment-image):not(.attachment-video)>.fileMessageTime,
#messages>.bubble.file.attachmentCard.me:not(.attachment-image):not(.attachment-video)>.messageStamp,
#messages>.bubble.file.attachmentCard.me:not(.attachment-image):not(.attachment-video)>.fileMessageTime>span,
#messages>.bubble.file.attachmentCard.me:not(.attachment-image):not(.attachment-video)>.messageStamp>span{
  color:var(--sentual-outgoing-meta,var(--muted))!important;
}

/* Voice is a message bubble too: remove the independent blue/white card palette and inherit the chat theme. */
#messages>.sentualVoiceBubble>.sentualVoiceCard{
  background:var(--bubble)!important;
  color:var(--text)!important;
  border-color:color-mix(in srgb,var(--text) 10%,var(--line))!important;
  box-shadow:none!important;
}
#messages>.sentualVoiceBubble.me>.sentualVoiceCard{
  background:var(--mine)!important;
  color:var(--sentual-outgoing-text,var(--text))!important;
  border-color:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 14%,transparent)!important;
}
#messages>.sentualVoiceBubble .sentualVoiceInfo,
#messages>.sentualVoiceBubble .sentualVoiceStamp,
#messages>.sentualVoiceBubble .sentualVoiceStamp>span,
#messages>.sentualVoiceBubble .sentualVoiceSpeed,
#messages>.sentualVoiceBubble .sentualVoiceSpeed small{
  color:var(--muted)!important;
}
#messages>.sentualVoiceBubble.me .sentualVoiceInfo,
#messages>.sentualVoiceBubble.me .sentualVoiceStamp,
#messages>.sentualVoiceBubble.me .sentualVoiceStamp>span,
#messages>.sentualVoiceBubble.me .sentualVoiceSpeed,
#messages>.sentualVoiceBubble.me .sentualVoiceSpeed small{
  color:var(--sentual-outgoing-meta,var(--muted))!important;
}
#messages>.sentualVoiceBubble .sentualVoiceWave i{
  background:color-mix(in srgb,var(--muted) 60%,transparent)!important;
}
#messages>.sentualVoiceBubble .sentualVoiceWave i.played{
  background:var(--accent)!important;
}
#messages>.sentualVoiceBubble.me .sentualVoiceWave i{
  background:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 38%,transparent)!important;
}
#messages>.sentualVoiceBubble.me .sentualVoiceWave i.played{
  background:var(--sentual-outgoing-text,var(--text))!important;
}
#messages>.sentualVoiceBubble .sentualVoicePlay{
  background:color-mix(in srgb,var(--accent) 12%,var(--bubble))!important;
  color:var(--accent)!important;
  border-color:color-mix(in srgb,var(--accent) 24%,var(--line))!important;
}
#messages>.sentualVoiceBubble.me .sentualVoicePlay{
  background:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 14%,transparent)!important;
  color:var(--sentual-outgoing-text,var(--text))!important;
  border-color:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 18%,transparent)!important;
}

/* Keep the document/file glyph thematic without forcing a fixed blue that clashes with mono/rose/green. */
#messages>.bubble.file.attachmentCard:not(.attachment-image):not(.attachment-video) .fileIcon{
  background:color-mix(in srgb,var(--accent) 12%,transparent)!important;
  color:var(--accent)!important;
  border-color:color-mix(in srgb,var(--accent) 26%,transparent)!important;
}
#messages>.bubble.file.attachmentCard.me:not(.attachment-image):not(.attachment-video) .fileIcon{
  background:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 12%,transparent)!important;
  color:var(--sentual-outgoing-text,var(--text))!important;
  border-color:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 18%,transparent)!important;
}

/* V4.3.83 specificity guard: legacy palette/light rules must not override voice-message parity. */
:root[data-theme][data-palette] #messages > .sentualVoiceBubble > .sentualVoiceCard{
  background:var(--bubble)!important;
  color:var(--text)!important;
  border-color:color-mix(in srgb,var(--text) 10%,var(--line))!important;
  box-shadow:none!important;
}
:root[data-theme][data-palette] #messages > .sentualVoiceBubble.me > .sentualVoiceCard{
  background:var(--mine)!important;
  color:var(--sentual-outgoing-text,var(--text))!important;
  border-color:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 14%,transparent)!important;
}
:root[data-theme][data-palette] #messages > .sentualVoiceBubble > .sentualVoiceCard .sentualVoicePlay{
  background:color-mix(in srgb,var(--accent) 12%,var(--bubble))!important;
  color:var(--accent)!important;
  border-color:color-mix(in srgb,var(--accent) 24%,var(--line))!important;
}
:root[data-theme][data-palette] #messages > .sentualVoiceBubble.me > .sentualVoiceCard .sentualVoicePlay{
  background:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 14%,transparent)!important;
  color:var(--sentual-outgoing-text,var(--text))!important;
  border-color:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 18%,transparent)!important;
}

/* Pending document/audio uploads use the same outgoing palette from the first frame. */
:root[data-theme][data-palette] #messages > .sentualV59UploadBubble.me.attachment-file .sentualV57UploadBody,
:root[data-theme][data-palette] #messages > .sentualV59UploadBubble.me.attachment-audio .sentualV57UploadBody{
  background:var(--mine)!important;
  border-color:color-mix(in srgb,var(--sentual-outgoing-text,var(--text)) 14%,transparent)!important;
  box-shadow:none!important;
}
:root[data-theme][data-palette] #messages > .sentualV59UploadBubble.me.attachment-file .sentualV57UploadMain>b,
:root[data-theme][data-palette] #messages > .sentualV59UploadBubble.me.attachment-audio .sentualV57UploadMain>b{
  color:var(--sentual-outgoing-text,var(--text))!important;
}
:root[data-theme][data-palette] #messages > .sentualV59UploadBubble.me.attachment-file .sentualV57UploadStatus,
:root[data-theme][data-palette] #messages > .sentualV59UploadBubble.me.attachment-audio .sentualV57UploadStatus{
  color:var(--sentual-outgoing-meta,var(--muted))!important;
}


/* ===== SENTUAL V4.3.83: stable photos, long-caption square preview, composer direction ===== */
#message[dir="ltr"]{text-align:left!important;direction:ltr!important;unicode-bidi:plaintext!important}
#message[dir="rtl"]{text-align:right!important;direction:rtl!important;unicode-bidi:plaintext!important}

/* Keep a metadata preview painted continuously while encrypted bytes download and while the sharp
   <img> decodes. The old loader may replace children and remove its own preview variable; this layer
   belongs to the holder and therefore never blanks between those states. */
#messages .inlineMedia-image.sentualV4383StablePhoto{
  position:relative!important;overflow:hidden!important;
  background:color-mix(in srgb,var(--bubble) 88%,var(--side) 12%)!important;
}
#messages .inlineMedia-image.sentualV4383StablePhoto::before{
  content:""!important;position:absolute!important;inset:-14px!important;z-index:0!important;pointer-events:none!important;
  background-image:var(--sentual-v4383-preview,none)!important;background-size:cover!important;background-position:center!important;
  filter:blur(14px) saturate(.86)!important;transform:scale(1.08)!important;opacity:.96!important;
  transition:opacity .18s ease!important;
}
#messages .inlineMedia-image.sentualV4383StablePhoto::after{
  content:""!important;position:absolute!important;inset:0!important;z-index:0!important;pointer-events:none!important;
  background:color-mix(in srgb,var(--bubble) 22%,transparent)!important;opacity:1!important;transition:opacity .18s ease!important;
}
#messages .inlineMedia-image.sentualV4383StablePhoto>.mediaStatus,
#messages .inlineMedia-image.sentualV4383StablePhoto>.sentualVideoDownloadProgress,
#messages .inlineMedia-image.sentualV4383StablePhoto>.sentualPhotoDownloadButton{position:relative!important;z-index:2!important}
#messages .inlineMedia-image.sentualV4383StablePhoto>.photoOpen{z-index:3!important}
#messages .inlineMedia-image.sentualV4383StablePhoto.sentualPhotoLoaded::before,
#messages .inlineMedia-image.sentualV4383StablePhoto.sentualPhotoLoaded::after{opacity:0!important}
#messages .inlineMedia-image.sentualV4383StablePhoto.sentualPhotoLoaded>.photoOpen{opacity:1!important}

/* Long captions get a wide message card and a square cropped in-chat photo. Full dimensions remain
   available in the existing image viewer when the user taps the photo. */
#messages .bubble.file.attachmentCard.attachment-image.sentualV4383LongCaptionPhoto{
  width:min(560px,88%)!important;max-width:min(560px,88%)!important;min-width:0!important;
}
#messages .bubble.file.attachmentCard.attachment-image.sentualV4383LongCaptionPhoto>.inlineMedia,
#messages .bubble.file.attachmentCard.attachment-image.sentualV4383LongCaptionPhoto>.inlineMedia-image{
  width:100%!important;max-width:100%!important;height:auto!important;aspect-ratio:1 / 1!important;min-height:0!important;
}
#messages .bubble.file.attachmentCard.attachment-image.sentualV4383LongCaptionPhoto .photoOpen,
#messages .bubble.file.attachmentCard.attachment-image.sentualV4383LongCaptionPhoto .photoOpen img{
  width:100%!important;height:100%!important;max-height:none!important;object-fit:cover!important;
}
#messages .bubble.file.attachmentCard.attachment-image.sentualV4383LongCaptionPhoto>.attachmentCaption{
  width:100%!important;max-width:100%!important;white-space:pre-wrap!important;overflow-wrap:anywhere!important;word-break:break-word!important;
}
@media(max-width:820px){
  #messages .bubble.file.attachmentCard.attachment-image.sentualV4383LongCaptionPhoto{
    width:94%!important;max-width:94%!important;
  }
}

/* Drawing remains responsive even on large photos: work is repainted once per frame, not once per raw
   touchmove. The undo control communicates when there is nothing left to undo. */
#photoEditUndo:disabled{opacity:.32!important;pointer-events:none!important}
.photoEditStage.drawMode,.photoEditStage.drawMode canvas{touch-action:none!important}


/* ===== SENTUAL V4.3.84: voice card geometry + deterministic playback reset/queue ===== */
/* The generic attachment skin must never paint behind a voice card. The voice card is the single
   visible surface, so its border cannot appear doubled or let a second background peek out. */
:root[data-theme][data-palette] #messages > .bubble.file.attachmentCard.sentualVoiceBubble,
#messages > .bubble.file.attachmentCard.sentualVoiceBubble,
#messages > .bubble.file.attachmentCard.sentualVoiceBubble.me{
  padding:0!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  outline:0!important;
  overflow:hidden!important;
}
:root[data-theme][data-palette] #messages > .sentualVoiceBubble > .sentualVoiceCard,
#messages > .sentualVoiceBubble > .sentualVoiceCard{
  width:100%!important;
  max-width:100%!important;
  margin:0!important;
  box-sizing:border-box!important;
  overflow:hidden!important;
  box-shadow:none!important;
  outline:0!important;
}


/* ===== SENTUAL V4.3.100: readable timestamp/status on captionless photos ===== */
/* A photo without a caption has no message-colored footer, so its time/state must live on the
   image itself. Keep that overlay image-readable instead of inheriting a palette color that can
   disappear against the media surface (especially White & Black / Rose / Green). */
#messages > .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia,
#messages > .bubble.file.attachmentCard.attachment-image.sentualOptimisticPhoto:not(:has(> .attachmentCaption)){
  position:relative!important;
}
#messages > .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia > .messageStamp,
#messages > .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia > .fileMessageTime,
#messages > .bubble.file.attachmentCard.attachment-image.sentualOptimisticPhoto:not(:has(> .attachmentCaption)) > .messageStamp,
#messages > .bubble.file.attachmentCard.attachment-image.sentualOptimisticPhoto:not(:has(> .attachmentCaption)) > .fileMessageTime{
  position:absolute!important;
  z-index:14!important;
  right:7px!important;
  bottom:6px!important;
  inset-inline-start:auto!important;
  inset-inline-end:7px!important;
  width:max-content!important;
  max-width:calc(100% - 14px)!important;
  margin:0!important;
  padding:3px 6px!important;
  border:0!important;
  border-radius:8px!important;
  background:rgba(0,0,0,.52)!important;
  color:rgba(255,255,255,.90)!important;
  box-shadow:none!important;
  backdrop-filter:blur(7px)!important;
  -webkit-backdrop-filter:blur(7px)!important;
  line-height:1.15!important;
  white-space:nowrap!important;
}
#messages > .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia > .messageStamp > span,
#messages > .bubble.file.attachmentCard.attachment-image.sentualCaptionlessMedia > .fileMessageTime > span,
#messages > .bubble.file.attachmentCard.attachment-image.sentualOptimisticPhoto:not(:has(> .attachmentCaption)) > .messageStamp > span,
#messages > .bubble.file.attachmentCard.attachment-image.sentualOptimisticPhoto:not(:has(> .attachmentCaption)) > .fileMessageTime > span{
  color:inherit!important;
}


/* ===== SENTUAL V4.3.100: conversation settings consolidation + fixed QR popup ===== */
/* Appearance controls now live in Conversation settings, not on the profile sheet. */
#sentualV4217ProfileSettings.sentualV4386SettingsMoved{display:none!important}
.sentualConversationSettingsBox .sentualV4386AppearanceCard .sentualThemePresets{margin-top:10px!important}
.sentualConversationSettingsBox .sentualV4386AppearanceCard #sentualMessageScaleRow{
  margin:13px 0 0!important;padding:13px 0 0!important;border-top:1px solid var(--line)!important;
}
.sentualConversationSettingsBox .sentualV4386ToggleStack{display:grid!important;gap:8px!important;margin-top:10px!important}
.sentualConversationSettingsBox .sentualV4386ToggleStack #sentualAutoMediaRow,
.sentualConversationSettingsBox .sentualV4386ToggleStack #sentualNotificationSettings,
.sentualConversationSettingsBox .sentualV4386ToggleStack #sentualNotificationSetting{margin:0!important}
.sentualConversationSettingsBox .sentualV4386ToggleStack #sentualNotificationSettings{
  padding:0!important;border:0!important;background:transparent!important;
}
.sentualConversationSettingsBox .sentualV4386ToggleStack #sentualNotificationSettings>.sentualSettingsTitle{display:none!important}
.sentualConversationSettingsBox .sentualV4386VoiceAutoplayCard{margin-bottom:2px!important}
.sentualConversationSettingsBox .sentualV4386VoiceAutoplayCard .sentualNotificationSetting{margin-top:10px!important}

/* The QR is display-only: no text/image selection, native image dragging or horizontal popup panning. */
#chatCodeQrModal.sentualChatCodeQrModal{
  touch-action:none!important;overscroll-behavior:none!important;overflow:hidden!important;
  -webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important;
}
#chatCodeQrModal .sentualChatCodeQrBox,
#chatCodeQrModal .sentualChatCodeQrCanvas{
  max-width:100%!important;overflow:hidden!important;overscroll-behavior:none!important;
  -webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important;
}
#chatCodeQrModal #chatCodeQr{
  -webkit-user-select:none!important;user-select:none!important;-webkit-user-drag:none!important;
  -webkit-touch-callout:none!important;pointer-events:none!important;touch-action:none!important;
}

/* ===== Sentual V4.3.100: fixed delete-account recovery field ===== */
#deleteRecovery{resize:none!important}

/* ===== SENTUAL V4.3.100: QR waits for themed SVG logo, then fades in as one finished image ===== */
#chatCodeQrModal .sentualChatCodeQrCanvas{position:relative!important;overflow:hidden!important;}
#chatCodeQrModal .sentualChatCodeQrLoader{
  position:absolute!important;inset:0!important;display:grid!important;place-items:center!important;z-index:2!important;
  opacity:1!important;visibility:visible!important;pointer-events:none!important;
  transition:opacity .18s ease,visibility 0s linear .18s!important;
}
#chatCodeQrModal .sentualChatCodeQrLoader .iosSpinner{width:22px!important;height:22px!important;color:var(--accent)!important;}
#chatCodeQrModal .sentualChatCodeQrLoader .iosSpinner i{background:currentColor!important;}
#chatCodeQrModal #chatCodeQr{
  position:relative!important;z-index:1!important;opacity:0!important;transform:scale(.985)!important;
  transition:opacity .26s ease,transform .32s cubic-bezier(.22,1,.36,1)!important;
  will-change:opacity,transform!important;
}
#chatCodeQrModal .sentualChatCodeQrCanvas.sentualQrReady #chatCodeQr{opacity:1!important;transform:scale(1)!important;}
#chatCodeQrModal .sentualChatCodeQrCanvas.sentualQrReady .sentualChatCodeQrLoader{opacity:0!important;visibility:hidden!important;}
#chatCodeQrModal .sentualChatCodeQrCanvas.sentualQrLoading #chatCodeQr{opacity:0!important;transform:scale(.985)!important;}
#chatCodeQrModal .sentualChatCodeQrCanvas.sentualQrLoading .sentualChatCodeQrLoader{opacity:1!important;visibility:visible!important;transition-delay:0s!important;}
@media(prefers-reduced-motion:reduce){
  #chatCodeQrModal #chatCodeQr,#chatCodeQrModal .sentualChatCodeQrLoader{transition-duration:.01ms!important;}
}


/* ===== SENTUAL V4.3.100: QR hold/reveal, themed attachment actions, Mini video ===== */
/* Never paint the native broken-image/alt fallback while the finished QR is being assembled. */
#chatCodeQrModal .sentualChatCodeQrCanvas.sentualQrLoading #chatCodeQr{
  visibility:hidden!important;opacity:0!important;
}
#chatCodeQrModal .sentualChatCodeQrCanvas.sentualQrReady #chatCodeQr{
  visibility:visible!important;opacity:1!important;
}
:root[data-theme="light"] #chatCodeQrModal .sentualChatCodeQrLoader .iosSpinner{color:#505861!important}
:root[data-theme="dark"] #chatCodeQrModal .sentualChatCodeQrLoader .iosSpinner{color:#fff!important}

/* Attachment controls use the active palette rather than the default blue tint. */
#chat .composer>.attach{
  background:color-mix(in srgb,var(--accent) 7%,var(--side) 93%)!important;
  color:var(--accent)!important;
  border-color:color-mix(in srgb,var(--accent) 18%,var(--line))!important;
}
#chat .composer>.attach:hover,
#chat .composer>.attach:focus-visible,
#chat .composer>.attach:active,
#chat .composer>.attach[aria-expanded="true"]{
  background:color-mix(in srgb,var(--accent) 15%,var(--side) 85%)!important;
  color:var(--accent)!important;
  border-color:color-mix(in srgb,var(--accent) 34%,var(--line))!important;
}
#attachMenu.attachMenu{
  background:color-mix(in srgb,var(--side) 96%,var(--accent) 4%)!important;
  border-color:color-mix(in srgb,var(--accent) 16%,var(--line))!important;
}
#attachMenu.attachMenu>button{
  display:flex!important;align-items:center!important;gap:11px!important;
  color:var(--text)!important;background:transparent!important;
  border:1px solid transparent!important;border-radius:10px!important;
}
#attachMenu.attachMenu>button:hover,
#attachMenu.attachMenu>button:focus-visible,
#attachMenu.attachMenu>button:active{
  background:color-mix(in srgb,var(--accent) 12%,var(--side) 88%)!important;
  border-color:color-mix(in srgb,var(--accent) 20%,var(--line))!important;
  color:var(--text)!important;
}
.sentualAttachMenuIcon{width:22px;height:22px;display:grid;place-items:center;flex:0 0 22px;color:var(--accent)!important}
.sentualAttachMenuIcon svg{width:20px;height:20px;display:block;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

/* Mini video recorder: voice-recorder language, with a live 1:1 camera surface on top. */
.sentualMiniVideoOverlay{position:fixed;inset:0;z-index:365;display:flex;align-items:flex-end;justify-content:center;padding:14px;background:rgba(0,0,0,.28);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
.sentualMiniVideoOverlay.hidden{display:none!important}
.sentualMiniVideoSheet{width:min(560px,100%);padding:17px 17px max(17px,env(safe-area-inset-bottom));border:1px solid var(--line);border-radius:24px;background:var(--side);color:var(--text);box-shadow:0 22px 72px rgba(0,0,0,.28);overflow:hidden}
html.sentual-ios .sentualMiniVideoSheet{border-radius:30px}
.sentualMiniVideoHead{display:grid;grid-template-columns:14px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:28px;direction:ltr}
.sentualMiniVideoHead>b{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sentualMiniVideoHead time{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.sentualMiniVideoDot{width:9px;height:9px;border-radius:50%;background:#ff4b5d;box-shadow:0 0 0 0 rgba(255,75,93,.35);animation:sentualVoiceDot 1.15s infinite}
.sentualMiniVideoSheet.paused .sentualMiniVideoDot{animation:none;opacity:.45}
.sentualMiniVideoCamera{position:relative;width:min(420px,100%);aspect-ratio:1/1;margin:13px auto 14px;border:1px solid color-mix(in srgb,var(--accent) 18%,var(--line));border-radius:22px;overflow:hidden;background:color-mix(in srgb,var(--bubble) 90%,#000 10%)}
.sentualMiniVideoPreview{display:block;width:100%;height:100%;object-fit:cover;background:#0a0d10;transform:scaleX(-1)}
.sentualMiniVideoOverlay.reviewMode .sentualMiniVideoPreview{transform:none}
.sentualMiniVideoStarting{position:absolute;inset:0;display:grid;place-items:center;background:var(--side);opacity:1;transition:opacity .2s ease;pointer-events:none}
.sentualMiniVideoStarting .iosSpinner{width:22px;height:22px;color:var(--muted)}.sentualMiniVideoStarting .iosSpinner i{background:currentColor!important}
.sentualMiniVideoOverlay.cameraReady .sentualMiniVideoStarting{opacity:0;visibility:hidden}
.sentualMiniVideoControls,.sentualMiniVideoReview{display:grid;grid-template-columns:52px 1fr 52px;align-items:center;gap:15px;margin-top:5px}
.sentualMiniVideoControls.hidden,.sentualMiniVideoReview.hidden{display:none!important}
.sentualMiniVideoControls button,.sentualMiniVideoReview button{width:52px;height:52px;padding:0;border:1px solid var(--line);border-radius:17px;background:var(--bubble);color:var(--text);display:grid;place-items:center;box-shadow:none;transform:none!important}
.sentualMiniVideoControls .primaryAction,.sentualMiniVideoReview .previewAction{justify-self:center;width:64px;height:64px;border-radius:50%;background:var(--accent);color:#fff;border-color:transparent}
.sentualMiniVideoControls [data-act="stop"],.sentualMiniVideoReview .sendAction{justify-self:end}.sentualMiniVideoReview .sendAction{background:var(--accent);color:#fff;border-color:transparent}
.sentualMiniVideoControls svg,.sentualMiniVideoReview svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.sentualMiniVideoOverlay.reviewMode .sentualMiniVideoDot{visibility:hidden}
@media(max-width:820px){.sentualMiniVideoSheet{border-radius:22px}.sentualMiniVideoCamera{width:min(78vw,390px);border-radius:20px}}

/* Mini-video messages are square with avatar-like rounded corners, not circular. */
#messages>.bubble.file.attachmentCard.attachment-video.sentualMiniVideoBubble{
  width:min(330px,78%)!important;max-width:min(330px,78%)!important;min-width:180px!important;
  padding:0!important;border:0!important;background:transparent!important;box-shadow:none!important;overflow:visible!important;
}
#messages>.sentualMiniVideoBubble>.inlineMedia-video,
#messages>.sentualMiniVideoBubble>.inlineMedia,
#messages>.sentualMiniVideoBubble .sentualV4211VideoBox,
#messages>.sentualMiniVideoBubble .sentualMiniVideoMedia{
  width:100%!important;height:auto!important;aspect-ratio:1/1!important;min-height:0!important;max-height:none!important;border-radius:22px!important;overflow:hidden!important;background:#0a0d10!important;
}
#messages>.sentualMiniVideoBubble video{width:100%!important;height:100%!important;object-fit:cover!important;border-radius:inherit!important}
#messages>.sentualMiniVideoBubble>.messageStamp,#messages>.sentualMiniVideoBubble>.fileMessageTime{right:8px!important;bottom:7px!important;background:rgba(0,0,0,.50)!important;color:rgba(255,255,255,.92)!important;border-radius:8px!important;padding:3px 6px!important;backdrop-filter:blur(7px)!important;-webkit-backdrop-filter:blur(7px)!important}
#messages>.sentualMiniVideoUpload{width:min(330px,78%)!important;max-width:min(330px,78%)!important;padding:0!important;background:transparent!important;border:0!important;box-shadow:none!important}
#messages>.sentualMiniVideoUpload>.sentualV57UploadBody{position:relative!important;width:100%!important;aspect-ratio:1/1!important;border-radius:22px!important;overflow:hidden!important;background-image:linear-gradient(rgba(0,0,0,.18),rgba(0,0,0,.18)),var(--sentual-mini-video-poster)!important;background-size:cover!important;background-position:center!important;border:1px solid color-mix(in srgb,var(--accent) 20%,var(--line))!important}

/* ===== SENTUAL V4.3.100: QR loader, photo stamp containment, themed attachments and Mini video polish ===== */
/* QR loader stays a neutral dark gray in every palette and the broken-image fallback is never painted. */
#chatCodeQrModal .sentualChatCodeQrLoader .iosSpinner{color:#515860!important}
#chatCodeQrModal .sentualChatCodeQrLoader .iosSpinner i{background:currentColor!important}
#chatCodeQrModal #chatCodeQr[aria-hidden="true"],
#chatCodeQrModal .sentualChatCodeQrCanvas.sentualQrLoading #chatCodeQr{visibility:hidden!important;opacity:0!important}
#chatCodeQrModal .sentualChatCodeQrCanvas.sentualQrReady #chatCodeQr{visibility:visible!important;opacity:1!important}

/* Keep captionless image time/state physically inside the rendered image, regardless of portrait geometry. */
#messages .attachment-image .inlineMedia,
#messages .attachment-image .inlineMedia-image{position:relative!important}
#messages .attachment-image .sentualMediaStampInside{
  position:absolute!important;right:7px!important;bottom:7px!important;left:auto!important;top:auto!important;
  z-index:16!important;width:max-content!important;max-width:calc(100% - 14px)!important;margin:0!important;
  padding:3px 6px!important;border:0!important;border-radius:8px!important;background:rgba(0,0,0,.54)!important;
  color:rgba(255,255,255,.94)!important;line-height:1.15!important;white-space:nowrap!important;
  backdrop-filter:blur(7px)!important;-webkit-backdrop-filter:blur(7px)!important;box-shadow:none!important;
}
#messages .attachment-image .sentualMediaStampInside>span{color:inherit!important}

/* Attachment button/menu colors come from the active palette even before hover. */
#chat .composer>.attach{
  background:color-mix(in srgb,var(--accent) 10%,var(--side) 90%)!important;
  color:var(--accent)!important;border-color:color-mix(in srgb,var(--accent) 24%,var(--line))!important;
}
#chat .composer>.attach:hover,#chat .composer>.attach:focus-visible,#chat .composer>.attach:active,#chat .composer>.attach[aria-expanded="true"]{
  background:color-mix(in srgb,var(--accent) 20%,var(--side) 80%)!important;
  border-color:color-mix(in srgb,var(--accent) 42%,var(--line))!important;
}
#attachMenu.attachMenu>button{
  background:color-mix(in srgb,var(--accent) 6%,var(--side) 94%)!important;
  border-color:color-mix(in srgb,var(--accent) 10%,var(--line))!important;
}
#attachMenu.attachMenu>button:hover,#attachMenu.attachMenu>button:focus-visible,#attachMenu.attachMenu>button:active{
  background:color-mix(in srgb,var(--accent) 15%,var(--side) 85%)!important;
  border-color:color-mix(in srgb,var(--accent) 28%,var(--line))!important;
}
#attachMenu .sentualAttachMenuIcon{color:var(--accent)!important}

/* Recorder countdown empties from a full ring to zero over the 20 second limit. */
.sentualMiniVideoHead{grid-template-columns:36px minmax(0,1fr) auto!important;gap:10px!important}
.sentualMiniVideoCountdown{position:relative;width:36px;height:36px;display:grid;place-items:center;flex:none;color:var(--accent)}
.sentualMiniVideoCountdown svg{position:absolute;inset:0;width:36px;height:36px;overflow:visible;transform:rotate(-90deg)}
.sentualMiniVideoCountdown circle{fill:none;stroke-width:2.4}
.sentualMiniVideoCountdown .track{stroke:color-mix(in srgb,var(--muted) 25%,transparent)}
.sentualMiniVideoCountdown .progress{stroke:currentColor;stroke-linecap:round;transition:stroke-dashoffset .08s linear}
.sentualMiniVideoCountdown span{position:relative;z-index:1;font-size:9px;font-weight:750;font-variant-numeric:tabular-nums;color:var(--text)}
.sentualMiniVideoOverlay.reviewMode .sentualMiniVideoCountdown{opacity:.32}

/* The live camera and sent Mini videos share the exact same more-rounded 1:1 geometry. */
.sentualMiniVideoCamera{border-radius:30px!important}
@media(max-width:820px){.sentualMiniVideoCamera{border-radius:30px!important}}
#messages>.bubble.file.attachmentCard.attachment-video.sentualMiniVideoBubble{
  width:min(330px,78vw)!important;max-width:min(330px,78vw)!important;min-width:180px!important;
  aspect-ratio:1/1!important;padding:0!important;border:0!important;background:transparent!important;box-shadow:none!important;overflow:hidden!important;border-radius:30px!important;
}
#messages>.sentualMiniVideoBubble>.inlineMedia-video,
#messages>.sentualMiniVideoBubble>.inlineMedia,
#messages>.sentualMiniVideoBubble .sentualV4211VideoBox,
#messages>.sentualMiniVideoBubble .sentualMiniVideoMedia{
  width:100%!important;height:100%!important;min-width:100%!important;max-width:100%!important;min-height:100%!important;max-height:100%!important;
  aspect-ratio:1/1!important;border-radius:30px!important;overflow:hidden!important;background:#0a0d10!important;margin:0!important;padding:0!important;
}
#messages>.sentualMiniVideoBubble video{display:block!important;width:100%!important;height:100%!important;aspect-ratio:1/1!important;object-fit:cover!important;border-radius:30px!important;background:#0a0d10!important}
#messages>.sentualMiniVideoUpload{width:min(330px,78vw)!important;max-width:min(330px,78vw)!important;aspect-ratio:1/1!important;border-radius:30px!important;overflow:hidden!important}
#messages>.sentualMiniVideoUpload>.sentualV57UploadBody{width:100%!important;height:100%!important;aspect-ratio:1/1!important;border-radius:30px!important}

/* Review trim bar: compact sound button plus dual-handle timeline. */
.sentualMiniVideoTrim{display:grid;grid-template-columns:42px minmax(0,1fr);gap:11px;align-items:center;margin:3px 0 10px}
.sentualMiniVideoTrim.hidden{display:none!important}
.sentualMiniVideoSound{width:42px;height:42px;padding:0;border:1px solid var(--line);border-radius:14px;background:var(--bubble);color:var(--text);display:grid;place-items:center}
.sentualMiniVideoSound svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.sentualMiniVideoTrimBody{min-width:0;display:grid;gap:5px}
.sentualMiniVideoTrimTrack{position:relative;height:24px;border-radius:12px;background:color-mix(in srgb,var(--muted) 12%,var(--bubble));overflow:visible}
.sentualMiniVideoTrimSelection{position:absolute;top:5px;bottom:5px;left:0;right:0;border-radius:8px;background:color-mix(in srgb,var(--accent) 38%,var(--side) 62%);pointer-events:none}
.sentualMiniVideoTrimTrack input[type="range"]{position:absolute;inset:0;width:100%;height:24px;margin:0;background:transparent;appearance:none;-webkit-appearance:none;pointer-events:none;outline:0}
.sentualMiniVideoTrimTrack input[type="range"]::-webkit-slider-runnable-track{height:2px;background:transparent}
.sentualMiniVideoTrimTrack input[type="range"]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:24px;margin-top:-11px;border:2px solid var(--side);border-radius:9px;background:var(--accent);box-shadow:0 1px 4px rgba(0,0,0,.18);pointer-events:auto}
.sentualMiniVideoTrimTrack input[type="range"]::-moz-range-track{height:2px;background:transparent}
.sentualMiniVideoTrimTrack input[type="range"]::-moz-range-thumb{width:15px;height:20px;border:2px solid var(--side);border-radius:8px;background:var(--accent);box-shadow:0 1px 4px rgba(0,0,0,.18);pointer-events:auto}
.sentualMiniVideoTrimLabel{font-size:9.5px;color:var(--muted);font-variant-numeric:tabular-nums;text-align:center}

/* Correct bin glyph geometry and keep all recorder icons optically centered. */
.sentualMiniVideoControls button svg,.sentualMiniVideoReview button svg{display:block;overflow:visible}
#messageMiniVideoMuteAction.hidden{display:none!important}
:root[data-theme] #chatCodeQrModal .sentualChatCodeQrLoader .iosSpinner{color:#515860!important}

/* ===== SENTUAL V4.3.100: Mini video inline-loop UX, stamps, composer borders, trim and camera polish ===== */
/* Rear camera is the recording default. Mirror only the selfie camera. */
.sentualMiniVideoPreview{transform:none!important}
.sentualMiniVideoCamera.frontCamera .sentualMiniVideoPreview{transform:scaleX(-1)!important}
.sentualMiniVideoOverlay.reviewMode .sentualMiniVideoPreview{transform:none!important}
.sentualMiniVideoCamera{touch-action:none!important}

/* Mini videos behave like inline GIF-style messages: square, clipped, looping, never viewer cards. */
#messages>.bubble.file.attachmentCard.attachment-video.sentualMiniVideoBubble{
  position:relative!important;
  width:min(330px,78vw)!important;max-width:min(330px,78vw)!important;min-width:180px!important;
  aspect-ratio:1/1!important;padding:0!important;border:0!important;background:transparent!important;
  box-shadow:none!important;overflow:visible!important;border-radius:30px!important;margin-bottom:20px!important;
}
#messages>.sentualMiniVideoBubble>.inlineMedia-video,
#messages>.sentualMiniVideoBubble>.inlineMedia,
#messages>.sentualMiniVideoBubble .sentualV4211VideoBox,
#messages>.sentualMiniVideoBubble .sentualMiniVideoMedia{
  width:100%!important;height:100%!important;aspect-ratio:1/1!important;border-radius:30px!important;
  overflow:hidden!important;background:#0a0d10!important;margin:0!important;padding:0!important;border:0!important;
}
#messages>.sentualMiniVideoBubble video{
  display:block!important;width:100%!important;height:100%!important;aspect-ratio:1/1!important;
  object-fit:cover!important;border-radius:30px!important;background:#0a0d10!important;pointer-events:auto!important;
}
/* Delivery time/status sits outside the media, like a sticker/emoji message. */
#messages>.sentualMiniVideoBubble>.messageStamp,
#messages>.sentualMiniVideoBubble>.fileMessageTime{
  position:absolute!important;top:auto!important;bottom:-17px!important;right:auto!important;left:0!important;
  width:max-content!important;max-width:100%!important;margin:0!important;padding:0!important;border:0!important;
  background:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  box-shadow:none!important;color:var(--muted)!important;font-size:8.5px!important;line-height:1!important;white-space:nowrap!important;
}
#messages>.sentualMiniVideoBubble.me>.messageStamp,
#messages>.sentualMiniVideoBubble.me>.fileMessageTime{left:auto!important;right:1px!important;text-align:right!important}
#messages>.sentualMiniVideoBubble>.messageStamp>span,
#messages>.sentualMiniVideoBubble>.fileMessageTime>span{color:inherit!important}
#messages>.sentualMiniVideoBubble.me{align-self:flex-end!important;margin-left:auto!important;margin-right:0!important}

/* Single emoji sent by me belongs on the right, including its bare delivery stamp. */
#messages>.bubble.me.sentualEmoji1{align-self:flex-end!important;margin-left:auto!important;margin-right:0!important}
#messages>.bubble.me.sentualEmoji1>.messageStamp{left:auto!important;right:2px!important;justify-content:flex-end!important;text-align:right!important}

/* Captionless photos always show their time/state as an overlay inside the lower-right image corner. */
#messages .attachment-image .inlineMedia,
#messages .attachment-image .inlineMedia-image{position:relative!important}
#messages .attachment-image .sentualMediaStampInside{
  display:inline-flex!important;visibility:visible!important;opacity:1!important;
  position:absolute!important;right:7px!important;bottom:7px!important;left:auto!important;top:auto!important;
  z-index:40!important;width:max-content!important;max-width:calc(100% - 14px)!important;margin:0!important;
  padding:3px 6px!important;border:0!important;border-radius:8px!important;background:rgba(0,0,0,.56)!important;
  color:rgba(255,255,255,.96)!important;line-height:1.15!important;white-space:nowrap!important;
  backdrop-filter:blur(7px)!important;-webkit-backdrop-filter:blur(7px)!important;box-shadow:none!important;
}
#messages .attachment-image .sentualMediaStampInside>span{display:inline!important;float:none!important;margin:0!important;color:inherit!important}

/* Composer Send/Voice action now has the same visible border treatment as +. */
#chat #composerSubmit.textMode,#chat #composerSubmit.voiceMode{
  border:1px solid color-mix(in srgb,var(--accent) 32%,var(--line))!important;
}
#chat #composerSubmit.textMode{border-color:color-mix(in srgb,var(--accent) 66%,var(--line))!important}
#chat .composer>.attach{border:1px solid color-mix(in srgb,var(--accent) 24%,var(--line))!important}

/* Voice and Mini-video send glyphs use the same arrow style as the normal message Send action. */
.sentualVoiceReviewControls .sendVoice svg,
.sentualMiniVideoReview .sendAction svg{fill:none!important;stroke:currentColor!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}
.sentualVoiceReviewControls .sendVoice,
.sentualMiniVideoReview .sendAction{border:1px solid color-mix(in srgb,var(--accent) 64%,var(--line))!important}

/* Mini-video trim matches the compact Voice trim language; mute sits on the same row. */
.sentualMiniVideoTrim{
  display:grid!important;grid-template-columns:42px minmax(0,1fr)!important;gap:10px!important;
  align-items:center!important;margin:4px 0 11px!important;padding:0 2px!important;
}
.sentualMiniVideoTrim.hidden{display:none!important}
.sentualMiniVideoSound{align-self:center!important;width:42px!important;height:42px!important;border:1px solid var(--line)!important;border-radius:13px!important;background:var(--bubble)!important;color:var(--text)!important}
.sentualMiniVideoTrimBody{min-width:0!important;display:grid!important;gap:4px!important}
.sentualMiniVideoTrimBody>label{display:grid!important;grid-template-columns:38px minmax(0,1fr)!important;align-items:center!important;gap:7px!important;color:var(--muted)!important;font-size:9px!important}
.sentualMiniVideoTrimBody>label>span{font-size:9px!important;color:var(--muted)!important}
.sentualMiniVideoTrimBody input[type="range"]{position:static!important;inset:auto!important;width:100%!important;height:18px!important;margin:0!important;appearance:auto!important;-webkit-appearance:auto!important;pointer-events:auto!important;accent-color:var(--accent)!important;background:transparent!important}
.sentualMiniVideoTrimTrack,.sentualMiniVideoTrimSelection{display:none!important}
.sentualMiniVideoTrimLabel{margin-left:45px!important;text-align:left!important;font-size:9px!important;color:var(--muted)!important;font-variant-numeric:tabular-nums!important}

/* Recorder bin uses the Voice-message glyph dimensions exactly. */
.sentualMiniVideoControls [data-act="cancel"] svg,
.sentualMiniVideoReview [data-act="discard"] svg{width:22px!important;height:22px!important;fill:none!important;stroke:currentColor!important;stroke-width:2!important;stroke-linecap:round!important;stroke-linejoin:round!important}

/* Desktop expanded editor gets a visible themed frame and opaque themed backing so chat messages never show through. */
@media(min-width:821px){
  .composer.sentualComposerFullscreen{background:color-mix(in srgb,var(--accent) 7%,var(--chat) 93%)!important}
  .composer.sentualComposerFullscreen>.composerInputShell{background:color-mix(in srgb,var(--accent) 6%,var(--side) 94%)!important;border:1px solid color-mix(in srgb,var(--accent) 28%,var(--line))!important;border-radius:20px!important;overflow:hidden!important}
  .composer.sentualComposerFullscreen .composerInputShell>textarea#message{
    background:var(--side)!important;border:1px solid color-mix(in srgb,var(--accent) 34%,var(--line))!important;
    color:var(--text)!important;box-shadow:0 18px 70px rgba(0,0,0,.16)!important;
  }
}

/* ===== Sentual V4.3.100: mini-video performance/manual playback + layout corrections ===== */
/* The desktop expanded composer must use the exact chat surface, not an accent-tinted backdrop.
   Keep a single border owner so the left/top edge never doubles. */
@media(min-width:821px){
  .composer.sentualComposerFullscreen{background:var(--chat)!important}
  .composer.sentualComposerFullscreen>.composerInputShell{
    background:var(--chat)!important;border:0!important;box-shadow:none!important;overflow:visible!important;
  }
  .composer.sentualComposerFullscreen .composerInputShell>textarea#message{
    background:var(--chat)!important;
    border:1px solid color-mix(in srgb,var(--accent) 36%,var(--line))!important;
    box-shadow:0 14px 48px rgba(0,0,0,.10)!important;
  }
}

/* Deferred mini videos use a play affordance, not a download affordance.  The actual encrypted
   bytes are fetched only when the clip is visible (autoplay on) or the user explicitly taps Play. */
#messages>.sentualMiniVideoBubble .sentualVideoDownloadProgress{display:none!important}
#messages>.sentualMiniVideoBubble .sentualVideoDownloadButton.sentualMiniDeferredPlay{
  position:absolute!important;left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;
  transform:translate(-50%,-50%)!important;width:58px!important;height:58px!important;padding:0!important;
  display:grid!important;place-items:center!important;border:1px solid rgba(255,255,255,.38)!important;
  border-radius:18px!important;background:rgba(10,13,16,.58)!important;color:#fff!important;
  backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;z-index:18!important;
}
#messages>.sentualMiniVideoBubble .sentualVideoDownloadButton.sentualMiniDeferredPlay svg{
  width:24px!important;height:24px!important;fill:currentColor!important;stroke:none!important;
}
#messages>.sentualMiniVideoBubble .sentualVideoDownloadButton.sentualMiniDeferredPlay.loading{
  pointer-events:none!important;opacity:.68!important;
}
#messages>.sentualMiniVideoBubble .sentualMiniVideoPlayOverlay{
  position:absolute!important;left:50%!important;top:50%!important;right:auto!important;bottom:auto!important;
  transform:translate(-50%,-50%)!important;width:58px!important;height:58px!important;padding:0!important;
  display:grid!important;place-items:center!important;border:1px solid rgba(255,255,255,.38)!important;
  border-radius:18px!important;background:rgba(10,13,16,.58)!important;color:#fff!important;
  backdrop-filter:blur(10px)!important;-webkit-backdrop-filter:blur(10px)!important;z-index:19!important;
  box-shadow:0 8px 24px rgba(0,0,0,.16)!important;
}
#messages>.sentualMiniVideoBubble .sentualMiniVideoPlayOverlay.hidden{display:none!important}
#messages>.sentualMiniVideoBubble .sentualMiniVideoPlayOverlay svg{width:24px!important;height:24px!important;fill:currentColor!important;stroke:none!important}

/* Mini video stays a strict 1:1 inline GIF-style surface.  Reserve space for delivery/reactions
   instead of allowing reaction chips to overlap the next message. */
#messages>.bubble.file.attachmentCard.attachment-video.sentualMiniVideoBubble{
  width:min(330px,78vw)!important;max-width:min(330px,78vw)!important;min-width:180px!important;
  aspect-ratio:1/1!important;height:auto!important;padding:0!important;border:0!important;
  background:transparent!important;box-shadow:none!important;overflow:visible!important;border-radius:30px!important;
  contain:layout style!important;
}
#messages>.sentualMiniVideoBubble>.inlineMedia-video,
#messages>.sentualMiniVideoBubble>.inlineMedia,
#messages>.sentualMiniVideoBubble .sentualV4211VideoBox,
#messages>.sentualMiniVideoBubble .sentualMiniVideoMedia{
  position:relative!important;width:100%!important;height:100%!important;aspect-ratio:1/1!important;
  min-width:100%!important;max-width:100%!important;min-height:100%!important;max-height:100%!important;
  border-radius:30px!important;overflow:hidden!important;background:#0a0d10!important;
}
#messages>.sentualMiniVideoBubble video{
  display:block!important;width:100%!important;height:100%!important;aspect-ratio:1/1!important;
  object-fit:cover!important;border-radius:30px!important;background:#0a0d10!important;
  transform:translateZ(0)!important;backface-visibility:hidden!important;will-change:auto!important;
}
#messages>.sentualMiniVideoBubble.sentualHasReactions{margin-bottom:54px!important}
#messages>.sentualMiniVideoBubble.sentualHasReactions>.sentualReactionStrip,
#messages>.sentualMiniVideoBubble.sentualHasReactions.me>.sentualReactionStrip,
#messages>.sentualMiniVideoBubble.sentualHasReactions:not(.me)>.sentualReactionStrip{
  position:absolute!important;left:4px!important;right:auto!important;top:calc(100% + 24px)!important;bottom:auto!important;
  width:max-content!important;max-width:calc(100% - 8px)!important;margin:0!important;padding:0!important;
  transform:none!important;z-index:14!important;
}
#messages>.sentualMiniVideoBubble.sentualHasReactions.me>.sentualReactionStrip{left:auto!important;right:4px!important}

/* Delivery stamp remains outside the mini-video frame, sticker-style. */
#messages>.sentualMiniVideoBubble>.messageStamp,
#messages>.sentualMiniVideoBubble>.fileMessageTime{
  position:absolute!important;top:auto!important;bottom:-17px!important;left:0!important;right:auto!important;
  width:max-content!important;margin:0!important;padding:0!important;background:transparent!important;
  color:var(--muted)!important;border:0!important;box-shadow:none!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
}
#messages>.sentualMiniVideoBubble.me>.messageStamp,
#messages>.sentualMiniVideoBubble.me>.fileMessageTime{left:auto!important;right:1px!important;text-align:right!important}

/* Received captionless photos get one in-image time pill.  Outgoing photos keep their existing
   delivery stamp and therefore never receive a duplicate second pill. */
#messages>.attachment-image:not(.me) .sentualMediaStampInside{
  right:7px!important;bottom:7px!important;
}

/* 30fps recorder preview remains GPU composited without forcing the whole chat into a composited layer. */
.sentualMiniVideoCamera,.sentualMiniVideoPreview{backface-visibility:hidden!important}
.sentualMiniVideoPreview{will-change:transform!important}


/* ===== SENTUAL V4.3.100: clean Mini-video upload surface ===== */
#messages>.sentualV4395MiniUpload{
  position:relative!important;width:min(330px,78vw)!important;max-width:min(330px,78vw)!important;
  aspect-ratio:1/1!important;padding:0!important;border:0!important;border-radius:30px!important;
  background:transparent!important;box-shadow:none!important;overflow:hidden!important;
}
#messages>.sentualV4395MiniUpload>.sentualV57UploadBody{
  position:relative!important;display:grid!important;place-items:center!important;grid-template-columns:1fr!important;
  width:100%!important;height:100%!important;min-height:0!important;aspect-ratio:1/1!important;padding:0!important;
  border:0!important;border-radius:30px!important;overflow:hidden!important;
  background-image:linear-gradient(rgba(0,0,0,.11),rgba(0,0,0,.11)),var(--sentual-mini-video-poster)!important;
  background-size:cover!important;background-position:center!important;box-shadow:none!important;
}
#messages>.sentualV4395MiniUpload>.sentualV57UploadBody::before,
#messages>.sentualV4395MiniUpload>.sentualV57UploadBody::after{display:none!important;content:none!important}
#messages>.sentualV4395MiniUpload .sentualV57UploadIcon,
#messages>.sentualV4395MiniUpload .sentualV59UploadIcon,
#messages>.sentualV4395MiniUpload .sentualV57UploadMain,
#messages>.sentualV4395MiniUpload .sentualV57UploadStatus,
#messages>.sentualV4395MiniUpload .sentualV57UploadProgress,
#messages>.sentualV4395MiniUpload .sentualUploadCancel{display:none!important}
#messages>.sentualV4395MiniUpload .sentualMiniUploadSpinner{
  position:relative!important;z-index:5!important;display:block!important;width:30px!important;height:30px!important;
  border:3px solid rgba(255,255,255,.34)!important;border-top-color:#fff!important;border-radius:50%!important;
  animation:sentualVoiceLoadingSpin .72s linear infinite!important;filter:drop-shadow(0 1px 3px rgba(0,0,0,.16));
}

/* Mini videos are never allowed to expose a native browser/video control surface. */
#messages>.sentualMiniVideoBubble video,
#messages>.sentualV4395MiniUpload video{appearance:none!important;-webkit-appearance:none!important}
#messages>.sentualMiniVideoBubble video::-webkit-media-controls,
#messages>.sentualMiniVideoBubble video::-webkit-media-controls-enclosure,
#messages>.sentualMiniVideoBubble video::-webkit-media-controls-panel{display:none!important;-webkit-appearance:none!important}


/* ===== SENTUAL V4.3.100: mobile Mini-video policy ===== */
@media(max-width:820px){#sentualMiniVideoAutoplayRow{display:none!important}}
#messageMiniVideoMuteAction{display:none!important}
.sentualMiniVideoSound{display:none!important}


/* ===== SENTUAL V4.3.100: attachment entitlement rows ===== */
#attachMenu .sentualAttachLocked{opacity:.48!important;cursor:not-allowed!important;position:relative!important;}
#attachMenu .sentualAttachLocked::after{content:"";width:12px;height:12px;margin-left:auto;flex:0 0 12px;background:currentColor;opacity:.72;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M7 10V8a5 5 0 0 1 10 0v2h1.2A1.8 1.8 0 0 1 20 11.8v7.4a1.8 1.8 0 0 1-1.8 1.8H5.8A1.8 1.8 0 0 1 4 19.2v-7.4A1.8 1.8 0 0 1 5.8 10H7Zm2 0h6V8a3 3 0 0 0-6 0v2Z'/%3E%3C/svg%3E") center/contain no-repeat;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='black' d='M7 10V8a5 5 0 0 1 10 0v2h1.2A1.8 1.8 0 0 1 20 11.8v7.4a1.8 1.8 0 0 1-1.8 1.8H5.8A1.8 1.8 0 0 1 4 19.2v-7.4A1.8 1.8 0 0 1 5.8 10H7Zm2 0h6V8a3 3 0 0 0-6 0v2Z'/%3E%3C/svg%3E") center/contain no-repeat;}

/* V4.3.103: the quoted (replied-to) message inside MY bubble uses the same text colour as my own message text. */
:root #messages .bubble.me>.replyQuote,
:root #messages .bubble.me>.replyQuote span,
:root #messages .bubble.me>.replyQuote b{
  color:var(--sentual-outgoing-text,var(--text))!important;
}

/* V4.3.104: multi-select ring hugs the PHOTO of a caption-less photo/video, not the (wider) message row. */
#messages.sentualMultiSelectMessages>.bubble.sentualMultiSelected.sentualCaptionlessMedia{
  box-shadow:none!important;filter:none!important;
}
#messages.sentualMultiSelectMessages>.bubble.sentualMultiSelected.sentualCaptionlessMedia .inlineMedia{
  box-shadow:0 0 0 3px rgba(79,177,229,.62)!important;
  filter:brightness(1.12)!important;
}

/* V4.3.106: smooth blurred-preview -> sharp-photo cross-fade (see sentualV43106PhotoReveal). */
@keyframes sentualPhotoReveal{from{opacity:0}to{opacity:1}}
#messages .inlineMedia-image.sentualPhotoPlaceholder.sentualPhotoReveal .photoOpen img{
  animation:sentualPhotoReveal .42s cubic-bezier(.22,1,.36,1) both;
}
#messages .inlineMedia-image.sentualPhotoPlaceholder.sentualPhotoReveal::before,
#messages .inlineMedia-image.sentualPhotoPlaceholder.sentualPhotoReveal::after{
  transition:opacity .14s linear .42s!important;
}
/* While neither preview nor photo exists yet show a calm neutral tile, not the bubble's saturated blue. */
#messages .inlineMedia-image.sentualPhotoPlaceholder:not(.hasPreview):not(.sentualPhotoLoaded){
  background:rgba(128,140,154,.26)!important;
}

/* V4.3.107: Connecting... dots. Pure opacity wave (no transform), one clear cycle, and it keeps running with iOS "Reduce Motion"
   because the global reduced-motion rule froze it on its first, dimmest frame. */
@keyframes sentualConnectDots{0%,70%,100%{opacity:.2}25%,45%{opacity:1}}
.brandName .connectingDots{display:inline-flex;align-items:baseline;margin-left:2px;gap:1px}
.brandName .connectingDots i{font-style:normal;opacity:.2;animation:sentualConnectDots 1.3s ease-in-out infinite both}
.brandName .connectingDots i:nth-child(2){animation-delay:.18s}
.brandName .connectingDots i:nth-child(3){animation-delay:.36s}
@media (prefers-reduced-motion:reduce){
  .brandName .connectingDots i{animation-duration:1.3s!important;animation-iteration-count:infinite!important}
}

/* V4.3.109: ROOT CAUSE of the settings page jumping when a toggle is clicked (reproduced in real Chromium):
   the hidden checkbox inside every .sentualNotificationSetting is position:absolute with no positioned parent inside the scroller,
   so its containing block was the fixed modal box. It sat far below the visible area, made the box scrollable by ~460px, and
   focusing it (any click on the toggle) scrolled the whole box - header and top cards vanished upward. Anchor it to its own row,
   and make the box unscrollable by the browser's focus/scroll-into-view logic. */
.sentualNotificationSetting{position:relative}
.sentualNotificationSetting input{inset:0;width:100%;height:100%;margin:0}
.sentualConversationSettingsBox{overflow:hidden;overflow:clip}
.sentualConversationSettingsBox .sentualLinkPreviewCard{margin-bottom:2px!important}
.sentualConversationSettingsBox .sentualLinkPreviewCard .sentualNotificationSetting{margin-top:10px!important}
