/* ═════════════════════════════════════════════════════════════════
   J·A·T WEBSITE STANDARD v1 — Shared CSS bundle
   Each site sets these CSS custom properties on :root, then includes
   this file via <link>. All effects below read from the variables.

   :root {
     --jat-bg:          <body bg color>;
     --jat-bg-2:        <slightly darker bg for sections>;
     --jat-bg-card:     <card bg color>;
     --jat-text:        <main text>;
     --jat-text-mid:    rgba(...);
     --jat-text-faint:  rgba(...);
     --jat-border:      rgba(...);
     --jat-accent:      <brand accent — gold/ocean/etc>;
     --jat-accent-2:    <brand accent highlight>;
     --jat-accent-deep: <brand accent darker>;
     --jat-accent-glow: rgba(... 0.35);
     --jat-blend:       multiply | screen   (multiply for light, screen for dark);
   }
   ═════════════════════════════════════════════════════════════════ */

/* ─── Selection + scrollbar ─── */
::selection { background: var(--jat-accent); color: var(--jat-bg-card); text-shadow: none; }
::-moz-selection { background: var(--jat-accent); color: var(--jat-bg-card); }
html { scrollbar-color: var(--jat-accent) var(--jat-bg-2); scrollbar-width: thin; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: var(--jat-bg-2); }
::-webkit-scrollbar-thumb {
  background: linear-gradient(180deg, var(--jat-accent-2), var(--jat-accent));
  border-radius: 999px;
  border: 2px solid var(--jat-bg-2);
}
::-webkit-scrollbar-thumb:hover { background: var(--jat-accent-2); }

/* ─── Content-visibility (perf) — opt out of skipping the first hero via .hero { content-visibility: visible } ─── */
section { content-visibility: auto; contain-intrinsic-size: 1px 800px; }
.hero, section.hero { content-visibility: visible; }

/* ─── Cross-document View Transitions ─── */
@view-transition { navigation: auto; }
::view-transition-old(root), ::view-transition-new(root) {
  animation-duration: 0.55s;
  animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
}

/* ─── Living background canvases / orbs ─── */
#jat-mesh, #jat-dust {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
}
#jat-mesh { opacity: 0.55; mix-blend-mode: var(--jat-blend, multiply); }
.jat-orbs {
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  overflow: hidden;
}
.jat-orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(80px);
  mix-blend-mode: var(--jat-blend, multiply);
  opacity: 0.5;
  will-change: transform;
}
.jat-orb.a { width: 540px; height: 540px; top: -10%; left: -10%;
  background: radial-gradient(circle, var(--jat-accent-2) 0%, transparent 65%);
  animation: jatOrbA 38s ease-in-out infinite alternate; }
.jat-orb.b { width: 420px; height: 420px; top: 30%; right: -8%;
  background: radial-gradient(circle, var(--jat-accent) 0%, transparent 70%);
  animation: jatOrbB 46s ease-in-out infinite alternate; }
.jat-orb.c { width: 480px; height: 480px; bottom: -12%; left: 25%;
  background: radial-gradient(circle, var(--jat-accent-deep) 0%, transparent 68%);
  animation: jatOrbC 52s ease-in-out infinite alternate; }
@keyframes jatOrbA { from { transform: translate(0,0) scale(1); } to { transform: translate(6vw,18vh) scale(0.96); } }
@keyframes jatOrbB { from { transform: translate(0,0) scale(1); } to { transform: translate(-8vw,-6vh) scale(0.92); } }
@keyframes jatOrbC { from { transform: translate(0,0) scale(1); } to { transform: translate(-14vw,-6vh) scale(0.97); } }

/* ─── Scroll progress bar ─── */
.jat-scroll-progress {
  position: fixed;
  top: 0; left: 0;
  height: 2px; width: 0;
  z-index: 200;
  background: linear-gradient(90deg, transparent, var(--jat-accent) 30%, var(--jat-accent-2) 60%, var(--jat-accent));
  box-shadow: 0 0 12px var(--jat-accent-glow);
  pointer-events: none;
}
@supports (animation-timeline: scroll()) {
  .jat-scroll-progress { width: 100%; transform-origin: 0 50%; transform: scaleX(0); animation: jatScrollFill linear forwards; animation-timeline: scroll(root); }
  @keyframes jatScrollFill { to { transform: scaleX(1); } }
}

/* ─── Cursor follower + trail ─── */
.jat-cursor {
  position: fixed; top: 0; left: 0;
  width: 28px; height: 28px;
  border-radius: 50%;
  border: 1px solid var(--jat-accent);
  background: var(--jat-accent-glow);
  pointer-events: none;
  z-index: 9998;
  transform: translate(-50%,-50%);
  transition: width 0.25s, height 0.25s, background 0.25s, border-color 0.25s;
  will-change: left, top, transform;
  display: none;
}
@media (hover: hover) and (pointer: fine) { .jat-cursor { display: block; } }
.jat-cursor.hover { width: 56px; height: 56px; background: var(--jat-accent-glow); border-color: var(--jat-accent-2); }
.jat-cursor.click { width: 16px; height: 16px; background: var(--jat-accent); }
.jat-trail-dot {
  position: fixed; pointer-events: none;
  border-radius: 50%;
  background: radial-gradient(circle, var(--jat-accent) 0%, transparent 70%);
  z-index: 9997;
  transform: translate(-50%,-50%);
  mix-blend-mode: var(--jat-blend, multiply);
  will-change: left, top;
}

/* ─── Click ripple + ping ─── */
.jat-click-ripple {
  position: fixed; pointer-events: none; border-radius: 50%;
  background: radial-gradient(circle, var(--jat-accent-glow) 0%, transparent 70%);
  transform: translate(-50%,-50%) scale(0);
  z-index: 9999; width: 260px; height: 260px;
  animation: jatClickRipple 0.95s ease-out forwards;
  mix-blend-mode: var(--jat-blend, multiply);
}
@keyframes jatClickRipple { 0%{transform:translate(-50%,-50%) scale(0);opacity:1} 60%{opacity:0.55} 100%{transform:translate(-50%,-50%) scale(1);opacity:0} }
.jat-click-ping {
  position: fixed; pointer-events: none;
  border: 1.5px solid var(--jat-accent);
  border-radius: 50%; width: 32px; height: 32px;
  transform: translate(-50%,-50%); z-index: 9999;
  animation: jatClickPing 0.6s ease-out forwards;
}
@keyframes jatClickPing { 0%{transform:translate(-50%,-50%) scale(0.3);opacity:1} 100%{transform:translate(-50%,-50%) scale(2.8);opacity:0} }

/* ─── Magnetic targets ─── */
[data-jat-magnetic], [data-fx-magnetic] {
  transition: transform 0.3s cubic-bezier(0.34,1.56,0.64,1);
  will-change: transform;
}

/* ─── Live data chips (top-left) ─── */
.jat-chips {
  position: fixed; top: 95px; left: 1.5rem; z-index: 55;
  display: flex; flex-direction: column; gap: 0.55rem;
  opacity: 0; transform: translateX(-20px);
  transition: opacity 0.6s 0.5s, transform 0.6s 0.5s;
}
.jat-chips.show { opacity: 1; transform: translateX(0); }
.jat-chip {
  display: inline-flex; align-items: center; gap: 0.55rem;
  font-size: 0.74rem; letter-spacing: 0.04em;
  background: color-mix(in srgb, var(--jat-bg-card) 78%, transparent);
  backdrop-filter: blur(14px) saturate(140%);
  -webkit-backdrop-filter: blur(14px) saturate(140%);
  border: 1px solid color-mix(in srgb, var(--jat-accent) 32%, transparent);
  padding: 0.45rem 0.85rem; border-radius: 999px;
  color: var(--jat-text);
  box-shadow: 0 6px 22px -10px color-mix(in srgb, var(--jat-text) 16%, transparent);
  transition: transform 0.3s, background 0.3s, border-color 0.3s;
}
.jat-chip:hover { transform: translateY(-2px); background: var(--jat-bg-card); border-color: var(--jat-accent); }
.jat-chip .ic { font-size: 0.95rem; color: var(--jat-accent); display: inline-flex; width: 16px; justify-content: center; }
.jat-chip .v {
  font-weight: 500; font-size: 0.86rem;
  font-variant-numeric: tabular-nums; color: var(--jat-text);
}
.jat-chip .lbl { font-size: 0.62rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--jat-text-mid); }
.jat-chip.flash { animation: jatChipFlash 1.2s ease; }
@keyframes jatChipFlash { 0%{background: color-mix(in srgb, var(--jat-accent) 18%, transparent); border-color: var(--jat-accent);} 100%{background: color-mix(in srgb, var(--jat-bg-card) 78%, transparent); border-color: color-mix(in srgb, var(--jat-accent) 32%, transparent);} }
@media (max-width: 880px) {
  .jat-chips { top: auto; bottom: 4.5rem; left: 50%; right: auto; transform: translateX(-50%) translateY(0); flex-direction: row; gap: 0.4rem; }
  .jat-chips:not(.show) { transform: translateX(-50%) translateY(10px); }
  .jat-chip { font-size: 0.66rem; padding: 0.35rem 0.65rem; }
  .jat-chip .lbl { display: none; }
}

/* ─── Bottom-left dock: audio toggle ─── */
.jat-audio-toggle {
  position: fixed; bottom: 1.5rem; left: 1.5rem; z-index: 55;
  width: 44px; height: 44px; border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--jat-accent) 42%, transparent);
  background: color-mix(in srgb, var(--jat-bg-card) 85%, transparent);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  color: var(--jat-text); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: transform 0.25s, background 0.25s, border-color 0.25s, color 0.25s;
  box-shadow: 0 6px 22px -10px color-mix(in srgb, var(--jat-text) 16%, transparent);
}
.jat-audio-toggle:hover { background: var(--jat-bg-card); border-color: var(--jat-accent); color: var(--jat-accent); transform: scale(1.05); }
.jat-audio-toggle[data-state="on"] {
  background: color-mix(in srgb, var(--jat-accent) 10%, transparent);
  border-color: var(--jat-accent); color: var(--jat-accent);
}

/* ─── Online count chip ─── */
.jat-online {
  position: fixed; bottom: 1.5rem; left: 5rem; z-index: 55;
  display: inline-flex; align-items: center; gap: 0.5rem;
  font-size: 0.72rem; letter-spacing: 0.06em;
  background: color-mix(in srgb, var(--jat-bg-card) 85%, transparent);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border: 1px solid color-mix(in srgb, var(--jat-accent) 42%, transparent);
  padding: 0.45rem 0.9rem; border-radius: 999px;
  color: var(--jat-text);
  box-shadow: 0 6px 22px -10px color-mix(in srgb, var(--jat-text) 16%, transparent);
  opacity: 0; transform: translateY(10px);
  transition: opacity 0.6s 0.8s, transform 0.6s 0.8s;
}
.jat-online.show { opacity: 1; transform: translateY(0); }
.jat-online .pip {
  width: 8px; height: 8px; background: #2C7A3D; border-radius: 50%;
  box-shadow: 0 0 10px rgba(44,122,61,0.6);
  animation: jatOnlinePulse 2s ease-in-out infinite;
}
@keyframes jatOnlinePulse { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:0.5;transform:scale(0.7)} }
.jat-online .v { font-weight: 600; color: var(--jat-accent); font-variant-numeric: tabular-nums; }
.jat-online .lbl { text-transform: uppercase; letter-spacing: 0.18em; color: var(--jat-text-mid); font-size: 0.62rem; }

/* ─── AI chat widget (bottom-right) ─── */
.jat-chat { position: fixed; bottom: 1.5rem; right: 1.5rem; z-index: 70; }
.jat-chat-toggle {
  position: relative; width: 56px; height: 56px; border-radius: 50%; border: none;
  background: linear-gradient(135deg, var(--jat-accent), var(--jat-accent-2));
  color: var(--jat-bg-card); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 10px 32px -8px var(--jat-accent-glow);
  transition: transform 0.25s, box-shadow 0.25s;
}
.jat-chat-toggle:hover { transform: translateY(-3px) scale(1.05); }
.jat-chat-toggle .pulse {
  position: absolute; inset: -4px; border-radius: 50%;
  border: 2px solid var(--jat-accent);
  animation: jatChatPulse 2.2s ease-out infinite; pointer-events: none;
}
@keyframes jatChatPulse { 0%{transform:scale(0.9);opacity:0.9} 100%{transform:scale(1.45);opacity:0} }
.jat-chat-panel {
  position: absolute; bottom: 70px; right: 0;
  width: min(380px, 92vw); height: 520px;
  background: var(--jat-bg-card);
  border: 1px solid color-mix(in srgb, var(--jat-accent) 42%, transparent);
  border-radius: 18px;
  box-shadow: 0 24px 64px -16px color-mix(in srgb, var(--jat-text) 35%, transparent);
  display: flex; flex-direction: column; overflow: hidden;
  transform-origin: bottom right;
  animation: jatChatOpen 0.4s cubic-bezier(0.16,1,0.3,1);
}
@keyframes jatChatOpen { from{opacity:0;transform:translateY(20px) scale(0.92)} to{opacity:1;transform:none} }
.jat-chat-panel[hidden] { display: none; }
.jat-chat-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: 1rem 1.25rem;
  border-bottom: 1px solid var(--jat-border);
  background: var(--jat-bg-2);
}
.jat-chat-title { font-weight: 600; font-size: 1.05rem; }
.jat-chat-sub { font-size: 0.72rem; color: var(--jat-text-mid); letter-spacing: 0.08em; text-transform: uppercase; display: inline-flex; align-items: center; gap: 0.4rem; margin-top: 2px; }
.jat-chat-sub .dot { width: 6px; height: 6px; background: #2C7A3D; border-radius: 50%; box-shadow: 0 0 8px rgba(44,122,61,0.6); }
.jat-chat-close {
  width: 32px; height: 32px; border-radius: 50%;
  border: 1px solid var(--jat-border); background: transparent;
  font-size: 18px; cursor: pointer; color: var(--jat-text-mid);
  display: flex; align-items: center; justify-content: center;
  transition: background 0.2s, color 0.2s;
}
.jat-chat-close:hover { background: var(--jat-bg); color: var(--jat-text); }
.jat-chat-body { flex: 1; overflow-y: auto; padding: 1rem; display: flex; flex-direction: column; gap: 0.7rem; }
.jat-msg { padding: 0.7rem 1rem; border-radius: 14px; font-size: 0.92rem; line-height: 1.5; max-width: 86%; }
.jat-msg.bot { background: var(--jat-bg); border: 1px solid var(--jat-border); align-self: flex-start; }
.jat-msg.user { background: var(--jat-accent); color: var(--jat-bg-card); align-self: flex-end; }
.jat-msg.typing { display: inline-flex; gap: 4px; }
.jat-msg.typing span { width: 6px; height: 6px; border-radius: 50%; background: var(--jat-accent); animation: jatTyping 1.2s ease-in-out infinite; }
.jat-msg.typing span:nth-child(2) { animation-delay: 0.2s; }
.jat-msg.typing span:nth-child(3) { animation-delay: 0.4s; }
@keyframes jatTyping { 0%,100%{opacity:0.3;transform:translateY(0)} 50%{opacity:1;transform:translateY(-4px)} }
.jat-chat-form { display: flex; gap: 0.5rem; padding: 0.85rem 1rem; border-top: 1px solid var(--jat-border); background: var(--jat-bg-2); }
.jat-chat-form input {
  flex: 1; background: var(--jat-bg-card); border: 1px solid var(--jat-border);
  border-radius: 999px; padding: 0.65rem 1rem;
  font-size: 0.92rem; color: var(--jat-text);
}
.jat-chat-form input:focus { outline: none; border-color: var(--jat-accent); }
.jat-chat-form button {
  width: 38px; height: 38px; border-radius: 50%;
  background: var(--jat-accent); color: var(--jat-bg-card); border: none;
  font-size: 18px; cursor: pointer; transition: background 0.2s, transform 0.2s;
}
.jat-chat-form button:hover { background: var(--jat-accent-2); transform: scale(1.05); }
.jat-chat-voice {
  width: 38px; height: 38px; border-radius: 50%;
  background: var(--jat-bg-card); border: 1px solid var(--jat-border);
  color: var(--jat-text-mid); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background 0.2s, color 0.2s, border-color 0.2s;
}
.jat-chat-voice:hover { color: var(--jat-accent); border-color: var(--jat-accent); }
.jat-chat-voice.listening { background: var(--jat-accent); color: var(--jat-bg-card); animation: jatVoicePulse 1.2s ease-in-out infinite; }
@keyframes jatVoicePulse { 0%,100% { box-shadow: 0 0 0 0 var(--jat-accent-glow); } 50% { box-shadow: 0 0 0 10px transparent; } }

/* ─── Easter egg message ─── */
.jat-easter {
  position: fixed; top: 50%; left: 50%;
  transform: translate(-50%,-50%) scale(0.8);
  z-index: 9000;
  padding: 1.5rem 2.5rem;
  background: color-mix(in srgb, var(--jat-text) 92%, transparent);
  color: var(--jat-accent-2);
  font-size: 1.5rem; font-style: italic;
  letter-spacing: 0.06em;
  border: 1px solid var(--jat-accent);
  border-radius: 14px;
  box-shadow: 0 20px 60px -10px var(--jat-accent-glow);
  opacity: 0; pointer-events: none;
  transition: opacity 0.4s, transform 0.5s cubic-bezier(0.34,1.56,0.64,1);
}
.jat-easter.show { opacity: 1; transform: translate(-50%,-50%) scale(1); }

/* ─── Marquee strip ─── */
.jat-marquee {
  position: relative; overflow: hidden;
  padding: 1.5rem 0;
  border-top: 1px solid var(--jat-border);
  border-bottom: 1px solid var(--jat-border);
  background: var(--jat-bg-2);
}
.jat-marquee-track { display: inline-flex; white-space: nowrap; gap: 3rem; animation: jatMarquee 42s linear infinite; will-change: transform; }
.jat-marquee-track:hover { animation-play-state: paused; }
.jat-marquee-track span {
  font-style: italic;
  font-size: clamp(1.1rem, 0.7rem + 1.2vw, 1.85rem);
  letter-spacing: 0.02em;
  color: var(--jat-text);
  display: inline-flex; align-items: center; gap: 3rem;
}
.jat-marquee-track span::after { content: '✦'; color: var(--jat-accent); font-size: 0.9em; font-style: normal; }
@keyframes jatMarquee { from { transform: translateX(0); } to { transform: translateX(-50%); } }

/* ─── Section progress rail (dots on right) ─── */
.jat-rail {
  position: fixed; right: 1.4rem; top: 50%;
  transform: translateY(-50%);
  z-index: 60;
  display: flex; flex-direction: column; gap: 0.85rem;
  pointer-events: none; opacity: 0;
  transition: opacity 0.4s;
}
.jat-rail.show { opacity: 1; pointer-events: auto; }
.jat-rail a {
  display: block; width: 9px; height: 9px;
  border-radius: 50%;
  background: color-mix(in srgb, var(--jat-text) 18%, transparent);
  transition: background 0.3s, transform 0.3s, box-shadow 0.3s;
  position: relative;
}
.jat-rail a.active { background: var(--jat-accent); transform: scale(1.55); box-shadow: 0 0 14px var(--jat-accent-glow); }
.jat-rail a::after {
  content: attr(data-label);
  position: absolute; right: 1.4rem; top: 50%;
  transform: translateY(-50%);
  font-size: 0.68rem; letter-spacing: 0.14em; text-transform: capitalize;
  color: var(--jat-bg-card);
  opacity: 0; pointer-events: none;
  transition: opacity 0.2s; white-space: nowrap;
  background: var(--jat-text);
  padding: 0.35rem 0.65rem; border-radius: 4px;
}
.jat-rail a:hover::after, .jat-rail a.active:hover::after { opacity: 1; }
@media (max-width: 880px) { .jat-rail { display: none; } }

/* ─── 3D logo container (place anywhere in hero) ─── */
.jat-logo-3d { z-index: 2; pointer-events: auto; }
@media (max-width: 880px) { .jat-logo-3d { display: none; } }

/* ─── Reveal-on-scroll (cinematic) ─── */
.reveal, [data-fx-reveal], [data-jat-reveal] {
  opacity: 0;
  transform: translateY(60px) scale(0.97);
  filter: blur(2px);
  transition: opacity 1.05s cubic-bezier(0.16,1,0.3,1), transform 1.05s cubic-bezier(0.16,1,0.3,1), filter 0.85s ease;
}
.reveal.is-visible, [data-fx-reveal].in, [data-jat-reveal].in {
  opacity: 1 !important; transform: translateY(0) scale(1) !important; filter: blur(0) !important;
}
[data-fx-reveal][data-fx-delay="1"], [data-jat-reveal][data-jat-delay="1"] { transition-delay: 100ms; }
[data-fx-reveal][data-fx-delay="2"], [data-jat-reveal][data-jat-delay="2"] { transition-delay: 200ms; }
[data-fx-reveal][data-fx-delay="3"], [data-jat-reveal][data-jat-delay="3"] { transition-delay: 300ms; }
[data-fx-reveal][data-fx-delay="4"], [data-jat-reveal][data-jat-delay="4"] { transition-delay: 400ms; }

/* ─── Scramble + magnetic chars ─── */
.jat-scramble-char, .jat-magnetic-char {
  display: inline-block;
  font-variant-numeric: tabular-nums;
  transition: transform 0.2s cubic-bezier(0.34,1.56,0.64,1);
  will-change: transform;
}

/* ─── Reduced motion ─── */
@media (prefers-reduced-motion: reduce) {
  .reveal, [data-fx-reveal], [data-jat-reveal] { opacity: 1 !important; transform: none !important; filter: none !important; }
  .jat-click-ripple, .jat-click-ping, .jat-trail-dot, .jat-cursor { display: none !important; }
  .jat-orb, #jat-mesh, #jat-dust { animation: none !important; }
}
