      color:#B9C2FF;
      font-size:12px;
    }

    #aiOrbDock{
      --stroke:rgba(255,255,255,.10);--stroke-strong:rgba(255,255,255,.16);
      --muted:#9AA5B5;--accent2:#48E7C8;--shadow:0 28px 80px rgba(0,0,0,.44);
      --orb-size:64px;--ease:cubic-bezier(.2,.8,.2,1);
    }

    /* Isolation from the landing's generic button rules. */
    #aiOrbDock .orb-button{
      width:80px !important;
      height:80px !important;
      min-width:80px !important;
      min-height:80px !important;
      display:block !important;
      flex:0 0 80px !important;
    }
    #aiOrbDock:not(.card-open) .orb-row{
      opacity:1 !important;
      transform:translateY(0) scale(1) !important;
      pointer-events:auto !important;
    }

    /* ВАЖНО:
       Такой trigger НЕ display:none.
       Он занимает 1px в потоке и поэтому IntersectionObserver может его увидеть.
    */
    .ai-orb-trigger{
      width:1px;
      height:1px;
      opacity:0;
      pointer-events:none;
      position:relative;
    }

    /* ---------- AI ORB ---------- */
    .orb-dock{
      position:fixed;
      z-index:9999;
      right:max(20px, env(safe-area-inset-right));
      bottom:max(130px, env(safe-area-inset-bottom));
      width:min(390px,calc(100vw - 24px));
      display:flex;
      flex-direction:column;
      align-items:flex-end;
      gap:10px;
      pointer-events:none;
    }

    .orb-dock > *{pointer-events:auto}

    .orb-prompt{
      width:max-content;
      max-width:min(320px,calc(100vw - 96px));
      align-self:flex-end;
      margin-bottom:2px;
      padding:11px 14px;
      border:1px solid rgba(255,255,255,.105);
      border-radius:19px 19px 6px 19px;
      color:#EEF1F8;
      background:rgba(14,18,29,.82);
      box-shadow:
        0 18px 52px rgba(0,0,0,.30),
        inset 0 1px 0 rgba(255,255,255,.045);
      backdrop-filter:blur(22px) saturate(145%);
      font-size:13px;
      line-height:1.35;
      transform:translateY(14px) scale(.94);
      filter:blur(9px);
      opacity:0;
      visibility:hidden;
      transition:
        opacity .24s ease,
        transform .58s cubic-bezier(.16,1,.3,1),
        filter .46s cubic-bezier(.16,1,.3,1),
        visibility .24s;
      transform-origin:92% 100%;
    }

    .orb-prompt.is-visible{
      opacity:1;
      visibility:visible;
      transform:translateY(0) scale(1);
      filter:blur(0);
    }

    .orb-button.is-curious ~ .orb-prompt,
    .orb-button.is-curious + .orb-prompt{
      box-shadow:
        0 20px 58px rgba(0,0,0,.32),
        0 0 24px rgba(72,231,200,.08),
        inset 0 1px 0 rgba(255,255,255,.05);
    }


    .orb-prompt .orb-word{
      display:inline-block;
      white-space:pre;
      opacity:0;
      transform:translateY(8px) scale(.97);
      filter:blur(5px);
    }

    .orb-prompt.is-visible .orb-word{
      animation:orbWordIn .52s cubic-bezier(.16,1,.3,1) both;
      animation-delay:calc(var(--word-i) * 28ms + 70ms);
    }

    @keyframes orbWordIn{
      to{
        opacity:1;
        transform:translateY(0) scale(1);
        filter:blur(0);
      }
    }

    .orb-card{
      width:100%;
      border:1px solid var(--stroke-strong);
      border-radius:28px;
      background:
        radial-gradient(420px 180px at 90% 0%, rgba(124,140,255,.15), transparent 62%),
        rgba(10,14,23,.91);
      box-shadow:var(--shadow);
      backdrop-filter:blur(24px) saturate(135%);
      overflow:hidden;
      opacity:0;
      visibility:hidden;
      transform:translateY(16px) scale(.965);
      transform-origin:100% 100%;
      max-height:0;
      transition:
        opacity .28s var(--ease),
        transform .38s var(--ease),
        max-height .42s var(--ease),
        visibility .28s;
    }

    .orb-card.is-open{
      opacity:1;
      visibility:visible;
      transform:translateY(0) scale(1);
      max-height:560px;
    }

    .orb-card-inner{padding:20px}
    .orb-head{
      display:flex;
      gap:12px;
      align-items:flex-start;
    }

    .mini-orb{
      flex:0 0 auto;
      width:38px;height:38px;border-radius:50%;
      position:relative;
      background:
        radial-gradient(circle at 38% 30%, #D9E0FF 0 4%, #8C97FF 10%, #5969FF 30%, #23306F 65%, #11162D 100%);
      box-shadow:
        0 0 0 1px rgba(255,255,255,.12),
        0 0 28px rgba(98,114,255,.35);
    }
    .mini-orb::after{
      content:"";
      position:absolute;inset:8px;border-radius:50%;
      border:1px solid rgba(255,255,255,.22);
      animation:miniPulse 2.4s ease-in-out infinite;
    }
    @keyframes miniPulse{50%{transform:scale(1.25);opacity:.25}}

    .orb-title{
      margin:0;
      font-size:18px;
      line-height:1.15;
      letter-spacing:-.02em;
    }
    .orb-subtitle{
      margin-top:5px;
      color:var(--muted);
      font-size:12px;
      line-height:1.4;
    }

    .close-btn{
      margin-left:auto;
      border:0;
      width:32px;height:32px;
      border-radius:50%;
      color:#ABB4C2;
      background:rgba(255,255,255,.055);
      cursor:pointer;
      transition:.2s ease;
    }
    .close-btn:hover{background:rgba(255,255,255,.10);color:white}

    .phone-row{
      display:flex;
      gap:8px;
      margin-top:16px;
    }

    .phone-input{
      min-width:0;
      width:100%;
      flex:1 1 auto;
      height:50px;
      border-radius:16px;
      border:1px solid rgba(255,255,255,.10);
      background:rgba(255,255,255,.055);
      color:white;
      padding:0 15px;
      outline:none;
      font-size:16px; /* iOS: не зумит страницу при фокусе */
      transition:.2s ease;
    }
    .phone-input::placeholder{color:#697486}
    .phone-input:focus{
      border-color:rgba(124,140,255,.7);
      box-shadow:0 0 0 4px rgba(124,140,255,.10);
      background:rgba(255,255,255,.07);
    }

    .send-btn{
      height:50px;
      min-width:56px;
      padding:0 17px;
      border:0;
      border-radius:16px;
      color:#070A10;
      background:linear-gradient(135deg,#E4E7FF 0%,#AAB4FF 48%,#71E7D5 100%);
      font-weight:750;
      cursor:pointer;
      box-shadow:
        0 10px 26px rgba(100,120,255,.16),
        inset 0 1px 0 rgba(255,255,255,.28);
      transition:
        transform .24s var(--ease),
        filter .22s ease,
        box-shadow .24s ease;
    }
    .send-btn:hover{
      transform:translateY(-1px);
      filter:brightness(1.05);
      box-shadow:
        0 14px 32px rgba(100,120,255,.22),
        inset 0 1px 0 rgba(255,255,255,.35);
    }
    .send-btn:active{transform:translateY(1px) scale(.985)}
    .send-btn-icon{
      display:grid;
      place-items:center;
      width:56px;
      padding:0;
      color:#060A16;
    }
    .send-icon{
      width:22px;
      height:22px;
      display:block;
      transform:translateX(0) rotate(0deg);
      transition:transform .28s cubic-bezier(.16,1,.3,1);
    }
    .send-btn:hover .send-icon{
      transform:translateX(1px) rotate(-6deg);
    }

    .consent{
      margin-top:12px;
      display:flex;
      align-items:flex-start;
      gap:9px;
      color:#7F8998;
      font-size:10px;
      line-height:1.35;
    }

    .consent input{
      margin:1px 0 0;
      width:14px;height:14px;
      accent-color:#7C8CFF;
      flex:0 0 auto;
    }

    .consent a{color:#AAB4C5;text-decoration:none}
    .consent a:hover{text-decoration:underline}

    .messengers{
      display:grid;
      grid-template-columns:1fr 1fr;
      gap:8px;
      margin-top:14px;
    }

    .msg-btn{
      min-height:42px;
      display:flex;
      align-items:center;
      justify-content:center;
      gap:8px;
      text-decoration:none;
      border:1px solid rgba(255,255,255,.08);
      border-radius:14px;
      color:#DCE2EC;
      background:rgba(255,255,255,.045);
      font-size:12px;
      font-weight:650;
      transition:.2s ease;
    }
    .msg-btn:hover{
      background:rgba(255,255,255,.075);
      border-color:rgba(255,255,255,.13);
      transform:translateY(-1px);
    }

    .orb-meta{
      margin-top:12px;
      padding-top:11px;
      border-top:1px solid rgba(255,255,255,.06);
      display:flex;
      align-items:center;
      justify-content:space-between;
      color:#647082;
      font-size:10px;
    }

    body.quality-lite .orb-button{
      filter:drop-shadow(0 9px 18px rgba(45,58,140,.26));
    }

    body.quality-lite .orb-specular{
      opacity:.72;
    }

    body.quality-lite .orb-light{
      box-shadow:0 0 8px rgba(255,255,255,.24);
    }



    .live{
      display:flex;align-items:center;gap:6px;
    }
    .live::before{
      content:"";
      width:5px;height:5px;border-radius:50%;
      background:var(--accent2);
      box-shadow:0 0 14px rgba(72,231,200,.7);
    }

    .orb-row{
      display:flex;
      align-items:center;
      justify-content:flex-end;
      gap:9px;
      transition:
        opacity .26s cubic-bezier(.16,1,.3,1),
        transform .42s cubic-bezier(.16,1,.3,1);
      transform-origin:100% 100%;
    }

    /* Когда карточка открыта, второй большой шар не торчит из-под неё.
       Внутри формы остаётся mini-orb. */
    .orb-dock.card-open .orb-row{
      opacity:0;
      transform:translateY(14px) scale(.82);
      pointer-events:none;
    }

    .orb-button{
      width:var(--orb-size);
      height:var(--orb-size);
      border:0;
      padding:0;
      border-radius:50%;
      cursor:pointer;
      position:relative;
      isolation:isolate;
      outline:none;
      background:transparent;
      filter:
        drop-shadow(0 14px 26px rgba(45,58,140,.34))
        drop-shadow(0 0 22px rgba(74,93,255,.18))
        drop-shadow(0 0 42px rgba(72,231,200,.08));
      transition:filter .28s ease, transform .34s cubic-bezier(.16,1,.3,1);
      will-change:transform;
      -webkit-tap-highlight-color:transparent;
    }

    .orb-button:hover{
      transform:translateY(-2px) scale(1.025);
      filter:
        drop-shadow(0 17px 36px rgba(76,91,220,.47))
        drop-shadow(0 0 30px rgba(90,104,255,.24))
        drop-shadow(0 0 52px rgba(72,231,200,.12));
    }

    .orb-button:active{
      transform:translateY(0) scale(.975);
    }

    .orb-button:focus-visible{
      box-shadow:0 0 0 4px rgba(124,140,255,.22);
    }

    /*
      ORB V3
      Родительская сфера отвечает за МАССУ/НАКЛОН.
      Внутри:
      1) shell-map     — оболочка
      2) fluid         — жидкая поверхность
      3) core          — тяжёлое внутреннее ядро

      Они НЕ используют одну и ту же transform-анимацию.
    */
    .orb-sphere{
      position:absolute;
      inset:0;
      border-radius:50%;
      overflow:hidden;
      transform-style:preserve-3d;
      will-change:transform;
      background:
        radial-gradient(circle at 36% 29%,
          rgba(244,247,255,.94) 0 2.5%,
          rgba(187,198,255,.84) 6%,
          rgba(112,128,255,.94) 18%,
          rgba(65,81,213,.96) 40%,
          rgba(27,38,103,.98) 67%,
          rgba(11,16,40,1) 100%);
      box-shadow:
        0 0 0 1px rgba(255,255,255,.15),
        0 0 48px rgba(102,116,255,.22),
        inset -13px -16px 22px rgba(0,0,0,.43),
        inset 8px 7px 18px rgba(255,255,255,.10);
    }

    /* WebGL canvas replaces CSS shell/fluid textures. */
    
    .orb-sphere-webgl{
      background:#11183B;
    }

    .orb-sphere-webgl::before{
      content:"";
      position:absolute;
      inset:-10px;
      border-radius:50%;
      pointer-events:none;
      z-index:0;
      background:
        radial-gradient(circle at 50% 50%, rgba(72,231,200,.06) 0 36%, transparent 60%),
        radial-gradient(circle at 44% 40%, rgba(112,126,255,.16) 0 42%, transparent 72%);
      filter:blur(10px);
      opacity:.95;
    }

    .orb-webgl{
      position:absolute;
      inset:0;
      width:100%;
      height:100%;
      display:block;
      border-radius:50%;
      pointer-events:none;
      z-index:1;
    }

    .orb-core{
      position:absolute;
      z-index:4;
      width:29%;
      aspect-ratio:1;
      left:35.5%;
      top:35.5%;
      border-radius:58% 42% 46% 54% / 44% 58% 42% 56%;
      will-change:transform, filter;
      background:
        radial-gradient(circle at 42% 36%,
          rgba(255,255,255,.93) 0 4%,
          rgba(234,238,255,.95) 7%,
          rgba(175,191,255,.90) 24%,
          rgba(118,146,248,.72) 50%,
          rgba(77,244,226,.26) 73%,
          rgba(87,104,209,.28) 100%);
      box-shadow:
        0 0 18px rgba(220,224,255,.60),
        0 0 42px rgba(92,111,255,.36),
        0 0 24px rgba(72,231,200,.16),
        inset -5px -6px 12px rgba(31,41,120,.34),
        inset 2px 2px 9px rgba(255,255,255,.34);
      animation:coreBlobMorph 7.2s ease-in-out infinite;
      filter:saturate(1.15) brightness(1.02);
      overflow:hidden;
    }

    .orb-core::before{
      content:"";
      position:absolute;
      inset:19%;
      border-radius:56% 44% 48% 52% / 48% 56% 44% 52%;
      background:
        radial-gradient(circle at 36% 34%, rgba(255,255,255,.72) 0 5%, rgba(214,220,255,.75) 10%, rgba(117,142,244,.52) 50%, rgba(76,240,223,.14) 100%);
      box-shadow:
        0 0 12px rgba(220,226,255,.42),
        inset -2px -2px 5px rgba(57,73,170,.18),
        inset 1px 1px 5px rgba(255,255,255,.28);
      animation:coreNucleusPulse 3.4s ease-in-out infinite;
      opacity:.92;
      filter:blur(.2px);
    }

    .orb-core::after{
      content:"";
      position:absolute;
      inset:0;
      border-radius:inherit;
      background:
        radial-gradient(circle at 29% 22%, rgba(255,255,255,.65), transparent 18%),
        radial-gradient(circle at 62% 57%, rgba(124,242,231,.20), transparent 12%),
        radial-gradient(circle at 48% 70%, rgba(255,255,255,.10), transparent 10%),
        radial-gradient(circle at 70% 34%, rgba(176,188,255,.16), transparent 9%);
      filter:blur(.8px);
      opacity:.95;
      mix-blend-mode:screen;
    }

    @keyframes coreBlobMorph{
      0%,100%{
        border-radius:58% 42% 46% 54% / 44% 58% 42% 56%;
      }
      33%{
        border-radius:46% 54% 58% 42% / 55% 40% 60% 45%;
      }
      66%{
        border-radius:52% 48% 42% 58% / 44% 60% 40% 56%;
      }
    }

    @keyframes coreNucleusPulse{
      0%,100%{transform:scale(1) rotate(0deg)}
      50%{transform:scale(.88) rotate(10deg)}
    }

    .orb-button.is-curious .orb-core{
      filter:saturate(1.22) brightness(1.08);
      box-shadow:
        0 0 20px rgba(220,224,255,.64),
        0 0 48px rgba(92,111,255,.42),
        0 0 28px rgba(72,231,200,.20),
        inset -5px -6px 12px rgba(31,41,120,.34),
        inset 2px 2px 9px rgba(255,255,255,.34);
    }

    .orb-button.is-curious .orb-specular{
      opacity:1;
      filter:brightness(1.08);
    }

    .orb-button.is-curious .orb-light{
      transform:translate3d(1px,-1px,0) rotate(-28deg);
      box-shadow:
        0 0 12px rgba(255,255,255,.38),
        0 0 24px rgba(178,190,255,.24),
        0 0 34px rgba(72,231,200,.12);
    }

    /*
      Стабильный источник света.
      Эти элементы находятся СНАРУЖИ orb-sphere и не вращаются
      вместе с shell/fluid/core.
    */
    .orb-light{
      pointer-events:none;
      position:absolute;
      z-index:8;
      width:17px;
      height:9px;
      border-radius:50%;
      top:11px;
      left:13px;
      background:rgba(255,255,255,.63);
      filter:blur(1.15px);
      transform:rotate(-28deg);
      box-shadow:
        0 0 10px rgba(255,255,255,.34),
        0 0 20px rgba(178,190,255,.18);
    }

    .orb-specular{
      pointer-events:none;
      position:absolute;
      z-index:7;
      inset:4px;
      border-radius:50%;
      background:
        radial-gradient(circle at 29% 23%, rgba(255,255,255,.18), transparent 24%),
        linear-gradient(135deg, rgba(255,255,255,.08), transparent 34%);
      box-shadow:
        inset 2px 2px 0 rgba(255,255,255,.08),
        inset -2px -2px 0 rgba(0,0,0,.08);
    }

    .orb-ring{
      position:absolute;
      inset:-7px;
      border-radius:50%;
      border:1px solid rgba(130,145,255,.20);
      z-index:-1;
      opacity:.22;
      transform:scale(1);
    }

    .orb-ring.r2{
      inset:-13px;
      opacity:.10;
    }

    /*
      AI impulse: расходящаяся волна.
      Это НЕ постоянная пульсация. Волна появляется только,
      когда новая сцена передала ORB контекст.
    */
    .orb-button.is-kicked .orb-ring{
      animation:orbImpulseRing .82s cubic-bezier(.16,1,.3,1) both;
    }

    .orb-button.is-kicked .orb-ring.r2{
      animation-delay:.07s;
    }

    .orb-button.is-kicked{
      filter:
        drop-shadow(0 15px 36px rgba(76,91,220,.50))
        drop-shadow(0 0 25px rgba(72,231,200,.14));
    }

    .orb-button.is-kicked .orb-fluid{
      animation:orbFluidFlash .55s cubic-bezier(.16,1,.3,1);
    }

    @keyframes orbImpulseRing{
      0%{transform:scale(.84);opacity:.08}
      28%{opacity:.72}
      100%{transform:scale(1.66);opacity:0}
    }

    @keyframes orbFluidFlash{
      0%{filter:blur(.45px) brightness(1)}
      30%{filter:blur(.15px) brightness(1.36)}
      100%{filter:blur(.45px) brightness(1)}
    }

    .orb-status-orbit{
      position:absolute;
      z-index:13;
      inset:-8px;
      border-radius:50%;
      pointer-events:none;
      opacity:.72;
      animation:orbStatusOrbit 16s linear infinite;
      transition:opacity .28s ease, filter .28s ease;
    }

    .orb-status-orbit::before{
      content:"";
      position:absolute;
      inset:0;
      border-radius:50%;
      border:1px solid transparent;
      border-top-color:rgba(117,246,227,.19);
      border-right-color:rgba(124,140,255,.10);
      filter:drop-shadow(0 0 5px rgba(85,239,207,.07));
    }

    .orb-status-node{
      position:absolute;
      width:9px;
      height:9px;
      left:50%;
      top:-1px;
      margin-left:-4.5px;
      border-radius:50%;
      background:
        radial-gradient(circle at 35% 28%,
          #F5FFFC 0 8%,
          #A7FFEF 18%,
          #55EFCF 52%,
          #168A77 100%);
      box-shadow:
        0 0 0 3px rgba(9,16,30,.82),
        0 0 9px rgba(85,239,207,.68),
        0 0 20px rgba(85,239,207,.20);
    }

    .orb-status-node::after{
      content:"";
      position:absolute;
      width:17px;
      height:3px;
      right:4px;
      top:3px;
      border-radius:999px;
      background:linear-gradient(90deg, transparent, rgba(85,239,207,.32));
      filter:blur(.5px);
      transform:rotate(-8deg);
      transform-origin:100% 50%;
      opacity:.65;
    }

    .orb-button.has-update .orb-status-orbit{
      opacity:1;
      filter:brightness(1.14);
      animation-duration:4.4s;
    }

    .orb-button:hover .orb-status-orbit{
      opacity:1;
      filter:brightness(1.18);
    }

    @keyframes orbStatusOrbit{
      to{transform:rotate(360deg)}
    }


    .orb-sphere-webgl.webgl-fallback{
      background:
        radial-gradient(circle at 36% 29%,
          rgba(244,247,255,.94) 0 3%,
          rgba(142,154,255,.94) 16%,
          rgba(65,81,213,.96) 42%,
          rgba(18,27,76,1) 72%,
          rgba(8,12,31,1) 100%);
    }

    .orb-toast{
      position:fixed;
      left:50%;
      bottom:28px;
      transform:translate(-50%,14px);
      z-index:10020;
      padding:12px 15px;
      border-radius:999px;
      background:rgba(12,16,26,.92);
      border:1px solid rgba(255,255,255,.10);
      color:#E9EDF4;
      font-size:12px;
      box-shadow:0 18px 50px rgba(0,0,0,.35);
      opacity:0;
      visibility:hidden;
      transition:.28s var(--ease);
      backdrop-filter:blur(16px);
    }
    .orb-toast.show{
      opacity:1;
      visibility:visible;
      transform:translate(-50%,0);
    }

    @media (max-width:680px){
      :root{--orb-size:52px}

      .page{width:min(100% - 22px,1180px)}
      .hero{min-height:82vh}
      .scene{min-height:78vh;padding:42px 0}
      .scene-card{min-height:360px;border-radius:26px;padding:26px 22px}
      .scene p{font-size:16px}

      .orb-dock{
        width:calc(100vw - 20px);
        right:10px;
        /* The mobile chat dock is fixed; keep ORB above it with a clear touch gap. */
        bottom:max(112px,calc(env(safe-area-inset-bottom) + 100px));
      }
      .orb-dock:not(.card-open){width:auto;gap:6px}

      .orb-card{
        width:100%;
        max-height:calc(100svh - 20px);
        overflow:auto;
        border-radius:24px;
        transform-origin:100% 100%;
      }

      .orb-card-inner{padding:18px}

      .phone-row{
        width:100%;
        display:flex;
        flex-direction:row;
        align-items:center;
        gap:8px;
      }

      .phone-input{
        display:block;
        width:auto;
        min-width:0;
        max-width:none;
        flex:1 1 auto;
        height:56px;
        padding:0 16px;
        border-radius:16px;
        font-size:16px;
      }

      .send-btn{
        height:56px;
        flex:none;
      }

      .send-btn.send-btn-icon{
        width:56px;
        min-width:56px;
        align-self:stretch;
      }

      .orb-prompt{
        align-self:flex-end;
        margin-right:2px;
        margin-bottom:4px;
        max-width:min(208px,calc(100vw - 100px));
        padding:8px 10px;
        font-size:11px;
        line-height:1.25;
      }

      .consent{
        font-size:11px;
        line-height:1.4;
      }
      #aiOrbDock .orb-button{
        width:56px !important;
        height:56px !important;
        min-width:56px !important;
        min-height:56px !important;
        flex-basis:56px !important;
      }

      .orb-toast{left:auto;right:78px;bottom:max(158px,calc(env(safe-area-inset-bottom) + 142px));max-width:208px;padding:8px 10px;border-radius:13px;font-size:11px;line-height:1.25;transform:translateY(10px)}
      .orb-toast.show{transform:translateY(0)}
    }

    @media (prefers-reduced-motion:reduce){
      *,*::before,*::after{
        animation-duration:.01ms !important;
        animation-iteration-count:1 !important;
        scroll-behavior:auto !important;
