/* iPhone Safari layout normalization */
.girl-score-line[hidden]{display:none!important;}
.ai .report-em{color:#ff6a9e!important;font-weight:800;text-shadow:0 0 7px rgba(255,61,127,.16);}
html{
  width:100%;
  max-width:100%;
  min-height:100%;
  -webkit-text-size-adjust:100%;
  text-size-adjust:100%;
  overflow-x:hidden;
}
body{
  width:100%;
  max-width:100%;
  min-height:100%;
  box-sizing:border-box;
  overflow-x:hidden;
  overscroll-behavior-x:none;
  padding-top:env(safe-area-inset-top);
  padding-left:env(safe-area-inset-left);
  padding-right:env(safe-area-inset-right);
  padding-bottom:env(safe-area-inset-bottom);
}
.wrap,.page,main{
  width:100%;
  max-width:100%;
  min-width:0;
}
img,video,canvas,svg{
  max-width:100%;
}
input,select,textarea,button{
  min-width:0;
}
.now-scroll,.sim-scroll,.g-ph .ph{
  -webkit-overflow-scrolling:touch;
}
a,button,[role="button"]{
  -webkit-tap-highlight-color:rgba(255,61,127,.18);
}

@supports (min-height:100svh){
  body,.wrap,.page,main.sheet{min-height:100svh!important;}
}

/* Keep fixed controls and dialogs clear of the notch and Home indicator. */
.cta,.area-cta{
  width:calc(100% - env(safe-area-inset-left) - env(safe-area-inset-right))!important;
}
.store-pick-modal{
  padding-top:max(18px,env(safe-area-inset-top))!important;
  padding-right:max(18px,env(safe-area-inset-right))!important;
  padding-bottom:max(18px,env(safe-area-inset-bottom))!important;
  padding-left:max(18px,env(safe-area-inset-left))!important;
}
.store-pick-modal__dialog,
.reserve-modal__sheet,
.sheet[role="dialog"]{
  max-height:calc(100vh - 20px)!important;
  max-height:calc(100dvh - max(20px,env(safe-area-inset-top)))!important;
  overflow-y:auto!important;
  overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;
}
.reserve-toast{
  bottom:calc(96px + env(safe-area-inset-bottom))!important;
}
.favorite-toast{
  max-width:calc(100% - 32px - env(safe-area-inset-left) - env(safe-area-inset-right))!important;
}

@supports (-webkit-touch-callout:none){
  body,.wrap{
    min-height:-webkit-fill-available;
  }
  input,select,textarea{
    font-size:16px!important;
  }
}

/* Keep the top-page controls inside narrow iPhone viewports. */
@media (max-width:390px){
  .ai-concierge{
    margin-left:10px!important;
    margin-right:10px!important;
    padding:12px 11px 10px!important;
  }
  .con-intro{
    grid-template-columns:68px minmax(0,1fr)!important;
    gap:8px!important;
  }
  .con-ill{
    width:68px!important;
    height:68px!important;
  }
  .con-title{
    font-size:clamp(18px,5.3vw,21px)!important;
    letter-spacing:-.35px!important;
  }
  .con-sub{
    font-size:clamp(11.5px,3.15vw,12.5px)!important;
    letter-spacing:-.25px!important;
    line-height:1.4!important;
  }
  .areas{
    grid-template-columns:repeat(2,minmax(0,1fr))!important;
    gap:8px!important;
    margin-left:10px!important;
    margin-right:10px!important;
  }
  .abtn{
    min-width:0!important;
    font-size:clamp(13px,4vw,16px)!important;
    gap:4px!important;
  }
  .girl-profile,
  .girl-profile.long-name,
  .girl-profile.long-name.short-name,
  .girl-profile.long-name.very-long-name{
    grid-template-columns:minmax(0,44%) minmax(0,56%)!important;
    gap:0!important;
    padding-left:8px!important;
    padding-right:8px!important;
  }
  .girl-profile .nm{
    min-width:0!important;
    font-size:clamp(27px,8vw,34px)!important;
    overflow:visible!important;
  }
  .girl-profile .spec{
    min-width:0!important;
    grid-template-columns:1.15fr 1fr .72fr!important;
    gap:2px!important;
    font-size:clamp(14px,4.2vw,18px)!important;
  }
  .girl-profile.medium-name .nm{
    font-size:clamp(24px,7.8vw,29px)!important;
  }
  .girl-profile.long-name .nm{
    font-size:clamp(20px,6.8vw,25px)!important;
  }
  .girl-profile.very-long-name .nm{
    font-size:clamp(17px,5.8vw,21px)!important;
    letter-spacing:-.045em!important;
  }
  .girl-profile .spec>span{
    min-width:0!important;
    white-space:nowrap!important;
  }
  .girl-score-line{
    display:grid!important;
    grid-template-columns:70px minmax(0,1fr) 68px!important;
    align-items:center!important;
    padding:0 12px!important;
  }
  .girl-score-line .score-label{
    position:static!important;
    width:auto!important;
    justify-self:center!important;
    transform:none!important;
  }
  .girl-score-line .score-value{
    justify-self:center!important;
  }
  .girl-score-line .score-rank{
    position:static!important;
    justify-self:end!important;
    transform:none!important;
  }
  .ai h3{
    display:grid!important;
    grid-template-columns:max-content minmax(0,1fr)!important;
    gap:7px!important;
    white-space:nowrap!important;
  }
  .ai h3 .ai-mark{
    font-size:clamp(36px,11vw,43px)!important;
  }
  .ai h3 .ai-title{
    min-width:0!important;
    font-size:clamp(17px,5.2vw,20px)!important;
    white-space:nowrap!important;
  }
  .ai{
    padding-left:8px!important;
    padding-right:8px!important;
  }
  .ai-copy{
    padding-left:0!important;
    padding-right:0!important;
  }
  .airow{
    padding-left:10px!important;
    font-size:clamp(11.75px,3.55vw,15px)!important;
    line-height:1.45!important;
    letter-spacing:-.025em!important;
    white-space:normal!important;
    overflow-wrap:break-word!important;
  }
  .airow strong{
    display:block!important;
    min-width:0!important;
    white-space:normal!important;
    overflow-wrap:break-word!important;
  }
  .price td.long-label{
    font-size:clamp(12px,3.4vw,13px)!important;
    letter-spacing:-.04em!important;
    white-space:nowrap!important;
  }
  header{
    padding-left:10px!important;
    padding-right:10px!important;
    gap:6px!important;
  }
  .site-brand-title{
    min-width:0!important;
    font-size:clamp(15.5px,4.4vw,17px)!important;
    line-height:1!important;
    white-space:nowrap!important;
  }
  .site-title{
    min-width:0!important;
    font-size:clamp(15.5px,4.4vw,17px)!important;
    line-height:1!important;
    white-space:nowrap!important;
  }
  .site-brand-title a,
  .site-title a,
  .site-header .brand,
  .site-header .brand span{white-space:nowrap!important;}
  .favorite-header{
    flex:0 0 auto!important;
    height:27px!important;
    padding:2px 6px 2px 3px!important;
    gap:3px!important;
    font-size:10px!important;
  }
  .favorite-header__heart{
    width:20px!important;
    height:20px!important;
    flex-basis:20px!important;
    font-size:12px!important;
  }
  .flinks{
    flex-wrap:wrap!important;
    row-gap:2px!important;
  }
  .flinks .sep{margin-left:6px!important;margin-right:6px!important;}
}

@media (max-width:340px){
  .price table{
    table-layout:fixed!important;
  }
  .price td:first-child{
    width:50%!important;
  }
  .price td:last-child{
    width:50%!important;
    font-size:15px!important;
    letter-spacing:-.025em!important;
  }
  .price tr:last-child td:last-child{
    font-size:13.5px!important;
  }
  .con-intro{
    grid-template-columns:62px minmax(0,1fr)!important;
    gap:7px!important;
  }
  .con-ill{
    width:62px!important;
    height:62px!important;
  }
  .con-title{font-size:18px!important;}
  .con-sub{
    font-size:10.4px!important;
    letter-spacing:-.45px!important;
  }
  .con-filter strong{font-size:10px!important;}
  .con-btn{font-size:13px!important;}
}

/* Stronger live-status pulse only for the detail-page status row. */
.girl-shift::before{
  transform-origin:center!important;
  animation:jiraiStatusPulse 2.2s ease-in-out infinite!important;
}
@keyframes jiraiStatusPulse{
  0%,100%{
    transform:scale(1);
    box-shadow:0 0 4px rgba(24,234,120,.62),0 0 0 0 rgba(24,234,120,.42);
  }
  48%{
    transform:scale(1.34);
    box-shadow:0 0 8px 2px rgba(24,234,120,.78),0 0 0 6px rgba(24,234,120,0),0 0 16px rgba(24,234,120,.7);
  }
}

/* Persistent but restrained attention animation for the detail reserve CTA. */
.cta .btn-call{
  animation:jiraiReserveGlow 2.6s ease-in-out infinite!important;
}
.cta .btn-call::before{
  animation:jiraiReserveSweep 2.6s ease-in-out infinite!important;
}
@keyframes jiraiReserveGlow{
  0%,72%,100%{
    transform:translateY(0) scale(1);
    filter:brightness(1);
  }
  80%{
    transform:translateY(-2px) scale(1.012);
    filter:brightness(1.13);
  }
  88%{
    transform:translateY(0) scale(1);
    filter:brightness(1.04);
  }
}
@keyframes jiraiReserveSweep{
  0%,62%{transform:translateX(-170%) skewX(-18deg);opacity:0;}
  68%{opacity:1;}
  86%{transform:translateX(520%) skewX(-18deg);opacity:1;}
  87%,100%{transform:translateX(520%) skewX(-18deg);opacity:0;}
}
.cta .btn-call:active{animation:none!important;}

@media (prefers-reduced-motion:reduce){
  .girl-shift::before,
  .cta .btn-call,
  .cta .btn-call::before{animation:none!important;}
}

/* Therapist cards: reveal once as they enter the viewport. */
.reveal-card{
  opacity:0;
  transform:translate3d(0,22px,0) scale(.985);
  filter:blur(2px);
  transition:
    opacity .58s ease var(--reveal-delay,0ms),
    transform .64s cubic-bezier(.22,.72,.25,1) var(--reveal-delay,0ms),
    filter .58s ease var(--reveal-delay,0ms);
  will-change:opacity,transform,filter;
}
.reveal-card.is-revealed{
  opacity:1;
  transform:translate3d(0,0,0) scale(1);
  filter:blur(0);
}

/* A restrained shimmer prevents blank photo panels on slower mobile connections. */
.ncard .ph{
  position:relative;
  overflow:hidden;
  background:#14131a;
}
.ncard .ph.image-loading::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:2;
  pointer-events:none;
  background:linear-gradient(105deg,transparent 25%,rgba(255,255,255,.09) 43%,rgba(255,61,127,.10) 50%,rgba(255,255,255,.09) 57%,transparent 75%);
  background-size:230% 100%;
  animation:jraiPhotoShimmer 1.35s ease-in-out infinite;
}
@keyframes jraiPhotoShimmer{
  from{background-position:110% 0;}
  to{background-position:-110% 0;}
}

.list-state.is-added{
  color:#ff6a9d;
  animation:jraiAddedNotice 1.55s ease both;
}
@keyframes jraiAddedNotice{
  0%{opacity:0;transform:translateY(5px);}
  18%,72%{opacity:1;transform:translateY(0);}
  100%{opacity:0;transform:translateY(-3px);}
}
@media (prefers-reduced-motion:reduce){
  .reveal-card{
    opacity:1!important;
    transform:none!important;
    filter:none!important;
    transition:none!important;
  }
  .ncard .ph.image-loading::after,
  .list-state.is-added{animation:none!important;}
}
