:root{
  --bg:#07111d;
  --bg-deep:#050b13;
  --rail:#07101a;
  --pane:#0a1421;
  --pane-2:#0d1928;
  --pane-3:#102033;
  --hover:#12243a;
  --active:#153765;
  --line:rgba(151,181,219,.105);
  --line-strong:rgba(151,181,219,.19);
  --text:#f3f7fd;
  --text-2:#d6e1ef;
  --muted:#8598b0;
  --muted-2:#60758e;
  --accent:#2e82f7;
  --accent-2:#63a7ff;
  --success:#42d792;
  --danger:#ff667c;
  --warning:#f1b653;
  --shadow:0 22px 70px rgba(0,0,0,.32);
  --radius:14px;
  --radius-lg:18px;
  --ease:cubic-bezier(.2,.8,.2,1);
}
*{box-sizing:border-box}
html,body,#root{height:100%;min-height:100%;margin:0}
body{font-family:"Microsoft YaHei","PingFang SC","Noto Sans CJK SC","Segoe UI",Arial,sans-serif;background:var(--bg);color:var(--text);overflow:hidden;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
button,input,textarea,select{font:inherit;color:inherit}
button{border:0}
button,input,select,textarea{-webkit-tap-highlight-color:transparent}
button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid rgba(67,145,255,.8);outline-offset:2px}
.hidden{display:none!important}
.icon{display:block;width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
.icon.s16{width:16px;height:16px}.icon.s18{width:18px;height:18px}.icon.s22{width:22px;height:22px}.icon.s24{width:24px;height:24px}
.brand-mark{width:36px;height:36px;border-radius:11px;background:linear-gradient(145deg,#5ba9ff 0%,#1c71ec 67%,#075bcf 100%);display:grid;place-items:center;box-shadow:0 8px 26px rgba(32,119,245,.26);flex:none}.brand-mark svg{width:21px;height:21px}

/* buttons */
.primary-btn,.secondary-btn,.ghost-btn,.danger-btn,.mini-btn,.head-icon-btn,.icon-btn,.send-btn,.file-btn,.profile-action{cursor:pointer;transition:background .16s var(--ease),border-color .16s var(--ease),color .16s var(--ease),transform .16s var(--ease),opacity .16s}
.primary-btn,.secondary-btn,.ghost-btn,.danger-btn{height:44px;border-radius:11px;padding:0 16px;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-size:13px;font-weight:750}
.primary-btn{background:linear-gradient(180deg,#3489fb,#216fe8);color:#fff;box-shadow:0 10px 26px rgba(28,111,230,.22)}.primary-btn:hover{filter:brightness(1.05);transform:translateY(-1px)}.primary-btn:disabled{opacity:.55;cursor:not-allowed;transform:none}.primary-btn.full{width:100%;height:48px}.primary-btn.compact{height:39px;padding:0 14px}
.secondary-btn{background:#14263b;border:1px solid var(--line-strong);color:#d9e6f7}.secondary-btn:hover{background:#19304c}
.ghost-btn{background:transparent;color:#8da1ba}.ghost-btn:hover{background:rgba(255,255,255,.045);color:#e5edf8}
.danger-btn{background:rgba(255,91,113,.11);border:1px solid rgba(255,91,113,.17);color:#ff8999}.danger-btn:hover{background:rgba(255,91,113,.17)}
.mini-btn{height:32px;padding:0 10px;border-radius:9px;background:#14253a;color:#93a8c0;display:inline-flex;align-items:center;gap:6px;font-size:11px}.mini-btn:hover{background:#19304d;color:#e2ebf7}
.head-icon-btn,.icon-btn{width:38px;height:38px;border-radius:10px;background:transparent;color:#8296af;display:grid;place-items:center}.head-icon-btn:hover,.icon-btn:hover{background:#13243a;color:#dce7f4}

/* authentication — intentionally flat, not card-in-card */
.auth-screen{height:100%;min-height:100%;display:grid;place-items:center;overflow:auto;padding:32px;background:radial-gradient(circle at 50% 118%,rgba(27,108,230,.25),transparent 32%),linear-gradient(145deg,#050a11,#081321 55%,#081728)}
.auth-screen:before{content:"";position:fixed;inset:0;pointer-events:none;background-image:linear-gradient(rgba(255,255,255,.018) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.014) 1px,transparent 1px);background-size:48px 48px;mask-image:linear-gradient(to bottom,transparent,black 35%,black 80%,transparent)}
.auth-card{position:relative;z-index:1;width:min(100%,390px);animation:authIn .42s var(--ease) both}
.ios-install-gate{height:100%;min-height:100%;display:grid;place-items:center;overflow:auto;padding:28px;background:radial-gradient(circle at 50% 108%,rgba(52,137,251,.25),transparent 34%),linear-gradient(145deg,#050a11,#081321 58%,#061420)}
.ios-install-gate:before{content:"";position:fixed;inset:0;pointer-events:none;background-image:url("./xchat-doodle.svg");background-size:420px auto;background-position:center;background-repeat:repeat;opacity:.08;filter:drop-shadow(0 0 10px rgba(72,145,255,.18))}
.ios-install-card{position:relative;z-index:1;width:min(100%,430px);border:1px solid rgba(119,165,222,.14);border-radius:24px;padding:24px;background:linear-gradient(180deg,rgba(14,28,46,.92),rgba(8,18,31,.96));box-shadow:0 28px 90px rgba(0,0,0,.44);animation:authIn .34s var(--ease) both}
.ios-install-hero{text-align:center;padding:12px 4px 18px}.ios-install-hero h1{margin:13px 0 8px;font-size:28px;line-height:1.15;letter-spacing:-.04em}.ios-install-hero p{margin:0 auto;color:#8ca0b9;font-size:13px;line-height:1.7;max-width:340px}.ios-install-hero.warn .ios-phone-orb{background:radial-gradient(circle at 35% 26%,#ffbf76,#9f5a23 62%,#34210f)}
.ios-phone-orb{width:72px;height:72px;margin:0 auto;border-radius:23px;background:radial-gradient(circle at 35% 26%,#65b2ff,#1d70e8 62%,#0e3f92);display:grid;place-items:center;color:white;box-shadow:0 18px 48px rgba(42,126,244,.26)}.ios-phone-orb .icon{width:28px;height:28px}
.ios-steps{display:grid;gap:10px;margin:6px 0 16px}.ios-steps div{min-height:52px;border:1px solid rgba(255,255,255,.055);border-radius:15px;background:rgba(10,23,39,.74);display:flex;align-items:center;gap:12px;padding:10px 12px}.ios-steps b{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:#1f79ee;color:white;font-size:12px;flex:none}.ios-steps span{color:#d8e5f5;font-size:13px;line-height:1.5}
.ios-share-hint{margin:0 0 14px;border:1px solid rgba(83,170,255,.16);border-radius:16px;background:rgba(45,130,247,.1);color:#9ecaff;padding:11px 12px;display:flex;align-items:center;gap:10px;font-size:12px}.ios-share-hint span{width:27px;height:27px;border-radius:50%;background:#2d82f7;color:#fff;display:grid;place-items:center;font-size:18px;font-weight:900}.ios-url-box{margin:0 0 12px;padding:11px 12px;border-radius:13px;background:#091625;border:1px solid rgba(255,255,255,.06);color:#8da4c0;font-size:11px;line-height:1.55;word-break:break-all}.ios-install-card .full{width:100%;margin-top:8px}
.auth-logo{display:flex;align-items:center;gap:12px;margin-bottom:38px}.auth-logo>div{min-width:0}.auth-logo strong{display:block;font-size:22px;line-height:1.1;letter-spacing:-.025em}.auth-logo>div>span{display:block;color:#788da8;font-size:12px;margin-top:5px}
.auth-title{font-size:30px;line-height:1.15;letter-spacing:-.045em;margin:0 0 8px;font-weight:780}.auth-foot{color:#7287a2;text-align:center;font-size:12px;margin:22px 0 0}.auth-foot button{background:none;color:#68a8ff;padding:0;cursor:pointer;font-weight:700}
.auth-tabs{height:43px;display:flex;gap:25px;border-bottom:1px solid var(--line);margin-bottom:24px}.auth-tab{height:43px;padding:0 1px;background:none;color:#6e829c;font-size:13px;font-weight:700;cursor:pointer;position:relative}.auth-tab.active{color:#f0f5fc}.auth-tab.active:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;border-radius:2px;background:#3288ff;box-shadow:0 0 14px rgba(50,136,255,.35)}
.field{display:block;margin-bottom:16px}.field>.field-label{display:block;margin-bottom:7px;color:#8da0b8;font-size:12px;font-weight:680;line-height:1.3}.field>.input-wrap{display:flex!important;align-items:center!important;gap:10px!important;height:50px!important;margin:0!important;padding:0 14px!important;border:1px solid var(--line-strong)!important;border-radius:11px!important;background:#0b1726!important;color:#667d99!important;transition:.18s var(--ease)!important}.field>.input-wrap:focus-within{border-color:rgba(51,133,250,.78)!important;box-shadow:0 0 0 4px rgba(47,125,246,.095)!important;background:#0c1929!important}.field>.input-wrap input,.field>.input-wrap select,.field>.input-wrap textarea{display:block!important;flex:1!important;min-width:0!important;width:100%!important;border:0!important;outline:0!important;background:transparent!important;color:#f3f7fd!important;-webkit-text-fill-color:#f3f7fd!important;caret-color:#62a7ff!important;font-size:14px!important;line-height:normal!important;padding:0!important;margin:0!important}.field>.input-wrap input::placeholder{color:#526983!important;-webkit-text-fill-color:#526983!important}.field>.input-wrap input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px #0b1726 inset!important;-webkit-text-fill-color:#f3f7fd!important}.password-toggle{width:30px;height:30px;display:grid;place-items:center;flex:none;background:transparent;color:#71859f;border-radius:8px;cursor:pointer}.password-toggle:hover{background:#122239;color:#a9bbd1}
.form-note{font-size:11px;color:#60758f;line-height:1.6;margin:-5px 0 14px}.auth-error{min-height:19px;font-size:12px;color:#ff7489;margin:-4px 0 11px}.spinner{width:15px;height:15px;border-radius:50%;border:2px solid rgba(255,255,255,.24);border-top-color:#fff;animation:spin .7s linear infinite}

/* app */
.app-shell{height:100%;display:grid;grid-template-columns:76px 304px minmax(390px,1fr) 294px;background:var(--bg);animation:fade .2s ease both}
.nav-rail{min-width:0;background:var(--rail);border-right:1px solid var(--line);padding:15px 11px 13px;display:flex;flex-direction:column;align-items:center;position:relative;z-index:10}.nav-rail>.brand-mark{margin:3px 0 23px}.rail-nav{display:flex;flex-direction:column;gap:5px;width:100%}.rail-btn{position:relative;width:100%;height:49px;border-radius:11px;background:transparent;color:#71859e;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:3px;font-size:9px;font-weight:700;cursor:pointer}.rail-btn:hover{background:#0f1d2e;color:#b8c7da}.rail-btn.active{background:rgba(46,130,247,.12);color:#66a9ff}.rail-btn.active:before{content:"";position:absolute;left:-11px;width:3px;height:24px;border-radius:0 4px 4px 0;background:#3289ff}.rail-spacer{flex:1}.me-mini{width:42px;height:42px;border-radius:50%;background:transparent;padding:0;position:relative;cursor:pointer}.presence-dot{position:absolute;right:0;bottom:1px;width:10px;height:10px;border:2px solid var(--rail);border-radius:50%;background:#3fda90}
.nav-badge,.count-badge,.inline-badge,.title-badge{display:inline-grid;place-items:center;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#ef4058;color:#fff;font-size:10px;font-weight:800;line-height:1}.nav-badge{position:absolute;top:4px;right:7px}.inline-badge{margin-left:auto}.title-badge{margin-left:6px;vertical-align:middle}.count-badge{background:#2c82f6}
.avatar{display:grid;place-items:center;flex:none;border-radius:50%;overflow:hidden;color:#fff;font-weight:800;user-select:none}.avatar img{width:100%;height:100%;object-fit:cover}.avatar.xs{width:28px;height:28px;font-size:10px}.avatar.sm{width:36px;height:36px;font-size:11px}.avatar.md{width:44px;height:44px;font-size:13px}.avatar.lg{width:62px;height:62px;font-size:18px}.avatar.xl{width:84px;height:84px;font-size:25px}
.list-pane{min-width:0;background:var(--pane);border-right:1px solid var(--line);display:flex;flex-direction:column}.pane-head{height:67px;display:flex;align-items:center;gap:8px;padding:0 15px;border-bottom:1px solid var(--line)}.pane-head h2{margin:0;flex:1;font-size:18px;letter-spacing:-.025em}.search-box{height:39px;margin:12px 13px 7px;padding:0 11px;display:flex;align-items:center;gap:8px;border-radius:10px;background:#0f1c2d;border:1px solid rgba(255,255,255,.035);color:#647b98}.search-box input{flex:1;min-width:0;background:none;border:0;outline:0;color:#dce7f4;font-size:12px}.search-box input::placeholder{color:#536a85}.list-scroll{flex:1;min-height:0;overflow:auto;padding:5px 8px 14px;scrollbar-width:thin;scrollbar-color:#273b55 transparent}.conv-row{height:66px;display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:11px;cursor:pointer;transition:.15s}.conv-row:hover,.contact-row:hover,.side-list-row:hover{background:#0f1e31}.conv-row.active{background:linear-gradient(100deg,rgba(38,122,239,.27),rgba(26,84,166,.11));box-shadow:inset 0 0 0 1px rgba(62,137,244,.1)}.conv-main{flex:1;min-width:0}.conv-top,.conv-bottom{display:flex;align-items:center;gap:6px}.conv-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:760}.conv-time{font-size:10px;color:#61758f}.conv-preview{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-top:4px;font-size:11px;color:#768ba5}.section-empty,.page-empty{padding:42px 20px;text-align:center;color:#667b95;font-size:12px;line-height:1.7}.section-empty .empty-icon{width:54px;height:54px;margin:0 auto 12px;border-radius:15px;background:#102035;color:#6d829c;display:grid;place-items:center}.page-empty.small{padding:20px 8px}
.contact-list{padding:4px 8px}.contact-row,.side-list-row,.request-row,.request-entry{display:flex;align-items:center;gap:10px;min-height:58px;padding:8px;border-radius:11px;cursor:pointer}.contact-row>div,.side-list-row>div,.request-main{min-width:0;flex:1}.contact-row strong,.side-list-row strong,.request-row strong{display:block;font-size:12px}.contact-row span,.side-list-row span,.request-row span{display:block;color:#72869f;font-size:10px;margin-top:3px}.request-banner{margin:4px 8px 8px;border-radius:11px;background:rgba(239,64,88,.08);border:1px solid rgba(239,64,88,.12);color:#ff8495;padding:10px 11px;font-size:11px}.row-icon{width:32px;height:32px;border-radius:9px;background:#10233a;color:#75aaff;display:grid;place-items:center;flex:none}

.chat-pane{min-width:0;position:relative;background:linear-gradient(180deg,#091522,#08121e);display:flex;flex-direction:column}.chat-pane:before{content:"";position:absolute;inset:68px 0 70px;pointer-events:none;background-image:radial-gradient(rgba(126,157,195,.045) 1px,transparent 1px);background-size:24px 24px;mask-image:linear-gradient(to bottom,transparent,#000 12%,#000 88%,transparent)}.chat-head{height:67px;display:flex;align-items:center;gap:10px;padding:0 15px;border-bottom:1px solid var(--line);position:relative;z-index:1}.mobile-back{display:none}.chat-head-info{min-width:0;flex:1}.chat-title{font-size:13px;font-weight:780;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.chat-sub{font-size:10px;color:#71869f;margin-top:3px}.chat-actions{display:flex;gap:2px}.messages{position:relative;z-index:1;flex:1;min-height:0;overflow:auto;padding:24px 8% 22px;scrollbar-width:thin;scrollbar-color:#263a54 transparent}.day-sep{text-align:center;color:#536982;font-size:10px;margin:5px 0 18px}.message-row{display:flex;align-items:flex-end;gap:8px;margin:9px 0}.message-row.mine{justify-content:flex-end}.message-row.mine .avatar{display:none}.bubble{max-width:min(72%,620px);padding:10px 12px;border-radius:13px 13px 13px 4px;background:#122238;border:1px solid rgba(255,255,255,.035);font-size:12px;line-height:1.6;color:#dce6f3}.message-row.mine .bubble{border-radius:13px 13px 4px 13px;background:linear-gradient(145deg,#1e66b7,#185594);border-color:rgba(66,149,242,.15);color:#fff}.bubble-meta{margin-top:5px;font-size:9px;color:#6e839d;text-align:right}.message-row.mine .bubble-meta{color:#9bc5ef}.system-message{width:max-content;max-width:82%;margin:12px auto;padding:6px 10px;border-radius:9px;background:rgba(255,255,255,.035);color:#71869e;font-size:10px}.chat-empty{height:100%;display:grid;place-items:center;text-align:center;color:#6d819a}.empty-orb{width:82px;height:82px;border-radius:50%;display:grid;place-items:center;margin:0 auto 15px;background:radial-gradient(circle at 36% 28%,#539cff,#1c4b88 58%,#10243d 100%);box-shadow:0 18px 60px rgba(29,102,207,.18)}.chat-empty strong{display:block;color:#cbd8e7;font-size:15px;margin-bottom:5px}.composer{height:70px;position:relative;z-index:2;border-top:1px solid var(--line);padding:10px 13px;display:flex;align-items:center;gap:7px;background:rgba(8,18,30,.88);backdrop-filter:blur(14px)}.composer-box{height:46px;flex:1;min-width:0;border-radius:12px;background:#0e1b2c;border:1px solid var(--line);display:flex;align-items:center;padding:0 12px;color:#637992}.composer-box input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:#dfe9f5;font-size:12px}.composer-box input::placeholder{color:#526982}.composer-box.locked{opacity:.78}.send-btn{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:#2d82f7;color:#fff;box-shadow:0 8px 26px rgba(45,130,247,.28)}.send-btn:disabled{background:#163458;color:#637f9f;box-shadow:none;cursor:not-allowed}.file-btn{width:36px;height:36px;border-radius:9px;background:transparent;color:#71869f;display:grid;place-items:center}.file-btn:hover{background:#13243a;color:#d2deed}

.detail-pane{min-width:0;background:#09131f;border-left:1px solid var(--line);overflow:auto}.detail-head{height:67px;display:flex;align-items:center;padding:0 15px;border-bottom:1px solid var(--line)}.detail-head strong{flex:1;font-size:13px}.profile-card{text-align:center;padding:26px 18px 20px;border-bottom:1px solid var(--line)}.profile-card>.avatar{margin:0 auto 12px}.profile-card h3{margin:0;font-size:16px}.profile-card p{margin:5px 0 0;color:#71869e;font-size:10px}.profile-actions{display:flex;justify-content:center;gap:11px;margin-top:18px}.profile-action{width:52px;background:transparent;color:#8297af;text-align:center;font-size:9px}.profile-action i{width:39px;height:39px;margin:0 auto 6px;border-radius:11px;background:#102036;display:grid;place-items:center;font-style:normal}.profile-action:hover i{background:#17304d;color:#8fc0ff}.detail-section{padding:15px;border-bottom:1px solid var(--line)}.detail-section h4,.section-title{margin:0 0 11px;font-size:11px;font-weight:800;color:#b9c8da}.detail-label{font-size:10px;color:#627790}.detail-value{font-size:11px;color:#c3d1e1;margin-top:3px;word-break:break-all}.content-actions{display:flex;gap:7px;flex-wrap:wrap}.content-head{height:67px;padding:0 18px;display:flex;align-items:center;border-bottom:1px solid var(--line)}.content-head h2{margin:0;flex:1;font-size:18px}.content-body{overflow:auto;padding:18px 20px 36px}.content-pane{min-width:0;display:flex;flex-direction:column;background:#091522}

/* settings */
.settings-hero{display:flex;align-items:center;gap:14px;padding:20px 0 22px;border-bottom:1px solid var(--line)}.settings-hero h2{font-size:18px;margin:0}.settings-hero p{margin:5px 0 0;color:#7488a1;font-size:11px}.settings-group,.surface-section{margin-top:18px;border-top:1px solid var(--line)}.surface-section{padding-top:15px}.setting-row{min-height:57px;display:flex;align-items:center;gap:12px;border-bottom:1px solid rgba(255,255,255,.035);padding:7px 0}.setting-row>div{flex:1;min-width:0}.setting-row strong{display:block;font-size:12px}.setting-row span{display:block;color:#6e829b;font-size:10px;margin-top:4px}.setting-actions{display:flex;gap:7px}.logout-row{margin-top:24px}.quick-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px}.lookup-card,.invite-code-box{border:1px solid var(--line);background:#0e1b2c;border-radius:12px;padding:13px}.lookup-card strong{font-size:12px}.lookup-card p{color:#70849e;font-size:10px;margin:4px 0 0}.invite-code-box{display:flex;align-items:center;gap:8px}.invite-code-box strong{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:15px;letter-spacing:.06em;flex:1;word-break:break-all}
.switch{position:relative;width:40px;height:22px;border-radius:11px;background:#1a2c42;flex:none;transition:.2s}.switch:after{content:"";position:absolute;left:3px;top:3px;width:16px;height:16px;border-radius:50%;background:#71869f;transition:.2s}.switch.on{background:#1769ce}.switch.on:after{left:21px;background:white}.toggle-row{min-height:54px;display:flex;align-items:center;gap:12px;border-bottom:1px solid rgba(255,255,255,.04);cursor:pointer}.toggle-row>div{flex:1}.toggle-row strong{font-size:11px}.toggle-row span{display:block;color:#687d97;font-size:9px;margin-top:4px}.toggle-row input{position:absolute;opacity:0;pointer-events:none}.toggle-row i{position:relative;width:38px;height:21px;border-radius:11px;background:#1a2b41;transition:.2s;flex:none}.toggle-row i:after{content:"";position:absolute;top:3px;left:3px;width:15px;height:15px;border-radius:50%;background:#71849c;transition:.2s}.toggle-row input:checked+i{background:#1f78e6}.toggle-row input:checked+i:after{left:20px;background:#fff}.toggle-row input:disabled+i{opacity:.45}

/* QR / scanning */
.qr-modal{text-align:center}.real-qr{width:210px;height:210px;display:block;margin:8px auto 14px;border-radius:14px;padding:10px;background:white;image-rendering:auto}.qr-actions,.scan-actions{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}.scan-frame{height:250px;border-radius:15px;overflow:hidden;background:#050a10;border:1px solid var(--line-strong);position:relative;display:grid;place-items:center}.scan-frame video{width:100%;height:100%;object-fit:cover}.scan-line{position:absolute;left:12%;right:12%;height:1px;background:#45a0ff;box-shadow:0 0 13px #45a0ff;animation:scan 2.1s ease-in-out infinite}.scan-inline{margin-top:12px}.scan-inline textarea{width:100%;height:76px;resize:none;border-radius:10px;border:1px solid var(--line);background:#0b1726;color:#dce7f4;padding:10px;font-size:11px;outline:0}

/* group manager / requests */
.group-manage{display:grid;gap:14px}.member-list{display:grid;gap:3px}.member-row{display:flex;align-items:center;gap:9px;min-height:48px;padding:6px 4px}.member-row>div{min-width:0}.member-row strong{display:block;font-size:11px}.member-row span{display:block;color:#6d829c;font-size:9px;margin-top:3px}.request-entry{background:#0e1b2c;border:1px solid var(--line);margin-bottom:6px}.request-entry .content-actions{margin-left:auto}.status-pill{height:21px;display:inline-flex;align-items:center;padding:0 8px;border-radius:11px;background:rgba(60,218,143,.1);color:#67e4a4;font-size:9px;font-weight:700}.notice{padding:10px 11px;border-radius:9px;background:rgba(59,136,248,.08);border:1px solid rgba(59,136,248,.12);color:#8cbcff;font-size:10px;line-height:1.55}.notice.danger{background:rgba(255,91,113,.08);border-color:rgba(255,91,113,.13);color:#ff8d9c}.account-banner{margin:0 0 14px;border-radius:11px;background:rgba(242,183,82,.08);border:1px solid rgba(242,183,82,.15);padding:11px 13px;color:#efbd69;font-size:11px}.restriction-card{text-align:center;padding:4px 8px 10px}.restriction-card .empty-orb{background:radial-gradient(circle at 35% 28%,#ffbf63,#8a4d22 58%,#352517)}.confirm-text{font-size:12px;color:#aebfd2;line-height:1.7}.muted-center{text-align:center;color:#6c819b;font-size:10px;line-height:1.55}

/* modals / sheets */
.modal-layer{position:fixed;inset:0;z-index:100;background:rgba(1,5,10,.67);backdrop-filter:blur(9px);display:grid;place-items:center;padding:18px}.modal{width:min(100%,510px);max-height:90vh;overflow:auto;border-radius:17px;background:#0d1928;border:1px solid var(--line-strong);box-shadow:0 30px 90px rgba(0,0,0,.5);animation:modalIn .22s var(--ease);scrollbar-width:thin;scrollbar-color:#29405c transparent}.modal-head{height:58px;display:flex;align-items:center;padding:0 17px;border-bottom:1px solid var(--line);position:sticky;top:0;background:rgba(13,25,40,.96);backdrop-filter:blur(15px);z-index:2}.modal-head h3{margin:0;flex:1;font-size:14px}.modal-body{padding:16px 17px}.modal-actions{display:flex;justify-content:flex-end;gap:8px;padding:0 17px 17px}.action-sheet{width:min(100%,380px)}.action-sheet .modal-body{padding:8px}.action-sheet button{width:100%;height:44px;border-radius:9px;background:transparent;color:#c9d6e5;text-align:left;padding:0 12px;display:flex;align-items:center;gap:10px;cursor:pointer}.action-sheet button:hover{background:#14253a}.action-sheet button.danger{color:#ff8192}.modal .field>.input-wrap{background:#0a1523!important}.modal select{cursor:pointer}.meta{color:#6d829c;font-size:10px}

/* toast */
.toast-root{position:fixed;right:18px;top:18px;z-index:150;display:flex;flex-direction:column;gap:8px}.toast{min-width:260px;max-width:410px;display:flex;align-items:center;gap:9px;padding:11px 13px;border-radius:11px;background:#122238;border:1px solid var(--line-strong);box-shadow:var(--shadow);font-size:11px;color:#dbe6f3;animation:toastIn .2s var(--ease)}.toast-icon{width:26px;height:26px;border-radius:8px;background:#19304d;color:#82b8ff;display:grid;place-items:center;flex:none}.toast.success{border-color:rgba(57,216,139,.2)}.toast.success .toast-icon{background:rgba(57,216,139,.1);color:#66e5a4}.toast.error{border-color:rgba(255,92,114,.2)}.toast.error .toast-icon{background:rgba(255,92,114,.1);color:#ff8e9d}

.mobile-bottom-nav{display:none}
@keyframes authIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes fade{from{opacity:0}to{opacity:1}}@keyframes modalIn{from{opacity:0;transform:translateY(8px) scale(.988)}to{opacity:1;transform:none}}@keyframes toastIn{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes scan{0%,100%{top:18%}50%{top:81%}}

@media(max-width:1180px){.app-shell{grid-template-columns:72px 286px minmax(390px,1fr)}.detail-pane{display:none}}
@media(max-width:760px){
  body{overflow:hidden}.auth-screen{padding:24px}.auth-card{width:min(100%,370px)}.auth-logo{margin-bottom:34px}.auth-title{font-size:28px}
  .app-shell{display:block;height:100%;padding-bottom:64px}.nav-rail{display:none}.detail-pane{display:none}.list-pane,.chat-pane,.content-pane{position:absolute;inset:0 0 64px}.list-pane{border:0}.pane-head,.chat-head,.content-head{height:61px}.search-box{margin-top:10px}.chat-pane{display:none}.app-shell.chat-open .list-pane,.app-shell.content-open .list-pane{display:none}.app-shell.chat-open .chat-pane{display:flex}.app-shell.content-open .content-pane{display:flex}.chat-pane,.content-pane{background:#08131f}.mobile-back{display:grid}.messages{padding:18px 13px}.bubble{max-width:84%}.composer{height:65px;padding:8px 10px}.detail-pane{display:none}.content-body{padding:14px 15px 28px}.settings-hero{padding-top:8px}.quick-grid{grid-template-columns:1fr}
  .mobile-bottom-nav{position:fixed;z-index:30;left:0;right:0;bottom:0;height:64px;background:rgba(7,16,27,.96);backdrop-filter:blur(18px);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(4,1fr);padding-bottom:env(safe-area-inset-bottom)}.mobile-nav-btn{position:relative;background:transparent;color:#6e839d;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:3px;font-size:9px;font-weight:700}.mobile-nav-btn.active{color:#56a0ff}.mobile-nav-btn .nav-badge{right:calc(50% - 22px);top:5px}
  .modal-layer{align-items:end;padding:0}.modal{width:100%;max-height:88vh;border-radius:18px 18px 0 0;border-bottom:0}.action-sheet{width:100%}.real-qr{width:190px;height:190px}
  .toast-root{left:12px;right:12px;top:12px}.toast{min-width:0;max-width:none;width:100%}
}
@media(max-width:390px){.auth-screen{padding:20px}.pane-head{padding:0 12px}.content-body{padding-left:12px;padding-right:12px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
/* native-button resets for interactive list surfaces */
.contact-row,.side-list-row,.request-banner,.scan-inline,.logout-row,.quick-grid>button{border:0;color:inherit;font:inherit;text-align:left}
.contact-row,.side-list-row{width:100%;background:transparent}
.request-banner{width:100%;display:flex;align-items:center;gap:10px;background:rgba(239,64,88,.07);cursor:pointer}.request-banner>div{flex:1;text-align:left}.request-banner strong{display:block;font-size:11px}.request-banner small{display:block;color:#b77984;font-size:9px;margin-top:3px}.request-banner>b{min-width:20px;height:20px;border-radius:10px;background:#ef4058;color:white;display:grid;place-items:center;font-size:9px}
.quick-grid>button{min-height:86px;padding:13px;border-radius:12px;background:#0e1b2c;border:1px solid var(--line);cursor:pointer;display:grid;grid-template-columns:30px 1fr;grid-template-rows:auto auto;column-gap:9px;align-items:center}.quick-grid>button>.icon{grid-row:1/3;color:#75aaff}.quick-grid>button strong{font-size:11px}.quick-grid>button span{color:#6d829b;font-size:9px;margin-top:3px}.quick-grid>button:hover{background:#13243a;border-color:var(--line-strong)}
.scan-inline{display:inline-flex;align-items:center;gap:7px;background:transparent;color:#6fa9f6;padding:3px 0;margin-top:-2px;font-size:10px;cursor:pointer}.logout-row{width:100%;height:43px;border-radius:10px;background:rgba(255,102,124,.08);color:#ff8696;display:flex;align-items:center;justify-content:center;gap:8px;cursor:pointer}.logout-row:hover{background:rgba(255,102,124,.13)}
.accent{color:#70adff!important}.row-icon.accent{background:#102a4b;color:#70adff}.mini-btn.accent{background:#14355d;color:#8fc0ff}.file-btn input{display:none}.qr-modal>strong{display:block;font-size:15px;margin-top:2px}.qr-modal>span{display:block;color:#7589a2;font-size:10px;margin-top:5px}.qr-modal>p{color:#687d97;font-size:10px;line-height:1.6;margin:10px auto 13px;max-width:330px}.lookup-card{display:flex;align-items:center;gap:11px}.lookup-card>div{flex:1;min-width:0}.lookup-card>div>span{display:block;color:#6d829b;font-size:9px;margin-top:4px}.lookup-card>.avatar{display:grid!important;place-items:center!important;margin-top:0!important;color:#fff!important;line-height:1!important}.lookup-card>.primary-btn{flex:none}.settings-hero>div{flex:1}.settings-hero>div span{color:#6e839c;font-size:10px}.settings-hero>button{flex:none}
/* small structural corrections */
.auth-title{margin-bottom:25px}.auth-title h1{margin:0 0 8px;font-size:30px;line-height:1.15;letter-spacing:-.045em}.auth-title p{margin:0;color:#7489a3;font-size:12px;line-height:1.5}.pane-head>div{flex:1;min-width:0}.pane-head>div>span{display:block;margin-top:3px;color:#5e748e;font-size:9px}.profile-action>.icon{width:39px;height:39px;padding:10px;margin:0 auto 6px;border-radius:11px;background:#102036}.profile-action>span{display:block;font-size:9px}.profile-action:hover>.icon{background:#17304d;color:#8fc0ff}.account-banner{position:fixed;z-index:60;left:88px;right:14px;top:10px;margin:0;box-shadow:0 8px 32px rgba(0,0,0,.22);display:flex;align-items:center;gap:7px;pointer-events:none}.mobile-nav-btn>b{position:absolute;right:calc(50% - 22px);top:5px;min-width:17px;height:17px;padding:0 4px;border-radius:9px;background:#ef4058;color:#fff;display:grid;place-items:center;font-size:9px}
 @media(max-width:760px){.app-shell.mobile-chat .list-pane,.app-shell.mobile-content .list-pane{display:none}.app-shell.mobile-chat .chat-pane{display:flex}.app-shell.mobile-content .content-pane{display:flex}.account-banner{left:10px;right:10px;top:8px}.app-shell.mobile-chat .mobile-bottom-nav,.app-shell.mobile-content .mobile-bottom-nav{display:grid}.app-shell.mobile-chat,.app-shell.mobile-content{padding-bottom:0}.app-shell.mobile-chat .chat-pane,.app-shell.mobile-content .content-pane{inset:0 0 calc(64px + env(safe-area-inset-bottom));height:auto}.mobile-back{display:none!important}}
.conv-row{border:0;background:transparent;color:inherit;text-align:left;width:100%}

@media(max-width:760px){.app-shell.mobile-chat .mobile-back{display:grid!important;flex:none}}

/* V3 direct E2EE chat */
.e2ee-chip{width:max-content;max-width:86%;margin:0 auto 18px;padding:5px 10px;border-radius:999px;background:rgba(50,199,136,.08);border:1px solid rgba(50,199,136,.15);color:#79d9aa;font-size:9px;letter-spacing:.02em}.system-message.warning{background:rgba(236,170,68,.08);border:1px solid rgba(236,170,68,.12);color:#d7ad68}.system-message strong{margin-right:6px;color:inherit}.chat-empty.compact{height:auto;min-height:180px}.msg-status{display:inline-block;margin-left:5px;min-width:12px;font-weight:800;letter-spacing:-2px;color:#bcdcff}.msg-status.read{color:#7fd4ff}.msg-status.failed{color:#ff8390;letter-spacing:0}.composer-box.disabled{opacity:.68}.compact-profile{padding:8px 0 0}.compact-profile .avatar{margin-bottom:7px}.group-manage section{border-top:1px solid rgba(255,255,255,.045);padding-top:13px}.group-manage section:first-child{border-top:0;padding-top:0}

/* V3.1 chat UX: incremental messages, unread badges, reply/actions */
[hidden]{display:none!important}
.count-badge.message-unread,.nav-badge.message-unread{background:#ef4058;box-shadow:0 0 0 2px #0a1624}
.conv-bottom .message-unread{margin-left:6px;flex:none}
.bubble-wrap{display:flex;align-items:flex-end;gap:5px;max-width:min(76%,650px)}
.message-row.mine .bubble-wrap{flex-direction:row-reverse}
.bubble-wrap .bubble{max-width:100%}
.message-more{width:26px;height:26px;display:grid;place-items:center;border-radius:8px;background:transparent;color:#607691;opacity:0;transform:translateY(2px);transition:opacity .16s ease,background .16s ease,color .16s ease,transform .16s ease;flex:none}
.message-row:hover .message-more,.message-more:focus-visible{opacity:1;transform:none}
.message-more:hover{background:#13263d;color:#d8e6f6}
.reply-quote{display:block;width:100%;margin:0 0 7px;padding:6px 8px;border:0;border-left:2px solid #5ba5ff;border-radius:5px;background:rgba(5,14,24,.18);text-align:left;color:#cfe2fa;cursor:pointer}
.reply-quote span{display:block;color:#74b7ff;font-size:9px;font-weight:800;margin-bottom:2px}
.reply-quote strong{display:block;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;font-weight:650}
.bubble-text{white-space:pre-wrap;word-break:break-word}
.composer-stack{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
.composer:has(.composer-reply){height:auto;min-height:70px;align-items:flex-end}
.composer-reply{display:flex;align-items:center;gap:10px;padding:7px 9px;border-radius:10px;background:#102138;border:1px solid rgba(90,161,255,.13);animation:replyIn .16s ease}
.composer-reply>div{min-width:0;flex:1;border-left:2px solid #4a9cff;padding-left:8px}
.composer-reply span{display:block;color:#6eb0ff;font-size:9px;font-weight:800}.composer-reply strong{display:block;color:#bcd0e8;font-size:10px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.composer-reply button{width:26px;height:26px;border-radius:8px;background:transparent;color:#7389a3;font-size:18px}.composer-reply button:hover{background:#172a43;color:#fff}
.action-list{display:flex;flex-direction:column;gap:4px}.action-list button{min-height:42px;display:flex;align-items:center;gap:10px;padding:0 11px;border-radius:9px;background:transparent;color:#cbd8e8;text-align:left}.action-list button:hover{background:#112238}.action-list button.danger{color:#ff8798}.action-list button.danger:hover{background:rgba(239,64,88,.09)}
.message-enter{animation:messageIn .2s cubic-bezier(.2,.8,.2,1)}
.message-leave{pointer-events:none;animation:messageOut .18s ease forwards}
.message-highlight .bubble{animation:messageGlow .8s ease}
.status-pop{animation:statusPop .18s ease}
@keyframes messageIn{from{opacity:0;transform:translateY(7px) scale(.985)}to{opacity:1;transform:none}}
@keyframes messageOut{to{opacity:0;transform:translateY(-4px) scale(.985)}}
@keyframes messageGlow{0%,100%{box-shadow:none}35%{box-shadow:0 0 0 2px rgba(89,165,255,.35),0 0 26px rgba(55,132,226,.16)}}
@keyframes statusPop{50%{transform:scale(1.18)}}
@keyframes replyIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@media(max-width:760px){.bubble-wrap{max-width:88%}.message-more{opacity:.7}.composer:has(.composer-reply){padding-top:7px}.reply-quote strong{max-width:190px}}


/* V3.2 encrypted attachments + disappearing messages */
.composer-attach{width:38px;height:38px;border-radius:10px;background:transparent;color:#7188a5;display:grid;place-items:center;cursor:pointer;flex:none;transition:.16s var(--ease)}
.composer-attach:hover{background:#13263e;color:#d8e8fb}.composer-attach:disabled{opacity:.35;cursor:not-allowed;background:transparent}
.composer-burn{display:grid;place-items:center;color:#ff9b66;flex:none}.composer-burn .icon{stroke-width:2}
.attachment-card{position:relative;width:min(360px,72vw);min-height:62px;padding:9px 10px;border:0;border-radius:11px;background:rgba(4,13,23,.22);display:flex;align-items:center;gap:10px;color:inherit;text-align:left;cursor:pointer;transition:.16s var(--ease)}
.message-row.mine .attachment-card{background:rgba(3,27,54,.22)}.attachment-card:hover{background:rgba(255,255,255,.055);transform:translateY(-1px)}
.attachment-icon{width:42px;height:42px;border-radius:11px;background:#17345a;color:#87bcff;display:grid;place-items:center;flex:none}.image-card .attachment-icon{background:#164a48;color:#7ee6ca}
.attachment-info{min-width:0;flex:1}.attachment-info strong{display:block;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.attachment-info small{display:block;margin-top:4px;color:#8ea3bd;font-size:9px}.attachment-download{color:#88baff;flex:none}
.burn-mode,.burn-timer{display:inline-flex;align-items:center;gap:3px;color:#ffc087;font-size:8px;font-weight:800;margin-right:6px;white-space:nowrap}.burn-mode .icon{width:12px;height:12px}.burn-timer{color:#ffb36f}
.image-viewer{text-align:center}.image-viewer img{max-width:100%;max-height:68vh;border-radius:13px;display:block;margin:0 auto;box-shadow:0 18px 70px rgba(0,0,0,.42)}.image-view-meta{margin-top:10px;color:#758aa4;font-size:10px}.attachment-modal-loading{min-height:220px;display:grid;place-items:center}.attachment-modal-loading .attachment-pending-spinner{width:24px;height:24px}.attachment-load-error{min-height:180px;display:grid;place-items:center;color:#91a7bf;font-size:12px}
.attachment-pick{min-height:92px;padding:14px;border-radius:12px;background:#0e1b2c;border:1px solid var(--line);cursor:pointer;display:grid;grid-template-columns:32px 1fr;grid-template-rows:auto auto;column-gap:10px;align-items:center}.attachment-pick>.icon{grid-row:1/3;color:#79b0ff}.attachment-pick strong{font-size:11px}.attachment-pick span{font-size:9px;color:#6d829b;margin-top:3px}.attachment-pick input{display:none}.attachment-pick:hover{background:#13243a;border-color:var(--line-strong)}
.burn-option-list{display:flex;flex-direction:column;gap:5px}.burn-option{height:42px;padding:0 12px;border-radius:9px;background:#0f1d2e;color:#a9bbd1;display:flex;align-items:center;justify-content:space-between;cursor:pointer}.burn-option:hover{background:#142840}.burn-option.active{background:rgba(48,131,247,.13);color:#82b8ff;box-shadow:inset 0 0 0 1px rgba(76,150,255,.12)}
@media(max-width:760px){.composer-attach{width:36px;height:36px}.attachment-card{width:min(300px,74vw)}.image-viewer img{max-height:62vh}}

/* V3.3 group E2EE */
.group-sender-label{display:block;margin:0 0 4px 7px;font-size:12px;line-height:1;color:#62a8ff;font-weight:650;letter-spacing:.01em}
.message-row.mine .group-sender-label{display:none}


/* V3.4 responsive chat composer, mobile viewport lock, group names/read receipts/member actions */
html,body,#root{height:var(--xchat-app-height,100dvh);min-height:0}
body{overscroll-behavior:none;touch-action:manipulation}
@media(max-width:860px){
  .app-shell .list-pane,.app-shell .content-pane,.app-shell .chat-pane{touch-action:pan-y}
  .app-shell .mobile-bottom-nav{touch-action:manipulation}
}
.app-shell{height:var(--xchat-app-height,100dvh);min-height:0;overflow:hidden}
.chat-pane{height:100%;min-height:0;overflow:hidden;display:grid;grid-template-rows:67px minmax(0,1fr) auto}
.messages{min-height:0;height:auto;overscroll-behavior:contain;padding-bottom:16px}
.messages-flow{min-height:100%;display:flex;flex-direction:column;justify-content:flex-end}
.messages-flow>.day-sep{flex:none}
.message-row{flex:none}
.composer{position:relative;inset:auto;bottom:auto;width:100%;height:auto;min-height:72px;flex:none;padding:10px 14px max(10px,env(safe-area-inset-bottom));align-items:flex-end}
.composer-stack{min-width:0;width:100%}
.composer-box{height:auto;min-height:48px;padding:8px 12px;align-items:flex-end}
.composer-box textarea{display:block;flex:1;min-width:0;width:100%;min-height:24px;max-height:120px;overflow-y:auto;resize:none;border:0;outline:0;background:transparent;color:#dfe9f5;font-size:14px;line-height:1.55;padding:2px 0;margin:0;caret-color:#62a7ff}
.composer-box textarea::placeholder{color:#526982}
.composer-box .composer-burn,.composer-box>.icon{margin-bottom:4px}
.composer-attach,.send-btn{margin-bottom:3px}
.group-read-count{display:inline-block;margin-left:5px;color:#7fadd8;font-size:8px;white-space:nowrap}
.group-member-main{min-width:0;flex:1}
.group-member-main strong{display:flex;align-items:center;gap:6px;min-width:0}
.group-member-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.group-role-tag{font-size:8px;font-weight:700;color:#7c93ad;background:#10243a;border-radius:6px;padding:2px 5px}
.member-actions{display:flex;align-items:center;gap:5px;margin-left:auto}
.member-row .mini-btn.danger{background:rgba(255,91,113,.09);color:#ff8495}
.member-row .mini-btn.danger:hover{background:rgba(255,91,113,.15)}
.local-remark{color:#7eb5ff!important}
.message-row .group-sender-label{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

@media(max-width:760px){
  html,body,#root,.app-shell{height:var(--xchat-app-height,100dvh);min-height:0}
  .app-shell{padding-bottom:calc(64px + env(safe-area-inset-bottom))}
  .chat-pane{display:none}
  .app-shell.chat-open .chat-pane,.app-shell.mobile-chat .chat-pane{display:grid}
  .app-shell.mobile-chat,.app-shell.mobile-content{padding-bottom:0}
   .app-shell.mobile-chat .chat-pane,.app-shell.mobile-content .content-pane{inset:0 0 calc(64px + env(safe-area-inset-bottom));height:auto;min-height:0}
  .chat-pane{grid-template-rows:61px minmax(0,1fr) auto}
  .messages{padding:14px 10px 10px}
  .composer{min-height:66px;padding:8px 8px max(8px,env(safe-area-inset-bottom));gap:5px;background:rgba(8,18,30,.97)}
  .composer-box{min-height:48px;border-radius:14px;padding:8px 10px}
  .composer-box textarea{font-size:16px;line-height:1.45;max-height:104px}
  .composer-attach{width:40px;height:40px}
  .send-btn{width:44px;height:44px}
  .bubble-wrap{max-width:91%}
  .bubble{font-size:13px}
  .mobile-bottom-nav{height:calc(64px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom)}
  .member-actions .mini-btn{padding:0 8px}
}


/* V3.5 compact interaction system */
.modal-head.minimal{height:52px}.modal-head.minimal h3{font-size:13px;font-weight:760}
.compact-form{padding:14px 16px}.compact-action-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.compact-action-grid.two{grid-template-columns:repeat(2,minmax(0,1fr))}.compact-action-grid.one{grid-template-columns:1fr}.compact-action{min-height:76px;border:1px solid rgba(255,255,255,.045);border-radius:13px;background:#0f1d2f;color:#c9d7e8;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;cursor:pointer;transition:.16s var(--ease)}.compact-action:hover{background:#14263c;transform:translateY(-1px)}.compact-action .icon{width:20px;height:20px;color:#7fb7ff}.compact-action strong{font-size:11px;font-weight:760}.compact-action.danger{color:#ff8b9b}.compact-action.danger .icon{color:#ff7b8f}.compact-action input{display:none}
.avatar-hit{display:inline-grid;place-items:center;flex:none;border:0;background:transparent;padding:0;border-radius:50%;cursor:pointer}.avatar-hit:active{transform:scale(.94)}
.member-picker{display:grid;gap:4px}.member-pick-row{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;padding:6px 8px;border-radius:10px;color:#d5e1ef;background:transparent;text-align:left}.member-pick-row:hover{background:#122238}.member-pick-row strong{font-size:11px}
.composer-mention{width:38px;height:38px;border-radius:10px;background:transparent;color:#7188a5;display:grid;place-items:center;flex:none}.composer-mention:hover{background:#13263e;color:#d8e8fb}.composer-mention:disabled{opacity:.35}
.conv-swipe-shell{position:relative;overflow:hidden;border-radius:11px}.conv-swipe-shell .conv-row{position:relative;z-index:2;background:var(--pane);transition:transform .2s var(--ease),background .15s}.conv-swipe-shell.swipe-open .conv-row{transform:translateX(-122px)}.conv-swipe-actions{position:absolute;z-index:1;right:0;top:0;bottom:0;width:122px;display:grid;grid-template-columns:1fr 1fr}.conv-swipe-actions button{border:0;color:#d9e6f4;background:#173150;font-size:10px;font-weight:760}.conv-swipe-actions button.danger{background:#a83c4d;color:#fff}.conv-swipe-shell.pinned .conv-row{background:#0d1c2e}.pin-mark{display:grid;place-items:center;color:#5d86b4;flex:none}.pin-mark .icon{width:12px;height:12px}
.group-sender-label{cursor:default}.mention-token{color:#7fc0ff;font-weight:760}
@media(max-width:760px){.compact-action-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}.compact-action{min-height:70px;border-radius:12px}.composer-mention{width:38px;height:40px}.conv-swipe-shell.swipe-open .conv-row{transform:translateX(-132px)}.conv-swipe-actions{width:132px}}

/* V3.7 cross-device read sync, reply alerts, member mute */
.conv-preview.mention-preview{color:#ff5e73;font-weight:780}
.mention-suggest{position:absolute;left:0;right:0;bottom:calc(100% + 7px);z-index:28;max-height:260px;overflow:auto;padding:6px;border-radius:14px;background:rgba(11,25,42,.98);border:1px solid rgba(116,164,222,.16);box-shadow:0 18px 55px rgba(0,0,0,.42);backdrop-filter:blur(20px)}
.mention-choice{width:100%;min-height:48px;display:flex;align-items:center;gap:10px;padding:6px 9px;border:0;border-radius:10px;background:transparent;color:#d7e4f2;text-align:left;cursor:pointer}
.mention-choice:hover,.mention-choice.active{background:#132a45}.mention-choice>.icon{color:#76b5ff}
.composer-stack{position:relative}
.inline-image-wrap{display:block;max-width:min(390px,72vw);padding:0;border:0;border-radius:12px;overflow:hidden;background:#102036;color:#7e94ad;text-align:center;cursor:pointer}
.inline-image-wrap img{display:block;width:100%;height:auto;max-height:420px;object-fit:contain;background:#07111d}
.inline-image-loading{display:grid;place-items:center;min-width:210px;min-height:118px;padding:18px;font-size:10px;color:#7188a3}
.big-image-card .attachment-icon{background:#164a48;color:#7ee6ca}
.compact-action.disabled{opacity:.4;cursor:not-allowed;pointer-events:none}.compact-hint{margin-top:10px;text-align:center;color:#6e839d;font-size:9px}
@media(max-width:760px){
  .mention-suggest{left:-44px;right:-50px;max-height:230px;border-radius:13px}
  .inline-image-wrap{max-width:76vw}.inline-image-wrap img{max-height:48vh}
  .app-shell:not(.mobile-chat):not(.mobile-content) .content-pane{display:none!important}
}


/* V3.8 scroll memory, latest-message prompt, mention keyboard polish, privacy mode */
.latest-jump{
  position:absolute;right:22px;bottom:calc(var(--composer-h,72px) + 12px);z-index:18;
  min-height:36px;padding:0 13px;border:1px solid rgba(104,166,239,.18);border-radius:18px;
  background:rgba(15,34,56,.94);color:#b9cce1;box-shadow:0 12px 32px rgba(0,0,0,.34);
  display:flex;align-items:center;gap:7px;font-size:10px;font-weight:760;backdrop-filter:blur(16px);
  transition:.18s var(--ease);cursor:pointer
}
.latest-jump:hover{transform:translateY(-1px);background:#15304e;color:#fff}
.latest-jump.has-unread{background:linear-gradient(145deg,#286ec0,#205995);color:#fff;border-color:rgba(112,181,255,.3)}
.latest-jump[hidden]{display:none!important}
.latest-jump .icon{width:15px;height:15px}
.mention-choice>.avatar{display:grid!important;place-items:center!important;flex:none!important;min-width:30px!important;width:30px!important;height:30px!important}
.mention-choice-copy{min-width:0;display:block;flex:1}
.mention-choice-copy strong{display:block;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mention-choice-copy small{display:block;margin-top:3px;color:#6f86a2;font-size:9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mention-all-icon{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;flex:none;background:#17304f;color:#77b7ff}
.mention-all-icon .icon{width:17px;height:17px}
.chat-pane.privacy-on .chat-head>.avatar,
.chat-pane.privacy-on .chat-head .chat-title{filter:blur(6px);transition:filter .18s ease}
.message-row.privacy-locked:not(.privacy-revealed)>.avatar,
.message-row.privacy-locked:not(.privacy-revealed)>.avatar-hit,
.message-row.privacy-locked:not(.privacy-revealed) .bubble-wrap{filter:blur(8px);user-select:none;transition:filter .18s ease}
.message-row.privacy-locked:not(.privacy-revealed){cursor:pointer}
.message-row.privacy-revealed>.avatar,
.message-row.privacy-revealed>.avatar-hit,
.message-row.privacy-revealed .bubble-wrap{filter:none;transition:filter .18s ease}
.compact-action-grid{grid-template-columns:repeat(auto-fit,minmax(72px,1fr))}
@media(max-width:760px){
  .latest-jump{right:12px;bottom:calc(var(--composer-h,66px) + 10px);min-height:34px;padding:0 12px}
  .mention-suggest{left:-42px;right:-48px}
}

/* V3.9 shared privacy mode + click-to-read privacy semantics */
.message-row.privacy-locked:not(.privacy-revealed)::after{content:"点击查看";position:absolute;inset:auto 12px 8px auto;font-size:9px;color:#6f86a2;pointer-events:none;opacity:.85}
.message-row{position:relative}

/* V4.0 desktop selection + mandatory announcement */
.conv-row{position:relative}
@media(min-width:861px){
  .conv-row.active{background:linear-gradient(100deg,rgba(37,123,238,.46),rgba(28,90,176,.22));box-shadow:inset 3px 0 0 #4a9bff,inset 0 0 0 1px rgba(94,165,255,.2),0 7px 24px rgba(12,77,157,.12)}
  .conv-row.active .conv-name{color:#f4f9ff;text-shadow:0 0 14px rgba(85,159,255,.24)}
  .conv-row.active .avatar{box-shadow:0 0 0 2px rgba(84,158,255,.36),0 0 20px rgba(58,137,242,.16)}
}
.announcement-side .detail-value{white-space:pre-wrap;word-break:break-word;line-height:1.65;max-height:170px;overflow:auto}
.mandatory-layer{backdrop-filter:blur(8px);background:rgba(2,8,16,.76)}
.mandatory-modal{max-width:480px}
.announcement-force-title{font-size:12px;font-weight:800;color:#8fbfff;margin-bottom:10px}
.announcement-force-body{padding:15px 16px;border-radius:12px;background:#0c1b2d;border:1px solid rgba(94,165,255,.13);white-space:pre-wrap;word-break:break-word;line-height:1.8;color:#e3edf9;max-height:min(52vh,430px);overflow:auto}


/* V4.1 interaction polish */
.app-shell{animation:none}
@media(min-width:861px){
  .conv-swipe-actions{display:none!important}
  .conv-swipe-shell.swipe-open .conv-row{transform:none!important}
  .conv-row.active{
    background:#183553;
    box-shadow:inset 3px 0 0 #4f9df8!important;
  }
  .conv-row.active .conv-name{color:#f4f8fd;text-shadow:none!important}
  .conv-row.active .avatar{box-shadow:none!important}
  .conv-row.active:hover{background:#1b3b5e}
}
@media(max-width:760px){
  html,body{width:100%;max-width:100%;overflow:hidden}
  body.composer-focused:not(.android-native){position:fixed;inset:0;width:100%}
  body.composer-focused:not(.android-native) #root{
    position:fixed;left:0;right:0;top:var(--xchat-vv-top,0px);
    height:var(--xchat-app-height,100dvh);overflow:hidden
  }
  body.composer-focused .app-shell.mobile-chat{height:var(--xchat-app-height,100dvh);min-height:0}
  body.composer-focused .chat-pane{height:100%;min-height:0}
  body.composer-focused .messages{min-height:0}
}

/* V4.2 group burn */
.compact-burn-field{margin:8px 0 10px;padding-left:2px}.compact-burn-field .input-wrap{max-width:180px}

/* V4.2.1 camera-first scanner */
.scanner-head{border-bottom:0}.scanner-body{padding-top:4px}.scan-frame.camera-only{height:min(64vh,520px);min-height:320px;border-radius:18px;border:1px solid rgba(121,169,225,.18);background:#02070d;box-shadow:inset 0 0 0 1px rgba(255,255,255,.015)}
.scan-frame.camera-only video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.scan-frame.camera-only:after{content:"";position:absolute;inset:0;background:radial-gradient(circle at center,transparent 0 31%,rgba(0,0,0,.18) 56%,rgba(0,0,0,.46) 100%);pointer-events:none}
.scan-target{position:absolute;left:50%;top:50%;width:min(62%,280px);aspect-ratio:1;transform:translate(-50%,-50%);z-index:3;border-radius:18px;background:linear-gradient(#69b2ff,#69b2ff) left top/28px 2px no-repeat,linear-gradient(#69b2ff,#69b2ff) left top/2px 28px no-repeat,linear-gradient(#69b2ff,#69b2ff) right top/28px 2px no-repeat,linear-gradient(#69b2ff,#69b2ff) right top/2px 28px no-repeat,linear-gradient(#69b2ff,#69b2ff) left bottom/28px 2px no-repeat,linear-gradient(#69b2ff,#69b2ff) left bottom/2px 28px no-repeat,linear-gradient(#69b2ff,#69b2ff) right bottom/28px 2px no-repeat,linear-gradient(#69b2ff,#69b2ff) right bottom/2px 28px no-repeat;pointer-events:none}
.scan-frame.camera-only .scan-line{z-index:4;left:20%;right:20%;height:1px}.scan-frame.camera-only #scanHint{position:absolute;z-index:5;left:50%;bottom:18px;transform:translateX(-50%);white-space:nowrap;padding:7px 11px;border-radius:999px;background:rgba(5,12,20,.62);backdrop-filter:blur(12px);color:#d8e9fb;font-size:10px;letter-spacing:.02em}
@media(max-width:860px){.scanner-body{padding:0 10px 12px}.scan-frame.camera-only{height:min(72dvh,620px);min-height:360px;border-radius:16px}}

/* V4.4 devices, local search, timed mute */
.device-list{display:grid;gap:10px}.device-row{display:flex;align-items:center;gap:12px;padding:12px 13px;border:1px solid var(--line);border-radius:14px;background:var(--pane-2)}.device-icon{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:rgba(57,147,255,.12);color:var(--accent);flex:none}.device-main{min-width:0;flex:1;display:grid;gap:3px}.device-main strong{display:flex;align-items:center;gap:7px;min-width:0}.device-main span,.device-main small{color:var(--muted);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.device-current{font-style:normal;font-size:10px;padding:2px 6px;border-radius:999px;background:rgba(57,147,255,.14);color:var(--accent)}.danger-outline{border-color:rgba(255,84,105,.25)!important;color:#ff6478!important;background:rgba(255,84,105,.06)!important}
.chat-search-body{display:grid;gap:12px}.chat-search-results{display:grid;gap:7px;max-height:min(56vh,520px);overflow:auto}.chat-search-result{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 10px;text-align:left;border:1px solid var(--line);background:var(--pane-2);padding:10px 12px;border-radius:12px}.chat-search-result strong{grid-column:1;color:var(--text);font-size:13px}.chat-search-result span{grid-column:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted);font-size:12px}.chat-search-result small{grid-column:2;grid-row:1/3;align-self:center;color:var(--muted);font-size:11px}.chat-search-result:hover{border-color:rgba(57,147,255,.32);background:rgba(57,147,255,.06)}
.timed-mute-wrap{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:8px 0 4px;padding:10px;border:1px solid var(--line);border-radius:12px;background:var(--pane-2)}.timed-mute-wrap .field{margin:0}.timed-mute-wrap .field-help{grid-column:1/-1;color:var(--muted);font-size:11px}.custom-mute-box{margin-top:12px;padding-top:12px;border-top:1px solid var(--line);display:grid;gap:10px}
@media(max-width:600px){.device-row{align-items:flex-start}.timed-mute-wrap{grid-template-columns:1fr}.timed-mute-wrap .field-help{grid-column:1}.chat-search-result{grid-template-columns:minmax(0,1fr)}.chat-search-result small{grid-column:1;grid-row:auto}}


/* V4.5 input polish, mute status, push diagnostics */
.chat-search-body{gap:10px}
.chat-search-field{
  height:52px;display:flex;align-items:center;gap:10px;padding:0 13px;
  border:1px solid rgba(92,145,213,.18);border-radius:15px;
  background:linear-gradient(180deg,rgba(15,31,50,.98),rgba(10,22,36,.98));
  color:#6f89a8;box-shadow:inset 0 1px 0 rgba(255,255,255,.025);
  transition:.18s var(--ease)
}
.chat-search-field:focus-within{
  border-color:rgba(72,148,255,.48);
  box-shadow:0 0 0 4px rgba(58,136,247,.075),inset 0 1px 0 rgba(255,255,255,.035);
  background:linear-gradient(180deg,#10223a,#0b1a2b)
}
.chat-search-field>.icon{flex:none;color:#6f8cab}
.chat-search-field input{
  flex:1;min-width:0;border:0;outline:0;background:transparent;color:#eef5fd;
  font-size:14px;font-weight:610;caret-color:#69abff;padding:0
}
.chat-search-field input::placeholder{color:#56708f;font-weight:500}
.chat-search-key{
  flex:none;padding:4px 7px;border-radius:8px;background:rgba(75,143,233,.08);
  border:1px solid rgba(75,143,233,.11);color:#7298c6;font-size:9px;font-weight:800
}
.chat-search-caption{padding:0 3px 2px;color:#627893;font-size:10px;line-height:1.55}

.announcement-editor{
  overflow:hidden;border:1px solid rgba(96,151,219,.17);border-radius:15px;
  background:linear-gradient(180deg,rgba(13,29,47,.98),rgba(9,21,34,.98));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.02);transition:.18s var(--ease)
}
.announcement-editor:focus-within{
  border-color:rgba(72,148,255,.44);
  box-shadow:0 0 0 4px rgba(58,136,247,.07),inset 0 1px 0 rgba(255,255,255,.03)
}
.announcement-editor-top{
  height:40px;display:flex;align-items:center;justify-content:space-between;padding:0 12px;
  border-bottom:1px solid rgba(255,255,255,.045);background:rgba(255,255,255,.012)
}
.announcement-editor-top span{display:flex;align-items:center;gap:7px;color:#8fa9c7;font-size:10px;font-weight:800}
.announcement-editor-top .icon{color:#6ea8ee}
.announcement-editor-top small{color:#55708f;font-size:9px}
.announcement-editor textarea{
  display:block;width:100%;min-height:132px;max-height:280px;resize:vertical;border:0;outline:0;
  background:transparent;color:#edf4fc;font-size:13px;line-height:1.75;padding:13px 14px;
  caret-color:#67a9ff
}
.announcement-editor textarea::placeholder{color:#516a86}
.announcement-editor-foot{
  padding:9px 12px 10px;border-top:1px solid rgba(255,255,255,.04);
  color:#5d7592;font-size:9px;line-height:1.5
}

.chat-restriction{
  position:absolute;left:50%;bottom:calc(var(--composer-h,72px) + 12px);z-index:17;
  transform:translateX(-50%);max-width:min(88%,520px);min-width:220px;
  display:flex;align-items:center;justify-content:center;gap:9px;padding:9px 13px;
  border-radius:13px;border:1px solid rgba(255,175,91,.18);
  background:rgba(35,27,21,.94);color:#f4c48c;
  box-shadow:0 12px 32px rgba(0,0,0,.28);backdrop-filter:blur(14px);
  pointer-events:none
}
.chat-restriction>.icon{flex:none;color:#f0ad68}
.chat-restriction>div{min-width:0;text-align:center}
.chat-restriction strong{display:block;font-size:10px;font-weight:820;line-height:1.4}
.chat-restriction span{display:block;margin-top:2px;color:#b99068;font-size:9px;line-height:1.4}
.chat-restriction + .latest-jump{bottom:calc(var(--composer-h,72px) + 62px)}

@media(max-width:760px){
  .chat-search-field{height:50px;border-radius:14px}
  .announcement-editor textarea{min-height:118px;font-size:16px;line-height:1.55}
  .chat-restriction{
    left:12px;right:12px;bottom:calc(var(--composer-h,66px) + 9px);transform:none;
    max-width:none;min-width:0;padding:8px 11px
  }
  .chat-restriction + .latest-jump{bottom:calc(var(--composer-h,66px) + 58px)}
}

/* V4.6 notification onboarding, multi-select, forwarding, drafts and member search */
.notify-intro{display:flex;gap:14px;align-items:center;padding:16px;border:1px solid rgba(120,185,255,.18);border-radius:16px;background:linear-gradient(180deg,rgba(24,52,86,.48),rgba(10,24,42,.55))}.notify-intro>svg{width:28px;height:28px;flex:none}.notify-intro>div{display:flex;flex-direction:column;gap:5px}.notify-intro strong{font-size:15px}.notify-intro span{font-size:12px;line-height:1.6;color:var(--muted)}
.select-head{background:linear-gradient(180deg,rgba(15,35,61,.98),rgba(10,24,43,.98));border-bottom-color:rgba(117,179,255,.22)}.select-head .danger-icon{color:#ff7a86}.select-mode .messages{padding-bottom:12px}.select-mode .message-more{display:none!important}
.message-row{position:relative}.message-select{width:24px;height:24px;border-radius:50%;border:1px solid rgba(132,171,213,.45);background:rgba(7,18,31,.94);color:white;display:grid;place-items:center;flex:none;align-self:center;margin:0 4px;transition:.16s ease}.message-select span{font-size:13px;line-height:1}.message-select.on{background:#3f8cff;border-color:#79adff;box-shadow:0 0 0 3px rgba(63,140,255,.12)}.message-selected .bubble{outline:1px solid rgba(83,151,255,.55);box-shadow:0 0 0 3px rgba(65,126,220,.08)}
.forwarded-label{font-size:11px;font-weight:700;color:#7db5ff;margin-bottom:5px;letter-spacing:.02em}.forward-note{font-size:12px;color:var(--muted);padding:10px 12px;border-radius:12px;background:rgba(73,127,194,.08);border:1px solid rgba(103,164,232,.12);margin-bottom:10px}.forward-targets{display:flex;flex-direction:column;gap:4px;max-height:52vh;overflow:auto}.forward-target{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border:0;border-radius:12px;background:transparent;color:var(--text);text-align:left}.forward-target:hover{background:rgba(92,145,206,.09)}.forward-target>div{display:flex;flex-direction:column;gap:2px}.forward-target strong{font-size:14px}.forward-target span{font-size:11px;color:var(--muted)}
.member-search-box{height:38px;display:flex;align-items:center;gap:8px;padding:0 11px;margin:8px 0 10px;border-radius:12px;border:1px solid rgba(111,160,215,.16);background:rgba(7,18,31,.62)}.member-search-box svg{color:#7995b4}.member-search-box input{min-width:0;flex:1;border:0;outline:0;background:transparent;color:var(--text);font:inherit;font-size:13px}.member-search-box input::placeholder{color:#6f849c}
.media-summary{display:flex;gap:8px;margin-bottom:10px}.media-summary span{padding:7px 10px;border-radius:999px;background:rgba(70,127,192,.08);border:1px solid rgba(105,160,224,.13);font-size:12px;color:var(--muted)}.media-summary b{color:var(--text)}.media-list{display:flex;flex-direction:column;gap:4px;max-height:56vh;overflow:auto}.media-row{display:flex;align-items:center;gap:10px;width:100%;padding:10px;border:0;border-radius:12px;background:transparent;color:var(--text);text-align:left}.media-row:hover{background:rgba(91,145,210,.08)}.media-icon{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:rgba(64,132,214,.13);color:#7eb5ff}.media-row>div{display:flex;flex-direction:column;gap:2px;min-width:0}.media-row strong{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.media-row span{font-size:11px;color:var(--muted)}
@media(max-width:860px){.select-head .chat-actions{gap:2px}.select-head .chat-head-info .chat-sub{display:none}.message-select{width:23px;height:23px;margin-left:0}.forward-targets{max-height:58vh}.media-list{max-height:60vh}}

/* V4.7 mobile back / QR trusted login */
.auth-divider{display:flex;align-items:center;gap:12px;margin:14px 0;color:var(--muted,#7f8da3);font-size:12px}.auth-divider:before,.auth-divider:after{content:"";height:1px;flex:1;background:rgba(148,163,184,.14)}
.qr-login-btn{width:100%;height:46px;border-radius:14px;border:1px solid rgba(96,165,250,.22);background:rgba(20,40,70,.55);color:#dcecff;display:flex;align-items:center;justify-content:center;gap:9px;font-weight:700;cursor:pointer}.qr-login-btn:hover{background:rgba(28,54,92,.72);border-color:rgba(96,165,250,.36)}
.qr-auth-card{max-width:430px}.pc-login-qr{position:relative;width:238px;height:238px;margin:8px auto 16px;padding:12px;border-radius:24px;background:#fff;box-shadow:0 20px 50px rgba(0,0,0,.28)}.pc-login-qr img{width:100%;height:100%;display:block;border-radius:14px}.qr-scan-line{position:absolute;left:24px;right:24px;top:50%;height:2px;border-radius:2px;background:linear-gradient(90deg,transparent,#36a3ff,transparent);box-shadow:0 0 14px rgba(54,163,255,.7)}
.qr-login-state{text-align:center;display:grid;gap:5px;margin-bottom:16px}.qr-login-state strong{font-size:15px;color:#eef6ff}.qr-login-state span{font-size:12px;color:var(--muted,#8795aa)}
.login-approve-card{padding:18px;border-radius:18px;background:rgba(14,27,48,.72);border:1px solid rgba(96,165,250,.16);display:grid;justify-items:center;text-align:center;gap:8px}.login-approve-card>.icon{width:34px;height:34px;color:#62b1ff}.login-approve-card strong{font-size:17px;color:#fff}.login-approve-card span{font-size:13px;color:#c8d6e8}.login-approve-card small{font-size:12px;line-height:1.6;color:#8392a7;max-width:320px}
.device-trusted{font-style:normal;font-size:10px;line-height:18px;padding:0 7px;margin-left:7px;border-radius:999px;color:#8ee3b8;background:rgba(52,211,153,.10);border:1px solid rgba(52,211,153,.22)}
.device-security-note{margin:10px 18px 18px;padding:12px 14px;border-radius:14px;background:rgba(30,64,175,.08);border:1px solid rgba(96,165,250,.13);font-size:12px;line-height:1.6;color:#8999af}
@media(max-width:760px){.pc-login-qr{width:220px;height:220px}.qr-auth-card{width:min(94vw,430px)}}

/* V4.8 trusted-device login details + same-account device sync */
.remembered-login{display:grid;gap:12px}.remembered-account{width:100%;border:1px solid rgba(96,165,250,.17);background:linear-gradient(180deg,rgba(21,42,71,.72),rgba(10,25,44,.78));border-radius:20px;padding:20px 16px;display:grid;justify-items:center;gap:7px;color:var(--text);cursor:pointer;transition:.16s ease}.remembered-account:hover{transform:translateY(-1px);border-color:rgba(96,165,250,.34);background:linear-gradient(180deg,rgba(28,53,87,.8),rgba(13,31,53,.84))}.remembered-account strong{font-size:18px}.remembered-account span{font-size:12px;color:#91a5bd}.remembered-account small{margin-top:3px;color:#65adff;font-size:12px;font-weight:750}.pc-login-note{margin:0;padding:0 8px;color:#71849c;font-size:11px;line-height:1.65;text-align:center}.pc-first-login{display:grid;justify-items:center;gap:9px;padding:18px 0 2px}.pc-first-login>.login-device-icon{width:52px;height:52px;border-radius:16px;display:grid;place-items:center;color:#72b8ff;background:rgba(68,141,230,.10);border:1px solid rgba(96,165,250,.16)}.pc-first-login>strong{font-size:17px}.pc-first-login>span{font-size:12px;color:var(--muted);text-align:center;line-height:1.6;margin-bottom:8px}.trusted-wait{display:grid;justify-items:center;gap:7px;padding:12px 0}.trusted-wait>strong{font-size:18px}.trusted-wait>span{font-size:12px;color:var(--muted)}
.login-approve-user{display:flex;align-items:center;gap:12px;padding:3px 2px 15px}.login-approve-user>div{display:flex;flex-direction:column;gap:3px}.login-approve-user strong{font-size:16px}.login-approve-user span{font-size:11px;color:var(--muted)}.login-request-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;border:1px solid rgba(111,165,225,.13);border-radius:15px;overflow:hidden;background:rgba(111,165,225,.08)}.login-request-grid>div{min-width:0;padding:11px 12px;background:rgba(7,18,31,.92);display:flex;flex-direction:column;gap:4px}.login-request-grid span{font-size:10px;color:#758aa4}.login-request-grid strong{font-size:12px;color:#e9f3ff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.login-security-hint{display:flex;align-items:flex-start;gap:8px;margin-top:12px;padding:10px 11px;border-radius:12px;background:rgba(31,92,165,.09);color:#8399b4;font-size:11px;line-height:1.55}.login-security-hint .icon{flex:none;color:#64abf6;margin-top:1px}.danger-text{color:#ff8c95!important}
@media(max-width:760px){.login-request-grid{grid-template-columns:1fr}.remembered-account{padding:17px 14px}}

/* V4.9 multi-device delete reliability + group/contact visual separation */
.conv-avatar-wrap,.chat-avatar-wrap{position:relative;display:inline-grid;place-items:center;flex:none}.conv-avatar-wrap.is-group .avatar,.chat-avatar-wrap.is-group .avatar{border-radius:14px}.group-avatar-mark{position:absolute;right:-2px;bottom:-2px;min-width:18px;height:18px;padding:0 4px;border-radius:7px;display:grid;place-items:center;background:#2f82f6;color:#fff;border:2px solid var(--pane,#0a1726);font-style:normal;font-size:8px;font-weight:900;line-height:1;box-shadow:0 3px 10px rgba(29,102,205,.28)}.group-avatar-mark.mini{min-width:16px;height:16px;border-radius:6px;font-size:7px;right:-3px;bottom:-3px}.group-kind-badge,.chat-group-badge{display:inline-flex;align-items:center;justify-content:center;height:17px;padding:0 6px;border-radius:999px;background:rgba(61,139,245,.11);border:1px solid rgba(84,155,248,.18);color:#79b2ff;font-size:8px;font-weight:850;letter-spacing:.02em;white-space:nowrap}.conv-top .group-kind-badge{margin-left:6px;flex:none}.chat-group-badge{height:18px;margin-left:7px;vertical-align:2px}.group-conv-row .conv-preview:before{content:'群 · ';color:#5689c5}.both-delete-icon{position:relative}.both-delete-icon>b{position:absolute;right:-4px;bottom:-4px;min-width:25px;height:13px;padding:0 3px;border-radius:6px;background:#b64d5b;color:#fff;font-size:7px;line-height:13px;font-weight:900;letter-spacing:0}.select-head .both-delete-icon{margin-left:2px}
@media(max-width:760px){.group-kind-badge{height:16px;padding:0 5px;font-size:7px}.chat-group-badge{height:17px;font-size:7px}.group-avatar-mark{right:-1px;bottom:-1px}}

/* V5.0 local global search + ordered receipts/delete tombstones */
.global-search-loading{min-height:120px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;color:#6f86a2;font-size:11px;text-align:center;padding:22px}.global-search-loading .icon{color:#69a9f7}.global-search-section-title{height:30px;display:flex;align-items:center;gap:6px;padding:0 12px;color:#607995;font-size:9px;font-weight:850;letter-spacing:.05em;text-transform:uppercase}.global-search-section-title span{color:#8aa4c1}.global-message-results{display:flex;flex-direction:column;padding:0 5px 8px}.global-message-result{width:100%;display:flex;align-items:center;gap:10px;padding:9px 8px;border:0;border-radius:12px;background:transparent;color:var(--text);text-align:left;cursor:pointer}.global-message-result:hover{background:rgba(70,128,201,.09)}.global-search-avatar{position:relative;display:grid;place-items:center;flex:none}.global-search-avatar.is-group .avatar{border-radius:13px}.global-search-copy{min-width:0;flex:1;display:flex;flex-direction:column;gap:4px}.global-search-top{min-width:0;display:flex;align-items:center;gap:8px}.global-search-top strong{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:#e7f0fb}.global-search-top small{flex:none;color:#526b88;font-size:8px}.global-search-snippet{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#8197b0;font-size:10px;line-height:1.4}.global-search-mark{background:transparent;color:#ff6878;font-weight:850}.message-row.global-search-target .bubble{animation:globalSearchTarget 1.8s ease}@keyframes globalSearchTarget{0%,100%{box-shadow:0 0 0 0 rgba(255,94,110,0)}20%,70%{box-shadow:0 0 0 3px rgba(255,94,110,.25),0 0 24px rgba(255,94,110,.16)}}

/* V5.1 application lock + hardened first-PC QR login */
body.app-locked{overflow:hidden;background:#050a11}.app-lock-screen{position:fixed;inset:0;z-index:300;display:grid;place-items:center;padding:24px;background:radial-gradient(circle at 50% 115%,rgba(27,108,230,.23),transparent 34%),linear-gradient(145deg,#050a11,#081321 55%,#081728)}.app-lock-screen:before{content:"";position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(rgba(255,255,255,.018) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.014) 1px,transparent 1px);background-size:48px 48px;mask-image:linear-gradient(to bottom,transparent,black 35%,black 80%,transparent)}.app-lock-card{position:relative;z-index:1;width:min(100%,390px);padding:10px 0;text-align:center}.app-lock-card .auth-logo{justify-content:center;margin-bottom:24px}.app-lock-icon{width:62px;height:62px;margin:0 auto 14px;border-radius:19px;display:grid;place-items:center;background:linear-gradient(180deg,rgba(52,127,223,.18),rgba(24,62,109,.16));border:1px solid rgba(96,165,250,.2);color:#78baff;box-shadow:0 14px 34px rgba(0,0,0,.22)}.app-lock-icon .icon{width:26px;height:26px}.app-lock-card h1{margin:0;font-size:23px}.app-lock-card>p{margin:7px 0 20px;color:var(--muted);font-size:12px;line-height:1.55}.app-lock-bio{margin-bottom:4px}.app-lock-or{display:flex;align-items:center;gap:10px;margin:13px 0;color:#667b94;font-size:10px}.app-lock-or:before,.app-lock-or:after{content:"";height:1px;flex:1;background:rgba(145,169,197,.12)}.app-lock-card form{text-align:left}.app-lock-card form>.secondary-btn{margin-top:8px}.app-lock-logout{margin-top:12px}.app-lock-foot{margin-top:13px;color:#586d86;font-size:9px;line-height:1.5}.app-lock-note{margin:0 0 14px}.app-lock-passkey{display:flex;align-items:flex-start;gap:10px;margin-top:12px;padding:12px;border-radius:13px;border:1px solid rgba(102,157,220,.13);background:rgba(52,103,164,.07);font-size:12px}.app-lock-passkey input{margin-top:3px;accent-color:#4f9bff}.app-lock-passkey span{display:flex;flex-direction:column;gap:3px;color:#dce8f6}.app-lock-passkey small{font-size:10px;line-height:1.45;color:#71869f}.app-lock-passkey:has(input:disabled){opacity:.55}
@media(max-width:760px){.app-lock-screen{padding:20px}.app-lock-card{width:min(100%,360px)}.app-lock-card .input-wrap input{font-size:16px}.app-lock-icon{width:58px;height:58px}}

/* V5.1.1 refined application lock */
.app-lock-screen{padding:22px;background:radial-gradient(circle at 50% 100%,rgba(37,114,215,.17),transparent 36%),linear-gradient(160deg,#050910 0%,#08111d 52%,#071522 100%)}
.app-lock-screen:before{opacity:.42;background-size:56px 56px}
.app-lock-card{width:min(100%,380px);padding:34px 30px 26px;border:1px solid rgba(124,161,205,.13);border-radius:28px;background:rgba(8,17,29,.78);box-shadow:0 30px 90px rgba(0,0,0,.38),inset 0 1px 0 rgba(255,255,255,.025);backdrop-filter:blur(24px);text-align:center}
.app-lock-brand{height:28px;display:flex;align-items:center;justify-content:center;gap:8px;color:#91a8c3;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;margin-bottom:21px}.app-lock-brand .brand-mark{width:26px;height:26px}.app-lock-brand .brand-mark svg{width:16px;height:16px}
.app-lock-icon{width:58px;height:58px;margin:0 auto 16px;border-radius:18px;background:linear-gradient(180deg,rgba(65,143,239,.18),rgba(28,76,132,.12));border-color:rgba(98,161,238,.19);box-shadow:none}.app-lock-card h1{font-size:22px;letter-spacing:-.025em}.app-lock-user{margin:7px 0 0!important;color:#b7c8db!important;font-size:12px!important}.app-lock-reason{margin:5px 0 22px!important;color:#60758d!important;font-size:10px!important}
.app-lock-panel{display:flex;flex-direction:column;align-items:stretch;gap:10px}.app-lock-panel[hidden]{display:none!important}.app-lock-bio-stage{padding-top:2px}.app-lock-verify-mark{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;margin:0 auto 2px;background:rgba(52,128,224,.09);color:#6aaeff}.app-lock-bio-stage>strong{font-size:12px;color:#dce8f6}.app-lock-bio-stage>span{font-size:9px;color:#637a94;margin-top:-5px}
.app-lock-primary{width:100%;height:44px;margin:7px 0 0!important;border-radius:13px;display:flex;align-items:center;justify-content:center;text-align:center;font-size:12px;font-weight:800}.app-lock-text-btn,.app-lock-logout-link{border:0;background:transparent;color:#7088a4;cursor:pointer;text-align:center}.app-lock-text-btn{height:32px;font-size:10px}.app-lock-text-btn:hover{color:#9ab3d0}.app-lock-logout-link{display:block;margin:15px auto 0;font-size:9px}.app-lock-logout-link:hover{color:#a3b7ce}
.app-lock-pin-title{display:flex;flex-direction:column;gap:4px;margin-bottom:3px}.app-lock-pin-title strong{font-size:12px;color:#dce8f6}.app-lock-pin-title span{font-size:9px;color:#60758d}.app-lock-pin-box{height:52px;border-radius:15px;border:1px solid rgba(125,163,207,.16);background:rgba(5,13,23,.72);display:flex;align-items:center;justify-content:center;padding:0 16px}.app-lock-pin-box:focus-within{border-color:rgba(83,153,244,.45);box-shadow:0 0 0 3px rgba(56,128,223,.08)}.app-lock-pin-box input{width:100%;border:0;outline:0;background:transparent;color:#e7f0fb;text-align:center;font-size:22px;letter-spacing:.35em;padding-left:.35em}.app-lock-pin-box input::placeholder{color:#40536a;letter-spacing:.32em}.app-lock-error{min-height:16px;text-align:center!important;font-size:9px}.app-lock-card form{text-align:center}.app-lock-foot{margin-top:12px;color:#4f647c;font-size:8px}
.xchat-secure-welcome{font-weight:760;letter-spacing:.01em}
@media(max-width:760px){.app-lock-screen{padding:16px}.app-lock-card{width:min(100%,350px);padding:30px 24px 23px;border-radius:24px}.app-lock-primary{height:46px}.app-lock-pin-box input{font-size:21px}}

/* V5.1.6 presence indicator. Mobile back animation is performed with the
   Web Animations API after gesture acceptance, so the live surface is never
   left transformed or pointer-blocked during a gesture. */
.contact-avatar-wrap{position:relative;display:inline-grid;place-items:center;flex:none}
.friend-online-dot{position:absolute;right:-1px;bottom:-1px;width:11px;height:11px;border-radius:50%;background:#2ed573;border:2px solid var(--pane,#0a1726);box-shadow:0 2px 8px rgba(46,213,115,.28);opacity:0;transform:scale(.6);transition:opacity .16s ease,transform .18s ease;pointer-events:none}
.friend-online-dot.online{opacity:1;transform:scale(1)}
.chat-avatar-wrap .friend-online-dot{right:-2px;bottom:-2px;width:10px;height:10px;border-color:#08131f}
.contact-avatar-wrap .friend-online-dot{right:-2px;bottom:-2px}
#chatRealtimeSub{transition:color .16s ease}

/* V5.1.8 account presence, scroll-stable route preview and irregular tilted doodle wallpaper */
.chat-pane{background:linear-gradient(180deg,#08131f,#07111c)}
.chat-pane:before{
  inset:61px 0 65px;
  background-image:linear-gradient(rgba(7,17,28,.18),rgba(7,17,28,.18)),url('/xchat-doodle.svg');
  background-repeat:repeat;
  background-size:auto,520px 520px;
  background-position:0 0,-37px -21px;
  opacity:.32;
  mask-image:linear-gradient(to bottom,transparent 0,#000 7%,#000 93%,transparent 100%);
}
.messages{background:transparent}

.mobile-route-stage{position:fixed;z-index:220;inset:0;overflow:hidden;background:#08131f;pointer-events:none;contain:layout paint style;isolation:isolate}
.mobile-route-under,.mobile-route-front{position:absolute;inset:0;overflow:hidden;will-change:transform,opacity;backface-visibility:hidden;transform:translateZ(0)}
.mobile-route-under{z-index:1;background:#08131f}
.mobile-route-front{z-index:3;background:#08131f;box-shadow:-14px 0 34px rgba(0,0,0,.38)}
.mobile-route-shade{position:absolute;z-index:2;inset:0;background:#000;pointer-events:none;will-change:opacity}
.mobile-route-edge{position:absolute;left:-1px;top:0;bottom:0;width:18px;background:linear-gradient(90deg,rgba(0,0,0,.32),rgba(0,0,0,0));opacity:.58;pointer-events:none}
.mobile-route-stage .list-pane,.mobile-route-stage .chat-pane,.mobile-route-stage .content-pane{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;display:flex!important;transform:none!important;animation:none!important}
.mobile-route-stage .list-pane{border:0!important}
.mobile-route-stage .mobile-bottom-nav{display:none!important}
.mobile-route-stage .chat-pane:before{inset:61px 0 65px}
body.mobile-route-active{touch-action:none;overscroll-behavior:none}
@media(max-width:760px){
  .chat-pane:before{background-size:auto,460px 460px;background-position:0 0,-54px -28px;opacity:.34}
  .mobile-route-stage{height:var(--xchat-app-height,100dvh)}
}
.mobile-route-stage .mobile-route-under>.list-pane{bottom:64px!important;height:auto!important}
.mobile-route-stage .mobile-route-nav{display:grid!important;position:absolute!important;left:0!important;right:0!important;bottom:0!important;z-index:5!important}

/* V5.1.9 instant-send + desktop paste/drop */
.msg-status.sending{opacity:.72;animation:xchatSendingPulse 1.1s ease-in-out infinite}
@keyframes xchatSendingPulse{0%,100%{opacity:.42;transform:scale(.94)}50%{opacity:1;transform:scale(1.08)}}
.pending-inline-image{position:relative;pointer-events:none}
.pending-inline-image img{display:block;width:100%;height:auto;max-height:420px;object-fit:contain;filter:saturate(.92)}
.attachment-pending-badge{position:absolute;right:9px;bottom:9px;padding:4px 8px;border-radius:999px;background:rgba(3,13,24,.78);backdrop-filter:blur(10px);color:#dbeeff;font-size:10px;font-weight:700;letter-spacing:.02em;box-shadow:0 2px 12px rgba(0,0,0,.22)}
.pending-file-card{cursor:default;pointer-events:none;opacity:.92}
.attachment-pending-spinner{width:17px;height:17px;border-radius:50%;border:2px solid rgba(167,207,242,.22);border-top-color:#8fc7f5;animation:xchatAttachmentSpin .78s linear infinite;flex:0 0 auto}
.attachment-action-loading{cursor:wait!important;opacity:.72}.attachment-action-loading .attachment-download{display:none}.attachment-action-spinner{margin-left:auto}
@keyframes xchatAttachmentSpin{to{transform:rotate(360deg)}}
.desktop-drop-overlay{position:fixed;inset:0;z-index:9998;display:flex;align-items:center;justify-content:center;padding:28px;background:rgba(2,10,18,.48);backdrop-filter:blur(4px);opacity:0;pointer-events:none;transition:opacity .16s ease}
.desktop-drop-overlay.show{opacity:1}
.desktop-drop-overlay>div{min-width:300px;display:flex;flex-direction:column;align-items:center;gap:8px;padding:28px 34px;border-radius:20px;border:1px solid rgba(112,181,238,.28);background:rgba(10,27,44,.94);box-shadow:0 20px 70px rgba(0,0,0,.38),inset 0 1px 0 rgba(255,255,255,.04);color:#dceeff}
.desktop-drop-overlay .icon{width:32px;height:32px;color:#65b7f5;margin-bottom:3px}
.desktop-drop-overlay strong{font-size:16px}
.desktop-drop-overlay span{font-size:12px;color:#8da9c3}

/* V5.2.0 composer attachment drafts + mobile keyboard anchor */
.composer:has(.composer-draft-attachments){height:auto;min-height:72px;align-items:flex-end}
.composer-draft-attachments{min-width:0;display:flex;flex-direction:column;gap:6px;padding:7px 8px;border:1px solid rgba(91,153,221,.16);border-radius:12px;background:linear-gradient(180deg,rgba(14,31,50,.96),rgba(9,22,36,.96));box-shadow:inset 0 1px 0 rgba(255,255,255,.025)}
.composer-draft-meta{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 2px;color:#89a9c8;font-size:9px;font-weight:760}.composer-draft-meta small{color:#58728e;font-size:8px;font-weight:600}
.composer-draft-strip{display:flex;align-items:stretch;gap:7px;overflow-x:auto;overflow-y:hidden;padding:1px 1px 3px;scrollbar-width:thin;scrollbar-color:rgba(98,155,216,.3) transparent}
.composer-draft-item{position:relative;flex:none;border:1px solid rgba(103,158,217,.17);background:#0b1a2b;border-radius:10px;overflow:hidden;box-shadow:0 4px 14px rgba(0,0,0,.12)}
.composer-draft-item.image{width:58px;height:58px}.composer-draft-item.image img{display:block;width:100%;height:100%;object-fit:cover}
.composer-draft-item.file{width:184px;height:58px;display:flex;align-items:center;gap:8px;padding:8px 30px 8px 9px}.draft-file-icon{width:31px;height:31px;border-radius:9px;display:grid;place-items:center;flex:none;background:rgba(74,145,231,.11);color:#70abef}.draft-file-copy{min-width:0;display:flex;flex:1;flex-direction:column;gap:3px}.draft-file-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#dce9f7;font-size:10px}.draft-file-copy small{color:#657f9c;font-size:8px}
.composer-draft-item>button{position:absolute;right:4px;top:4px;width:21px;height:21px;border-radius:50%;display:grid;place-items:center;border:1px solid rgba(255,255,255,.08);background:rgba(2,10,18,.78);backdrop-filter:blur(8px);color:#d9e6f4;font-size:14px;line-height:1;box-shadow:0 2px 8px rgba(0,0,0,.25)}.composer-draft-item>button:hover{background:#c94d61;color:#fff}
.compact-action small{display:block;margin-top:2px;color:#6f88a4;font-size:9px;font-weight:600}
@media(max-width:760px){.composer-draft-attachments{padding:6px;border-radius:11px}.composer-draft-item.image{width:54px;height:54px}.composer-draft-item.file{width:160px;height:54px}.composer-draft-meta small{display:none}}

/* V5.3.0 mobile section navigation and camera capture */
.mobile-section-enter-next{animation:mobileSectionEnterNext .3s cubic-bezier(.22,.8,.22,1) both}
.mobile-section-enter-prev{animation:mobileSectionEnterPrev .3s cubic-bezier(.22,.8,.22,1) both}
@keyframes mobileSectionEnterNext{from{opacity:.72;transform:translate3d(24px,0,0)}to{opacity:1;transform:none}}
@keyframes mobileSectionEnterPrev{from{opacity:.72;transform:translate3d(-24px,0,0)}to{opacity:1;transform:none}}
.compact-action-grid.three{grid-template-columns:repeat(3,minmax(0,1fr))}
.camera-capture-body{padding:12px 17px 8px;text-align:center}
.camera-capture-frame{position:relative;display:grid;place-items:center;overflow:hidden;min-height:260px;max-height:62vh;aspect-ratio:3/4;border:1px solid rgba(116,170,225,.2);border-radius:15px;background:#03080e}
.camera-capture-frame video,.camera-capture-frame img{display:block;width:100%;height:100%;object-fit:cover}
.camera-capture-frame img{object-fit:contain;background:#03080e}
.camera-capture-placeholder{position:absolute;inset:0;display:grid;place-items:center;padding:18px;color:#91a8c1;font-size:11px;line-height:1.6;text-align:center;background:radial-gradient(circle,rgba(25,56,91,.48),rgba(2,8,14,.94))}
.camera-capture-note{min-height:17px;margin:10px 0 0;color:#7188a3;font-size:10px;line-height:1.5}
.camera-capture-actions{align-items:center}
@media(max-width:760px){.compact-action-grid.three{gap:5px}.camera-capture-body{padding:10px 14px 6px}.camera-capture-frame{width:100%;min-height:0;max-height:52vh}.camera-capture-actions{padding-bottom:max(14px,env(safe-area-inset-bottom))}}

/* V5.4.0: the chat surface owns the full mobile viewport; section navigation
   belongs to the list/content surface only. */
@media(max-width:760px){
  .app-shell.mobile-chat .mobile-bottom-nav{display:none!important}
  .app-shell.mobile-chat .chat-pane{inset:0!important;height:auto!important;min-height:0}
  .app-shell.mobile-chat .mobile-back{display:grid!important;flex:none}
}

/* V5.9.6 mobile polish: centered avatars, softer TG-like chat wallpaper, font scale, auth keyboard safe area */
:root,:root[data-font-size="normal"]{--xchat-bubble-size:13px;--xchat-name-size:13px;--xchat-preview-size:11px;--xchat-setting-title-size:12px;--xchat-setting-sub-size:10px;--xchat-chat-title-size:13px;--xchat-chat-sub-size:10px;--xchat-input-size:16px}
:root[data-font-size="small"]{--xchat-bubble-size:12px;--xchat-name-size:12px;--xchat-preview-size:10px;--xchat-setting-title-size:11px;--xchat-setting-sub-size:9px;--xchat-chat-title-size:12px;--xchat-chat-sub-size:9px;--xchat-input-size:15px}
:root[data-font-size="large"]{--xchat-bubble-size:15px;--xchat-name-size:15px;--xchat-preview-size:13px;--xchat-setting-title-size:14px;--xchat-setting-sub-size:12px;--xchat-chat-title-size:15px;--xchat-chat-sub-size:12px;--xchat-input-size:18px}
:root[data-font-size="xlarge"]{--xchat-bubble-size:17px;--xchat-name-size:17px;--xchat-preview-size:15px;--xchat-setting-title-size:16px;--xchat-setting-sub-size:14px;--xchat-chat-title-size:17px;--xchat-chat-sub-size:14px;--xchat-input-size:20px}
.bubble{font-size:var(--xchat-bubble-size)}
.conv-name,.contact-row strong{font-size:var(--xchat-name-size)}
.conv-preview,.contact-row span{font-size:var(--xchat-preview-size)}
.setting-row strong{font-size:var(--xchat-setting-title-size)}
.setting-row span,.setting-row small{font-size:var(--xchat-setting-sub-size)}
.chat-title{font-size:var(--xchat-chat-title-size)}
.chat-sub{font-size:var(--xchat-chat-sub-size)}
.composer-box textarea,.composer-box input{font-size:var(--xchat-input-size)}
.avatar{display:inline-flex!important;align-items:center!important;justify-content:center!important;text-align:center!important;line-height:1!important;padding:0!important}
.avatar img{display:block}
.contact-row .avatar,.member-row .avatar,.lookup-card .avatar,.conv-avatar-wrap .avatar,.chat-avatar-wrap .avatar{line-height:1!important;transform:none!important}
.contact-avatar-wrap,.conv-avatar-wrap,.chat-avatar-wrap{align-items:center!important;justify-content:center!important}
.font-size-choice{display:flex!important;align-items:center;justify-content:flex-end;gap:6px;flex-wrap:wrap}
.chat-pane{background:
  radial-gradient(circle at 8% 12%,rgba(69,154,255,.13),transparent 28%),
  radial-gradient(circle at 88% 86%,rgba(76,220,174,.09),transparent 32%),
  linear-gradient(180deg,#091726,#07131f)}
.chat-pane:before{
  inset:68px 0 70px;
  opacity:.52;
  background-image:
    linear-gradient(rgba(7,17,28,.08),rgba(7,17,28,.08)),
    radial-gradient(circle at 20px 20px,rgba(105,177,255,.22) 0 1.1px,transparent 1.5px),
    radial-gradient(circle at 74px 58px,rgba(96,226,184,.18) 0 1.2px,transparent 1.7px),
    url('/xchat-doodle.svg');
  background-size:auto,96px 96px,132px 132px,420px 420px;
  background-position:0 0,0 0,18px 12px,-38px -28px;
  filter:drop-shadow(0 0 7px rgba(91,169,255,.18));
  mask-image:linear-gradient(to bottom,transparent,#000 9%,#000 90%,transparent)
}
.messages{background:linear-gradient(180deg,rgba(3,10,18,.08),rgba(3,10,18,.22))}
@media(max-width:760px){
  .auth-screen{align-items:start;place-items:start center;padding:calc(18px + env(safe-area-inset-top)) 24px calc(280px + env(safe-area-inset-bottom));scroll-padding-bottom:320px}
  .auth-card{margin:0 auto 24px}
  .auth-screen:focus-within{place-items:start center}
  .auth-screen input:focus{scroll-margin-bottom:320px}
  .chat-pane:before{background-size:auto,92px 92px,128px 128px,390px 390px;background-position:0 0,0 0,18px 12px,-48px -32px;opacity:.46}
}
.mobile-route-stage.slide-left .mobile-route-front{box-shadow:14px 0 34px rgba(0,0,0,.38)}

/* V5.9.0 mobile conversation polish */
.chat-pane.chat-history-pending{position:relative}
.chat-pane.chat-history-pending .messages,.chat-pane.chat-history-pending .composer{visibility:hidden}
.chat-pane.chat-history-pending::after{content:"";position:absolute;left:50%;top:50%;width:22px;height:22px;margin:-11px 0 0 -11px;border:2px solid rgba(105,164,226,.23);border-top-color:#6ba8ee;border-radius:50%;animation:xchatSpin .72s linear infinite;pointer-events:none}
@keyframes xchatSpin{to{transform:rotate(360deg)}}
body.chat-action-swipe-active .chat-pane{transform:translate3d(calc(var(--chat-action-progress,0) * -24px),0,0);transition:none}
.remark-modal{max-height:calc(var(--xchat-app-height,100dvh) - 16px);scroll-padding-bottom:24px}
.remark-modal .modal-body{padding-bottom:max(18px,env(safe-area-inset-bottom))}
.member-row .avatar-hit{align-items:center;justify-content:center;vertical-align:middle;line-height:1}
.member-row .avatar-hit .avatar{line-height:1;transform:translateY(1px)}
.group-manage .member-row .avatar-hit{display:flex;align-items:center;justify-content:center;line-height:0;vertical-align:middle}
.group-manage .member-row .avatar-hit .avatar{display:flex;align-items:center;justify-content:center;line-height:1;padding-top:2px;box-sizing:border-box;transform:none}
@media(max-width:760px){
  .conv-swipe-shell{--swipe-offset:0px;touch-action:pan-y}
  .conv-swipe-shell .conv-row{transform:translate3d(var(--swipe-offset),0,0);transition:transform .28s cubic-bezier(.22,.8,.22,1),background .15s}
  .conv-swipe-shell.swipe-dragging .conv-row{transition:none}
  .conv-swipe-shell.swipe-open .conv-row{transform:translate3d(-132px,0,0)!important}
  .conv-swipe-actions{display:grid!important;width:132px!important}
  .remark-modal{max-height:calc(var(--xchat-app-height,100dvh) - 8px);overflow:auto}
}

/* V5.9.7 mobile safe-area / iOS keyboard registration fixes */
@media(max-width:760px){
  .pane-head,.chat-head,.content-head{
    height:calc(61px + env(safe-area-inset-top))!important;
    padding-top:env(safe-area-inset-top)!important;
    box-sizing:border-box;
    align-items:center;
  }
  .list-scroll,.messages,.content-body{
    scroll-padding-top:calc(74px + env(safe-area-inset-top));
  }
  .account-banner{
    top:calc(8px + env(safe-area-inset-top))!important;
  }
  .auth-screen{
    height:var(--xchat-app-height,100dvh)!important;
    min-height:var(--xchat-app-height,100dvh)!important;
    overflow:auto!important;
    -webkit-overflow-scrolling:touch;
    place-items:start center!important;
    align-items:start!important;
    padding:calc(18px + env(safe-area-inset-top)) 24px calc(360px + env(safe-area-inset-bottom))!important;
    scroll-padding-top:calc(24px + env(safe-area-inset-top));
    scroll-padding-bottom:380px;
  }
  body.auth-focused .auth-screen{
    padding-bottom:calc(460px + env(safe-area-inset-bottom))!important;
  }
  .auth-card{
    margin:0 auto 32px!important;
  }
  .auth-screen input:focus,.auth-screen textarea:focus,.auth-screen select:focus{
    scroll-margin-top:calc(96px + env(safe-area-inset-top));
    scroll-margin-bottom:420px;
  }
  [data-group-invite-plus].profile-action{
    width:62px;
  }
}

/* V5.9.8: keep mobile chat composer pinned to the real bottom on iOS variants */
@media(max-width:760px){
  .app-shell.mobile-chat,.app-shell.mobile-chat .chat-pane{
    height:var(--xchat-app-height,100dvh)!important;
    min-height:0!important;
  }
  .app-shell.mobile-chat .chat-pane{
    inset:0!important;
    grid-template-rows:calc(61px + env(safe-area-inset-top)) minmax(0,1fr) auto!important;
  }
  body:not(.composer-focused) .app-shell.mobile-chat .composer{
    padding-bottom:max(8px,env(safe-area-inset-bottom))!important;
  }
}

/* V5.9.9: iPhone chat width fit + keyboard-open plane send paint guard */
@media(max-width:760px){
  body.mobile-plane-sending{
    position:static!important;
    overflow:hidden!important;
  }
  body.mobile-plane-sending #root,
  body.mobile-plane-sending .app-shell.mobile-chat{
    height:var(--xchat-app-height,100dvh)!important;
  }
  .app-shell.mobile-chat .chat-head{
    width:100%;
    max-width:100vw;
    overflow:hidden;
    gap:8px;
    padding-left:max(10px,env(safe-area-inset-left))!important;
    padding-right:max(8px,env(safe-area-inset-right))!important;
  }
  .app-shell.mobile-chat .chat-avatar-wrap{
    flex:0 0 auto;
  }
  .app-shell.mobile-chat .chat-head-info{
    flex:1 1 auto;
    min-width:0;
    overflow:hidden;
  }
  .app-shell.mobile-chat .chat-actions{
    flex:0 0 auto;
    display:flex;
    align-items:center;
    justify-content:flex-end;
    gap:0;
    max-width:92px;
  }
  .app-shell.mobile-chat .chat-actions .mobile-collapse-action{
    display:none!important;
  }
  .app-shell.mobile-chat .chat-actions .icon-btn{
    width:38px;
    height:38px;
    flex:0 0 38px;
  }
  .app-shell.mobile-chat .composer{
    left:0!important;
    right:0!important;
    width:100%!important;
    max-width:100vw!important;
    overflow:hidden;
    box-sizing:border-box;
    padding-left:max(8px,env(safe-area-inset-left))!important;
    padding-right:max(8px,env(safe-area-inset-right))!important;
  }
  .app-shell.mobile-chat .composer-stack{
    flex:1 1 auto;
    min-width:0;
    overflow:hidden;
  }
  .app-shell.mobile-chat .composer-attach{
    flex:0 0 38px;
    width:38px;
  }
  .app-shell.mobile-chat .send-btn{
    flex:0 0 52px;
    width:52px;
    height:52px;
    margin-right:0!important;
  }
}

/* V5.9.10: hard mobile chat viewport fit for iOS keyboard/safe-area variants */
@media(max-width:760px){
  html,body,#root{
    width:100%;
    max-width:100vw;
    min-height:var(--xchat-real-height,100dvh);
    overflow-x:hidden!important;
  }
  .app-shell.mobile-chat{
    position:fixed!important;
    inset:0!important;
    width:100vw!important;
    max-width:100vw!important;
    height:var(--xchat-app-height,100dvh)!important;
    min-height:var(--xchat-app-height,100dvh)!important;
    padding:0!important;
    overflow:hidden!important;
  }
  .app-shell.mobile-chat .chat-pane{
    position:fixed!important;
    inset:0!important;
    width:100vw!important;
    max-width:100vw!important;
    height:var(--xchat-app-height,100dvh)!important;
    min-height:0!important;
    display:grid!important;
    grid-template-rows:calc(61px + env(safe-area-inset-top)) minmax(0,1fr) auto!important;
    overflow:hidden!important;
    transform:none;
  }
  .app-shell.mobile-chat .messages{
    min-height:0!important;
    height:auto!important;
    overflow:auto!important;
    padding-left:max(10px,env(safe-area-inset-left))!important;
    padding-right:max(10px,env(safe-area-inset-right))!important;
    padding-bottom:12px!important;
  }
  .app-shell.mobile-chat .composer{
    position:relative!important;
    left:auto!important;
    right:auto!important;
    bottom:auto!important;
    transform:none!important;
    width:100vw!important;
    max-width:100vw!important;
    margin:0!important;
    box-sizing:border-box!important;
    padding:8px max(8px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-left))!important;
  }
  body.composer-focused .app-shell.mobile-chat .composer{
    padding-bottom:8px!important;
  }
  .app-shell.mobile-chat .chat-actions [data-action="chat-search"],
  .app-shell.mobile-chat .chat-actions [data-action="media-overview"],
  .app-shell.mobile-chat .chat-actions [data-action="details"],
  .app-shell.mobile-chat .chat-actions .mobile-collapse-action{
    display:none!important;
  }
  .app-shell.mobile-chat .chat-actions{
    flex:0 0 auto!important;
    max-width:92px!important;
    overflow:hidden!important;
  }
  .app-shell.mobile-chat .chat-head{
    min-width:0!important;
  }
  .app-shell.mobile-chat .chat-head-info{
    min-width:0!important;
  }
  body.mobile-plane-sending .app-shell.mobile-chat .composer,
  body.mobile-plane-sending .app-shell.mobile-chat .chat-pane{
    transition:none!important;
  }
}

/* V5.9.11: final mobile shell pin + visible @ popup */
@media(max-width:760px){
  html,body,#root{
    width:100vw!important;
    max-width:100vw!important;
    height:100dvh!important;
    min-height:100dvh!important;
    margin:0!important;
    overflow:hidden!important;
    overscroll-behavior:none!important;
  }
  @supports(height:100lvh){
    html,body,#root{
      height:100lvh!important;
      min-height:100lvh!important;
    }
  }
  .app-shell{
    position:fixed!important;
    left:0!important;
    right:0!important;
    top:0!important;
    bottom:0!important;
    width:100vw!important;
    max-width:100vw!important;
    height:100dvh!important;
    min-height:100dvh!important;
    overflow:hidden!important;
    transform:none!important;
  }
  @supports(height:100lvh){
    .app-shell{
      height:100lvh!important;
      min-height:100lvh!important;
    }
  }
  .app-shell:not(.mobile-chat):not(.mobile-content){
    padding-bottom:calc(64px + env(safe-area-inset-bottom))!important;
  }
  .app-shell:not(.mobile-chat):not(.mobile-content) .list-pane{
    position:absolute!important;
    inset:0 0 calc(64px + env(safe-area-inset-bottom)) 0!important;
    height:auto!important;
    min-height:0!important;
  }
  .app-shell:not(.mobile-chat):not(.mobile-content) .list-scroll{
    min-height:0!important;
    padding-bottom:14px!important;
  }
  .mobile-bottom-nav{
    position:fixed!important;
    left:0!important;
    right:0!important;
    bottom:0!important;
    width:100vw!important;
    height:calc(64px + env(safe-area-inset-bottom))!important;
    box-sizing:border-box!important;
    padding-bottom:env(safe-area-inset-bottom)!important;
    transform:none!important;
  }
  body:not(.composer-focused) .app-shell.mobile-chat,
  body:not(.composer-focused) .app-shell.mobile-chat .chat-pane{
    height:100dvh!important;
    min-height:100dvh!important;
  }
  @supports(height:100lvh){
    body:not(.composer-focused) .app-shell.mobile-chat,
    body:not(.composer-focused) .app-shell.mobile-chat .chat-pane{
      height:100lvh!important;
      min-height:100lvh!important;
    }
  }
  body.composer-focused .app-shell.mobile-chat,
  body.composer-focused .app-shell.mobile-chat .chat-pane{
    height:var(--xchat-app-height,100dvh)!important;
    min-height:var(--xchat-app-height,100dvh)!important;
  }
  .app-shell.mobile-chat .composer,
  .app-shell.mobile-chat .composer-stack{
    overflow:visible!important;
  }
  .app-shell.mobile-chat .mention-suggest{
    position:fixed!important;
    left:max(10px,env(safe-area-inset-left))!important;
    right:max(10px,env(safe-area-inset-right))!important;
    bottom:calc(76px + env(safe-area-inset-bottom))!important;
    z-index:220!important;
    max-height:min(240px,38dvh)!important;
  }
  body.composer-focused .app-shell.mobile-chat .mention-suggest{
    bottom:76px!important;
  }
  .send-btn{
    touch-action:manipulation!important;
    -webkit-user-select:none!important;
    user-select:none!important;
  }
}

/* V5.9.12: iPhone chat composer safe-bottom fallback */
@media(max-width:760px){
  body:not(.composer-focused) .app-shell.mobile-chat,
  body:not(.composer-focused) .app-shell.mobile-chat .chat-pane{
    height:100dvh!important;
    min-height:100dvh!important;
  }
  .app-shell.mobile-chat .chat-pane{
    grid-template-rows:calc(61px + env(safe-area-inset-top)) minmax(0,1fr) auto!important;
  }
  .app-shell.mobile-chat .composer{
    min-height:calc(74px + max(18px,env(safe-area-inset-bottom)))!important;
    height:auto!important;
    padding-top:8px!important;
    padding-bottom:max(18px,env(safe-area-inset-bottom))!important;
    align-items:flex-start!important;
  }
  body.composer-focused .app-shell.mobile-chat .composer{
    min-height:74px!important;
    padding-bottom:10px!important;
  }
  .app-shell.mobile-chat .messages{
    padding-bottom:16px!important;
  }
  .mobile-send-ghost{
    pointer-events:none;
    opacity:.92;
  }
}

/* V5.9.13: mobile conversation row text layout */
@media(max-width:760px){
  .conv-row{
    height:72px!important;
    align-items:center!important;
  }
  .conv-main{
    display:grid!important;
    grid-template-rows:auto auto!important;
    gap:4px!important;
    min-width:0!important;
  }
  .conv-top{
    min-width:0!important;
    width:100%!important;
    display:flex!important;
    align-items:center!important;
    gap:6px!important;
  }
  .conv-bottom{
    min-width:0!important;
    width:100%!important;
    display:flex!important;
    align-items:center!important;
    gap:6px!important;
    grid-row:2!important;
  }
  .conv-name{
    display:block!important;
    flex:1 1 auto!important;
    min-width:0!important;
    max-width:100%!important;
    overflow:hidden!important;
    text-overflow:ellipsis!important;
    white-space:nowrap!important;
  }
  .conv-preview{
    display:block!important;
    flex:1 1 auto!important;
    min-width:0!important;
    max-width:100%!important;
    margin-top:0!important;
    overflow:hidden!important;
    text-overflow:ellipsis!important;
    white-space:nowrap!important;
  }
  .conv-time{
    flex:0 0 auto!important;
    margin-left:auto!important;
  }
  .group-kind-badge,.pin-mark{
    flex:0 0 auto!important;
  }
  .mobile-send-ghost.message-enter{
    animation:none!important;
  }
}

/* V5.9.15: TG-like group incoming message layout.
   Avatar stays on the left; sender name sits above the bubble instead of being
   squeezed into the same horizontal row as the message body. */
.message-row:not(.mine) .bubble-wrap:has(.group-sender-label){
  display:grid;
  grid-template-columns:minmax(0,auto) 26px;
  grid-template-rows:auto auto;
  align-items:end;
  column-gap:5px;
  row-gap:3px;
}
.message-row:not(.mine) .bubble-wrap:has(.group-sender-label) .group-sender-label{
  grid-column:1;
  grid-row:1;
  max-width:min(260px,72vw);
  margin:0 0 1px 7px;
  color:#68b0ff;
  font-size:12px;
  line-height:1.15;
  font-weight:760;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.message-row:not(.mine) .bubble-wrap:has(.group-sender-label) .bubble{
  grid-column:1;
  grid-row:2;
  max-width:100%;
}
.message-row:not(.mine) .bubble-wrap:has(.group-sender-label) .message-more{
  grid-column:2;
  grid-row:2;
  align-self:end;
}
@media(max-width:760px){
  .message-row:not(.mine) .bubble-wrap:has(.group-sender-label){
    max-width:88%;
    grid-template-columns:minmax(0,1fr) 26px;
  }
  .message-row:not(.mine) .bubble-wrap:has(.group-sender-label) .group-sender-label{
    max-width:62vw;
    font-size:11px;
  }
}

/* V5.9.16: sender name is inside the incoming group bubble, TG style. */
.message-row:not(.mine) .bubble-wrap.group-incoming-wrap,
.message-row:not(.mine) .bubble-wrap:has(.group-sender-label.in-bubble){
  display:flex;
  align-items:flex-end;
  gap:5px;
  max-width:min(76%,650px);
}
.message-row:not(.mine) .bubble-wrap.group-incoming-wrap .bubble,
.message-row:not(.mine) .bubble-wrap:has(.group-sender-label.in-bubble) .bubble{
  position:relative;
  border-radius:5px 14px 14px 14px;
  background:linear-gradient(180deg,rgba(19,37,58,.98),rgba(16,32,51,.98));
  border-color:rgba(111,154,204,.08);
  box-shadow:0 4px 16px rgba(0,0,0,.08);
}
.message-row:not(.mine) .bubble-wrap.group-incoming-wrap .bubble:before,
.message-row:not(.mine) .bubble-wrap:has(.group-sender-label.in-bubble) .bubble:before{
  content:"";
  position:absolute;
  left:-6px;
  top:0;
  width:10px;
  height:12px;
  background:linear-gradient(180deg,rgba(19,37,58,.98),rgba(17,34,53,.98));
  clip-path:polygon(100% 0,100% 100%,0 0);
}
.bubble .group-sender-label.in-bubble{
  display:block;
  max-width:260px;
  margin:0 0 3px;
  color:#63b6ff;
  font-size:12px;
  line-height:1.2;
  font-weight:820;
  letter-spacing:.01em;
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.bubble .group-sender-label.in-bubble + .bubble-text{
  display:block;
  color:#dce6f3;
}
@media(max-width:760px){
  .message-row:not(.mine) .bubble-wrap.group-incoming-wrap,
  .message-row:not(.mine) .bubble-wrap:has(.group-sender-label.in-bubble){
    max-width:88%;
  }
  .bubble .group-sender-label.in-bubble{
    max-width:58vw;
    font-size:11px;
  }
}

/* V5.9.17: desktop-only chat edge alignment.
   Mobile spacing is already good, so keep this strictly above the phone
   breakpoint. */
@media(min-width:761px){
  .app-shell{
    height:100vh!important;
    max-height:100vh!important;
    min-height:0!important;
    overflow:hidden!important;
  }
  .list-pane,
  .chat-pane,
  .detail-pane,
  .content-pane{
    min-height:0!important;
    max-height:100vh!important;
  }
  .chat-pane{
    height:100%!important;
    overflow:hidden!important;
    display:flex!important;
    flex-direction:column!important;
  }
  .chat-pane>.chat-head{
    flex:0 0 67px!important;
  }
  .chat-pane>.messages{
    flex:1 1 auto!important;
    min-height:0!important;
    overflow:auto!important;
  }
  .chat-pane>.composer{
    flex:0 0 auto!important;
    position:relative!important;
    inset:auto!important;
    bottom:auto!important;
  }
  .detail-pane,
  .content-body{
    min-height:0!important;
  }
  .messages{
    padding-left:18px!important;
    padding-right:18px!important;
  }
  .message-row{
    width:100%;
  }
  .message-row.mine{
    justify-content:flex-end;
  }
  .message-row:not(.mine){
    justify-content:flex-start;
  }
  .message-row:not(.mine)>.avatar-hit{
    margin-left:0;
  }
  .message-row:not(.mine)>.avatar-hit .avatar.xs{
    width:36px!important;
    height:36px!important;
    min-width:36px!important;
    font-size:13px!important;
  }
  .message-row:not(.mine) .bubble-wrap.group-incoming-wrap{
    max-width:min(72%,650px);
  }
}

/* V5.9.21: Android WebView keyboard resize.  Android native APK uses
   adjustResize; when a field is focused, do not keep the shell at the large
   viewport height or the keyboard will cover inputs/modals. */
@media(max-width:760px){
  body.android-native.keyboard-focused #root,
  body.android-native.keyboard-focused .app-shell,
  body.android-native.keyboard-focused .app-shell.mobile-chat,
  body.android-native.keyboard-focused .app-shell.mobile-chat .chat-pane,
  body.android-native.keyboard-focused .app-shell.mobile-content,
  body.android-native.keyboard-focused .app-shell.mobile-content .content-pane{
    height:var(--xchat-app-height,100dvh)!important;
    min-height:var(--xchat-app-height,100dvh)!important;
  }
  body.android-native.keyboard-focused .app-shell.mobile-chat .chat-pane{
    grid-template-rows:calc(61px + env(safe-area-inset-top)) minmax(0,1fr) auto!important;
  }
  body.android-native.keyboard-focused .app-shell.mobile-chat .composer{
    min-height:66px!important;
    padding-bottom:8px!important;
  }
  body.android-native.keyboard-focused .modal-layer{
    height:var(--xchat-app-height,100dvh)!important;
    align-items:flex-end!important;
  }
  body.android-native.keyboard-focused .modal{
    max-height:calc(var(--xchat-app-height,100dvh) - 18px)!important;
  }
  body.android-native.keyboard-focused .modal-body{
    max-height:calc(var(--xchat-app-height,100dvh) - 118px)!important;
    overflow:auto!important;
  }
}

/* V5.9.22: unified mobile keyboard viewport.  This final layer wins over
   older 100lvh/100dvh patches so the last message stays above the composer
   while the soft keyboard is open. */
@media(max-width:760px){
  body.keyboard-focused #root,
  body.keyboard-focused .app-shell.mobile-chat,
  body.keyboard-focused .app-shell.mobile-chat .chat-pane{
    height:var(--xchat-app-height,100dvh)!important;
    min-height:var(--xchat-app-height,100dvh)!important;
    max-height:var(--xchat-app-height,100dvh)!important;
  }
  body.keyboard-focused:not(.android-native) #root{
    position:fixed!important;
    left:0!important;
    right:0!important;
    top:var(--xchat-vv-top,0px)!important;
    overflow:hidden!important;
  }
  body.keyboard-focused .app-shell.mobile-chat .chat-pane{
    display:grid!important;
    grid-template-rows:calc(61px + env(safe-area-inset-top)) minmax(0,1fr) auto!important;
    overflow:hidden!important;
  }
  body.keyboard-focused .app-shell.mobile-chat .messages{
    min-height:0!important;
    overflow:auto!important;
    padding-bottom:10px!important;
    scroll-padding-bottom:12px!important;
  }
  body.keyboard-focused .app-shell.mobile-chat .composer{
    min-height:66px!important;
    padding-top:8px!important;
    padding-bottom:8px!important;
    flex:none!important;
  }
}

/* V5.9.23: Android native WebView IME bridge.  Some Android keyboards do not
   resize visualViewport reliably, so the native shell reports the keyboard
   inset and the composer is lifted above it only inside the Android app. */
@media(max-width:760px){
  body.android-native.android-ime-open #root,
  body.android-native.android-ime-open .app-shell.mobile-chat,
  body.android-native.android-ime-open .app-shell.mobile-chat .chat-pane{
    height:100vh!important;
    min-height:100vh!important;
    max-height:100vh!important;
  }
  body.android-native.android-ime-open .app-shell.mobile-chat .chat-pane{
    display:grid!important;
    grid-template-rows:calc(61px + env(safe-area-inset-top)) minmax(0,1fr)!important;
    overflow:hidden!important;
  }
  body.android-native.android-ime-open .app-shell.mobile-chat .messages{
    min-height:0!important;
    overflow:auto!important;
    padding-bottom:calc(88px + var(--android-keyboard-inset,0px))!important;
    scroll-padding-bottom:calc(88px + var(--android-keyboard-inset,0px))!important;
  }
  body.android-native.android-ime-open .app-shell.mobile-chat .composer{
    position:fixed!important;
    left:0!important;
    right:0!important;
    bottom:var(--android-keyboard-inset,0px)!important;
    width:100vw!important;
    z-index:260!important;
    min-height:66px!important;
    padding:8px 10px!important;
    background:rgba(8,18,30,.985)!important;
    border-top:1px solid var(--line)!important;
    transform:translateZ(0)!important;
  }
  body.android-native.android-ime-open .app-shell.mobile-chat .mention-suggest{
    bottom:calc(var(--android-keyboard-inset,0px) + 76px)!important;
  }
}

/* V5.9.24: mobile modal/search input keyboard anchoring.  Keep add-friend,
   join-group, remark and chat-search sheets above Android IME without page
   scroll bouncing. */
@media(max-width:760px){
  body.modal-input-focused .modal-layer{
    align-items:flex-end!important;
    justify-items:stretch!important;
  }
  body.android-native.android-ime-open.modal-input-focused .modal-layer{
    height:100vh!important;
    padding:0 0 calc(var(--android-keyboard-inset,0px) + 8px)!important;
    overflow:hidden!important;
    box-sizing:border-box!important;
  }
  body.android-native.android-ime-open.modal-input-focused .modal{
    width:100%!important;
    max-height:calc(100vh - var(--android-keyboard-inset,0px) - 12px)!important;
    border-radius:18px 18px 0 0!important;
    overflow:hidden!important;
    display:flex!important;
    flex-direction:column!important;
    transform:translateZ(0)!important;
  }
  body.android-native.android-ime-open.modal-input-focused .modal-body{
    min-height:0!important;
    max-height:none!important;
    overflow:auto!important;
    -webkit-overflow-scrolling:touch;
    padding-bottom:18px!important;
  }
  body.android-native.android-ime-open.modal-input-focused .modal-actions{
    flex:none!important;
    background:rgba(13,25,40,.98)!important;
    border-top:1px solid var(--line)!important;
    padding-bottom:12px!important;
  }
  body.android-native.android-ime-open.modal-input-focused .chat-search-results,
  body.android-native.android-ime-open.modal-input-focused .member-list,
  body.android-native.android-ime-open.modal-input-focused .member-picker{
    max-height:calc(100vh - var(--android-keyboard-inset,0px) - 190px)!important;
    overflow:auto!important;
  }
  body.android-native.android-ime-open.list-input-focused .list-pane,
  body.android-native.android-ime-open.list-input-focused .content-pane{
    height:100vh!important;
    min-height:100vh!important;
    max-height:100vh!important;
  }
}

/* V5.9.26: iOS PWA auth keyboard stabilization.
   Login/register inputs should scroll inside auth-screen only; the root must
   not be fixed/repositioned by the generic mobile keyboard rule or iOS will
   bounce between visualViewport resize and scrollIntoView. */
@media(max-width:760px){
  body.auth-focused #root{
    position:static!important;
    left:auto!important;
    right:auto!important;
    top:auto!important;
    height:100dvh!important;
    min-height:100dvh!important;
    max-height:none!important;
    overflow:hidden!important;
  }
  body.auth-focused .auth-screen{
    height:100dvh!important;
    min-height:100dvh!important;
    max-height:100dvh!important;
    overflow:auto!important;
    overscroll-behavior:contain!important;
    -webkit-overflow-scrolling:auto!important;
    place-items:start center!important;
    align-items:start!important;
    padding:calc(18px + env(safe-area-inset-top)) 24px calc(210px + env(safe-area-inset-bottom))!important;
    scroll-padding-top:calc(86px + env(safe-area-inset-top))!important;
    scroll-padding-bottom:230px!important;
  }
  body.auth-focused .auth-card{
    animation:none!important;
    transform:none!important;
    margin:0 auto 24px!important;
  }
  body.auth-focused .auth-screen input:focus,
  body.auth-focused .auth-screen textarea:focus,
  body.auth-focused .auth-screen select:focus{
    scroll-margin-top:calc(88px + env(safe-area-inset-top))!important;
    scroll-margin-bottom:220px!important;
  }
}

/* V5.9.29: auth input anti-jitter.
   Login/register fields should not trigger repeated scroll corrections while
   the mobile keyboard is animating. Keep focused and unfocused auth layout
   dimensions identical so Safari/Android WebView do not bounce several times. */
@media(max-width:760px){
  .auth-screen,
  body.auth-focused .auth-screen{
    height:100dvh!important;
    min-height:100dvh!important;
    max-height:100dvh!important;
    overflow:auto!important;
    overscroll-behavior:contain!important;
    -webkit-overflow-scrolling:auto!important;
    place-items:start center!important;
    align-items:start!important;
    padding:calc(18px + env(safe-area-inset-top)) 24px calc(320px + env(safe-area-inset-bottom))!important;
    scroll-padding-top:calc(86px + env(safe-area-inset-top))!important;
    scroll-padding-bottom:340px!important;
    scroll-behavior:auto!important;
  }
  .auth-screen .auth-card,
  body.auth-focused .auth-card{
    animation:none!important;
    transform:none!important;
    transition:none!important;
    margin:0 auto 24px!important;
  }
  .auth-screen input:focus,
  .auth-screen textarea:focus,
  .auth-screen select:focus,
  body.auth-focused .auth-screen input:focus,
  body.auth-focused .auth-screen textarea:focus,
  body.auth-focused .auth-screen select:focus{
    scroll-margin-top:calc(88px + env(safe-area-inset-top))!important;
    scroll-margin-bottom:340px!important;
  }
}
