/* URBI V23 — expressive companion & interactive physical-feeling play. All 2.5D. */
.v23-backdrop[hidden],.v23-dialog[hidden]{display:none!important}
.v23-backdrop{position:fixed;inset:0;background:rgba(6,29,62,.55);backdrop-filter:blur(8px);z-index:79}
.v23-dialog{position:fixed;z-index:80;inset:auto 50% 50% auto;transform:translate(50%,50%);width:min(650px,calc(100vw - 26px));max-height:min(90dvh,760px);overflow-y:auto;background:linear-gradient(145deg,#f9fdff,#ebf5ff);border:1px solid #d2ecff;border-radius:26px;padding:20px 21px;box-shadow:0 25px 95px #001b4460;color:#163c68;overscroll-behavior:contain}
.v23-dialog-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.v23-eyebrow{font-size:10px;letter-spacing:.16em;font-weight:900;color:#2676aa}.v23-dialog-header button{width:36px;height:36px;border-radius:12px;padding:0;background:white;font-size:21px}
.v23-friend-hero{display:flex;align-items:center;gap:16px;margin:12px 0}.v23-mini-avatar{display:grid;place-items:center;flex:none;width:98px;height:98px;border-radius:27px;background:radial-gradient(circle,#bef0ff,#b6d8ff);box-shadow:inset 0 3px 19px #ffffff88}.v23-mini-avatar img{width:86px;height:86px;object-fit:contain}.v23-friend-hero h2{font-size:25px;letter-spacing:-.04em;margin:0 0 5px}.v23-friend-hero p{font-size:13px;line-height:1.45;color:#617f9b;margin:0}
.v23-bond-box{border-radius:18px;background:white;border:1px solid #cfe6fb;padding:14px;margin-bottom:12px}.v23-bond-text{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:9px;flex-wrap:wrap}.v23-bond-text strong{font-size:13px}.v23-bond-text span{font-size:12px;color:#397db2}.v23-meter{height:10px;border-radius:20px;overflow:hidden;background:#e3f2ff}.v23-meter i{height:100%;width:0;display:block;background:linear-gradient(90deg,#00b5e5,#557cf5);border-radius:20px;transition:width .4s}.v23-bond-box small{display:block;font-size:10px;color:#6c8da9;margin-top:7px}
.v23-activity-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.v23-activity-grid button{border:1px solid #d3e8fa;border-radius:17px;display:grid;grid-template-columns:40px 1fr;grid-template-rows:auto auto;text-align:left;column-gap:10px;align-items:center;background:white;padding:13px;min-width:0}.v23-activity-grid button>span{font-size:25px;grid-row:span 2;background:#eef9ff;padding:7px;border-radius:12px;text-align:center}.v23-activity-grid strong{font-size:13px;line-height:1.25}.v23-activity-grid small{font-size:10px;color:#6185a4;line-height:1.45}.v23-activity-grid button:hover,.v23-activity-grid button:focus-visible{border-color:#50bce9;background:#f1fbff}.v23-footnote{font-size:11px;color:#607d9d;line-height:1.5;margin:11px 2px 0}
.v23-friend-settings{width:100%;margin:10px 0 20px;background:linear-gradient(110deg,#087ee8,#09bddb);color:#fff;border:0;padding:13px}
/* Gesture choreography works on the existing source assets, never doubles arms */
.pet.v23-petting{animation:v23-pet-lean 1.2s ease-in-out 1!important}
.pet.v23-petting .head{animation:v23-soft-tilt .65s ease-in-out 2!important}
.pet.v23-catching{animation:v23-catch-hop .86s ease-in-out 2!important}
.pet.v23-catching .head{animation:v23-follow-ball .9s ease-out 2!important}
.pet.v23-catching .arm-right{animation:v23-catch-arm .9s ease-in-out 2!important}
.pet.v23-catching .arm-left{animation:v23-catch-arm-left .9s ease-in-out 2!important}
.pet.v23-chewing .head{animation:v23-chew-head .2s ease-in-out 4!important}
.pet.v23-chewing .arm-right{animation:v23-catch-arm .7s ease-in-out!important}
.pet.v23-bowing .head{animation:v23-soft-tilt .65s ease-in-out 2!important}
.v23-heart{position:absolute;z-index:13;left:49%;top:27%;font-size:24px;color:#ff8fc5;pointer-events:none;animation:v23-float-heart 1.15s ease-out var(--delay) both}
@keyframes v23-soft-tilt{50%{transform:translateY(3px) rotate(-6deg)}}
@keyframes v23-pet-lean{50%{transform:translate(-50%,-53%) scale(calc(var(--pet-scale) * 1.035))}}
@keyframes v23-catch-hop{0%,100%{transform:translate(-50%,-50%) scale(var(--pet-scale))}42%{transform:translate(-48%,-63%) rotate(5deg) scale(var(--pet-scale))}}
@keyframes v23-follow-ball{0%,100%{transform:rotate(0)}50%{transform:rotate(7deg) translateY(-3px)}}
@keyframes v23-catch-arm{45%{transform:rotate(-32deg)}}
@keyframes v23-catch-arm-left{45%{transform:rotate(23deg)}}
@keyframes v23-chew-head{50%{transform:translateY(4px) scaleY(.985)}}
@keyframes v23-float-heart{0%{opacity:0;transform:translate(0,12px) scale(.5)}30%{opacity:1}100%{opacity:0;transform:translate(var(--offset),-93px) scale(1.15)}}
/* Glassy 3D ball from CSS: an actual interactive button, not a bouncing emoji */
.urbi-scene-v23-play .urbi-scene-art,.urbi-scene-v23-eat .urbi-scene-art{z-index:23}
.v23-game-lane{position:absolute;inset:0;pointer-events:none}
.v23-floor-line{position:absolute;left:7%;right:7%;bottom:16%;height:29px;border-radius:50%;background:radial-gradient(ellipse,#28b9fe4d,transparent 70%);filter:blur(10px)}
.v23-ball-shadow{position:absolute;left:11%;bottom:20%;width:75px;height:18px;border-radius:50%;background:#062e5b6b;filter:blur(7px)}
.v23-ball{position:absolute;left:11%;top:62%;z-index:30;width:75px;height:75px;border:0;border-radius:50%;padding:0;pointer-events:auto;background:radial-gradient(circle at 32% 24%,#fffef2 0 6%,#f7ffb4 13%,#d4ed43 39%,#a5c61f 73%,#648d0a 100%);box-shadow:inset -13px -14px 17px #577f1680,inset 10px 9px 15px #ffffffa8,0 14px 17px #073c6d5e;transform:translate3d(0,0,0);cursor:pointer}
.v23-ball:before,.v23-ball:after{content:"";position:absolute;inset:5px 17px;border-left:4px solid #f7fffb;border-right:4px solid #f7fffb;border-radius:45%;transform:rotate(39deg);opacity:.95}.v23-ball:after{transform:rotate(-39deg)}
.v23-ball-stitch{display:block;width:10px;height:10px;border-radius:50%;background:#fff8;position:absolute;left:19px;top:14px;filter:blur(3px)}
.v23-ball-throw{animation:v23-ball-flight 1.68s cubic-bezier(.24,.31,.26,1) forwards!important}
@keyframes v23-ball-flight{0%{transform:translate3d(0,0,0) scale(1) rotate(0)}20%{transform:translate3d(50px,-125px,0) scale(.86) rotate(60deg)}48%{transform:translate3d(145px,-152px,0) scale(.64) rotate(140deg)}68%{transform:translate3d(158px,-45px,0) scale(.67) rotate(200deg)}82%{transform:translate3d(85px,-87px,0) scale(.82) rotate(265deg)}100%{transform:translate3d(0,0,0) scale(1) rotate(380deg)}}
.v23-catch-glow{position:absolute;left:52%;top:28%;font-size:30px;color:#4cceff;pointer-events:none}.v23-catch-glow span{display:inline-block;animation:v23-star-pop 1.2s ease-in-out infinite alternate}.v23-catch-glow span+span{animation-delay:.25s}
@keyframes v23-star-pop{to{transform:translateY(-25px) rotate(25deg);opacity:.28}}
/* Feeding: plate has depth, food goes toward the real avatar's mouth in three steps */
.v23-meal-shadow{position:absolute;left:16%;top:76%;width:66%;height:26px;background:#053b6555;filter:blur(13px);border-radius:50%}
.v23-meal-plate{position:absolute;z-index:21;top:60%;left:29%;height:94px;width:170px;border-radius:50%;background:radial-gradient(ellipse at 44% 35%,#fff 0 35%,#cae8ff 56%,#6aade0 79%,#438cce 100%);border:9px solid #e8f7ff;box-shadow:0 12px 0 #5994c2,0 21px 19px #104b764d,inset 0 7px 8px #9ccaea55;transform:rotateX(48deg)}
.v23-meal-food{position:absolute;z-index:24;left:48px;top:-53px;font-size:83px;transform:scale(var(--food-scale,1));transform-origin:center bottom;filter:drop-shadow(0 10px 7px #215d7a65);transition:transform .3s}
.v23-meal-bite{position:absolute;z-index:28;left:55%;top:56%;font-size:35px;opacity:0;pointer-events:none}
.v23-bite-move{animation:v23-food-bite .82s ease-in forwards}
@keyframes v23-food-bite{0%{opacity:1;transform:translate(0,10px) scale(.9)}60%{opacity:1;transform:translate(-27px,-115px) scale(.55)}100%{opacity:0;transform:translate(-28px,-132px) scale(.15)}}
.v23-meal-hearts{position:absolute;left:70%;top:18%;font-size:22px;color:#f99ac3;animation:v23-star-pop 1.4s infinite alternate}
.urbi-scene-v23-play .urbi-scene-bar,.urbi-scene-v23-eat .urbi-scene-bar{z-index:40}
/* De-clutter and improve mobile buttons without stealing the chat */
@media(max-width:720px){
 .v23-dialog{bottom:0;right:0;left:0;top:auto;transform:none;width:100%;border-radius:25px 25px 0 0;padding:17px 17px max(20px,env(safe-area-inset-bottom));max-height:89dvh}
 .v23-friend-hero h2{font-size:21px}.v23-mini-avatar{width:78px;height:78px;border-radius:22px}.v23-mini-avatar img{width:73px;height:73px}
 .v23-activity-grid{gap:8px}.v23-activity-grid button{grid-template-columns:1fr;grid-template-rows:auto auto auto;padding:11px;gap:4px;text-align:center;justify-items:center}.v23-activity-grid button>span{grid-row:auto}.v23-activity-grid strong{font-size:12px}.v23-activity-grid small{font-size:10px}
 .care-dock{width:max-content;max-width:calc(100vw - 12px)}.care-dock button{min-width:39px;justify-content:center;padding:8px 10px}
 .urbi-scene-v23-play .urbi-scene-art,.urbi-scene-v23-eat .urbi-scene-art{top:40%;height:min(390px,48dvh)}
 .v23-ball{width:64px;height:64px}.v23-meal-plate{left:24%;width:153px}.v23-meal-food{font-size:72px}
 .urbi-scene-v23-play .urbi-scene-bar,.urbi-scene-v23-eat .urbi-scene-bar{bottom:clamp(166px,23dvh,220px);gap:8px;padding:10px}
 .urbi-scene-v23-play .urbi-scene-controls,.urbi-scene-v23-eat .urbi-scene-controls{max-width:57%}
}
@media(max-width:390px){.care-dock{gap:2px}.care-dock button{min-width:38px;padding:7px 8px}.v23-dialog{padding-left:12px;padding-right:12px}.urbi-scene-v23-play .urbi-scene-message strong,.urbi-scene-v23-eat .urbi-scene-message strong{font-size:11px}}
body.reduce .v23-ball-throw,body.reduce .v23-bite-move,body.reduce .pet.v23-petting,body.reduce .pet.v23-catching,body.reduce .pet.v23-chewing,body.reduce .pet.v23-bowing,body.reduce .pet.v23-excited,body.reduce .v23-heart,body.v4-calm .v23-ball-throw,body.v4-calm .v23-bite-move{animation:none!important}
@media(prefers-reduced-motion:reduce){.v23-ball-throw,.v23-bite-move,.pet.v23-petting,.pet.v23-catching,.pet.v23-chewing,.pet.v23-bowing,.pet.v23-excited,.v23-heart{animation:none!important}.v23-meal-hearts,.v23-catch-glow span{animation:none!important}}
