/* Nexora shared scroll-animation layer — used on every page */
.nx-reveal{opacity:0;transform:translateY(28px);transition:opacity .7s cubic-bezier(.22,.61,.36,1),transform .7s cubic-bezier(.22,.61,.36,1);will-change:opacity,transform}
.nx-reveal.nx-visible{opacity:1;transform:translateY(0)}
.nx-reveal-card{opacity:0;transform:translateY(22px) scale(.98);transition:opacity .6s cubic-bezier(.22,.61,.36,1),transform .6s cubic-bezier(.22,.61,.36,1);will-change:opacity,transform}
.nx-reveal-card.nx-visible{opacity:1;transform:translateY(0) scale(1)}
.nx-reveal-card:nth-child(2){transition-delay:.06s}
.nx-reveal-card:nth-child(3){transition-delay:.12s}
.nx-reveal-card:nth-child(4){transition-delay:.18s}
.nx-reveal-card:nth-child(5){transition-delay:.24s}
@media(prefers-reduced-motion:reduce){.nx-reveal,.nx-reveal-card{opacity:1!important;transform:none!important;transition:none!important}}

.hero{position:relative;overflow:visible}
.hero::before{content:"";position:absolute;width:280px;height:280px;top:-50px;right:-30px;border-radius:50%;filter:blur(60px);opacity:.4;z-index:-1;pointer-events:none;background:radial-gradient(circle,var(--accent,var(--demo-accent,#43e0a5)),transparent 70%);animation:nxHeroFloat 6s ease-in-out infinite}
@keyframes nxHeroFloat{0%,100%{transform:translateY(0) translateX(0)}50%{transform:translateY(-22px) translateX(-10px)}}
body{overflow-x:hidden}
@media(prefers-reduced-motion:reduce){.hero::before{animation:none!important}}

/* Was animating box-shadow directly, which forces the browser to repaint
   the button every frame, forever — a continuous main-thread cost that
   competes with real taps/clicks and hurts INP. Redone as a ::after ring
   that only animates transform+opacity (compositor-only, no repaint). */
@keyframes nxCtaGlow{0%{opacity:.5;transform:scale(.92)}70%,100%{opacity:0;transform:scale(1.18)}}
.hero .btn,.hero .btn2{position:relative}
.hero .btn::after,.hero .btn2::after{content:"";position:absolute;inset:-4px;border-radius:inherit;border:2px solid color-mix(in srgb,var(--accent,var(--demo-accent,#43e0a5)) 55%,transparent);opacity:0;pointer-events:none;animation:nxCtaGlow 1.8s ease-in-out infinite}
@media(prefers-reduced-motion:reduce){.hero .btn::after,.hero .btn2::after{animation:none!important;display:none}}

/* Non-blocking toast — replaces alert() popups that were freezing the page on tap/click */
.nx-toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,20px);opacity:0;background:#101a20;color:#f4f7f5;border:1px solid #2c393f;border-radius:12px;padding:12px 18px;font-size:14px;font-weight:700;box-shadow:0 14px 40px #0008;z-index:999;pointer-events:none;transition:opacity .25s ease,transform .25s ease;max-width:86vw;text-align:center}
.nx-toast.nx-toast-show{opacity:1;transform:translate(-50%,0)}
@media(prefers-reduced-motion:reduce){.nx-toast{transition:none!important}}

/* WhatsApp contact button — was homepage-only; demo pages had no working
   contact method at all (their "Start a Project"/"Contact Nexora" buttons
   only fired a fake toast). Shared here so every demo page gets a real,
   working way to reach Nexora too. */
.whatsapp-float{position:fixed;right:20px;bottom:20px;z-index:40;display:flex;align-items:center;gap:9px;padding:13px 17px;border-radius:999px;background:#25D366;color:#062b16;font-weight:950;box-shadow:0 14px 35px #0008;border:2px solid #d9ffe8}
.whatsapp-float:hover{transform:translateY(-2px)}
.whatsapp-float span{font-size:20px}
@media(max-width:800px){.whatsapp-float{right:14px;bottom:14px;padding:12px 14px}.whatsapp-float b{display:none}}

/* Shared "Send Project Brief" modal for demo pages — mirrors the homepage's
   quote form, opened via nxOpenQuote('<Service Name>') from any page's
   button. Includes a WhatsApp fallback next to the email option, since a
   mailto submit can silently do nothing on a device with no mail app
   configured (common on phones) and the visitor would otherwise have no
   second way to actually reach out. */
.nx-modal{display:none;position:fixed;inset:0;background:#0009;z-index:60;align-items:center;justify-content:center;padding:20px}
.nx-modal.nx-modal-open{display:flex}
.nx-modalbox{max-width:520px;width:100%;background:#0a1726;border:1px solid #2a4e69;border-radius:20px;padding:24px;box-shadow:0 30px 90px #000b;color:#eef6ff;font-family:system-ui,-apple-system,Segoe UI,sans-serif}
.nx-modalbox h3{margin:0 0 4px;font-size:26px}
.nx-modal-note{color:#8296aa;font-size:13px;margin:0 0 14px}
.nx-modalbox label{display:block;color:#b8c8d7;font-size:13px;font-weight:800;margin:12px 0 6px}
.nx-modalbox input,.nx-modalbox textarea{width:100%;background:#071321;color:#fff;border:1px solid #29465f;border-radius:10px;padding:12px;font:inherit;box-sizing:border-box}
.nx-modalbox input[readonly]{opacity:.75}
.nx-modalbox textarea{min-height:90px;resize:vertical}
.nx-modal-close{float:right;background:none;border:0;color:#b8c8d7;font-size:24px;cursor:pointer;line-height:1}
.nx-modal-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.nx-modal-actions .btn{cursor:pointer;border:0;font:inherit}
.nx-modal-actions .nx-wa-btn{background:#25D366!important;color:#062b16!important;display:inline-flex;align-items:center;justify-content:center;font-weight:900;border-radius:12px;padding:13px 19px}
