:root{--bg:#120d17;--bg2:#19121f;--panel:#211827;--panel2:#281e30;--line:#3b2d45;--gold:#ef9f27;--gold2:#ffca67;--cream:#f5e6c8;--muted:#ad9fac;--white:#fff8ee;--green:#58d18a;--red:#ff6678;--shadow:0 24px 80px rgba(0,0,0,.45);--r:24px}*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:#0d0911;color:var(--white);font-family:Manrope,system-ui,sans-serif;-webkit-tap-highlight-color:transparent}body{overflow-x:hidden}.app-shell{width:min(100%,520px);min-height:100vh;margin:auto;position:relative;background:radial-gradient(80% 50% at 50% 0%,rgba(239,159,39,.11),transparent 65%),linear-gradient(180deg,#120d17 0%,#17101c 55%,#100b14 100%);overflow:hidden}.grain{position:fixed;top:0;right:0;bottom:0;left:0;inset:0;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.5'/%3E%3C/svg%3E")}.ambient{position:absolute;border-radius:50%;filter:blur(70px);pointer-events:none}.ambient-a{width:270px;height:270px;background:rgba(239,159,39,.24);top:70px;right:-140px;animation:driftA 4.5s linear infinite,hueA 6s ease-in-out infinite}.ambient-b{width:230px;height:230px;background:rgba(160,70,200,.24);bottom:170px;left:-140px;animation:driftB 5s linear infinite,hueB 7s ease-in-out infinite}.ambient-c{width:210px;height:210px;background:rgba(30,190,175,.22);top:420px;right:-110px;animation:driftC 5.5s linear infinite,hueC 6.5s ease-in-out infinite}@keyframes hueA{0%,100%{filter:blur(70px) hue-rotate(0deg) saturate(1)}50%{filter:blur(70px) hue-rotate(40deg) saturate(1.3)}}@keyframes hueB{0%,100%{filter:blur(70px) hue-rotate(0deg) saturate(1)}50%{filter:blur(70px) hue-rotate(-45deg) saturate(1.3)}}@keyframes hueC{0%,100%{filter:blur(70px) hue-rotate(0deg) saturate(1)}50%{filter:blur(70px) hue-rotate(55deg) saturate(1.3)}}@keyframes driftC{0%{transform:translate(0,0) scale(1)}12.5%{transform:translate(-20px,-14px) scale(1.05)}25%{transform:translate(-30px,-30px) scale(1.08)}37.5%{transform:translate(-16px,-44px) scale(1.02)}50%{transform:translate(6px,-34px) scale(.96)}62.5%{transform:translate(20px,-8px) scale(.98)}75%{transform:translate(14px,16px) scale(1.03)}87.5%{transform:translate(-6px,10px) scale(1.01)}100%{transform:translate(0,0) scale(1)}}@keyframes driftA{0%{transform:translate(0,0) scale(1)}12.5%{transform:translate(-18px,16px) scale(1.03)}25%{transform:translate(-28px,32px) scale(1.07)}37.5%{transform:translate(-20px,44px) scale(1.04)}50%{transform:translate(0,36px) scale(1)}62.5%{transform:translate(16px,10px) scale(.97)}75%{transform:translate(10px,-18px) scale(.94)}87.5%{transform:translate(-8px,-12px) scale(.97)}100%{transform:translate(0,0) scale(1)}}@keyframes driftB{0%{transform:translate(0,0) scale(1)}12.5%{transform:translate(16px,-14px) scale(1.02)}25%{transform:translate(26px,-28px) scale(1.06)}37.5%{transform:translate(20px,-40px) scale(1.03)}50%{transform:translate(0,-30px) scale(1)}62.5%{transform:translate(-14px,-6px) scale(.97)}75%{transform:translate(-10px,18px) scale(.94)}87.5%{transform:translate(6px,12px) scale(.97)}100%{transform:translate(0,0) scale(1)}}.screen{padding:14px 16px 100px;position:relative;z-index:2}.hidden{display:none!important}.mini-header{height:42px;display:flex;align-items:center;gap:10px}.mini-header .brand-dot{width:34px;height:34px;border-radius:12px;display:grid;place-items:center;background:linear-gradient(145deg,#342338,#19121e);border:1px solid #4a3851;box-shadow:0 8px 25px rgba(0,0,0,.25)}.mini-header b{display:block;font-size:13px}.mini-header span{display:block;color:var(--muted);font-size:10px;margin-top:1px}.online-dot{margin-left:auto;width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 12px rgba(88,209,138,.8)}.app-header{padding:5px 0 12px}.icon-btn,.round-btn{border:1px solid var(--line);background:#1b1422;color:var(--cream);border-radius:13px;cursor:pointer}.icon-btn{margin-left:auto;width:38px;height:34px}.round-btn{width:38px;height:38px;font-size:20px}.progress{display:flex;gap:5px;margin:18px 2px 10px}.progress i{height:3px;border-radius:10px;background:#382a40;flex:1}.progress i:first-child{background:var(--gold)}.onboarding-hero{text-align:center;padding-top:8px}.kicker{font-size:10px;letter-spacing:.17em;color:#a998a9;font-weight:800}.onboarding-hero h1,.hero-copy h1{font-family:Unbounded,sans-serif;letter-spacing:-.05em;font-size:34px;line-height:1.05;margin:9px 0}.onboarding-hero h1 em,.hero-copy h1 em{font-style:normal;color:var(--gold)}.hero-sub{color:var(--muted);font-size:13px;line-height:1.6;max-width:360px;margin:0 auto}.setup-card{margin-top:18px;padding:19px;border:1px solid rgba(255,255,255,.09);background:linear-gradient(160deg,rgba(41,30,48,.96),rgba(28,20,34,.98));border-radius:27px;box-shadow:var(--shadow)}.step-label{font-size:10px;color:var(--gold);font-weight:800;letter-spacing:.14em}.setup-card h2{font-size:20px;margin:6px 0 16px}.field{display:block}.modern-field{margin-top:15px}.modern-field>span{display:block;color:#b9aebb;font-size:12px;font-weight:700;margin:0 0 7px}.modern-field>span small{font-weight:500;color:#776b7b}.modern-field input,.modern-field textarea{width:100%;border:1px solid #3b2d45;background:#19131f;color:var(--white);border-radius:15px;padding:13px 14px;font:600 15px Manrope;outline:none}.modern-field input:focus,.modern-field textarea:focus{border-color:var(--gold);box-shadow:0 0 0 3px rgba(239,159,39,.1)}.modern-field textarea{min-height:72px;resize:none}.drink-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.drink{border:1px solid #3b2d45;background:#1a1421;color:#a99daa;border-radius:15px;min-height:67px;padding:8px 2px;cursor:pointer;font:700 9px Manrope;transition:.2s transform,.2s border-color,.2s background}.drink strong{display:block;font-size:20px;filter:saturate(.8);margin-bottom:4px}.drink.active{border-color:var(--gold);background:linear-gradient(180deg,rgba(239,159,39,.15),#1a1421);color:var(--cream);box-shadow:0 0 22px rgba(239,159,39,.08)}.drink:active{transform:scale(.96)}.location-btn{width:100%;display:flex;align-items:center;gap:11px;text-align:left;border:1px solid #4b3b55;background:#1a1421;color:var(--cream);padding:11px 13px;border-radius:15px}.location-btn .pin{color:var(--gold);font-size:19px}.location-btn b{display:block;font-size:12px}.location-btn small{display:block;color:#807386;font-size:10px;margin-top:2px}.location-btn i{margin-left:auto;font-size:23px;color:#796c7f}.age-confirm{position:relative;display:flex;align-items:center;gap:9px;margin:15px 0 0;color:#a99daa;font-size:11px;cursor:pointer}.age-confirm input{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer;z-index:2}.age-confirm i{width:18px;height:18px;flex-shrink:0;border-radius:6px;border:1px solid #4a3a53;background:#1a1421;position:relative}.age-confirm input:checked~i{background:var(--gold);border-color:var(--gold)}.age-confirm input:checked~i:after{content:'✓';position:absolute;top:0;right:0;bottom:0;left:0;inset:0;display:grid;place-items:center;color:#1a1208;font-weight:900}.cta{width:100%;border:0;border-radius:17px;margin-top:15px;padding:15px 17px;background:linear-gradient(135deg,#f7a62b,#e58c16);color:#211307;font:800 14px Manrope;box-shadow:0 12px 30px rgba(239,159,39,.2);display:flex;justify-content:space-between;align-items:center;cursor:pointer;transition:.2s transform,.2s box-shadow}.cta:active{transform:scale(.98)}.cta b{font-size:22px}.cta.secondary{background:#271c2f;color:var(--cream);border:1px solid var(--line);box-shadow:none}.tiny-note{text-align:center;color:#6e6371;font-size:9px;margin:10px 0 0}
#personDmHint{cursor:pointer;color:var(--gold);text-decoration:underline;font-weight:700}.beer-stage{width:190px;height:190px;margin:-4px auto -4px;position:relative;isolation:isolate}.beer-stage.compact{width:170px;height:150px;margin:-10px auto -5px}.beer-art{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;object-fit:contain;mix-blend-mode:screen;filter:saturate(1.18) contrast(1.05) drop-shadow(0 18px 25px rgba(239,159,39,.2));animation:beerFloat 4.4s ease-in-out infinite}.beer-glow{position:absolute;width:65%;height:45%;left:18%;top:32%;border-radius:50%;background:rgba(239,159,39,.28);filter:blur(30px);animation:glow 2.8s ease-in-out infinite}.ring{position:absolute;inset:14%;border:1px solid rgba(239,159,39,.22);border-radius:50%;animation:ringPulse 2.8s ease-in-out infinite}.bubbles{position:absolute;inset:10%;overflow:hidden;pointer-events:none}.bubble{position:absolute;bottom:18%;width:3px;height:3px;border:1px solid rgba(245,230,200,.7);border-radius:50%;animation:bubbleUp var(--d) linear infinite;animation-delay:var(--delay);left:var(--x);opacity:0}.foam-spray:before,.foam-spray:after{content:'';position:absolute;width:7px;height:7px;border-radius:50%;background:#f5e6c8;left:30%;top:28%;box-shadow:44px -7px 0 2px #f5e6c8,71px 8px 0 1px #f5e6c8,-20px 8px 0 1px #f5e6c8;opacity:.7;animation:spray 2.6s ease-in-out infinite}.foam-spray:after{transform:scale(.55);left:61%;top:24%;animation-delay:.5s}.loading-screen{min-height:100vh;display:grid;place-items:center;align-content:center;gap:8px;text-align:center;padding:30px;position:relative}.loading-screen:before,.loading-screen:after{content:'';position:absolute;left:50%;border-radius:50%;filter:blur(85px);pointer-events:none;mix-blend-mode:screen}.loading-screen:before{width:360px;height:360px;top:35%;background:radial-gradient(circle,rgba(239,159,39,.55),rgba(160,70,200,.28) 55%,transparent 75%);animation:loadGlowA 3.8s ease-in-out infinite}.loading-screen:after{width:320px;height:320px;top:64%;background:radial-gradient(circle,rgba(30,190,175,.42),rgba(239,159,39,.22) 55%,transparent 75%);animation:loadGlowB 4.6s ease-in-out infinite}.loading-screen>*{position:relative;z-index:1}@keyframes loadGlowA{0%,100%{transform:translate(-58%,-50%) scale(1);opacity:.75}50%{transform:translate(-42%,-56%) scale(1.3);opacity:1}}@keyframes loadGlowB{0%,100%{transform:translate(-42%,-50%) scale(1.05);opacity:.6}50%{transform:translate(-58%,-44%) scale(1.3);opacity:.95}}.loading-title{font-weight:800;margin-top:12px;text-shadow:0 0 18px rgba(239,159,39,.5)}.hero-home{display:grid;grid-template-columns:1fr 1fr;align-items:center;min-height:130px;padding-top:0}.hero-copy h1{font-size:27px;margin:7px 0}.hero-copy p{color:var(--muted);font-size:11px;line-height:1.55;max-width:180px}.hero-home .beer-stage{margin:-16px 0 0 14px;width:150px;height:150px}.open-card{position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;gap:10px;padding:11px 15px;border:1px solid var(--line);border-radius:20px;background:linear-gradient(145deg,#241a2b,#1a131f);animation:cardBreathe 4.5s ease-in-out infinite}.open-card:before{content:'';position:absolute;top:0;right:0;bottom:0;left:0;inset:0;background:radial-gradient(circle at 50% 50%,rgba(170,160,175,.35),transparent 62%);opacity:.5;pointer-events:none;animation:cardGlowPulse 4.5s ease-in-out infinite}.open-card-right{display:flex;align-items:center;gap:10px}.open-status{text-align:center}.open-status b{display:block;font-size:18px;animation:titleFlicker 4.6s ease-in-out infinite}.open-status small{display:flex;align-items:center;gap:4px;color:#827587;font-size:12px;margin-top:2px}.bottle-arrow{display:inline-block;color:var(--gold);font-style:normal;font-size:15px;font-weight:900;text-shadow:0 0 6px rgba(239,159,39,.7);animation:arrowNudge 1.1s ease-in-out infinite}.open-card.on .bottle-arrow{display:none}.switch{width:58px;height:32px;border:1px solid #46354f;background:#17111d;border-radius:30px;padding:3px;cursor:pointer}.switch i{display:block;width:24px;height:24px;border-radius:50%;background:#66576b;transition:.25s}.open-card.on{background:linear-gradient(145deg,rgba(239,159,39,.12),#1a131f);animation:cardBreathe 2.4s ease-in-out infinite}.open-card.on:before{background:radial-gradient(circle at 50% 50%,rgba(239,159,39,.55),transparent 65%);animation:cardGlowPulse 2.4s ease-in-out infinite}.open-card.on .switch{background:#8b5311;border-color:var(--gold)}.open-card.on .switch i{transform:translateX(26px);background:var(--gold2);box-shadow:0 0 14px rgba(255,202,103,.6)}.countdown{text-align:center;color:#8c7e91;font-size:10px;margin:3px 0}.radar-card{margin-top:16px;padding:10px 16px 16px;border:1px solid var(--line);border-radius:24px;background:#18121f}
.online-live-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--green);margin-left:8px;vertical-align:middle;box-shadow:0 0 8px rgba(88,209,138,.7);animation:liveDotBlink 1.6s ease-in-out infinite}
@keyframes liveDotBlink{0%,100%{opacity:1}50%{opacity:.2}}.radar-head,.discover-head,.sheet-head{display:flex;align-items:center;justify-content:space-between}.radar-head h2,.discover-head h2,.sheet-head h2{margin:3px 0 0;font-size:21px;letter-spacing:-.04em}.live-pill{font-size:9px;color:var(--green);border:1px solid rgba(88,209,138,.25);padding:6px 8px;border-radius:20px}.live-pill i{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--green);margin-right:4px}.radar{height:205px;position:relative;margin-top:12px;border-radius:20px;overflow:hidden;background:radial-gradient(circle,#34243b 0,#201729 48%,#17111d 72%)}.radar-grid{position:absolute;inset:12%;border:1px solid rgba(239,159,39,.12);border-radius:50%;box-shadow:0 0 0 28px rgba(239,159,39,.025),0 0 0 57px rgba(239,159,39,.02)}.radar-grid:before,.radar-grid:after{content:'';position:absolute;top:0;right:0;bottom:0;left:0;inset:0;border-radius:50%;border:1px dashed rgba(239,159,39,.09)}.radar-grid:after{transform:scale(.52)}.radar-scan{position:absolute;width:50%;height:2px;left:50%;top:50%;transform-origin:left center;background:linear-gradient(90deg,rgba(239,159,39,.7),transparent);animation:scan 3.8s linear infinite}.radar-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:#21182a;border:1px solid var(--gold);box-shadow:0 0 25px rgba(239,159,39,.3);z-index:3}.radar-dot{position:absolute;width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-size:15px;background:linear-gradient(145deg,#2d2037,#1a1321);border:2px solid rgba(239,159,39,.75);box-shadow:0 0 20px rgba(239,159,39,.2);animation:dotPulse 2s ease-in-out infinite}.radar-dot small{position:absolute;top:35px;white-space:nowrap;font-size:8px;color:#a99daa}.radar-foot{display:flex;justify-content:space-between;color:#817385;font-size:10px;margin-top:8px}.radar-foot b{color:var(--cream)}.discover-head{margin:21px 2px 10px}.match-deck{display:flex;flex-direction:column;gap:12px}.match-card{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:25px;background:linear-gradient(145deg,#2a1e31,#1b1422);min-height:205px;padding:17px;display:flex;flex-direction:column;justify-content:flex-end;box-shadow:0 16px 45px rgba(0,0,0,.28);animation:cardIn .45s both}.match-card:before{content:'';position:absolute;top:0;right:0;bottom:0;left:0;inset:0;background:radial-gradient(circle at 82% 18%,rgba(239,159,39,.23),transparent 35%),linear-gradient(135deg,transparent 30%,rgba(255,255,255,.02));pointer-events:none}.avatar-art{position:absolute;right:12px;top:12px;width:125px;height:125px;border-radius:34px;background:radial-gradient(circle at 35% 25%,#ffcb6b,#8f4a1b 35%,#2a1c31 68%);display:grid;place-items:center;font-size:52px;filter:saturate(.9);border:1px solid rgba(255,255,255,.08);box-shadow:0 15px 30px rgba(0,0,0,.25)}.match-top{position:absolute;left:16px;top:16px;display:flex;gap:6px;align-items:center}.online{padding:5px 8px;border-radius:20px;background:rgba(88,209,138,.12);color:var(--green);font-size:8px;font-weight:800}.distance{padding:5px 8px;border-radius:20px;background:rgba(18,13,23,.7);color:#d2c3d0;font-size:8px}.match-name{font-size:21px;font-weight:800;letter-spacing:-.04em;position:relative;z-index:2}.match-meta{color:#9b8c9e;font-size:10px;margin-top:3px;position:relative;z-index:2}.match-bio{font-size:11px;color:#c7b9c4;max-width:70%;line-height:1.45;margin:9px 0;position:relative;z-index:2}.match-actions{display:flex;gap:8px;position:relative;z-index:2}.skip-btn,.want-btn{border-radius:14px;padding:11px 13px;font:800 11px Manrope;cursor:pointer}.skip-btn{flex:1;background:#201827;border:1px solid #3c3044;color:#9b8d9e}.want-btn{flex:2;background:linear-gradient(135deg,#f7a62b,#df8610);border:0;color:#211307;box-shadow:0 8px 22px rgba(239,159,39,.16)}.empty-state{text-align:center;padding:30px 18px;border:1px dashed #3c3044;border-radius:22px;color:#8f8191}.empty-state>span{font-size:38px;display:block}.empty-state b{display:block;color:var(--cream);font-size:16px;margin:7px}.empty-state small{display:block;line-height:1.5}
.chats-subtabs{display:flex;gap:8px;margin:14px 2px 12px}
.chats-subtab{flex:1;position:relative;border:1px solid var(--line);background:#1b1422;color:#a99daa;border-radius:14px;padding:10px 6px;font:800 11.5px Manrope;cursor:pointer;transition:.2s background,.2s color,.2s border-color}
.service-msg{padding:14px;border:1px solid var(--line);border-radius:18px;background:#18121f}
.service-msg.unread{border-color:var(--gold);background:linear-gradient(145deg,rgba(239,159,39,.1),#18121f)}
.service-msg-head{display:flex;align-items:center;gap:10px;margin-bottom:9px}
.service-msg-head>div{flex:1;min-width:0}
.service-msg-hide{flex-shrink:0;width:26px;height:26px;border-radius:50%;border:0;background:rgba(255,255,255,.06);color:#9c8ea0;font-size:12px;display:grid;place-items:center;cursor:pointer}
.service-msg-hide:active{background:rgba(255,255,255,.12);transform:scale(.9)}
.service-msg-icon{width:34px;height:34px;aspect-ratio:1/1;flex-shrink:0;border-radius:50%;display:grid;place-items:center;background:rgba(239,159,39,.16);font-size:16px}
.service-msg-head b{display:block;font-size:13.5px;color:var(--cream)}
.service-msg-head small{display:block;font-size:10.5px;color:var(--gold);margin-top:1px}
.service-msg.personal .service-msg-icon{background:rgba(224,74,74,.18)}
.service-msg.personal .service-msg-head small{color:var(--red)}
.service-msg.personal.unread{border-color:var(--red);background:linear-gradient(145deg,rgba(224,74,74,.1),#18121f)}
.service-msg p{font-size:12.5px;line-height:1.55;color:#c4b8c6;margin:0}
.chats-subtab.active{background:linear-gradient(135deg,#f7a62b,#df8610);border-color:transparent;color:#211307}
.likes-count-badge{position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;padding:0 5px;border-radius:20px;background:var(--red);color:#fff;font:800 10px Manrope;display:grid;place-items:center;box-shadow:0 0 0 2px var(--bg)}
.likes-locked{text-align:center;padding:32px 20px;border:1px dashed #3c3044;border-radius:22px;color:#c7b9c4}
.likes-locked-icon{font-size:36px;display:block;margin-bottom:8px}
.likes-locked b{display:block;color:var(--cream);font-size:16px;margin-bottom:6px}
.likes-locked small{display:block;line-height:1.5;margin-bottom:14px}
.likes-list{display:flex;flex-direction:column;gap:10px}
.like-row{display:flex;align-items:center;gap:11px;padding:10px 12px;border:1px solid var(--line);border-radius:18px;background:#18121f}
.chat-seen{margin-left:6px;font:600 10.5px Manrope;font-style:normal;color:var(--muted);letter-spacing:0;white-space:nowrap}.chat-seen.is-online{color:var(--green)}.chat-seen:empty{display:none}.like-row{cursor:pointer}.like-row:active{transform:scale(.99)}.like-row-avatar{position:relative;width:48px;height:48px;aspect-ratio:1/1;flex-shrink:0;border-radius:50%;overflow:hidden;background:linear-gradient(145deg,#2d2037,#1a1321);display:grid;place-items:center;font-size:22px}
.like-row-avatar img{width:100%;height:100%;object-fit:cover}
.like-row-info{flex:1;min-width:0}
.like-row-info b{display:block;font-size:14px}
.like-row-info small{display:block;color:#9b8c9e;font-size:11px;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.like-row-actions{display:flex;gap:6px;flex-shrink:0}
.like-decline,.like-accept{width:38px;height:38px;border-radius:50%;border:1px solid var(--line);background:#211827;font-size:15px;cursor:pointer}
.like-accept{background:linear-gradient(135deg,#f7a62b,#df8610);border:0}
.like-decline:active,.like-accept:active{transform:scale(.9)}
.empty-state-action{background:none;width:100%;cursor:pointer;font:inherit}
.empty-state-action small{color:var(--cream);font-weight:700}.bottom-nav{position:fixed;z-index:20;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,520px);display:grid;grid-template-columns:repeat(4,1fr);padding:8px 12px calc(8px + env(safe-area-inset-bottom));background:rgba(16,11,21,.86);backdrop-filter:blur(18px);border-top:1px solid rgba(255,255,255,.07)}.bottom-nav-5{grid-template-columns:repeat(5,1fr);padding-left:6px;padding-right:6px}.bottom-nav-5 .nav small{font-size:8px}.bottom-nav-6{grid-template-columns:repeat(6,1fr);padding-left:3px;padding-right:3px}.bottom-nav-6 .nav{min-width:0}.bottom-nav-6 .nav small{font-size:6.6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.bottom-nav-6 .nav span{font-size:18px}.nav{border:0;background:none;color:#706273;display:flex;flex-direction:column;align-items:center;gap:2px;font:600 9px Manrope}.nav span{font-size:20px}.nav.active{color:var(--gold)}.sheet{position:fixed;top:0;right:0;bottom:0;left:0;inset:0;z-index:700;isolation:isolate}
#reportSheet{z-index:9000}.sheet-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;background:rgba(0,0,0,.62);backdrop-filter:blur(5px)}.sheet-panel{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:min(100%,520px);max-height:88vh;overflow:auto;padding:10px 18px calc(24px + env(safe-area-inset-bottom));background:#1a131f;border:1px solid var(--line);border-radius:28px 28px 0 0;box-shadow:0 -30px 80px rgba(0,0,0,.5);animation:sheetUp .35s ease}.sheet-grab{width:44px;height:4px;border-radius:10px;background:#5b4b61;margin:0 auto 18px}.profile-badge{display:flex;align-items:center;gap:11px;padding:12px;border-radius:18px;background:#211827;margin:15px 0}.avatar-big{position:relative;width:46px;height:46px;aspect-ratio:1/1;border-radius:15px;display:grid;place-items:center;background:linear-gradient(145deg,#3b2638,#1e1525);font-size:23px;overflow:visible;flex-shrink:0}

.avatar-big img{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;object-fit:cover;border-radius:inherit}.profile-badge b{display:block}.profile-badge small{display:block;color:#8f8192;font-size:10px;margin-top:2px}.match-overlay{position:fixed;z-index:100;top:0;right:0;bottom:0;left:0;inset:0;background:radial-gradient(circle at 50% 30%,rgba(239,159,39,.28),rgba(18,13,23,.98) 55%);display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px 22px;overflow:hidden}.match-beer{width:230px;height:230px;position:relative}.match-beer img{width:100%;height:100%;object-fit:contain;filter:saturate(1.2) drop-shadow(0 20px 45px rgba(239,159,39,.4));animation:matchBeer .9s cubic-bezier(.2,1.5,.4,1) both}.match-overlay h2{font-family:Unbounded;font-size:28px;letter-spacing:-.05em;margin:8px 0}.match-overlay h2{color:var(--cream)}.match-overlay p{color:#a99baa;font-size:12px;max-width:280px;line-height:1.5}.match-overlay .cta{max-width:340px}.confetti{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;pointer-events:none}.confetti i{position:absolute;width:7px;height:13px;border-radius:2px;background:var(--gold);animation:confetti 1.7s linear both}.toast{position:fixed;z-index:200;left:50%;bottom:92px;transform:translateX(-50%);width:max-content;max-width:90%;padding:11px 15px;border-radius:14px;background:#2c2233;color:var(--cream);border:1px solid #4a3852;box-shadow:var(--shadow);font-size:11px;animation:toast .25s ease}.hidden{display:none!important}@keyframes beerFloat{0%,100%{transform:translateY(0) rotate(-1deg)}50%{transform:translateY(-7px) rotate(1deg)}}@keyframes glow{0%,100%{opacity:.55;transform:scale(.95)}50%{opacity:.95;transform:scale(1.08)}}@keyframes ringPulse{0%,100%{transform:scale(.97);opacity:.45}50%{transform:scale(1.03);opacity:.8}}@keyframes bubbleUp{0%{transform:translateY(10px) scale(.4);opacity:0}15%{opacity:.8}100%{transform:translateY(-145px) translateX(8px) scale(1.15);opacity:0}}@keyframes spray{0%,100%{transform:translateY(3px) scale(.85);opacity:.25}50%{transform:translateY(-7px) scale(1);opacity:.85}}@keyframes liquid{to{transform:translateY(-3px)}}@keyframes foam{to{transform:translateY(-2px) scale(1.04)}}@keyframes scan{to{transform:rotate(360deg)}}@keyframes dotPulse{0%,100%{transform:scale(.94);box-shadow:0 0 10px rgba(239,159,39,.16)}50%{transform:scale(1.05);box-shadow:0 0 25px rgba(239,159,39,.35)}}@keyframes cardIn{from{opacity:0;transform:translateY(14px) scale(.98)}to{opacity:1;transform:none}}@keyframes sheetUp{from{transform:translate(-50%,100%)}to{transform:translate(-50%,0)}}@keyframes matchBeer{0%{transform:scale(.45) rotate(-10deg);opacity:0}70%{transform:scale(1.08) rotate(3deg)}100%{transform:scale(1) rotate(0);opacity:1}}@keyframes confetti{0%{transform:translateY(-30px) rotate(0);opacity:1}100%{transform:translateY(100vh) rotate(720deg);opacity:0}}@keyframes toast{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}@media(max-width:380px){.hero-home{grid-template-columns:1.05fr .95fr}.hero-home .beer-stage{width:120px;height:120px;margin-left:11px}.onboarding-hero h1,.hero-copy h1{font-size:29px}.drink-grid{grid-template-columns:repeat(3,1fr)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}}
.progress i.done{background:var(--gold)}
.loc-banner{display:flex;align-items:center;gap:10px;padding:12px;margin:4px 0 14px;border:1px solid rgba(239,159,39,.32);border-radius:18px;background:rgba(239,159,39,.08)}
.loc-icon{width:34px;height:34px;flex-shrink:0;display:grid;place-items:center;border-radius:11px;background:rgba(239,159,39,.15);color:var(--gold);font-size:19px}
.loc-copy{flex:1}.loc-copy b{display:block;font-size:12.5px}.loc-copy small{color:var(--muted);font-size:10px}
.loc-btn{flex-shrink:0;background:var(--gold);color:#1a1007;border:0;border-radius:12px;padding:9px 14px;font-weight:800;font-size:11.5px}
.map-modal{position:fixed;top:0;right:0;bottom:0;left:0;inset:0;z-index:600;background:rgba(6,4,9,.75);display:flex;align-items:center;justify-content:center;padding:18px;isolation:isolate;overscroll-behavior:contain}
.map-modal-inner{width:100%;max-width:420px;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:16px;box-shadow:var(--shadow)}
.map-modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.map-modal-head b{font-size:14px}
.picker-map{height:280px;border-radius:16px;overflow:hidden;border:1px solid var(--line)}
.map-hint{font-size:10.5px;color:var(--muted);text-align:center;margin:10px 0}
.pin-icon span{display:block;width:18px;height:18px;border-radius:50% 50% 50% 0;background:var(--gold);border:2px solid #1a1007;transform:rotate(-45deg);box-shadow:0 0 10px rgba(239,159,39,.7)}
.cta.small{padding:12px;font-size:13px}
canvas{width:100%;height:100%;display:block;position:relative;z-index:2;filter:drop-shadow(0 26px 34px rgba(0,0,0,.45))}
.beer-sheen{position:absolute;inset:10%;z-index:1;pointer-events:none;background:radial-gradient(circle at 50% 45%,rgba(255,188,66,.12),transparent 52%);filter:blur(18px)}
.step-help{margin:-4px 0 18px;color:var(--muted);font-size:13px;line-height:1.55}
.photo-picker{display:block;cursor:pointer}
.photo-preview{position:relative;width:170px;height:210px;margin:10px auto 20px;border-radius:28px;border:1px dashed rgba(245,230,200,.28);background:linear-gradient(145deg,rgba(255,255,255,.08),rgba(255,255,255,.025));display:flex;align-items:center;justify-content:center;flex-direction:column;overflow:hidden;transition:.25s}
.photo-preview:hover{border-color:rgba(239,159,39,.75);transform:translateY(-2px)}
.photo-preview span{font-size:42px;color:var(--gold)}
.photo-preview small{margin-top:6px;color:var(--muted)}
.photo-preview img{width:100%;height:100%;object-fit:cover}
.photo-ok{position:absolute!important;right:12px;top:12px;width:32px;height:32px;aspect-ratio:1/1;border-radius:50%;display:grid!important;place-items:center;background:var(--gold);color:#1b1420!important;font-size:18px!important;font-weight:900;box-shadow:0 8px 24px rgba(239,159,39,.4)}
.verify-card{width:100%;display:flex;align-items:center;gap:13px;text-align:left;padding:16px;border:1px solid rgba(245,230,200,.12);border-radius:20px;background:rgba(255,255,255,.055);color:var(--cream);margin:8px 0 18px;cursor:pointer;font:inherit}
.verify-card:disabled{opacity:.75}
.verify-card .verify-icon{width:44px;height:44px;display:grid;place-items:center;border-radius:15px;background:rgba(239,159,39,.14);font-size:21px;color:var(--gold)}
.verify-card span:nth-child(2){display:flex;flex-direction:column;gap:4px;flex:1}
.verify-card small{color:var(--muted);font-size:11px;line-height:1.35}
.verify-card i{font-size:22px;color:var(--gold)}
.big-location{padding:18px;margin-bottom:16px}
.photo-avatar img{width:100%;height:100%;object-fit:cover;border-radius:inherit}
.map-card{margin:12px 2px;padding:7px 13px 13px;border:1px solid rgba(245,230,200,.1);border-radius:28px;background:linear-gradient(180deg,rgba(255,255,255,.065),rgba(255,255,255,.025));box-shadow:0 22px 55px rgba(0,0,0,.22);overflow:hidden;isolation:isolate;position:relative;z-index:0}
.live-map{height:240px;border-radius:22px;overflow:hidden;background:#19141b;position:relative;isolation:isolate;z-index:0}
.map-location-prompt{width:100%;height:230px;border-radius:22px;border:1px dashed var(--line);background:linear-gradient(160deg,rgba(239,159,39,.08),rgba(25,20,27,.9));display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;padding:20px;cursor:pointer}
.map-location-prompt-icon{font-size:34px;animation:mapPromptBounce 1.8s ease-in-out infinite}
@keyframes mapPromptBounce{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
.map-location-prompt b{font-size:15px;color:var(--cream)}
.map-location-prompt small{color:var(--muted);font-size:11.5px;line-height:1.4;max-width:290px}
.map-location-prompt:active{transform:scale(.98)}
.map-foot{display:flex;justify-content:space-between;gap:12px;padding:12px 3px 0;color:var(--muted);font-size:11px}
.map-foot b{color:var(--cream);font-size:14px}
.leaflet-container{font-family:Manrope,system-ui,sans-serif;background:#1a151b}
.map-person,.map-me,.map-prop{border:0!important;background:transparent!important}
.map-person{width:58px!important;height:58px!important;aspect-ratio:1/1;position:relative!important;display:grid!important;place-items:center;font-size:32px;text-align:center;filter:drop-shadow(0 5px 8px rgba(0,0,0,.35))}
.map-person-photo{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;border:3px solid #ef9f27;box-shadow:0 5px 22px rgba(0,0,0,.45);background-size:cover;background-position:center;filter:brightness(1.12) contrast(1.03)}
/* Контейнер метки ничего не рисует — иначе поверх внутреннего круга
   рисовался второй, с собственной рамкой, и фото тонуло между ними. */
.map-me{aspect-ratio:1/1;display:grid!important;place-items:center;background:transparent!important;border:0!important}
.camera-wrap{position:relative;width:100%;aspect-ratio:3/4;max-width:280px;margin:10px auto 18px;border-radius:26px;overflow:hidden;background:#0d0911;border:1px solid rgba(245,230,200,.14)}
.camera-wrap video,.camera-wrap img{width:100%;height:100%;object-fit:cover;display:block;transform:scaleX(-1)}
.shutter-btn{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);width:62px;height:62px;border-radius:50%;background:rgba(255,255,255,.12);border:3px solid var(--cream);cursor:pointer;padding:0}
.shutter-btn i{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;width:46px;height:46px;border-radius:50%;background:var(--gold);display:block}
.shutter-btn:active i{background:var(--gold2)}
.retake-btn{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);background:rgba(16,11,20,.75);color:var(--cream);border:1px solid rgba(245,230,200,.25);border-radius:20px;padding:9px 18px;font:700 12px Manrope;cursor:pointer}
.privacy-note{margin:16px 2px 0;padding:12px 14px;border:1px solid rgba(239,159,39,.25);border-radius:16px;background:rgba(239,159,39,.06);color:var(--muted);font-size:11.5px;line-height:1.5}
.photo-avatar{border:0;padding:0;cursor:pointer;position:relative}
/* Карандаш убран: фотографиями управляет сетка ниже, где главное фото
   помечено отдельно. Значок на аватарке дублировал её и путал. */
.count-badge{display:inline-block;background:rgba(239,159,39,.15);color:var(--gold);font-size:13px;font-weight:800;padding:2px 9px;border-radius:12px;margin-left:6px;vertical-align:middle}
.people-list{display:flex;flex-direction:column;gap:9px}
.person-row{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:11px 13px;border:1px solid var(--line);border-radius:18px;background:linear-gradient(145deg,#241a2b,#1a131f);cursor:pointer;font:inherit;color:inherit}
.person-row:active{transform:scale(.98)}
.person-avatar{position:relative;width:46px;height:46px;aspect-ratio:1/1;flex-shrink:0;border-radius:14px;overflow:visible;background:radial-gradient(circle at 35% 25%,#ffcb6b,#8f4a1b 35%,#2a1c31 68%);display:grid;place-items:center;font-size:22px}
.person-avatar img{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;object-fit:cover;border-radius:14px}
.person-info{flex:1;min-width:0}
.person-info b{display:block;font-size:14px;line-height:1.2}
.person-info small{display:flex;align-items:center;gap:5px;color:#a99daa;font-size:11px;margin-top:1px;line-height:1.2}
.dot-online{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--green);box-shadow:0 0 8px rgba(88,209,138,.7)}
.person-row .chev{color:#6d6072;font-size:20px}
.map-modal-full{max-width:100%;width:100%;height:100vh;height:100dvh;border-radius:0;display:flex;flex-direction:column;padding:16px}
.live-map-full{flex:1;border-radius:18px;overflow:hidden;isolation:isolate;position:relative;z-index:0}
.app-header{display:flex;align-items:center;justify-content:space-between;gap:10px}
.header-avatar-btn{border:0;background:none;padding:0;cursor:pointer;flex-shrink:0}
.header-avatar{position:relative;width:36px;height:36px;aspect-ratio:1/1;flex-shrink:0;border-radius:11px;overflow:visible;background:linear-gradient(145deg,#342338,#19121e);border:1px solid #4a3851;display:grid;place-items:center;font-size:18px}
.header-avatar img{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;object-fit:cover;border-radius:11px}
.status-pill-wrap{flex:1;min-width:0}
.status-pill-view{display:flex;align-items:center;justify-content:flex-start;gap:8px;width:100%;text-align:left;border:0;background:none;padding:8px 2px;cursor:pointer;color:var(--muted);font-size:16px;font-weight:800;line-height:1.2}
.status-pill-view span:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:0 1 auto;min-width:0}
#statusPillText{font-size:16px!important;line-height:1.2!important;margin-top:0!important;font-style:italic;font-weight:600}
.status-edit-icon{flex-shrink:0;color:var(--gold);font-size:19px!important;transform:scaleX(-1)}
.status-pill-edit{display:flex;gap:7px;align-items:center}
.status-pill-edit input{flex:1;min-width:0;border:1px solid var(--gold);background:#1b1422;border-radius:999px;padding:9px 16px;color:var(--cream);font:600 16px Manrope;outline:none}
.status-check{width:34px;height:34px;flex-shrink:0;border:0;border-radius:50%;background:var(--gold);color:#1a1007;font-weight:900;font-size:15px;cursor:pointer}
#chatSend{width:46px;height:46px;font-size:20px;box-shadow:0 4px 14px rgba(239,159,39,.35);transition:transform .15s cubic-bezier(.34,1.56,.64,1)}
#chatSend:active{transform:scale(.88)}
.chat-list{display:flex;flex-direction:column;gap:2px}
.chat-row{display:flex;align-items:center;gap:12px;width:100%;text-align:left;padding:11px 6px;border:0;border-bottom:1px solid var(--line);background:none;cursor:pointer;font:inherit;color:inherit}
.chat-row:last-child{border-bottom:0}
.chat-row:active{background:rgba(255,255,255,.03)}
.chat-avatar{width:50px;height:50px;aspect-ratio:1/1;flex-shrink:0;border-radius:50%;overflow:hidden;background:radial-gradient(circle at 35% 25%,#ffcb6b,#8f4a1b 35%,#2a1c31 68%);display:grid;place-items:center;font-size:22px;cursor:pointer}
.chat-avatar img{width:100%;height:100%;object-fit:cover}
.chat-avatar.vip,#chatHeadAvatar.vip{border:2px solid var(--gold);box-sizing:border-box}
.vip-inline{display:inline-block;vertical-align:middle;margin-left:5px;font:900 7.5px Manrope;letter-spacing:.02em;color:#301c00;background:linear-gradient(135deg,#ffe9a8,#f0b429 40%,#c8860a 78%);padding:1.5px 5px;border-radius:4px;border:1px solid #ffe9a8}
.chat-info{flex:1;min-width:0}
.chat-info b{display:block;font-size:14.5px}
.chat-info small{display:block;color:#a99daa;font-size:12px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chat-row .chev{color:#6d6072;font-size:20px}
.dob-wheels{display:grid;grid-template-columns:1fr 1.4fr 1fr;gap:8px}
.dob-select{width:100%;border:1px solid #3b2d45;background:#19131f;color:var(--white);border-radius:15px;padding:13px 8px;font:600 15px Manrope;outline:none;text-align:center}
.interest-grid{display:flex;flex-wrap:wrap;gap:7px}
.interest-chip{border:1px solid #3b2d45;background:#1a1421;color:#a99daa;border-radius:20px;padding:8px 13px;cursor:pointer;font:700 12px Manrope}
.interest-chip.active{border-color:var(--gold);background:linear-gradient(180deg,rgba(239,159,39,.15),#1a1421);color:var(--cream)}
.interest-chip.active::before{content:'✓ ';color:var(--gold);font-weight:800}
.person-interests-block{margin:14px 2px 0}
.common-pct{display:inline-block;background:rgba(88,209,138,.12);color:var(--green);border:1px solid rgba(88,209,138,.3);border-radius:20px;padding:6px 12px;font-size:11.5px;font-weight:700;margin-bottom:9px}
.looking-for-pill{display:inline-block;background:rgba(239,159,39,.1);color:var(--gold2);border:1px solid rgba(239,159,39,.3);border-radius:20px;padding:6px 12px;font-size:11.5px;font-weight:700;margin-bottom:9px}
.interest-chips-view{display:flex;flex-wrap:wrap;gap:6px}
.interest-chip-view{border:1px solid var(--line);background:#1b1422;color:var(--cream);border-radius:16px;padding:6px 11px;font-size:11px}
.interest-chip-view.shared{border-color:var(--gold);background:rgba(239,159,39,.1);color:var(--gold2)}
.map-tip-status{position:absolute;bottom:100%;left:50%;transform:translateX(-50%);margin-bottom:5px;background:#1b1422;color:var(--cream);border:1px solid var(--gold);border-radius:9px;font:600 9.5px Manrope;letter-spacing:.01em;padding:2px 7px;white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis;box-shadow:0 4px 12px rgba(0,0,0,.35);pointer-events:none;z-index:5}
.header-rating,.rating-badge{border:1px solid var(--line);background:#1b1422;color:var(--gold2);border-radius:20px;padding:6px 11px;font:800 11.5px Manrope;cursor:pointer;flex-shrink:0}
.rating-badge{margin-left:auto}
.reviews-list{display:flex;flex-direction:column;gap:10px;max-height:60vh;overflow:auto}
.review-row{padding:12px;border:1px solid var(--line);border-radius:16px;background:#1b1422}
.review-row-head{display:flex;align-items:center;gap:9px}
.review-avatar{width:32px;height:32px;aspect-ratio:1/1;border-radius:50%;overflow:hidden;background:radial-gradient(circle at 35% 25%,#ffcb6b,#8f4a1b 35%,#2a1c31 68%);display:grid;place-items:center;font-size:15px;flex-shrink:0;border:0;padding:0;cursor:pointer}
.review-avatar:active{transform:scale(.92)}
.review-avatar img{width:100%;height:100%;object-fit:cover}
.review-row-head b{font-size:12.5px;flex:1}
.review-stars{color:var(--gold);font-size:12px;letter-spacing:1px}
.review-text{margin:7px 0 0;font-size:12px;color:#c7b9c4;line-height:1.5}
.rate-stars{display:flex;justify-content:center;gap:10px;margin:6px 0 16px}
.rate-star{border:0;background:none;font-size:38px;color:#3b2d45;cursor:pointer;transition:.15s}
.rate-star.active{color:var(--gold)}
.rate-textarea{width:100%;border:1px solid #3b2d45;background:#19131f;color:var(--white);border-radius:15px;padding:13px 14px;font:600 14px Manrope;outline:none;min-height:70px;resize:none}
.row-rating{margin-left:6px;color:var(--gold2);font-size:11px;font-weight:800}
.vip-badge-tag{position:absolute;bottom:-5px;left:50%;transform:translateX(-50%);display:inline-flex;align-items:center;gap:3px;font:900 7px Manrope;letter-spacing:.02em;color:#301c00;background:linear-gradient(135deg,#ffe9a8,#f0b429 40%,#c8860a 78%,#a86800);padding:1.5px 4.5px 1px 4.5px;border-radius:5px;border:1px solid #ffe9a8;box-shadow:0 1px 4px rgba(0,0,0,.5),0 0 6px 1px rgba(200,134,10,.8),inset 0 1px 0 rgba(255,255,255,.55);pointer-events:none;z-index:5;white-space:nowrap}
.map-person .vip-badge-tag,.map-me .vip-badge-tag{bottom:-6px;font-size:7.5px;padding:1.5px 5px 1px 5px;border-radius:6px;gap:2px}
/* На маленьком 36px-аватаре виджета «Кто в караоке» тот же бейдж выглядел
   непропорционально огромным — тут он предметно свой, уменьшенный. */
.header-avatar .vip-badge-tag{font-size:6px;padding:1px 3px 1px 3px;bottom:-4px;border-radius:4px;gap:1.5px}
.feed-post-avatar .vip-badge-tag{font-size:5.5px;padding:1px 2.5px 1px 2.5px;bottom:-3px;border-radius:4px;gap:1.5px}
.feed-post-views{display:block;opacity:.55;font-size:10px}
/* «Мой профиль» — почти у самого угла шторки, а не через привычный отступ. */
#profileSheet .sheet-grab{margin-bottom:6px}
.person-avatar.vip,.header-avatar.vip,.avatar-big.vip{box-shadow:0 0 0 2.5px #d4a017,0 0 12px 2px rgba(212,160,23,.7)}
.map-person.vip .map-person-photo{box-shadow:0 0 0 2.5px #d4a017,0 0 14px 3px rgba(212,160,23,.75)!important}
@keyframes vipGlow{0%,100%{filter:brightness(1)}50%{filter:brightness(1.25)}}
@keyframes confettiBurst{0%{transform:translate(0,0) rotate(0) scale(.5);opacity:0}18%{opacity:1}100%{transform:translate(var(--tx),var(--ty)) rotate(var(--rot)) scale(1);opacity:0}}
@keyframes titleFlicker{
  0%,100%{text-shadow:0 0 8px rgba(239,159,39,.45)}
  4%{text-shadow:0 0 3px rgba(239,159,39,.15)}
  9%{text-shadow:0 0 15px rgba(239,159,39,.8)}
  14%{text-shadow:0 0 5px rgba(239,159,39,.25)}
  21%{text-shadow:0 0 17px rgba(239,159,39,.88)}
  29%{text-shadow:0 0 4px rgba(239,159,39,.2)}
  38%{text-shadow:0 0 12px rgba(239,159,39,.65)}
  47%{text-shadow:0 0 3px rgba(239,159,39,.15)}
  56%{text-shadow:0 0 16px rgba(239,159,39,.82)}
  64%{text-shadow:0 0 6px rgba(239,159,39,.3)}
  73%{text-shadow:0 0 13px rgba(239,159,39,.7)}
  81%{text-shadow:0 0 3px rgba(239,159,39,.15)}
  90%{text-shadow:0 0 15px rgba(239,159,39,.8)}
  95%{text-shadow:0 0 5px rgba(239,159,39,.25)}
}
@keyframes cardBreathe{0%,100%{transform:scale(1)}50%{transform:scale(1.022)}}
@keyframes cardGlowPulse{0%,100%{opacity:.3}50%{opacity:1}}
@keyframes arrowNudge{0%,100%{transform:translateX(0);opacity:.7}50%{transform:translateX(8px);opacity:1}}
@keyframes atomFly{0%{opacity:0;transform:scale(.6) translateY(0)}20%{opacity:1;transform:scale(1) translateY(-2px)}100%{opacity:0;transform:scale(.2) translateY(-30px)}}
@keyframes atomGather{0%{opacity:0;transform:scale(.2) translateY(-30px)}60%{opacity:1;transform:scale(1) translateY(-2px)}100%{opacity:0;transform:scale(.6) translateY(0)}}
.proposal-list{display:flex;flex-direction:column;gap:10px}
.proposal-card{width:100%;text-align:left;border:1px solid var(--line);border-radius:20px;background:linear-gradient(145deg,#241a2b,#1a131f);padding:15px;cursor:pointer;font:inherit;color:inherit}
.proposal-card-head{display:flex;align-items:center;gap:9px;margin-bottom:8px}
.proposal-avatar{width:32px;height:32px;aspect-ratio:1/1;border-radius:50%;overflow:hidden;background:radial-gradient(circle at 35% 25%,#ffcb6b,#8f4a1b 35%,#2a1c31 68%);display:grid;place-items:center;font-size:15px;flex-shrink:0}
.proposal-avatar img{width:100%;height:100%;object-fit:cover}
.proposal-card-head b{font-size:12.5px;flex:1}
.proposal-title{font-size:16px;font-weight:800;margin-bottom:6px}
.proposal-meta{display:flex;flex-wrap:wrap;gap:10px;color:var(--muted);font-size:11px}
.proposal-meta span{white-space:nowrap}
.prop-filter{display:flex;gap:8px;margin:14px 2px 10px}
.prop-filter-chip{border:1px solid var(--line);background:#1b1422;color:var(--muted);border-radius:20px;padding:8px 15px;font:700 12px Manrope;cursor:pointer}
.prop-filter-chip.active{border-color:var(--gold);background:linear-gradient(180deg,rgba(239,159,39,.15),#1a1421);color:var(--cream)}

.map-me.evaporating .map-me-inner{animation:mapMeEvaporate .85s ease-in forwards}
@keyframes mapMeEvaporate{0%{filter:grayscale(0);opacity:1;transform:scale(1)}45%{filter:grayscale(1);opacity:1;transform:scale(1.08)}100%{filter:grayscale(1);opacity:0;transform:scale(.4)}}
.map-me.materializing .map-me-inner{animation:mapMeMaterialize .6s cubic-bezier(.2,.9,.35,1.3) both}
@keyframes mapMeMaterialize{0%{opacity:0;transform:scale(.3)}55%{opacity:1;transform:scale(1.14)}100%{opacity:1;transform:scale(1)}}
.cta.rate-disabled{opacity:.45;filter:grayscale(1);cursor:not-allowed;box-shadow:none}
#personDmBtn.rate-disabled{cursor:pointer}
.place-suggest{margin-top:-10px;margin-bottom:12px;border:1px solid #3b2d45;background:#19131f;border-radius:15px;overflow:hidden}
.place-suggest-item{display:block;width:100%;text-align:left;border:0;border-bottom:1px solid #2a2130;background:none;color:var(--cream);padding:11px 14px;font:600 12.5px Manrope;cursor:pointer}
.place-suggest-item:last-child{border-bottom:0}
.place-suggest-item small{display:block;color:#8f8192;font-size:10px;margin-top:2px;font-weight:500}
.place-suggest-item:active{background:#241a2b}
.sheet-head-actions{display:flex;gap:8px;flex-shrink:0}
.chat-sheet-panel{display:flex;flex-direction:column;position:fixed;top:0;right:0;bottom:0;left:0;inset:0;bottom:0;left:0;top:0;transform:none;width:100%;max-width:100%;height:100vh;height:100dvh;height:var(--tg-vh,100dvh);max-height:100vh;max-height:100dvh;max-height:var(--tg-vh,100dvh);border-radius:0;padding-top:calc(10px + env(safe-area-inset-top));animation:chatSheetUp .26s cubic-bezier(.22,.9,.32,1)}
@keyframes chatSheetUp{from{transform:translateY(100%)}to{transform:translateY(0)}}
.chat-sheet-panel:before{content:'';position:absolute;top:0;right:0;bottom:0;left:0;inset:0;z-index:0;pointer-events:none;opacity:.5;background:var(--aur-bg,radial-gradient(42% 32% at 12% 14%,rgba(239,159,39,.55),transparent 70%));background-size:180% 180%;animation:chatAuroraDrift var(--aur-d1,26s) ease-in-out infinite alternate,chatAuroraHue var(--aur-d2,48s) linear infinite;animation-delay:var(--aur-delay,0s),var(--aur-delay,0s)}
@keyframes chatAuroraDrift{0%{background-position:0% 0%}50%{background-position:100% 60%}100%{background-position:20% 100%}}
@keyframes chatAuroraHue{to{filter:hue-rotate(360deg)}}
.chat-sheet-panel>*{position:relative;z-index:1}
.chat-head-info{display:flex;align-items:center;gap:9px}
.chat-messages{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:8px;min-height:200px;padding:4px 2px}
.chat-bubble{max-width:78%;padding:10px 13px;border-radius:16px;font-size:13px;line-height:1.4;word-wrap:break-word}
.chat-bubble.mine{align-self:flex-end;background:linear-gradient(135deg,#f7a62b,#df8610);color:#211307;border-bottom-right-radius:4px}
.chat-bubble.theirs{align-self:flex-start;background:#211827;color:var(--cream);border:1px solid var(--line);border-bottom-left-radius:4px}
.chat-bubble small{display:block;margin-top:3px;font-size:9px;opacity:.6}
.unread-badge{background:var(--gold);color:#211307;font-size:10px;font-weight:800;min-width:18px;height:18px;border-radius:9px;display:grid;place-items:center;padding:0 5px;flex-shrink:0}
.chat-photo-btn{border:0;background:none;color:var(--gold);font-size:20px;cursor:pointer;flex-shrink:0;padding:0 4px;transition:transform .15s cubic-bezier(.34,1.56,.64,1)}
.chat-photo-btn:active{transform:scale(.8)}
.chat-photo-btn.sent-pop{animation:photoSentPop .4s ease}
@keyframes photoSentPop{0%{transform:scale(1)}35%{transform:scale(1.35) rotate(-8deg)}65%{transform:scale(.92) rotate(4deg)}100%{transform:scale(1) rotate(0)}}
.chat-bubble img{max-width:180px;max-height:180px;width:auto;height:auto;object-fit:cover;border-radius:12px;display:block;margin-top:2px;cursor:pointer}
.chat-bubble .read-tick{opacity:.55;display:inline-flex}
.chat-bubble.mine .read-tick.read{opacity:1;color:#2a6b3f}
.read-tick .tick{font-style:normal}
.read-tick .tick-2{margin-left:-5px}
.nav-icon-wrap{position:relative;display:inline-block}
.nav-badge{position:absolute;top:-6px;right:-9px;background:var(--red);color:#fff;font:800 9px Manrope;font-style:normal;min-width:15px;height:15px;border-radius:8px;display:grid;place-items:center;padding:0 3px;border:1.5px solid var(--bg)}
.location-btn-fallback{opacity:.72;padding:9px 13px}
.location-btn-fallback b{font-size:11.5px}
.chat-online-status{display:block;margin-top:1px;font-size:10.5px;color:#8f8192}
.chat-online-status.is-typing{color:var(--gold);font-style:italic}
.chat-online-status.is-live{color:var(--green)}
.chat-online-status.is-live:before{content:'●';margin-right:4px;font-size:8px}
.vip-get-btn{position:relative;background:none;border:0;padding:0;cursor:pointer;z-index:1;overflow:visible}
.vip-get-btn-inner{position:relative;overflow:hidden;display:inline-flex;align-items:center;gap:5px;border:1px solid var(--gold);background:linear-gradient(160deg,#ffd67a,#f0b429 55%,#c8860a);color:#3a2408;font:800 11px Manrope;border-radius:16px;padding:7px 13px;white-space:nowrap;box-shadow:0 4px 18px rgba(239,159,39,.55)}
.vip-get-btn-inner:before{content:'';position:absolute;top:0;left:-75%;width:45%;height:100%;background:linear-gradient(115deg,transparent 0%,rgba(255,255,255,.85) 50%,transparent 100%);transform:skewX(-20deg);animation:ctaShine 2.6s ease-in-out infinite;pointer-events:none}
.vip-get-btn:after{content:'';position:absolute;inset:-8px;border-radius:20px;background:radial-gradient(ellipse at center,rgba(239,159,39,.4),transparent 70%);filter:blur(6px);z-index:-1;animation:vipAmbient 2.6s ease-in-out infinite}
@keyframes vipAmbient{0%,100%{opacity:.6;transform:scale(.96)}50%{opacity:.85;transform:scale(1.06)}}
.vip-perks{list-style:none;margin:14px 0 0;padding:0;display:flex;flex-direction:column;gap:9px}
.vip-perks li{font-size:12.5px;color:var(--cream);line-height:1.4;padding:10px 13px;border:1px solid var(--line);border-radius:14px;background:#1b1422}
.vip-section-title{font-size:11px;font-weight:800;letter-spacing:.08em;color:var(--gold);text-transform:uppercase;margin:22px 2px 4px}
.vip-hint{color:var(--muted);font-size:12px;margin:2px 2px 12px}
.vip-hint b{color:var(--cream)}
.vip-tiers{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.vip-tier{display:flex;align-items:center;justify-content:space-between;padding:12px 14px;border:1px solid var(--line);border-radius:15px;background:#1b1422}
.vip-tier b{display:block;font-size:13px;color:var(--cream)}
.vip-tier small{display:block;color:var(--muted);font-size:10.5px;margin-top:2px}
.vip-tier-btn{border:1px solid var(--gold);background:none;color:var(--gold2);font:800 11px Manrope;border-radius:12px;padding:8px 12px;cursor:pointer;flex-shrink:0}
.vip-tier-btn:disabled{opacity:.4;cursor:not-allowed}
.vip-tier.done{border-color:rgba(88,209,138,.4)}
.vip-choice-intro{text-align:center;color:var(--cream);font-size:13px;font-weight:700;margin:20px 2px 4px}
.vip-path-card{margin-top:10px;padding:14px;border:1px solid var(--line);border-radius:20px;background:linear-gradient(160deg,rgba(41,30,48,.6),rgba(28,20,34,.5))}
.vip-path-card .vip-section-title{margin:0 0 4px}
.vip-or-divider{display:flex;align-items:center;gap:10px;margin:14px 2px;color:#6e6371;font-size:11px;font-weight:800;text-transform:uppercase}
.vip-or-divider:before,.vip-or-divider:after{content:'';flex:1;height:1px;background:var(--line)}
.prop-point-status{margin:8px 2px 0;font-size:11.5px;color:var(--muted)}
.prop-point-status.ok{color:var(--green)}
.beer-stage-img{position:relative}
.beer-stage-img:before{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:78%;height:78%;border-radius:50%;background:radial-gradient(circle,rgba(239,159,39,.22),transparent 72%);filter:blur(14px);opacity:.5;transition:opacity .5s ease,background .5s ease;z-index:0}
.beer-stage-img.on:before{opacity:1;background:radial-gradient(circle,rgba(239,159,39,.5),transparent 72%)}
.beer-stage-img #beerCheersImg{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;object-fit:contain;filter:brightness(.86) saturate(.85);transition:filter .5s ease;z-index:1}
.beer-stage-img.on #beerCheersImg{filter:brightness(1.08) saturate(1.15)}
.prop-point-preview{height:130px;border-radius:16px;overflow:hidden;margin-top:8px;border:1px solid var(--line)}
.pin-emoji{font-size:26px;display:block;filter:drop-shadow(0 3px 4px rgba(0,0,0,.5))}
.cta-small-btn{flex-shrink:0;border:0;border-radius:16px;padding:10px 14px;background:linear-gradient(135deg,#f7a62b,#df8610);color:#211307;font:800 12.5px Manrope;white-space:nowrap;cursor:pointer;box-shadow:0 8px 20px rgba(239,159,39,.2)}
.cta-centered{justify-content:center;gap:8px}
.cta-gated{background:#4a4150;color:#b7abb9;box-shadow:none}
.cta-gated.ready{background:linear-gradient(135deg,#f7a62b,#e58c16);color:#211307;box-shadow:0 12px 30px rgba(239,159,39,.2)}
.cta-danger{width:100%;border:1px solid rgba(255,102,120,.4);background:rgba(255,102,120,.1);color:var(--red);border-radius:17px;padding:14px 17px;font:800 14px Manrope;cursor:pointer;margin-top:10px}
.cta-danger:active{transform:scale(.98)}
.cta-mini{display:block;width:100%;border:0;background:transparent;color:#776b7b;border-radius:10px;padding:8px;font:700 11px Manrope;cursor:pointer;margin-top:12px;text-align:center}
.cta-mini:active{opacity:.6}
.chat-pinned-bar{display:flex;align-items:center;gap:8px;width:100%;text-align:left;border:1px solid var(--gold);background:rgba(239,159,39,.1);border-radius:14px;padding:8px 10px;margin-top:8px;cursor:pointer}
.chat-pinned-bar .pin{flex-shrink:0;font-size:14px}
.chat-pinned-bar #chatPinnedText{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:11.5px;color:var(--cream)}
.chat-pinned-bar #chatUnpinBtn{flex-shrink:0;color:var(--muted);font-size:12px;font-style:normal}
.chat-bubble-wrap{position:relative;display:flex;align-items:center}.bubble-reply-btn{display:none}/* Видимостью управляет display, а не прозрачность. Прозрачная кнопка всё
   равно существует и занимает место, и достаточно одного правила или сбоя,
   поднимающего opacity, чтобы стрелки высыпались разом на каждом сообщении.
   Теперь их просто нет в раскладке, кроме одной: класс reply-hot висит
   максимум на одном пузыре, значит больше одной не покажется никогда.
   Позиционируем абсолютом в свободном поле сбоку — пузырь занимает 78%
   ширины, место есть, и строка не дёргается при появлении. */
.chat-bubble-wrap.reply-hot .bubble-reply-btn{display:grid;place-items:center;position:absolute;top:50%;transform:translateY(-50%);width:26px;height:26px;padding:0;border:0;border-radius:50%;background:var(--panel2);color:var(--muted);font-size:13px;line-height:1;cursor:pointer}
.chat-bubble-wrap.mine.reply-hot .bubble-reply-btn{left:2px}
.chat-bubble-wrap.theirs.reply-hot .bubble-reply-btn{right:2px}
.bubble-reply-btn:hover{color:var(--white)}
.chat-bubble-wrap.mine{justify-content:flex-end}
.chat-bubble-wrap.theirs{justify-content:flex-start}
.chat-bubble-wrap.bubble-in{animation:bubbleIn .32s cubic-bezier(.2,.8,.3,1) both}
.chat-reply-bar{display:flex;align-items:center;gap:10px;margin-top:10px;padding:8px 12px;border-radius:14px;background:rgba(239,159,39,.1);border-left:3px solid var(--gold)}
.chat-reply-info{flex:1;min-width:0}
.chat-reply-info b{display:block;font-size:11px;color:var(--gold)}
.chat-reply-info span{display:block;font-size:12px;color:#b9adba;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat-reply-cancel{flex-shrink:0;width:28px;height:28px;border-radius:50%;border:0;background:rgba(255,255,255,.08);color:var(--cream);font-size:13px;cursor:pointer}
.reply-quote{display:block;margin-bottom:6px;padding:5px 9px;border-radius:9px;border-left:3px solid currentColor;background:rgba(0,0,0,.14);opacity:.9;cursor:pointer}
.reply-quote:active{opacity:.6}
.chat-bubble.theirs .reply-quote{background:rgba(255,255,255,.09)}
.reply-quote b{display:block;font-size:10.5px;opacity:.85}
.reply-quote span{display:block;font-size:11.5px;opacity:.75;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.voice-speed-btn.idle{opacity:.5}
@keyframes bubbleIn{0%{opacity:0;transform:translateY(26px) scale(.9)}60%{opacity:1;transform:translateY(-3px) scale(1.015)}100%{opacity:1;transform:translateY(0) scale(1)}}




.chat-bubble.pinned-msg{border-color:var(--gold)!important}
#proposalForm{transform-origin:top center;animation:unrollForm .32s cubic-bezier(.22,.9,.32,1)}
@keyframes unrollForm{0%{transform:scaleY(.06);opacity:0}55%{opacity:1}100%{transform:scaleY(1);opacity:1}}
#propSubmit{justify-content:center;gap:8px}
.msg-action-menu{position:fixed;z-index:900;display:flex;flex-direction:column;background:#241a2b;border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:0 12px 30px rgba(0,0,0,.5);animation:menuPop .16s ease;min-width:150px}
.msg-action-menu button{border:0;background:none;color:var(--cream);font:700 12.5px Manrope;padding:11px 15px;text-align:left;cursor:pointer;border-bottom:1px solid rgba(255,255,255,.06)}
.msg-action-menu button:last-child{border-bottom:0}
.msg-action-menu button.danger{color:var(--red)}
@keyframes menuPop{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
.sheet-panel-tall{max-height:92vh;min-height:78vh}
.chat-row-wrap{display:flex;align-items:stretch;gap:8px;border-bottom:1px solid var(--line)}
.chat-row-wrap:last-child{border-bottom:0}
.chat-row-wrap .chat-row{flex:1;min-width:0;border-bottom:0}
.chat-avatar.verified:not(.vip):not(.boss),.like-row-avatar.verified:not(.vip):not(.boss),.person-avatar.verified:not(.vip):not(.boss),.avatar-big.verified:not(.vip):not(.boss){box-shadow:0 0 0 2.5px var(--green),0 0 12px 2px rgba(88,209,138,.4)}.recent-person-avatar.verified:not(.vip):not(.boss) .recent-person-photo{box-shadow:0 0 0 2.5px var(--green),0 0 12px 2px rgba(88,209,138,.4)}.map-person.verified:not(.vip):not(.boss) .map-person-photo{border-color:var(--green);box-shadow:0 5px 22px rgba(0,0,0,.45),0 0 12px 2px rgba(88,209,138,.35)}.archive-btn-wrap{position:relative;display:inline-block;flex-shrink:0;cursor:pointer}.archive-btn-wrap .nav-badge{top:-5px;right:-6px}.chat-messages-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}.chat-to-bottom{position:absolute;right:10px;bottom:12px;z-index:6;width:40px;height:40px;border-radius:50%;border:1px solid var(--line);background:rgba(27,20,34,.92);backdrop-filter:blur(6px);color:var(--cream);font-size:19px;line-height:1;cursor:pointer;display:grid;place-items:center;box-shadow:0 8px 22px rgba(0,0,0,.45);opacity:0;transform:translateY(10px) scale(.9);transition:opacity .18s ease,transform .18s cubic-bezier(.2,.9,.35,1.2)}.chat-to-bottom.show{opacity:1;transform:translateY(0) scale(1)}.chat-to-bottom .nav-badge{top:-4px;right:-4px}body.lite .chat-to-bottom{transition:none}.gal-wrap,.person-photo-wrap{display:flex;flex-direction:column;gap:3px;min-width:0}.gal-wrap>.gal-cell{width:100%}.gal-likes{display:block;text-align:center;font:800 10.5px Manrope;font-style:normal;color:var(--muted);line-height:1;white-space:nowrap}.gal-likes-empty{visibility:hidden}.person-photo-wrap{flex-shrink:0}.person-photos{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 6px;margin:10px 0 2px;scrollbar-width:none;-ms-overflow-style:none}.person-photos::-webkit-scrollbar{display:none}.person-photo{flex-shrink:0;width:76px;height:76px;padding:0;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:#19141b;cursor:pointer}.person-photo img{width:100%;height:100%;object-fit:cover;display:block}.person-photo:active{transform:scale(.96)}.person-row-pills{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:8px 0}.person-row-pills:empty{display:none}.person-row-pills>.hidden{display:none!important}.person-block-label{font:800 11px Manrope;letter-spacing:.08em;text-transform:uppercase;color:#a99daa;margin:2px 2px 7px}.match-why{margin:4px 2px 8px;color:var(--green);font:700 12px Manrope;line-height:1.35}.archive-count{display:inline-block;min-width:22px;padding:2px 8px;margin-left:8px;border-radius:20px;background:rgba(239,159,39,.14);color:var(--gold2);font:800 12px Manrope;vertical-align:middle}.chat-row.long-pressed{transform:scale(.985);transition:transform .18s ease}.chat-row-archive{flex-shrink:0;width:auto;min-width:42px;padding:0 8px;border:1px solid rgba(245,230,200,.07);border-radius:12px;background:rgba(255,255,255,.018);color:#6a5f70;font:700 9.5px Manrope;letter-spacing:.01em;white-space:nowrap;display:grid;place-items:center;cursor:pointer;transition:background .15s ease,transform .1s ease}
.chat-row-archive:active{background:#3fa866;transform:scale(.93)}
.cta-shine{position:relative;overflow:hidden}
.cta-shine:after{content:'';position:absolute;top:0;left:-75%;width:45%;height:100%;background:linear-gradient(115deg,transparent 0%,rgba(255,255,255,.6) 50%,transparent 100%);transform:skewX(-20deg);animation:ctaShine 3.4s ease-in-out infinite}
@keyframes ctaShine{0%{left:-75%}22%{left:130%}100%{left:130%}}
.map-card .radar-head{justify-content:space-between;gap:10px;position:relative;min-height:52px}
.map-card .radar-head h2{animation:softPulse 2.4s ease-in-out infinite}
@keyframes softPulse{0%,100%{opacity:1}50%{opacity:.62}}
#mapFullBtn,#proposalMapFullBtn{position:absolute;right:0;top:50%;transform:translateY(-50%)}
.home-map-card .map-foot{justify-content:center}
.leaflet-control-zoom{border:1px solid var(--line)!important;border-radius:14px!important;overflow:hidden;box-shadow:0 8px 20px rgba(0,0,0,.35)!important}
.leaflet-control-zoom a{background:#1b1422!important;color:var(--cream)!important;width:32px!important;height:32px!important;line-height:32px!important;font:700 18px/32px Manrope,sans-serif!important;border:0!important}
.leaflet-control-zoom a:hover{background:#241a2b!important}
.leaflet-control-zoom-in{border-bottom:1px solid var(--line)!important;border-radius:14px 14px 0 0!important}
.leaflet-control-zoom-out{border-radius:0 0 14px 14px!important}
#chatHeadAvatar{cursor:pointer}
#personAvatar{cursor:pointer}
.lightbox-retake{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);display:flex;align-items:center;gap:6px;padding:11px 20px;border-radius:999px;border:0;background:rgba(20,14,24,.72);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);color:#fff;font:700 13px Manrope;cursor:pointer;box-shadow:0 4px 18px rgba(0,0,0,.35)}
.lightbox-retake:active{background:rgba(20,14,24,.9);transform:translateX(-50%) scale(.96)}
.lightbox-gallery-actions{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);display:flex;gap:10px}
.lightbox-gallery-actions .lightbox-retake{position:static;transform:none}
.lightbox-gallery-actions .lightbox-retake:active{transform:scale(.96)}
.lightbox-retake-danger{color:#ff8a96}
.chat-voice-row{flex:1;min-width:0;display:flex;align-items:center;gap:8px;padding:0 5px}
.chat-voice-row:not(.hidden){animation:voiceRowIn .25s cubic-bezier(.34,1.56,.64,1)}
@keyframes voiceRowIn{from{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}
.chat-voice-dot{width:9px;height:9px;flex-shrink:0;border-radius:50%;background:var(--red);animation:voiceDotPulse 1.1s ease-in-out infinite}
@keyframes voiceDotPulse{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(255,102,120,.45)}50%{opacity:.6;box-shadow:0 0 0 6px rgba(255,102,120,0)}}
.voice-wave{display:flex;align-items:center;gap:2.5px;height:18px;flex-shrink:0}
.voice-wave i{width:2.5px;border-radius:2px;background:var(--red);height:3px;transition:height .07s linear;animation:voiceWaveBar .85s ease-in-out infinite}
.voice-wave i:nth-child(2){animation-delay:.14s}
.voice-wave i:nth-child(3){animation-delay:.28s}.voice-wave i:nth-child(4){animation-delay:.42s}.voice-wave i:nth-child(5){animation-delay:.56s}.voice-wave i:nth-child(6){animation-delay:.70s}.voice-wave i:nth-child(7){animation-delay:.84s}.voice-wave.live i{animation:none}
@keyframes voiceWaveBar{0%,100%{height:4px}50%{height:14px}}
#chatVoiceTimer{font-variant-numeric:tabular-nums;font:700 13px Manrope;color:var(--cream);min-width:32px}
.chat-voice-cancel-hint{margin-left:auto;color:#a99daa;font-size:11px;white-space:nowrap;transition:color .15s ease}
.chat-voice-cancel-hint.armed{color:var(--red);font-weight:700}
.chat-mic-btn{transition:transform .15s cubic-bezier(.34,1.56,.64,1),color .12s ease;touch-action:none;user-select:none;-webkit-user-select:none;position:relative}
.chat-mic-btn.recording{color:var(--red);transform:scale(1.18)}
.chat-mic-btn.recording:after{content:'';position:absolute;inset:-7px;border-radius:50%;border:2px solid var(--red);animation:micPulseRing 1.3s ease-out infinite}
@keyframes micPulseRing{0%{transform:scale(.55);opacity:.8}100%{transform:scale(1.7);opacity:0}}
.voice-msg{display:flex;align-items:center;gap:9px;min-width:210px;padding:2px 2px 2px 0}
.chat-bubble.voice-playing{animation:voiceBubbleGlow 1.6s ease-in-out infinite}
@keyframes voiceBubbleGlow{0%,100%{box-shadow:0 0 0 0 rgba(239,159,39,.35)}50%{box-shadow:0 0 0 4px rgba(239,159,39,.22),0 0 18px rgba(239,159,39,.35)}}
.voice-dot{position:absolute;top:50%;left:0%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:currentColor;box-shadow:0 1px 4px rgba(0,0,0,.45);transition:left .08s linear,opacity .15s ease;pointer-events:none;opacity:0}
.voice-msg.is-playing .voice-dot,.voice-track.dragging .voice-dot{opacity:1}
.chat-bubble-wrap.flash .chat-bubble{animation:msgFlash 1.5s ease}
@keyframes msgFlash{0%,100%{box-shadow:0 0 0 0 rgba(239,159,39,0)}15%,55%{box-shadow:0 0 0 3px rgba(239,159,39,.65)}}
.voice-play-btn{width:30px;height:30px;flex-shrink:0;border-radius:50%;border:0;display:grid;place-items:center;font-size:12px;cursor:pointer}
.chat-bubble.mine .voice-play-btn{background:rgba(33,19,7,.18);color:#211307}
.chat-bubble.theirs .voice-play-btn{background:var(--gold);color:#1a1007}
.voice-play-btn .vp-icon{display:block;width:0;height:0;border-left:9px solid currentColor;border-top:6px solid transparent;border-bottom:6px solid transparent;margin-left:3px}
.voice-play-btn.playing .vp-icon{width:9px;height:11px;border:0;margin-left:0;background:linear-gradient(to right,currentColor 0 3px,transparent 3px 6px,currentColor 6px 9px)}
.voice-track{flex:1;height:4px;border-radius:4px;position:relative;cursor:pointer;touch-action:none}
.voice-track:before{content:'';position:absolute;left:0;right:0;top:-13px;bottom:-13px}
.voice-speed-btn{flex-shrink:0;border:0;border-radius:9px;padding:3px 6px;font:800 10px Manrope;cursor:pointer;background:rgba(33,19,7,.18);color:#211307;font-variant-numeric:tabular-nums}
.chat-bubble.theirs .voice-speed-btn{background:rgba(255,255,255,.14);color:var(--cream)}
.voice-speed-btn:active{transform:scale(.9)}
.chat-bubble.theirs .voice-track{background:rgba(255,255,255,.14)}
.chat-bubble.mine .voice-track{background:rgba(33,19,7,.22)}
.voice-track.dragging .voice-dot{transform:scale(1.35)}
.voice-track.dragging i{transition:none}
.voice-track i{position:absolute;left:0;top:0;bottom:0;width:0%;border-radius:3px;background:currentColor}
.voice-duration{font-size:10px;opacity:.75;flex-shrink:0;font-variant-numeric:tabular-nums}
.recent-people-section{margin:0 0 2px}.tab-top-divider+.discover-head{margin-top:2px}.recent-people-section.hidden+.tab-top-divider{display:none}
.recent-people-title{font-size:11px;color:#a99daa;font-weight:800;letter-spacing:.06em;text-transform:uppercase;margin:0 0 10px;text-align:center}
.recent-people-strip{display:flex;gap:13px;overflow-x:auto;padding:2px 2px 3px;scrollbar-width:none;-ms-overflow-style:none}
.recent-people-strip::-webkit-scrollbar{display:none}
.recent-person{flex-shrink:0;width:64px;display:flex;flex-direction:column;align-items:center;gap:5px;background:none;border:0;cursor:pointer;font:inherit;color:inherit;padding:0}
.recent-person-avatar{width:60px;height:60px;aspect-ratio:1/1;flex-shrink:0;position:relative}
.recent-person-photo{width:100%;height:100%;aspect-ratio:1/1;border-radius:50%;overflow:hidden;background:linear-gradient(145deg,#2d2037,#1a1321);display:grid;place-items:center;font-size:24px;border:2px solid var(--line);transition:border-color .2s ease,box-shadow .2s ease}
.recent-person-photo img{width:100%;height:100%;object-fit:cover;display:block}
.recent-person-avatar.vip .recent-person-photo{border-color:var(--gold);box-shadow:0 0 12px rgba(239,159,39,.3)}
.recent-person-avatar.is-live .recent-person-photo{border-color:var(--green)}
.recent-person-status{position:absolute;right:-1px;bottom:-1px;width:13px;height:13px;border-radius:50%;background:#6c5c70;border:2.5px solid var(--bg);box-sizing:content-box;z-index:2}
.recent-person-status.is-live{background:var(--green)}
.recent-person small{font-size:10.5px;color:var(--cream);max-width:64px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.recent-person:active .recent-person-avatar{transform:scale(.93)}
.online-status-tag{letter-spacing:0!important;display:inline-block;vertical-align:middle;font-size:10px;font-weight:800;padding:3px 9px;border-radius:20px;background:rgba(255,255,255,.06);color:#8f8191;letter-spacing:.02em}
.online-status-tag.is-online{background:rgba(88,209,138,.14);color:var(--green)}

/* ---------- лёгкий режим: старые телефоны ----------
   Отключаем эффекты, которые заставляют устройство перерисовывать большие области
   каждый кадр: размытия, hue-rotate, backdrop-filter и бесконечные анимации фона.
   Функциональность не трогаем — уходит только декор. */
body.lite .ambient{display:none}
body.lite .grain{display:none}
body.lite .loading-screen:before,body.lite .loading-screen:after{display:none}
body.lite .chat-sheet-panel:before{animation:none;opacity:.32;background-size:cover}
body.lite .bottom-nav{backdrop-filter:none;background:rgba(16,11,21,.97)}
body.lite .sheet-backdrop{backdrop-filter:none;background:rgba(0,0,0,.78)}
body.lite .lightbox-retake{backdrop-filter:none;-webkit-backdrop-filter:none;background:rgba(20,14,24,.92)}
body.lite .open-status b{animation:none;text-shadow:0 0 8px rgba(239,159,39,.45)}
body.lite .open-card,body.lite .open-card.on{animation:none}
body.lite .open-card:before,body.lite .open-card.on:before{animation:none;opacity:.55}
body.lite .person-avatar.vip,body.lite .header-avatar.vip,body.lite .avatar-big.vip,
body.lite .map-person.vip .map-person-photo{animation:none}
body.lite .chat-bubble.voice-playing{animation:none;box-shadow:0 0 0 2px rgba(239,159,39,.45)}
body.lite .beer-stage-img:before{display:none}
body.lite .cta-shine:after,body.lite .vip-get-btn-inner:before{display:none}
body.lite .vip-get-btn:after{display:none}
body.lite .map-card .radar-head h2{animation:none}
body.lite .chat-voice-dot{animation:none}
body.lite .voice-wave i{animation:none;height:9px}
body.lite .chat-mic-btn.recording:after{animation:none}
.vip-locked{color:#5c5560!important;filter:grayscale(1);opacity:.55}
.vip-locked:active{transform:none!important}
body.lite .beer-art{animation:none}
body.lite .beer-glow,body.lite .ring,body.lite .bubbles,body.lite .foam-spray{display:none}
body.lite 
body.lite .radar-scan{animation:none}
body.lite .radar-dot{animation:none}
body.lite .chat-bubble-wrap.bubble-in{animation:none}
body.lite .arrow-nudge,body.lite .bottle-arrow{animation:none}

/* Новая картинка на главной — широкая фотография без прозрачности,
   в отличие от прежней почти квадратной с прозрачным фоном.
   Подгоняем место под её пропорции (5:4), иначе останутся пустые поля,
   и скругляем края, чтобы фото читалось как элемент интерфейса. */
.hero-home .beer-stage.beer-stage-img{width:178px;height:117px}
/* картинка с прозрачным фоном — рамка и обрезка не нужны */
.beer-stage-img #beerCheersImg{object-fit:contain;border-radius:0}
@media(max-width:380px){
  .hero-home .beer-stage.beer-stage-img{width:148px;height:98px;margin-left:11px}
}

/* Название как хештег — фирменный знак. Решётка золотая,
   чтобы «#» читался как часть логотипа, а не случайный символ. */
.brand-tag{letter-spacing:-.01em}
.mini-header .brand-tag>span{display:inline;color:var(--gold);font-weight:900}

/* ---------- переключатель статуса: метка на карте ----------
   Выключено — тусклая контурная метка. Включено — падает с отскоком,
   загорается золотом, от основания расходятся круги. */
.pin-switch{width:52px;height:78px;flex-shrink:0;border:0;background:none;cursor:pointer;padding:0;position:relative}
.pin-switch-svg{overflow:visible;display:block;position:relative;z-index:1}
.pin-switch:active{transform:scale(.95)}
.pin-body{fill:#251c2e;stroke:#5b4a63;stroke-width:2.5;transition:fill .45s ease,stroke .45s ease}
.pin-hole{fill:#171021;stroke:#5b4a63;stroke-width:2;transition:fill .45s ease,stroke .45s ease}
.pin-switch.on .pin-body{fill:url(#pinGrad);stroke:#ffe0a0}
.pin-switch.on .pin-hole{fill:#3a2408;stroke:#ffe9a8}
.pin-glow{opacity:0;transition:opacity .5s ease}
.pin-switch.on .pin-glow{opacity:1;animation:pinGlowPulse 2.4s ease-in-out infinite}
@keyframes pinGlowPulse{0%,100%{opacity:.75}50%{opacity:1}}
.pin-switch.on .pin-group{animation:pinDrop .62s cubic-bezier(.3,1.5,.5,1)}
@keyframes pinDrop{0%{transform:translateY(-26px) scale(.86)}58%{transform:translateY(3px) scale(1.05)}100%{transform:translateY(0) scale(1)}}
.pin-ripple ellipse{fill:none;stroke:#ffca67;stroke-width:1.6;opacity:0;transform-origin:30px 82px}
.pin-switch.on .pin-ripple ellipse{animation:pinRipple 2.4s ease-out infinite}
.pin-switch.on .pin-ripple ellipse:nth-child(2){animation-delay:.8s}
.pin-switch.on .pin-ripple ellipse:nth-child(3){animation-delay:1.6s}
@keyframes pinRipple{0%{opacity:.8;transform:scale(.35)}100%{opacity:0;transform:scale(2.4)}}
.pin-atoms circle{fill:#ffca67;opacity:0;transform-box:fill-box;transform-origin:center}
@keyframes pinFade{0%{opacity:1}70%{opacity:.4}100%{opacity:0}}
.pin-switch.evaporating .pin-atoms circle{animation:atomFly .6s ease-out both}
.pin-switch.evaporating .pin-atoms circle:nth-child(2){animation-delay:.02s}
.pin-switch.evaporating .pin-atoms circle:nth-child(3){animation-delay:.04s}
.pin-switch.evaporating .pin-atoms circle:nth-child(4){animation-delay:.06s}
.pin-switch.evaporating .pin-atoms circle:nth-child(5){animation-delay:.08s}
.pin-switch.evaporating .pin-atoms circle:nth-child(6){animation-delay:.03s}
.pin-switch.evaporating .pin-atoms circle:nth-child(7){animation-delay:.07s}
.pin-switch.evaporating .pin-atoms circle:nth-child(8){animation-delay:.05s}
.pin-switch.evaporating .pin-atoms circle:nth-child(9){animation-delay:.09s}
.pin-switch.evaporating .pin-atoms circle:nth-child(10){animation-delay:.01s}
.pin-switch.materializing .pin-atoms circle{animation:atomGather .55s ease-out both}
.pin-switch.materializing .pin-atoms circle:nth-child(2){animation-delay:.04s}
.pin-switch.materializing .pin-atoms circle:nth-child(3){animation-delay:.02s}
.pin-switch.materializing .pin-atoms circle:nth-child(4){animation-delay:.07s}
.pin-switch.materializing .pin-atoms circle:nth-child(5){animation-delay:.05s}
.pin-switch.materializing .pin-atoms circle:nth-child(6){animation-delay:.01s}
.pin-switch.materializing .pin-atoms circle:nth-child(7){animation-delay:.08s}
.pin-switch.materializing .pin-atoms circle:nth-child(8){animation-delay:.03s}
.pin-switch.materializing .pin-atoms circle:nth-child(9){animation-delay:.09s}
.pin-switch.materializing .pin-atoms circle:nth-child(10){animation-delay:.06s}
.pin-confetti circle,.pin-confetti rect{opacity:0;transform-box:fill-box;transform-origin:center}
.pin-switch.materializing .pin-confetti circle,.pin-switch.materializing .pin-confetti rect{animation:confettiBurst .75s cubic-bezier(.15,.8,.3,1) both}
.pin-switch.materializing .pin-group{animation:pinPop .45s cubic-bezier(.2,.9,.35,1.4) both}
@keyframes pinPop{0%{transform:scale(.75)}55%{transform:scale(1.12)}100%{transform:scale(1)}}
.pin-switch.evaporating .pin-group{animation:pinFade .55s ease-in forwards,pinShrink .55s ease-in forwards}
@keyframes pinShrink{0%{transform:scale(1)}100%{transform:scale(.7)}}
/* в экономном режиме постоянные анимации метки не крутим */
body.lite .pin-switch.on .pin-glow,body.lite .pin-switch.on .pin-ripple ellipse{animation:none}
body.lite .pin-switch.on .pin-ripple ellipse{opacity:.35;transform:scale(1.2)}

/* Просмотр фото должен быть выше карточек: .sheet живёт на 700,
   а базовый .map-modal на 600 — из-за этого фото открывалось позади. */
.image-lightbox{z-index:900}
.lightbox-close{position:absolute;top:calc(14px + env(safe-area-inset-top));right:14px;width:40px;height:40px;border-radius:50%;border:1px solid rgba(245,230,200,.25);background:rgba(20,14,24,.72);color:#fff;font-size:16px;cursor:pointer;z-index:2}
.lightbox-nav{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:50%;border:1px solid rgba(245,230,200,.25);background:rgba(20,14,24,.6);color:#fff;font-size:26px;line-height:1;cursor:pointer;z-index:2;display:grid;place-items:center;padding:0 0 2px}
.lightbox-nav:active{background:rgba(20,14,24,.85);transform:translateY(-50%) scale(.92)}
.lightbox-nav-prev{left:10px}
.lightbox-nav-next{right:10px}
.lightbox-close:active{transform:scale(.92);background:rgba(20,14,24,.92)}
/* строка чата под свайп */
.chat-row-wrap .chat-row{touch-action:pan-y;will-change:transform}

/* ---------- раздел настроек ----------
   Список сделан так, чтобы новые пункты добавлялись одной строкой разметки. */
.settings-list{display:flex;flex-direction:column;gap:10px;margin-top:6px}
.settings-row{display:flex;align-items:center;gap:12px;padding:13px 14px;border:1px solid var(--line);border-radius:18px;background:#1b1422;cursor:pointer}
.settings-row-icon{width:38px;height:38px;aspect-ratio:1/1;flex-shrink:0;border-radius:12px;display:grid;place-items:center;background:rgba(239,159,39,.13);font-size:19px}
.settings-row-info{flex:1;min-width:0}
.settings-row-info b{display:block;font-size:13.5px;color:var(--cream)}
.settings-row-info small{display:block;color:var(--muted);font-size:11px;line-height:1.45;margin-top:2px}
/* тумблер */
.switch{position:relative;flex-shrink:0;width:52px;height:30px;border-radius:30px;background:#2c2233;border:1px solid #46354f;transition:background .22s ease,border-color .22s ease}
.switch input{position:absolute;top:0;right:0;bottom:0;left:0;inset:0;width:100%;height:100%;margin:0;opacity:0;cursor:pointer;z-index:2}
.switch i{position:absolute;top:3px;left:3px;width:22px;height:22px;border-radius:50%;background:#6c5c70;transition:transform .24s cubic-bezier(.34,1.4,.64,1),background .22s ease}
/* класс вешаем из скрипта, а не через :has() — его нет в старых webview,
   а этот тумблер нужен как раз владельцам старых телефонов */
.switch.on{background:#8b5311;border-color:var(--gold)}
.switch.on i{transform:translateX(22px);background:var(--gold2);box-shadow:0 0 12px rgba(255,202,103,.55)}

/* своя метка на карте — с аватаркой, обводкой отличается от чужих */
.map-me{width:58px!important;height:58px!important;position:relative!important}
.map-me .map-me-inner{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:50%;overflow:hidden;background:#ef9f27;border:3px solid #f5e6c8;box-shadow:0 0 0 5px rgba(239,159,39,.28),0 8px 26px rgba(0,0,0,.45);text-align:center;line-height:52px;font-size:20px}
.map-me-photo{position:absolute;top:0;right:0;bottom:0;left:0;background-size:cover;background-position:center;filter:brightness(1.12) contrast(1.03)}
.map-me.vip .map-me-inner{border-color:#ffe9a8;box-shadow:0 0 0 7px rgba(212,160,23,.22),0 0 16px 3px rgba(212,160,23,.6)}
/* кнопки над картой */
.map-head-actions{display:flex;align-items:center;gap:8px}
.map-head-actions .round-btn{font-size:17px}
#mapLocateBtn,#mapFullLocateBtn{transition:transform .2s cubic-bezier(.34,1.56,.64,1),color .2s ease}
#mapLocateBtn.locating,#mapFullLocateBtn.locating{color:var(--gold);transform:scale(1.15)}
/* кнопка разворота была позиционирована абсолютно сама по себе —
   переносим позиционирование на обёртку, иначе кнопки наложатся друг на друга */
.map-card .radar-head .map-head-actions{position:static;transform:none;flex-shrink:0}
.map-card .radar-head .map-head-actions #mapFullBtn{position:static;transform:none}

/* У аватарок золотистый фон-заглушка для тех, у кого нет фото.
   Когда фото есть, он просвечивал в момент загрузки картинки —
   при обновлении списка это читалось как жёлтые вспышки. */
.person-avatar.has-photo,.chat-avatar.has-photo,.like-row-avatar.has-photo{background:#241a2b}

/* Подпись источника карты убрать нельзя — этого требует лицензия OpenStreetMap,
   но можно сделать её незаметной, чтобы не мешала. */
.leaflet-control-attribution{background:rgba(18,13,23,.45)!important;color:rgba(245,230,200,.4)!important;font-size:8px!important;padding:1px 5px!important;border-radius:8px 0 0 0}
.leaflet-control-attribution a{color:rgba(245,230,200,.5)!important;text-decoration:none}

/* Все иконки меню — цветные эмодзи в одном стиле.
   Неактивные приглушены, выбранная ярче и чуть крупнее.
   Приглушаем именно эмодзи, а не обёртку: фильтр родителя действует и на детей,
   и значок непрочитанных потускнел бы вместе с иконкой — отменить его изнутри нельзя. */
.nav span{font-size:22px;display:block}
.nav-emoji{display:block;font-style:normal;line-height:1;transition:transform .22s cubic-bezier(.34,1.5,.64,1),filter .22s ease,opacity .22s ease;filter:grayscale(.7) brightness(.85);opacity:.6}
.nav.active .nav-emoji{filter:none;opacity:1;transform:scale(1.22)}
.nav.active small{color:var(--gold)}
.nav:active .nav-emoji{transform:scale(.9)}
.nav.active:active .nav-emoji{transform:scale(1.1)}
/* своя метка теперь нажимаемая — ведёт в профиль */
.map-me{cursor:pointer}
.map-me:active .map-me-inner{transform:scale(.92)}
.map-me .map-me-inner{transition:transform .15s cubic-bezier(.34,1.5,.64,1)}

/* Стрелки по бокам надписи вместо точек — бегут волной к тексту,
   поэтому взгляд ведёт к нему, а не разбегается по краям. */
.status-arrows{display:flex;align-items:center;flex-shrink:0}
.status-arrows i{font-style:normal;font-weight:900;font-size:19px;line-height:1;color:#6c5c70;transition:color .35s ease;animation:arrowRun 1.5s ease-in-out infinite}
.status-arrows.left i:nth-child(1){animation-delay:0s}
.status-arrows.left i:nth-child(2){animation-delay:.16s}
.status-arrows.left i:nth-child(3){animation-delay:.32s}
.status-arrows.right i:nth-child(1){animation-delay:.32s}
.status-arrows.right i:nth-child(2){animation-delay:.16s}
.status-arrows.right i:nth-child(3){animation-delay:0s}
@keyframes arrowRun{0%,100%{opacity:.22}45%{opacity:1}}
.open-card.on .status-arrows i{color:var(--green);text-shadow:0 0 9px rgba(88,209,138,.6)}
body.lite .status-arrows i{animation:none;opacity:.6}

/* ---------- админка ---------- */
#askDaysSheet{z-index:780}#reviewsSheet{z-index:800}#photoLikersSheet{z-index:950}.lightbox-like{position:absolute;right:12px;bottom:12px;z-index:6;display:flex;align-items:center;gap:7px;padding:9px 14px;border-radius:22px;border:1px solid rgba(255,255,255,.14);background:rgba(20,14,26,.72);backdrop-filter:blur(6px);color:var(--cream);font:800 14px Manrope;cursor:pointer}.lightbox-like span{font-size:17px;line-height:1;transition:transform .18s cubic-bezier(.2,.9,.35,1.4)}.lightbox-like.liked span{transform:scale(1.18)}.lightbox-like:active{transform:scale(.94)}.like-burst{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) scale(.4);font-size:74px;opacity:0;pointer-events:none;z-index:7;animation:likeBurst .7s ease-out}@keyframes likeBurst{15%{opacity:1;transform:translate(-50%,-50%) scale(1.1)}45%{opacity:1;transform:translate(-50%,-50%) scale(.95)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.25)}}.ask-days-input{width:100%;padding:14px;border-radius:14px;border:1px solid var(--line);background:rgba(255,255,255,.04);color:var(--cream);font:800 20px Manrope;text-align:center;outline:none}.ask-days-input:focus{border-color:var(--gold)}.ask-days-quick{display:flex;gap:8px;margin-top:10px}.ask-days-quick button{flex:1;padding:10px 0;border-radius:12px;border:1px solid var(--line);background:rgba(255,255,255,.03);color:var(--muted);font:700 13px Manrope;cursor:pointer}.ask-days-quick button:active{border-color:var(--gold);color:var(--cream)}.admin-vip-left{background:rgba(212,160,23,.16)!important;color:#ffca67!important;border-color:rgba(212,160,23,.35)!important}.admin-vip-over{background:rgba(255,102,120,.14)!important;color:var(--red)!important;border-color:rgba(255,102,120,.3)!important}.admin-search-wrap{margin:0 2px 12px}#adminSearch{width:100%;padding:11px 14px;border-radius:14px;border:1px solid var(--line);background:rgba(255,255,255,.04);color:var(--cream);font:600 13px Manrope;outline:none;-webkit-appearance:none;appearance:none}#adminSearch::placeholder{color:var(--muted)}#adminSearch:focus{border-color:var(--gold);background:rgba(239,159,39,.06)}#adminSearch::-webkit-search-cancel-button{-webkit-appearance:none;appearance:none}.admin-list{display:flex;flex-direction:column;gap:8px;max-height:66vh;overflow:auto}
.admin-row{display:flex;align-items:center;gap:11px;padding:10px 12px;border:1px solid var(--line);border-radius:16px;background:#18121f}
.admin-avatar{width:42px;height:42px;aspect-ratio:1/1;flex-shrink:0;border-radius:50%;overflow:hidden;background:radial-gradient(circle at 35% 25%,#ffcb6b,#8f4a1b 35%,#2a1c31 68%);display:grid;place-items:center;font-size:19px}
.admin-avatar.has-photo{background:#241a2b}.admin-avatar:not(.has-photo){background:#19141b}.admin-avatar .no-photo-spot{display:block;width:100%;height:100%;border-radius:50%}.admin-avatar{width:38px;height:38px}.admin-avatar.ring-boss{box-shadow:0 0 0 2px #fff,0 0 9px 1px rgba(255,255,255,.45)}.admin-avatar.ring-vip{box-shadow:0 0 0 2px #d4a017,0 0 9px 1px rgba(212,160,23,.5)}.admin-avatar.ring-verified{box-shadow:0 0 0 2px var(--green),0 0 9px 1px rgba(88,209,138,.4)}
.admin-avatar img{width:100%;height:100%;object-fit:cover}
.admin-info{flex:1;min-width:0}
.admin-info b{display:block;font-size:13.5px}
.admin-info small{display:block;color:#9b8c9e;font-size:11px;margin-top:1px}
.admin-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:5px}
.admin-ref{font-size:10px;font-weight:700;padding:2px 7px;border-radius:20px;background:rgba(239,159,39,.14);color:var(--gold2)}
.admin-ref.self{background:rgba(255,255,255,.06);color:#8f8191}
.admin-ip-tag{border:0;font-family:inherit;cursor:pointer}
.admin-ip-tag:active{transform:scale(.95)}
.admin-ref.warn{background:rgba(255,102,120,.14);color:var(--red)}
.admin-del{flex-shrink:0;width:36px;height:36px;border-radius:50%;border:1px solid rgba(255,102,120,.35);background:rgba(255,102,120,.1);color:var(--red);font-size:15px;cursor:pointer}
.admin-del:active{transform:scale(.9)}
/* шапка админки: кнопка «назад» слева от заголовка */
.admin-head-left{display:flex;align-items:center;gap:10px;min-width:0}
#adminBack{flex-shrink:0}
/* аватарка в админке — кнопка, ведёт в анкету человека */
.admin-avatar{border:0;padding:0;cursor:pointer}
.admin-avatar:active{transform:scale(.92)}

/* Удаление строки в админке: сначала растворяется сама строка,
   и только потом схлопывается высота — иначе список дёргается вверх
   раньше, чем человек успевает увидеть, что именно исчезло. */
.admin-row.removing{
  pointer-events:none;overflow:hidden;
  animation:adminRowDissolve .42s cubic-bezier(.4,0,.6,1) forwards;
  transition:max-height .26s ease .34s,margin .26s ease .34s,padding .26s ease .34s,border-width .26s ease .34s;
  margin-bottom:0;padding-top:0;padding-bottom:0;border-width:0;
}
@keyframes adminRowDissolve{
  0%{opacity:1;transform:scale(1) translateX(0);filter:blur(0);border-color:var(--line)}
  18%{opacity:1;transform:scale(1.025) translateX(0);border-color:var(--red);box-shadow:0 0 0 2px rgba(255,102,120,.35)}
  100%{opacity:0;transform:scale(.86) translateX(36px);filter:blur(5px);box-shadow:none}
}
/* на слабых телефонах без размытия — оно там дорогое */
body.lite .admin-row.removing{animation:adminRowDissolveLite .3s ease forwards}
.admin-deleted-section{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.admin-deleted-toggle{width:100%;display:flex;align-items:center;justify-content:space-between;border:0;background:none;color:#8a7d8d;font:700 12px Manrope;padding:6px 2px;cursor:pointer}
.admin-deleted-toggle i{transition:.2s transform}
.admin-deleted-toggle.open i{transform:rotate(90deg)}
.admin-row-deleted{opacity:.6;background:#151019}
.admin-report-name{border:0;background:none;padding:0;color:var(--gold2);font:inherit;font-weight:800;cursor:pointer;text-decoration:underline;text-decoration-color:rgba(255,202,103,.35)}
@keyframes adminRowDissolveLite{to{opacity:0;transform:translateX(28px)}}

/* Экран загрузки: крупные часы вместо кружки — нейтрально и уместно
   после смены названия, плюс стрелки сразу читаются как ожидание. */
.loader-clock{position:relative;width:132px;height:132px;border-radius:50%;border:5px solid rgba(245,230,200,.85);box-shadow:0 0 45px rgba(239,159,39,.35),inset 0 0 26px rgba(239,159,39,.12)}
.loader-clock:before{content:'';position:absolute;top:8px;right:8px;bottom:8px;left:8px;border-radius:50%;border:1px dashed rgba(245,230,200,.22)}
.loader-clock-hand{position:absolute;left:50%;bottom:50%;transform-origin:50% 100%;border-radius:4px;background:var(--gold2)}
.loader-clock-hand.hour{width:5px;height:32px;margin-left:-2.5px;animation:clockHour 8s linear infinite}
.loader-clock-hand.minute{width:3.5px;height:46px;margin-left:-1.75px;background:var(--cream);animation:clockMinute 1.4s linear infinite}
.loader-clock-pin{position:absolute;left:50%;top:50%;width:11px;height:11px;margin:-5.5px 0 0 -5.5px;border-radius:50%;background:var(--gold);box-shadow:0 0 12px rgba(239,159,39,.8)}
@keyframes clockMinute{to{transform:rotate(360deg)}}
@keyframes clockHour{to{transform:rotate(360deg)}}
body.lite .loader-clock{box-shadow:none}
/* Окна, которые открываются ИЗ карточек, должны быть выше них:
   карточки лежат на 700, а базовый .map-modal — на 600. */
.photo-modal,.above-sheets{z-index:800}

/* Платиновый статус BOSS — холодное серебро против золотого VIP,
   чтобы уровни различались с одного взгляда, а не только надписью. */
.vip-badge-tag.boss-badge{
  background:linear-gradient(135deg,#ffffff,#cfd8e3 38%,#8fa0b5 72%,#5d6b80);
  border-color:#ffffff;color:#1b2430;
  box-shadow:0 2px 6px rgba(0,0,0,.55),0 0 10px 2px rgba(190,210,235,.75),inset 0 1px 0 rgba(255,255,255,.85);
}
.vip-inline.boss-inline{
  background:linear-gradient(135deg,#ffffff,#cfd8e3 40%,#8fa0b5 78%);
  border-color:#ffffff;color:#1b2430;
}
.admin-actions{display:flex;gap:6px;flex-shrink:0}
.admin-tier{width:36px;height:36px;border-radius:50%;border:1px solid var(--line);background:#211827;font-size:15px;cursor:pointer}
.admin-tier:active{transform:scale(.9)}
.admin-tier.is-none{filter:grayscale(1) brightness(.8);opacity:.75}
.admin-tier.is-vip{filter:saturate(1.3);box-shadow:0 0 10px rgba(239,159,39,.35)}
.admin-tg{flex-shrink:0;width:36px;height:36px;border-radius:50%;border:1px solid var(--line);background:#211827;font-size:14px;cursor:pointer}
.admin-tg:active{transform:scale(.9)}
.admin-tg.is-disabled{opacity:.3;filter:grayscale(1);cursor:default}

/* поля профиля в два столбца + переключатели «пол» и «куришь» */
.pf-row{display:flex;gap:10px}
.pf-half{flex:1;min-width:0}
.pf-toggle{display:flex;gap:6px}
.pf-toggle button{flex:1;min-width:0;border:1px solid #3b2d45;background:#19131f;color:#a99daa;border-radius:15px;padding:13px 6px;font:700 12.5px Manrope;cursor:pointer;transition:.18s border-color,.18s background,.18s color;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pf-toggle button.active{border-color:var(--gold);background:linear-gradient(180deg,rgba(239,159,39,.15),#1a1421);color:var(--cream)}
.report-categories{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.report-categories button{border:1px solid #3b2d45;background:#19131f;color:#a99daa;border-radius:15px;padding:9px 13px;font:700 12.5px Manrope;cursor:pointer;transition:.18s border-color,.18s background,.18s color}
.report-categories button.active{border-color:var(--red);background:linear-gradient(180deg,rgba(239,68,68,.15),#1a1421);color:var(--cream)}
.pf-toggle button:active{transform:scale(.96)}
#pfLookingFor button{font-size:10.5px;padding:13px 4px}
/* вход в админку — платиновый, как статус BOSS */
.admin-entry{border-color:#8fa0b5;background:linear-gradient(145deg,rgba(207,216,227,.12),#1a1421)}
.admin-entry .pin{color:#dfe7f0}
.admin-entry b{color:#eaf1f8}

/* ---------- галерея профиля ----------
   Главное фото — первая ячейка, без крестика: его меняют только через камеру,
   удалить его нельзя, иначе анкета осталась бы без живого снимка. */
/* Все пять фото в один ряд на любом телефоне: пятая колонка вместо переноса,
   промежутки и подписи ужаты под узкую ячейку. */
.gallery-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:5px}
.gal-cell{position:relative;aspect-ratio:1/1;border-radius:11px;overflow:hidden;border:1px solid var(--line);background:#19131f;padding:0;cursor:pointer;display:grid;place-items:center}
.gal-cell.gal-main{border:2px solid var(--gold);box-shadow:0 0 0 1px rgba(239,159,39,.35)}
.gal-star{position:absolute;top:5px;left:5px;width:22px;height:22px;border-radius:50%;background:rgba(15,10,18,.65);display:grid;place-items:center;font-size:13px;color:rgba(245,230,200,.55);z-index:2}
.gal-star-active{color:var(--gold);background:rgba(20,14,24,.8)}
.gal-cell img{width:100%;height:100%;object-fit:cover;display:block}
.gal-main{border-color:var(--gold)}
.gal-main em,.gal-empty em,.gal-add em{position:absolute;left:0;right:0;bottom:0;padding:2px 1px;font-style:normal;font-size:7px;font-weight:700;text-align:center;background:rgba(16,11,21,.82);color:var(--cream)}
.gal-empty,.gal-add{border-style:dashed;color:var(--gold)}
.gal-empty span,.gal-add span{font-size:17px}
.gal-add span{font-size:20px;font-weight:300;line-height:1}
.gal-del{position:absolute;top:3px;right:3px;width:18px;height:18px;border-radius:50%;border:0;background:rgba(16,11,21,.8);color:#fff;font-size:11px;cursor:pointer;display:grid;place-items:center;padding:0}
.gal-del:active{transform:scale(.88)}
.gal-cell:active{transform:scale(.96)}

/* интересы в два уровня: категория, под ней жанры */
/* Категории лежат плотно в ряд, а не столбиком — раньше семь кнопок
   занимали пол-экрана пустотой. Жанры вынесены на отдельный экран. */
.interest-grid{display:flex;flex-wrap:wrap;gap:7px}
.cat-chip{position:relative;font-size:12.5px;padding:9px 14px}
.cat-n{margin-left:6px;display:inline-block;min-width:17px;padding:1px 5px;border-radius:20px;background:var(--gold);color:#211307;font:800 10px Manrope}
.interest-grid-flat{display:flex;flex-wrap:wrap;gap:7px;max-height:58vh;overflow:auto;padding:2px}

/* Платиновый уровень везде, где раньше был только золотой VIP:
   лента новых людей, метка на карте, аватарки. */
.recent-person-avatar.boss .recent-person-photo{border-color:#dfe7f0;box-shadow:0 0 12px rgba(200,220,240,.45)}
.map-me.boss .map-me-inner{border-color:#eaf1f8!important;box-shadow:0 0 0 7px rgba(200,220,240,.2),0 0 16px 3px rgba(200,220,240,.6)}
.person-avatar.boss,.header-avatar.boss,.avatar-big.boss,.chat-avatar.boss{box-shadow:0 0 0 2.5px #cfd8e3,0 0 12px 2px rgba(200,220,240,.6)}
.map-person.boss .map-person-photo{box-shadow:0 0 0 2.5px #cfd8e3,0 0 14px 3px rgba(200,220,240,.65)!important}
/* кнопка админ-панели в шапке профиля — платиновая, в цвет статуса BOSS */
.boss-get-btn .vip-get-btn-inner{background:linear-gradient(160deg,#ffffff,#cfd8e3 45%,#8fa0b5);border-color:#ffffff;color:#1b2430;box-shadow:0 4px 18px rgba(200,220,240,.5)}
.boss-get-btn:after{background:radial-gradient(ellipse at center,rgba(200,220,240,.45),transparent 70%)}
.sheet-head-actions{flex-wrap:wrap;justify-content:flex-end}
/* фото в галерее можно заменить тапом; крестик поверх — удаление */
.gal-replace{position:relative}
.gal-replace em{position:absolute;left:0;right:0;bottom:0;padding:2px 1px;font-style:normal;font-size:7px;font-weight:700;text-align:center;background:rgba(16,11,21,.78);color:var(--cream)}
/* своя метка при закрытом статусе — приглушённая, но видимая:
   человек должен понимать, где он, даже когда его не видят другие */
.map-me.is-hidden-me .map-me-inner{opacity:.55;filter:grayscale(.7);border-color:#8d8194;box-shadow:0 0 0 5px rgba(140,128,150,.18),0 6px 18px rgba(0,0,0,.4)}


.pf-badge-info{flex:1;min-width:0}
.pf-badge-info b{display:inline}
.pf-badge-info>small{display:inline;margin-left:5px;color:#8f8192;font-size:11.5px}

/* ---------- идёт загрузка ---------- */
.gal-busy{position:relative;pointer-events:none}
.gal-busy:after{content:'';position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;background:rgba(16,11,21,.72)}
.gal-busy:before{content:'';position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;width:20px;height:20px;border-radius:50%;border:2px solid rgba(245,230,200,.25);border-top-color:var(--gold);animation:spin .7s linear infinite;z-index:2}
.gal-progress{position:absolute;left:0;right:0;bottom:9px;text-align:center;font:800 10px Manrope;color:var(--cream);z-index:3;font-style:normal}
@keyframes spin{to{transform:rotate(360deg)}}
.cta-busy{opacity:.85;position:relative}
.cta-busy:after{content:'';display:inline-block;width:14px;height:14px;border-radius:50%;border:2px solid rgba(33,19,7,.3);border-top-color:#211307;animation:spin .7s linear infinite;margin-left:8px;vertical-align:middle}

/* ---------- лента ---------- */
.feed-kind-picker{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:4px}
.feed-kind-picker button{flex:1;border:1px solid #3b2d45;background:#19131f;color:#a99daa;border-radius:16px;padding:15px 13px;font:800 14.5px Manrope;cursor:pointer;transition:.18s border-color,.18s background,.18s color}
.feed-kind-picker button.active{border-color:var(--gold);background:linear-gradient(180deg,rgba(239,159,39,.15),#1a1421);color:var(--cream)}
.feed-post-card{width:100%;text-align:left;border:1px solid var(--line);background:#1b1422;border-radius:20px;padding:14px 15px;margin-top:10px;cursor:pointer;display:block;color:inherit;font:inherit}
.feed-post-card:active{transform:scale(.98)}
.feed-post-head{display:flex;align-items:center;gap:12px}
.feed-post-avatar{position:relative;width:32px;height:32px;aspect-ratio:1/1;border-radius:10px;overflow:visible;flex-shrink:0;background:linear-gradient(145deg,#342338,#19121e);display:grid;place-items:center;font-size:16px}
.feed-post-avatar img{width:32px;height:32px;object-fit:cover;display:block;border-radius:10px}
.feed-post-head b{font-size:12.5px;display:block;font-weight:800}
.feed-post-head small{color:var(--muted);font-size:10.5px}
.feed-post-kind{margin-left:auto;font-size:10px;color:var(--gold2);font-weight:800;flex-shrink:0;white-space:nowrap}
.feed-post-title{font-size:14.5px;font-weight:800;margin:9px 0 3px;color:var(--white)}
.feed-post-preview{color:#b9aebb;font-size:12.5px;line-height:1.4;margin:0;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.feed-post-foot{display:flex;gap:14px;margin-top:10px;color:var(--muted);font-size:11px;font-weight:700}
.feed-post-comment-cta{margin-top:10px;padding-top:10px;border-top:1px solid var(--line);color:var(--gold2);font-size:11.5px;font-weight:700;text-align:left}
.tab-top-divider{height:1px;background:var(--line);margin:0 -16px 10px}
.feed-poll-option{position:relative;width:100%;text-align:left;border:1px solid var(--line);background:#19131f;border-radius:14px;padding:11px 13px;margin-top:7px;cursor:pointer;overflow:hidden;display:block;color:inherit;font:inherit}
.feed-poll-option-fill{position:absolute;top:0;left:0;bottom:0;background:rgba(239,159,39,.16);z-index:0;transition:width .3s ease}
.feed-poll-option-row{position:relative;z-index:1;display:flex;justify-content:space-between;align-items:center;gap:8px}
.feed-poll-option-row span:first-child{font:700 13px Manrope;color:var(--white)}
.feed-poll-option-pct{font:800 12px Manrope;color:var(--gold2);flex-shrink:0}
.feed-poll-option.voted{border-color:var(--gold)}
.feed-poll-voters{position:relative;z-index:1;display:flex;flex-wrap:wrap;gap:4px;margin-top:7px}
.feed-poll-voter{display:flex;align-items:center;gap:3px;background:rgba(0,0,0,.25);border-radius:10px;padding:2px 7px 2px 2px;font:700 9.5px Manrope;color:var(--muted)}
.feed-poll-voter img,.feed-poll-voter i{width:16px;height:16px;border-radius:50%;object-fit:cover;flex-shrink:0;display:block}
.feed-poll-voter i{display:grid;place-items:center;background:#342338;font-size:9px;font-style:normal}
.feed-poll-opt-row{display:flex;gap:6px;margin-top:6px;align-items:center}
.feed-poll-opt-row input{flex:1;border:1px solid #3b2d45;background:#19131f;color:var(--white);border-radius:12px;padding:10px 12px;font:600 13px Manrope;outline:none;min-width:0}
.feed-poll-opt-row button{flex-shrink:0;width:32px;height:32px;border-radius:10px;border:1px solid var(--line);background:#211827;color:var(--red);font-size:14px;cursor:pointer}
.feed-reactions{display:flex;gap:8px;margin-top:10px}
.feed-reaction-btn{flex:1;display:flex;align-items:center;justify-content:center;gap:7px;border:1px solid var(--line);background:#19131f;color:var(--muted);border-radius:14px;padding:10px;font:800 13px Manrope;cursor:pointer;transition:.15s border-color,.15s background,.15s color,.15s transform}
.feed-reaction-btn span{font-size:16px}
.feed-reaction-btn:active{transform:scale(.95)}
.feed-reaction-btn.active-like{border-color:var(--green);background:linear-gradient(180deg,rgba(88,209,138,.15),#1a1421);color:var(--green)}
.feed-reaction-btn.active-dislike{border-color:var(--red);background:linear-gradient(180deg,rgba(255,102,120,.15),#1a1421);color:var(--red)}

/* ---------- разграничительные линии в личном чате ---------- */
.chat-sheet-panel .sheet-head{border-bottom:1px solid var(--line);padding-bottom:12px;margin-bottom:4px}
.chat-sheet-panel #chatInputRow{border-top:1px solid var(--line);padding-top:12px}

/* ---------- реакции на личные сообщения ---------- */
@keyframes msgLongPress{0%{transform:scale(1) rotate(0)}30%{transform:scale(.95) rotate(-1.5deg)}55%{transform:scale(.93) rotate(1.5deg)}75%{transform:scale(.95) rotate(-1deg)}100%{transform:scale(.95) rotate(0)}}
.chat-bubble.long-pressed{animation:msgLongPress .32s ease-out forwards;position:relative;z-index:2}
.msg-reaction-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;inset:0;z-index:50;background:transparent}
.msg-reaction-popup{position:fixed;z-index:51;display:flex;gap:4px;background:#211827;border:1px solid var(--line);border-radius:22px;padding:6px;box-shadow:0 12px 30px rgba(0,0,0,.5);animation:msgReactionPop .18s cubic-bezier(.25,1.4,.4,1)}
.msg-reaction-popup button{width:40px;height:40px;border-radius:50%;border:0;background:#2c2233;font-size:20px;display:grid;place-items:center;cursor:pointer;transition:.12s transform,.12s background}
.msg-reaction-popup button:active{transform:scale(.85)}
.msg-reaction-popup button.active-reaction{background:linear-gradient(135deg,#f7a62b,#e58c16)}
@keyframes msgReactionPop{from{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}
.chat-bubble{position:relative}
.msg-reaction-badge{position:absolute;bottom:-9px;right:8px;background:#211827;border:1px solid var(--line);border-radius:10px;padding:1px 5px;font-size:11px;line-height:1.4;box-shadow:0 3px 8px rgba(0,0,0,.4);z-index:1}

/* ---------- фото в посте ленты ---------- */
.feed-photo-preview{position:relative;margin-top:10px;border-radius:16px;overflow:hidden}
.feed-photo-preview img{width:100%;max-height:260px;object-fit:cover;display:block}
.feed-photo-remove{position:absolute;top:8px;right:8px;width:30px;height:30px;border-radius:50%;border:0;background:rgba(20,14,24,.75);color:#fff;font-size:14px;cursor:pointer}
.feed-photo-uploading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(15,10,18,.55);color:var(--cream);font:800 12px Manrope}
.feed-post-photo{width:100%;max-height:280px;object-fit:cover;border-radius:16px;display:block;margin-top:9px;cursor:pointer}
.feed-post-card-photo{width:100%;max-height:220px;object-fit:cover;border-radius:14px;display:block;margin-top:9px}

/* ---------- "чёрное пятно" — фолбэк, когда фото ещё не загружено ---------- */
/* Легкая регистрация больше не требует фото — новый человек первое время
   отображается сплошным тёмным кругом/квадратом (форму берёт от родителя
   через border-radius:inherit), а не случайной эмодзи, которая раньше не
   сообщала ничего осмысленного о том, что человек ещё не дошёл до фото. */
.no-photo-spot{display:block;width:100%;height:100%;background:#0a070c;border-radius:inherit}
img.no-photo-spot{object-fit:cover;color:transparent;font-size:0}

/* ---------- бейдж верификации ---------- */
.verify-badge{display:inline-block;border-radius:20px;padding:5px 11px;font-size:10.5px;font-weight:800}
.verify-badge.verify-none{background:rgba(255,102,120,.12);color:var(--red);border:1px solid rgba(255,102,120,.3)}
.verify-badge.verify-pending{background:rgba(239,159,39,.12);color:var(--gold2);border:1px solid rgba(239,159,39,.3)}
.verify-badge.verify-ok{background:rgba(88,209,138,.12);color:var(--green);border:1px solid rgba(88,209,138,.3)}

/* ---------- очередь верификации в админке ---------- */
.admin-verify-card{border:1px solid var(--line);background:#1b1422;border-radius:16px;padding:12px;margin-bottom:10px}
.admin-verify-head{margin-bottom:9px}
.admin-verify-head b{display:block;font-size:13px}
.admin-verify-head small{color:var(--muted);font-size:11px}
.admin-verify-photos{display:flex;gap:6px}
.admin-verify-photo{flex:1;width:0;aspect-ratio:3/4;object-fit:cover;border-radius:10px;cursor:pointer}
.admin-verify-actions{display:flex;gap:8px;margin-top:10px}
.admin-verify-approve,.admin-verify-decline{flex:1;border-radius:12px;padding:10px;font:800 12.5px Manrope;cursor:pointer;border:1px solid}
.admin-verify-approve{background:linear-gradient(135deg,#7fe0a6,#3fa866);color:#0f2418;border-color:transparent}
.admin-verify-decline{background:#211827;color:var(--red);border-color:rgba(255,102,120,.4)}

/* ---------- кроппер главного фото ---------- */
.crop-viewport{position:relative;width:100%;aspect-ratio:1/1;border-radius:16px;overflow:hidden;background:#000;touch-action:none;cursor:grab;margin-top:12px}
.crop-viewport:active{cursor:grabbing}
.crop-viewport img{position:absolute;top:50%;left:50%;max-width:none;max-height:none;transform-origin:center center;user-select:none;-webkit-user-drag:none;pointer-events:none}
.crop-zoom-row{display:flex;align-items:center;gap:10px;margin:14px 0 18px;font-size:14px}
.crop-zoom-row input[type=range]{flex:1;accent-color:var(--gold)}

/* ---------- неоновые бейджи-напоминания на главной ---------- */
.home-nudge-row{display:flex;gap:8px;margin-top:14px;margin-bottom:12px}
.home-nudge-btn{flex:1;min-width:0;border-radius:14px;padding:12px 10px;font:800 12.5px Manrope;cursor:pointer;border:1px solid;text-align:center;animation:neonFlicker 3.2s infinite}
.home-nudge-blue{background:rgba(74,158,255,.12);border-color:#4a9eff;color:#bfe0ff;box-shadow:0 0 10px rgba(74,158,255,.55),0 0 22px rgba(74,158,255,.25)}
.home-nudge-red{background:rgba(255,77,90,.12);border-color:#ff4d5a;color:#ffcdd1;box-shadow:0 0 10px rgba(255,77,90,.55),0 0 22px rgba(255,77,90,.25)}
/* Неравномерное мерцание, как у настоящей неоновой вывески — не плавная
   синусоида, а короткие "провалы" яркости в случайные моменты. */
@keyframes neonFlicker{
  0%,19%,21%,23%,54%,56%,100%{opacity:1}
  20%,22%,55%{opacity:.68}
}
.map-modal-fullscreen{padding:10px;align-items:stretch}.map-modal-fullscreen .map-modal-inner{height:100%;display:flex;flex-direction:column}.picker-stage{position:relative;flex:1;min-height:140px;border-radius:16px;overflow:hidden;margin:8px 0}.picker-address{flex-shrink:0;min-height:38px;display:flex;align-items:center;justify-content:center;text-align:center;font:700 12.5px Manrope;color:var(--cream);padding:6px 4px;line-height:1.35}.picker-address.dim{color:var(--muted);font-weight:600}.map-prop .map-tip-status,.map-prop .map-prop-time{pointer-events:auto;cursor:pointer}.map-prop .map-tip-status{max-width:150px}.proposal-meta .proposal-place{min-width:0;flex:1 1 100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.map-prop{width:58px!important;height:58px!important;position:relative!important;display:grid!important;place-items:center;filter:drop-shadow(0 5px 8px rgba(0,0,0,.35))}.map-prop-pin{position:absolute;top:6px;left:50%;transform:translate(-50%,0) rotate(-45deg);width:26px;height:26px;border-radius:50% 50% 50% 0;background:linear-gradient(145deg,#ff7a86,#e03146);border:3px solid #2a0f14;box-shadow:0 6px 16px rgba(224,49,70,.45)}.map-prop-pin:after{content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:9px;height:9px;border-radius:50%;background:#2a0f14}.map-prop-time{position:absolute;top:36px;left:50%;transform:translateX(-50%);background:#1b1422;color:var(--gold2);border:1px solid var(--gold);border-radius:8px;font:800 10px Manrope;padding:2px 7px;white-space:nowrap;box-shadow:0 4px 12px rgba(0,0,0,.4)}.cta.cta-joined{background:linear-gradient(135deg,#4fbf7d,#3a9e63);color:#08210f;box-shadow:0 10px 26px rgba(88,209,138,.22)}.prop-actions{display:flex;gap:8px;margin-top:15px}.prop-actions .cta{margin-top:0;flex:2;justify-content:center}.prop-actions .cta.secondary{flex:1}.prop-point-wrap{position:relative;margin:10px 0}.header-tab-btn{padding:8px 13px;font-size:11.5px;box-shadow:none}.round-btn.header-tab-btn{padding:0;width:38px;height:38px;font-size:17px}.archive-btn-wrap.header-tab-btn{padding:0;background:none;box-shadow:none}.archive-btn-wrap .round-btn{width:38px;height:38px;font-size:17px;padding:0}.feed-post-comment-cta{justify-content:center;text-align:center}.radar-head.radar-head-center{justify-content:center;text-align:center;min-height:0;margin:0 0 5px}.radar-head.radar-head-center h2{margin:0}.radar-head.radar-head-center h2{font-size:15px;letter-spacing:0;color:var(--muted);font-weight:800}.map-mini-ctl{border:1px solid var(--line)!important;border-radius:14px!important;overflow:hidden;box-shadow:0 8px 20px rgba(0,0,0,.35)!important;margin-bottom:8px!important}.map-mini-ctl a{display:block;background:#1b1422!important;color:var(--cream)!important;width:32px!important;height:32px!important;line-height:32px!important;text-align:center;font:700 15px/32px Manrope,sans-serif!important;text-decoration:none}.map-mini-ctl a:hover{background:#241a2b!important}.prop-point-expand{position:absolute;right:8px;top:8px;z-index:400;width:34px;height:34px;font-size:15px;background:rgba(20,14,26,.82);backdrop-filter:blur(4px)}.picker-map-full{height:100%;width:100%;border-radius:16px}.picker-crosshair{position:absolute;left:50%;top:50%;transform:translate(-50%,-100%);pointer-events:none;z-index:500;filter:drop-shadow(0 6px 10px rgba(0,0,0,.5))}.picker-crosshair span{display:block;width:26px;height:26px;border-radius:50% 50% 50% 0;background:var(--gold);border:3px solid #1a1007;transform:rotate(-45deg)}.picker-crosshair:after{content:"";position:absolute;left:50%;top:2px;width:6px;height:6px;margin-left:-3px;border-radius:50%;background:rgba(0,0,0,.45)}.msg-action-btn{display:block;width:100%;margin:8px 0 2px;padding:9px 12px;border:0;border-radius:12px;background:linear-gradient(135deg,#f7a62b,#e58c16);color:#211307;font:800 12px Manrope;cursor:pointer}.msg-action-btn:active{transform:scale(.97)}.gal-cell{transition:translate .18s ease}@keyframes galWiggle{0%,100%{rotate:-1.7deg}50%{rotate:1.7deg}}.gal-reorder .gal-replace{animation:galWiggle .44s ease-in-out infinite}.gal-reorder .gal-replace:nth-child(2n){animation-delay:-.22s}.gal-reorder .gal-del,.gal-reorder .gal-star{opacity:0;pointer-events:none;transition:opacity .15s}.gal-cell.gal-grabbed{animation:none;rotate:0deg;scale:1.09;z-index:5;transition:none;box-shadow:0 14px 34px rgba(0,0,0,.55)}
/* Значок верификации стоит в одной строке с именем и BOSS —
   отдельной строкой он оставлял пустую полосу под карточкой. */
.admin-review-head{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:12.5px}.admin-review-arrow{color:var(--muted)}.admin-review-stars{margin-left:auto;color:var(--gold2);font-size:13px;letter-spacing:1px}.admin-review-text{margin:8px 0 10px;font-size:13px;line-height:1.45;color:var(--cream)}.admin-review-actions{display:flex;gap:8px}.admin-review-actions .cta{margin-top:0;flex:1;padding:11px}.feed-post-place{margin:8px 0 2px;font:700 12.5px Manrope;color:var(--gold2)}.feed-post-audio{margin:10px 0 4px}.feed-post-audio audio{width:100%;height:38px}.feed-audio-chip{display:inline-block;margin-top:8px;padding:4px 10px;border-radius:20px;border:1px solid var(--line);background:rgba(255,255,255,.04);color:var(--gold2);font:700 11px Manrope}.feed-media-menu{position:absolute;right:6px;bottom:46px;z-index:20;min-width:186px;padding:6px;border:1px solid var(--line);border-radius:16px;background:#1b1422;box-shadow:0 16px 40px rgba(0,0,0,.55);display:flex;flex-direction:column;gap:2px;transform-origin:bottom right;animation:mediaMenuIn .14s ease-out}@keyframes mediaMenuIn{from{opacity:0;transform:scale(.92) translateY(6px)}to{opacity:1;transform:none}}.feed-media-menu button{border:0;background:none;color:var(--cream);text-align:left;padding:10px 12px;border-radius:11px;font:700 13px Manrope;cursor:pointer}.feed-media-menu button:active{background:rgba(255,255,255,.06)}.feed-place-pin{font-size:15px}.feed-reply-bar{display:flex;align-items:center;gap:8px;margin:0 0 8px;padding:7px 10px;border-left:3px solid var(--gold);border-radius:10px;background:rgba(239,159,39,.08)}.feed-reply-body{flex:1;min-width:0;font:600 11.5px Manrope;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feed-reply-body b{color:var(--gold2);margin-right:5px}.comment-quote{margin:3px 0 5px;padding:5px 8px;border-left:2px solid var(--line);border-radius:7px;background:rgba(255,255,255,.03);font:600 11px Manrope;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.comment-quote b{color:var(--gold2);margin-right:4px}.comment-row{transition:transform .16s ease}.feed-text-wrap{position:relative}.feed-text-wrap textarea{display:block}.feed-attach-btn{position:absolute;right:9px;bottom:9px;width:32px;height:32px;border-radius:10px;border:1px solid var(--line);background:#1b1422;color:var(--gold2);font:700 20px/1 Manrope;cursor:pointer;display:grid;place-items:center;padding:0}.feed-attach-btn:active{transform:scale(.92)}.feed-text-wrap textarea{padding-right:46px}.feed-audio-preview{display:flex;align-items:center;gap:8px;margin-top:12px;padding:8px 10px;border:1px solid var(--line);border-radius:14px;background:rgba(255,255,255,.03)}.feed-audio-label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:600 12px Manrope;color:var(--muted)}.chat-voice-preview{gap:8px}.voice-prev-seek{flex:1;min-width:0;display:flex;align-items:center}#voicePreviewSeek{-webkit-appearance:none;appearance:none;width:100%;height:22px;background:none;margin:0}#voicePreviewSeek::-webkit-slider-runnable-track{height:4px;border-radius:3px;background:linear-gradient(to right,var(--gold) var(--played,0%),rgba(255,255,255,.16) var(--played,0%))}#voicePreviewSeek::-moz-range-track{height:4px;border-radius:3px;background:rgba(255,255,255,.16)}#voicePreviewSeek::-moz-range-progress{height:4px;border-radius:3px;background:var(--gold)}#voicePreviewSeek::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:13px;height:13px;margin-top:-4.5px;border-radius:50%;background:var(--gold);border:0;box-shadow:0 2px 6px rgba(0,0,0,.4)}#voicePreviewSeek::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--gold);border:0}.voice-prev-time{min-width:44px;text-align:center}.voice-prev-btn{width:34px;height:34px;flex-shrink:0;border-radius:50%;border:1px solid var(--line);background:#1b1422;color:var(--cream);font-size:14px;line-height:1;cursor:pointer;display:grid;place-items:center}.voice-prev-danger{color:var(--red);border-color:rgba(255,102,120,.35)}.voice-prev-time{font:800 12px Manrope;color:var(--cream);min-width:38px}.voice-prev-send{margin-left:auto;flex-shrink:0;width:38px;height:38px;border-radius:50%;border:0;background:linear-gradient(135deg,#f7a62b,#e58c16);color:#211307;font-size:17px;font-weight:900;cursor:pointer}.person-seen{font:600 12px Manrope;color:var(--muted);letter-spacing:0;vertical-align:middle;white-space:nowrap;margin-left:4px}.person-seen:not(:empty):before{content:"· ";color:var(--muted);opacity:.7}.person-seen.is-online{color:var(--green)}.person-seen:empty{display:none}.person-tags{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:7px}.person-tags:empty{display:none}#personVerify:empty{display:none}#personVerify{display:inline-block;vertical-align:middle}#personVerify .verify-badge{vertical-align:middle;padding:4px 11px;font-size:11px;letter-spacing:0;line-height:1.25;white-space:nowrap}#myVerifyBadge{margin-left:auto;flex-shrink:0}#myVerifyBadge:empty{display:none}#myVerifyBadge .verify-badge{vertical-align:middle;padding:4px 10px;font-size:10.5px;letter-spacing:0;white-space:nowrap}
#feedPublishBtn{position:relative;justify-content:center}
#feedPublishBtn b{position:absolute;right:17px;top:50%;transform:translateY(-50%)}
/* Открытый пост: сначала снимок, потом текст, реакции мелкими фишками.
   Текст поста раньше стоял заголовком h2 в шапке шторки — набирался
   крупным Unbounded и занимал два экрана, а фото уезжало под сгиб. */
.feed-post-author{display:flex;align-items:center;gap:9px;margin:2px 0 11px}
.feed-post-author .avatar-big{width:30px;height:30px;border-radius:10px;font-size:15px}
.feed-post-who{min-width:0;display:flex;align-items:baseline;gap:7px;flex-wrap:wrap}
.feed-post-who b{font:800 13px Manrope;color:var(--white)}
.feed-post-who small{font:600 11.5px Manrope;color:var(--muted)}
.feed-post-author .feed-post-views{margin-left:auto;flex-shrink:0;font:600 11.5px Manrope;color:var(--muted)}
.feed-post-photo{margin-top:0;max-height:420px}
.feed-post-text{margin:12px 0 0;font:600 14px/1.5 Manrope;color:var(--cream);white-space:pre-wrap;overflow-wrap:anywhere}
.feed-post-text-more{margin-top:7px;font-size:13px;color:var(--muted)}
.feed-post-text:empty{display:none}
/* Реакции — подпись под текстом, а не две кнопки во всю ширину:
   голосовать за пост можно, но это не главное действие в шторке. */
.feed-reactions{gap:7px;margin-top:12px;justify-content:flex-start}
.feed-reaction-btn{flex:0 0 auto;gap:5px;padding:6px 11px;border-radius:11px;font:800 12px Manrope}
.feed-reaction-btn span{font-size:13px}
/* Комментарии отделены чертой: это уже другой разговор, не часть поста. */
.feed-comments-head{display:flex;align-items:baseline;gap:7px;margin:17px 0 9px;padding-top:15px;border-top:1px solid var(--line)}
.feed-comments-head b{font:800 11px Manrope;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
.feed-comments-head i{font:800 11.5px Manrope;font-style:normal;color:var(--gold2)}
/* «Добавить запись» и «Добавить идею» — те же блик и свечение, что у «Получить VIP».
   Свечение здесь через box-shadow, а не отдельным слоем под кнопкой: блик
   требует overflow:hidden, а он обрезал бы ореол, вынесенный за края.
   Ключевые кадры перебивают box-shadow:none из .header-tab-btn — анимация
   в каскаде выше обычных объявлений, дополнительная специфичность не нужна. */
.pulse-cta{position:relative;overflow:hidden;animation:ctaHalo 2.6s ease-in-out infinite}
.pulse-cta:before{content:'';position:absolute;top:0;left:-75%;width:45%;height:100%;
  background:linear-gradient(115deg,transparent 0%,rgba(255,255,255,.85) 50%,transparent 100%);
  transform:skewX(-20deg);animation:ctaShine 2.6s ease-in-out infinite;pointer-events:none}
@keyframes ctaHalo{0%,100%{box-shadow:0 5px 14px rgba(239,159,39,.22)}50%{box-shadow:0 6px 20px rgba(239,159,39,.48)}}
/* Экономный режим и «меньше движения» в системе гасят и блик, и пульсацию —
   кнопка остаётся обычной, но полностью рабочей. */
body.lite .pulse-cta{animation:none}
body.lite .pulse-cta:before{display:none}
@media (prefers-reduced-motion:reduce){.pulse-cta{animation:none}.pulse-cta:before{display:none}}
/* Карточка ленты: снимок первым, текст под ним — как в открытом посте.
   Раньше заголовок шёл перед фото, и в записи, где главное картинка,
   она начиналась под двумя строками текста. */
.feed-post-card-photo{margin-top:10px;max-height:340px}
.feed-post-card .feed-post-title{margin:10px 0 3px}
/* Подвал делится надвое: слева счётчики, справа реакции. */
.feed-post-foot{align-items:center;justify-content:space-between;gap:10px}
.feed-post-stats{display:flex;gap:14px;min-width:0}
.feed-card-react{display:flex;gap:6px;flex-shrink:0}
.feed-card-react-btn{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--line);
  background:#19131f;color:var(--muted);border-radius:10px;padding:4px 8px;font:800 11px Manrope;
  line-height:1;cursor:pointer;transition:.15s border-color,.15s background,.15s color,.1s transform}
.feed-card-react-btn em{font-style:normal;font-size:10.5px}
.feed-card-react-btn:active{transform:scale(.92)}
.feed-card-react-btn.on-like{border-color:var(--green);color:var(--green);background:rgba(88,209,138,.12)}
.feed-card-react-btn.on-dislike{border-color:var(--red);color:var(--red);background:rgba(255,102,120,.12)}
/* Карточка перестала быть <button> — вернём ей то, что давал сам тег. */
.feed-post-card{text-align:left;width:100%;cursor:pointer}
.feed-post-card:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
/* Одна строка под текстом: реакции, удаление, справа просмотры. */
.feed-reactions{align-items:center}
.feed-del-btn{padding:6px 9px}
.feed-del-btn span{font-size:13px}
.feed-del-btn:active{transform:scale(.92)}
/* Действие необратимое — цвет предупреждает, но кнопка не кричит:
   подтверждение всё равно спросят отдельно. */
.feed-del-btn{border-color:rgba(255,102,120,.3);color:var(--red)}
.feed-reactions .feed-post-views{margin-left:auto;flex-shrink:0;font:700 11.5px Manrope;color:var(--muted)}
/* Кнопка архива тянулась во всю высоту строки из-за align-items:stretch
   на обёртке — у длинного имени в две строки она вырастала вместе с ним.
   Задаём свою высоту и центрируем по вертикали, саму обёртку не трогаем,
   чтобы не менять раскладку самой строки чата. */
.chat-row-archive{align-self:center;height:36px;min-height:0}
/* Не в сети — та же точка, но приглушённая и без свечения.
   Форму оставляем прежней: строка не прыгает, когда человек уходит. */
.dot-online.is-away{background:var(--muted);box-shadow:none;opacity:.5}
/* ---------- «Помогите нам»: баннер внизу главной ---------- */
.help-us-banner{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;
  margin:16px 0 6px;padding:15px 18px;border:0;border-radius:20px;
  background:linear-gradient(135deg,#2a1f2f,#1c1421);
  animation:helpUsGlow 2.8s ease-in-out infinite;
  color:var(--cream);font:800 15px Manrope;cursor:pointer;position:relative}
/* Свечение баннера: рамка и ореол вокруг наливаются и гаснут. Ничего не
   движется по экрану — меняется только яркость, поэтому взгляд замечает
   баннер, но не следит за ним. */
@keyframes helpUsGlow{
  0%,100%{box-shadow:0 0 0 1px rgba(239,159,39,.22),0 0 10px rgba(239,159,39,.10)}
  50%{box-shadow:0 0 0 1px rgba(255,202,103,.75),0 0 26px rgba(239,159,39,.42)}
}
/* Смайлик отбивает такт отдельно от рамки: два коротких удара и пауза.
   Движение в одной точке заметнее, чем шевеление всего блока, и не мешает
   читать надпись рядом. */
.help-us-banner span{animation:helpUsBeat 2.6s ease-in-out infinite}
@keyframes helpUsBeat{
  0%,58%,100%{transform:scale(1)}
  64%{transform:scale(1.28)}
  70%{transform:scale(1.04)}
  76%{transform:scale(1.2)}
  84%{transform:scale(1)}
}
/* Текст поверх волн: без этого :after перекрывал бы надпись. */
.help-us-banner span,.help-us-banner b{position:relative;z-index:1}
.help-us-banner span{font-size:20px;line-height:1}
.help-us-banner b{font:800 15px Manrope}
.help-us-banner:active{transform:scale(.98)}
/* В экономном режиме луч не крутим, но рамку оставляем — иначе баннер
   превратится в безликий прямоугольник. */
body.lite .help-us-banner,body.lite .help-us-banner span{animation:none}
body.lite .help-us-banner{outline:1px solid rgba(239,159,39,.35);outline-offset:-1px}
@media (prefers-reduced-motion:reduce){
  .help-us-banner,.help-us-banner span{animation:none}
  .help-us-banner{outline:1px solid rgba(239,159,39,.35);outline-offset:-1px}
}

/* ---------- окно с текстом ---------- */
.help-us-box{position:relative;width:100%;max-width:420px;max-height:82vh;display:flex;flex-direction:column;
  padding:26px 20px 18px;border-radius:26px;background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow)}
.help-us-x{position:absolute;top:12px;right:12px}
/* Текст длинный — прокручиваем только его, кнопка «Напишите нам» остаётся на виду. */
.help-us-scroll{overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding-right:4px;margin-bottom:14px}
.help-us-scroll h3{font:800 20px Unbounded;color:var(--white);margin:0 34px 12px 0;line-height:1.25}
.help-us-scroll h4{font:800 15px Manrope;color:var(--gold2);margin:20px 0 9px}
.help-us-scroll p{font:500 14px/1.6 Manrope;color:var(--cream);margin:0 0 11px}
.help-us-scroll p b{font-weight:800;color:var(--white)}
.help-us-accent{font-weight:800!important;color:var(--gold2)!important}
/* Блик по активной карточке убран намеренно: она висит на экране постоянно,
   и пробегающая полоса всё время тянет взгляд на себя. Осталось дыхание —
   его видно, когда смотришь, и оно не отвлекает, когда занят другим. */
@media (prefers-reduced-motion:reduce){.open-card,.open-card.on,.open-card:before,.open-card.on:before{animation:none}}
/* ---------- ретро-смайлики ---------- */
/* В тексте смайлик стоит в строке наравне с буквами, поэтому выравниваем
   по нижней линии, а не по базовой — иначе шар «проваливается» под строку. */
.sml{display:inline-block;vertical-align:-4px;margin:0 1px}
/* Панель — обычный контейнер. Сеткой должны быть вкладки внутри неё, а не
   она сама: когда сюда добавили вкладки и вторую сетку, они стали ячейками
   этой шестиколоночной раскладки и встали вертикальными столбцами. */
.chat-smiley-panel{display:block;
  margin-top:8px;padding:9px;border:1px solid var(--line);border-radius:16px;background:var(--panel2)}
.smiley-pick{display:grid;place-items:center;padding:6px 0;border:0;border-radius:11px;
  background:transparent;cursor:pointer;transition:background .12s}
.smiley-pick:active{background:rgba(255,255,255,.09);transform:scale(.92)}
/* Значок реакции под пузырём: смайлики мельче, чтобы не спорить с текстом. */
.msg-reaction-badge .sml{vertical-align:-3px}
/* Во всплывашке реакций svg вместо эмодзи — задаём размер кнопке, а не тексту. */
.msg-reaction-popup button{display:grid;place-items:center}
/* ---------- панель смайликов ---------- */
/* Восемь в ряд: двадцать четыре смайлика при шести колонках дают четыре
   ряда и панель во весь экран. Три ряда помещаются, не закрывая чат. */
.smiley-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:3px}
/* ---------- оживление смайликов ---------- */
/* transform-box:fill-box обязателен: без него transform внутри svg считается
   от координат документа, и зрачок улетает за пределы картинки. */
.sml .pL,.sml .pR,.sml .mo,.sml .tg,.sml .tr,.sml .tr1,.sml .tr2,.sml .br,.sml .lp,.sml .ht,
.sml .gl,.sml .sp,.sml .sp2,.sml .mL,.sml .mR,.sml .halo,.sml .hn1,.sml .hn2,.sml .z1,.sml .z2,.sml .sw{
  transform-box:fill-box;transform-origin:center}

/* Ритм строится против «заводной игрушки» тремя приёмами: цикл длинный, а
   событие в нём короткое — лицо живёт паузами; событий два-три и стоят они
   на несимметричных отметках, поэтому повтор не ловится; у каждого экземпляра
   своя случайная фаза (--p), так что два одинаковых смайлика в переписке
   никогда не двигаются в такт. */
.sml .pL,.sml .pR{animation:kBlink 7.4s infinite;animation-delay:var(--p,0s)}
@keyframes kBlink{0%,25%,100%{transform:scaleY(1)}
  26.5%{transform:scaleY(.05)}28%{transform:scaleY(1)}
  30%{transform:scaleY(.05)}31.5%{transform:scaleY(1)}
  73%{transform:scaleY(1)}74.5%{transform:scaleY(.05)}76%{transform:scaleY(1)}}

/* Улыбка дёргает уголками — коротко и не всегда одинаково. */
.k-smile .mo{animation:kTwitch 5.6s infinite;animation-delay:var(--p2,0s)}
@keyframes kTwitch{0%,20%,100%{transform:scale(1,1)}
  23%{transform:scale(1.13,1.28)}28%{transform:scale(1,1)}
  62%{transform:scale(1,1)}65%{transform:scale(1.07,1.16) translateX(.3px)}70%{transform:scale(1,1)}}

/* Смех и ржач: рот хлопает очередями по три, потом передышка. */
.k-laugh .mo,.k-rofl .mo{animation:kHaha 2.3s infinite;animation-delay:var(--p,0s)}
@keyframes kHaha{0%{transform:scaleY(.45)}8%{transform:scaleY(1.15)}16%{transform:scaleY(.5)}
  24%{transform:scaleY(1.1)}32%{transform:scaleY(.45)}40%{transform:scaleY(1.18)}48%,100%{transform:scaleY(.45)}}
.k-laugh .tg,.k-rofl .tg{animation:kTg 2.3s infinite;animation-delay:var(--p,0s)}
@keyframes kTg{0%{transform:translateY(1.4px)}8%{transform:translateY(0)}16%{transform:translateY(1.4px)}
  24%{transform:translateY(.4px)}32%,100%{transform:translateY(1.4px)}}
.k-laugh,.k-rofl{animation:kHahaBody 2.3s infinite;animation-delay:var(--p,0s)}
@keyframes kHahaBody{0%,52%,100%{transform:rotate(0)}
  8%{transform:rotate(-6deg)}20%{transform:rotate(5deg)}34%{transform:rotate(-3deg)}44%{transform:rotate(2deg)}}
.k-rofl .tr1{animation:kTearOut 1.7s ease-out infinite;animation-delay:var(--p,0s)}
.k-rofl .tr2{animation:kTearOut 1.7s ease-out infinite;animation-delay:var(--p2,0s)}
@keyframes kTearOut{0%{transform:translate(0,0) scale(.2);opacity:0}
  25%{opacity:1}100%{transform:translate(-2px,9px) scale(1);opacity:0}}

/* Подмигивание резкое, с придержкой, и не на каждом обороте в одном месте. */
.k-wink .pR{animation:kWink 4.8s infinite;animation-delay:var(--p2,0s)}
.k-wink .pL{animation:kBlink 7.4s infinite;animation-delay:var(--p,0s)}
@keyframes kWink{0%,32%,100%{transform:scaleY(1)}
  34%{transform:scaleY(.05)}42%{transform:scaleY(.05)}44%{transform:scaleY(1)}
  84%{transform:scaleY(1)}85.5%{transform:scaleY(.05)}88%{transform:scaleY(1)}}
.k-wink .mo{animation:kTwitch 4.8s infinite;animation-delay:var(--p2,0s)}

/* Язык мечется рывками, а не качается маятником. */
.k-tongue .tg{animation:kTongue 3.3s infinite;animation-delay:var(--p2,0s)}
@keyframes kTongue{0%,12%,100%{transform:translateY(0) rotate(0)}
  16%{transform:translateY(1.3px) rotate(-15deg)}22%{transform:translateY(.6px) rotate(10deg)}
  27%{transform:translateY(1px) rotate(-7deg)}33%{transform:translateY(0) rotate(0)}
  66%{transform:translateY(0) rotate(0)}70%{transform:translateY(1.1px) rotate(12deg)}75%{transform:translateY(0) rotate(0)}}

/* Слеза набухает медленно, срывается мгновенно, потом долгая пауза. */
.k-cry .tr{animation:kTear 4.6s infinite;animation-delay:var(--p,0s)}
@keyframes kTear{0%{transform:translateY(-3px) scale(.2);opacity:0}
  14%{transform:translateY(0) scale(1);opacity:1}
  31%{transform:translateY(.6px) scale(1);opacity:1}
  39%{transform:translateY(10px) scale(.7);opacity:0}
  100%{transform:translateY(10px) scale(.7);opacity:0}}
.k-cry .mo{animation:kQuiver 1.35s infinite;animation-delay:var(--p2,0s)}
@keyframes kQuiver{0%,42%,100%{transform:translateX(0)}
  48%{transform:translateX(.5px)}54%{transform:translateX(-.4px)}60%{transform:translateX(.2px)}}

/* Злость и дьявол: брови обрушиваются рывком и держатся, шар бьёт дрожью. */
.k-angry .br,.k-devil .br,.k-yell .br{animation:kSlam 3.9s infinite;animation-delay:var(--p,0s)}
@keyframes kSlam{0%,22%,100%{transform:translateY(0)}
  25%{transform:translateY(1.7px)}59%{transform:translateY(1.7px)}65%{transform:translateY(0)}}
.k-angry,.k-devil{animation:kJolt 3.9s infinite;animation-delay:var(--p,0s)}
@keyframes kJolt{0%,24%,100%{transform:translateX(0)}
  26%{transform:translateX(-.9px)}28%{transform:translateX(.9px)}30%{transform:translateX(-.6px)}
  32%{transform:translateX(.4px)}34%{transform:translateX(0)}
  47%{transform:translateX(0)}49%{transform:translateX(.7px)}51%{transform:translateX(-.5px)}53%{transform:translateX(0)}}
.k-devil .hn1{animation:kHornL 2.4s ease-in-out infinite;animation-delay:var(--p2,0s)}
.k-devil .hn2{animation:kHornR 2.4s ease-in-out infinite;animation-delay:var(--p2,0s)}
@keyframes kHornL{0%,100%{transform:rotate(0)}50%{transform:rotate(-8deg)}}
@keyframes kHornR{0%,100%{transform:rotate(0)}50%{transform:rotate(8deg)}}

/* Кричит: рот распахивается толчками, ручки трясутся. */
.k-yell .mo{animation:kYell 1.9s infinite;animation-delay:var(--p,0s)}
@keyframes kYell{0%,18%,100%{transform:scale(1)}24%{transform:scale(1.25,1.35)}
  40%{transform:scale(1.05,1.1)}52%{transform:scale(1.2,1.3)}68%{transform:scale(1)}}
.k-yell .mL{animation:kShakeL 1.9s infinite;animation-delay:var(--p,0s)}
.k-yell .mR{animation:kShakeR 1.9s infinite;animation-delay:var(--p,0s)}
@keyframes kShakeL{0%,100%{transform:rotate(-24deg) translateY(0)}50%{transform:rotate(-34deg) translateY(-1.4px)}}
@keyframes kShakeR{0%,100%{transform:rotate(24deg) translateY(0)}50%{transform:rotate(34deg) translateY(-1.4px)}}

/* Удивление: рот толчком, брови взлетают и медленно оседают. */
.k-wow .mo{animation:kWow 3.5s infinite;animation-delay:var(--p2,0s)}
@keyframes kWow{0%,16%,100%{transform:scale(.75,.62)}
  20%{transform:scale(1.2,1.32)}27%{transform:scale(1.02,1.1)}54%{transform:scale(1,1.06)}72%{transform:scale(.75,.62)}}
.k-wow .br{animation:kBrowUp 3.5s infinite;animation-delay:var(--p2,0s)}
@keyframes kBrowUp{0%,16%,100%{transform:translateY(0)}20%{transform:translateY(-1.6px)}64%{transform:translateY(-1.3px)}74%{transform:translateY(0)}}

/* Поцелуй: губы выстреливают вперёд, сердце срывается следом. */
.k-kiss .lp{animation:kPucker 3.7s infinite;animation-delay:var(--p,0s)}
@keyframes kPucker{0%,28%,100%{transform:scale(1)}
  32%{transform:scale(1.45,.78)}38%{transform:scale(1.05)}42%{transform:scale(1.22,.9)}48%{transform:scale(1)}}
.k-kiss .ht{animation:kHeartFly 3.7s infinite;animation-delay:var(--p,0s)}
@keyframes kHeartFly{0%,30%{transform:translate(0,0) scale(.3);opacity:0}
  36%{transform:translate(0,-1px) scale(1.1);opacity:1}
  62%{transform:translate(3px,-7px) scale(.8);opacity:0}
  100%{transform:translate(3px,-7px) scale(.8);opacity:0}}

/* Сердце бьётся: удар и отскок, как настоящий пульс. */
.k-heart .ht{animation:kPulse 1.35s infinite;animation-delay:var(--p,0s)}
@keyframes kPulse{0%,100%{transform:scale(1)}14%{transform:scale(1.18)}26%{transform:scale(1.02)}
  38%{transform:scale(1.12)}52%{transform:scale(1)}}

/* Блик по очкам проходит быстро и редко — отблеск, а не маятник. */
.k-cool .gl{animation:kGlint 5.4s infinite;animation-delay:var(--p,0s)}
@keyframes kGlint{0%,42%,100%{transform:translateX(0);opacity:.5}
  48%{transform:translateX(21px);opacity:.95}49%{opacity:0}50%{transform:translateX(0);opacity:0}52%{opacity:.5}}

/* Без эмоций: зрачки стреляют в сторону и замирают — вся жизнь в этом. */
.k-flat .pL,.k-flat .pR{animation:kLook 6.4s infinite;animation-delay:var(--p,0s)}
@keyframes kLook{0%,30%,100%{transform:translateX(0)}
  33%{transform:translateX(1.6px)}52%{transform:translateX(1.6px)}55%{transform:translateX(0)}
  74%{transform:translateX(0)}77%{transform:translateX(-1.3px)}86%{transform:translateX(-1.3px)}89%{transform:translateX(0)}}

/* Ошалевший: крестики крутятся в разные стороны и с разной скоростью. */
.k-crazy .sp{animation:kSpin 1.5s linear infinite;animation-delay:var(--p,0s)}
.k-crazy .sp2{animation:kSpinBack 1.9s linear infinite;animation-delay:var(--p2,0s)}
@keyframes kSpin{to{transform:rotate(360deg)}}
@keyframes kSpinBack{to{transform:rotate(-360deg)}}
.k-crazy{animation:kWobble 2.3s ease-in-out infinite;animation-delay:var(--p2,0s)}
@keyframes kWobble{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}

/* Грусть: короткий вздох и долгая неподвижность. */
.k-sad .mo{animation:kSigh 5.8s infinite;animation-delay:var(--p,0s)}
@keyframes kSigh{0%,34%,100%{transform:translateY(0) scaleY(1)}
  40%{transform:translateY(.9px) scaleY(1.25)}57%{transform:translateY(.9px) scaleY(1.25)}65%{transform:translateY(0) scaleY(1)}}

/* Милашка и радость: ручки подпрыгивают, рот тянется. */
.k-cute .mo{animation:kTwitch 4.4s infinite;animation-delay:var(--p2,0s)}
.k-happy .mL{animation:kWaveL 1.1s ease-in-out infinite;animation-delay:var(--p,0s)}
.k-happy .mR{animation:kWaveR 1.1s ease-in-out infinite;animation-delay:var(--p,0s)}
@keyframes kWaveL{0%,100%{transform:rotate(-30deg) translateY(0)}50%{transform:rotate(-46deg) translateY(-2px)}}
@keyframes kWaveR{0%,100%{transform:rotate(30deg) translateY(0)}50%{transform:rotate(46deg) translateY(-2px)}}

/* Смущение: щёки разгораются, ручки прикрывают лицо и отходят. */
.k-shy .mL{animation:kShyL 4.2s ease-in-out infinite;animation-delay:var(--p,0s)}
.k-shy .mR{animation:kShyR 4.2s ease-in-out infinite;animation-delay:var(--p,0s)}
@keyframes kShyL{0%,30%,100%{transform:rotate(-18deg) translate(0,0)}
  42%,62%{transform:rotate(-18deg) translate(3px,-3px)}}
@keyframes kShyR{0%,30%,100%{transform:rotate(18deg) translate(0,0)}
  42%,62%{transform:rotate(18deg) translate(-3px,-3px)}}

/* Устал: капля пота стекает и пропадает. */
.k-tired .sw{animation:kSweat 4s infinite;animation-delay:var(--p,0s)}
@keyframes kSweat{0%,20%{transform:translateY(0) scale(.4);opacity:0}
  30%{transform:translateY(0) scale(1);opacity:1}
  46%{transform:translateY(7px) scale(.8);opacity:0}100%{opacity:0}}

/* Ангел: нимб покачивается и подсвечивается. */
.k-angel .halo{animation:kHalo 2.9s ease-in-out infinite;animation-delay:var(--p,0s)}
@keyframes kHalo{0%,100%{transform:translateY(0) scaleX(1);opacity:1}50%{transform:translateY(-1.4px) scaleX(.86);opacity:.75}}

/* Спит: «z» всплывают и тают, рот приоткрывается на вдохе. */
.k-sleep .z1{animation:kZ 3s ease-out infinite;animation-delay:var(--p,0s)}
.k-sleep .z2{animation:kZ 3s ease-out infinite;animation-delay:var(--p2,0s)}
@keyframes kZ{0%{transform:translate(0,0) scale(.4);opacity:0}
  30%{opacity:.95}100%{transform:translate(4px,-8px) scale(1.1);opacity:0}}
.k-sleep .mo{animation:kSnore 3.6s ease-in-out infinite;animation-delay:var(--p,0s)}
@keyframes kSnore{0%,100%{transform:scale(1)}50%{transform:scale(1.3,1.45)}}

/* Не понял: одна бровь ходит вверх-вниз, рот кривится. */
.k-conf .br{animation:kBrowThink 3.4s ease-in-out infinite;animation-delay:var(--p,0s)}
@keyframes kBrowThink{0%,100%{transform:translateY(0)}50%{transform:translateY(-1.3px)}}
.k-conf .mo{animation:kQuiver 2.2s infinite;animation-delay:var(--p2,0s)}

/* Серьёзно: зрачки коротко стреляют вбок, ручка подрагивает. */
.k-serious .pL,.k-serious .pR{animation:kLook 7.2s infinite;animation-delay:var(--p2,0s)}
.k-serious .mL{animation:kShyL 5.4s ease-in-out infinite;animation-delay:var(--p,0s)}

body.lite .sml,body.lite .sml *{animation:none!important}
@media (prefers-reduced-motion:reduce){.sml,.sml *{animation:none!important}}
