/* Animace „špendlík do mapy" na stránce Prodejna Praha – Harfa.

   Roman 13. 9. 2026 poslal pin z Pinterestu: prst zapíchne špendlík do mapy,
   z mapy vyroste model místa a prolne se do skutečné fotky. „Dokážeš udělat
   tenhle efekt?" Zvolil web, stránku prodejny, zatím bez fotky prodejny.

   Postup: vlastní ilustrační mapa (vzhled Map Google se nekopíruje — je to
   jejich značka), do ní dopadne špendlík na Ocelářské 3, z místa vyroste
   gril Weber (originální fotka s průhledným pozadím) a kruh z místa
   špendlíku odhalí lifestylovou fotku Weberu. Až bude fotka prodejny,
   vymění se jen obrázek v .hm-foto.

   Kroky přepíná harfa-mapa.js třídami je-pin, je-gril, je-foto. Kdo má
   v systému vypnuté animace, dostane rovnou konečný stav. Vlastní soubor,
   třída .hm — nic dalšího na stránce neovlivní. */

.hm { margin: 8px 0 44px; }

.hm-scena {
  --pin-x: 56%;
  --pin-y: 60%;
  position: relative;
  aspect-ratio: 16 / 9;
  overflow: hidden;
  background: #eef1ec;
  border: 1px solid #dfe3de;
  border-radius: 14px;
  isolation: isolate;
}

/* ---- Mapa ------------------------------------------------------------ */

.hm-mapa {
  position: absolute;
  inset: 0;
  transform-origin: var(--pin-x) var(--pin-y);
  transition: transform 1.6s cubic-bezier(.22, .8, .3, 1);
}

.hm-ulice { display: block; width: 100%; height: 100%; }

.je-gril .hm-mapa { transform: scale(1.06); }

.hm-hledani {
  position: absolute;
  top: 5%;
  left: 4%;
  z-index: 3;
  display: flex;
  align-items: center;
  gap: 10px;
  max-width: min(62%, 420px);
  padding: 10px 18px 10px 14px;
  background: #fff;
  border-radius: 999px;
  box-shadow: 0 2px 10px rgba(0, 0, 0, .16);
  color: #222;
  font-size: clamp(12px, 1.5vw, 16px);
  white-space: nowrap;
}

.hm-hledani svg { flex: 0 0 auto; width: 18px; height: 18px; color: var(--red, #e01820); }

/* Text dotazu se „dopisuje" — šířka roste po písmenech. */
.hm-dotaz {
  display: inline-block;
  overflow: hidden;
  max-width: 0;
  vertical-align: bottom;
  transition: max-width 1s steps(22, end);
}

.hm-scena.je-psani .hm-dotaz { max-width: 22ch; }

.hm-poznamka {
  position: absolute;
  right: 12px;
  bottom: 8px;
  z-index: 3;
  color: #8a8f8a;
  font-size: 11px;
}

/* ---- Špendlík --------------------------------------------------------- */

.hm-spendlik {
  position: absolute;
  left: var(--pin-x);
  top: var(--pin-y);
  z-index: 4;
  width: clamp(28px, 4.2vw, 46px);
  transform: translate(-50%, -100%) translateY(-260%);
  opacity: 0;
  filter: drop-shadow(0 6px 5px rgba(0, 0, 0, .28));
}

.hm-spendlik svg { display: block; width: 100%; height: auto; }

.je-pin .hm-spendlik {
  opacity: 1;
  animation: hm-dopad .7s cubic-bezier(.3, .0, .6, 1) forwards;
}

@keyframes hm-dopad {
  0%   { transform: translate(-50%, -100%) translateY(-260%); }
  70%  { transform: translate(-50%, -100%) translateY(6%); }
  85%  { transform: translate(-50%, -100%) translateY(-8%); }
  100% { transform: translate(-50%, -100%) translateY(0); }
}

/* Vlnka v místě dopadu. */
.hm-vlna {
  position: absolute;
  left: var(--pin-x);
  top: var(--pin-y);
  z-index: 2;
  width: 12px;
  height: 6px;
  border: 2px solid var(--red, #e01820);
  border-radius: 50%;
  transform: translate(-50%, -50%) scale(0);
  opacity: 0;
}

.je-pin .hm-vlna { animation: hm-vlna 1s .55s ease-out forwards; }

@keyframes hm-vlna {
  0%   { transform: translate(-50%, -50%) scale(0); opacity: .9; }
  100% { transform: translate(-50%, -50%) scale(9); opacity: 0; }
}

/* ---- Gril vyrůstá z mapy --------------------------------------------- */

/* Prohlubeň v mapě, ze které gril „vyleze" — jako vytržený papír. */
.hm-dira {
  position: absolute;
  left: var(--pin-x);
  top: var(--pin-y);
  z-index: 2;
  width: clamp(120px, 26%, 280px);
  aspect-ratio: 3 / 1;
  background: radial-gradient(closest-side, rgba(0, 0, 0, .28), rgba(0, 0, 0, .08) 70%, transparent);
  border-radius: 50%;
  transform: translate(-50%, -50%) scale(0);
  transition: transform .7s cubic-bezier(.2, 1.2, .4, 1);
}

.je-gril .hm-dira { transform: translate(-50%, -50%) scale(1); }

/* Z mapy vyroste logo Grilcentrum. Roman 13. 9. 2026: „místo grilu udělej
   animaci našeho loga Grilcentrum." Logo je široké, proto větší šířka
   a posun nad špendlík; po vyrůstání jemně pulzuje jako plamen, dokud se
   neodhalí fotka. Soubor je originál, jen převedený do WebP. */
.hm-logo {
  position: absolute;
  left: var(--pin-x);
  top: var(--pin-y);
  z-index: 3;
  width: clamp(220px, 48%, 520px);
  height: auto;
  transform-origin: 50% 100%;
  transform: translate(-50%, -118%) perspective(900px) rotateX(86deg) scale(.35);
  opacity: 0;
  filter: drop-shadow(0 18px 14px rgba(0, 0, 0, .25));
  transition: transform 1.1s cubic-bezier(.18, 1.25, .35, 1), opacity .35s ease;
}

.je-gril .hm-logo {
  transform: translate(-50%, -118%) perspective(900px) rotateX(0deg) scale(1);
  opacity: 1;
  animation: hm-logo-plamen 1.6s 1.1s ease-in-out infinite;
}

@keyframes hm-logo-plamen {
  0%, 100% { filter: drop-shadow(0 18px 14px rgba(0, 0, 0, .25)) drop-shadow(0 0 0 rgba(224, 24, 32, 0)); }
  50%      { filter: drop-shadow(0 18px 14px rgba(0, 0, 0, .25)) drop-shadow(0 0 22px rgba(224, 24, 32, .55)); }
}

/* Špendlík se po vyrůstání grilu posune na jeho vršek, ať ho nezakryje. */
.je-gril .hm-spendlik { opacity: 0; transition: opacity .3s .1s; }

/* ---- Fotka se odhalí z místa špendlíku ------------------------------- */

.hm-foto {
  position: absolute;
  inset: 0;
  z-index: 5;
  margin: 0;
  clip-path: circle(0% at var(--pin-x) var(--pin-y));
  transition: clip-path 1.1s cubic-bezier(.6, .0, .2, 1);
}

.hm-foto img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: scale(1.14);
  transition: transform 2.4s cubic-bezier(.2, .7, .3, 1);
}

.je-foto .hm-foto { clip-path: circle(150% at var(--pin-x) var(--pin-y)); }
.je-foto .hm-foto img { transform: scale(1); }

.hm-foto figcaption {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: clamp(18px, 4vw, 40px) clamp(18px, 4vw, 44px) clamp(16px, 3vw, 30px);
  background: linear-gradient(to top, rgba(0, 0, 0, .72), rgba(0, 0, 0, 0));
  color: #fff;
  opacity: 0;
  transform: translateY(12px);
  transition: opacity .6s .9s, transform .6s .9s;
}

.je-foto .hm-foto figcaption { opacity: 1; transform: none; }

.hm-foto figcaption strong {
  display: block;
  margin-bottom: 4px;
  font-size: clamp(18px, 2.6vw, 30px);
  line-height: 1.15;
}

.hm-foto figcaption span { font-size: clamp(13px, 1.5vw, 16px); }

/* ---- Přehrát znovu ----------------------------------------------------- */

.hm-znovu {
  position: absolute;
  top: 14px;
  right: 14px;
  z-index: 6;
  padding: 8px 14px;
  background: rgba(255, 255, 255, .92);
  border: 0;
  border-radius: 999px;
  color: #111;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
  opacity: 0;
  pointer-events: none;
  transition: opacity .4s;
}

.je-hotovo .hm-znovu { opacity: 1; pointer-events: auto; }
.hm-znovu:focus-visible { outline: 3px solid #111; outline-offset: 2px; }

/* ---- Mobil a vypnuté animace ------------------------------------------ */

@media (max-width: 600px) {
  .hm-scena { aspect-ratio: 4 / 5; --pin-x: 52%; --pin-y: 62%; }
  .hm-logo { width: 80%; }
  .hm-dira { width: 52%; }
  .hm-hledani { max-width: 86%; }
}

@media (prefers-reduced-motion: reduce) {
  .hm-scena *,
  .hm-scena *::before,
  .hm-scena *::after { transition: none !important; animation: none !important; }
  .hm-spendlik { transform: translate(-50%, -100%); }
}
