/* =========================================================================
   VisionVeer — assets/global.css
   Monolithic global stylesheet — neon / dark theme, responsive, highly animated
   Drop into assets/global.css and reference from all pages.
   Note: tweak CSS variables at :root to change theme colors / scale.
   ========================================================================= */

/* ===========================
   RESET / BASE
   =========================== */
:root{
  /* color system */
  --bg-900: #07070a;
  --bg-850: #0a0a0f;
  --bg-800: #0f0f15;
  --surface-1: rgba(255,255,255,.03);
  --surface-2: rgba(255,255,255,.06);
  --glass: rgba(255,255,255,.02);
  --muted: #d7d7e6;
  --muted-2: rgba(236,236,245,.72);
  --accent1: #fe5eff;   /* pink */
  --accent2: #3ac8ff;   /* cyan */
  --accent3: #8e5bff;   /* purple */
  --accent4: #ff3355;   /* red */
  --success: #4ee89a;
  --danger: #ff5a6c;
  --radius-base: 14px;
  --max-width: 1200px;
  --fw-sans: Inter, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial;
  --ease-fast: cubic-bezier(.2,.9,.3,1);
  --ease-mid: cubic-bezier(.16,.84,.24,1);
  --ease-slow: cubic-bezier(.18,.83,.34,1);
  --glass-border: rgba(255,255,255,.04);
  --shadow-1: 0 8px 30px rgba(0,0,0,.5);
  --shadow-2: 0 18px 60px rgba(0,0,0,.65);
  --ui-z: 1000;
}

/* core reset */
*,
*::before,
*::after { box-sizing: border-box; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
html,body{height:100%}
html{font-size:16px}
body{
  margin:0;
  padding:0;
  font-family:var(--fw-sans);
  background:linear-gradient(180deg,var(--bg-900), var(--bg-800));
  color:var(--muted);
  line-height:1.45;
  -webkit-text-size-adjust:100%;
  -ms-text-size-adjust:100%;
}

/* Remove default margins/paddings */
h1,h2,h3,h4,h5,h6,p,ul,ol,figure{margin:0;padding:0}
ul,ol{list-style:none}

/* ===========================
   LAYOUT CONTAINERS & GRID
   =========================== */
.container{
  max-width:var(--max-width);
  margin:0 auto;
  padding:0 20px;
  width:100%;
}

/* Flexible row/column helpers */
.row{display:flex;gap:18px;flex-wrap:wrap}
.col{flex:1 1 0}

/* simple grid helpers */
.grid{display:grid;gap:18px}
.grid-2{grid-template-columns:repeat(2, minmax(0,1fr))}
.grid-3{grid-template-columns:repeat(3, minmax(0,1fr))}
.grid-4{grid-template-columns:repeat(4, minmax(0,1fr))}
@media (max-width:1100px){ .grid-4{grid-template-columns:repeat(3, minmax(0,1fr))} }
@media (max-width:880px){ .grid-4, .grid-3, .grid-2{grid-template-columns:1fr} }

/* spacing helpers */
.mt-8{margin-top:8px}.mt-12{margin-top:12px}.mt-18{margin-top:18px}.mt-24{margin-top:24px}
.mb-8{margin-bottom:8px}.mb-12{margin-bottom:12px}.mb-18{margin-bottom:18px}.mb-24{margin-bottom:24px}

/* ===========================
   TYPOGRAPHY
   =========================== */
h1{font-size:clamp(1.8rem,3.2vw,3.2rem);line-height:1.02;font-weight:900;color:#fff}
h2{font-size:clamp(1.2rem,2.2vw,1.8rem);font-weight:800;color:#fff}
h3{font-size:1.05rem;font-weight:800;color:#fff}
p{color:var(--muted-2);font-size:0.98rem}

/* gradients for headings */
.gradient-text{
  background:linear-gradient(90deg,var(--accent1), var(--accent2) 40%, var(--accent3) 70%);
  -webkit-background-clip:text; -webkit-text-fill-color:transparent;
}

/* typing look */
.typing{
  display:inline-block;
  border-right:2px solid rgba(255,255,255,.12);
  padding-right:6px;
  animation:blinkCaret .9s steps(1) infinite;
}
@keyframes blinkCaret{50%{border-color:transparent}}

/* ===========================
   SITE HEADER / NAV
   =========================== */
.site-header{
  position:sticky;
  top:0;
  z-index: calc(var(--ui-z) + 50);
  background: linear-gradient(180deg, rgba(7,7,10,.6), rgba(7,7,10,.35));
  border-bottom:1px solid var(--glass-border);
  backdrop-filter: blur(8px) saturate(120%);
  -webkit-backdrop-filter: blur(8px) saturate(120%);
  transition: transform .35s var(--ease-fast);
}
.site-header .container{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:12px 20px;
}

/* logo */
.logo{display:flex;align-items:center;gap:12px}
.logo img{width:150px;height:auto;display:block;border-radius:8px;transition:transform .25s var(--ease-fast)}
.logo img:hover{transform:scale(1.02);filter:drop-shadow(0 10px 40px rgba(138,80,255,.16))}

/* nav */
.main-nav ul{display:flex;gap:8px;align-items:center}
.main-nav a{
  display:inline-flex;align-items:center;gap:8px;padding:.5rem .7rem;border-radius:10px;
  color:var(--muted);font-weight:800;text-decoration:none;letter-spacing:0.6px;
  transition:all .25s var(--ease-fast);
  position:relative;overflow:visible;
}
.main-nav a::after{
  content:"";position:absolute;left:8px;right:8px;bottom:-8px;height:4px;border-radius:6px;
  background:linear-gradient(90deg,var(--accent1),var(--accent2));opacity:0;transform:translateY(8px);transition:all .35s var(--ease-mid);
}
.main-nav a:hover{color:#fff;transform:translateY(-3px)}
.main-nav a:hover::after{opacity:1;transform:translateY(0)}
.main-nav a.active{
  color:#fff;
  box-shadow:0 8px 30px rgba(58,200,255,.06);
}

/* hamburger */
.hamburger{
  display:none;background:transparent;border:0;padding:6px;border-radius:10px;cursor:pointer;
  width:48px;height:48px;align-items:center;justify-content:center;
}
.hamburger span{display:block;width:22px;height:2px;background:var(--muted);margin:4px 0;border-radius:2px}
.hamburger.is-open span{background:#fff}
@media (max-width:920px){
  .main-nav{display:none}
  .hamburger{display:flex}
}

/* sticky small state */
.site-header.shrink{padding:6px 0;backdrop-filter: blur(10px)}

/* nav slide-in for mobile */
.main-nav.open{display:block;position:absolute;top:68px;right:18px;background:linear-gradient(180deg, rgba(11,11,15,.98), rgba(11,11,15,.95));border-radius:12px;padding:12px;border:1px solid rgba(255,255,255,.04);width:260px;box-shadow:0 16px 60px rgba(0,0,0,.6)}

/* ===========================
   HERO / BANNER
   =========================== */
.hero{
  margin:20px 0 6px;
  padding:34px;
  border-radius:20px;
  position:relative;
  overflow:visible;
  background:
    radial-gradient(900px 300px at -10% -30%, rgba(142,91,255,.06), transparent 30%),
    radial-gradient(900px 300px at 110% 120%, rgba(58,200,255,.04), transparent 30%),
    linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));
  border:1px solid var(--glass-border);
  box-shadow:var(--shadow-1);
}

/* hero inner layout */
.hero .hero-row{display:flex;gap:22px;align-items:center;flex-wrap:wrap}
.hero .hero-left{flex:1 1 700px;min-width:260px}
.hero .hero-right{flex:0 0 420px;min-width:260px}

/* hero title & subtitle */
.hero h1{font-size:clamp(1.6rem,3vw,2.8rem);margin-bottom:8px}
.hero p{opacity:.9}

/* hero CTA group */
.hero .cta{display:flex;gap:12px;margin-top:14px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;gap:10px;padding:.65rem .95rem;border-radius:12px;font-weight:800;border:1px solid rgba(255,255,255,.06);background:transparent;color:var(--muted);cursor:pointer;position:relative;overflow:hidden}
.btn .btn-shine-layer{position:absolute;inset:0;transform:translateX(-120%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.14),transparent);opacity:.9}
.btn:hover .btn-shine-layer{animation:btnShine .95s var(--ease-fast)}
@keyframes btnShine{to{transform:translateX(120%)}}
.btn-primary{background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;border:0;box-shadow:0 14px 50px rgba(58,200,255,.06)}
.btn-secondary{background:rgba(255,255,255,.03);color:var(--muted)}

/* hero badges */
.pill{display:inline-block;padding:.4rem .7rem;border-radius:999px;background:linear-gradient(90deg, rgba(254,94,255,.06), rgba(58,200,255,.06));border:1px solid rgba(255,255,255,.03);font-weight:800;color:var(--muted)}

/* ---------------------------
   HERO: Decorative circles / dots / lines / rings
   --------------------------- */
/* You can add decorative elements by placing <span class="hero-dot n1"></span> etc in the hero markup.
   For large counts (200 circles, 300 dots, etc) generate DOM nodes server-side or via JS and they will pick these styles.
*/
.hero .decor{
  position:absolute;inset:0;pointer-events:none;z-index:0;overflow:hidden;
}
/* simple small dots */
.hero .decor .dot{
  position:absolute;width:6px;height:6px;border-radius:50%;background:radial-gradient(circle,var(--accent2),transparent 50%);opacity:.12;filter:blur(.6px);
  transform-origin:center;
  animation:dotFloat linear infinite;
}
@keyframes dotFloat{from{transform:translateY(0) rotate(0)} to{transform:translateY(-40px) rotate(180deg)}}

/* rings */
.hero .decor .ring{
  position:absolute;border-radius:50%;border:1px solid rgba(255,255,255,.04);box-shadow:0 8px 30px rgba(0,0,0,.4);
  filter:blur(10px);opacity:.42;animation:ringSpin 8s linear infinite;
}
@keyframes ringSpin{from{transform:rotate(0) scale(.98)} to{transform:rotate(360deg) scale(1.02)}}

/* neon lines */
.hero .decor .line{
  position:absolute;height:2px;background:linear-gradient(90deg,var(--accent1),var(--accent2));
  opacity:.1;filter:blur(1px);transform-origin:left center;animation:linePulse 6s ease-in-out infinite;
}
@keyframes linePulse{0%{opacity:.06}50%{opacity:.18}100%{opacity:.06}}

/* gradient blobs (big colorful backgrounds) */
.hero .blob{
  position:absolute;border-radius:50%;filter:blur(60px);opacity:.14;mix-blend-mode:screen;
}

/* ===========================
   SECTIONS / CARDS / PANELS
   =========================== */
.card{
  background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));
  border-radius:var(--radius-base);
  border:1px solid var(--glass-border);
  padding:16px;
  box-shadow:var(--shadow-1);
  position:relative;
  overflow:hidden;
}

/* glowy card border using pseudo-element */
.card.glow::before{
  content:"";
  position:absolute;inset:-2px;border-radius:calc(var(--radius-base) + 2px);
  background:conic-gradient(from 0deg,var(--accent1),var(--accent2),var(--accent3),var(--accent4),var(--accent1));
  filter:blur(16px);
  opacity:.35;z-index:0;pointer-events:none;animation:glowRotate 10s linear infinite;
}
.card .inner{position:relative;z-index:1}
@keyframes glowRotate{to{transform:rotate(360deg)}}

/* stat counters */
.stat{
  display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:14px;border-radius:12px;
  background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.03)
}
.stat h3{font-size:1.6rem;color:#fff}
.stat p{opacity:.9}

/* feature box with 5 spans inside */
.feature-box{display:grid;gap:8px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));align-items:start}
.feature-item{
  padding:10px;border-radius:12px;background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));
  border:1px solid rgba(255,255,255,.04);display:flex;gap:10px;align-items:flex-start;
}

/* ===========================
   GAMES / IFRAME FRAMES / CONTROLS
   =========================== */
.frame-wrap{
  --ratio: 16/9; position:relative;border-radius:12px;overflow:hidden;
  background:linear-gradient(180deg,#000,#05050a);border:1px solid rgba(255,255,255,.06);
  box-shadow:0 18px 60px rgba(0,0,0,.6);
}
.frame-wrap::before{content:"";display:block;padding-top:calc(100% / (var(--ratio)));} /* maintains aspect ratio */
.frame-wrap iframe{position:absolute;inset:0;width:100%;height:100%;border:0;background:#000;display:block}

/* overlay showing play / restart / fullscreen */
.frame-wrap .frame-overlay{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;
  background:linear-gradient(180deg,rgba(0,0,0,.45),rgba(0,0,0,.65));
  transition:opacity .18s var(--ease-fast);
}
.play-btn{
  display:inline-grid;place-items:center;width:86px;height:86px;border-radius:50%;
  background:linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.02));
  border:2px solid rgba(255,255,255,.06);cursor:pointer;box-shadow:0 18px 60px rgba(0,0,0,.5);
  transition:transform .18s var(--ease-fast), box-shadow .18s var(--ease-fast);
}
.play-btn:hover{transform:scale(1.06);box-shadow:0 28px 80px rgba(0,0,0,.6)}
.play-btn .triangle{width:0;height:0;border-left:18px solid #fff;border-top:12px solid transparent;border-bottom:12px solid transparent;margin-left:6px;opacity:.98}

/* control toolbar below frame */
.frame-controls{display:flex;gap:10px;align-items:center;justify-content:flex-start;margin-top:10px}
.ctrl{padding:.5rem .7rem;border-radius:10px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);font-weight:800;cursor:pointer}
.ctrl.full{background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;border:0}

/* score display */
.score-strip{display:flex;gap:8px;align-items:center}
.score-box{padding:.38rem .6rem;border-radius:8px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.03);font-weight:900;color:var(--muted)}

/* fullscreen styles when frame is active */
.fullscreen-active{
  position:fixed !important; inset:0 !important; width:100% !important; height:100% !important; z-index:99999 !important;
  border-radius:0 !important; margin:0 !important; padding:12px !important; background:#000;
}

/* ===========================
   TABS / MODALS / DRAWERS
   =========================== */
.modal{
  position:fixed;left:0;top:0;width:100%;height:100%;display:grid;place-items:center;background:rgba(0,0,0,.6);z-index:calc(var(--ui-z) + 200);
}
.modal .dialog{background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));border-radius:12px;padding:20px;max-width:900px;margin:18px;border:1px solid rgba(255,255,255,.04)}

/* slide drawer */
.drawer { position:fixed;right:0;top:0;height:100%;width:360px;background:linear-gradient(180deg,#07070a,#0b0b0f);box-shadow:-30px 0 80px rgba(0,0,0,.6);z-index:calc(var(--ui-z)+100);transform:translateX(110%);transition:transform .35s var(--ease-mid) }
.drawer.open{transform:translateX(0)}

/* ===========================
   NAVIGATIONAL HIGHLIGHTS, ANIMATIONS UTILITIES
   =========================== */
.anim{transition:all .28s var(--ease-fast);will-change:transform,opacity}
.fade-in{opacity:0;transform:translateY(8px);animation:fadeIn .7s .06s forwards}
@keyframes fadeIn{to{opacity:1;transform:none}}
.slide-up{opacity:0;transform:translateY(10px);animation:slideUp .6s .08s forwards}
@keyframes slideUp{to{opacity:1;transform:none}}
.breath{animation:breath 3.2s ease-in-out infinite}
@keyframes breath{0%{transform:scale(1)}50%{transform:scale(1.02)}100%{transform:scale(1)}}

/* attention pulse */
.pulse{animation:pulse 1.6s infinite}
@keyframes pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.03);opacity:.85}100%{transform:scale(1);opacity:1}}

/* rotate slowly */
.spin-slow{animation:spin 9s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* glow breathe */
.glow-breathe{animation:glowBreathe 3.4s ease-in-out infinite}
@keyframes glowBreathe{0%{filter:drop-shadow(0 10px 40px rgba(138,80,255,.06))}50%{filter:drop-shadow(0 18px 60px rgba(138,80,255,.18))}100%{filter:drop-shadow(0 10px 40px rgba(138,80,255,.06))}}

/* ===========================
   CURSOR / TRAILS
   =========================== */
/* custom cursor root; JS will create .custom-cursor element and this styles it */
.custom-cursor{
  position:fixed;left:0;top:0;pointer-events:none;z-index:2147483646;mix-blend-mode:screen;transition:transform .08s linear,opacity .12s linear;
}
.custom-cursor .dot{
  width:10px;height:10px;border-radius:50%;background:linear-gradient(180deg,var(--accent1),var(--accent2));box-shadow:0 8px 30px rgba(58,200,255,.08);
}
.custom-cursor .ring{
  width:42px;height:42px;border-radius:50%;border:1px solid rgba(255,255,255,.06);position:absolute;left:-16px;top:-16px;transform:scale(.8);
  transition:transform .18s var(--ease-fast),opacity .25s;
}

/* trail dots created by JS will use this */
.trail-dot{position:fixed;pointer-events:none;border-radius:50%;opacity:.14;mix-blend-mode:screen}

/* hide custom cursor for touch */
@media (hover:none) and (pointer:coarse){ .custom-cursor{display:none} }

/* ===========================
   PARTICLES / BG FX LAYER
   =========================== */
.fx-layer{position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden}
.fx-layer .particle{
  position:absolute;border-radius:50%;opacity:.6;filter:blur(0);transform:translate3d(0,0,0);
  mix-blend-mode:screen;
}

/* quick class to generate many small rounded blocks (neon grid) */
.neon-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:8px}
.neon-grid .neon-block{
  height:46px;border-radius:12px;background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));box-shadow:0 12px 40px rgba(0,0,0,.36);
  transition:transform .22s var(--ease-fast), box-shadow .22s var(--ease-fast);
}
.neon-grid .neon-block:hover{transform:translateY(-6px);box-shadow:0 26px 80px rgba(0,0,0,.56)}

/* ===========================
   FORMS / INPUTS / VALIDATION
   =========================== */
label{font-weight:700;color:var(--muted-2);display:block;margin-bottom:6px}
input[type="text"],input[type="email"],textarea,select{
  width:100%;padding:.78rem .9rem;border-radius:10px;border:1px solid rgba(255,255,255,.05);
  background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.02));color:var(--muted);
  font:inherit;outline:none;transition:box-shadow .18s var(--ease-fast),border-color .18s var(--ease-fast)
}
input:focus,textarea:focus,select:focus{box-shadow:0 10px 30px rgba(58,200,255,.08);border-color:var(--accent2)}

/* form feedback */
.input-error{border-color:var(--danger)!important}
.help{font-size:.88rem;opacity:.8}

/* ===========================
   FOOTER
   =========================== */
.site-footer{
  margin-top:46px;padding:18px 0;color:rgba(236,236,245,.6);border-top:1px solid rgba(255,255,255,.02);text-align:center;background:transparent;
}

/* small footer links row */
.footer-links{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.footer-links a{color:var(--muted);font-weight:700;padding:.35rem .6rem;border-radius:9px;border:1px solid rgba(255,255,255,.02);background:rgba(255,255,255,.01)}

/* ===========================
   RESPONSIVE TWEAKS
   =========================== */
@media (max-width:1100px){
  .hero .hero-right{display:none} /* hide big hero art for smaller */
  .logo img{width:140px}
}
@media (max-width:880px){
  .container{padding:0 16px}
  .logo img{width:130px}
  .hero{padding:18px}
  .btn{padding:.6rem .7rem}
  .site-header .container{padding:8px 12px}
}

/* ===========================
   ACCESSIBILITY - REDUCE MOTION
   =========================== */
@media (prefers-reduced-motion: reduce){
  *{transition:none!important;animation:none!important}
  .hero .decor{display:none!important}
  .custom-cursor{display:none!important}
}

/* ===========================
   UTILITIES
   =========================== */
.u-center{text-align:center}
.u-right{text-align:right}
.u-muted{color:var(--muted-2)}
.badge{display:inline-block;padding:.35rem .6rem;border-radius:999px;background:linear-gradient(90deg,rgba(254,94,255,.06),rgba(58,200,255,.06));border:1px solid rgba(255,255,255,.03);font-weight:800;color:var(--muted)}

/* visibility helpers */
.hide{display:none!important}
.show{display:block!important}

/* text overflow */
.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* spacing helpers */
.px-12{padding-left:12px;padding-right:12px}
.py-12{padding-top:12px;padding-bottom:12px}

/* z-index helpers */
.z-top{z-index:99999}
.z-mid{z-index:5000}
.z-low{z-index:100}

/* ===========================
   EXTENSIVE ANIMATION LIBRARY
   ===========================
   - Flip/rotate/slide/float/wiggle/pulse/strobe combos
   - Use utility classes on any element like .wiggle .strobe-fast etc.
   =========================== */

/* wiggle */
.wiggle{display:inline-block;animation:wig 800ms ease-in-out infinite}
@keyframes wig{0%{transform:rotate(0)}25%{transform:rotate(-3deg)}75%{transform:rotate(3deg)}100%{transform:rotate(0)}}

/* quick float */
.float{animation:floaty 6s ease-in-out infinite}
@keyframes floaty{0%{transform:translateY(0)}50%{transform:translateY(-10px)}100%{transform:translateY(0)}}

/* strobe */
.strobe-fast{animation:strobe .6s steps(2) infinite}
@keyframes strobe{0%{opacity:1}50%{opacity:.45}100%{opacity:1}}

/* entry rotate */
.rotate-in{animation:rotateIn .7s var(--ease-mid) forwards}
@keyframes rotateIn{0%{opacity:0;transform:rotate(-8deg)translateY(20px)}100%{opacity:1;transform:none}}

/* tilt */
.tilt{transform:perspective(1000px) rotateX(0deg) rotateY(0deg);transition:transform .28s var(--ease-fast)}
.tilt:hover{transform:perspective(1000px) rotateX(6deg) rotateY(-6deg) translateY(-6px)}

/* ===========================
   LARGE-SCALE HELPERS FOR MASSIVE EFFECTS
   ===========================
   The site asked for many repeated shapes (200 circles, 300 dots, 50 lines, 10 rings).
   You should create DOM elements for each (server-side or via JS). Below are the styles for them.
   Example: <span class="vv-dot dot-001" style="left:12%;top:34%;animation-delay:0.2s"></span>
*/

/* generic small dot */
.vv-dot{
  position:absolute;width:6px;height:6px;border-radius:50%;background:var(--accent2);opacity:.12;filter:blur(.8px);
  transform-origin:center;animation:vvDotAnim linear infinite;
}
@keyframes vvDotAnim{0%{transform:translateY(0) scale(1)}50%{transform:translateY(-18px) scale(.9)}100%{transform:translateY(0) scale(1)}}

/* tiny micro dots for background */
.vv-micro{position:absolute;width:2px;height:2px;border-radius:50%;background:rgba(255,255,255,.12);opacity:.08;animation:vvMicro 14s linear infinite}
@keyframes vvMicro{0%{transform:translateY(0)}100%{transform:translateY(-60vh)}}

/* long lines */
.vv-line{position:absolute;height:2px;background:linear-gradient(90deg,var(--accent1),var(--accent2));opacity:.07;filter:blur(.8px);transform-origin:left center;animation:vvLine 5s ease-in-out infinite}
@keyframes vvLine{0%{transform:scaleX(.85)}50%{transform:scaleX(1.05)}100%{transform:scaleX(.85)}}

/* rings (pulse) */
.vv-ring{position:absolute;border-radius:50%;border:2px solid rgba(255,255,255,.06);opacity:.18;filter:blur(6px);animation:vvRing 5.6s ease-in-out infinite}
@keyframes vvRing{0%{transform:scale(.92);opacity:.34}50%{transform:scale(1.12);opacity:.12}100%{transform:scale(.92);opacity:.34}}

/* big circles */
.vv-circle-large{position:absolute;border-radius:50%;filter:blur(38px);opacity:.12;mix-blend-mode:screen;animation:vvCircleSlow 14s linear infinite}
@keyframes vvCircleSlow{0%{transform:scale(.98)}50%{transform:scale(1.02)}100%{transform:scale(.98)}}

/* ======================================
   MOBILE OPTIMIZATIONS FOR PERFORMANCE
   - On small screens we hide heavy fx by default but provide config classes.
   ====================================== */
@media (max-width:640px){
  .fx-layer{display:none}
  .vv-dot,.vv-micro,.vv-line,.vv-ring,.vv-circle-large{display:none!important}
  .neon-grid .neon-block{height:34px}
  .logo img{width:120px}
}

/* toggle to disable FX via body class: <body class="no-fx"> */
.no-fx .fx-layer,
.no-fx .vv-dot,
.no-fx .vv-micro,
.no-fx .vv-line,
.no-fx .vv-ring,
.no-fx .vv-circle-large,
.no-fx .custom-cursor{display:none!important}

/* ===========================
   SEO / SHARE PREVIEW HELPERS
   =========================== */
.og-preview{display:flex;gap:14px;align-items:center;background:linear-gradient(180deg,rgba(255,255,255,.02),transparent);padding:12px;border-radius:10px;border:1px solid rgba(255,255,255,.04)}
.og-preview img{width:110px;height:62px;object-fit:cover;border-radius:8px}

/* ===========================
   EXTENDED CLASSES TO MAKE TEXTS APPEAR "PACKED" IN ANIMATION BOXES
   - use .pack or .glow-text to wrap hero lines and micro animations
   =========================== */
.pack{
  padding:12px 16px;border-radius:12px;background:linear-gradient(180deg,rgba(255,255,255,.02),rgba(255,255,255,.01));
  border:1px solid rgba(255,255,255,.04);display:inline-block;position:relative;overflow:visible;
}
.glow-text{
  display:inline-block;padding:.06rem .2rem;border-radius:6px;background:linear-gradient(90deg, rgba(254,94,255,.08), rgba(58,200,255,.08));
  box-shadow:0 10px 40px rgba(138,80,255,.06);font-weight:900;color:#fff;
}

/* animated headline underline */
.headline-underline{position:relative;padding-bottom:8px}
.headline-underline::after{
  content:"";position:absolute;left:0;bottom:0;height:4px;width:0;background:linear-gradient(90deg,var(--accent1),var(--accent2));border-radius:6px;transition:width .5s var(--ease-mid)
}
.headline-underline:hover::after{width:100%}

/* ===========================
   DEBUG / DEV helpers
   =========================== */
.debug-outline *{outline:1px dashed rgba(255,255,255,.04)}
.show-grid::before{content:"";position:fixed;left:0;right:0;top:0;height:40px;background:linear-gradient(90deg,rgba(255,0,0,.04),transparent);z-index:9999999;pointer-events:none}

/* ===========================
   A FEW EXTRAS: carousel-like slide bar for hero banners
   =========================== */
.slider{
  position:relative;overflow:hidden;border-radius:14px;border:1px solid rgba(255,255,255,.04);background:linear-gradient(180deg,rgba(255,255,255,.01),transparent);
}
.slider .slides{display:flex;transition:transform .6s var(--ease-mid);gap:12px}
.slide{min-width:100%;flex:0 0 100%;padding:18px;display:block}
.slider .nav{position:absolute;left:8px;right:8px;bottom:8px;display:flex;justify-content:center;gap:6px}
.slider .dot{width:10px;height:10px;border-radius:999px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.03);cursor:pointer}
.slider .dot.active{background:linear-gradient(90deg,var(--accent1),var(--accent2));box-shadow:0 8px 30px rgba(58,200,255,.06)}

/* ===========================
   FINAL PERFORMANCE TIPS (CSS toggles)
   - Add class .reduce-motion to html to disable motion
   - Add class .no-fx to body to disable heavy fx
   =========================== */
html.reduce-motion *{animation:none!important;transition:none!important}
body.no-fx .fx-layer, body.no-fx .custom-cursor, body.no-fx .vv-dot, body.no-fx .vv-ring { display:none!important }

/* =========================================================================
   END OF GLOBAL.CSS
   This file is intentionally feature-rich. If you want me to:
     • expand to more specific page-level sections (home, apps, games)
     • generate detailed per-app cards (25x pre-styled)
     • produce JS to auto-generate the 200 circles + 300 dots + 50 lines + 10 rings
     • or keep extending until it's exactly 6000 lines
   — tell me which and I'll append the rest.
   ========================================================================= */
/* =========================================================================
   VisionVeer — GLOBAL.CSS Part 2
   Append this after Part 1 content (previous file).
   Adds: homepage decorative generator styles, apps/games pages, per-app cards,
         large animation variants, accessibility & perf switches, many helpers.
   ========================================================================= */

/* ===========================
   THEME TUNING (easily tweakable)
   =========================== */
:root{
  --hero-circle-count: 200;
  --hero-dot-count: 300;
  --hero-line-count: 50;
  --hero-ring-count: 10;

  /* sizes for different breakpoints */
  --hero-circle-min: 6px;
  --hero-circle-max: 36px;

  /* low-end phone caps */
  --mobile-max-fx: 80;
}

/* ===========================
   HOMEPAGE DECORATIVE ZONE
   - Use JS to generate elements with classes:
     .vv-decor .vv-circle, .vv-decor .vv-dot, .vv-decor .vv-line, .vv-decor .vv-ring
   - Each element should have inline style for left/top/animation-delay/--size if needed
   =========================== */
.vv-decor{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}
.vv-decor *{position:absolute;pointer-events:none}

/* circle (soft blurred blob) */
.vv-decor .vv-circle{
  width:var(--size, 120px); height:var(--size,120px); border-radius:50%;
  background:radial-gradient(circle at 30% 30%, rgba(255,255,255,.06), transparent 40%),
             linear-gradient(90deg, rgba(254,94,255,.06), rgba(58,200,255,.06));
  filter: blur(var(--blur, 30px));
  opacity:var(--o, .12);
  mix-blend-mode:screen;
  transform-origin:center;
  animation:vvCircleFloat var(--dur, 18s) linear infinite var(--delay, 0s);
}
@keyframes vvCircleFloat{0%{transform:translateY(0) scale(.98)}50%{transform:translateY(-20px) scale(1.02)}100%{transform:translateY(0) scale(.98)}}

/* tiny dot (sparkle) */
.vv-decor .vv-dot{
  width:var(--size,6px); height:var(--size,6px); border-radius:50%;
  background:linear-gradient(90deg,var(--accent2),var(--accent1));
  opacity:var(--o, .14); filter:blur(.6px);
  animation:vvDotFloat var(--dur, 10s) linear infinite var(--delay,0s);
}
@keyframes vvDotFloat{0%{transform:translateY(0) scale(1)}50%{transform:translateY(-12px) scale(.9)}100%{transform:translateY(0) scale(1)}}

/* long line */
.vv-decor .vv-line{
  height:2px; width:var(--w,120px); border-radius:4px;
  background:linear-gradient(90deg,var(--accent1),var(--accent2));
  opacity:var(--o, .08); filter:blur(.8px);
  transform-origin:left center;
  animation:vvLinePulse var(--dur, 6s) ease-in-out infinite var(--delay,0s);
}
@keyframes vvLinePulse{0%{transform:scaleX(.86)}50%{transform:scaleX(1.06)}100%{transform:scaleX(.86)}}

/* ring (outlined pulsing ring) */
.vv-decor .vv-ring{
  width:var(--size,160px); height:var(--size,160px); border-radius:50%;
  border:2px solid rgba(255,255,255,.06);
  opacity:var(--o, .18);
  filter:blur(8px);
  animation:vvRingPulse var(--dur, 7s) ease-in-out infinite var(--delay,0s);
}
@keyframes vvRingPulse{0%{transform:scale(.96);opacity:.34}50%{transform:scale(1.12);opacity:.12}100%{transform:scale(.96);opacity:.34}}

/* Small helper to make them slightly different with nth-child if JS can't set variables */
.vv-decor .vv-dot:nth-child(3n){animation-duration:9s}
.vv-decor .vv-dot:nth-child(4n+1){opacity:.06}
.vv-decor .vv-circle:nth-child(2n){--blur:40px;opacity:.09}
.vv-decor .vv-line:nth-child(2n){--w:220px;opacity:.07}

/* ===========================
   HOMEPAGE: HERO PACK (text inside glowing boxes)
   - structure: <div class="hero-pack"><h1 class="pack">...<span class="glow-text">...</span></h1></div>
   =========================== */
.hero-pack{display:flex;flex-direction:column;gap:12px;max-width:900px}
.hero-pack .pack{display:block;padding:14px;border-radius:14px;background:linear-gradient(180deg,rgba(255,255,255,.02),rgba(255,255,255,.01));border:1px solid rgba(255,255,255,.04)}
.hero-pack .pack .glow-text{font-size:clamp(1.05rem,2.6vw,1.6rem);padding:.2rem .5rem;border-radius:8px;background:linear-gradient(90deg, rgba(254,94,255,.12), rgba(58,200,255,.12));box-shadow:0 18px 80px rgba(138,80,255,.06)}

/* animated micro-lines under hero */
.hero-pack .micro-lines{display:flex;gap:8px;align-items:center;margin-top:8px}
.micro-lines .bar{height:6px;border-radius:6px;background:linear-gradient(90deg,var(--accent1),var(--accent2));opacity:.92;box-shadow:0 10px 30px rgba(58,200,255,.06);transform-origin:left;animation:barGrow 1.2s ease forwards}
.micro-lines .bar.s--1{width:24%}.micro-lines .bar.s--2{width:52%}.micro-lines .bar.s--3{width:12%}
@keyframes barGrow{0%{transform:scaleX(.02)}100%{transform:none}}

/* headline animated word loop helpers (pure CSS fallback): use inline spans with classes .w1 .w2 ... toggled by JS for best result */
.hero-pack .word { display:inline-block; position:relative; opacity:0; transform:translateY(8px); transition:all .45s var(--ease-mid) }
.hero-pack .word.active{opacity:1; transform:none}

/* ===========================
   APPS PAGE: GRID + PER-APP CARD
   - layout supports 25 app cards (10 paid + 15 free)
   - each .app-card contains logo-slot, meta, description, cta
   =========================== */
.apps-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px}
.app-card{
  display:flex;flex-direction:column;gap:12px;padding:16px;border-radius:14px;background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));
  border:1px solid rgba(255,255,255,.04);box-shadow:0 18px 60px rgba(0,0,0,.55);
  transition:transform .28s var(--ease-fast), box-shadow .28s var(--ease-fast), border-color .2s;
  position:relative;overflow:visible;
}
.app-card:hover{transform:translateY(-8px);box-shadow:0 30px 100px rgba(0,0,0,.7);border-color:rgba(255,255,255,.07)}

/* logo slot */
.app-card .logo-slot{
  width:100%;height:140px;border-radius:12px;background:linear-gradient(90deg, rgba(254,94,255,.04), rgba(58,200,255,.03));
  display:flex;align-items:center;justify-content:center;border:1px dashed rgba(255,255,255,.03);
}
.app-card .logo-slot .placeholder{
  width:84px;height:84px;border-radius:18px;background:linear-gradient(180deg, rgba(255,255,255,.03), rgba(255,255,255,.02));display:grid;place-items:center;font-weight:900;color:var(--muted)
}

/* meta row */
.app-card .meta{display:flex;justify-content:space-between;align-items:center;gap:8px}
.app-card h3{font-size:1.05rem;margin:0;color:#fff}
.app-card p.desc{color:var(--muted-2);font-size:.96rem;line-height:1.35}

/* price badge and CTA */
.price-badge{padding:.35rem .6rem;border-radius:8px;background:linear-gradient(90deg,var(--accent4),var(--accent3));color:#fff;font-weight:900}
.app-card .cta-row{display:flex;gap:10px;align-items:center}
.app-card .btn-buy{background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;border:0;padding:.6rem .8rem;border-radius:10px;font-weight:900}

/* status overlay for coming soon / buy soon */
.app-card .status{
  position:absolute;right:12px;top:12px;padding:.25rem .6rem;border-radius:999px;background:linear-gradient(90deg,rgba(0,0,0,.45),rgba(0,0,0,.28));backdrop-filter:blur(4px);font-weight:800;border:1px solid rgba(255,255,255,.04)
}

/* badges for paid/free */
.badge-paid{background:linear-gradient(90deg,var(--accent4),var(--accent3));color:#fff}
.badge-free{background:linear-gradient(90deg, rgba(255,255,255,.03), rgba(255,255,255,.02)); color:var(--muted); border:1px solid rgba(255,255,255,.03)}

/* ===========================
   GAMES PAGE: large banners + grid + play overlays
   - Each game card can be wider (big banner) or compact
   - Primary flagship (Infinity Dash) receives .game-hero class
   =========================== */
.games-grid{display:grid;gap:18px;grid-template-columns:repeat(2,minmax(0,1fr))}
@media (max-width:980px){ .games-grid{grid-template-columns:1fr} }

/* big hero for flagship */
.game-hero{
  grid-column:1 / -1;padding:18px;border-radius:16px;background:linear-gradient(180deg, rgba(14,7,22,.6), rgba(14,7,22,.4));border:1px solid rgba(255,255,255,.04);
  display:flex;gap:18px;align-items:center;justify-content:space-between;overflow:hidden;
}
.game-hero .art{width:48%;min-width:260px;height:340px;border-radius:12px;background:linear-gradient(90deg,var(--accent3),var(--accent2));box-shadow:0 40px 120px rgba(138,80,255,.06)}
.game-hero .info{flex:1;min-width:260px}

/* compact game card */
.game-card{
  border-radius:12px;padding:12px;background:linear-gradient(180deg, rgba(255,255,255,.02), transparent);border:1px solid rgba(255,255,255,.04);display:flex;gap:12px;align-items:center;
}
.game-card .thumb{width:160px;height:90px;border-radius:8px;background:#000;flex:0 0 160px;border:1px solid rgba(255,255,255,.03)}
.game-card .meta{flex:1}

/* play overlay + controls */
.game-card .overlay-cta{display:flex;gap:8px;align-items:center}
.game-card .play-anim{width:56px;height:56px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(90deg,var(--accent1),var(--accent2));box-shadow:0 20px 60px rgba(58,200,255,.06)}

/* small screenshot modal on click (lightweight) */
.preview-modal .screenshot{max-width:min(900px,96vw);border-radius:12px;overflow:hidden}

/* ===========================
   TRAILER BOX with glow rings
   =========================== */
.trailer-box{
  position:relative;border-radius:14px;padding:12px;background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));
  border:1px solid rgba(255,255,255,.03);overflow:hidden;
}
.trailer-box .ring-decor{
  position:absolute;right:-60px;top:-60px;width:320px;height:320px;border-radius:50%;border:2px solid rgba(255,255,255,.04);filter:blur(24px);opacity:.24;animation:spin 20s linear infinite
}

/* ===========================
   COMMUNITY / COMMENTS (dummy comments)
   =========================== */
.comments-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.comment{
  padding:12px;border-radius:12px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));border:1px solid rgba(255,255,255,.03)
}
.comment .meta{display:flex;align-items:center;gap:10px}
.comment .avatar{width:44px;height:44px;border-radius:10px;background:linear-gradient(90deg,var(--accent1),var(--accent2));display:grid;place-items:center;color:#fff;font-weight:900}

/* ===========================
   FUTURE GOALS GRID (30 items)
   =========================== */
.future-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.future-item{padding:10px;border-radius:10px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));border:1px dashed rgba(255,255,255,.03)}

/* ===========================
   FOOTER EXTENSIONS: QUICK LINKS + SOCIAL ROW (10)
   =========================== */
.footer-quick{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;align-items:center}
.footer-social{display:flex;gap:8px;align-items:center}
.footer-social a{display:inline-grid;place-items:center;width:40px;height:40px;border-radius:10px;background:linear-gradient(90deg, rgba(255,255,255,.02), rgba(255,255,255,.01));border:1px solid rgba(255,255,255,.03)}

/* ===========================
   NAV / HEADER ANIMATIONS: make top nav less "stuck"
   - Add small floating micro-shadow under hovered nav item, and a sliding underline
   =========================== */
.main-nav a{transition:transform .22s var(--ease-fast), box-shadow .25s var(--ease-fast)}
.main-nav a:hover{transform:translateY(-3px);box-shadow:0 18px 40px rgba(58,200,255,.04)}
.main-nav a::after{height:3px;bottom:-10px;left:10px;right:10px;border-radius:6px}
.main-nav a.active::after{opacity:1;transform:translateY(0)}

/* ===========================
   LARGE SCROLL EFFECTS
   - section reveal on scroll using .reveal class
   =========================== */
.reveal{opacity:0;transform:translateY(20px);transition:all .8s var(--ease-mid)}
.reveal.is-visible{opacity:1;transform:none}

/* Intersection Observer helper classes for JS:
   - toggle .is-visible on .reveal elements when in viewport
*/

/* ===========================
   DETAILED ANIMATION VARIANTS (many)
   - glints, streaks, lens flares, sparkles, confetti-lite
   =========================== */

/* glint */
.glint{position:relative;overflow:hidden}
.glint::after{
  content:"";position:absolute;left:-30%;top:-10%;width:40%;height:200%;transform:skewX(-18deg);background:linear-gradient(90deg,transparent,rgba(255,255,255,.18),transparent);opacity:.6;transition:transform .9s ease;
}
.glint:hover::after{transform:translateX(140%) skewX(-18deg)}

/* streak */
.streak{position:relative;overflow:visible}
.streak::before{
  content:"";position:absolute;left:-10%;top:10%;width:6px;height:120%;background:linear-gradient(180deg,var(--accent1),transparent);opacity:.08;filter:blur(2px);
  transform:rotate(8deg);animation:streakMove 6s linear infinite;
}
@keyframes streakMove{0%{transform:translateX(0) rotate(8deg)}100%{transform:translateX(400px) rotate(8deg)}}

/* sparkle */
.sparkle{position:relative}
.sparkle::after{
  content:"";position:absolute;width:6px;height:6px;border-radius:50%;background:linear-gradient(90deg,var(--accent1),var(--accent2));opacity:.9;transform:translate(-10px,-10px);filter:blur(.8px);animation:spark 1.2s ease-in-out infinite;
}
@keyframes spark{0%{transform:scale(.6) translateY(0);opacity:.9}50%{transform:scale(1.1) translateY(-8px);opacity:.5}100%{transform:scale(.6) translateY(0);opacity:.9}}

/* ===========================
   PERFORMANCE / DEBUG CONTROLS
   - Add body.no-fx to disable heavy fx for tests
   - Add html.reduce-motion for user pref
   =========================== */
body.no-fx .vv-decor,
body.no-fx .fx-layer,
body.no-fx .custom-cursor,
body.no-fx .trail-dot{display:none!important}
html.reduce-motion *{animation:none!important;transition:none!important}

/* ===========================
   SMALL PRINT: HELPERS FOR SITEMAP / SEO BANNERS
   =========================== */
.schema-pill{display:inline-flex;gap:8px;align-items:center;padding:.35rem .6rem;border-radius:999px;background:linear-gradient(90deg,rgba(255,255,255,.02),rgba(255,255,255,.01));border:1px solid rgba(255,255,255,.03);font-weight:800}

/* ===========================
   LEGACY BROWSER / FALLBACK STYLES
   - Keep site usable even if some CSS features not supported
   =========================== */
@supports not (backdrop-filter: blur(8px)){
  .site-header{background:rgba(11,11,12,.98)}
  .logo img{filter:drop-shadow(0 12px 40px rgba(0,0,0,.4))}
}

/* ===========================
   READY-TO-GENERATE SNIPPET FOR JS (doc comment)
   - Use this JS pseudo-logic to generate hero decorations:
   - for i in 1..200 -> create span.vv-circle with style left/top/--size/--delay
   - for i in 1..300 -> create span.vv-dot ...
   - for i in 1..50 -> create span.vv-line style width/left/top/--delay
   - for i in 1..10 -> create span.vv-ring style left/top/--size/--delay
   - set smart randomization and avoid placing too many items in same small area
   =========================== */

/* ===========================
   PART 2 END — extension complete
   Next: I can produce the JS generator to create the decorative elements,
         plus page-level CSS expansion for EXACT 6000-lines if you insist.
   Tell me: Do you want the DOM-generation JS now? Do you want me to continue
   expanding CSS to hit a specific line-count (eg 6000 lines)? Or should I
   produce global.js part-2 with enhanced animation control and toggles?
   ========================================================================= */
/* ================================================================
   Global CSS — PART 3
   Homepage decorative shapes, community cards, neon playground,
   special effects sandbox and extra animation variants.
   Append this to assets/global.css
   ================================================================ */

/* ============================
   PREPARATORY: container for heavy decorative layers
   Usage: <div class="decor-layer" aria-hidden="true"></div>
   JS will populate with .vv-dot, .vv-micro, .vv-line, .vv-ring, .vv-circle-large
   ============================ */
.decor-layer{
  position:absolute; inset:0; pointer-events:none; z-index:0; overflow:hidden;
  mix-blend-mode:screen; will-change:transform,opacity;
}

/* =================================================
   200 CIRCLES (class: .vv-dot)
   - use JS to create 200 nodes with random positions,
     add style like inline left/top/animation-delay/animation-duration
   Example DOM generated: <span class="vv-dot dot-001" style="left:12%;top:34%;animation-delay:0.3s;opacity:.14"></span>
   ================================================= */
.vv-dot{ /* already defined in global, refine variants here */
  width:7px;height:7px;border-radius:50%;background:radial-gradient(circle,var(--accent2),transparent 60%);
  opacity:.12;filter:blur(.6px);position:absolute;transform-origin:center;z-index:0;
  animation:vvDotFloat linear infinite;
}
.vv-dot.small{width:4px;height:4px;opacity:.08}
.vv-dot.big{width:12px;height:12px;opacity:.18;filter:blur(1.2px)}
@keyframes vvDotFloat{0%{transform:translateY(0) scale(1)}50%{transform:translateY(-22px) scale(.95)}100%{transform:translateY(0) scale(1)}}

/* =================================================
   300 MICRO DOTS (class: .vv-micro)
   - very lightweight, often static or slow-moving
   ================================================= */
.vv-micro{width:2px;height:2px;border-radius:50%;position:absolute;background:rgba(255,255,255,.12);opacity:.06;z-index:0;animation:vvMicroFloat linear infinite}
.vv-micro.slow{animation-duration:20s}
.vv-micro.fast{animation-duration:10s}
@keyframes vvMicroFloat{0%{transform:translateY(0)}100%{transform:translateY(-80vh)}}

/* =================================================
   50 LINES (class: .vv-line)
   - thin neon strokes at random angles, slightly blurred
   ================================================= */
.vv-line{position:absolute;height:2px;border-radius:6px;opacity:.08;filter:blur(.6px);z-index:0;background:linear-gradient(90deg,var(--accent1),var(--accent2));transform-origin:left center}
.vv-line.thick{height:3px;opacity:.12}
.vv-line.pulse{animation:vvLinePulse 6s ease-in-out infinite}
@keyframes vvLinePulse{0%{transform:scaleX(.88)}50%{transform:scaleX(1.06)}100%{transform:scaleX(.88)}}

/* =================================================
   10 RINGS (class: .vv-ring)
   - pulsing rings around hero/trailer
   ================================================= */
.vv-ring{width:160px;height:160px;border-radius:50%;border:2px solid rgba(255,255,255,.06);position:absolute;opacity:.22;z-index:0;filter:blur(6px)}
.vv-ring.small{width:90px;height:90px;opacity:.16}
.vv-ring.large{width:260px;height:260px;opacity:.28}
.vv-ring.pulse-slow{animation:vvRingSlow 9s ease-in-out infinite}
@keyframes vvRingSlow{0%{transform:scale(.94);opacity:.32}50%{transform:scale(1.08);opacity:.10}100%{transform:scale(.94);opacity:.32}}

/* =================================================
   Big blurred color circles (class: .vv-circle-large)
   - use as background blobs
   ================================================= */
.vv-circle-large{
  width:420px;height:420px;border-radius:50%;position:absolute;filter:blur(80px);opacity:.08;mix-blend-mode:screen;z-index:0;
  background:radial-gradient(circle, rgba(142,91,255,.28), rgba(58,200,255,.12) 40%, transparent 70%);
  animation:vvCircleDrift 20s linear infinite;
}
.vv-circle-large.alt{
  background:radial-gradient(circle, rgba(255,83,160,.26), rgba(142,91,255,.12) 40%, transparent 70%);
  animation-duration:24s;
}
@keyframes vvCircleDrift{0%{transform:translateY(0) scale(1)}50%{transform:translateY(-40px) scale(1.03)}100%{transform:translateY(0) scale(1)}}

/* =================================================
   JS-based generator advice (NOT code): create elements like:
   for i in 1..200: dot = document.createElement('span'); dot.className='vv-dot dot-'+i; dot.style.left = rnd% + '%'; dot.style.top = rnd% + '%'; dot.style.animationDuration=rnd(8..22)+'s'; dot.style.animationDelay=rnd(0..6)+'s'; append to .decor-layer
   ================================================= */

/* ============================
   CURSOR TRAILS / GLOW VARIANTS
   - Additional classes to control trail size, color & intensity
   ============================ */
.trail-dot.xs{width:4px;height:4px;opacity:.08}
.trail-dot.sm{width:6px;height:6px;opacity:.12}
.trail-dot.md{width:8px;height:8px;opacity:.18}
.trail-dot.lg{width:12px;height:12px;opacity:.22}
.trail-dot.gradient{background:linear-gradient(90deg,var(--accent1),var(--accent2));box-shadow:0 8px 30px rgba(58,200,255,.06)}
.custom-cursor .dot.big{width:14px;height:14px;box-shadow:0 18px 60px rgba(58,200,255,.12)}

/* make ring respond to hover and clicks */
.custom-cursor .ring.active{transform:scale(1.2);opacity:1;transition:transform .14s var(--ease-fast),opacity .18s}
.click-burst{
  position:absolute;pointer-events:none;border-radius:50%;transform:translate(-50%,-50%);z-index:99999;
  background:radial-gradient(circle, rgba(255,255,255,.9), rgba(255,255,255,.05) 30%, transparent 60%);
  width:6px;height:6px;opacity:.9;animation:burst 600ms ease-out forwards;
}
@keyframes burst{0%{transform:scale(.6);opacity:.9}100%{transform:scale(18);opacity:0}}

/* ============================
   COMMUNITY COMMENTS — DUMMY LIST (100 cards)
   - Use server-side to render 100 comment cards or JS to clone a template.
   - Classes: .community-grid .comment-card
   ============================ */
.community-grid{display:grid;gap:12px;grid-template-columns:repeat(3, minmax(0,1fr))}
@media (max-width:1100px){ .community-grid{grid-template-columns:repeat(2, minmax(0,1fr))} }
@media (max-width:720px){ .community-grid{grid-template-columns:1fr} }

.comment-card{
  background:linear-gradient(180deg, rgba(255,255,255,.015), rgba(255,255,255,.01));
  border-radius:12px;padding:12px;border:1px solid rgba(255,255,255,.04);
  display:flex;gap:10px;align-items:flex-start;box-shadow:0 10px 30px rgba(0,0,0,.45);
}
.comment-card .avatar{
  width:48px;height:48px;border-radius:50%;background:linear-gradient(120deg,var(--accent1),var(--accent2));flex:0 0 48px;box-shadow:0 8px 28px rgba(0,0,0,.4)
}
.comment-card .meta{flex:1}
.comment-card .meta h4{font-size:.98rem;margin-bottom:4px;color:#fff}
.comment-card .meta p{font-size:.88rem;opacity:.9}

/* quick skeleton for loading */
.comment-card.skeleton{opacity:.4}
.comment-card .dot{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.04);}

/* ============================
   NEON SHAPES PLAYGROUND (50 items)
   - Reusable playground card, place logos inside glowing boxes
   ============================ */
.playground{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.play-card{
  position:relative;padding:14px;border-radius:12px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.01));
  border:1px solid rgba(255,255,255,.04);box-shadow:0 18px 50px rgba(0,0,0,.5);
}
.play-card .logo-slot{
  width:86px;height:86px;border-radius:18px;background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));
  border:1px solid rgba(255,255,255,.04);display:flex;align-items:center;justify-content:center;margin-bottom:10px;box-shadow:0 10px 40px rgba(0,0,0,.4)
}
.play-card .logo-slot.glow{box-shadow:0 20px 80px rgba(138,80,255,.12), 0 6px 18px rgba(58,200,255,.06)}

/* ============================
   SPECIAL EFFECTS SANDBOX CARDS (20 cards)
   - Each card demonstrates a small effect (hologram, chroma, glitch, glass, scanline)
   - Use classes: .sandbox .effect-holo, .effect-glass, .effect-glitch, .effect-scan
   ============================ */
.sandbox{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.sandbox .card{min-height:140px;display:flex;flex-direction:column;justify-content:center;align-items:center}

/* hologram */
.effect-holo{
  background:linear-gradient(180deg, rgba(142,91,255,.04), rgba(58,200,255,.02));
  border:1px solid rgba(255,255,255,.03);color:#fff;position:relative;overflow:hidden;
}
.effect-holo::after{
  content:"";position:absolute;left:-30%;top:-40%;width:160%;height:120%;background:linear-gradient(120deg, rgba(255,255,255,.06), rgba(255,255,255,0) 40%);transform:rotate(-25deg);filter:blur(14px);opacity:.65;animation:holoSlide 6s linear infinite;
}
@keyframes holoSlide{0%{transform:translateX(-100%) rotate(-25deg)}100%{transform:translateX(100%) rotate(-25deg)}}

/* glass */
.effect-glass{background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));backdrop-filter: blur(8px);border:1px solid rgba(255,255,255,.04)}

/* glitch (text inside card) */
.effect-glitch{position:relative;color:#fff;overflow:hidden}
.effect-glitch .gtext{position:relative;font-weight:900}
.effect-glitch .gtext::before, .effect-glitch .gtext::after{
  content:attr(data-text);position:absolute;left:0;top:0;opacity:.6;mix-blend-mode:screen;
}
.effect-glitch .gtext::before{color:var(--accent1);transform:translate(2px,-1px);clip-path:polygon(0 0,100% 0,100% 45%,0 45%);animation:glitchA .95s linear infinite}
.effect-glitch .gtext::after{color:var(--accent2);transform:translate(-2px,2px);clip-path:polygon(0 55%,100% 55%,100% 100%,0 100%);animation:glitchB 1.2s linear infinite}
@keyframes glitchA{0%{transform:translate(2px,-1px)}50%{transform:translate(-1px,1px)}100%{transform:translate(2px,-1px)}}
@keyframes glitchB{0%{transform:translate(-2px,2px)}50%{transform:translate(1px,-1px)}100%{transform:translate(-2px,2px)}}

/* scanlines */
.effect-scan{background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));position:relative}
.effect-scan::before{
  content:"";position:absolute;inset:0;background-image:linear-gradient(rgba(0,0,0,.02) 1px, transparent 1px);background-size:100% 3px;opacity:.12;pointer-events:none;
}

/* ============================
   HERO TRAILER BOX with glow rings
   ============================ */
.trailer-box{
  position:relative;border-radius:16px;padding:14px;border:1px solid rgba(255,255,255,.04);background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));
  box-shadow:0 20px 60px rgba(0,0,0,.6);
}
.trailer-box .rings{position:absolute;inset:0;pointer-events:none;z-index:0}
.trailer-box .rings .ring{position:absolute;border-radius:50%;border:2px solid rgba(255,255,255,.03);filter:blur(8px);opacity:.18;animation:ringFloat 7s linear infinite}
.trailer-box .content{position:relative;z-index:1}
@keyframes ringFloat{0%{transform:scale(.98)}50%{transform:scale(1.06)}100%{transform:scale(.98)}}

/* ============================
   STAGGERED ANIMATION HELPERS
   - Helpful utility classes to add easy stagger: .stagger > * { --i: index; animation-delay: calc(var(--i) * 80ms); }
   ============================ */
.stagger > *{opacity:0;transform:translateY(10px);animation:staggerIn .54s var(--ease-mid) forwards;animation-delay:var(--delay,0s)}
@keyframes staggerIn{to{opacity:1;transform:none}}

/* helper to set delay per child via inline style or JS */
[data-delay="0"]{--delay:0s}[data-delay="1"]{--delay:.08s}[data-delay="2"]{--delay:.16s}[data-delay="3"]{--delay:.24s}[data-delay="4"]{--delay:.32s}

/* ============================
   BIG CTA / LINK HOVER FX
   - Advanced hover: spotlight, glows
   ============================ */
.cta-spot{
  position:relative;display:inline-block;padding:.8rem 1.1rem;border-radius:12px;background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;font-weight:900;overflow:hidden;
}
.cta-spot::after{
  content:"";position:absolute;left:-40px;top:-40px;width:120px;height:120px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.18),transparent 40%);opacity:.6;transform:translate(0,0);transition:transform .6s var(--ease-mid)
}
.cta-spot:hover::after{transform:translate(120px,40px)}

/* ============================
   LIGHTWEIGHT CSS-ONLY LOADING INDICATOR
   ============================ */
.loader-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:linear-gradient(90deg,var(--accent1),var(--accent2));animation:loaderJump .9s infinite}
@keyframes loaderJump{0%{transform:translateY(0)}50%{transform:translateY(-8px)}100%{transform:translateY(0)}}

/* ============================
   EXTRA: Micro-interactions for form buttons
   ============================ */
.btn-press{
  transition:transform .12s cubic-bezier(.2,.9,.3,1), box-shadow .12s;
}
.btn-press:active{transform:translateY(2px) scale(.998);box-shadow:none}

/* ============================
   PERFORMANCE TUNING: heavy effect toggles
   - Add .heavy-fx on body to enable super-intense animations (for demos)
   - Add .no-fx to disable for low-end devices
   ============================ */
body.heavy-fx .vv-dot{opacity:.18;filter:blur(.4px)}
body.heavy-fx .vv-micro{opacity:.14}
body.no-fx .vv-dot, body.no-fx .vv-micro, body.no-fx .vv-line, body.no-fx .vv-ring, body.no-fx .vv-circle-large, body.no-fx .fx-layer, body.no-fx .custom-cursor { display:none !important; }

/* ============================
   MOBILE SPECIFIC: shrink decorative and reduce CPU tax
   ============================ */
@media (max-width:640px){
  /* hide most decorative elements */
  .decor-layer, .vv-dot, .vv-micro, .vv-line, .vv-ring, .vv-circle-large, .neon-grid { display:none !important; }
  .hero{padding:14px}
  .play-btn{width:64px;height:64px}
  .play-btn .triangle{border-left:14px solid #fff}
  .logo img{width:120px}
  .community-grid{grid-template-columns:1fr}
}

/* ============================
   END PART 3
   If you want, I will now:
     • Provide the JS Part (generator) to spawn 200 circles/300 dots/50 lines/10 rings with performance tuning (recommended)
     • Append Part 4: Site-wide page-level blocks (apps list cards 25x, games list 7x pre-styled)
     • Expand until we reach exact target lines (e.g., +3000 lines)
   Tell me which of those to attach next — I will output the full code immediately.
*/
/* ================================================================
   Global CSS — PART 4
   Apps & Games layout, footer, newsletter, pricing, buy modal,
   deep responsive rules, additional polish and small utilities.
   Append to assets/global.css
   ================================================================ */

/* ===========================
   APPS PAGE: top banner + grid
   =========================== */
.apps-hero{
  margin:20px 0;padding:28px;border-radius:16px;position:relative;
  background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));
  border:1px solid rgba(255,255,255,.04);box-shadow:var(--shadow-1);
}
.apps-hero .title{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.apps-hero h1{font-size:clamp(1.6rem,3vw,2.4rem);margin-bottom:6px}
.apps-hero p{opacity:.88}

/* apps-grid 25 cards (responsive) */
.apps-grid{
  display:grid;
  grid-template-columns:repeat(5, minmax(0,1fr));
  gap:16px;
  margin-top:18px;
}
@media (max-width:1300px){ .apps-grid{grid-template-columns:repeat(4, minmax(0,1fr))} }
@media (max-width:1000px){ .apps-grid{grid-template-columns:repeat(3, minmax(0,1fr))} }
@media (max-width:720px){ .apps-grid{grid-template-columns:repeat(2, minmax(0,1fr))} }
@media (max-width:420px){ .apps-grid{grid-template-columns:1fr} }

/* per app card */
.app-card{
  position:relative;padding:14px;border-radius:14px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));
  border:1px solid rgba(255,255,255,.04);box-shadow:0 16px 44px rgba(0,0,0,.5);overflow:hidden;transition:transform .22s var(--ease-fast);
}
.app-card:hover{transform:translateY(-8px);box-shadow:0 28px 80px rgba(0,0,0,.6)}
.app-card .logo-wrap{display:flex;align-items:center;gap:12px}
.logo-slot-lg{
  width:112px;height:112px;border-radius:18px;background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));
  border:1px solid rgba(255,255,255,.04);display:flex;align-items:center;justify-content:center;
  box-shadow:0 18px 60px rgba(0,0,0,.5);
}
.logo-slot-lg img{max-width:86%;max-height:86%;display:block}

/* title & meta */
.app-card h3{font-size:1.05rem;margin-top:10px;color:#fff}
.app-card p.desc{font-size:.92rem;opacity:.9;margin-top:8px;min-height:48px}

/* CTA row: download / buy / coming soon */
.app-card .cta-row{display:flex;gap:8px;align-items:center;margin-top:12px;flex-wrap:wrap}
.app-price{padding:.45rem .7rem;border-radius:10px;background:linear-gradient(90deg,var(--accent3),var(--accent4));color:#fff;font-weight:900}
.app-buy{padding:.42rem .7rem;border-radius:10px;background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;border:0;cursor:pointer}
.app-soon{padding:.38rem .6rem;border-radius:10px;border:1px dashed rgba(255,255,255,.04);color:var(--muted);font-weight:800}

/* badge for paid/free */
.badge-paid{background:linear-gradient(90deg,var(--accent4),#ff9aa3);color:#fff;padding:.3rem .5rem;border-radius:8px;font-weight:900}
.badge-free{background:linear-gradient(90deg,#0f0f15,#111217);color:var(--muted);padding:.3rem .5rem;border-radius:8px;border:1px solid rgba(255,255,255,.03);font-weight:900}

/* ===========================
   APPS: detailed modal (for buy / info)
   =========================== */
.app-modal .dialog{max-width:820px;padding:18px;display:grid;grid-template-columns:220px 1fr;gap:16px}
.app-modal .dialog .left{display:flex;flex-direction:column;gap:12px;align-items:center}
.app-modal .dialog img{width:180px;height:180px;border-radius:14px;object-fit:cover}
.app-modal .dialog .right h2{font-size:1.4rem;margin-bottom:6px}
.app-modal .dialog .right p{opacity:.9}
.app-modal .meta-row{display:flex;gap:12px;flex-wrap:wrap;margin-top:10px}
.app-modal .buy-actions{display:flex;gap:10px;align-items:center;margin-top:12px}

/* buy success state */
.app-modal .success{background:linear-gradient(90deg,#34d399,#10b981);color:#fff;padding:.6rem;border-radius:10px;font-weight:900;display:inline-block}

/* ===========================
   GAMES PAGE: big banners, 2-per-row layout
   =========================== */
.games-hero{margin:20px 0;padding:20px;border-radius:16px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));border:1px solid rgba(255,255,255,.04)}
.games-grid{
  display:grid;gap:18px;grid-template-columns:repeat(2,minmax(0,1fr));
}
@media (max-width:980px){ .games-grid{grid-template-columns:1fr} }

/* game card large */
.game-card{
  position:relative;border-radius:16px;padding:18px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));border:1px solid rgba(255,255,255,.04);
  box-shadow:0 22px 80px rgba(0,0,0,.6);
}
.game-card .game-art{height:220px;border-radius:12px;overflow:hidden;background:#000;display:flex;align-items:center;justify-content:center}
.game-card .game-art img{width:100%;height:100%;object-fit:cover}

/* play overlay */
.game-card .overlay-controls{display:flex;gap:8px;align-items:center;margin-top:12px}
.game-card .overlay-controls .play{padding:.55rem .8rem;border-radius:10px;background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;font-weight:900}
.game-card .overlay-controls .restart{padding:.45rem .7rem;border-radius:10px;border:1px solid rgba(255,255,255,.04);background:rgba(255,255,255,.02);color:var(--muted);font-weight:900}
.game-card .overlay-controls .full{padding:.45rem .7rem;border-radius:10px;background:linear-gradient(90deg,#6a5aff,#3ac8ff);color:#fff;font-weight:900}

/* per-game score and best */
.game-meta{display:flex;gap:12px;align-items:center;margin-top:10px}
.game-meta .best{font-weight:900;background:rgba(255,255,255,.02);padding:.38rem .6rem;border-radius:8px;color:var(--muted)}

/* ===========================
   FOOTER: logo intro, quick links, social links, newsletter, bottom bar
   =========================== */
.footer-grid{display:grid;grid-template-columns:300px 1fr 320px;gap:18px;padding:28px;border-radius:12px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));border:1px solid rgba(255,255,255,.03);margin-top:28px}
@media (max-width:980px){ .footer-grid{grid-template-columns:1fr} }

.footer-logo{display:flex;align-items:center;gap:12px}
.footer-logo img{width:130px}
.footer-quick{display:flex;gap:12px;flex-wrap:wrap}
.footer-quick a{display:inline-block;padding:.4rem .6rem;border-radius:10px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.03);font-weight:800;color:var(--muted)}

/* social links row (10 icons) */
.social-row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.social-row a{width:44px;height:44px;border-radius:10px;background:linear-gradient(180deg,rgba(255,255,255,.02),transparent);display:grid;place-items:center;border:1px solid rgba(255,255,255,.03)}
.social-row a:hover{transform:translateY(-4px);box-shadow:0 18px 60px rgba(58,200,255,.06)}

/* newsletter form */
.newsletter{display:flex;gap:8px;align-items:center}
.newsletter input{flex:1;padding:.6rem;border-radius:10px}
.newsletter button{padding:.6rem .85rem;border-radius:10px;background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;border:0;font-weight:900}

/* bottom small bar */
.bottom-bar{margin-top:10px;padding:12px;text-align:center;font-size:.92rem;color:rgba(236,236,245,.6);border-top:1px solid rgba(255,255,255,.02)}

/* ===========================
   SITE WIDE: QUICK PLUGINS/SEO BAR (meta manager)
   - simple bar to show SEO score, (dev only)
   =========================== */
.seo-bar{position:fixed;left:12px;bottom:12px;padding:10px;border-radius:10px;background:linear-gradient(180deg, rgba(0,0,0,.6), rgba(0,0,0,.4));border:1px solid rgba(255,255,255,.04);z-index:99999;display:flex;gap:8px;align-items:center}
.seo-bar .dot{width:8px;height:8px;border-radius:50%;background:var(--success)}

/* ===========================
   SMALL PLUGINS: LIGHTBOX / MEDIA
   =========================== */
.lightbox{
  position:fixed;inset:0;display:grid;place-items:center;background:rgba(0,0,0,.7);z-index:999999;opacity:0;pointer-events:none;transition:opacity .18s ease;
}
.lightbox.open{opacity:1;pointer-events:auto}
.lightbox .media{max-width:920px;width:90%;max-height:90%}

/* ===========================
   LANGUAGES / PRICING / MONETIZATION HELPERS
   =========================== */
.price-row{display:flex;gap:10px;align-items:center}
.price-old{opacity:.6;text-decoration:line-through;padding:.2rem .5rem;border-radius:8px;background:rgba(255,255,255,.02)}
.price-now{font-weight:900;padding:.3rem .6rem;border-radius:8px;background:linear-gradient(90deg,var(--accent3),var(--accent4));color:#fff}

/* coupon style */
.coupon{padding:.35rem .6rem;border-radius:8px;background:linear-gradient(90deg, rgba(58,200,255,.06), rgba(142,91,255,.04));border:1px solid rgba(255,255,255,.03);font-weight:900}

/* ===========================
   SEO / PERFORMANCE: preconnect hints (for HTML head)
   ===========================
   (Just FYI — Add in your <head>:
   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
   <link rel="preconnect" href="https://www.google-analytics.com">
   )
   =========================== */

/* ===========================
   FINAL RESPONSIVE REFINEMENTS
   =========================== */
@media (max-width:720px){
  .apps-grid{grid-template-columns:repeat(2,1fr)}
  .footer-grid{padding:18px}
  .logo img{width:120px}
  .play-btn{width:64px;height:64px}
}

/* ===========================
   END PART 4
   - After this we can:
     • Generate JS Part — which will auto-spawn decorative shapes, hero slider, lazy-load heavy elements, and gracefully degrade on mobile.
     • Expand CSS further to create unique per-app/game CSS blocks (25 apps + 7 games fully pre-styled).
     • Create animations.css separate file if you want to keep global.css slimmer.
   ================================================================ */
/* ================================================================
   Global CSS — PART 5
   APPS: 25 PRE-STYLED CARDS + MODALS + PER-CARD THEMES
   Append this to assets/global.css
   ================================================================ */

/* ---------------------------
   HTML structure expected:
   <section class="apps-section container">
     <div class="apps-hero">...banner...</div>
     <div class="apps-grid">
       <article class="app-card">
         <div class="logo-slot-lg"><img src="assets/apps/app1.png" alt=""></div>
         <div class="app-meta">
           <h3 class="app-title">AI Photo Enhancer</h3>
           <p class="desc">Short description — coming soon / features.</p>
           <div class="cta-row">
             <span class="app-price">₹300</span>
             <button class="app-buy" data-action="open" data-url="/apps/ai-photo-enhancer.html">Buy Now</button>
             <button class="app-soon">Download</button>
           </div>
         </div>
       </article>
       <!-- repeat for 25 -->
     </div>
   </section>
   --------------------------- */

/* container tweak for apps */
.apps-section{margin-top:26px}
.apps-section .apps-hero{margin-bottom:12px}

/* CARD BASE */
.apps-grid .app-card{
  display:grid;
  grid-template-columns:120px 1fr;
  gap:12px;
  align-items:center;
  transition:transform .28s var(--ease-mid), box-shadow .28s var(--ease-mid), border-color .28s var(--ease-mid);
  position:relative;
  overflow:visible;
}
.apps-grid .app-card .logo-slot-lg{
  width:120px;height:120px;border-radius:16px;display:flex;align-items:center;justify-content:center;
  border:1px solid rgba(255,255,255,.04);background:linear-gradient(180deg, rgba(255,255,255,.02), rgba(255,255,255,.01));
  box-shadow:0 18px 60px rgba(0,0,0,.5);flex-shrink:0;position:relative;z-index:2;
}
.apps-grid .app-card img{max-width:86%;max-height:86%;display:block;border-radius:10px;object-fit:contain}

/* meta + text */
.apps-grid .app-card .app-meta{padding-right:10px;padding-left:6px}
.apps-grid .app-card .app-title{font-weight:900;font-size:1.05rem;color:#fff;margin-bottom:6px}
.apps-grid .app-card .desc{font-size:.94rem;opacity:.9;color:var(--muted-2);min-height:44px;margin-bottom:8px}

/* CTA row inside card */
.apps-grid .app-card .cta-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.app-price{font-weight:900;padding:.36rem .6rem;border-radius:10px;background:linear-gradient(90deg,var(--accent3),var(--accent4));color:#fff;font-size:.95rem}
.app-buy{padding:.46rem .7rem;border-radius:10px;border:0;background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;font-weight:900;cursor:pointer;box-shadow:0 14px 40px rgba(58,200,255,.06);transition:transform .14s var(--ease-fast)}
.app-buy:hover{transform:translateY(-4px)}
.app-download{padding:.42rem .7rem;border-radius:10px;background:rgba(255,255,255,.03);border:1px solid rgba(255,255,255,.04);color:var(--muted);font-weight:800}
.app-soon{padding:.38rem .6rem;border-radius:10px;border:1px dashed rgba(255,255,255,.05);color:var(--muted);font-weight:900;background:transparent}

/* ribbon / promo */
.app-card .ribbon{
  position:absolute;right:12px;top:12px;padding:.28rem .56rem;border-radius:999px;background:linear-gradient(90deg,#ffcc66,#ff5a6c);
  font-weight:900;color:#111;z-index:5;box-shadow:0 10px 30px rgba(255,90,110,.08)
}

/* hover effects */
.apps-grid .app-card:hover{transform:translateY(-10px);box-shadow:0 36px 100px rgba(0,0,0,.7)}
.apps-grid .app-card:focus-within{outline:2px solid rgba(58,200,255,.12);outline-offset:4px}

/* accessibility: focus */
.app-buy:focus, .app-soon:focus, .app-download:focus{box-shadow:0 10px 40px rgba(58,200,255,.08);outline:none}

/* small screens: stack */
@media (max-width:720px){
  .apps-grid .app-card{grid-template-columns:90px 1fr;padding:12px}
  .apps-grid .app-card .logo-slot-lg{width:90px;height:90px}
  .app-price{font-size:.9rem}
}

/* ===========================
   APPS GRID LAYOUT (25 cards responsive)
   =========================== */
.apps-grid{
  display:grid;
  grid-template-columns:repeat(5, minmax(0,1fr));
  gap:18px;
}
@media (max-width:1400px){ .apps-grid{grid-template-columns:repeat(4, minmax(0,1fr))} }
@media (max-width:1100px){ .apps-grid{grid-template-columns:repeat(3, minmax(0,1fr))} }
@media (max-width:760px){ .apps-grid{grid-template-columns:repeat(2, minmax(0,1fr))} }
@media (max-width:420px){ .apps-grid{grid-template-columns:1fr} }

/* ===========================
   PER-CARD THEMES: 25 variants (using nth-child)
   - each variant tweaks logo-slot gradient & small decorative pseudo-element
   =========================== */

/* helper to set subtle gradient behind logo-slot */
.apps-grid .app-card::after{
  content:"";position:absolute;inset:auto 12px 12px 12px;border-radius:12px;opacity:0;z-index:0;pointer-events:none;transition:opacity .28s,var(--transform) .28s;
}
/* Variant 1 */
.apps-grid .app-card:nth-child(1) .logo-slot-lg{background:linear-gradient(180deg, rgba(254,94,255,.08), rgba(58,200,255,.03));border:1px solid rgba(254,94,255,.06)}
.apps-grid .app-card:nth-child(1)::after{background:radial-gradient(circle, rgba(254,94,255,.05), transparent 40%);opacity:.7}

/* Variant 2 */
.apps-grid .app-card:nth-child(2) .logo-slot-lg{background:linear-gradient(180deg, rgba(58,200,255,.08), rgba(142,91,255,.03));border:1px solid rgba(58,200,255,.06)}
.apps-grid .app-card:nth-child(2)::after{background:radial-gradient(circle, rgba(58,200,255,.05), transparent 40%);opacity:.6}

/* Variant 3 */
.apps-grid .app-card:nth-child(3) .logo-slot-lg{background:linear-gradient(180deg, rgba(138,80,255,.08), rgba(255,83,160,.03));border:1px solid rgba(138,80,255,.06)}
.apps-grid .app-card:nth-child(3)::after{background:radial-gradient(circle, rgba(138,80,255,.05), transparent 40%);opacity:.6}

/* Variant 4 */
.apps-grid .app-card:nth-child(4) .logo-slot-lg{background:linear-gradient(180deg, rgba(255,83,160,.08), rgba(255,120,88,.03));border:1px solid rgba(255,83,160,.06)}
.apps-grid .app-card:nth-child(4)::after{background:radial-gradient(circle, rgba(255,83,160,.05), transparent 40%);opacity:.6}

/* Variant 5 */
.apps-grid .app-card:nth-child(5) .logo-slot-lg{background:linear-gradient(180deg, rgba(54,210,179,.08), rgba(58,200,255,.03));border:1px solid rgba(54,210,179,.06)}
.apps-grid .app-card:nth-child(5)::after{background:radial-gradient(circle, rgba(54,210,179,.05), transparent 40%);opacity:.6}

/* Variant 6 */
.apps-grid .app-card:nth-child(6) .logo-slot-lg{background:linear-gradient(180deg, rgba(255,199,80,.08), rgba(255,102,102,.03));border:1px solid rgba(255,199,80,.06)}
.apps-grid .app-card:nth-child(6)::after{background:radial-gradient(circle, rgba(255,199,80,.05), transparent 40%);opacity:.6}

/* Variant 7 */
.apps-grid .app-card:nth-child(7) .logo-slot-lg{background:linear-gradient(180deg, rgba(120,100,255,.08), rgba(58,200,255,.03));border:1px solid rgba(120,100,255,.06)}
.apps-grid .app-card:nth-child(7)::after{background:radial-gradient(circle, rgba(120,100,255,.05), transparent 40%);opacity:.6}

/* Variant 8 */
.apps-grid .app-card:nth-child(8) .logo-slot-lg{background:linear-gradient(180deg, rgba(255,120,200,.08), rgba(142,91,255,.03));border:1px solid rgba(255,120,200,.06)}
.apps-grid .app-card:nth-child(8)::after{background:radial-gradient(circle, rgba(255,120,200,.05), transparent 40%);opacity:.6}

/* Variant 9 */
.apps-grid .app-card:nth-child(9) .logo-slot-lg{background:linear-gradient(180deg, rgba(60,140,255,.08), rgba(58,200,255,.03));border:1px solid rgba(60,140,255,.06)}
.apps-grid .app-card:nth-child(9)::after{background:radial-gradient(circle, rgba(60,140,255,.05), transparent 40%);opacity:.6}

/* Variant 10 */
.apps-grid .app-card:nth-child(10) .logo-slot-lg{background:linear-gradient(180deg, rgba(255,80,120,.08), rgba(255,140,60,.03));border:1px solid rgba(255,80,120,.06)}
.apps-grid .app-card:nth-child(10)::after{background:radial-gradient(circle, rgba(255,80,120,.05), transparent 40%);opacity:.6}

/* Variant 11 */
.apps-grid .app-card:nth-child(11) .logo-slot-lg{background:linear-gradient(180deg, rgba(88,200,120,.08), rgba(58,200,255,.03));border:1px solid rgba(88,200,120,.06)}
.apps-grid .app-card:nth-child(11)::after{background:radial-gradient(circle, rgba(88,200,120,.05), transparent 40%);opacity:.6}

/* Variant 12 */
.apps-grid .app-card:nth-child(12) .logo-slot-lg{background:linear-gradient(180deg, rgba(255,200,120,.08), rgba(255,140,130,.03));border:1px solid rgba(255,200,120,.06)}
.apps-grid .app-card:nth-child(12)::after{background:radial-gradient(circle, rgba(255,200,120,.05), transparent 40%);opacity:.6}

/* Variant 13 */
.apps-grid .app-card:nth-child(13) .logo-slot-lg{background:linear-gradient(180deg, rgba(200,120,255,.08), rgba(58,200,255,.03));border:1px solid rgba(200,120,255,.06)}
.apps-grid .app-card:nth-child(13)::after{background:radial-gradient(circle, rgba(200,120,255,.05), transparent 40%);opacity:.6}

/* Variant 14 */
.apps-grid .app-card:nth-child(14) .logo-slot-lg{background:linear-gradient(180deg, rgba(90,180,255,.08), rgba(142,91,255,.03));border:1px solid rgba(90,180,255,.06)}
.apps-grid .app-card:nth-child(14)::after{background:radial-gradient(circle, rgba(90,180,255,.05), transparent 40%);opacity:.6}

/* Variant 15 */
.apps-grid .app-card:nth-child(15) .logo-slot-lg{background:linear-gradient(180deg, rgba(255,120,80,.08), rgba(255,80,120,.03));border:1px solid rgba(255,120,80,.06)}
.apps-grid .app-card:nth-child(15)::after{background:radial-gradient(circle, rgba(255,120,80,.05), transparent 40%);opacity:.6}

/* Variant 16 */
.apps-grid .app-card:nth-child(16) .logo-slot-lg{background:linear-gradient(180deg, rgba(80,200,220,.08), rgba(120,90,255,.03));border:1px solid rgba(80,200,220,.06)}
.apps-grid .app-card:nth-child(16)::after{background:radial-gradient(circle, rgba(80,200,220,.05), transparent 40%);opacity:.6}

/* Variant 17 */
.apps-grid .app-card:nth-child(17) .logo-slot-lg{background:linear-gradient(180deg, rgba(170,220,120,.08), rgba(58,200,255,.03));border:1px solid rgba(170,220,120,.06)}
.apps-grid .app-card:nth-child(17)::after{background:radial-gradient(circle, rgba(170,220,120,.05), transparent 40%);opacity:.6}

/* Variant 18 */
.apps-grid .app-card:nth-child(18) .logo-slot-lg{background:linear-gradient(180deg, rgba(255,140,200,.08), rgba(142,91,255,.03));border:1px solid rgba(255,140,200,.06)}
.apps-grid .app-card:nth-child(18)::after{background:radial-gradient(circle, rgba(255,140,200,.05), transparent 40%);opacity:.6}

/* Variant 19 */
.apps-grid .app-card:nth-child(19) .logo-slot-lg{background:linear-gradient(180deg, rgba(120,255,210,.08), rgba(58,200,255,.03));border:1px solid rgba(120,255,210,.06)}
.apps-grid .app-card:nth-child(19)::after{background:radial-gradient(circle, rgba(120,255,210,.05), transparent 40%);opacity:.6}

/* Variant 20 */
.apps-grid .app-card:nth-child(20) .logo-slot-lg{background:linear-gradient(180deg, rgba(220,160,255,.08), rgba(255,120,80,.03));border:1px solid rgba(220,160,255,.06)}
.apps-grid .app-card:nth-child(20)::after{background:radial-gradient(circle, rgba(220,160,255,.05), transparent 40%);opacity:.6}

/* Variant 21 */
.apps-grid .app-card:nth-child(21) .logo-slot-lg{background:linear-gradient(180deg, rgba(255,220,120,.08), rgba(58,200,255,.03));border:1px solid rgba(255,220,120,.06)}
.apps-grid .app-card:nth-child(21)::after{background:radial-gradient(circle, rgba(255,220,120,.05), transparent 40%);opacity:.6}

/* Variant 22 */
.apps-grid .app-card:nth-child(22) .logo-slot-lg{background:linear-gradient(180deg, rgba(140,255,200,.08), rgba(142,91,255,.03));border:1px solid rgba(140,255,200,.06)}
.apps-grid .app-card:nth-child(22)::after{background:radial-gradient(circle, rgba(140,255,200,.05), transparent 40%);opacity:.6}

/* Variant 23 */
.apps-grid .app-card:nth-child(23) .logo-slot-lg{background:linear-gradient(180deg, rgba(200,120,140,.08), rgba(58,200,255,.03));border:1px solid rgba(200,120,140,.06)}
.apps-grid .app-card:nth-child(23)::after{background:radial-gradient(circle, rgba(200,120,140,.05), transparent 40%);opacity:.6}

/* Variant 24 */
.apps-grid .app-card:nth-child(24) .logo-slot-lg{background:linear-gradient(180deg, rgba(100,200,255,.08), rgba(255,80,120,.03));border:1px solid rgba(100,200,255,.06)}
.apps-grid .app-card:nth-child(24)::after{background:radial-gradient(circle, rgba(100,200,255,.05), transparent 40%);opacity:.6}

/* Variant 25 */
.apps-grid .app-card:nth-child(25) .logo-slot-lg{background:linear-gradient(180deg, rgba(255,160,220,.08), rgba(58,200,255,.03));border:1px solid rgba(255,160,220,.06)}
.apps-grid .app-card:nth-child(25)::after{background:radial-gradient(circle, rgba(255,160,220,.05), transparent 40%);opacity:.6}

/* ---------------------------
   APP CARD: overlay on hover for micro animation
   --------------------------- */
.apps-grid .app-card::before{
  content:"";position:absolute;left:8px;right:8px;bottom:8px;height:6px;border-radius:8px;background:linear-gradient(90deg, rgba(254,94,255,.04), rgba(58,200,255,.04));opacity:0;transform:translateY(6px);transition:all .28s var(--ease-mid);z-index:0;
}
.apps-grid .app-card:hover::before{opacity:.18;transform:none}

/* ---------------------------
   APP BUY MODAL (global)
   Usage: <div class="modal app-modal"> <div class="dialog"> ... </div> </div>
   --------------------------- */
.app-modal .dialog{display:grid;grid-template-columns:200px 1fr;gap:14px;align-items:start;border-radius:12px}
.app-modal .dialog .left{display:flex;flex-direction:column;align-items:center;gap:10px}
.app-modal .dialog .left .logo{width:160px;height:160px;border-radius:14px;overflow:hidden;background:linear-gradient(180deg,rgba(255,255,255,.02),transparent);display:grid;place-items:center}
.app-modal .dialog .right h2{font-size:1.25rem;margin-bottom:8px}
.app-modal .dialog .right p{opacity:.92;line-height:1.45}
.app-modal .meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.app-modal .meta .tag{padding:.36rem .6rem;border-radius:8px;background:rgba(255,255,255,.02);font-weight:800;color:var(--muted)}

/* buy flow actions */
.app-modal .actions{display:flex;gap:10px;margin-top:14px}
.app-modal .actions .confirm{background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;padding:.6rem .9rem;border-radius:10px;border:0;font-weight:900}
.app-modal .actions .cancel{padding:.6rem .9rem;border-radius:10px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);color:var(--muted)}

/* confirmation / success animation */
.app-modal .success-bubble{display:inline-block;padding:.6rem 1rem;border-radius:999px;background:linear-gradient(90deg,#34d399,#10b981);color:#fff;font-weight:900;box-shadow:0 16px 50px rgba(16,185,129,.06)}

/* ---------------------------
   APPS PAGE: FILTER BAR (search, category, sort)
   --------------------------- */
.apps-filter{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:12px}
.apps-filter .search{flex:1;display:flex;gap:8px;align-items:center}
.apps-filter input[type="search"]{flex:1;padding:.6rem;border-radius:10px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);color:var(--muted)}

/* category pills */
.apps-filter .pill{padding:.36rem .6rem;border-radius:999px;border:1px solid rgba(255,255,255,.03);background:linear-gradient(180deg, rgba(255,255,255,.01), transparent);font-weight:800}

/* ---------------------------
   PRICING / PURCHASE INFO (tooltip)
   --------------------------- */
.price-tooltip{position:relative;display:inline-block}
.price-tooltip .tip{position:absolute;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);background:rgba(0,0,0,.7);padding:.5rem .7rem;border-radius:8px;white-space:nowrap;color:#fff;font-weight:700;opacity:0;pointer-events:none;transition:all .18s}
.price-tooltip:hover .tip{opacity:1;transform:translateX(-50%) translateY(-6px)}

/* ---------------------------
   App detail page helpers (when user clicks app page)
   --------------------------- */
.app-detail-hero{display:grid;grid-template-columns:360px 1fr;gap:20px;align-items:start;padding:18px;border-radius:12px;background:linear-gradient(180deg, rgba(255,255,255,.01), transparent);border:1px solid rgba(255,255,255,.03)}
@media (max-width:980px){ .app-detail-hero{grid-template-columns:1fr} }

/* screenshots gallery */
.screens-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
@media (max-width:880px){ .screens-grid{grid-template-columns:repeat(2,1fr)} }

/* feature list */
.features-list{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}

/* ============================
   ACCESSIBILITY & REDUCE MOTION:
   - Ensure keyboard navigation, focus ring, and reduced motion support
   ============================ */
.app-card:focus-within, .app-card:focus{outline:3px solid rgba(58,200,255,.08);outline-offset:4px}
@media (prefers-reduced-motion: reduce){
  .apps-grid .app-card, .app-modal .dialog, .logo-slot-lg, .app-buy{transition:none!important;animation:none!important}
}

/* ============================
   END PART 5
   Next suggestions:
     • JS Generator to create 25 app cards dynamically from JSON data (images, title, desc, price, status)
     • HTML templates for each of the 25 app detail pages (SEO-ready meta + schema)
     • Payments stub CSS + JS to integrate checkout flow (example with Razorpay / Stripe)
   ---------------------------------------------------------------
   Append this block to assets/global.css and reload pages. For best results:
     1) Ensure images are optimized (webp 1x/2x) and placed in /assets/apps/
     2) Use server-side rendering or JS to inject 25 cards where needed
     3) If page becomes heavy on mobile, toggle body.no-fx
   ================================================================ */
/* ================================================================
   Global CSS — PART 6 (Games Focused)
   - Large-format game cards, full-screen helpers, control overlays,
   - scoreboard, leaderboards, mobile touch adjustments, performance toggles
   Append to assets/global.css
   ================================================================ */

/* ===========================
   GAMES HERO / FEATURE AREA
   =========================== */
.games-hero-large{
  margin:24px 0;padding:22px;border-radius:18px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));
  border:1px solid rgba(255,255,255,.04);box-shadow:0 28px 90px rgba(0,0,0,.6);
  display:grid;grid-template-columns:1fr 420px;gap:18px;align-items:center;
}
@media (max-width:1100px){ .games-hero-large{grid-template-columns:1fr} }

.games-hero-large .lead{
  padding:10px 6px;
}
.games-hero-large h1{font-size:clamp(1.6rem,3vw,2.6rem);margin-bottom:8px}
.games-hero-large p{opacity:.9}

/* trailer placeholder */
.games-hero-large .trailer{
  border-radius:12px;overflow:hidden;border:1px solid rgba(255,255,255,.04);position:relative;background:#000;height:320px;
  display:flex;align-items:center;justify-content:center;
}
@media (max-width:1100px){ .games-hero-large .trailer{height:240px} }

/* rings overlay inside trailer */
.trailer .rings .ring{position:absolute;border-radius:50%;border:2px solid rgba(255,255,255,.03);filter:blur(8px);opacity:.12}

/* ===========================
   GAMES GRID (2-per-row layout) — for main games page
   =========================== */
.games-section{margin-top:20px}
.games-grid{display:grid;grid-template-columns:repeat(2, 1fr);gap:20px}
@media (max-width:980px){ .games-grid{grid-template-columns:1fr} }

/* large game card (for each of 7 games) */
.game-card{
  position:relative;border-radius:16px;padding:16px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));border:1px solid rgba(255,255,255,.04);
  box-shadow:0 28px 80px rgba(0,0,0,.6);overflow:visible;display:flex;flex-direction:column;gap:12px;
}

/* art area (iframe wrapper) */
.game-card .art-wrap{border-radius:12px;overflow:hidden;border:1px solid rgba(255,255,255,.05);position:relative;background:#000}
.game-card .art-wrap .frame-wrap{--ratio:16/9; /* default */}

/* overlay with big play circle (center) */
.game-card .play-overlay{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none}
.game-card .play-overlay .play-btn{
  pointer-events:auto;margin:auto;transform:translateY(0);
  transition:transform .2s var(--ease-fast), box-shadow .18s;backdrop-filter: blur(2px);
}

/* label row (title + badges) */
.game-card .title-row{display:flex;align-items:center;justify-content:space-between;gap:10px}
.game-card h3{font-size:1.15rem;font-weight:900;color:#fff;}
.game-meta{display:flex;gap:8px;align-items:center}

/* control bar — play/restart/fullscreen/save score */
.game-card .control-bar{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.btn-control{padding:.48rem .7rem;border-radius:10px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);font-weight:900;cursor:pointer}
.btn-control.primary{background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;border:0;box-shadow:0 16px 40px rgba(58,200,255,.06)}

/* Score display */
.score-strip{display:flex;gap:8px;align-items:center;margin-left:auto}
.score-strip .score{padding:.36rem .6rem;border-radius:10px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.03);font-weight:900}

/* best / rank display */
.rank-strip{display:flex;gap:8px;align-items:center}
.rank-strip .rank{padding:.32rem .5rem;border-radius:8px;background:linear-gradient(90deg,var(--accent3),var(--accent4));color:#fff;font-weight:900}

/* small helper to put play button centered for when frame is not loaded */
.center-play{display:grid;place-items:center;height:100%;padding:16px}

/* ===========================
   FULLSCREEN SUPPORT STYLES
   - applied by JS: .fullscreen-active on wrapper element
   =========================== */
.fullscreen-active{
  position:fixed !important;inset:0 !important;width:100% !important;height:100% !important;margin:0 !important;padding:14px !important;border-radius:0 !important;z-index:2147483630 !important;background:#000;
}
.fullscreen-active .frame-wrap iframe{height:100%;width:100%}

/* when fullscreen, UI control bar floats on top */
.fullscreen-active .control-bar{
  position:fixed;left:18px;right:18px;top:18px;display:flex;align-items:center;gap:8px;z-index:2147483645;background:linear-gradient(180deg, rgba(0,0,0,.3), rgba(0,0,0,.1));padding:8px;border-radius:12px;border:1px solid rgba(255,255,255,.03)
}

/* ESC hint bubble */
.fs-esc-hint{position:fixed;right:18px;bottom:18px;background:rgba(255,255,255,.03);padding:.6rem .9rem;border-radius:999px;border:1px solid rgba(255,255,255,.04);font-weight:900;color:var(--muted);z-index:2147483645}

/* ===========================
   PER-GAME VARIANTS (quick stylistic differences for 7 games)
   - Use: .game-card.game-infinity, .game-card.game-flappy etc.
   =========================== */
.game-card.game-infinity .logo{box-shadow:0 18px 60px rgba(138,80,255,.12)}
.game-card.game-infinity .title{background:linear-gradient(90deg,var(--accent1),var(--accent2));-webkit-background-clip:text;-webkit-text-fill-color:transparent}

.game-card.game-flappy .art-wrap{background:linear-gradient(180deg,#08121b,#041018)}
.game-card.game-snake .art-wrap{background:linear-gradient(180deg,#071205,#09180a)}
.game-card.game-geometry .art-wrap{background:linear-gradient(180deg,#07070a,#0b0410)}
.game-card.game-arcade .art-wrap{background:linear-gradient(180deg,#080206,#100318)}
.game-card.game-puzzle .art-wrap{background:linear-gradient(180deg,#051028,#081435)}
.game-card.game-multiplayer .art-wrap{background:linear-gradient(180deg,#04121b,#081a24)}
.game-card.game-towerdefense .art-wrap{background:linear-gradient(180deg,#081016,#0b1218)}

/* ===========================
   TOUCH-FRIENDLY ADJUSTMENTS
   =========================== */
@media (max-width:720px){
  .game-card{padding:12px}
  .game-card .art-wrap{height:280px}
  .btn-control{padding:.65rem .9rem;font-size:1rem}
  .score-strip .score{padding:.5rem .8rem}
  .control-bar{position:relative;bottom:0;left:0;right:0}
}

/* ===========================
   GAME LOADING / PLACEHOLDER STATES
   =========================== */
.loading-skeleton{background:linear-gradient(90deg, rgba(255,255,255,.02), rgba(255,255,255,.03));border-radius:12px;overflow:hidden}
.loading-skeleton .bar{height:10px;background:linear-gradient(90deg, rgba(255,255,255,.03), rgba(255,255,255,.02));border-radius:6px}

/* ===========================
   GAME OVERLAYS & POPUPS
   =========================== */
.overlay-score{
  position:absolute;left:12px;top:12px;padding:8px 10px;border-radius:10px;background:linear-gradient(90deg, rgba(255,255,255,.02), rgba(255,255,255,.01));border:1px solid rgba(255,255,255,.03);font-weight:900;z-index:20
}
.win-badge{padding:.5rem .8rem;border-radius:12px;background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;font-weight:900;box-shadow:0 18px 40px rgba(58,200,255,.06)}

/* ===========================
   LEADERBOARD / RANKING STYLES
   =========================== */
.leaderboard{min-width:260px;border-radius:12px;padding:12px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));border:1px solid rgba(255,255,255,.04)}
.leaderboard .row{display:flex;align-items:center;gap:10px;padding:6px;border-radius:8px}
.leaderboard .row:nth-child(odd){background:rgba(255,255,255,.01)}

/* ===========================
   SAVE / SHARE CTA
   =========================== */
.save-share{display:flex;gap:8px;align-items:center}
.save-share button{padding:.48rem .7rem;border-radius:10px;background:rgba(255,255,255,.02);border:1px solid rgba(255,255,255,.04);font-weight:900}

/* ===========================
   PERFORMANCE: throttle classes for heavy animations
   =========================== */
body.heavy-fx .game-card .art-wrap{filter:contrast(1.08) saturate(1.1)}
body.no-fx .vv-dot, body.no-fx .fx-layer, body.no-fx .trail-dot, body.no-fx .custom-cursor, body.no-fx .game-card .play-overlay{display:none!important}

/* ===========================
   Integration helpers (data attributes)
   - games use: data-game="infinity-dash" data-iframe="game-infinity-iframe"
   - play button: data-action="play" data-target="game-infinity-iframe"
   - full btn: data-action="full" data-target="game-infinity-iframe"
   - restart: data-action="restart" data-target="game-infinity-iframe"
   - save: data-action="save" data-target="game-infinity-iframe"
   =========================== */
[data-action]{cursor:pointer}

/* ===========================
   END PART 6
   (Now Part 7 appended below)
   ================================================================ */


/* ================================================================
   Global CSS — PART 7 (Extras, polish, accessibility, final utilities)
   - Newsletter variants, cookie bar, consent UI, search overlay,
   - animations variants, print styles, micro copy helpers, export helpers
   Append to assets/global.css
   ================================================================ */

/* ===========================
   COOKIE BAR / CONSENT
   =========================== */
.cookie-bar{
  position:fixed;left:12px;right:12px;bottom:12px;padding:12px;border-radius:12px;background:linear-gradient(90deg, rgba(0,0,0,.6), rgba(0,0,0,.4));border:1px solid rgba(255,255,255,.03);z-index:2147483646;display:flex;gap:12px;align-items:center;justify-content:space-between;
}
.cookie-bar .msg{flex:1;opacity:.95}
.cookie-bar .actions{display:flex;gap:8px}

/* ===========================
   SEARCH OVERLAY / QUICK NAV
   =========================== */
.search-overlay{
  position:fixed;inset:0;display:none;place-items:flex-start;padding:40px;background:linear-gradient(180deg, rgba(7,7,10,.85), rgba(7,7,10,.95));z-index:2147483647;
}
.search-overlay.open{display:grid}
.search-overlay .box{max-width:920px;width:100%;margin:0 auto;padding:20px;border-radius:12px;background:linear-gradient(180deg, rgba(255,255,255,.01), rgba(255,255,255,.005));border:1px solid rgba(255,255,255,.04);box-shadow:0 40px 100px rgba(0,0,0,.7)}
.search-overlay input{width:100%;padding:16px;border-radius:12px;border:1px solid rgba(255,255,255,.04);background:rgba(255,255,255,.02);font-size:1.02rem}

/* ===========================
   NEWSLETTER / POPUP PROMO
   =========================== */
.news-pop{position:fixed;right:18px;bottom:18px;z-index:999999;border-radius:12px;padding:12px;background:linear-gradient(90deg,var(--accent1),var(--accent2));color:#fff;box-shadow:0 20px 60px rgba(58,200,255,.08)}
.news-pop .close{position:absolute;right:8px;top:8px;width:28px;height:28px;border-radius:8px;background:rgba(255,255,255,.06);display:grid;place-items:center;cursor:pointer}

/* ===========================
   PRINT STYLES (simplified)
   =========================== */
@media print{
  body{background:#fff;color:#000}
  .no-print,.site-header,.site-footer,.cookie-bar,.search-overlay{display:none!important}
  .container{padding:0}
  a[href]:after{content:" (" attr(href) ")";font-size:.8em}
}

/* ===========================
   MICROCOPY HELPERS
   =========================== */
.kicker{font-weight:900;font-size:.78rem;letter-spacing:1px;color:var(--muted);text-transform:uppercase}
.lead-sm{font-size:.95rem;opacity:.9}

/* ===========================
   NOTIFICATIONS / TOASTS
   =========================== */
.toast-root{position:fixed;right:18px;top:18px;display:grid;gap:8px;z-index:2147483646}
.toast{
  background:linear-gradient(90deg, #111216, rgba(255,255,255,.02));padding:10px 12px;border-radius:10px;border:1px solid rgba(255,255,255,.04);box-shadow:0 16px 40px rgba(0,0,0,.6);color:var(--muted);font-weight:800;
}
.toast.success{border-left:6px solid var(--success)}
.toast.error{border-left:6px solid var(--danger)}

/* ===========================
   SHORTCUT KEYS HINT (bottom-left)
   =========================== */
.shortcuts{position:fixed;left:18px;bottom:18px;padding:10px;border-radius:8px;background:linear-gradient(180deg, rgba(0,0,0,.6), rgba(0,0,0,.4));color:var(--muted);z-index:2147483646}

/* ===========================
   DEBUG PANEL (dev only)
   =========================== */
.dev-panel{position:fixed;right:12px;top:12px;padding:8px;border-radius:8px;background:rgba(0,0,0,.6);z-index:2147483648;color:#fff}

/* ===========================
   FAVICON / THEME COLOR HELPER (meta)
   - (Add to HTML head):
   - <meta name="theme-color" content="#07070a">
   =========================== */

/* ===========================
   FINAL ACCESSIBILITY CHECKS
   =========================== */
/* Ensure large tappable areas */
button, .btn, .btn-control, .play-btn { min-height:44px; min-width:44px; }

/* focus-visible only */
:focus:not(:focus-visible){outline:none;box-shadow:none}

/* ensure font-scaling */
html{font-size:100%}

/* ===========================
   END PART 7
   ================================================================
   Notes / Next Steps:
   1) After appending Parts 6+7, reload pages and test on mobile/desktop.
   2) Use body.no-fx on low-end devices or when you want to test performance.
   3) Next I can deliver:
      - JS Part: decorations & spawn generator (200 circles/300 micro-dots/50 lines/10 rings) optimized with rAF and throttled on mobile.
      - Game-handling JS Part: play/restart/fullscreen/save-score handlers + lazy loading + touch optimizations.
      - animations.css if you want to split keyframes out of global.css.
   4) If you want me to extend CSS more (per-game 1000-line specific stylings or per-app 25 detail pages), bolega — main de dunga.
   ================================================================ */
/* ========= VisionVeer: quick overlay & floating-player hide + decor visibility ========= */

/* Hide any floating media players / auto popups that block the whole page */
.player-modal,
.video-modal,
.floating-player,
.media-player,
.plyr,
.frame-overlay,
.modal.open,
.modal-backdrop,
.modal-backdrop.show,
.overlay,
.player-wrapper,
.video-popup {
  display: none !important;
  opacity: 0 !important;
  pointer-events: none !important;
}

/* Ensure body isn't permanently locked from scrolling */
body.modal-open, body.fs-lock, html.modal-open, .no-scroll {
  overflow: auto !important;
}

/* Make decor-layer visible and above dark overlays for testing.
   Later you can set z-index lower to keep decor behind content. */
.decor-layer {
  pointer-events: none;
  position: fixed;
  inset: 0; /* top:0;right:0;bottom:0;left:0; */
  z-index: 2; /* 2 for visible; lower if you want decor behind top panels */
  mix-blend-mode: screen;
}

/* Make sure decor elements are visible by default (temporary safety) */
.vv-dot, .vv-micro, .vv-line, .vv-ring {
  display: block !important;
  opacity: 1 !important;
  will-change: transform, opacity !important;
}

/* if you want decor behind header later, reduce z-index */
@media (min-width: 900px) {
  /* Banner hero should remain on top; change as needed */
  .site-header { z-index: 50; position: relative; }
}
