  /* ====== Splash screen — golf ball bounce → logo spring → CTA ====== */
  .app-splash {
    position: fixed;
    inset: 0;
    z-index: 99999;
    overflow: hidden;
    background:
      radial-gradient(circle at 52% 42%, rgba(62,142,91,0.22), transparent 34%),
      radial-gradient(circle at 18% 12%, rgba(39,112,75,0.18), transparent 28%),
      linear-gradient(155deg, #073c31 0%, #0b4b39 50%, #06382f 100%);
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 30px;
    padding: 48px 28px 36px;
    transition: opacity 0.4s ease-out;
  }
  .app-splash .splash-top {
    display: flex; flex-direction: column; align-items: center; text-align: center; gap: 16px;
  }
  /* 로고 존 — 공이 최종 위치에 도착하는 순간, 공을 포함한 전체 로고가 한 번만 스프링. */
  .splash-logozone { position: relative; width: min(72%, 300px); margin: 54px auto 2px; transform-origin: 50% 62%; animation: spLogoSpring .27s cubic-bezier(.2,1.25,.35,1) .97s forwards; }
  @keyframes spLogoSpring {
    0% { transform: translateY(0) scale(1) }
    32% { transform: translateY(1px) scale(1.018,.985) }
    58% { transform: translateY(-2px) scale(.994,1.012) }
    78% { transform: translateY(1px) scale(1.004,.998) }
    100% { transform: translateY(0) scale(1) }
  }
  .splash-wm-sizer { width: 100%; height: auto; display: block; visibility: hidden; }  /* 레이아웃 크기·접근성용(비표시) */
  .splash-logozone .sl { position: absolute; top: 0; height: 100%; width: auto; opacity: 0; animation: spLetter .13s ease-out .97s both; }
  .sl0 { left: 1.24%; } .sl1 { left: 21.19%; }
  .sl2 { left: 30.85%; } .sl3 { left: 44.68%; }
  .sl4 { left: 58.42%; } .sl5 { left: 72.87%; }
  .sl6 { left: 87.23%; }
  @keyframes spLetter { 0% { opacity: 0; transform: translateY(4px); filter: blur(1.5px) } 100% { opacity: 1; transform: translateY(0); filter: blur(0) } }
  /* 공 꼬리(모션 라인) — 맨 마지막 페이드인 */
  .splash-tail { position: absolute; left: 74.3%; top: -20%; width: 7.4%; height: auto; opacity: 0; animation: spTailIn .13s ease-out .97s both; }
  @keyframes spTailIn { 0% { opacity: 0; transform: translate(4px, -2px) } 100% { opacity: .95; transform: translate(0,0) } }
  /* 골프공 — 단독 등장 → 큰 바운스 → 작은 바운스 → 로고의 원래 공 위치에 안착. */
  .splash-ball { position: absolute; z-index: 3; width: 16.6%; left: 82.3%; top: -58%; animation: spBallX .94s linear .04s both; }
  .splash-ball .sb-drop { width: 100%; animation: spBallY .94s linear .04s both; }
  .splash-ball .sb-img { display: block; width: 100%; height: auto; filter: drop-shadow(0 4px 7px rgba(187,255,213,.16)); animation: spBallRot .94s linear .04s both; }
  .splash-ball .sb-shadow { display: none; }   /* 공이 글자 위를 떠서 이동 → 지면 그림자 없음 */
  /* 착지 순간에만 낮게 튀는 잔디 입자 — 공보다 먼저 보이지 않고 0.34초 안에 사라짐. */
  .splash-grass { position: absolute; z-index: 2; width: 44px; height: 18px; pointer-events: none; opacity: 0; }
  .splash-grass-1 { left: calc(82.3% - 43vw); top: calc(-58% + 18vh + 38px); animation: spGrassPatch .24s ease-out .35s both; }
  .splash-grass-2 { left: calc(82.3% - 23vw); top: calc(-58% + 9vh + 38px); transform: scale(.72); animation: spGrassPatch .21s ease-out .64s both; }
  .splash-grass::before { content: ''; position: absolute; left: 10px; right: 10px; bottom: 1px; height: 4px; border-radius: 50%; background: rgba(1,31,25,.5); filter: blur(2px); }
  .splash-grass i { position: absolute; left: 50%; bottom: 3px; width: 3px; height: 7px; border-radius: 999px 999px 0 999px; background: #77d69b; transform-origin: 50% 100%; opacity: 0; animation: spGrassBlade .24s cubic-bezier(.18,.72,.3,1) var(--gd) both; }
  .splash-grass i:nth-child(1) { --gx:-17px; --gy:-8px; --gr:-58deg; --gd:.35s; }
  .splash-grass i:nth-child(2) { --gx:-9px; --gy:-12px; --gr:-30deg; --gd:.36s; height: 6px; }
  .splash-grass i:nth-child(3) { --gx:0px; --gy:-14px; --gr:4deg; --gd:.354s; height: 5px; }
  .splash-grass i:nth-child(4) { --gx:10px; --gy:-11px; --gr:34deg; --gd:.364s; height: 6px; }
  .splash-grass i:nth-child(5) { --gx:18px; --gy:-7px; --gr:62deg; --gd:.357s; }
  .splash-grass-2 i:nth-child(1) { --gd:.64s; } .splash-grass-2 i:nth-child(2) { --gd:.651s; }
  .splash-grass-2 i:nth-child(3) { --gd:.646s; } .splash-grass-2 i:nth-child(4) { --gd:.657s; }
  .splash-grass-2 i:nth-child(5) { --gd:.65s; }
  @keyframes spGrassPatch { 0% { opacity: 0 } 14% { opacity: .72 } 58% { opacity: .38 } 100% { opacity: 0 } }
  @keyframes spGrassBlade {
    0% { opacity: 0; transform: translate(0,0) rotate(0) scaleY(.55) }
    18% { opacity: .9 }
    72% { opacity: .55; transform: translate(var(--gx),var(--gy)) rotate(var(--gr)) scaleY(1) }
    100% { opacity: 0; transform: translate(var(--gx),var(--gy)) rotate(var(--gr)) scaleY(.82) }
  }
  /* 수평은 등속, 수직은 표준 ease-in(낙하)/ease-out(상승)으로 분리해 꺾임 없는 포물선을 만든다. */
  @keyframes spBallX {
    0% { transform: translateX(-64vw); opacity: 0; filter: blur(1.5px) }
    8% { opacity: 1; filter: blur(0) }
    100% { transform: translateX(0); opacity: 1; filter: blur(0) }
  }
  @keyframes spBallY {
    0%   { transform: translateY(-31vh); animation-timing-function: cubic-bezier(.4,0,1,1) }
    33%  { transform: translateY(18vh); animation-timing-function: cubic-bezier(0,0,.2,1) }
    49%  { transform: translateY(-10vh); animation-timing-function: cubic-bezier(.4,0,1,1) }
    64%  { transform: translateY(9vh); animation-timing-function: cubic-bezier(0,0,.2,1) }
    79%  { transform: translateY(-4vh); animation-timing-function: cubic-bezier(.4,0,1,1) }
    100% { transform: translateY(0) }
  }
  @keyframes spBallRot { 0% { transform: rotate(-16deg) } 100% { transform: rotate(390deg) } }
  .splash-engsub { font-size: 11px; font-weight: 800; letter-spacing: 4px; color: rgba(245,238,222,0.9); opacity: 0; animation: spSloganIn .21s ease-out 1.1s both; }
  @keyframes spSloganIn { 0% { opacity: 0; transform: translateY(4px) } 100% { opacity: 1; transform: translateY(0) } }
  @keyframes spFadeUp { 0% { opacity: 0; transform: translateY(8px) } 100% { opacity: 1; transform: translateY(0) } }
  .app-splash .splash-bottom {
    display: flex;
    flex-direction: column;
    gap: 14px;
    opacity: 0;
    animation: spFadeUp .25s cubic-bezier(.22,1,.36,1) 1.23s both;
  }
  /* 모든 첫 버튼은 0.94 → 1.0 spring 등장. 호흡은 로그인 이력 유저의 단일 glass 버튼에만 적용. */
  #splashButtons .splash-cta:first-child { animation: spCtaSpring .27s cubic-bezier(.2,1.35,.35,1) 1.23s both; }
  #splashButtons .splash-cta-glass { animation: spCtaSpring .27s cubic-bezier(.2,1.35,.35,1) 1.23s both, spBreathe 2.4s ease-in-out 1.5s infinite; }
  #splashButtons .splash-cta-glass::before {
    content: ''; position: absolute; inset: 0; z-index: -1; pointer-events: none; border-radius: inherit;
    background: radial-gradient(circle at 50% 50%, rgba(123,232,151,.5), rgba(76,175,105,.2) 54%, transparent 78%);
    opacity: 0; animation: spCtaColorBreath 2.4s ease-in-out 1.23s infinite;
  }
  @keyframes spCtaSpring { 0% { opacity: 0; transform: scale(.94) } 62% { opacity: 1; transform: scale(1.012) } 100% { opacity: 1; transform: scale(1) } }
  @keyframes spBreathe {
    0%,100% {
      transform: scale(1); filter: brightness(1); border-color: rgba(244,238,222,.55);
      box-shadow: 0 5px 18px rgba(0,0,0,.16), 0 0 0 rgba(105,225,139,0);
    }
    50% {
      transform: scale(1.03); filter: brightness(1.08); border-color: rgba(178,244,194,.82);
      box-shadow: 0 7px 22px rgba(0,0,0,.18), 0 0 24px rgba(105,225,139,.36);
    }
  }
  @keyframes spCtaColorBreath { 0%,100% { opacity: .14; transform: scale(.94) } 50% { opacity: .82; transform: scale(1) } }
  .app-splash.sp-paused #splashButtons .splash-cta-glass { animation-play-state: paused; }
  .app-splash.sp-paused #splashButtons .splash-cta-glass::before { animation-play-state: paused; }
  @media (prefers-reduced-motion: reduce) {
    /* 바운스·스프링 제거 → 공은 로고 자리, 전부 단순 페이드인 */
    .splash-logozone { animation: none !important; transform: none !important; }
    .splash-ball { left: 82.3% !important; top: -58% !important; animation: none !important; transform: none !important; opacity: 1 !important; }
    .splash-ball .sb-drop, .splash-ball .sb-img { animation: none !important; transform: none !important; }
    .splash-ball .sb-shadow { display: none !important; }
    .splash-grass { display: none !important; }
    .splash-logozone .sl, .splash-tail, .splash-engsub, .splash-sub, .app-splash .splash-bottom { animation: spFadeIn .4s ease-out both !important; transform: none !important; filter: none !important; }
    @keyframes spFadeIn { to { opacity: 1 } }
    #splashButtons .splash-cta:first-child, #splashButtons .splash-cta-glass { animation: none !important; opacity: 1 !important; transform: none !important; }
    #splashButtons .splash-cta-glass::before { animation: none !important; opacity: .2 !important; transform: none !important; }
  }
  .splash-eula {
    margin: 4px 4px 0;
    font-size: 10.5px;
    line-height: 1.6;
    color: rgba(245,238,222,0.66);
    text-align: center;
  }
  .splash-eula a { color: rgba(245,238,222,0.95); text-decoration: underline; }
  .splash-eula b { color: #f4eede; font-weight: 700; }
  .splash-footer-brand {
    font-family: 'Bebas Neue', 'Oswald', 'Helvetica Neue', sans-serif;
    font-size: 13px;
    letter-spacing: 4px;
    color: #f4eede;
    opacity: 0.4;
    text-align: center;
  }
  .app-splash.done {
    opacity: 0;
    pointer-events: none;
  }
  body.no-splash .app-splash { display: none !important; }
  /* (구) ::after 다크 그라데이션 — 사진 배경용. cream 배경에선 불필요해 제거됨. */

