/* ===== Caixa de presente surpresa (Árvore de Presentes) =====
   Usado na prévia (retro-builder) e no presente final. */
.pv-tree{position:relative}

/* botão/caixa de presente clicável */
.pv-surprise{
  display:inline-flex;flex-direction:column;align-items:center;gap:6px;
  background:none;border:none;cursor:pointer;margin-top:12px;font-family:inherit;
}
.pv-surprise-box{font-size:2.4rem;filter:drop-shadow(0 6px 10px rgba(0,0,0,.4));animation:pv-giftwobble 1.5s ease-in-out infinite}
@keyframes pv-giftwobble{0%,100%{transform:rotate(-7deg) translateY(0)}50%{transform:rotate(7deg) translateY(-3px)}}
.pv-surprise-hint{font-size:.85rem;color:#ffd24a;font-weight:700}

/* balões subindo */
.pv-balloons{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:30}
.pv-balloon{position:absolute;bottom:-32px;width:20px;height:26px;border-radius:50% 50% 50% 50%/55% 55% 45% 45%;opacity:0;
  animation-name:pv-balloon-up;animation-timing-function:ease-in;animation-fill-mode:forwards}
.pv-balloon::after{content:"";position:absolute;top:100%;left:50%;width:1px;height:16px;background:rgba(255,255,255,.55)}
@keyframes pv-balloon-up{
  0%{transform:translateY(0) scale(.7) rotate(-4deg);opacity:0}
  12%{opacity:.96}
  82%{opacity:.96}
  100%{transform:translateY(-380px) scale(1) rotate(4deg);opacity:0}
}

/* overlay que revela a foto */
.pv-reveal{position:absolute;inset:0;display:grid;place-items:center;background:rgba(8,6,16,.74);
  opacity:0;transition:opacity .25s;z-index:40;padding:18px}
.pv-reveal.on{opacity:1}
.pv-reveal-card{position:relative;background:#fff;padding:10px 10px 14px;border-radius:9px;max-width:80%;
  box-shadow:0 18px 40px rgba(0,0,0,.55);transform:scale(.82);transition:transform .28s cubic-bezier(.2,1.3,.4,1)}
.pv-reveal.on .pv-reveal-card{transform:scale(1)}
.pv-reveal-card img{width:100%;border-radius:5px;display:block;max-height:320px;object-fit:cover}
.pv-reveal-ph{display:grid;place-items:center;gap:8px;width:200px;height:200px;font-size:2.6rem;color:#a89;text-align:center}
.pv-reveal-ph span{font-size:.85rem;font-weight:600}
.pv-reveal-msg{text-align:center;color:#3a2f3a;font-weight:700;margin-top:9px}
.pv-reveal-x{position:absolute;top:-11px;right:-11px;width:28px;height:28px;border-radius:50%;
  background:#e23b3b;color:#fff;border:none;cursor:pointer;font-size:1.1rem;line-height:1;box-shadow:0 3px 8px rgba(0,0,0,.4)}

/* ===== Mapa animado (Jornada no Mapa) ===== */
.pv-map{overflow:hidden;background:#e9e7e0 !important}
.pv-map::before{display:none !important}
.pv-map-bg{position:absolute;inset:0;z-index:0;overflow:hidden}
.pv-map-bg .pv-map-svg{position:absolute;inset:0;width:100%;height:100%;
  transform-origin:50% 56%;animation:pvm-zoom 12s ease-in-out infinite alternate}
@keyframes pvm-zoom{0%{transform:scale(1.04)}100%{transform:scale(1.3)}}
/* a foto "abre" no lugar e o coração cai — entrada única, depois fica visível */
.pv-map .pv-map-card{z-index:3;animation:pvm-pop .65s cubic-bezier(.2,1.3,.4,1) .85s backwards}
@keyframes pvm-pop{0%{opacity:0;transform:scale(.4) rotate(-4deg)}70%{opacity:1;transform:scale(1.06) rotate(-2deg)}100%{opacity:1;transform:scale(1) rotate(-2deg)}}
.pv-map .pv-map-pin{z-index:3;animation:pvm-drop .6s cubic-bezier(.2,1.2,.4,1) .45s backwards}
@keyframes pvm-drop{0%{opacity:0;transform:translateY(-46px)}60%{opacity:1;transform:translateY(6px)}100%{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.pv-map-svg,.pv-map-card,.pv-map-pin{animation:none}}

/* mapa REAL (Leaflet + Carto, sem rótulos) — interativo */
.pv-map-leaflet{position:absolute;inset:0;width:100%;height:100%;background:#eaeaef}
.pv-map.geo .pv-map-pin{display:none}            /* coração agora é marcador do mapa */
/* deixa o scroll/arrasto passar pro mapa em qualquer ponto (sobreposições decorativas) */
.pv-map.geo .pv-map-head,.pv-map.geo .pv-map-card{pointer-events:none}
.pv-pin-icon{background:transparent !important;border:none !important;overflow:visible}
.pv-pin-wrap{position:relative;display:grid;place-items:center;width:40px;height:40px}
.pv-pin-pulse{position:absolute;left:50%;top:50%;width:48px;height:48px;border-radius:50%;
  background:radial-gradient(circle,rgba(34,197,94,.5),rgba(34,197,94,.18) 55%,transparent 70%);
  transform:translate(-50%,-50%);animation:pv-pin-pulse 1.8s ease-out infinite}
@keyframes pv-pin-pulse{0%{transform:translate(-50%,-50%) scale(.45);opacity:.95}100%{transform:translate(-50%,-50%) scale(1.7);opacity:0}}
.pv-pin-heart{position:relative;font-size:1.85rem;color:#22c55e;
  filter:drop-shadow(0 0 6px rgba(34,197,94,.55)) drop-shadow(0 3px 3px rgba(0,0,0,.3));
  animation:pv-pin-beat 1.4s ease-in-out infinite}
@keyframes pv-pin-beat{0%,100%{transform:scale(1)}50%{transform:scale(1.16)}}
@media(prefers-reduced-motion:reduce){.pv-pin-pulse,.pv-pin-heart{animation:none}}

/* ===== Árvore de Natal GRANDE + presente na base ===== */
.pv-tree-xmas{position:relative;background:linear-gradient(180deg,#1c2746,#0f1830 60%,#10203a) !important;
  min-height:100% !important;display:flex;flex-direction:column;overflow:hidden;color:#fff}
.pv-tree-head{position:relative;z-index:3;text-align:center;padding:18px 12px 0}
.pv-tree-head h1{font-size:1.45rem;font-weight:800;margin:0}
.pv-tree-head p{font-size:.85rem;color:#aab3d0;margin-top:2px}
.pv-tree-scene{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:10px}
.pv-xtree{width:80%;max-width:250px;z-index:2}
.pv-xstar{transform-origin:50px 9px;animation:pv-xstar 2.2s ease-in-out infinite}
@keyframes pv-xstar{0%,100%{opacity:.85;filter:drop-shadow(0 0 1px #ffd24a)}50%{opacity:1;filter:drop-shadow(0 0 5px #ffe88a)}}
.pv-xlight{animation:pv-xtwinkle 1.8s ease-in-out infinite}
@keyframes pv-xtwinkle{0%,100%{opacity:.3}50%{opacity:1}}
.pv-xsnow{position:absolute;top:-8px;width:4px;height:4px;border-radius:50%;background:#fff;opacity:.85;z-index:1;
  animation-name:pv-xfall;animation-timing-function:linear;animation-iteration-count:infinite}
@keyframes pv-xfall{0%{transform:translateY(0)}100%{transform:translateY(580px)}}
.pv-surprise-base{position:relative;z-index:4;margin-top:-6px}

/* explosão de confete ao abrir o presente */
.pv-confetti-layer{position:absolute;left:50%;top:44%;z-index:36;pointer-events:none}
.pv-confetti{position:absolute;left:0;top:0;width:8px;height:13px;border-radius:2px;opacity:0;
  animation:pv-confetti 1.5s ease-out forwards}
@keyframes pv-confetti{0%{opacity:1;transform:translate(0,0) rotate(0) scale(1)}100%{opacity:0;transform:translate(var(--tx),var(--ty)) rotate(var(--rot)) scale(.6)}}
@media(prefers-reduced-motion:reduce){.pv-xstar,.pv-xlight,.pv-xsnow,.pv-confetti{animation:none}}
.pv-pin-tip{background:#fff;border:none;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,.22);
  color:#222;font-weight:700;font-size:.78rem;padding:4px 10px;font-family:inherit}
.pv-pin-tip::before{border-top-color:#fff}
.leaflet-control-zoom{border:none !important;box-shadow:0 2px 8px rgba(0,0,0,.2)}
.leaflet-control-zoom a{border-radius:8px !important;color:#444}
.pv-map-frame{position:absolute;inset:0;width:100%;height:100%;border:0;pointer-events:none}
.pv-map.geo .pv-map-bg{animation:pvm-fade .5s ease both}
@keyframes pvm-fade{from{opacity:0;transform:scale(1.06)}to{opacity:1;transform:scale(1)}}
/* coração marca o ponto exato (centro do mapa = local) */
.pv-map.geo .pv-map-pin{left:50%;top:50%;font-size:1.9rem;color:#22c55e;
  filter:drop-shadow(0 0 9px rgba(34,197,94,.6)) drop-shadow(0 4px 4px rgba(0,0,0,.3));
  animation:pvm-pindrop .7s cubic-bezier(.2,1.3,.4,1) .5s backwards}
@keyframes pvm-pindrop{
  0%{opacity:0;transform:translate(-50%,-50%) translateY(-52px) scale(.5)}
  65%{opacity:1;transform:translate(-50%,-50%) translateY(0) scale(1.15)}
  100%{opacity:1;transform:translate(-50%,-50%) scale(1)}
}
