<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="https://www.pandoraburo.ru/" xml:lang="ru">
  <id>https://www.pandoraburo.ru/mayatnik-sudby-nox</id>
  <link href="https://www.pandoraburo.ru/mayatnik-sudby-nox.xml" rel="self"/>
  <title>Маятник Судьбы — NOX</title>
  <subtitle type="html">
&lt;html lang="ru"&gt;
&lt;head&gt;
&lt;meta charset="UTF-8"&gt;
&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
&lt;meta name="theme-color" content="#05070f"&gt;
&lt;title&gt;Маятник Судьбы — NOX · Оракул Ночи&lt;/title&gt;
&lt;meta name="description" content="Гадание на маятнике онлайн. Задай вопрос — маятник даст ответ Да/Нет. Лозоходство, спираль покоя, 8 вариантов ответа."&gt;
&lt;meta name="keywords" content="гадание на маятнике, маятник да нет, лозоходство, рамка, биолокация, гадание онлайн, ответ на вопрос, предсказание"&gt;

&lt;link rel="preconnect" href="https://fonts.googleapis.com" /&gt;
&lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="crossorigin" /&gt;
&lt;link href="https://fonts.googleapis.com/css2?family=Cinzel:wght@400;600;800&amp;amp;family=Inter:wght@400;500;600;700;800&amp;amp;family=JetBrains+Mono:wght@400;700&amp;amp;display=swap" rel="stylesheet" /&gt;
&lt;link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" /&gt;

&lt;style&gt;
/* ═══════════ ПЕРЕМЕННЫЕ ═══════════ */
:root{
  --bg-0:#05070f; --bg-1:#0a0f1e; --bg-2:#101830;
  --cyan:#00f0ff; --magenta:#ff2bd6; --gold:#d4af37; --gold-b:#f0d060;
  --violet:#b55cff; --green:#39ff14; --orange:#ff8a1e;
  --text:#e8f4ff; --dim:#8aa0c0; --line:rgba(255,255,255,.08);
  --font-disp:'Cinzel',serif;
  --font-body:'Inter',system-ui,sans-serif;
  --font-mono:'JetBrains Mono',monospace;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{
  min-height:100vh;
  background:radial-gradient(ellipse at top,#0a1530 0%,var(--bg-0) 70%);
  color:var(--text);
  font-family:var(--font-body);
  overflow-x:hidden;
  -webkit-font-smoothing:antialiased;
}
body::before{
  content:'';position:fixed;inset:0;pointer-events:none;z-index:0;
  background:
    radial-gradient(circle at 10% 20%,rgba(181,92,255,.1),transparent 40%),
    radial-gradient(circle at 90% 80%,rgba(255,43,214,.08),transparent 40%),
    radial-gradient(circle at 50% 50%,rgba(181,92,255,.04),transparent 50%);
}
body::after{
  content:'';position:fixed;inset:0;pointer-events:none;z-index:1;
  background-image:
    radial-gradient(1px 1px at 20% 30%,#fff,transparent),
    radial-gradient(1px 1px at 60% 70%,#fff,transparent),
    radial-gradient(1px 1px at 80% 10%,#fff,transparent),
    radial-gradient(1px 1px at 35% 85%,#fff,transparent),
    radial-gradient(2px 2px at 45% 15%,#b55cff,transparent),
    radial-gradient(1px 1px at 70% 90%,#ff2bd6,transparent);
  opacity:.5;
  animation:stars 8s ease-in-out infinite alternate;
}
@keyframes stars{0%{opacity:.3}100%{opacity:.7}}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}

/* ═══════════ ШАПКА ═══════════ */
.nox-header{
  position:sticky;top:0;z-index:50;
  padding:14px 20px;
  background:rgba(5,7,15,.85);
  backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);
  display:flex;align-items:center;justify-content:space-between;gap:14px;
}
.nox-logo{
  display:flex;align-items:center;gap:10px;
  text-decoration:none;color:inherit;
  transition:transform .2s;
}
.nox-logo:hover{transform:scale(1.03)}
.nox-logo-icon{
  width:38px;height:38px;border-radius:50%;
  background:radial-gradient(circle at 30% 30%,#2a1b60,#0a0820);
  border:2px solid var(--gold);
  display:flex;align-items:center;justify-content:center;
  font-size:18px;color:var(--gold);
  box-shadow:0 0 20px rgba(212,175,55,.5);
}
.nox-logo-text{
  font-family:var(--font-disp);
  font-size:20px;font-weight:800;letter-spacing:5px;
  background:linear-gradient(90deg,var(--gold),var(--gold-b));
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
}
.nox-menu-btn{
  display:flex;align-items:center;gap:8px;
  padding:9px 16px;border-radius:999px;
  background:rgba(212,175,55,.1);
  border:1px solid rgba(212,175,55,.4);
  color:var(--gold-b);font-size:12px;font-weight:700;
  letter-spacing:1px;text-transform:uppercase;
  transition:.2s;
}
.nox-menu-btn:hover{background:rgba(212,175,55,.2);box-shadow:0 0 15px rgba(212,175,55,.3)}

/* ═══════════ БЕГУЩАЯ СТРОКА ═══════════ */
.nox-happiness{
  max-width:900px;margin:16px auto 8px;padding:12px 18px;
  background:linear-gradient(90deg,rgba(181,92,255,.08),rgba(255,43,214,.08),rgba(212,175,55,.08));
  border:1px solid rgba(212,175,55,.4);
  border-radius:999px;
  display:flex;align-items:center;gap:12px;
  position:relative;overflow:hidden;
  box-shadow:0 0 25px rgba(181,92,255,.15);
  margin-left:20px;margin-right:20px;
}
.nox-happiness-icon{
  font-size:18px;color:var(--gold);flex-shrink:0;
  animation:twinkle 2s ease-in-out infinite alternate;
}
@keyframes twinkle{0%{filter:drop-shadow(0 0 5px var(--gold))}100%{filter:drop-shadow(0 0 15px var(--gold))}}
.nox-happiness-text{
  flex:1;font-size:13px;color:#fff;line-height:1.4;font-style:italic;
  transition:opacity .5s,transform .5s;
  text-shadow:0 0 8px rgba(181,92,255,.3);
}
.nox-happiness-text.flip{opacity:0;transform:translateY(8px)}
.nox-happiness-btn{
  font-size:10px;color:var(--gold);font-weight:700;
  padding:4px 10px;border:1px solid var(--gold);border-radius:999px;
  letter-spacing:1px;text-transform:uppercase;transition:.2s;flex-shrink:0;
}
.nox-happiness-btn:hover{background:var(--gold);color:#0a0a0a}

/* ═══════════ ХЛЕБНЫЕ КРОШКИ ═══════════ */
.nox-crumbs{
  max-width:1200px;margin:0 auto;padding:0 20px;
  font-size:11px;color:var(--dim);
  display:flex;align-items:center;gap:8px;
  letter-spacing:.5px;
}
.nox-crumbs a{color:var(--dim);text-decoration:none;transition:.2s}
.nox-crumbs a:hover{color:var(--cyan)}
.nox-crumbs .sep{opacity:.5}
.nox-crumbs .cur{color:var(--gold-b)}

/* ═══════════ ОСНОВНОЙ КОНТЕНТ ═══════════ */
.nox-main{
  max-width:1200px;margin:0 auto;padding:24px 20px 40px;
  position:relative;z-index:10;
}
.nox-title{
  font-family:var(--font-disp);
  font-size:clamp(28px,5vw,44px);font-weight:800;
  letter-spacing:4px;text-transform:uppercase;
  background:linear-gradient(90deg,var(--violet),var(--magenta),var(--gold));
  -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;
  text-align:center;
  margin-bottom:8px;
  filter:drop-shadow(0 0 40px rgba(181,92,255,.4));
}
.nox-title-sub{
  text-align:center;color:var(--dim);font-size:13px;
  letter-spacing:3px;text-transform:uppercase;
  margin-bottom:26px;font-style:italic;
}

/* ═══════════ ТАБЫ ═══════════ */
.nox-tabs{
  display:flex;justify-content:center;gap:10px;
  margin-bottom:26px;flex-wrap:wrap;
}
.nox-tab{
  padding:12px 26px;border-radius:999px;
  border:1px solid var(--line);
  background:rgba(255,255,255,.03);
  color:var(--dim);
  font-size:13px;font-weight:700;
  letter-spacing:1.2px;text-transform:uppercase;
  transition:all .3s;
  display:inline-flex;align-items:center;gap:8px;
}
.nox-tab:hover{
  color:var(--violet);border-color:var(--violet);
  box-shadow:0 0 15px rgba(181,92,255,.3);
}
.nox-tab.on{
  background:linear-gradient(135deg,rgba(181,92,255,.2),rgba(255,43,214,.1));
  color:#fff;border-color:var(--violet);
  box-shadow:0 0 25px rgba(181,92,255,.5);
  text-shadow:0 0 10px var(--violet);
}

/* ═══════════ СЦЕНА ═══════════ */
.nox-stage-wrap{display:none}
.nox-stage-wrap.on{display:block;animation:stageIn .5s ease}
@keyframes stageIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

.nox-stage{
  position:relative;
  border-radius:24px;
  background:radial-gradient(ellipse at 50% 0%,#1a0d3a 0%,#0a0820 60%,#05070f 100%);
  border:1px solid rgba(181,92,255,.25);
  box-shadow:inset 0 0 80px rgba(0,0,0,.7),0 0 40px rgba(181,92,255,.08);
  overflow:hidden;
  min-height:560px;
  padding:20px;
  margin-bottom:20px;
}

/* ═══════════ СЦЕНА МАЯТНИКА (общая) ═══════════ */
.pendulum-scene{
  position:relative;
  width:100%;
  height:520px;
  overflow:hidden;
  display:flex;
  justify-content:center;
  align-items:flex-start;
}

/* Точка подвеса */
.pendulum-anchor{
  position:absolute;
  top:10px;
  left:50%;
  transform:translateX(-50%);
  width:16px;height:16px;
  border-radius:50%;
  background:radial-gradient(circle at 30% 30%,#f0d060,#a07020);
  box-shadow:0 0 20px var(--gold),inset 0 0 6px rgba(0,0,0,.5);
  z-index:10;
}

/* Нить + груз */
.pendulum-string{
  position:absolute;
  top:18px;
  left:50%;
  width:2px;
  height:280px;
  background:linear-gradient(180deg,transparent 0%,var(--gold) 20%,var(--gold-b) 100%);
  transform-origin:top center;
  transform:translateX(-50%) rotate(0deg);
  transition:transform 0s;
  z-index:5;
  box-shadow:0 0 8px rgba(212,175,55,.5);
}
.pendulum-bob{
  position:absolute;
  bottom:-24px;
  left:50%;
  transform:translateX(-50%);
  width:48px;height:48px;
  border-radius:50%;
  background:radial-gradient(circle at 30% 30%,#f0d060,#a07020 60%,#3a2410);
  box-shadow:
    0 0 30px var(--gold),
    0 0 60px rgba(212,175,55,.5),
    inset 0 0 15px rgba(0,0,0,.6);
  border:1px solid #f0d060;
}
.pendulum-bob::after{
  content:'';position:absolute;
  inset:8px;border-radius:50%;
  background:radial-gradient(circle at 40% 30%,rgba(255,255,255,.5),transparent 60%);
  pointer-events:none;
}

/* Классы анимации */
.pendulum-string.swinging-fast{animation:swingFast 0.9s ease-in-out infinite}
.pendulum-string.swinging-slow{animation:swingSlow 2.8s ease-in-out infinite}
.pendulum-string.almost-still{animation:swingAlmost 6s ease-in-out infinite}
.pendulum-string.stopped{transform:translateX(-50%) rotate(0deg)}

@keyframes swingFast{
  0%,100%{transform:translateX(-50%) rotate(-30deg)}
  50%{transform:translateX(-50%) rotate(30deg)}
}
@keyframes swingSlow{
  0%,100%{transform:translateX(-50%) rotate(-18deg)}
  50%{transform:translateX(-50%) rotate(18deg)}
}
@keyframes swingAlmost{
  0%,100%{transform:translateX(-50%) rotate(-6deg)}
  50%{transform:translateX(-50%) rotate(6deg)}
}

/* ═══════════ ДОСКА (Да/Нет) ═══════════ */
.pendulum-board{
  position:absolute;
  bottom:20px;
  left:50%;
  transform:translateX(-50%);
  width:min(440px,92%);
  height:170px;
  border-radius:50%/70%;
  background:radial-gradient(ellipse at center,#1a0d3a 0%,#0a0820 70%);
  border:2px solid rgba(212,175,55,.4);
  box-shadow:inset 0 0 40px rgba(0,0,0,.6),0 0 30px rgba(181,92,255,.15);
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  justify-content:center;
  padding:20px 30px;
  gap:6px;
  z-index:3;
}
.pendulum-board .ans{
  padding:6px 12px;
  border-radius:8px;
  font-family:var(--font-disp);
  font-size:12px;
  letter-spacing:1px;
  color:var(--dim);
  transition:all .3s;
  border:1px solid transparent;
}
.pendulum-board .ans.active{
  background:linear-gradient(135deg,var(--gold),var(--gold-b));
  color:#0a0a0a;
  box-shadow:0 0 25px var(--gold),0 0 50px rgba(240,214,138,.5);
  transform:scale(1.15);
  font-weight:800;
  border-color:var(--gold-b);
}

/* Стрелка-указатель (показывает направление) */
.pendulum-pointer{
  position:absolute;
  bottom:200px;
  left:50%;
  transform:translateX(-50%);
  font-size:18px;
  color:var(--violet);
  opacity:0;
  transition:opacity .3s;
  z-index:4;
  text-shadow:0 0 15px var(--violet);
}
.pendulum-pointer.show{opacity:1}

/* ═══════════ КОЛЬЦО ОТВЕТОВ (Рамка) ═══════════ */
.pendulum-ring{
  position:absolute;
  bottom:20px;
  left:50%;
  transform:translateX(-50%);
  width:min(460px,94%);
  height:min(460px,94%);
  max-height:400px;
  z-index:3;
}
.pendulum-ring svg{
  width:100%;height:100%;
}
.pendulum-ring .ring-outer{
  fill:none;
  stroke:rgba(212,175,55,.35);
  stroke-width:1.5;
}
.pendulum-ring .ring-inner{
  fill:none;
  stroke:rgba(181,92,255,.25);
  stroke-width:1;
  stroke-dasharray:3 6;
}
.ring-letter{
  font-family:var(--font-disp);
  font-size:16px;
  font-weight:700;
  fill:var(--dim);
  transition:fill .3s;
  text-anchor:middle;
  dominant-baseline:middle;
}
.ring-letter.active{
  fill:var(--gold-b);
  filter:drop-shadow(0 0 10px var(--gold));
}
.ring-marker{
  fill:var(--gold-b);
  filter:drop-shadow(0 0 12px var(--gold));
  transition:transform .5s ease;
}

/* ═══════════ ВОПРОС ═══════════ */
.pendulum-q-wrap{
  text-align:center;
  margin-bottom:20px;
}
.pendulum-q-input{
  width:100%;max-width:520px;
  padding:14px 18px;
  background:rgba(181,92,255,.05);
  border:1px solid rgba(181,92,255,.3);
  border-radius:14px;
  color:#fff;font-size:14px;
  font-family:inherit;
  transition:.2s;
}
.pendulum-q-input::placeholder{color:rgba(138,160,192,.5)}
.pendulum-q-input:focus{
  outline:none;
  border-color:var(--violet);
  box-shadow:0 0 0 3px rgba(181,92,255,.2),0 0 20px rgba(181,92,255,.3);
}

/* ═══════════ КНОПКА ═══════════ */
.nox-action{
  text-align:center;
  margin-top:20px;
}
.nox-btn{
  display:inline-flex;align-items:center;gap:10px;
  padding:15px 42px;border-radius:999px;
  font-size:14px;font-weight:800;letter-spacing:1.5px;text-transform:uppercase;
  background:linear-gradient(135deg,var(--violet),var(--magenta));
  color:#fff;
  box-shadow:0 0 30px rgba(181,92,255,.6),0 0 60px rgba(255,43,214,.3);
  transition:all .25s;
}
.nox-btn:hover{transform:translateY(-3px);box-shadow:0 0 50px rgba(181,92,255,.9),0 0 80px rgba(255,43,214,.5)}
.nox-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.nox-btn.gold{background:linear-gradient(135deg,var(--gold),var(--gold-b));color:#0a0a0a}

/* ═══════════ СПИРАЛЬ (Модуль 3) ═══════════ */
.spiral-scene{
  position:relative;
  width:100%;
  height:440px;
  display:flex;
  align-items:center;
  justify-content:center;
  overflow:hidden;
}
.spiral-core{
  position:relative;
  width:240px;height:240px;
  border-radius:50%;
  background:radial-gradient(circle at 50% 50%,rgba(181,92,255,.25),rgba(255,43,214,.1) 60%,transparent 80%);
  display:flex;
  align-items:center;
  justify-content:center;
  animation:corePulse 4s ease-in-out infinite;
}
@keyframes corePulse{
  0%,100%{transform:scale(1);opacity:.9}
  50%{transform:scale(1.08);opacity:1}
}
.spiral-core::before{
  content:'';position:absolute;inset:-20px;border-radius:50%;
  border:1px solid rgba(181,92,255,.3);
  animation:ringExpand 3s ease-in-out infinite;
}
.spiral-core::after{
  content:'';position:absolute;inset:-40px;border-radius:50%;
  border:1px solid rgba(255,43,214,.2);
  animation:ringExpand 3s ease-in-out infinite;
  animation-delay:1.5s;
}
@keyframes ringExpand{
  0%{transform:scale(.8);opacity:.7}
  100%{transform:scale(1.3);opacity:0}
}
.spiral-phrase{
  font-family:var(--font-disp);
  font-size:16px;
  color:var(--gold-b);
  text-align:center;
  padding:20px;
  letter-spacing:1px;
  line-height:1.5;
  text-shadow:0 0 20px rgba(212,175,55,.6);
  z-index:2;
  max-width:180px;
}
.spiral-phrase.flip{
  animation:phraseFlip .6s ease;
}
@keyframes phraseFlip{
  0%{opacity:0;transform:scale(.8) rotate(-5deg)}
  100%{opacity:1;transform:scale(1) rotate(0)}
}

/* ═══════════ ЖУРНАЛ ═══════════ */
.nox-log{
  background:linear-gradient(145deg,rgba(15,25,50,.6),rgba(8,14,32,.8));
  border:1px solid var(--line);
  border-radius:20px;
  padding:22px;
  box-shadow:0 8px 32px rgba(0,0,0,.5);
}
.nox-log h2{
  font-family:var(--font-disp);
  font-size:15px;letter-spacing:3px;text-transform:uppercase;
  color:var(--gold);
  padding-bottom:10px;
  border-bottom:1px solid var(--line);
  margin-bottom:14px;
  display:flex;align-items:center;gap:10px;
}
.nox-log h2::before{content:'?';font-size:18px}
.nox-log-item{
  padding:14px 16px;
  border-left:3px solid var(--violet);
  background:linear-gradient(90deg,rgba(181,92,255,.08),transparent);
  border-radius:0 10px 10px 0;
  margin-bottom:10px;
  animation:logIn .5s ease;
}
@keyframes logIn{from{opacity:0;transform:translateX(-10px)}to{opacity:1;transform:none}}
.nox-log-item.gold{border-left-color:var(--gold);background:linear-gradient(90deg,rgba(212,175,55,.08),transparent)}
.nox-log-item .q{
  font-size:12px;color:var(--dim);font-style:italic;margin-bottom:6px;
}
.nox-log-item .ans-big{
  font-family:var(--font-disp);
  font-size:24px;font-weight:800;
  color:var(--gold-b);
  letter-spacing:3px;
  margin-bottom:6px;
  text-shadow:0 0 15px rgba(212,175,55,.6);
}
.nox-log-item .desc{
  font-size:13px;color:#cbd5e1;line-height:1.5;
}
.nox-log-empty{
  text-align:center;color:var(--dim);
  font-style:italic;font-size:13px;
  padding:24px 0;
}

/* ═══════════ НАВИГАЦИЯ ВНИЗУ ═══════════ */
.nox-nav-bottom{
  display:flex;justify-content:space-between;gap:10px;
  max-width:1200px;margin:40px auto 0;padding:0 20px;
}
.nox-nav-btn{
  flex:1;
  padding:14px 18px;
  border-radius:14px;
  background:rgba(255,255,255,.03);
  border:1px solid var(--line);
  color:var(--text);
  text-decoration:none;
  font-size:12px;font-weight:700;letter-spacing:1px;text-transform:uppercase;
  transition:.25s;
  display:flex;align-items:center;justify-content:center;gap:8px;
  text-align:center;
}
.nox-nav-btn:hover{
  border-color:var(--violet);
  color:var(--violet);
  box-shadow:0 0 20px rgba(181,92,255,.25);
  transform:translateY(-2px);
}
.nox-nav-btn.home{
  background:linear-gradient(135deg,rgba(212,175,55,.15),rgba(212,175,55,.05));
  border-color:rgba(212,175,55,.5);
  color:var(--gold-b);
}
.nox-nav-btn.home:hover{color:#fff;box-shadow:0 0 20px rgba(212,175,55,.35)}

/* ═══════════ МЕНЮ ═══════════ */
.nox-menu-overlay{
  position:fixed;inset:0;z-index:200;
  display:none;
  background:rgba(3,5,15,.94);
  backdrop-filter:blur(12px);
  padding:20px;
  overflow-y:auto;
}
.nox-menu-overlay.open{display:block;animation:menuIn .35s ease}
@keyframes menuIn{from{opacity:0}to{opacity:1}}
.nox-menu-head{
  max-width:1100px;margin:0 auto 20px;
  display:flex;justify-content:space-between;align-items:center;
}
.nox-menu-head h2{
  font-family:var(--font-disp);font-size:22px;
  letter-spacing:5px;color:var(--gold-b);
}
.nox-menu-close{
  width:44px;height:44px;border-radius:50%;
  background:rgba(255,255,255,.05);
  border:1px solid var(--line);
  color:var(--dim);font-size:18px;
  transition:.2s;
}
.nox-menu-close:hover{background:rgba(255,43,214,.2);border-color:var(--magenta);color:var(--magenta);transform:rotate(90deg)}
.nox-menu-grid{
  max-width:1100px;margin:0 auto;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));
  gap:12px;
}
.nox-menu-item{
  padding:20px 12px;
  border-radius:16px;
  background:linear-gradient(145deg,rgba(15,25,50,.7),rgba(8,14,32,.9));
  border:1px solid var(--line);
  text-align:center;text-decoration:none;color:inherit;
  transition:.25s;
  cursor:pointer;
}
.nox-menu-item:hover{
  transform:translateY(-4px);
  border-color:var(--item-color,var(--cyan));
  box-shadow:0 0 25px var(--item-color,rgba(0,240,255,.3));
}
.nox-menu-item.current{
  border-color:var(--gold);
  background:linear-gradient(145deg,rgba(212,175,55,.15),rgba(8,14,32,.9));
  box-shadow:0 0 25px rgba(212,175,55,.3);
}
.nox-menu-icon{font-size:28px;display:block;margin-bottom:8px;transition:transform .3s}
.nox-menu-item:hover .nox-menu-icon{transform:scale(1.15) rotate(-5deg)}
.nox-menu-name{font-family:var(--font-disp);font-size:12px;font-weight:700;letter-spacing:1px}
.nox-menu-sub{font-size:9px;color:var(--dim);margin-top:3px;text-transform:uppercase;letter-spacing:.5px}
.nox-menu-item[data-color="gold"]{--item-color:var(--gold)}
.nox-menu-item[data-color="cyan"]{--item-color:var(--cyan)}
.nox-menu-item[data-color="magenta"]{--item-color:var(--magenta)}
.nox-menu-item[data-color="violet"]{--item-color:var(--violet)}
.nox-menu-item[data-color="green"]{--item-color:var(--green)}
.nox-menu-item[data-color="orange"]{--item-color:var(--orange)}

/* ═══════════ АДАПТИВ ═══════════ */
@media(max-width:640px){
  .nox-title{font-size:24px;letter-spacing:2px}
  .nox-stage{padding:14px;min-height:480px}
  .pendulum-scene{height:460px}
  .pendulum-string{height:220px}
  .pendulum-bob{width:38px;height:38px}
  .pendulum-board{width:300px;height:150px;padding:14px 20px;bottom:10px}
  .pendulum-board .ans{font-size:10px;padding:5px 8px}
  .pendulum-ring{height:300px;bottom:10px}
  .ring-letter{font-size:13px}
  .spiral-core{width:180px;height:180px}
  .spiral-phrase{font-size:13px}
  .nox-nav-btn{font-size:10px;padding:12px 8px}
  .nox-tab{padding:9px 14px;font-size:11px}
  .nox-logo-text{font-size:16px;letter-spacing:4px}
  .nox-logo-icon{width:32px;height:32px;font-size:16px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;


&lt;header class="nox-header"&gt;
  &lt;a href="index.html" class="nox-logo"&gt;
    &lt;div class="nox-logo-icon"&gt;?&lt;/div&gt;
    &lt;div class="nox-logo-text"&gt;NOX&lt;/div&gt;
  &lt;/a&gt;
  &lt;button class="nox-menu-btn" onclick="noxMenuOpen()"&gt;
    &lt;i class="fas fa-th"&gt;&lt;/i&gt; Меню
  &lt;/button&gt;
&lt;/header&gt;


&lt;div class="nox-happiness"&gt;
  &lt;span class="nox-happiness-icon"&gt;✨&lt;/span&gt;
  &lt;span class="nox-happiness-text" id="noxHappinessText"&gt;Загрузка...&lt;/span&gt;
  &lt;button class="nox-happiness-btn" onclick="noxNewHappiness()"&gt;Ещё&lt;/button&gt;
&lt;/div&gt;


&lt;div class="nox-crumbs"&gt;
  &lt;a href="index.html"&gt;NOX&lt;/a&gt;
  &lt;span class="sep"&gt;/&lt;/span&gt;
  &lt;span class="cur"&gt;Маятник&lt;/span&gt;
&lt;/div&gt;


&lt;main class="nox-main"&gt;
  &lt;h1 class="nox-title"&gt;? Маятник Судьбы&lt;/h1&gt;
  &lt;div class="nox-title-sub"&gt;— три пути качания —&lt;/div&gt;

  
  &lt;div class="nox-tabs"&gt;
    &lt;button class="nox-tab on" data-stage="davnet"&gt;&lt;i&gt;?&lt;/i&gt; Да / Нет&lt;/button&gt;
    &lt;button class="nox-tab" data-stage="ramka"&gt;&lt;i&gt;?&lt;/i&gt; Рамка&lt;/button&gt;
    &lt;button class="nox-tab" data-stage="spiral"&gt;&lt;i&gt;?&lt;/i&gt; Спираль покоя&lt;/button&gt;
  &lt;/div&gt;

  
  &lt;div class="nox-stage-wrap on" id="stage-davnet"&gt;
    &lt;div class="nox-stage"&gt;
      &lt;div class="pendulum-q-wrap"&gt;
        &lt;input type="text" class="pendulum-q-input" id="davnetQ" placeholder="Задай вопрос, ответ на который «Да» или «Нет»…" maxlength="120" /&gt;
      &lt;/div&gt;

      &lt;div class="pendulum-scene"&gt;
        &lt;div class="pendulum-anchor"&gt;&lt;/div&gt;
        &lt;div class="pendulum-string" id="davnetString"&gt;
          &lt;div class="pendulum-bob"&gt;&lt;/div&gt;
        &lt;/div&gt;
        &lt;div class="pendulum-board" id="davnetBoard"&gt;
          &lt;span class="ans" data-r="Да"&gt;Да&lt;/span&gt;
          &lt;span class="ans" data-r="Нет"&gt;Нет&lt;/span&gt;
          &lt;span class="ans" data-r="Возможно"&gt;Возможно&lt;/span&gt;
          &lt;span class="ans" data-r="Скоро"&gt;Скоро&lt;/span&gt;
          &lt;span class="ans" data-r="Никогда"&gt;Никогда&lt;/span&gt;
          &lt;span class="ans" data-r="Спроси позже"&gt;Спроси позже&lt;/span&gt;
          &lt;span class="ans" data-r="Судьба решит"&gt;Судьба решит&lt;/span&gt;
          &lt;span class="ans" data-r="Ты знаешь сам"&gt;Ты знаешь сам&lt;/span&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="nox-action"&gt;
        &lt;button class="nox-btn" id="davnetGo"&gt;? Запустить маятник&lt;/button&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="nox-log"&gt;
      &lt;h2&gt;Ответ маятника&lt;/h2&gt;
      &lt;div id="davnetLog"&gt;
        &lt;div class="nox-log-empty"&gt;Сформулируй вопрос и запусти маятник…&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  
  &lt;div class="nox-stage-wrap" id="stage-ramka"&gt;
    &lt;div class="nox-stage"&gt;
      &lt;div class="pendulum-q-wrap"&gt;
        &lt;input type="text" class="pendulum-q-input" id="ramkaQ" placeholder="Задай открытый вопрос — рамка покажет первую букву ответа…" maxlength="120" /&gt;
      &lt;/div&gt;

      &lt;div class="pendulum-scene" style="height:560px"&gt;
        &lt;div class="pendulum-anchor"&gt;&lt;/div&gt;
        &lt;div class="pendulum-string" id="ramkaString"&gt;
          &lt;div class="pendulum-bob"&gt;&lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="pendulum-ring" id="ramkaRing"&gt;
          &lt;svg viewbox="0 0 400 400"&gt;
            &lt;circle class="ring-outer" cx="200" cy="200" r="180"&gt;&lt;/circle&gt;
            &lt;circle class="ring-inner" cx="200" cy="200" r="140"&gt;&lt;/circle&gt;
            &lt;circle class="ring-outer" cx="200" cy="200" r="100" style="stroke-dasharray:2 4"&gt;&lt;/circle&gt;
            &lt;g id="ramkaLetters"&gt;&lt;/g&gt;
            &lt;circle class="ring-marker" id="ramkaMarker" cx="200" cy="20" r="8"&gt;&lt;/circle&gt;
          &lt;/svg&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="nox-action"&gt;
        &lt;button class="nox-btn" id="ramkaGo"&gt;? Запустить рамку&lt;/button&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="nox-log"&gt;
      &lt;h2&gt;Подсказка рамки&lt;/h2&gt;
      &lt;div id="ramkaLog"&gt;
        &lt;div class="nox-log-empty"&gt;Задай вопрос и запусти рамку…&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  
  &lt;div class="nox-stage-wrap" id="stage-spiral"&gt;
    &lt;div class="nox-stage"&gt;
      &lt;div class="pendulum-q-wrap" style="color:var(--dim);font-style:italic;font-size:13px;text-align:center"&gt;
        Спокойное вращение маятника откроет подсказку дня
      &lt;/div&gt;

      &lt;div class="spiral-scene"&gt;
        &lt;div class="pendulum-anchor"&gt;&lt;/div&gt;
        &lt;div class="pendulum-string" id="spiralString"&gt;
          &lt;div class="pendulum-bob"&gt;&lt;/div&gt;
        &lt;/div&gt;

        &lt;div class="spiral-core" id="spiralCore"&gt;
          &lt;div class="spiral-phrase" id="spiralPhrase"&gt;Нажми «Открыть спираль»&lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;

      &lt;div class="nox-action"&gt;
        &lt;button class="nox-btn gold" id="spiralGo"&gt;? Открыть спираль&lt;/button&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;div class="nox-log"&gt;
      &lt;h2&gt;Послание дня&lt;/h2&gt;
      &lt;div id="spiralLog"&gt;
        &lt;div class="nox-log-empty"&gt;Открой спираль, чтобы получить подсказку…&lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;/main&gt;


&lt;nav class="nox-nav-bottom"&gt;
  &lt;a href="dice.html" class="nox-nav-btn"&gt;← Кости&lt;/a&gt;
  &lt;a href="index.html" class="nox-nav-btn home"&gt;? Главная&lt;/a&gt;
  &lt;a href="astrology.html" class="nox-nav-btn"&gt;Астрология →&lt;/a&gt;
&lt;/nav&gt;


&lt;div class="nox-menu-overlay" id="noxMenu"&gt;
  &lt;div class="nox-menu-head"&gt;
    &lt;h2&gt;? NOX&lt;/h2&gt;
    &lt;button class="nox-menu-close" onclick="noxMenuClose()"&gt;✕&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class="nox-menu-grid" id="noxMenuGrid"&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;script&gt;
"use strict";

/* ═══════════════════════════════════════════
   БЕГУЩАЯ СТРОКА
   ═══════════════════════════════════════════ */
const HAPPINESS = [
  "Сегодня вселенная на твоей стороне — сделай первый шаг.",
  "То, что ты ищешь, уже ищет тебя.",
  "Маленькое чудо случится там, где ты не ждёшь.",
  "Твоя интуиция сегодня громче обычного — слушай её.",
  "Одна дверь закрывается, чтобы открылась лучшая.",
  "Не спеши. Всё идёт по нужному маршруту.",
  "Смелость — это не отсутствие страха, а шаг вопреки ему.",
  "Загадай желание — сегодня оно услышано.",
  "Луна знает твои тайны и хранит их.",
  "Ответ придёт во сне, если отпустить вопрос.",
  "Скажи «да» тому, что давно ждёт твоего согласия.",
  "Не бойся перемен — они несут подарки.",
  "Судьба любит тех, кто не боится ошибаться.",
  "Ты сильнее, чем кажется. Помни об этом.",
  "Заметь знак — он уже рядом.",
  "Сегодня хороший день, чтобы простить себя.",
  "Твой путь уникален. Не сравнивай его с чужим.",
  "То, что кажется концом, — лишь поворот.",
  "Позволь себе мечтать вслух.",
  "Свет внутри тебя сильнее любой тьмы."
];
let hIdx = 0;
function noxNewHappiness() {
  const el = document.getElementById('noxHappinessText');
  el.classList.add('flip');
  setTimeout(() =&gt; {
    let i;
    do { i = Math.floor(Math.random() * HAPPINESS.length); }
    while (i === hIdx &amp;&amp; HAPPINESS.length &gt; 1);
    hIdx = i;
    el.textContent = HAPPINESS[i];
    el.classList.remove('flip');
  }, 350);
}

/* ═══════════════════════════════════════════
   МЕНЮ
   ═══════════════════════════════════════════ */
const MENU_ITEMS = [
  { file:'index.html',      icon:'?', name:'Главная',   sub:'NOX',           color:'gold' },
  { file:'tarot.html',      icon:'?', name:'Таро',      sub:'Карты',         color:'magenta' },
  { file:'candles.html',    icon:'?️', name:'Свечи',     sub:'Огонь',         color:'orange' },
  { file:'dice.html',       icon:'?', name:'Кости',     sub:'Жребий',        color:'cyan' },
  { file:'pendulum.html',   icon:'?', name:'Маятник',   sub:'Ответ',         color:'violet' },
  { file:'astrology.html',  icon:'?', name:'Астрология',sub:'Карта',         color:'cyan' },
  { file:'numerology.html', icon:'?', name:'Нумерология',sub:'Числа',        color:'gold' },
  { file:'runes.html',      icon:'?', name:'Руны',      sub:'Футарк',        color:'gold' },
  { file:'coffee.html',     icon:'☕', name:'Гуща',      sub:'Кофе',          color:'orange' },
  { file:'dreams.html',     icon:'?', name:'Сонник',    sub:'Сны',           color:'violet' },
  { file:'palm.html',       icon:'✋', name:'Хиромантия',sub:'Ладони',        color:'orange' },
  { file:'breath.html',     icon:'?️', name:'Практики', sub:'Покой',         color:'green' },
  { file:'amulet.html',     icon:'⛓️', name:'Оберег',    sub:'Код',           color:'green' }
];
const CURRENT_FILE = 'pendulum.html';
function noxMenuRender() {
  const g = document.getElementById('noxMenuGrid');
  g.innerHTML = MENU_ITEMS.map(m =&gt; `
    &lt;a class="nox-menu-item ${m.file===CURRENT_FILE?'current':''}" data-color="${m.color}" href="${m.file}"&gt;
      &lt;span class="nox-menu-icon"&gt;${m.icon}&lt;/span&gt;
      &lt;div class="nox-menu-name"&gt;${m.name}&lt;/div&gt;
      &lt;div class="nox-menu-sub"&gt;${m.sub}&lt;/div&gt;
    &lt;/a&gt;
  `).join('');
}
function noxMenuOpen() {
  noxMenuRender();
  document.getElementById('noxMenu').classList.add('open');
}
function noxMenuClose() {
  document.getElementById('noxMenu').classList.remove('open');
}

/* ═══════════════════════════════════════════
   ТАБЫ
   ═══════════════════════════════════════════ */
document.querySelectorAll('.nox-tab').forEach(t =&gt; {
  t.addEventListener('click', () =&gt; {
    document.querySelectorAll('.nox-tab').forEach(x =&gt; x.classList.remove('on'));
    document.querySelectorAll('.nox-stage-wrap').forEach(x =&gt; x.classList.remove('on'));
    t.classList.add('on');
    document.getElementById('stage-' + t.dataset.stage).classList.add('on');
  });
});

/* ═══════════════════════════════════════════
   МОДУЛЬ 1: ДА / НЕТ
   ═══════════════════════════════════════════ */
const DAVNET_ANSWERS = [
  { r:'Да',          m:'Вселенная говорит «да». Действуй смело.' },
  { r:'Нет',         m:'Сейчас не время. Отпусти и вернись позже.' },
  { r:'Возможно',    m:'Исход в твоих руках — сделай свой выбор.' },
  { r:'Скоро',       m:'Ответ придёт в ближайшие дни. Будь готов.' },
  { r:'Никогда',     m:'Это не твой путь. Отпусти его с миром.' },
  { r:'Спроси позже',m:'Сейчас слишком рано. Наберись терпения.' },
  { r:'Судьба решит',m:'Не контролируй — доверься потоку.' },
  { r:'Ты знаешь сам',m:'Ответ уже внутри тебя. Прислушайся.' }
];

let davnetBusy = false;
document.getElementById('davnetGo').addEventListener('click', () =&gt; {
  if (davnetBusy) return;
  davnetBusy = true;
  const btn = document.getElementById('davnetGo');
  btn.disabled = true;

  const str = document.getElementById('davnetString');
  const board = document.getElementById('davnetBoard');
  const log = document.getElementById('davnetLog');
  const q = document.getElementById('davnetQ').value.trim();

  // Сброс
  board.querySelectorAll('.ans').forEach(s =&gt; s.classList.remove('active'));
  log.innerHTML = '&lt;div class="nox-log-empty"&gt;Маятник начал качаться…&lt;/div&gt;';

  str.classList.remove('swinging-fast','swinging-slow','almost-still');
  void str.offsetWidth;
  str.classList.add('swinging-fast');

  setTimeout(() =&gt; {
    str.classList.remove('swinging-fast');
    str.classList.add('swinging-slow');
  }, 2500);

  setTimeout(() =&gt; {
    str.classList.remove('swinging-slow');
    str.classList.add('almost-still');
  }, 5000);

  setTimeout(() =&gt; {
    str.classList.remove('almost-still');
    str.classList.add('stopped');

    // Выбор ответа
    const pick = DAVNET_ANSWERS[Math.floor(Math.random() * DAVNET_ANSWERS.length)];
    const span = board.querySelector(`.ans[data-r="${pick.r}"]`);
    if (span) span.classList.add('active');

    // Искры
    const rect = str.getBoundingClientRect();
    noxSparkles(rect.left + rect.width/2, rect.bottom - 24, 30);

    log.innerHTML = `
      ${q ? `&lt;div class="q"&gt;«${q.replace(/&lt;/g,'&amp;lt;')}»&lt;/div&gt;` : ''}
      &lt;div class="ans-big"&gt;${pick.r}&lt;/div&gt;
      &lt;div class="desc"&gt;${pick.m}&lt;/div&gt;
    `;

    davnetBusy = false;
    btn.disabled = false;
  }, 7500);
});

/* ═══════════════════════════════════════════
   МОДУЛЬ 2: РАМКА
   ═══════════════════════════════════════════ */
const RUS_LETTERS = 'АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЭЮЯ'.split('');
const VOWELS = ['А','Е','И','О','У','Ы','Э','Ю','Я'];
const CONSONANTS = ['Б','В','Г','Д','Ж','З','К','Л','М','Н','П','Р','С','Т','Ф','Х','Ц','Ч','Ш','Щ'];

// Инициализация букв по кругу
function initRamkaLetters() {
  const g = document.getElementById('ramkaLetters');
  const letters = 'АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЭЮЯ'.split('');
  const N = letters.length;
  const R = 140; // радиус
  const cx = 200, cy = 200;

  letters.forEach((l, i) =&gt; {
    const angle = (i / N) * Math.PI * 2 - Math.PI / 2;
    const x = cx + Math.cos(angle) * R;
    const y = cy + Math.sin(angle) * R;
    const txt = document.createElementNS('http://www.w3.org/2000/svg','text');
    txt.setAttribute('x', x);
    txt.setAttribute('y', y);
    txt.setAttribute('class', 'ring-letter');
    txt.dataset.letter = l;
    txt.textContent = l;
    g.appendChild(txt);
  });
}

let ramkaBusy = false;
document.getElementById('ramkaGo').addEventListener('click', () =&gt; {
  if (ramkaBusy) return;
  ramkaBusy = true;
  const btn = document.getElementById('ramkaGo');
  btn.disabled = true;

  const str = document.getElementById('ramkaString');
  const marker = document.getElementById('ramkaMarker');
  const letters = document.querySelectorAll('#ramkaLetters .ring-letter');
  const log = document.getElementById('ramkaLog');
  const q = document.getElementById('ramkaQ').value.trim();

  // Сброс
  letters.forEach(l =&gt; l.classList.remove('active'));
  log.innerHTML = '&lt;div class="nox-log-empty"&gt;Рамка ищет ответ…&lt;/div&gt;';

  // Качание
  str.classList.remove('swinging-fast','swinging-slow','almost-still','stopped');
  void str.offsetWidth;
  str.classList.add('swinging-fast');

  setTimeout(() =&gt; {
    str.classList.remove('swinging-fast');
    str.classList.add('swinging-slow');

    // Начинаем медленно крутить маркер
    let angle = 0;
    const targetAngle = Math.random() * 360 + 720; // 2 оборота + случайный угол
    const t0 = performance.now();
    const dur = 4000;

    function spinMarker(now) {
      const p = Math.min((now - t0) / dur, 1);
      const ease = 1 - Math.pow(1 - p, 3);
      angle = targetAngle * ease;
      // Маркер движется по окружности r=180
      const rad = (angle - 90) * Math.PI / 180;
      const mx = 200 + Math.cos(rad) * 180;
      const my = 200 + Math.sin(rad) * 180;
      marker.setAttribute('cx', mx);
      marker.setAttribute('cy', my);
      if (p &lt; 1) requestAnimationFrame(spinMarker);
      else finishRamka();
    }
    requestAnimationFrame(spinMarker);
  }, 2500);

  function finishRamka() {
    str.classList.remove('swinging-slow');
    str.classList.add('almost-still');

    // Определяем, на какой букве оказался маркер
    const mx = parseFloat(marker.getAttribute('cx'));
    const my = parseFloat(marker.getAttribute('cy'));

    let closest = null;
    let minDist = Infinity;
    letters.forEach(l =&gt; {
      const lx = parseFloat(l.getAttribute('x'));
      const ly = parseFloat(l.getAttribute('y'));
      const d = Math.hypot(lx - mx, ly - my);
      if (d &lt; minDist) {
        minDist = d;
        closest = l;
      }
    });

    // Ищем ближайшую букву (если попали между — берём соседнюю)
    if (closest) closest.classList.add('active');

    setTimeout(() =&gt; {
      str.classList.remove('almost-still');
      str.classList.add('stopped');

      const letter = closest ? closest.dataset.letter : '?';

      // Ищем слова, начинающиеся на эту букву (или содержащие)
      const hints = LETTER_HINTS[letter] || ['Ответ придёт сам — открой сердце.'];
      const hint = hints[Math.floor(Math.random() * hints.length)];

      // Искры
      const rect = str.getBoundingClientRect();
      noxSparkles(rect.left + rect.width/2, rect.bottom - 24, 30);

      log.innerHTML = `
        ${q ? `&lt;div class="q"&gt;«${q.replace(/&lt;/g,'&amp;lt;')}»&lt;/div&gt;` : ''}
        &lt;div class="ans-big" style="font-size:52px"&gt;${letter}&lt;/div&gt;
        &lt;div class="desc"&gt;${hint}&lt;/div&gt;
      `;

      ramkaBusy = false;
      btn.disabled = false;
    }, 500);
  }
});

/* Подсказки для букв */
const LETTER_HINTS = {
  'А': ['Ответ уже рядом, оглянись.', 'Начало — это уже победа.', 'Смелость — твоя буква.'],
  'Б': ['Близкий человек поможет.', 'Будь терпелив — время работает на тебя.', 'Благодарность притянет благо.'],
  'В': ['Всё идёт по плану — доверься.', 'Выбор за тобой, не спеши.', 'Внутренний голос знает путь.'],
  'Г': ['Готовься — скоро перемены.', 'Гармония внутри — гармония вокруг.', 'Главное не упусти момент.'],
  'Д': ['Действуй — время пришло.', 'Друг придёт на помощь.', 'Доверься своей интуиции.'],
  'Е': ['Естественность — твой ключ.', 'Единство с собой — твоя сила.', 'Если сомневаешься — подожди день.'],
  'Ж': ['Желание исполнится, если отпустить.', 'Жизнь даст то, что нужно.', 'Жди знака.'],
  'З': ['Забота о себе — приоритет.', 'Знак уже рядом — заметь его.', 'Зрелость приходит через опыт.'],
  'И': ['Иди за сердцем, не за страхом.', 'Интуиция подскажет.', 'Изменения — к лучшему.'],
  'К': ['Ключ у тебя в руках.', 'Каждый шаг приближает к цели.', 'Красота рядом — открой глаза.'],
  'Л': ['Любовь — движущая сила.', 'Лёгкость придёт, если отпустить.', 'Лучшее впереди.'],
  'М': ['Мудрость в тишине.', 'Маленький шаг — большая перемена.', 'Магия рядом.'],
  'Н': ['Новое начнётся, если отпустить старое.', 'Надейся — всё разрешится.', 'Начни с малого.'],
  'О': ['Один шаг — и всё изменится.', 'Отпусти контроль — и увидишь путь.', 'Ответ уже внутри.'],
  'П': ['Прислушайся к тишине.', 'Победа за тобой, если будешь честен.', 'Прошлое отпускает.'],
  'Р': ['Решение придёт само.', 'Радость рядом — прими её.', 'Расти — ты готов.'],
  'С': ['Сила в мягкости.', 'Свет ведёт тебя.', 'Смелость — твой путь.'],
  'Т': ['Терпение — твой союзник.', 'Ты сильнее, чем думаешь.', 'Творчество откроет дверь.'],
  'У': ['Удача улыбнётся скоро.', 'Уверенность — в действии.', 'Учись — знания откроют путь.'],
  'Ф': ['Фокус на главном.', 'Фантазия даст подсказку.', 'Фортуна рядом.'],
  'Х': ['Хватит сомнений — действуй.', 'Хорошие новости впереди.', 'Храни спокойствие.'],
  'Ц': ['Цель ближе, чем кажется.', 'Цени то, что имеешь.', 'Целостность придёт.'],
  'Ч': ['Чувства не обманут.', 'Чудо рядом — заметь его.', 'Честность — ключ.'],
  'Ш': ['Шаг вперёд — и всё изменится.', 'Шанс упустишь — вернётся лучший.', 'Штиль после бури.'],
  'Щ': ['Щедрость вернётся втройне.', 'Щит свой — не бросай.', 'Щемящее отпустит.'],
  'Э': ['Энергия растёт — используй.', 'Эмпатия приведёт к ответу.', 'Этот этап важен.'],
  'Ю': ['Юность души — твоя сила.', 'Юркость мысли даст ответ.', 'Юг притянет удачу.'],
  'Я': ['Ясность придёт сегодня.', 'Я — твой главный союзник.', 'Яркое событие впереди.']
};

/* ═══════════════════════════════════════════
   МОДУЛЬ 3: СПИРАЛЬ ПОКОЯ
   ═══════════════════════════════════════════ */
const SPIRAL_PHRASES = [
  'Дыши глубже. Всё идёт своим чередом.',
  'Мягкость — твоя сила сегодня.',
  'Одна честная фраза изменит многое.',
  'Отпусти то, что не твоё.',
  'Свет внутри сильнее тьмы снаружи.',
  'Маленький шаг сегодня важнее большого завтра.',
  'Ты уже идёшь правильным путём.',
  'То, что тревожит, — временно.',
  'Позволь себе просто быть.',
  'Сегодня ты на своей стороне.',
  'Забота о себе — не эгоизм.',
  'Внутренний покой — источник силы.',
  'Просто дыши. Этого достаточно.',
  'Всё складывается, даже если не видно.',
  'Твой темп — правильный темп.',
  'Благодарность открывает двери.',
  'Ты справляешься лучше, чем кажется.',
  'Доверься процессу.',
  'В тебе больше света, чем ты думаешь.',
  'Сегодня — хороший день для тишины.'
];

let spiralBusy = false;
let spiralInterval = null;
document.getElementById('spiralGo').addEventListener('click', () =&gt; {
  if (spiralBusy) return;
  spiralBusy = true;
  const btn = document.getElementById('spiralGo');
  btn.disabled = true;

  const str = document.getElementById('spiralString');
  const phraseEl = document.getElementById('spiralPhrase');
  const log = document.getElementById('spiralLog');

  // Сброс
  str.classList.remove('swinging-fast','swinging-slow','almost-still','stopped');
  void str.offsetWidth;

  // Ускоренное качание
  str.classList.add('swinging-fast');

  // Промежуточные фразы
  const intermediatePhrases = [
    'Маятник набирает силу…',
    'Тише…',
    'Вслушайся…',
    'Ответ близко…'
  ];

  let pIdx = 0;
  phraseEl.classList.remove('flip');
  phraseEl.textContent = intermediatePhrases[0];

  spiralInterval = setInterval(() =&gt; {
    pIdx++;
    if (pIdx &lt; intermediatePhrases.length) {
      phraseEl.classList.remove('flip');
      void phraseEl.offsetWidth;
      phraseEl.textContent = intermediatePhrases[pIdx];
      phraseEl.classList.add('flip');
    }
  }, 900);

  // Замедление
  setTimeout(() =&gt; {
    str.classList.remove('swinging-fast');
    str.classList.add('swinging-slow');
  }, 2500);

  // Финальная остановка + фраза
  setTimeout(() =&gt; {
    str.classList.remove('swinging-slow');
    str.classList.add('almost-still');

    setTimeout(() =&gt; {
      str.classList.remove('almost-still');
      str.classList.add('stopped');

      clearInterval(spiralInterval);

      const phrase = SPIRAL_PHRASES[Math.floor(Math.random() * SPIRAL_PHRASES.length)];

      phraseEl.classList.remove('flip');
      void phraseEl.offsetWidth;
      phraseEl.textContent = phrase;
      phraseEl.classList.add('flip');

      // Искры
      const rect = document.getElementById('spiralCore').getBoundingClientRect();
      noxSparkles(rect.left + rect.width/2, rect.top + rect.height/2, 50);

      log.innerHTML = `
        &lt;div class="ans-big" style="font-size:18px;font-family:var(--font-body);font-style:italic;line-height:1.5"&gt;«${phrase}»&lt;/div&gt;
        &lt;div class="desc" style="text-align:center;margin-top:10px"&gt;Послание дня. Возвращайся за новым завтра.&lt;/div&gt;
      `;

      spiralBusy = false;
      btn.disabled = false;
    }, 1500);
  }, 5500);
});

/* ═══════════════════════════════════════════
   ИСКРЫ
   ═══════════════════════════════════════════ */
function noxSparkles(cx, cy, count) {
  count = count || 20;
  const colors = ['#b55cff','#ff2bd6','#d4af37','#f0d060','#00f0ff','#39ff14'];
  for (let i = 0; i &lt; count; i++) {
    const s = document.createElement('div');
    s.style.cssText = `
      position:fixed;left:${cx}px;top:${cy}px;width:6px;height:6px;
      border-radius:50%;background:${colors[i % colors.length]};
      box-shadow:0 0 12px ${colors[i % colors.length]};
      pointer-events:none;z-index:9999;
      transition:transform 1.2s cubic-bezier(.1,.8,.3,1),opacity 1.2s ease;
    `;
    document.body.appendChild(s);
    requestAnimationFrame(() =&gt; {
      const a = Math.random() * Math.PI * 2;
      const d = 80 + Math.random() * 160;
      s.style.transform = `translate(${Math.cos(a)*d}px,${Math.sin(a)*d}px) scale(.3)`;
      s.style.opacity = '0';
    });
    setTimeout(() =&gt; s.remove(), 1300);
  }
}

/* ═══════════════════════════════════════════
   ИНИЦИАЛИЗАЦИЯ
   ═══════════════════════════════════════════ */
window.addEventListener('DOMContentLoaded', () =&gt; {
  noxNewHappiness();
  setInterval(noxNewHappiness, 12000);
  initRamkaLetters();
  console.log('? NOX · Маятник Судьбы — загружено');
});
document.addEventListener('keydown', e =&gt; {
  if (e.key === 'Escape') noxMenuClose();
});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</subtitle>
  <updated>2026-10-10T07:36:45Z</updated>
  <logo>https://pandoraburo.ru/ssl/u/pic/07/26436cc3c611f19d9efcd8c4a10874/-/0c723f71762611f1b3964aaba1665535.jpg</logo>
  <author>
    <name>1592962</name>
    <uri>https://www.pandoraburo.ru/</uri>
  </author>
</feed>
