:root{--paper:#f5f5f1;--ink:#171918;--muted:#838985;--line:#e6e8e4;--green:#35c27d;--green-dark:#166944;--bubble:#fff;--self:#c9f3d9;--danger:#b74444}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;background:#161817;color:var(--ink);font-family:"Source Han Sans SC","Noto Sans CJK SC",sans-serif}
button{font:inherit;color:inherit}
.splash-screen{height:100%;background:linear-gradient(155deg,#f9fffd 0%,#eefaf8 48%,#e8f4ff 100%);display:flex;flex-direction:column;align-items:center;justify-content:center;position:relative;overflow:hidden}
.splash-screen:before,.splash-screen:after{content:'';position:absolute;border-radius:50%;filter:blur(2px);opacity:.42}
.splash-screen:before{width:240px;height:240px;right:-105px;top:-75px;background:#5edbc1}
.splash-screen:after{width:210px;height:210px;left:-110px;bottom:-65px;background:#70b9ff}
.splash-brand{position:relative;z-index:1;text-align:center;transform:translateY(-18px)}
.splash-logo{width:92px;height:92px;margin:0 auto 19px;border-radius:27px;background:linear-gradient(145deg,#2c92f2,#23c9a4);box-shadow:0 18px 38px #2daea43d;position:relative}
.splash-logo span{position:absolute;left:21px;top:23px;width:50px;height:38px;border:5px solid #fff;border-radius:18px}
.splash-logo span:after{content:'';position:absolute;right:4px;bottom:-10px;width:13px;height:13px;border-left:5px solid #fff;transform:rotate(-35deg)}
.splash-logo i{position:absolute;left:42px;top:36px;width:9px;height:9px;border:3px solid #fff;border-radius:50%}
.splash-brand h1{font-size:30px;letter-spacing:.18em;margin:0 0 11px;padding-left:.18em;color:#153a36}
.splash-brand p{margin:0;color:#66827d;font-size:14px;letter-spacing:.08em}
.splash-progress{position:absolute;z-index:1;bottom:48px;width:92px;height:3px;border-radius:3px;background:#d7e8e4;overflow:hidden}
.splash-progress i{display:block;height:100%;width:100%;background:linear-gradient(90deg,#2c92f2,#23c9a4);transform-origin:left;animation:splashProgress 5s linear forwards}
@keyframes splashProgress{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.phone{width:min(100vw,430px);height:min(100dvh,880px);margin:auto;background:var(--paper);display:flex;flex-direction:column;overflow:hidden;position:relative;box-shadow:0 20px 80px #0008}
.statusbar{height:29px;padding:7px 18px 2px;display:flex;justify-content:space-between;font-size:12px;font-weight:700;background:#fafbf8;flex:none}
.app{flex:1;overflow:hidden;position:relative}
.tabs{height:62px;background:#fbfcfa;border-top:1px solid var(--line);display:flex;flex:none}
.tabs button{border:0;background:none;flex:1;font-size:11px;color:#8b918e;padding:6px 0}
.tabs button span{font-size:21px;display:block;line-height:25px}
.tabs button.active{color:var(--green-dark)}
.top{height:58px;padding:10px 16px;display:flex;align-items:center;justify-content:space-between;background:#fafbf8;border-bottom:1px solid var(--line)}
.top h1{font-size:20px;margin:0}
.top .sub{font-size:12px;color:var(--muted);font-weight:400}
.iconbtn,.back{border:0;background:none;font-size:22px;padding:5px}
.list{height:calc(100% - 58px);overflow:auto;background:#fafbf8}
.row{display:flex;gap:12px;padding:12px 14px;background:#fff;border-bottom:1px solid var(--line);cursor:pointer;min-height:70px}
.row:hover{background:#f8faf7}
.avatar{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;flex:none;color:#fff;font-weight:700;background:#77847d}
.avatar.group{background:#5c8079}
.avatar.gray{background:#a8aaa7}
.avatar.su{background:#dd8c87}
.avatar.chen{background:#62758e}
.avatar.tang{background:#ad825c}
.avatar.xu{background:#7b966e}
.avatar.zhou{background:#907892}
.rowmain{min-width:0;flex:1}
.rowline{display:flex;justify-content:space-between;gap:8px}
.rowline .time{flex:none}
.name{font-weight:650}
.time,.preview{font-size:12px;color:var(--muted)}
.preview{margin-top:7px;max-width:calc(100% - 58px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.avatar-wrap{position:relative;display:block;width:46px;height:46px;flex:none}
.avatar-wrap .badge{position:absolute;top:-6px;right:-7px;z-index:1}
.badge{display:grid;place-items:center;background:#e95858;color:white;border:2px solid #fff;border-radius:12px;min-width:20px;height:20px;padding:0 5px;text-align:center;font-size:11px;line-height:1}
.chat{height:100%;display:flex;flex-direction:column;background:#eef0ed}
.chat .top{flex:none}
.chat-title{text-align:center;flex:1}
.chat-title h1{font-size:16px}
.online{font-size:11px;color:var(--muted);margin-top:2px}
.messages{flex:1;overflow:auto;padding:14px 12px 24px}
.stamp{text-align:center;color:#909692;font-size:11px;margin:12px}
.msg{display:flex;gap:7px;margin:9px 0;align-items:flex-start}
.msg.self{justify-content:flex-end}
.miniavatar{width:32px;height:32px;border-radius:9px;display:grid;place-items:center;background:#77847d;color:white;font-size:11px;flex:none}
.bubble{background:var(--bubble);padding:9px 11px;border-radius:4px 14px 14px;max-width:76%;font-size:14px;line-height:1.5;white-space:pre-line;box-shadow:0 1px 1px #0000000b}
.self .bubble{background:var(--self);border-radius:14px 4px 14px 14px}
.speaker{font-size:10px;color:#858b87;margin:0 0 3px 2px}
.system{text-align:center;font-size:11px;color:#777d79;margin:12px auto;background:#e3e6e2;padding:5px 9px;border-radius:10px;width:max-content;max-width:85%}
.media{width:190px;min-height:118px;background:linear-gradient(145deg,#7a7d79,#b6b8b2);border-radius:10px;color:#fff;padding:12px;display:flex;flex-direction:column;justify-content:flex-end;cursor:pointer;position:relative;overflow:hidden}
.media.video{background:#181b1b}
.media.video:before{content:'▶';position:absolute;inset:0;display:grid;place-items:center;font-size:36px;color:#fff9}
.media.key{background:linear-gradient(145deg,#d7d4c9,#8d8d86)}
.media small{opacity:.86}
.file{background:white;border-radius:10px;padding:12px;display:flex;gap:10px;align-items:center;min-width:210px}
.file b{font-size:12px}
.composer{flex:none;background:#fafbf8;border-top:1px solid var(--line);padding:8px}
.choices{display:grid;gap:7px;max-height:190px;overflow:auto}
.choice{border:1px solid #d7ddd8;background:white;border-radius:12px;padding:10px;text-align:left;font-size:13px}
.choice:hover{border-color:var(--green);background:#f4fff8}
.bare-choices{padding:0;background:transparent}
.disabled{opacity:.45;pointer-events:none}
.notice{margin:18px;background:#fff;border-radius:15px;padding:16px;box-shadow:0 2px 14px #0000000a}
.notice h2{font-size:16px;margin:0 0 8px}
.notice p{font-size:13px;color:#626864;line-height:1.6}
.request-card{margin:18px;background:white;padding:20px;border-radius:18px;text-align:center}
.request-card .avatar{margin:auto;width:64px;height:64px;border-radius:20px;font-size:24px}
.request-card h2{margin:12px 0 4px}
.verify{color:#676d69;font-size:14px;line-height:1.8}
.actions{display:flex;gap:10px;margin-top:18px}
.actions button{flex:1;border:0;border-radius:12px;padding:11px}
.primary{background:var(--green);color:white}
.secondary{background:#ecefeb}
.typing{font-size:12px;color:#777;text-align:center;padding:6px}
.modal{position:fixed;inset:0;background:#0b0d0cd9;z-index:9;display:flex;align-items:center;justify-content:center;padding:20px}
.modal.hidden{display:none}
.sheet{width:min(390px,100%);max-height:85vh;overflow:auto;background:#f8f8f5;border-radius:20px;padding:18px}
.sheet h2{margin:0 0 12px}
.sheet button{width:100%;margin-top:8px;border:0;background:#e8ebe7;padding:11px;border-radius:11px}
.explore{height:520px;background:linear-gradient(#d9d3c8,#b8ad9e);border-radius:13px;position:relative;overflow:hidden}
.hotspot{position:absolute;border:2px dashed #ffffff99;background:#ffffff22;color:#fff;border-radius:10px}
.desk{left:8%;bottom:8%;width:45%;height:25%}
.shelf{right:7%;top:12%;width:34%;height:65%}
.bag{left:10%;top:22%;width:27%;height:28%}
.ending{height:100%;background:#080a09;color:#f3f4ef;display:flex;align-items:center;justify-content:center;text-align:center;padding:30px}
.ending .day{letter-spacing:.25em;color:#8c938e}
.ending h1{font-size:25px;margin:17px 0 50px}
.ending p{color:#a6aca8;line-height:2}
.ending button{margin-top:35px;border:1px solid #737873;background:transparent;color:white;border-radius:20px;padding:10px 24px}
.settings{padding:16px}
.me-page{height:calc(100% - 58px);overflow:auto;padding-bottom:28px}
.settings button{width:100%;padding:13px;border:0;background:#fff;border-bottom:1px solid var(--line);text-align:left}
.empty{padding:60px 30px;text-align:center;color:var(--muted)}
.toast{position:absolute;z-index:8;top:34px;left:10px;right:10px;border:0;border-radius:16px;background:#ffffffee;box-shadow:0 8px 28px #0003;padding:10px 12px;text-align:left;display:flex;gap:10px;align-items:center;animation:drop .25s ease}
.toast.hidden{display:none}
.toast.leaving{animation:toastRetract .28s cubic-bezier(.55,.05,.85,.35) forwards;pointer-events:none}
.toast b{display:block;font-size:13px}
.toast small{display:block;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:300px}
@keyframes drop{from{transform:translateY(-15px);opacity:0}
}
@keyframes toastRetract{from{transform:translateY(0);opacity:1}to{transform:translateY(calc(-100% - 14px));opacity:0}}
.msg>div:not(.miniavatar){max-width:76%}
.msg.self .miniavatar{order:2}
.msg.self .bubble{max-width:none}
.miniavatar{cursor:pointer}
.cover{height:155px;background:linear-gradient(135deg,#66736e,#202724);position:relative;margin-bottom:42px}
.cover .owner{position:absolute;right:17px;bottom:-31px;display:flex;align-items:center;gap:10px;color:white;font-weight:700}
.cover .avatar{border:3px solid white;width:64px;height:64px}
.feed{background:#fff}
.post{display:flex;gap:11px;padding:16px;border-bottom:1px solid var(--line)}
.post-body{flex:1;min-width:0}
.post-name{color:#526e88;font-weight:700;font-size:14px}
.post-text{font-size:14px;line-height:1.55;margin:5px 0}
.post-time{color:#999;font-size:11px}
.post-photo{height:105px;width:160px;background:linear-gradient(145deg,#d9d0bf,#899188);border-radius:6px;margin:7px 0;display:grid;place-items:center;color:white;font-size:12px}
.profile-head{text-align:center;padding:25px 15px;background:#fff;border-bottom:1px solid var(--line)}
.profile-head .avatar{margin:auto;width:68px;height:68px;border-radius:18px;font-size:22px}
.profile-head h2{margin:9px 0 3px}
.profile-head p{margin:0;color:var(--muted);font-size:12px}
.profile-facts{margin:10px 0 14px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff}
.profile-facts p{display:flex;gap:18px;margin:0;padding:12px 17px;border-bottom:1px solid var(--line);font-size:13px;line-height:1.4}
.profile-facts p:last-child{border-bottom:0}
.profile-facts span{width:42px;color:#858d88;flex:none}
.profile-facts b{font-weight:500;color:#2b302d;overflow-wrap:anywhere}
.request-message-label{display:block;margin:16px 17px;color:#707772;font-size:13px}.request-message-label textarea{display:block;width:100%;box-sizing:border-box;margin-top:7px;padding:11px;border:1px solid #d9dedb;border-radius:10px;background:#fff;color:#202521;font:inherit;font-size:14px;line-height:1.5;resize:none;outline:none}.request-message-label textarea:focus{border-color:#38b894;box-shadow:0 0 0 3px #38b8941f}
.fixed-request-message{display:block;width:100%;box-sizing:border-box;margin-top:7px;padding:11px;border:1px solid #e0e4e1;border-radius:10px;background:#f3f5f3;color:#202521;font-size:14px;line-height:1.5;min-height:44px}
.setting-group{margin:14px 0;border-radius:13px;overflow:hidden}
.setting-note{padding:10px 13px;color:var(--muted);font-size:11px}
/* Chat sizing overrides: bubbles grow naturally until the opposite avatar edge. */
.toast{z-index:80;top:34px;left:7px;right:7px;min-height:57px;background:#fffffffa;box-shadow:0 8px 28px #0004;padding:9px 12px}
.msg>div:not(.miniavatar){width:max-content;max-width:calc(100% - 78px);min-width:0;flex:none}
.msg .bubble{display:block;width:auto;max-width:none;overflow-wrap:anywhere;word-break:break-word}
.msg.entering{animation:none}
.msg.entering>div:not(.miniavatar),.system.entering{animation:messageIn .28s cubic-bezier(.2,.8,.25,1) both}
@keyframes messageIn{from{opacity:0;transform:translateY(8px) scale(.985)}
to{opacity:1;transform:none}
}
.typing-row{animation:none}
.typing-row>div:not(.miniavatar){animation:messageIn .2s ease}
.typing-row .speaker{margin-bottom:4px}
.dots{display:flex!important;align-items:center!important;justify-content:center!important;height:41px!important;gap:4px!important;padding:0 14px!important}
.dots i{display:block;width:5px;height:5px;border-radius:50%;background:#8d9690;animation:pulse 1s infinite ease-in-out}
.dots i:nth-child(2){animation-delay:.16s}
.dots i:nth-child(3){animation-delay:.32s}
@keyframes pulse{0%,70%,100%{transform:translateY(0);opacity:.35}
35%{transform:translateY(-3px);opacity:1}
}
.typing-title{color:#68736d;font-size:14px!important;animation:titlePulse 1.2s ease-in-out infinite}
@keyframes titlePulse{0%,100%{opacity:.65}
50%{opacity:1}
}
.choice{transition:transform .15s ease,border-color .15s ease,background .15s ease}
.choice:active{transform:scale(.985)}
.avatar.black,.miniavatar.black{background:#202322}
.right{float:right;color:#aaa}
.danger-button{color:#b74444!important;text-align:center!important}
.sending{text-align:center;color:#929894;font-size:12px;padding:10px}
.inputbar{height:42px;background:#fff;border:1px solid #dfe3df;border-radius:13px;display:flex;align-items:center;padding-left:13px;color:#a0a5a1;font-size:13px}
.inputbar span{flex:1}
.inputbar button{border:0;background:#242826;color:white;border-radius:50%;width:28px;height:28px;font-size:20px;line-height:20px;margin-right:7px}
.plus-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:18px 0}
.plus-grid button{height:88px!important;margin:0!important;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:#fff!important;border:1px solid #e2e5e1!important}
.plus-grid button b{font-size:24px;font-weight:400}
.plus-grid button span{font-size:11px;color:#656b67}
.plus-grid button.needed{border-color:#71c99e!important;box-shadow:0 0 0 2px #d9f6e7 inset}
.call-screen{width:min(390px,100%);min-height:540px;border-radius:22px;background:linear-gradient(#27312d,#0c0f0e);color:white;text-align:center;padding:72px 25px 35px}
.call-screen .avatar{margin:auto;width:82px;height:82px;border-radius:24px;font-size:25px}
.call-screen h2{margin:17px 0 6px}
.call-screen p{color:#c3cbc6}
.call-screen button{border:0;border-radius:24px;padding:11px 30px;margin-top:50px}
.call-waves{height:55px;display:flex;align-items:center;justify-content:center;gap:8px}
.call-waves i{width:6px;height:18px;background:#78d5a5;border-radius:4px;animation:wave 1s infinite}
.call-waves i:nth-child(2){height:32px;animation-delay:.15s}
.call-waves i:nth-child(3){animation-delay:.3s}
@keyframes wave{0%,100%{transform:scaleY(.45);opacity:.4}
50%{transform:scaleY(1);opacity:1}
}
.upload{text-align:center}
.progress{height:7px;background:#e3e6e3;border-radius:9px;overflow:hidden;margin:22px 0}
.progress i{display:block;height:100%;background:var(--green);animation:upload 1.2s ease-out forwards}
@keyframes upload{from{width:2%}
to{width:100%}
}
.map-card{width:215px;background:#fff;border-radius:10px;overflow:hidden;cursor:pointer}
.map-card strong,.map-card small{display:block;padding:8px 10px 0}
.map-card small{padding:2px 10px 9px;color:#808783}
.map-sea{height:105px;background:radial-gradient(circle at 70% 45%,#89977f 0 5%,transparent 6%),linear-gradient(150deg,#7fa4ad,#416977);position:relative;color:white;display:grid;place-items:center}
.map-sea i{position:absolute;width:16px;height:16px;border:4px solid #fff;border-radius:50%;box-shadow:0 0 0 7px #ffffff44}
.map-sea b{position:absolute;bottom:8px;left:10px}
.shared-map-card .map-sea{background-image:linear-gradient(180deg,transparent 45%,rgba(0,0,0,.42)),url("assets/shared-location-world-map-v2.png");background-size:cover;background-position:47% 46%}
.shared-map-card .map-sea i{left:31%;top:38%;width:10px;height:10px;border-width:3px;box-shadow:0 0 0 5px #ffffff55}
.map-full header{display:flex;align-items:center;gap:20px}
.map-full header button{width:auto;margin:0}
.ocean{height:390px;border-radius:12px;background:radial-gradient(circle at 64% 37%,#728368 0 3%,#476b70 3.5% 25%,#315965 70%);position:relative;color:white;overflow:hidden}
.ocean .pin{position:absolute;left:63%;top:32%;font-size:28px;color:#ff5e54}
.ocean span{position:absolute;left:18px;right:18px;bottom:20px;text-align:center;font-size:12px}
.room-photo{background:linear-gradient(145deg,#454844,#9b968c)!important}
.water-photo{background:linear-gradient(145deg,#c2cbc5,#738a8b)!important}
.profile-sheet{padding:0 0 14px}
.profile-sheet>.profile-head{position:sticky;top:0;z-index:2}
.moments{max-height:470px;overflow:auto}
.comment{background:#edf0ed;padding:9px 14px;margin:-8px 16px 10px 58px;font-size:12px;line-height:1.6}
.wide{width:calc(100% - 28px)!important;margin-left:14px!important}
.fake-input{background:#fff;border:1px solid #dfe3df;border-radius:10px;padding:13px;color:#555;margin:12px 0}
.photo-view{width:min(390px,100%);color:white;text-align:center}
.zoom-placeholder{height:450px;background:linear-gradient(150deg,#131a1d,#4e5555);display:grid;place-items:center;border-radius:14px}
.photo-view button{padding:10px 22px;border:0;border-radius:18px}
.article p{font-family:"Source Han Serif SC","Noto Serif CJK SC",serif;line-height:1.85;color:#444}
.article small{color:#8b918e}
@media(max-width:430px){.phone{height:100dvh}
.statusbar{padding-top:max(7px,env(safe-area-inset-top));height:calc(29px + env(safe-area-inset-top))}
}
/* Simple, neutral portrait avatars for the two participants. */
.avatar.portrait,.miniavatar.portrait{position:relative;display:block;overflow:hidden;color:transparent;background:linear-gradient(155deg,#d9e5df,#a9bbb2)}
.portrait i{position:absolute;display:block;pointer-events:none}
.portrait .face{z-index:2;width:46%;height:48%;left:27%;top:22%;border-radius:48% 48% 44% 44%;background:#f0cbb2}
.portrait .face:before,.portrait .face:after{content:"";position:absolute;top:46%;width:8%;height:8%;border-radius:50%;background:#4d403b}
.portrait .face:before{left:25%}
.portrait .face:after{right:25%}
.portrait .hair{z-index:3;width:58%;height:48%;left:21%;top:11%;border-radius:50% 50% 38% 38%;background:#302c2b;clip-path:polygon(0 0,100% 0,100% 88%,80% 65%,70% 42%,55% 57%,38% 37%,24% 63%,0 84%)}
.portrait .shirt{z-index:1;width:78%;height:43%;left:11%;bottom:-20%;border-radius:50% 50% 0 0;background:#718b83}
.portrait-me{background:linear-gradient(155deg,#eadfd3,#c9b5a2)!important}
.portrait-me .hair{background:#523b31}
.portrait-me .shirt{background:#a66f6d}
.portrait-lw{background:linear-gradient(155deg,#dce5e0,#9db2a8)!important}
.portrait-lw .hair{background:#252728}
.portrait-lw .shirt{background:#627c72}
/* Calls, shared location and Moments behave as new phone pages, not dialog cards. */
.modal.full,.modal:has(.call-screen),.modal:has(.map-full),.modal:has(.profile-sheet),.modal:has(.search-sheet),.modal:has(.dialogue-editor){padding:0;background:#101211}
.call-screen,.map-full,.profile-sheet,.search-sheet,.dialogue-editor{width:min(100vw,430px)!important;height:min(100dvh,880px)!important;max-height:none!important;border-radius:0!important;margin:auto;overflow:auto}
.call-screen{min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 25px}
.call-screen button{margin-top:70px}
.map-full{padding:0!important;background:#f6f7f3!important}
.map-full header,.profile-nav{height:58px;position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:14px;padding:8px 14px;background:#fafbf8;border-bottom:1px solid var(--line)}
.map-full header button,.profile-nav button{width:34px!important;height:40px;margin:0!important;padding:0!important;border:0!important;background:transparent!important;font-size:30px;line-height:1}
.map-full header h2,.profile-nav h2{font-size:17px;margin:0!important}
.map-full .ocean{height:calc(100% - 176px);min-height:420px;border-radius:0}
.shared-map-summary{height:66px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;background:rgba(25,31,29,.9);color:#fff;position:relative;z-index:4}
.shared-map-summary b{font-size:17px}
.shared-map-summary b{transition:opacity .25s ease}
.shared-map-summary span{font-size:12px;color:#d9dfdc;opacity:0;transform:translateY(4px);transition:opacity .38s ease,transform .38s ease}
.shared-map-summary.show-distance span{opacity:1;transform:translateY(0)}
.real-map-viewport{height:calc(100% - 124px);min-height:560px;position:relative;overflow:hidden;background:#3f82ad;touch-action:none;cursor:grab}
.real-map-viewport.dragging{cursor:grabbing}
.real-map-canvas{position:absolute;inset:-5%;width:110%;height:110%;background:url("assets/shared-location-world-map-v2.png") center center/cover no-repeat;will-change:transform,filter,opacity;opacity:.35;filter:blur(2px) saturate(.72);transform:scale(1.035);transition:opacity .65s ease,filter .65s ease,transform .8s ease}
.real-map-canvas.map-ready{opacity:1;filter:blur(0) saturate(1);transform:scale(1)}
.real-map-viewport.dragging .real-map-canvas{transition:none}
.map-route-line{display:none}
.map-location-loader{position:absolute;z-index:2;width:34px;height:34px;border:3px solid rgba(255,255,255,.62);border-top-color:#10a77e;border-radius:50%;opacity:0;transform:scale(.7);transition:opacity .25s ease,transform .25s ease;animation:mapLocationSpin .85s linear infinite;box-shadow:0 0 0 5px rgba(255,255,255,.28)}
.map-location-loader.player-loader{left:10%;top:29%}
.map-location-loader.linwan-loader{right:7%;top:61%}
.real-map-canvas.map-locating .map-location-loader{opacity:1;transform:scale(1)}
.real-map-canvas.show-player .player-loader,.real-map-canvas.show-linwan .linwan-loader{opacity:0;transform:scale(.6)}
@keyframes mapLocationSpin{to{rotate:360deg}}
.map-person-pin{position:absolute;z-index:3;display:flex;align-items:flex-start;gap:8px;filter:drop-shadow(0 3px 5px rgba(0,0,0,.28));opacity:0;transform:translateY(9px) scale(.78);transform-origin:center;transition:opacity .42s ease,transform .48s cubic-bezier(.2,.85,.25,1.18)}
.real-map-canvas.show-player .player-pin,.real-map-canvas.show-linwan .linwan-pin{opacity:1;transform:translateY(0) scale(1)}
.map-person-pin>.avatar{width:46px;height:46px;flex:0 0 46px;border:3px solid #fff;border-radius:50%}
.real-map-canvas:not(.show-addresses) .map-person-pin>.avatar{animation:mapAvatarLocate 1.05s ease-in-out infinite}
@keyframes mapAvatarLocate{50%{box-shadow:0 0 0 7px rgba(255,255,255,.36)}}
.map-person-pin>div{width:174px;padding:8px 10px;background:rgba(255,255,255,.95);border-radius:9px;color:#202421;box-shadow:0 2px 9px rgba(0,0,0,.16);opacity:0;transform:translateY(7px);transition:opacity .45s ease,transform .45s ease}
.real-map-canvas.show-addresses .map-person-pin>div{opacity:1;transform:translateY(0)}
.map-person-pin b,.map-person-pin span{display:block}
.map-person-pin b{font-size:13px;margin-bottom:3px}
.map-person-pin span{font-size:11px;line-height:1.35}
.map-person-pin.player-pin{left:8%;top:27%}
.map-person-pin.linwan-pin{right:5%;top:59%;flex-direction:row-reverse}
.map-person-pin.linwan-pin>div{text-align:right}
.map-drag-tip{position:absolute;left:50%;bottom:14px;transform:translate(-50%,6px);z-index:4;padding:6px 12px;border-radius:15px;background:rgba(16,22,20,.68);color:#fff;font-size:11px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .35s ease,transform .35s ease}
.real-map-viewport.map-controls-ready .map-drag-tip{opacity:1;transform:translate(-50%,0)}
.profile-sheet{display:flex;flex-direction:column;padding:0!important;background:#fff!important}
.profile-sheet>.profile-head{position:relative;top:auto;flex:none}
.profile-sheet .moments{flex:1;max-height:none;overflow:auto}
.profile-sheet>.empty{flex:1}
@media(max-width:430px){.call-screen,.map-full,.profile-sheet,.search-sheet,.dialogue-editor{height:100dvh!important}
}
.dialogue-editor{background:#eef0ed;display:flex;flex-direction:column}
.editor-top{height:58px;display:grid;grid-template-columns:70px 1fr 70px;align-items:center;background:#fafbf8;border-bottom:1px solid var(--line);padding:0 10px;flex:none}
.editor-top h2{font-size:16px;text-align:center;margin:0}
.editor-top button{border:0;background:none;padding:8px;font-size:13px}
.editor-top button:first-child{text-align:left;font-size:24px}
.editor-top .editor-save{color:#12845f;font-weight:700;text-align:right}
.editor-top .editor-save.saved{color:#8a9690;font-weight:500}
.editor-toolbar{background:#fff;padding:10px 13px;border-bottom:1px solid var(--line);display:grid;gap:7px;flex:none}
.editor-toolbar label{display:flex;align-items:center;justify-content:space-between;font-size:14px;font-weight:650}
.editor-toolbar select{min-width:130px;border:1px solid #d6dcd7;border-radius:9px;background:#fff;padding:7px 9px}
.editor-toolbar small{font-size:11px;line-height:1.5;color:var(--muted)}
.editor-toolbar .editor-undo{justify-self:end;border:0;background:none;color:#76807a;font-size:11px;padding:2px 0}
.editor-preview{height:250px;overflow:auto;padding:9px 12px 18px;border-bottom:4px solid #d9ded9;background:#eef0ed;flex:none;position:relative;scroll-behavior:smooth}
.editor-preview .msg{pointer-events:none}
.editor-preview-item{width:100%;border-radius:12px;transition:background .18s ease,box-shadow .18s ease}
.editor-preview-item.active{background:#69d8b31c;box-shadow:inset 0 0 0 1px #31ba8b55}
.editor-empty{padding:70px 20px;text-align:center;color:var(--muted);font-size:13px}
.editor-list{overflow:auto;padding:10px;background:#f5f6f3;flex:1}
.editor-row{background:#fff;border:1px solid #e0e4df;border-radius:12px;padding:9px;margin-bottom:9px}
.editor-row.locked{color:#747b76;padding:13px}
.editor-row.locked b,.editor-row.locked small{display:block;font-size:12px}
.editor-row.locked small{margin-top:4px}
.editor-row-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px;color:var(--muted);font-size:11px}
.editor-row-head select{border:0;background:#eef2ee;border-radius:7px;padding:5px 7px;font-size:12px}
.editor-row textarea{width:100%;resize:vertical;border:1px solid #d7ddd8;border-radius:8px;padding:8px;font:14px/1.5 inherit;min-height:58px}
.editor-row textarea:focus{outline:2px solid #58cba2;border-color:transparent}
.editor-row-actions{display:grid;grid-template-columns:1fr 1fr 48px;gap:7px;margin-top:7px}
.editor-row-actions button,.editor-add-last{border:0;border-radius:8px;background:#edf1ed;padding:7px;font-size:11px}
.editor-row-actions .editor-add-after{color:#276b59;background:#e8f5f0;text-align:center}
.editor-row-actions .editor-marker-after{color:#735d20;background:#fff5cf;text-align:center}.marker-row{border-color:#e8d994;background:#fffdf4}.marker-row-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px}.marker-row-head small{color:#9a8b54}.marker-name-label{display:block;color:#786b3e;font-size:11px}.marker-name-input{display:block;width:100%;box-sizing:border-box;margin-top:4px;padding:8px 9px;border:1px solid #ded6b8;border-radius:7px;background:#fff;color:#252923;font:inherit;font-size:13px}.marker-name-input:focus{outline:2px solid #e1c75c;border-color:transparent}.event-marker{width:max-content;max-width:90%;margin:9px auto;padding:5px 12px;border:1px dashed #c4a94e;border-radius:6px;background:#fff8d9;color:#78621d;font-size:12px;text-align:center}.event-marker span{display:block}.event-marker small{display:block;margin-top:1px;color:#aa985a;font-size:9px}
.call-log.failed-call{min-width:0;padding:9px 11px;gap:5px;border-radius:14px 4px 14px 14px;background:var(--self)}.call-log.failed-call>b{display:block;width:auto;height:auto;border-radius:0;background:transparent;color:#111;font-size:14px;line-height:1}.call-log.failed-call span{gap:0}.call-log.failed-call strong{font-size:14px;font-weight:400;line-height:1.5;white-space:nowrap}
.editor-row-actions .editor-delete{color:#b74444;background:#fff0f0}
.editor-add-last{width:100%;padding:11px;font-size:13px;background:#daf5ea;color:#176c52;margin-bottom:10px}
.v2-editor-hint{margin:14px 18px;color:var(--muted);font-size:12px;line-height:1.6}
.framework-page .msg>div:not(.miniavatar){max-width:var(--framework-bubble-max,76%)}
.framework-page .inputtext{position:relative}
.type-caret{display:inline-block;width:1px;height:16px;margin-left:2px;background:#252927;vertical-align:-3px;animation:frameworkCaret .8s steps(1) infinite}
@keyframes frameworkCaret{50%{opacity:0}}
.framework-event-card{width:fit-content;max-width:82%;margin:14px auto;padding:12px 14px;border:1px dashed #c4a94e;border-radius:10px;background:#fff8d9;color:#6e5b21;text-align:center}
.framework-event-card b,.framework-event-card small{display:block}
.framework-event-card small{margin-top:3px;font-size:11px;color:#948044}
.framework-event-card button{margin-top:10px;border:0;border-radius:8px;background:#2fb78d;color:#fff;padding:8px 13px;font:inherit;font-size:12px}
.framework-settings{margin:14px 0;border-radius:13px;overflow:hidden;background:#fff}
.framework-settings label{min-height:48px;display:flex;align-items:center;justify-content:space-between;padding:0 13px;border-bottom:1px solid var(--line);font-size:14px}
.framework-settings label:last-child{border-bottom:0}
.framework-settings select{border:1px solid #d6dcd7;border-radius:8px;background:#fff;padding:6px 8px;font:inherit;font-size:13px}
.framework-settings input{width:20px;height:20px;accent-color:var(--green)}
.framework-photo-art{height:360px;border-radius:14px;background:linear-gradient(160deg,#16202b,#243b50 45%,#9c6f45);display:grid;place-items:center;color:#fff;font-size:18px;letter-spacing:.15em}
.framework-checklist{margin:14px 0}
/* Familiar phone status icons. */
.status-icons{display:flex;align-items:center;gap:6px;height:12px}
.cellular{height:11px;display:flex;align-items:flex-end;gap:1.5px}
.cellular b{display:block;width:2.5px;background:#171918;border-radius:1px}
.cellular b:nth-child(1){height:4px}
.cellular b:nth-child(2){height:6px}
.cellular b:nth-child(3){height:8px}
.cellular b:nth-child(4){height:10px}
.wifi{width:15px;height:11px;position:relative;overflow:hidden}
.wifi:before,.wifi:after{content:"";position:absolute;left:50%;transform:translateX(-50%);border:2px solid #171918;border-color:#171918 transparent transparent transparent;border-radius:50%}
.wifi:before{width:15px;height:15px;top:1px}
.wifi:after{width:8px;height:8px;top:6px}
.battery{--battery-level:37%;width:27px;height:11px;border:1px solid #171918;border-radius:2px;position:relative;display:grid;place-items:center;overflow:visible;font-style:normal;background:#fff}
.battery:after{content:"";position:absolute;width:1.5px;height:5px;right:-2.5px;top:2px;background:#171918;border-radius:0 1px 1px 0}
.battery b{position:absolute;inset:1px auto 1px 1px;width:var(--battery-level);max-width:calc(100% - 2px);background:#6f7c75;border-radius:1px;opacity:.3}
.battery span{position:relative;z-index:1;font-size:6.5px;line-height:1;font-weight:800;letter-spacing:-.04em;color:#171918}
.battery.low{border-color:#c44444}
.battery.low:after,.battery.low b{background:#c44444}
.battery.low span{color:#a72f2f}
/* One reply lives in the input field; multiple replies remain above it. */
.contact-row{align-items:center;min-height:66px}
.contact-row .rowmain{display:flex;align-items:center}
.inputbar{gap:6px;padding:5px 6px 5px 12px}
.inputbar .inputtext{flex:1;min-width:0;width:auto;height:30px;margin:0;border:0;border-radius:0;background:transparent;text-align:left;color:#a0a5a1;padding:0 2px;font-size:13px!important;line-height:1.35!important;display:flex;align-items:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.inputbar button.inputtext.ready{color:#242826;cursor:pointer}
.inputbar button.inputtext.ready:disabled{cursor:default;color:#242826}
.input-caret{display:inline-block;width:1.5px;height:15px;margin-left:2px;background:#2e7f68;animation:inputCaretBlink .72s steps(1) infinite;flex:none}
@keyframes inputCaretBlink{0%,48%{opacity:1}49%,100%{opacity:0}}
.inputbar .sendbtn{width:auto;height:30px;margin:0;border-radius:8px;padding:0 12px;background:var(--green);color:#fff;font-size:13px;line-height:30px}
.inputbar.sending-draft .inputtext{color:#6f7772}
.inputbar.sending-draft .sendbtn{opacity:.55;cursor:default}
.inputbar .sendbtn:disabled{background:#b9c0bc;color:#fff;cursor:default}
.image-loading-card{width:210px;min-height:104px;border-radius:11px;background:#fff;display:grid;grid-template-columns:34px 1fr;grid-template-rows:auto auto;align-content:center;column-gap:11px;padding:15px;box-shadow:0 1px 2px #00000010}
.image-loading-card .inline-spinner{grid-row:1/3;width:28px;height:28px;border:3px solid #dce7e3;border-top-color:var(--green);border-radius:50%;animation:inlineImageSpin .8s linear infinite;align-self:center}
.image-loading-card strong{font-size:13px;align-self:end}
.image-loading-card small{margin-top:4px;color:var(--muted);font-size:11px}
@keyframes inlineImageSpin{to{transform:rotate(360deg)}}
.inputbar #plus{flex:none;margin:0;padding:0;position:relative;font-size:0;line-height:0;display:block}
.inputbar #plus:before,.inputbar #plus:after{content:"";position:absolute;left:50%;top:50%;width:12px;height:2px;background:#fff;border-radius:2px;transform:translate(-50%,-50%)}
.inputbar #plus:after{transform:translate(-50%,-50%) rotate(90deg)}
.choices{margin-bottom:8px}
/* Explicit button colors prevent generic sheet rules from washing out labels. */
.sheet button{color:#242826}
.sheet button.primary,.request-card .actions button.primary{background:var(--green)!important;color:#fff!important;font-weight:650}
.sheet button.secondary,.request-card .actions button.secondary{background:#e4e8e4!important;color:#252927!important}
.call-screen button{min-width:124px;background:#f3f4f2;color:#171918;font-weight:650}
.call-screen #hangup{background:#d94f4f;color:#fff}
.call-screen #returnChat{background:#f3f4f2;color:#171918}
.photo-view button{background:#f3f4f2;color:#171918;font-weight:650}
.search-sheet{padding:0!important;background:#f5f6f3!important}
.search-form{display:flex;gap:8px;padding:14px;background:#fff;border-bottom:1px solid var(--line)}
.search-form input{flex:1;min-width:0;height:40px;border:1px solid #d9ddda;border-radius:10px;background:#f3f5f2;padding:0 12px;font:inherit;font-size:14px;color:#202321;outline:none}
.search-form input:focus{border-color:#66bd92;box-shadow:0 0 0 3px #66bd9222}
.search-form button{width:auto!important;height:40px;margin:0!important;padding:0 15px!important;border-radius:10px!important;background:var(--green)!important;color:#fff!important;font-size:14px;font-weight:650}
.search-results{padding:14px}
.search-results>p{text-align:center;color:var(--muted);font-size:13px;margin-top:42px}
.search-person{width:100%;height:72px;margin:0!important;padding:11px!important;border:0!important;border-radius:12px!important;background:#fff!important;color:#202321!important;display:flex;align-items:center;gap:12px;text-align:left;box-shadow:0 1px 2px #0000000a}
.search-person span{display:flex;flex:1;min-width:0;flex-direction:column;gap:5px}
.search-person b{font-size:15px}
.search-person small{font-size:12px;color:var(--muted)}
.search-person em{font-size:13px;color:var(--green-dark);font-style:normal}
.test-panel{margin:18px 0;padding:14px;background:#fff;border-radius:14px}
.test-panel h2{margin:0 0 5px;font-size:15px}
.test-panel p{margin:0 0 12px;color:var(--muted);font-size:12px;line-height:1.5}
.checkpoint-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.checkpoint-grid button{border:1px solid #dce3de!important;border-radius:10px!important;background:#f7faf7!important;padding:10px 6px!important;text-align:center!important;font-size:12px!important;color:#2d493b!important}
/* Bottom controls sit above rounded-screen and gesture areas. */
.tabs{height:calc(68px + max(10px,env(safe-area-inset-bottom)));padding-bottom:max(10px,env(safe-area-inset-bottom))}
.composer{padding:8px 8px max(16px,env(safe-area-inset-bottom))}
.page-top{display:grid;grid-template-columns:40px 1fr 40px;padding-left:10px;padding-right:10px}
.page-top h1{text-align:center}
.page-top>.iconbtn{width:40px;height:40px;padding:0;font-size:25px}
.chat .top>.back,.chat .top>.iconbtn{width:40px;flex:none}
.chat .top{padding-left:8px;padding-right:8px}
.person-icon{width:22px;height:22px!important;margin:0 auto 3px;position:relative;display:block!important;font-size:0!important;line-height:0!important}
.person-icon:before{content:"";position:absolute;width:8px;height:8px;left:7px;top:1px;border:1.8px solid currentColor;border-radius:50%}
.person-icon:after{content:"";position:absolute;width:17px;height:9px;left:2.5px;bottom:0;border:1.8px solid currentColor;border-bottom:0;border-radius:11px 11px 2px 2px}
.avatar.photo-avatar,.miniavatar.photo-avatar{overflow:hidden;background:#d7dcd8;color:transparent}
.photo-avatar img{display:block;width:100%;height:100%;object-fit:cover}
.profile-head .photo-avatar img{object-fit:cover}
.sound-sheet label{display:flex;align-items:center;justify-content:space-between;padding:13px 4px;border-bottom:1px solid var(--line);font-size:14px}
.sound-toggle input{width:42px;height:22px;accent-color:var(--green)}
.volume-control{display:block!important}
.volume-control span{display:flex;justify-content:space-between;margin-bottom:12px}
.volume-control input{width:100%;accent-color:var(--green)}
.sound-sheet #previewSound{margin-top:18px}
.verify-sheet input{width:100%;height:46px;margin:12px 0 4px;border:1px solid #dce1dd;border-radius:10px;padding:0 12px;font:inherit;font-size:14px;color:#252826;background:#fff}
.verify-choices{display:grid;gap:7px}
.verify-choices button{margin:0!important;text-align:left!important;background:#fff!important;border:1px solid #dfe4e0!important;font-size:13px}
.verify-choices button.selected{border-color:var(--green)!important;background:#effbf5!important;color:#176642!important}
/* Complete story surfaces. */
.app-brand-mark{display:inline-block;width:20px;height:20px;margin-right:7px;vertical-align:-4px;border-radius:7px;background:linear-gradient(135deg,#2d8cff,#18c59b);position:relative;box-shadow:0 3px 8px #1ba99c2e}
.app-brand-mark:before{content:"";position:absolute;left:5px;top:4px;width:8px;height:7px;border:1.7px solid #fff;border-radius:6px}
.app-brand-mark:after{content:"";position:absolute;left:10px;bottom:3px;border:3px solid transparent;border-top-color:#fff;transform:rotate(-17deg)}
.battery-chat{display:inline-flex;align-items:center;gap:4px;margin-top:2px;color:#738079;font-size:10px;font-weight:650}
.battery-chat:before{content:"";width:15px;height:7px;border:1px solid currentColor;border-radius:2px;box-shadow:inset 9px 0 currentColor}
.battery-chat.low{color:#d14343;animation:batteryPulse 1.2s ease-in-out infinite}
.battery-chat.low:before{box-shadow:inset 3px 0 currentColor}
.offline-label{margin-top:2px;color:#9a9f9c;font-size:10px}
@keyframes batteryPulse{50%{opacity:.45}
}
.default-avatar{background:#b8bdb9!important;color:transparent!important;position:relative;filter:grayscale(1)}
.default-person{position:relative;width:42%;height:42%;margin-top:-23%;border-radius:50%;background:#e6e8e6;display:block}
.default-person:after{content:"";position:absolute;left:50%;top:114%;width:160%;height:88%;transform:translateX(-50%);border-radius:50% 50% 22% 22%;background:#e6e8e6}
.row,.contact-row,.local-post,.search-person,.scene-photo,.message-link,.map-card,.transfer-card,.voice-bubble{font-family:inherit}
.row{width:100%;border:0;border-bottom:1px solid var(--line);text-align:left}
.map-card,.transfer-card,.post-photo{border:0}
.chat-title{min-width:0}
.chat-title h1{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.account-note{margin:3px 0 13px;color:var(--muted);font-size:12px}
.request-card{margin:0;padding:14px 4px 4px;background:transparent}
.request-lines{margin:15px 0;padding:11px 13px;border-radius:12px;background:#fff;text-align:left;border:1px solid #e5e9e5}
.request-lines span{display:block;padding:7px 2px;border-bottom:1px solid #edf0ed;font-size:14px}
.request-lines span:last-child{border:0}
.scene-photo{border:0;width:218px;min-height:142px;border-radius:12px;overflow:hidden;padding:74px 13px 12px;text-align:left;color:#fff;display:flex;flex-direction:column;gap:4px;justify-content:flex-end;cursor:pointer;box-shadow:0 4px 18px #0002;background:linear-gradient(155deg,#30383a,#8b8e86)}
.scene-photo.room{background:linear-gradient(160deg,#282c2b 0 42%,#6e716b 43% 62%,#3f4543 63%)}
.scene-photo.water{background:linear-gradient(160deg,#22343a,#64878d 55%,#b4b6a8)}
.scene-photo.factory{background:linear-gradient(160deg,#b4b4a3,#53615e 58%,#233037)}
.scene-photo.factory-night,.scene-photo.rescue{background:linear-gradient(160deg,#07131b,#1c3036 55%,#6b604f)}
.scene-photo span{font-size:14px;font-weight:700;text-shadow:0 1px 4px #000}
.scene-photo small{font-size:11px;line-height:1.5;opacity:.86;text-shadow:0 1px 4px #000}
.message-link{width:230px;border:0;border-radius:11px;background:#fff;padding:12px;text-align:left;display:flex;flex-direction:column;gap:6px;box-shadow:0 1px 2px #00000010;cursor:pointer}
.message-link>span{color:#188c80;font-size:10px;font-weight:750;letter-spacing:.08em}
.message-link strong{font-size:14px;line-height:1.45}
.message-link small{padding-top:7px;border-top:1px solid #edf0ed;color:var(--muted);font-size:10px}
.call-log{min-width:210px;background:#fff;border-radius:4px 14px 14px;padding:10px 12px;display:flex;align-items:center;gap:10px}
.call-log>b{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:#e9f7f3;color:#178c7e}
.call-log span{display:flex;flex-direction:column;gap:3px}
.call-log strong{font-size:13px}
.call-log small{font-size:10px;color:var(--muted)}
.transfer-form label{display:flex;flex-direction:column;gap:7px;margin:15px 0 0;color:#777f7a;font-size:12px}
.transfer-form input{height:43px;border:1px solid #dde2de;border-radius:10px;background:#fff;padding:0 11px;font:inherit;font-size:14px;outline:none}
.transfer-form input:focus{border-color:#43b99a;box-shadow:0 0 0 3px #43b99a1f}
.profile-copy{margin:0 16px 16px;padding:14px;border-radius:12px;background:#f5f7f5;color:#46504b;font-size:13px;line-height:1.7}
.profile-copy p{margin:3px 0}
.profile-copy small{display:block;margin-top:11px;color:#818984}
.history-link{width:100%;margin:12px 0 0!important;border:1px solid #d7e2dc!important;background:#fff!important;text-align:left;font-size:13px;line-height:1.5}
.my-location{padding:14px 16px;background:#fff;display:flex;flex-direction:column;gap:4px}
.my-location span{font-size:11px;color:#85908a}
.my-location b{font-size:14px}
.factory-map-art{height:430px;position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#f7fbf8;background:linear-gradient(28deg,#12292a,#285956 50%,#193941);overflow:hidden}
.factory-map-art:before,.factory-map-art:after{content:"";position:absolute;left:-10%;right:-10%;height:2px;background:#ffffff32;transform:rotate(-18deg);box-shadow:0 34px #ffffff20,0 68px #ffffff17}
.factory-map-art:after{transform:rotate(23deg)}
.factory-pin{width:25px;height:25px;border-radius:50% 50% 50% 0;background:#2ac29e;transform:rotate(-45deg);display:grid;place-items:center;color:transparent;box-shadow:0 4px 15px #0006}
.factory-pin:after{content:"";width:8px;height:8px;border-radius:50%;background:white}
.factory-map-art b{margin-top:20px;font-size:17px}
.factory-map-art small{margin-top:7px;opacity:.7}
.route-card{margin:14px;border-radius:12px;background:#fff;padding:14px 16px;display:flex;flex-direction:column;gap:4px;box-shadow:0 2px 12px #0000000b}
.route-card span{font-size:11px;color:#85908a}
.route-card strong{font-size:14px}
.incoming-actions{display:flex;justify-content:center}
.incoming-actions .answer{background:#27b26b!important;color:#fff!important;min-width:128px}
.live-transcript{max-width:340px;max-height:270px;margin:20px auto 0;padding:14px 16px;overflow:auto;border-radius:14px;background:#ffffff12;color:#e7ece9;font-size:13px;line-height:1.9;text-align:left}
.active-call #endGuCall{margin-top:26px;background:#d94f4f!important;color:#fff!important}
.modal:has(.native-call),.modal:has(.phone-home-screen),.modal:has(.knock-screen){padding:0;background:#080a09}
.native-call,.knock-screen{width:min(100vw,430px);height:min(100dvh,880px);margin:auto;color:#fff;background:radial-gradient(circle at 50% 25%,#31433c,#0a0d0c 63%);display:flex;flex-direction:column;align-items:center;text-align:center;padding:90px 26px 48px}
.native-call-top small{font-size:12px;color:#b1bbb6}
.native-call-top h1{font-size:30px;margin:13px 0 7px}
.native-call-top p{margin:0;color:#ccd4d0}
.native-call-actions{margin-top:auto}
.answer-native{width:88px;height:88px;border:0;border-radius:50%;background:#27b26b;color:white;font-size:14px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px}
.answer-native span{font-size:27px}
.takeout-lines{margin-top:75px;display:flex;flex-direction:column;gap:18px;font-family:"Source Han Serif SC","Noto Serif CJK SC",serif;font-size:17px;line-height:1.65;color:#ecf0ed}
.silence{margin-top:120px;color:#8e9792;letter-spacing:.15em}
.phone-home-screen{width:min(100vw,430px);height:min(100dvh,880px);margin:auto;padding:78px 25px 34px;color:#fff;background:linear-gradient(165deg,#10232d,#276b72 48%,#111b20);display:flex;flex-direction:column}
.home-time{display:flex;flex-direction:column;align-items:center;font-size:54px;font-weight:250;letter-spacing:-.04em;text-shadow:0 2px 15px #0005}
.home-time small{margin-top:4px;font-size:12px;font-weight:500;letter-spacing:.05em;opacity:.78}
.home-icons{display:grid;grid-template-columns:repeat(4,1fr);gap:21px 12px;margin-top:78px}
.home-icons span{display:flex;flex-direction:column;align-items:center;gap:7px;font-size:11px;text-shadow:0 1px 4px #0006}
.home-icons i,.home-dock i{width:50px;height:50px;border-radius:14px;display:grid;place-items:center;background:#ffffffdc;color:#1c2c2e;font-style:normal;font-size:24px;box-shadow:0 5px 16px #0003}
.home-icons .home-near{background:linear-gradient(135deg,#2d8cff,#18c59b);position:relative}
.home-icons .home-near:before{content:"";width:24px;height:18px;border:3px solid #fff;border-radius:13px}
.home-icons .home-near:after{content:"";position:absolute;right:9px;bottom:8px;border:6px solid transparent;border-top-color:#fff;transform:rotate(-18deg)}
.home-icons .home-camera{background:linear-gradient(145deg,#555e61,#15191a);color:#fff}.home-icons .home-map{background:linear-gradient(145deg,#eef2e8,#9fc28d);color:#287455}.home-icons .home-wallet{background:linear-gradient(145deg,#f1a24a,#e76d38);color:#fff}
.home-dock{margin-top:auto;padding:12px 19px;border-radius:25px;background:#ffffff22;display:flex;justify-content:space-between;backdrop-filter:blur(12px)}
.home-dock i:first-child{background:#3ac466;color:#fff}.home-dock i:nth-child(2){background:#edf0ec}.home-dock i:last-child{background:#3c5062;color:#fff}
.knock-screen{justify-content:center;padding-top:48px;background:#050606}
.knock-screen span{font-family:"Source Han Serif SC","Noto Serif CJK SC",serif;font-size:25px;line-height:2.4;color:#d6d9d6;letter-spacing:.2em}
.final-ending{height:100%;display:grid;place-items:center;background:#030404;color:#eff1ef;text-align:center;padding:30px;animation:blackIn 1.1s ease both}
.final-ending span{color:#616763;font-size:10px;letter-spacing:.21em}
.final-ending h1{margin:29px 0 16px;font-family:"Source Han Serif SC","Noto Serif CJK SC",serif;font-size:31px;letter-spacing:.13em;font-weight:500}
.final-ending p{margin:0;color:#aeb4b0;font-size:13px;letter-spacing:.32em}
.final-ending button{margin-top:78px;border:1px solid #454a47;border-radius:22px;background:transparent;color:#bec3c0;padding:9px 24px;font-size:12px}
.final-ending.failed h1{color:#d5d7d5}
.final-ending.failed p{color:#887575}
.phone.ending-mode,.phone.ending-mode .statusbar,.phone.ending-mode .app{background:#030404}
.phone.ending-mode .statusbar{color:#030404}
.phone.ending-mode .status-icons{opacity:0}
@keyframes blackIn{from{background:#202623;color:transparent}
to{background:#030404;color:#eff1ef}
}
@media(max-width:430px){.native-call,.phone-home-screen,.knock-screen{height:100dvh}
.scene-photo{width:min(218px,70vw)}
}
/* NearChat identity and non-portrait, everyday-user avatars. */
:root{--green:#20b7a2;--green-dark:#117a75;--self:#c9f5ed}
.message-icon{width:22px;height:18px!important;margin:2px auto 7px;display:flex!important;align-items:center;justify-content:center;gap:2px;border:1.5px solid currentColor;border-radius:6px;position:relative}
.message-icon:after{content:"";position:absolute;left:4px;bottom:-4px;width:6px;height:6px;border-left:1.5px solid currentColor;transform:skewY(-35deg);background:#fbfcfa}
.message-icon i{width:2.5px;height:2.5px;border-radius:50%;background:currentColor;position:relative;z-index:1}
.avatar.moon,.miniavatar.moon{background:linear-gradient(145deg,#203653,#70649e);font-size:22px}
.avatar.blackcat,.miniavatar.blackcat{background:linear-gradient(145deg,#080a0e,#29333c);font-size:22px}
.avatar.archive-avatar,.miniavatar.archive-avatar{background:linear-gradient(145deg,#5b4937,#aa8359);font-size:21px}
.avatar.flower,.miniavatar.flower{background:linear-gradient(145deg,#c83c83,#f0a83e);font-size:21px}
.avatar.city-avatar,.miniavatar.city-avatar{background:linear-gradient(155deg,#143c65,#23a7b1);font-size:15px}
.avatar.me,.miniavatar.me{background:linear-gradient(145deg,#f0b3b3,#ffe5de);font-size:21px}
.miniavatar.gray,.miniavatar.black,.miniavatar.archive-avatar,.miniavatar.flower,.miniavatar.me{font-size:16px}
.local-post{cursor:pointer;background:#fff}
.local-post:hover{background:#f8fbfa}
.link-card{margin:9px 0;display:flex;gap:10px;background:#f1f3f3;padding:8px;border-radius:8px;align-items:center}
.link-thumb{width:48px;height:48px;border-radius:6px;background:linear-gradient(145deg,#0b2542,#24a59f);color:white;display:grid;place-items:center;line-height:1.05;font-weight:800}
.link-card span{display:flex;flex-direction:column;gap:4px}
.link-card b{font-size:13px;line-height:1.35}
.link-card small{font-size:11px;color:var(--muted)}
.me-card{display:flex;align-items:center;gap:13px;padding:17px;background:#fff;border-radius:14px}
.me-card div{display:flex;flex-direction:column;gap:5px}
.me-card small{color:var(--muted)}
.wallet-page{height:100%;background:#f4f6f4}
.wallet-hero{text-align:center;background:#fff;padding:48px 20px 42px}
.wallet-icon,.transfer-big{width:58px;height:58px;border-radius:50%;margin:0 auto 13px;display:grid;place-items:center;background:linear-gradient(145deg,#2e8cff,#18bf9c);color:#fff;font-size:29px}
.wallet-hero small,.wallet-hero strong{display:block}
.wallet-hero strong{font-size:38px;margin:8px 0 25px}
.wallet-hero button{border:0;background:var(--green);color:#fff;padding:10px 38px;border-radius:9px}
.wallet-hero p{font-size:12px;color:var(--muted);line-height:1.6;margin:30px auto 0;max-width:290px}
.wallet-detail{margin-top:12px;background:#fff;padding:16px;display:flex;justify-content:space-between}
.wallet-detail em{font-style:normal;color:#aaa}
.transfer-card{width:230px;color:white;background:linear-gradient(135deg,#f2923b,#ed6f38);border-radius:13px;display:grid;grid-template-columns:43px 1fr;padding:14px 14px 9px;cursor:pointer;box-shadow:0 4px 12px #d5682530}
.transfer-card.received{filter:saturate(.55);opacity:.8}
.transfer-symbol{width:38px;height:38px;border-radius:50%;border:2px solid #fff;display:grid;place-items:center;font-size:21px}
.transfer-card strong,.transfer-card span{display:block}
.transfer-card strong{font-size:20px}
.transfer-card span{font-size:12px;opacity:.9}
.transfer-card p{grid-column:1/3;margin:12px 0 8px;font-size:12px}
.transfer-card small{grid-column:1/3;border-top:1px solid #ffffff55;padding-top:8px;font-size:11px}
.outgoing{cursor:default}
.transfer-confirm{text-align:center}
.transfer-confirm>strong{display:block;font-size:33px;margin:8px}
.transfer-confirm p{color:var(--muted)}
.amount-input{background:#fff;border-radius:12px;padding:18px;display:flex;align-items:baseline;gap:8px}
.amount-input span{font-size:22px}
.amount-input strong{font-size:38px}
.transfer-form>p{color:var(--muted);font-size:12px}
.voice-bubble{border:0;background:#fff;border-radius:4px 14px 14px;padding:10px 13px;min-width:178px;text-align:left;display:grid;grid-template-columns:1fr auto;gap:3px 16px;cursor:pointer}
.voice-waves{color:var(--green-dark);letter-spacing:-2px}
.voice-bubble strong{font-size:13px}
.voice-bubble small{grid-column:1/3;color:var(--muted);font-size:10px}
.voice-transcript{background:#fff;margin-top:6px;border-radius:8px;padding:10px 12px;font-size:13px;line-height:1.7;max-width:275px;border-left:3px solid var(--green)}
