@import url("https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@300;400&family=Courier+Prime:wght@400&display=swap");
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;background:#020508}
body{font-family:Arial,sans-serif;overflow-x:hidden}
.app{min-height:100svh;display:flex;justify-content:center;background:#020508}
.scene-wrap{position:relative;width:min(100vw,520px);height:100svh;min-height:650px;overflow:hidden;background:#020508;isolation:isolate}
.scene{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:block;transform:scale(1.0);will-change:transform}
@keyframes worldDrift{0%{filter:brightness(.98);transform:scale(1.02) translate3d(-1px,0,0)}100%{filter:brightness(1.03);transform:scale(1.035) translate3d(1px,-2px,0)}}
.scene-shimmer{display:none;position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle at 50% 40%,transparent 44%,rgba(0,0,0,.10) 100%);mix-blend-mode:multiply;opacity:.32;z-index:2}
/* Живое небо: отдельные точки поверх исходной картинки */
.starfield{display:block;position:absolute;inset:0;pointer-events:none;z-index:3;overflow:hidden}
.star{position:absolute;width:2px;height:2px;border-radius:50%;background:rgba(255,255,255,.9);box-shadow:0 0 7px rgba(235,235,235,.55);animation:twinkle var(--dur) ease-in-out var(--delay) infinite}
.star.big{width:3px;height:3px;box-shadow:0 0 11px rgba(245,242,235,.7)}
@keyframes twinkle{0%,100%{opacity:.18;transform:scale(.7)}45%{opacity:1;transform:scale(1.35)}62%{opacity:.38;transform:scale(.9)}80%{opacity:.92;transform:scale(1.15)}}
/* Едва заметное движение воды — читается глазами, но не превращается в эффект */
.ocean-motion{display:block;position:absolute;left:0;right:0;bottom:0;height:29%;pointer-events:none;z-index:3;overflow:hidden;opacity:.52}
.ocean-motion:before,.ocean-motion:after{content:"";position:absolute;left:-18%;width:136%;height:34%;border-top:1px solid rgba(226,228,226,.16);border-radius:50%;filter:blur(.25px);animation:waveDrift 7s ease-in-out infinite alternate}
.ocean-motion:before{top:22%;transform:scaleY(.55)}
.ocean-motion:after{top:52%;animation-duration:10s;animation-direction:alternate-reverse;opacity:.55}
@keyframes waveDrift{0%{transform:translate3d(-2%,0,0) scaleY(.55)}100%{transform:translate3d(2%,5px,0) scaleY(.8)}}
/* Видимое, но очень мягкое дыхание трёх центральных объектов */
.hotspot{position:absolute;border:0;background:transparent;cursor:pointer;padding:0;outline:none;z-index:6;will-change:transform}
.hotspot:after{content:"";position:absolute;inset:-8px;border-radius:50%;border:1px solid transparent;transition:.35s}
.hotspot:hover:after,.hotspot:focus-visible:after{border-color:rgba(240,237,228,.24);box-shadow:0 0 24px rgba(235,232,222,.10)}
.hotspot:active{transform:scale(.97)}
.guardian{left:10%;width:25%;top:61.5%;height:13%;animation:guardianFloat 4.8s ease-in-out infinite}
.codes{left:37.5%;width:25%;top:62%;height:12.5%;animation:codeFloat 5.6s ease-in-out .4s infinite}
.music{right:10%;width:25%;top:61.5%;height:13%;animation:musicFloat 5.1s ease-in-out .8s infinite}
@keyframes guardianFloat{0%,100%{transform:translate3d(0,0,0) rotate(-.15deg)}50%{transform:translate3d(0,-7px,0) rotate(.45deg)}}
@keyframes codeFloat{0%,100%{transform:translate3d(0,0,0)}50%{transform:translate3d(0,-5px,0)}}
@keyframes musicFloat{0%,100%{transform:translate3d(0,0,0) rotate(.12deg)}50%{transform:translate3d(0,-6px,0) rotate(-.5deg)}}
.home-nav{left:10%;width:25%;bottom:2.7%;height:6.5%}.saved-nav{left:37.5%;width:25%;bottom:2.7%;height:6.5%}.profile-nav{right:10%;width:25%;bottom:2.7%;height:6.5%}
.sheet{position:fixed;inset:0;background:rgba(1,5,8,.78);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);display:none;z-index:20;padding:16px}.sheet.open{display:flex;align-items:flex-end}.sheet-inner{width:min(520px,100%);margin:auto;background:linear-gradient(180deg,rgba(20,27,32,.97),rgba(5,10,14,.99));border:1px solid rgba(238,234,226,.24);border-radius:26px;padding:52px 22px 28px;position:relative;max-height:88vh;overflow:auto;color:#eeeae2}.close{position:absolute;right:10px;top:8px;border:0;background:transparent;color:#c4c9cb;font-size:31px;width:44px;height:44px}.sheet h2{font-family:Georgia,serif;font-size:34px;font-weight:300;text-align:center;margin:4px 0 12px}.sheet p{font-size:13px;line-height:1.7;color:#abb3b7;text-align:center}.message{border:1px solid rgba(238,234,226,.24);border-radius:18px;padding:22px;margin:20px 0;color:#eeeae2;font-family:Georgia,serif;font-size:22px;line-height:1.45;text-align:center;background:rgba(215,220,221,.035)}.code-list{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:20px}.code-list button{min-height:52px;border:1px solid rgba(238,234,226,.24);border-radius:14px;background:rgba(215,220,221,.05);color:#e9e7e0}.music-placeholder{margin-top:20px;border:1px solid rgba(238,234,226,.24);border-radius:16px;padding:18px;text-align:center;color:#c6cccf}
@media(max-width:380px){.scene-wrap{min-height:600px}.guardian,.music{width:26%}.codes{width:26%}}
@media(prefers-reduced-motion:reduce){.scene,.star,.ocean-motion:before,.ocean-motion:after,.guardian,.codes,.music{animation:none!important}}

/* Активный, но аккуратный звёздный слой: исходная картинка не меняется */
.shooting-stars{position:absolute;inset:0;pointer-events:none;z-index:4;overflow:hidden}
.shooting-star{position:absolute;width:70px;height:1px;background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.95));transform-origin:right center;filter:drop-shadow(0 0 5px rgba(235,238,240,.55));opacity:0;animation:shoot 1.15s linear forwards}
@keyframes shoot{0%{opacity:0;transform:translate3d(0,0,0) rotate(-28deg) scaleX(.35)}12%{opacity:.95}100%{opacity:0;transform:translate3d(-210px,115px,0) rotate(-28deg) scaleX(1)}}
@media(prefers-reduced-motion:reduce){.shooting-star{animation:none!important;display:none!important}}

/* Нажатие: выбранный объект заметно увеличивается, не меняя его положение в композиции. */
.hotspot.is-selected{animation-play-state:paused!important;transform:scale(1.14);filter:brightness(1.08);transition:transform .28s ease,filter .28s ease}
.hotspot.is-selected:after{border-color:rgba(240,240,240,.42);box-shadow:0 0 30px rgba(235,238,240,.18)}
.code-list button{transition:transform .22s ease,background .22s ease,border-color .22s ease}
.code-list button.code-selected{transform:scale(1.06);background:rgba(225,230,232,.10);border-color:rgba(245,245,245,.5);box-shadow:0 0 18px rgba(235,238,240,.10)}
.sound-toggle{display:block;width:100%;min-height:50px;border:1px solid rgba(238,234,226,.3);border-radius:16px;background:rgba(215,220,221,.06);color:#eeeae2;font-size:15px;margin-top:18px}
@media(prefers-reduced-motion:reduce){.hotspot.is-selected{transform:none!important}}


/* GUARDIAN SCENE V2 — visual layer only */
.guardian-scene{
  min-height:72vh;
  display:flex;
  flex-direction:column;
  align-items:center;
  padding:8px 4px 18px;
  color:#f2f0ea;
  overflow:hidden;
}
.guardian-intro{
  position:relative;
  z-index:2;
  text-align:center;
  padding:6px 8px 0;
  animation:guardianIntroIn 1.1s ease both;
}
.guardian-title-main{
  font:inherit;
  font-size:31px;
  line-height:1;
  letter-spacing:.06em;
  margin-bottom:7px;
}
.guardian-title-sub{
  font-family:'Josefin Sans','Raleway',sans-serif;
  font-size:19px;
  font-weight:300;
  letter-spacing:.20em;
  line-height:1.1;
}
.guardian-intro-text{
  margin-top:24px;
  color:rgba(238,238,234,.70);
  font-size:12px;
  line-height:1.65;
  letter-spacing:.025em;
}
.guardian-intro-text span{
  display:block;
  height:13px;
}
.guardian-space{
  position:relative;
  width:100%;
  height:230px;
  margin-top:2px;
}
.guardian-arc{
  position:absolute;
  left:50%;
  bottom:22px;
  width:168px;
  height:82px;
  transform:translateX(-50%);
  border:1px solid rgba(245,245,240,.52);
  border-bottom:0;
  border-radius:168px 168px 0 0;
  box-shadow:0 -8px 32px rgba(255,255,255,.055);
}
.guardian-glow{
  position:absolute;
  left:50%;
  bottom:54px;
  width:125px;
  height:65px;
  transform:translateX(-50%);
  border-radius:50%;
  background:radial-gradient(ellipse,rgba(255,255,255,.15),rgba(255,255,255,.025) 48%,transparent 72%);
  filter:blur(5px);
  animation:guardianPulse 4s ease-in-out infinite;
}
.guardian-being{
  position:absolute;
  left:50%;
  top:18px;
  width:42px;
  height:82px;
  transform:translate(-50%,-38px) scale(.55);
  opacity:0;
  filter:drop-shadow(0 0 10px rgba(255,255,255,.8));
  animation:guardianFlight 2.9s cubic-bezier(.22,.72,.22,1) .8s forwards;
}
.guardian-being:before{
  content:'';
  position:absolute;
  left:50%;
  top:4px;
  width:18px;
  height:29px;
  transform:translateX(-50%);
  border-radius:55% 45% 52% 48%;
  background:linear-gradient(180deg,#fff,rgba(255,255,255,.58));
}
.guardian-being i,
.guardian-being b,
.guardian-being em{
  position:absolute;
  display:block;
  left:50%;
  transform:translateX(-50%);
  background:#fff;
  border-radius:50%;
  font-style:normal;
}
.guardian-being i{
  top:27px;
  width:28px;
  height:45px;
  opacity:.82;
  filter:blur(1px);
}
.guardian-being b{
  top:34px;
  width:38px;
  height:19px;
  opacity:.52;
  filter:blur(3px);
}
.guardian-being em{
  top:58px;
  width:11px;
  height:30px;
  opacity:.62;
  filter:blur(2px);
}
.guardian-pollen{
  position:absolute;
  left:50%;
  bottom:98px;
  width:1px;
  height:1px;
  transform:translateX(-50%);
  pointer-events:none;
}
.guardian-particle{
  position:absolute;
  left:0;
  top:0;
  width:3px;
  height:3px;
  border-radius:50%;
  background:#fff;
  box-shadow:0 0 7px rgba(255,255,255,.95);
  opacity:0;
  animation:guardianPollen 1.65s cubic-bezier(.2,.7,.25,1) var(--delay) forwards;
}
.guardian-message-wrap{
  position:relative;
  z-index:3;
  width:min(310px,88%);
  margin-top:-3px;
  opacity:0;
  transform:translateY(10px);
}
.guardian-message-wrap.is-revealed{
  animation:guardianMessageIn .95s ease forwards;
}
.guardian-message{
  width:100%;
  text-align:center;
  font-family:'Josefin Sans','Raleway',sans-serif;
  font-size:15px;
  font-weight:300;
  line-height:1.72;
  letter-spacing:.035em;
  color:rgba(246,245,241,.88);
}
@keyframes guardianIntroIn{
  from{opacity:0;transform:translateY(8px)}
  to{opacity:1;transform:none}
}
@keyframes guardianFlight{
  0%{opacity:0;transform:translate(-50%,-38px) scale(.55)}
  18%{opacity:.95}
  58%{opacity:1;transform:translate(-50%,56px) scale(1)}
  78%{transform:translate(-50%,78px) scale(1.03)}
  100%{opacity:.96;transform:translate(-50%,104px) scale(.98)}
}
@keyframes guardianPollen{
  0%{
    opacity:0;
    transform:translate3d(0,0,0) scale(.25);
  }
  18%{
    opacity:1;
  }
  78%{
    opacity:.85;
  }
  100%{
    opacity:0;
    transform:translate3d(var(--px),var(--py),0) scale(1);
  }
}
@keyframes guardianMessageIn{
  from{opacity:0;transform:translateY(10px);filter:blur(4px)}
  to{opacity:1;transform:none;filter:none}
}
@keyframes guardianPulse{
  0%,100%{opacity:.45;transform:translateX(-50%) scale(.92)}
  50%{opacity:.9;transform:translateX(-50%) scale(1.08)}
}
.message{font-family:Courier New,monospace}
.sheet h2{font-family:Raleway,sans-serif;font-weight:300}
.sheet h2{font-family:"Josefin Sans",sans-serif;font-weight:300;letter-spacing:.16em}
.sheet h2{font-family:Cormorant Garamond,serif;font-weight:300;letter-spacing:.08em}
.sheet.open{align-items:center;justify-content:center}
.sheet-inner{width:min(420px,92vw);padding:48px 28px 42px;background:#080b0f;border:1px solid rgba(238,234,226,.08);border-radius:24px;box-shadow:none}
.sheet h2{font-family:Cormorant Garamond,serif;font-size:32px;font-weight:300;letter-spacing:.08em;line-height:1.15;text-align:center;margin:4px 0 28px}
.sheet p{display:none}
.sheet .message{font-family:Courier New,monospace;font-size:17px;font-weight:300;letter-spacing:.02em;line-height:1.8;text-align:center;border:0;border-radius:0;background:transparent;padding:0;margin:0;color:#eeeae2}
.sheet.open{align-items:center;justify-content:center}
.sheet-inner{width:min(420px,92vw);padding:48px 28px 42px;background:#0b0d10;border:1px solid rgba(238,234,226,.08);border-radius:24px;box-shadow:0 0 70px rgba(255,255,255,.09)}
.sheet h2{font-family:Cormorant Garamond,serif;font-size:32px;font-weight:300;letter-spacing:.08em;line-height:1.15;text-align:center}
.sheet .message{font-family:Courier New,monospace;font-size:17px;font-weight:300;letter-spacing:.02em;line-height:1.8;text-align:center}
.sheet.open{align-items:center;justify-content:center}
.sheet-inner{width:360px;max-width:86vw;padding:42px 24px 36px;background:#0b0d10;border:1px solid rgba(238,234,226,.08);border-radius:24px;box-shadow:0 0 70px rgba(255,255,255,.09)}
.sheet h2{font-family:Cormorant Garamond,serif;font-size:32px;font-weight:300;letter-spacing:.08em;line-height:1.15;text-align:center;text-transform:uppercase;margin:4px 0 24px}
.sheet p{display:none}
.sheet .message{font-family:Courier New,monospace;font-size:17px;font-weight:300;letter-spacing:.02em;line-height:1.8;text-align:center;border:0;background:transparent;padding:0;margin:0;color:#eeeae2}
.sheet .message{font-size:15px;line-height:1.55}
.sheet.open .sheet-inner{animation:guardianCardIn .8s ease both}
.sheet.open h2{animation:guardianTitleIn .7s ease .35s both}
.sheet.open .message{animation:guardianMessageIn 1s ease .75s both}
@keyframes guardianCardIn{from{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}
@keyframes guardianTitleIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes guardianMessageIn{from{opacity:0;transform:translateY(8px);text-shadow:0 0 14px rgba(255,255,255,.16)}to{opacity:1;transform:translateY(0);text-shadow:0 0 0 rgba(255,255,255,0)}}
.sheet-inner{position:relative;overflow:hidden}
.sheet-inner:before{content:"";position:absolute;inset:-30%;background:radial-gradient(ellipse at 50% 50%,rgba(255,255,255,.035),transparent 55%);animation:guardianBreath 4.5s ease-in-out infinite;pointer-events:none}
.sheet-inner:after{content:"";position:absolute;top:-20%;bottom:-20%;left:-45%;width:18%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.13),transparent);transform:skewX(-18deg);animation:guardianFlash 4.8s ease-in-out 1.2s infinite;pointer-events:none}
.sheet-inner>*{position:relative;z-index:1}
@keyframes guardianBreath{0%,100%{opacity:.35;transform:scale(.94)}50%{opacity:1;transform:scale(1.08)}}
@keyframes guardianFlash{0%,70%{left:-45%;opacity:0}76%{opacity:1}90%{left:125%;opacity:0}100%{left:125%;opacity:0}}
.sheet.open .sheet-inner{animation:guardianBreathCard 4.8s ease-in-out infinite}
@keyframes guardianBreathCard{0%,100%{opacity:.82;transform:scale(.985);box-shadow:0 0 45px rgba(255,255,255,.045)}50%{opacity:1;transform:scale(1);box-shadow:0 0 85px rgba(255,255,255,.12)}}
58%{opacity:0;filter:blur(6px);transform:scale(.97)}78%{opacity:.75;filter:blur(2px);transform:scale(.995)}100%{opacity:1;filter:blur(0);transform:scale(1)}}
45%{opacity:.25;filter:blur(3px);transform:scale(.985)}75%{opacity:.85;filter:blur(1px)}100%{opacity:1;filter:blur(0);transform:scale(1)}}

30%{opacity:1}65%{opacity:.9;transform:translate(-50%,-50%) scale(.9) rotate(3deg);filter:blur(0)}100%{opacity:0;transform:translate(-50%,-50%) scale(.35);filter:blur(1px)}}
48%{opacity:.05;filter:blur(5px)}72%{opacity:.8;filter:blur(1px);transform:scale(.995)}100%{opacity:1;filter:blur(0);transform:scale(1)}}
.sheet.open #sheetContent{position:relative;animation:guardianReveal .7s ease-out both}
.sheet.open #sheetContent:after{content:"";position:absolute;left:50%;top:50%;width:170px;height:170px;transform:translate(-50%,-50%) scale(1.6);border-radius:50%;background:radial-gradient(circle at 12% 22%,rgba(255,255,255,.9) 0 1px,transparent 2px),radial-gradient(circle at 28% 12%,rgba(255,255,255,.8) 0 1px,transparent 2px),radial-gradient(circle at 48% 8%,rgba(255,255,255,.95) 0 1px,transparent 2px),radial-gradient(circle at 70% 16%,rgba(255,255,255,.8) 0 1px,transparent 2px),radial-gradient(circle at 88% 30%,rgba(255,255,255,.9) 0 1px,transparent 2px),radial-gradient(circle at 18% 48%,rgba(255,255,255,.75) 0 1px,transparent 2px),radial-gradient(circle at 82% 50%,rgba(255,255,255,.9) 0 1px,transparent 2px),radial-gradient(circle at 24% 78%,rgba(255,255,255,.8) 0 1px,transparent 2px),radial-gradient(circle at 50% 92%,rgba(255,255,255,.9) 0 1px,transparent 2px),radial-gradient(circle at 76% 80%,rgba(255,255,255,.8) 0 1px,transparent 2px);opacity:0;pointer-events:none;z-index:0;animation:guardianParticles .7s ease-out both}
.sheet.open #sheetContent>*{position:relative;z-index:1}
55%{opacity:.45;filter:blur(2px)}100%{opacity:1;filter:blur(0);transform:scale(1)}}
.sheet.open #sheetContent{position:relative;padding-top:82px}
.sheet.open #sheetContent:before{content:"";position:absolute;left:50%;top:4px;width:54px;height:72px;transform:translateX(-50%);border-radius:50% 50% 45% 45%;background:radial-gradient(circle at 50% 18%,rgba(255,255,255,.95) 0 5px,transparent 8px),radial-gradient(ellipse at 50% 52%,rgba(255,255,255,.62) 0 18%,rgba(255,255,255,.18) 42%,transparent 70%);filter:blur(1px);opacity:.72;animation:guardianFigureBreath 4.8s ease-in-out infinite;pointer-events:none;z-index:0}
.sheet.open #sheetContent>*{position:relative;z-index:1}
@keyframes guardianFigureBreath{0%,100%{transform:translateX(-50%) scale(.94);opacity:.55}50%{transform:translateX(-50%) scale(1.06);opacity:.82}}
.sheet.open #sheetContent{padding-top:0}
.sheet.open #sheetContent:before{left:auto;right:8px;top:52%;width:72px;height:118px;transform:translateY(-50%);background:radial-gradient(circle at 50% 12%,rgba(255,255,255,.72) 0 4px,transparent 9px),radial-gradient(ellipse at 50% 45%,rgba(255,255,255,.32) 0 13%,rgba(255,255,255,.12) 35%,transparent 68%),radial-gradient(ellipse at 22% 48%,rgba(255,255,255,.18) 0 7%,transparent 25%),radial-gradient(ellipse at 78% 48%,rgba(255,255,255,.18) 0 7%,transparent 25%);opacity:.42;animation:guardianFigureBreath 5s ease-in-out infinite}
@keyframes guardianFigureBreath{0%,100%{transform:translateY(-50%) scale(.96);opacity:.28}50%{transform:translateY(-50%) scale(1.04);opacity:.52}}
