3d-effect-cinema 0.1.1 β†’ 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 🎬 3D Effect Cinema
2
2
 
3
- > High-performance, customizable 3D Cinema Loader & Interactive WebGL Experience for React and Next.js powered by `@react-three/fiber` & `three`.
3
+ > High-performance, highly customizable 3D Cinema WebGL Experience, HOC & Dynamic Background for React and Next.js powered by `@react-three/fiber` & `three`.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/3d-effect-cinema.svg?style=flat-square&color=blue)](https://www.npmjs.com/package/3d-effect-cinema)
6
6
  [![license](https://img.shields.io/npm/l/3d-effect-cinema.svg?style=flat-square)](https://github.com/esteban284/3d-effect-cinema)
@@ -9,122 +9,132 @@
9
9
 
10
10
  ---
11
11
 
12
- ## πŸ“Έ Preview
12
+ ## πŸš€ Live Demo
13
13
 
14
- *(Incluye una animaciΓ³n GIF o captura de pantalla de la experiencia 3D)*
15
-
16
- ```
17
- +-----------------------------------------------------------------------+
18
- | 🌟 CINEMULTIPLEX 3D - Animated Entrance & Particle System |
19
- | [ Gold Material ] [ Neon Material ] [ Obsidian ] [ Glass Material ] |
20
- +-----------------------------------------------------------------------+
21
- ```
14
+ πŸ‘‰ **[Ver Demo en Vivo (Vercel)](https://cinema-animation-sample.vercel.app)**
22
15
 
23
16
  ---
24
17
 
25
18
  ## ✨ Features
26
19
 
27
- - 🌟 **Cinematic 3D Typography**: Animated 3D extruded text with smooth entry & spring physics.
28
- - 🎨 **Dynamic Material Themes**: Built-in 3D materials (`gold`, `neon`, `obsidian`, `glass`) with physical reflections & post-processing bloom.
29
- - πŸŽ₯ **Cinematic Camera Rig**: Camera dolly zoom, subtle mouse parallax, and breathing float movement.
30
- - ✨ **Volumetric Particles**: Theme-tailored particle system reacting to lighting.
31
- - ⚑ **Next.js & React 19 Ready**: Pre-configured with `'use client'` directives for seamless App Router integration.
20
+ - πŸͺ„ **Higher-Order Component (`withCinema3D`)**: Easily wrap any React component with a dynamic 3D WebGL background.
21
+ - πŸ–ΌοΈ **Dynamic Container Background (`<CinemaBackground />`)**: Fits inside any parent container (`div`, `header`, `section`, `card`) with responsive auto-resizing.
22
+ - ✍️ **Live 3D Title Control**: Dynamic text input that updates the 3D typography in real-time.
23
+ - πŸŽ›οΈ **Interactive FX Toggles Bar**: Toggle buttons to control 3D Fire Sparks, Shockwave rings, Electric Plasma, and Ambient Embers.
24
+ - πŸ’₯ **Multiple Interactive 3D Effects**:
25
+ - πŸ”₯ **`ClickFireSparks`**: Explosive fire ember burst & local point light flash on click.
26
+ - 🌊 **`ClickShockwave`**: Expanding 3D energy ring wave on click.
27
+ - ⚑ **`ElectricPlasma`**: Interactive electric plasma tendrils reacting to pointer movement.
28
+ - ✨ **`SceneParticles`**: Thermal rising ambient embers.
29
+ - 🎨 **6 Material Themes**: `emerald` (Matrix Luxe), `crimson` (Ruby Fire), `gold`, `neon`, `obsidian`, `glass`.
32
30
 
33
31
  ---
34
32
 
35
33
  ## πŸ“¦ Installation
36
34
 
37
- Install the package and its peer dependencies in your React / Next.js project:
38
-
39
35
  ```bash
40
36
  npm install 3d-effect-cinema three @react-three/fiber @react-three/drei @react-three/postprocessing postprocessing
41
37
  ```
42
38
 
43
- or with yarn / pnpm:
44
-
45
- ```bash
46
- pnpm add 3d-effect-cinema three @react-three/fiber @react-three/drei @react-three/postprocessing postprocessing
47
- ```
48
-
49
39
  ---
50
40
 
51
- ## πŸš€ Quick Start
41
+ ## πŸš€ Usage Examples
42
+
43
+ ### 1. Using the HOC (`withCinema3D`)
52
44
 
53
- ### 1. Full Screen Cinema Experience (`<CinemaLoader />`)
45
+ Wrap any existing React component with the 3D WebGL background:
54
46
 
55
47
  ```tsx
56
48
  "use client";
57
49
 
58
- import { useState } from "react";
59
- import { CinemaLoader, CinemaHome } from "3d-effect-cinema";
60
-
61
- export default function App() {
62
- const [loaded, setLoaded] = useState(false);
63
-
64
- if (!loaded) {
65
- return (
66
- <CinemaLoader
67
- cinemaName="NOVA CINEMA"
68
- defaultTheme="gold"
69
- onEnterCinema={() => setLoaded(true)}
70
- />
71
- );
72
- }
73
-
74
- return <CinemaHome cinemaName="NOVA CINEMA" webTheme="neon" />;
50
+ import { withCinema3D } from "3d-effect-cinema";
51
+
52
+ function LandingHero() {
53
+ return (
54
+ <div className="text-center text-white py-24">
55
+ <h1 className="text-5xl font-bold uppercase tracking-widest">
56
+ Enterprise Solutions
57
+ </h1>
58
+ <p className="mt-4 text-white/70 max-w-xl mx-auto">
59
+ Build high-performance 3D web experiences effortlessly.
60
+ </p>
61
+ </div>
62
+ );
75
63
  }
76
- ```
77
-
78
- ---
79
-
80
- ## 🎨 Material Themes
81
64
 
82
- | Theme | Description | Visual Style |
83
- | :--- | :--- | :--- |
84
- | `gold` | High-metallic polished gold with warm ambient glow | 🌟 Luxe / Premium |
85
- | `neon` | Cyberpunk cyan with vibrant emissive bloom | ⚑ High Tech / Cyber |
86
- | `obsidian` | Deep glossy black mineral with high environment reflection | πŸ–€ Sleek Dark Mode |
87
- | `glass` | Refractive glass material with chromatic dispersion | πŸ’Ž Modern Refraction |
65
+ // Export wrapped with 3D Cinema background
66
+ export default withCinema3D(LandingHero, {
67
+ text: "UNITED OF WEB",
68
+ theme: "emerald",
69
+ interactiveSparks: true,
70
+ interactiveShockwave: true,
71
+ interactivePlasma: true,
72
+ });
73
+ ```
88
74
 
89
75
  ---
90
76
 
91
- ## πŸ› οΈ API Reference
77
+ ### 2. Using the Component (`<CinemaBackground />`)
92
78
 
93
- ### `<CinemaLoader />`
79
+ Embed directly inside any container in your layout:
94
80
 
95
- The main full-screen interactive 3D loader canvas and overlay UI.
81
+ ```tsx
82
+ "use client";
96
83
 
97
- | Prop | Type | Default | Description |
98
- | :--- | :--- | :--- | :--- |
99
- | `cinemaName` | `string` | `"CINEMULTIPLEX"` | The brand text displayed in 3D typography and UI |
100
- | `defaultTheme` | `'gold' \| 'neon' \| 'obsidian' \| 'glass'` | `'gold'` | Initial 3D material theme |
101
- | `onEnterCinema` | `() => void` | **Required** | Callback triggered after the exit zoom animation completes |
84
+ import { CinemaBackground } from "3d-effect-cinema";
85
+
86
+ export default function CustomCard() {
87
+ return (
88
+ <div className="w-full h-[500px] rounded-2xl overflow-hidden shadow-2xl">
89
+ <CinemaBackground
90
+ text="CREATIVE"
91
+ theme="crimson"
92
+ interactiveSparks={true}
93
+ interactivePlasma={true}
94
+ >
95
+ <button className="px-8 py-3 bg-red-600 hover:bg-red-500 text-white font-bold uppercase rounded-full">
96
+ Get Started
97
+ </button>
98
+ </CinemaBackground>
99
+ </div>
100
+ );
101
+ }
102
+ ```
102
103
 
103
104
  ---
104
105
 
105
- ### `<AnimatedLetter />`
106
+ ### 3. Full Interactive Playground & Loader (`<CinemaLoader />`)
106
107
 
107
- Low-level 3D letter component for custom Three.js canvas compositions.
108
+ ```tsx
109
+ "use client";
108
110
 
109
- | Prop | Type | Description |
110
- | :--- | :--- | :--- |
111
- | `char` | `string` | Single character string to render |
112
- | `index` | `number` | Index position for delay stagger calculations |
113
- | `totalLetters` | `number` | Total string length |
114
- | `position` | `[number, number, number]` | 3D space coordinate `[x, y, z]` |
115
- | `phase` | `'loading' \| 'entering' \| 'idle' \| 'exiting'` | Current animation state |
116
- | `theme` | `MaterialTheme` | Chosen material theme |
117
- | `fontUrl` | `string` | Path to Three.js JSON font file |
111
+ import { CinemaLoader } from "3d-effect-cinema";
112
+
113
+ export default function InteractiveDemo() {
114
+ return (
115
+ <CinemaLoader
116
+ cinemaName="NOVA CINEMA"
117
+ defaultTheme="emerald"
118
+ />
119
+ );
120
+ }
121
+ ```
118
122
 
119
123
  ---
120
124
 
121
- ### `<CameraRig />`
125
+ ## πŸ› οΈ Props Reference
122
126
 
123
- Cinematic camera movement controller (must be rendered inside `@react-three/fiber` `<Canvas>`).
127
+ ### `<CinemaBackground />` & `withCinema3D(Component, options)`
124
128
 
125
- | Prop | Type | Description |
126
- | :--- | :--- | :--- |
127
- | `phase` | `'loading' \| 'entering' \| 'idle' \| 'exiting'` | Triggers camera dolly-in, mouse parallax, or zoom-through exit |
129
+ | Prop / Option | Type | Default | Description |
130
+ | :--- | :--- | :--- | :--- |
131
+ | `text` | `string` | `"CINEMA"` | 3D Text rendered in world space |
132
+ | `theme` | `'emerald' \| 'crimson' \| 'gold' \| 'neon' \| 'obsidian' \| 'glass'` | `'emerald'` | Material & lighting preset |
133
+ | `customBackground` | `string` | `undefined` | Custom CSS gradient or color |
134
+ | `interactiveSparks` | `boolean` | `true` | Enable/disable fire sparks on click |
135
+ | `interactiveShockwave` | `boolean` | `true` | Enable/disable shockwave rings on click |
136
+ | `interactivePlasma` | `boolean` | `true` | Enable/disable electric plasma arcs |
137
+ | `showParticles` | `boolean` | `true` | Enable/disable ambient floating embers |
128
138
 
129
139
  ---
130
140
 
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react from 'react';
2
+ import react__default from 'react';
2
3
 
3
- type MaterialTheme = "gold" | "neon" | "obsidian" | "glass";
4
+ type MaterialTheme = "gold" | "neon" | "emerald" | "crimson" | "obsidian" | "glass";
4
5
  interface AnimatedLetterProps {
5
6
  char: string;
6
7
  index: number;
@@ -12,26 +13,77 @@ interface AnimatedLetterProps {
12
13
  }
13
14
  declare function AnimatedLetter({ char, index, totalLetters, position, phase, theme, fontUrl, }: AnimatedLetterProps): react.JSX.Element | null;
14
15
 
15
- interface CameraRigProps {
16
- phase: "loading" | "entering" | "idle" | "exiting";
16
+ interface CinemaBackgroundProps {
17
+ /** 3D Text rendered in world space */
18
+ text?: string;
19
+ /** Active material & lighting theme */
20
+ theme?: MaterialTheme;
21
+ /** Custom CSS gradient or solid color */
22
+ customBackground?: string;
23
+ /** Enable/disable 3D fire sparks on click */
24
+ interactiveSparks?: boolean;
25
+ /** Enable/disable 3D shockwave rings on click */
26
+ interactiveShockwave?: boolean;
27
+ /** Enable/disable electric plasma arcs */
28
+ interactivePlasma?: boolean;
29
+ /** Enable/disable ambient floating particle embers */
30
+ showParticles?: boolean;
31
+ /** Enable bloom glow effect */
32
+ enableBloom?: boolean;
33
+ /** Optional container CSS class name */
34
+ className?: string;
35
+ /** Optional inline container styles */
36
+ style?: React.CSSProperties;
37
+ /** Children React nodes rendered on top of the 3D canvas */
38
+ children?: React.ReactNode;
17
39
  }
18
- declare function CameraRig({ phase }: CameraRigProps): null;
40
+ /**
41
+ * Highly customizable 3D Cinema WebGL Background Component.
42
+ * Fits dynamically into any HTML parent container (div, header, section, card).
43
+ */
44
+ declare function CinemaBackground({ text, theme, customBackground, interactiveSparks, interactiveShockwave, interactivePlasma, showParticles, enableBloom, className, style, children, }: CinemaBackgroundProps): react.JSX.Element;
45
+
46
+ interface WithCinema3DOptions extends Omit<CinemaBackgroundProps, "children"> {
47
+ }
48
+ /**
49
+ * Higher-Order Component (HOC) that wraps any React component with the 3D WebGL Cinema background.
50
+ *
51
+ * @example
52
+ * const HeroWith3D = withCinema3D(MyHeroComponent, {
53
+ * text: "UNITED OF WEB",
54
+ * theme: "emerald",
55
+ * interactiveSparks: true,
56
+ * interactiveShockwave: true,
57
+ * });
58
+ */
59
+ declare function withCinema3D<P extends object>(WrappedComponent: react__default.ComponentType<P>, hocOptions?: WithCinema3DOptions): {
60
+ (props: P): react__default.JSX.Element;
61
+ displayName: string;
62
+ };
19
63
 
20
64
  interface CinemaLoaderProps {
21
65
  cinemaName?: string;
22
66
  defaultTheme?: MaterialTheme;
23
- onEnterCinema: () => void;
67
+ customBackground?: string;
68
+ onEnterCinema?: () => void;
24
69
  }
25
- declare function CinemaLoader({ cinemaName, defaultTheme, onEnterCinema, }: CinemaLoaderProps): react.JSX.Element;
70
+ declare function CinemaLoader({ cinemaName, defaultTheme, customBackground, onEnterCinema, }: CinemaLoaderProps): react.JSX.Element;
26
71
 
27
- interface LoaderOverlayProps {
28
- phase: "loading" | "entering" | "idle" | "exiting";
29
- cinemaName: string;
30
- theme: MaterialTheme;
31
- onEnter: () => void;
32
- onThemeChange: (theme: MaterialTheme) => void;
72
+ declare function ClickFireSparks({ theme, enabled, }: {
73
+ theme?: MaterialTheme;
74
+ enabled?: boolean;
75
+ }): react.JSX.Element;
76
+
77
+ declare function ClickShockwave({ theme, enabled, }: {
78
+ theme?: MaterialTheme;
79
+ enabled?: boolean;
80
+ }): react.JSX.Element | null;
81
+
82
+ interface ElectricPlasmaProps {
83
+ theme?: MaterialTheme;
84
+ enabled?: boolean;
33
85
  }
34
- declare function LoaderOverlay({ phase, cinemaName, theme, onEnter, onThemeChange, }: LoaderOverlayProps): react.JSX.Element;
86
+ declare function ElectricPlasma({ theme, enabled, }: ElectricPlasmaProps): react.JSX.Element | null;
35
87
 
36
88
  interface SceneParticlesProps {
37
89
  theme: MaterialTheme;
@@ -39,9 +91,31 @@ interface SceneParticlesProps {
39
91
  }
40
92
  declare function SceneParticles({ theme, visible }: SceneParticlesProps): react.JSX.Element | null;
41
93
 
94
+ interface CameraRigProps {
95
+ phase: "loading" | "entering" | "idle" | "exiting";
96
+ }
97
+ declare function CameraRig({ phase }: CameraRigProps): null;
98
+
99
+ interface EffectState {
100
+ sparks: boolean;
101
+ shockwave: boolean;
102
+ plasma: boolean;
103
+ embers: boolean;
104
+ }
105
+ interface LoaderOverlayProps {
106
+ phase: "loading" | "entering" | "idle" | "exiting";
107
+ cinemaName: string;
108
+ theme: MaterialTheme;
109
+ effects: EffectState;
110
+ onTitleChange: (newTitle: string) => void;
111
+ onThemeChange: (theme: MaterialTheme) => void;
112
+ onToggleEffect: (effectName: keyof EffectState) => void;
113
+ }
114
+ declare function LoaderOverlay({ phase, cinemaName, theme, effects, onTitleChange, onThemeChange, onToggleEffect, }: LoaderOverlayProps): react.JSX.Element;
115
+
42
116
  declare function CinemaHome({ cinemaName, webTheme }: {
43
117
  cinemaName?: string;
44
118
  webTheme?: string;
45
119
  }): react.JSX.Element;
46
120
 
47
- export { AnimatedLetter, CameraRig, CinemaHome, CinemaLoader, LoaderOverlay, type MaterialTheme, SceneParticles };
121
+ export { AnimatedLetter, CameraRig, CinemaBackground, type CinemaBackgroundProps, CinemaHome, CinemaLoader, ClickFireSparks, ClickShockwave, type EffectState, ElectricPlasma, LoaderOverlay, type MaterialTheme, SceneParticles, type WithCinema3DOptions, withCinema3D };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as react from 'react';
2
+ import react__default from 'react';
2
3
 
3
- type MaterialTheme = "gold" | "neon" | "obsidian" | "glass";
4
+ type MaterialTheme = "gold" | "neon" | "emerald" | "crimson" | "obsidian" | "glass";
4
5
  interface AnimatedLetterProps {
5
6
  char: string;
6
7
  index: number;
@@ -12,26 +13,77 @@ interface AnimatedLetterProps {
12
13
  }
13
14
  declare function AnimatedLetter({ char, index, totalLetters, position, phase, theme, fontUrl, }: AnimatedLetterProps): react.JSX.Element | null;
14
15
 
15
- interface CameraRigProps {
16
- phase: "loading" | "entering" | "idle" | "exiting";
16
+ interface CinemaBackgroundProps {
17
+ /** 3D Text rendered in world space */
18
+ text?: string;
19
+ /** Active material & lighting theme */
20
+ theme?: MaterialTheme;
21
+ /** Custom CSS gradient or solid color */
22
+ customBackground?: string;
23
+ /** Enable/disable 3D fire sparks on click */
24
+ interactiveSparks?: boolean;
25
+ /** Enable/disable 3D shockwave rings on click */
26
+ interactiveShockwave?: boolean;
27
+ /** Enable/disable electric plasma arcs */
28
+ interactivePlasma?: boolean;
29
+ /** Enable/disable ambient floating particle embers */
30
+ showParticles?: boolean;
31
+ /** Enable bloom glow effect */
32
+ enableBloom?: boolean;
33
+ /** Optional container CSS class name */
34
+ className?: string;
35
+ /** Optional inline container styles */
36
+ style?: React.CSSProperties;
37
+ /** Children React nodes rendered on top of the 3D canvas */
38
+ children?: React.ReactNode;
17
39
  }
18
- declare function CameraRig({ phase }: CameraRigProps): null;
40
+ /**
41
+ * Highly customizable 3D Cinema WebGL Background Component.
42
+ * Fits dynamically into any HTML parent container (div, header, section, card).
43
+ */
44
+ declare function CinemaBackground({ text, theme, customBackground, interactiveSparks, interactiveShockwave, interactivePlasma, showParticles, enableBloom, className, style, children, }: CinemaBackgroundProps): react.JSX.Element;
45
+
46
+ interface WithCinema3DOptions extends Omit<CinemaBackgroundProps, "children"> {
47
+ }
48
+ /**
49
+ * Higher-Order Component (HOC) that wraps any React component with the 3D WebGL Cinema background.
50
+ *
51
+ * @example
52
+ * const HeroWith3D = withCinema3D(MyHeroComponent, {
53
+ * text: "UNITED OF WEB",
54
+ * theme: "emerald",
55
+ * interactiveSparks: true,
56
+ * interactiveShockwave: true,
57
+ * });
58
+ */
59
+ declare function withCinema3D<P extends object>(WrappedComponent: react__default.ComponentType<P>, hocOptions?: WithCinema3DOptions): {
60
+ (props: P): react__default.JSX.Element;
61
+ displayName: string;
62
+ };
19
63
 
20
64
  interface CinemaLoaderProps {
21
65
  cinemaName?: string;
22
66
  defaultTheme?: MaterialTheme;
23
- onEnterCinema: () => void;
67
+ customBackground?: string;
68
+ onEnterCinema?: () => void;
24
69
  }
25
- declare function CinemaLoader({ cinemaName, defaultTheme, onEnterCinema, }: CinemaLoaderProps): react.JSX.Element;
70
+ declare function CinemaLoader({ cinemaName, defaultTheme, customBackground, onEnterCinema, }: CinemaLoaderProps): react.JSX.Element;
26
71
 
27
- interface LoaderOverlayProps {
28
- phase: "loading" | "entering" | "idle" | "exiting";
29
- cinemaName: string;
30
- theme: MaterialTheme;
31
- onEnter: () => void;
32
- onThemeChange: (theme: MaterialTheme) => void;
72
+ declare function ClickFireSparks({ theme, enabled, }: {
73
+ theme?: MaterialTheme;
74
+ enabled?: boolean;
75
+ }): react.JSX.Element;
76
+
77
+ declare function ClickShockwave({ theme, enabled, }: {
78
+ theme?: MaterialTheme;
79
+ enabled?: boolean;
80
+ }): react.JSX.Element | null;
81
+
82
+ interface ElectricPlasmaProps {
83
+ theme?: MaterialTheme;
84
+ enabled?: boolean;
33
85
  }
34
- declare function LoaderOverlay({ phase, cinemaName, theme, onEnter, onThemeChange, }: LoaderOverlayProps): react.JSX.Element;
86
+ declare function ElectricPlasma({ theme, enabled, }: ElectricPlasmaProps): react.JSX.Element | null;
35
87
 
36
88
  interface SceneParticlesProps {
37
89
  theme: MaterialTheme;
@@ -39,9 +91,31 @@ interface SceneParticlesProps {
39
91
  }
40
92
  declare function SceneParticles({ theme, visible }: SceneParticlesProps): react.JSX.Element | null;
41
93
 
94
+ interface CameraRigProps {
95
+ phase: "loading" | "entering" | "idle" | "exiting";
96
+ }
97
+ declare function CameraRig({ phase }: CameraRigProps): null;
98
+
99
+ interface EffectState {
100
+ sparks: boolean;
101
+ shockwave: boolean;
102
+ plasma: boolean;
103
+ embers: boolean;
104
+ }
105
+ interface LoaderOverlayProps {
106
+ phase: "loading" | "entering" | "idle" | "exiting";
107
+ cinemaName: string;
108
+ theme: MaterialTheme;
109
+ effects: EffectState;
110
+ onTitleChange: (newTitle: string) => void;
111
+ onThemeChange: (theme: MaterialTheme) => void;
112
+ onToggleEffect: (effectName: keyof EffectState) => void;
113
+ }
114
+ declare function LoaderOverlay({ phase, cinemaName, theme, effects, onTitleChange, onThemeChange, onToggleEffect, }: LoaderOverlayProps): react.JSX.Element;
115
+
42
116
  declare function CinemaHome({ cinemaName, webTheme }: {
43
117
  cinemaName?: string;
44
118
  webTheme?: string;
45
119
  }): react.JSX.Element;
46
120
 
47
- export { AnimatedLetter, CameraRig, CinemaHome, CinemaLoader, LoaderOverlay, type MaterialTheme, SceneParticles };
121
+ export { AnimatedLetter, CameraRig, CinemaBackground, type CinemaBackgroundProps, CinemaHome, CinemaLoader, ClickFireSparks, ClickShockwave, type EffectState, ElectricPlasma, LoaderOverlay, type MaterialTheme, SceneParticles, type WithCinema3DOptions, withCinema3D };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  'use client';
2
- "use strict";var me=Object.create;var M=Object.defineProperty;var ue=Object.getOwnPropertyDescriptor;var de=Object.getOwnPropertyNames,P=Object.getOwnPropertySymbols,fe=Object.getPrototypeOf,A=Object.prototype.hasOwnProperty,V=Object.prototype.propertyIsEnumerable;var D=(e,t,r)=>t in e?M(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,$=(e,t)=>{for(var r in t||(t={}))A.call(t,r)&&D(e,r,t[r]);if(P)for(var r of P(t))V.call(t,r)&&D(e,r,t[r]);return e};var j=(e,t)=>{var r={};for(var n in e)A.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&P)for(var n of P(e))t.indexOf(n)<0&&V.call(e,n)&&(r[n]=e[n]);return r};var pe=(e,t)=>{for(var r in t)M(e,r,{get:t[r],enumerable:!0})},X=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of de(t))!A.call(e,s)&&s!==r&&M(e,s,{get:()=>t[s],enumerable:!(n=ue(t,s))||n.enumerable});return e};var S=(e,t,r)=>(r=e!=null?me(fe(e)):{},X(t||!e||!e.__esModule?M(r,"default",{value:e,enumerable:!0}):r,e)),ge=e=>X(M({},"__esModule",{value:!0}),e);var Ee={};pe(Ee,{AnimatedLetter:()=>w,CameraRig:()=>E,CinemaHome:()=>Y,CinemaLoader:()=>B,LoaderOverlay:()=>L,SceneParticles:()=>N});module.exports=ge(Ee);var k=require("react"),G=require("@react-three/fiber"),W=require("@react-three/drei"),x=S(require("three")),he={gold:{color:"#FFD700",metalness:1,roughness:.15,clearcoat:1,emissive:"#1a0f00",emissiveIntensity:.3,envMapIntensity:2},neon:{color:"#00ffff",metalness:0,roughness:1,clearcoat:0,emissive:"#00ffff",emissiveIntensity:2.5,envMapIntensity:.5},obsidian:{color:"#1a1a2e",metalness:1,roughness:.05,clearcoat:1,emissive:"#0a0a1a",emissiveIntensity:.1,envMapIntensity:3},glass:{color:"#ffffff",metalness:0,roughness:0,clearcoat:0,emissive:"#000000",emissiveIntensity:0,envMapIntensity:1.5,transmission:.95,ior:1.5,thickness:.5,transparent:!0}};function w({char:e,index:t,totalLetters:r,position:n,phase:s,theme:l,fontUrl:m}){let a=(0,k.useRef)(null),o=(0,k.useRef)(null),i=(0,k.useMemo)(()=>{let u=t/r*Math.PI*2;return{x:Math.cos(u)*4+(Math.random()-.5)*2,y:-3+Math.random()*-3,z:-5+Math.random()*-3,rotX:(Math.random()-.5)*Math.PI*2,rotY:(Math.random()-.5)*Math.PI*2}},[t,r]),c=he[l];return(0,G.useFrame)(u=>{if(!a.current)return;let d=u.clock.getElapsedTime();o.current===null&&(o.current=d);let C=d-o.current,_=t*.12;if(s==="loading"){a.current.position.set(n[0]+i.x,n[1]+i.y,n[2]+i.z),a.current.rotation.set(i.rotX,i.rotY,0),a.current.scale.setScalar(0);return}if(s==="entering"){let h=Math.max(0,C-_),f=1-Math.exp(-h*3),y=1+Math.sin(h*8)*Math.max(0,.15-h*.1);a.current.position.set(x.MathUtils.lerp(n[0]+i.x,n[0],f),x.MathUtils.lerp(n[1]+i.y,n[1],f),x.MathUtils.lerp(n[2]+i.z,n[2],f)),a.current.rotation.set(x.MathUtils.lerp(i.rotX,0,f),x.MathUtils.lerp(i.rotY,0,f),0),a.current.scale.setScalar(Math.min(f*y,1.05));return}if(s==="idle"){let h=Math.sin(d*1.2+t*.5)*.015,f=Math.sin(d*.8+t*.3)*.008;a.current.position.set(n[0]+f,n[1]+h,n[2]),a.current.rotation.set(Math.sin(d*.5+t)*.01,Math.sin(d*.3+t*.7)*.01,0),a.current.scale.setScalar(1);return}if(s==="exiting"){let h=Math.max(0,C-_*.5),f=Math.min(h*2,1),y=f*f;a.current.position.set(n[0]+i.x*y*.5,n[1],n[2]-y*8),a.current.scale.setScalar(Math.max(1-y,0)),a.current.rotation.y+=.05}}),e===" "?null:React.createElement("group",{ref:a,position:n},React.createElement(W.Text3D,{font:m,size:.8,height:.35,bevelEnabled:!0,bevelSize:.02,bevelThickness:.01,bevelSegments:3,curveSegments:12},e,React.createElement("meshPhysicalMaterial",{color:c.color,metalness:c.metalness,roughness:c.roughness,clearcoat:c.clearcoat,emissive:c.emissive,emissiveIntensity:c.emissiveIntensity,envMapIntensity:c.envMapIntensity,transmission:c.transmission,ior:c.ior,thickness:c.thickness,transparent:c.transparent,toneMapped:l!=="neon"})))}var F=require("react"),H=require("@react-three/fiber"),b=S(require("three"));function E({phase:e}){let{camera:t,pointer:r}=(0,H.useThree)(),n=(0,F.useRef)(null),s=(0,F.useRef)(e);return s.current!==e&&(s.current=e,n.current=null),(0,H.useFrame)(l=>{let m=l.clock.getElapsedTime();n.current===null&&(n.current=m);let a=m-n.current;if(e==="loading"){t.position.set(0,0,14),t.lookAt(0,0,0);return}if(e==="entering"){let o=Math.min(a/3,1),i=1-Math.pow(1-o,3),c=b.MathUtils.lerp(14,6,i),u=b.MathUtils.lerp(1,.2,i);t.position.set(0,u,c),t.lookAt(0,0,0);return}if(e==="idle"){let o=Math.sin(m*.15)*.3,i=Math.cos(m*.1)*.15+.2,c=r.x*.3,u=r.y*.15;t.position.x=b.MathUtils.damp(t.position.x,o+c,3,.016),t.position.y=b.MathUtils.damp(t.position.y,i+u,3,.016),t.position.z=b.MathUtils.damp(t.position.z,6,3,.016),t.lookAt(0,0,0);return}if(e==="exiting"){let o=Math.min(a/1.5,1),i=o*o*o,c=b.MathUtils.lerp(6,-8,i);t.position.set(0,0,c),t.lookAt(0,0,0)}}),null}var p=require("react"),J=require("@react-three/fiber"),I=require("@react-three/drei"),g=require("@react-three/postprocessing");var T=require("react"),q=require("@react-three/fiber"),U=require("@react-three/drei"),Z=S(require("three")),be={gold:"#FFD700",neon:"#00ffff",obsidian:"#8888ff",glass:"#ffffff"};function xe({color:e,count:t=60}){let r=(0,T.useRef)(null),n=(0,T.useRef)(new Z.Object3D),s=(0,T.useRef)(null),l=(0,T.useRef)(null);if(!s.current){s.current=new Float32Array(t),l.current=new Float32Array(t*3);for(let m=0;m<t;m++)s.current[m]=.1+Math.random()*.3,l.current[m*3]=(Math.random()-.5)*16,l.current[m*3+1]=(Math.random()-.5)*10,l.current[m*3+2]=(Math.random()-.5)*12}return(0,q.useFrame)(m=>{if(!r.current||!s.current||!l.current)return;let a=m.clock.getElapsedTime();for(let o=0;o<t;o++){let i=s.current[o],c=l.current[o*3],u=l.current[o*3+1],d=l.current[o*3+2];n.current.position.set(c+Math.sin(a*i+o)*2,u+Math.cos(a*i*.7+o*.5)*1.5,d+Math.sin(a*i*.5+o*.3)*2),n.current.scale.setScalar(.015+Math.sin(a+o)*.005),n.current.updateMatrix(),r.current.setMatrixAt(o,n.current.matrix)}r.current.instanceMatrix.needsUpdate=!0}),React.createElement("instancedMesh",{ref:r,args:[void 0,void 0,t]},React.createElement("sphereGeometry",{args:[1,6,6]}),React.createElement("meshBasicMaterial",{color:e,transparent:!0,opacity:.3,toneMapped:!1}))}function N({theme:e,visible:t}){let r=be[e];return t?React.createElement("group",null,React.createElement(U.Sparkles,{count:150,scale:10,size:4,speed:.3,opacity:.8,color:r,noise:.6}),React.createElement(U.Sparkles,{count:80,scale:16,size:2,speed:.15,opacity:.4,color:"#ffffff",noise:.8}),React.createElement(xe,{color:r,count:50})):null}var ve=[{key:"gold",label:"Gold",color:"#FFD700"},{key:"neon",label:"Neon",color:"#00ffff"},{key:"obsidian",label:"Chrome",color:"#6366f1"},{key:"glass",label:"Glass",color:"#ffffff"}];function L({phase:e,cinemaName:t,theme:r,onEnter:n,onThemeChange:s}){let l=e==="idle";return React.createElement("div",{className:"absolute inset-0 pointer-events-none z-10 flex flex-col items-center justify-between",style:{opacity:e==="exiting"?0:1,transition:"opacity 0.8s ease-out"}},React.createElement("div",{className:"pt-12 text-center",style:{opacity:e==="idle"||e==="entering"?1:0,transform:e==="idle"||e==="entering"?"translateY(0)":"translateY(-20px)",transition:"all 1s ease-out 0.5s"}},React.createElement("p",{className:"text-xs tracking-[0.4em] uppercase",style:{color:"rgba(255, 255, 255, 0.4)",fontFamily:"var(--font-syne), sans-serif"}},"Premium Cinema Experience")),e==="loading"&&React.createElement("div",{className:"absolute inset-0 flex items-center justify-center"},React.createElement("div",{className:"w-16 h-16 rounded-full border-2 animate-spin-slow",style:{borderColor:"transparent",borderTopColor:"rgba(255, 215, 0, 0.6)",borderRightColor:"rgba(255, 215, 0, 0.2)"}})),React.createElement("div",{className:"pb-12 flex flex-col items-center gap-6"},React.createElement("button",{onClick:n,className:"pointer-events-auto px-10 py-3.5 rounded-full text-sm font-semibold tracking-widest uppercase transition-all duration-500 cursor-pointer",style:{opacity:l?1:0,transform:l?"translateY(0) scale(1)":"translateY(20px) scale(0.95)",transition:"all 0.8s cubic-bezier(0.16, 1, 0.3, 1)",fontFamily:"var(--font-syne), sans-serif",background:"rgba(255, 255, 255, 0.06)",backdropFilter:"blur(20px)",border:"1px solid rgba(255, 255, 255, 0.1)",color:"#f0f0f0",boxShadow:"0 0 30px rgba(255, 215, 0, 0.15)",pointerEvents:l?"auto":"none"},id:"enter-cinema-button","aria-label":`Enter ${t}`},"Enter ",t),React.createElement("div",{className:"flex items-center gap-3 pointer-events-auto",style:{opacity:e==="idle"||e==="entering"?1:0,transition:"opacity 1s ease-out 1.5s"}},React.createElement("span",{className:"text-[10px] uppercase tracking-[0.3em] mr-4",style:{color:"rgba(255, 255, 255, 0.4)",fontFamily:"var(--font-syne), sans-serif"}},"Theme"),React.createElement("div",{className:"flex items-center gap-3"},ve.map(o=>{let i=r===o.key;return React.createElement("button",{key:o.key,onClick:()=>s(o.key),className:"group relative flex flex-col items-center gap-2 cursor-pointer outline-none",id:`theme-selector-${o.key}`,"aria-label":`Switch to ${o.label} theme`},React.createElement("div",{className:"relative w-14 h-9 rounded-md overflow-hidden transition-all duration-500",style:{border:i?`2px solid ${o.color}`:"1px solid rgba(255, 255, 255, 0.15)",transform:i?"scale(1.1) translateY(-2px)":"scale(1) translateY(0)",boxShadow:i?`0 4px 20px ${o.color}40`:"0 2px 10px rgba(0,0,0,0.5)"}},React.createElement("div",{className:"absolute inset-0 opacity-80",style:{backgroundColor:o.color}}),React.createElement("div",{className:"absolute inset-0 opacity-0 group-hover:opacity-100 transition-opacity duration-300",style:{background:o.key==="gold"?"conic-gradient(from 0deg, transparent, rgba(255,255,255,0.5), transparent)":o.key==="neon"?"radial-gradient(circle at center, rgba(255,255,255,0.8) 0%, transparent 70%)":o.key==="obsidian"?"linear-gradient(45deg, transparent 40%, rgba(255,255,255,0.3) 50%, transparent 60%)":"linear-gradient(to right, rgba(255,255,255,0.1), rgba(255,255,255,0.5), rgba(255,255,255,0.1))",animation:o.key==="gold"?"spin-slow 3s linear infinite":o.key==="neon"?"pulse-glow 2s ease-in-out infinite":o.key==="obsidian"?"shimmer 2s linear infinite":"shimmer 3s linear infinite",backgroundSize:o.key==="obsidian"||o.key==="glass"?"200% 100%":"auto"}})),React.createElement("span",{className:"text-[9px] uppercase tracking-widest transition-colors duration-300",style:{color:i?"#ffffff":"rgba(255, 255, 255, 0.4)",fontFamily:"var(--font-inter), sans-serif"}},o.label))})))))}var ye="/fonts/cinema_display.typeface.json";function Me(e){let n=-(e.length*.65)/2;return e.split("").map((s,l)=>[n+l*.65,0,0])}function B({cinemaName:e="CINEMULTIPLEX",defaultTheme:t="gold",onEnterCinema:r}){let[n,s]=(0,p.useState)("loading"),[l,m]=(0,p.useState)(t),a=e.toUpperCase(),o=a.split(""),i=(0,p.useMemo)(()=>Me(a),[a]);(0,p.useEffect)(()=>{let u=setTimeout(()=>s("entering"),800),d=o.length*120+1500,C=setTimeout(()=>s("idle"),800+d);return()=>{clearTimeout(u),clearTimeout(C)}},[o.length]);let c=(0,p.useCallback)(()=>{s("exiting"),setTimeout(()=>{r()},1800)},[r]);return React.createElement("div",{className:"fixed inset-0 w-screen h-screen",style:{background:"#030303"}},React.createElement(J.Canvas,{camera:{position:[0,0,14],fov:45,near:.1,far:50},dpr:[1,2],gl:{antialias:!0,toneMapping:4,toneMappingExposure:1.2}},React.createElement(p.Suspense,{fallback:null},React.createElement(I.Environment,{preset:"studio"}),React.createElement("ambientLight",{intensity:.2}),React.createElement("directionalLight",{position:[5,8,5],intensity:1.5,castShadow:!0,color:"#ffffff"}),React.createElement("pointLight",{position:[-5,-3,-5],intensity:.4,color:"#FFD700"}),React.createElement("spotLight",{position:[0,10,0],angle:.4,penumbra:.8,intensity:.8,color:"#ffffff"}),React.createElement("pointLight",{position:[0,0,-5],intensity:.3,color:"#4444ff"}),React.createElement(E,{phase:n}),React.createElement(I.Center,{disableY:!0,disableZ:!0},React.createElement("group",null,o.map((u,d)=>React.createElement(w,{key:`${u}-${d}`,char:u,index:d,totalLetters:o.length,position:i[d],phase:n,theme:l,fontUrl:ye})))),React.createElement(N,{theme:l,visible:n!=="loading"}),React.createElement(g.EffectComposer,null,React.createElement(g.Bloom,{luminanceThreshold:.8,luminanceSmoothing:.9,intensity:l==="neon"?1.2:.5,mipmapBlur:!0}),React.createElement(g.Vignette,{offset:.3,darkness:.8}),React.createElement(g.Noise,{opacity:.03})))),React.createElement(L,{phase:n,cinemaName:e,theme:l,onEnter:c,onThemeChange:m}))}var ce=require("next-intl");var K=require("next-intl/routing"),Q=require("next-intl/navigation"),ke=(0,K.defineRouting)({locales:["en","es"],defaultLocale:"en"}),{Link:v,redirect:Ae,usePathname:ee,useRouter:te}=(0,Q.createNavigation)(ke);var re=require("next-intl");var ne=require("lucide-react");function O(){let e=(0,re.useLocale)(),t=te(),r=ee();return React.createElement("button",{onClick:()=>{let s=e==="en"?"es":"en";t.replace(r,{locale:s})},className:"flex items-center gap-2 text-sm font-medium text-muted-foreground hover:text-white transition-colors uppercase tracking-wider"},React.createElement(ne.Globe,{className:"w-4 h-4"}),e==="en"?"ES":"EN")}var z=S(require("react")),ie=require("@radix-ui/react-slot"),le=require("class-variance-authority");var oe=require("clsx"),se=require("tailwind-merge");function ae(...e){return(0,se.twMerge)((0,oe.clsx)(e))}var we=(0,le.cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),R=z.forwardRef((m,l)=>{var a=m,{className:e,variant:t,size:r,asChild:n=!1}=a,s=j(a,["className","variant","size","asChild"]);return z.createElement(n?ie.Slot:"button",$({className:ae(we({variant:t,size:r,className:e})),ref:l},s))});R.displayName="Button";function Y({cinemaName:e="NOVA",webTheme:t="neon"}){let r=(0,ce.useTranslations)(),n=t==="noir"?"bg-slate-900/40 mix-blend-color":t==="crimson"?"bg-red-900/30 mix-blend-color":"bg-blue-900/20 mix-blend-color";return React.createElement("div",{className:`min-h-screen bg-black text-white selection:bg-white/30 font-sans transition-colors duration-1000 group theme-${t}`},React.createElement("nav",{className:"absolute top-0 left-0 right-0 z-50 flex items-center justify-between px-8 py-6 mix-blend-difference"},React.createElement("div",{className:"flex items-center gap-12"},React.createElement(v,{href:"/",className:"text-3xl font-bold tracking-tighter uppercase font-display"},e,"."),React.createElement("div",{className:"hidden md:flex items-center gap-8 text-sm font-semibold tracking-widest text-white/70"},React.createElement(v,{href:"/schedule",className:"hover:text-white transition-colors"},r("nav.schedule")),React.createElement(v,{href:"/experiences",className:"hover:text-white transition-colors"},r("nav.experiences")),React.createElement(v,{href:"/membership",className:"hover:text-white transition-colors"},r("nav.membership")))),React.createElement("div",{className:"flex items-center gap-6"},React.createElement(O,null),React.createElement("div",{className:"hidden sm:flex items-center gap-4"},React.createElement(v,{href:"/login",className:"text-sm font-semibold tracking-widest text-white/70 hover:text-white transition-colors"},r("nav.login")),React.createElement(R,{variant:"outline",className:"rounded-none border-white/40 text-white bg-transparent hover:bg-white hover:text-black transition-colors font-semibold tracking-widest text-xs px-6 py-5 uppercase"},r("nav.bookTickets"))))),React.createElement("div",{className:"relative h-screen w-full flex flex-col justify-end pb-24 px-8 md:px-16 overflow-hidden"},React.createElement("div",{className:"absolute inset-0 z-0"},React.createElement("div",{className:"absolute inset-0 bg-[url('https://images.unsplash.com/photo-1605810230434-7631ac76ec81?q=80&w=2560&auto=format&fit=crop')] bg-cover bg-center"}),React.createElement("div",{className:"absolute inset-0 bg-gradient-to-t from-black via-black/50 to-transparent z-10"}),React.createElement("div",{className:`absolute inset-0 ${n} z-10`})),React.createElement("div",{className:"relative z-20 max-w-5xl"},React.createElement("div",{className:"flex items-center gap-3 mb-6"},React.createElement("span",{className:"bg-blue-600 text-white text-[10px] font-bold px-3 py-1 tracking-widest"},r("hero.genreImax")),React.createElement("span",{className:"border border-white/20 text-white/80 text-[10px] font-bold px-3 py-1 tracking-widest"},r("hero.genreAction"))),React.createElement("h1",{className:"text-6xl md:text-[8rem] leading-[0.85] font-display font-black tracking-tighter mb-6 uppercase drop-shadow-2xl"},r("hero.title")),React.createElement("p",{className:"max-w-2xl text-lg md:text-xl text-white/70 font-medium mb-10 leading-relaxed drop-shadow-md"},r("hero.synopsis")),React.createElement("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-4"},React.createElement(R,{className:"rounded-none bg-white text-black hover:bg-white/90 font-bold tracking-widest text-xs px-8 py-6 uppercase transition-transform hover:scale-105 active:scale-95"},r("hero.getTickets")),React.createElement(R,{variant:"outline",className:"rounded-none border-white/30 text-white bg-black/20 backdrop-blur-md hover:bg-white/10 transition-colors font-bold tracking-widest text-xs px-8 py-6 uppercase"},r("hero.watchTrailer"))))))}0&&(module.exports={AnimatedLetter,CameraRig,CinemaHome,CinemaLoader,LoaderOverlay,SceneParticles});
2
+ "use strict";var Ue=Object.create;var V=Object.defineProperty,Ve=Object.defineProperties,We=Object.getOwnPropertyDescriptor,Ye=Object.getOwnPropertyDescriptors,Xe=Object.getOwnPropertyNames,G=Object.getOwnPropertySymbols,$e=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty,ue=Object.prototype.propertyIsEnumerable;var fe=(e,t,r)=>t in e?V(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,y=(e,t)=>{for(var r in t||(t={}))ae.call(t,r)&&fe(e,r,t[r]);if(G)for(var r of G(t))ue.call(t,r)&&fe(e,r,t[r]);return e},P=(e,t)=>Ve(e,Ye(t));var pe=(e,t)=>{var r={};for(var n in e)ae.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&G)for(var n of G(e))t.indexOf(n)<0&&ue.call(e,n)&&(r[n]=e[n]);return r};var je=(e,t)=>{for(var r in t)V(e,r,{get:t[r],enumerable:!0})},he=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of Xe(t))!ae.call(e,c)&&c!==r&&V(e,c,{get:()=>t[c],enumerable:!(n=We(t,c))||n.enumerable});return e};var T=(e,t,r)=>(r=e!=null?Ue($e(e)):{},he(t||!e||!e.__esModule?V(r,"default",{value:e,enumerable:!0}):r,e)),Ge=e=>he(V({},"__esModule",{value:!0}),e);var at={};je(at,{AnimatedLetter:()=>H,CameraRig:()=>A,CinemaBackground:()=>X,CinemaHome:()=>de,CinemaLoader:()=>ce,ClickFireSparks:()=>I,ClickShockwave:()=>_,ElectricPlasma:()=>O,LoaderOverlay:()=>$,SceneParticles:()=>B,withCinema3D:()=>Te});module.exports=Ge(at);var le=T(require("react"));var z=require("react"),ke=require("@react-three/fiber"),te=require("@react-three/drei"),N=require("@react-three/postprocessing");var W=require("react"),ge=require("@react-three/fiber"),be=require("@react-three/drei"),D=T(require("three")),Ke={gold:{color:"#FFD700",metalness:1,roughness:.15,clearcoat:1,emissive:"#1a0f00",emissiveIntensity:.3,envMapIntensity:2},neon:{color:"#00ffff",metalness:0,roughness:1,clearcoat:0,emissive:"#00ffff",emissiveIntensity:2.5,envMapIntensity:.5},emerald:{color:"#10b981",metalness:.9,roughness:.1,clearcoat:1,emissive:"#065f46",emissiveIntensity:1.2,envMapIntensity:2.5},crimson:{color:"#ff1744",metalness:.8,roughness:.15,clearcoat:1,emissive:"#880e4f",emissiveIntensity:1.8,envMapIntensity:2},obsidian:{color:"#1a1a2e",metalness:1,roughness:.05,clearcoat:1,emissive:"#0a0a1a",emissiveIntensity:.1,envMapIntensity:3},glass:{color:"#ffffff",metalness:0,roughness:0,clearcoat:0,emissive:"#000000",emissiveIntensity:0,envMapIntensity:1.5,transmission:.95,ior:1.5,thickness:.5,transparent:!0}};function H({char:e,index:t,totalLetters:r,position:n,phase:c,theme:m,fontUrl:s}){let l=(0,W.useRef)(null),o=(0,W.useRef)(null),a=(0,W.useMemo)(()=>{let f=t/r*Math.PI*2;return{x:Math.cos(f)*4+(Math.random()-.5)*2,y:-3+Math.random()*-3,z:-5+Math.random()*-3,rotX:(Math.random()-.5)*Math.PI*2,rotY:(Math.random()-.5)*Math.PI*2}},[t,r]),i=Ke[m];return(0,ge.useFrame)(f=>{if(!l.current)return;let g=f.clock.getElapsedTime();o.current===null&&(o.current=g);let d=g-o.current,b=t*.12;if(c==="loading"){l.current.position.set(n[0]+a.x,n[1]+a.y,n[2]+a.z),l.current.rotation.set(a.rotX,a.rotY,0),l.current.scale.setScalar(0);return}if(c==="entering"){let u=Math.max(0,d-b),p=1-Math.exp(-u*3),x=1+Math.sin(u*8)*Math.max(0,.15-u*.1);l.current.position.set(D.MathUtils.lerp(n[0]+a.x,n[0],p),D.MathUtils.lerp(n[1]+a.y,n[1],p),D.MathUtils.lerp(n[2]+a.z,n[2],p)),l.current.rotation.set(D.MathUtils.lerp(a.rotX,0,p),D.MathUtils.lerp(a.rotY,0,p),0),l.current.scale.setScalar(Math.min(p*x,1.05));return}if(c==="idle"){let u=Math.sin(g*1.2+t*.5)*.015,p=Math.sin(g*.8+t*.3)*.008;l.current.position.set(n[0]+p,n[1]+u,n[2]),l.current.rotation.set(Math.sin(g*.5+t)*.01,Math.sin(g*.3+t*.7)*.01,0),l.current.scale.setScalar(1);return}if(c==="exiting"){let u=Math.max(0,d-b*.5),p=Math.min(u*2,1),x=p*p;l.current.position.set(n[0]+a.x*x*.5,n[1],n[2]-x*8),l.current.scale.setScalar(Math.max(1-x,0)),l.current.rotation.y+=.05}}),e===" "?null:React.createElement("group",{ref:l,position:n},React.createElement(be.Text3D,{font:s,size:.8,height:.35,bevelEnabled:!0,bevelSize:.02,bevelThickness:.01,bevelSegments:3,curveSegments:12},e,React.createElement("meshPhysicalMaterial",{color:i.color,metalness:i.metalness,roughness:i.roughness,clearcoat:i.clearcoat,emissive:i.emissive,emissiveIntensity:i.emissiveIntensity,envMapIntensity:i.envMapIntensity,transmission:i.transmission,ior:i.ior,thickness:i.thickness,transparent:i.transparent,toneMapped:m!=="neon"})))}var Y=require("react"),xe=require("@react-three/fiber"),ie=require("@react-three/drei"),ve=T(require("three")),Ze={gold:"#FFD700",neon:"#00ffff",emerald:"#10b981",crimson:"#ff1744",obsidian:"#a855f7",glass:"#ffffff"};function qe({color:e,count:t=60}){let r=(0,Y.useRef)(null),n=(0,Y.useRef)(new ve.Object3D),c=(0,Y.useRef)(null),m=(0,Y.useRef)(null);if(!c.current){c.current=new Float32Array(t),m.current=new Float32Array(t*3);for(let s=0;s<t;s++)c.current[s]=.1+Math.random()*.3,m.current[s*3]=(Math.random()-.5)*16,m.current[s*3+1]=(Math.random()-.5)*10,m.current[s*3+2]=(Math.random()-.5)*12}return(0,xe.useFrame)(s=>{if(!r.current||!c.current||!m.current)return;let l=s.clock.getElapsedTime();for(let o=0;o<t;o++){let a=c.current[o],i=m.current[o*3],f=m.current[o*3+1],g=m.current[o*3+2];n.current.position.set(i+Math.sin(l*a+o)*2,f+Math.cos(l*a*.7+o*.5)*1.5,g+Math.sin(l*a*.5+o*.3)*2),n.current.scale.setScalar(.015+Math.sin(l+o)*.005),n.current.updateMatrix(),r.current.setMatrixAt(o,n.current.matrix)}r.current.instanceMatrix.needsUpdate=!0}),React.createElement("instancedMesh",{ref:r,args:[void 0,void 0,t]},React.createElement("sphereGeometry",{args:[1,6,6]}),React.createElement("meshBasicMaterial",{color:e,transparent:!0,opacity:.3,toneMapped:!1}))}function B({theme:e,visible:t}){let r=Ze[e];return t?React.createElement("group",null,React.createElement(ie.Sparkles,{count:150,scale:10,size:4,speed:.3,opacity:.8,color:r,noise:.6}),React.createElement(ie.Sparkles,{count:80,scale:16,size:2,speed:.15,opacity:.4,color:"#ffffff",noise:.8}),React.createElement(qe,{color:r,count:50})):null}var se=require("react"),K=require("@react-three/fiber"),F=T(require("three"));function A({phase:e}){let{camera:t,pointer:r}=(0,K.useThree)(),n=(0,se.useRef)(null),c=(0,se.useRef)(e);return c.current!==e&&(c.current=e,n.current=null),(0,K.useFrame)(m=>{let s=m.clock.getElapsedTime();n.current===null&&(n.current=s);let l=s-n.current;if(e==="loading"){t.position.set(0,0,14),t.lookAt(0,0,0);return}if(e==="entering"){let o=Math.min(l/3,1),a=1-Math.pow(1-o,3),i=F.MathUtils.lerp(14,6,a),f=F.MathUtils.lerp(1,.2,a);t.position.set(0,f,i),t.lookAt(0,0,0);return}if(e==="idle"){let o=Math.sin(s*.15)*.3,a=Math.cos(s*.1)*.15+.2,i=r.x*.3,f=r.y*.15;t.position.x=F.MathUtils.damp(t.position.x,o+i,3,.016),t.position.y=F.MathUtils.damp(t.position.y,a+f,3,.016),t.position.z=F.MathUtils.damp(t.position.z,6,3,.016),t.lookAt(0,0,0);return}if(e==="exiting"){let o=Math.min(l/1.5,1),a=o*o*o,i=F.MathUtils.lerp(6,-8,a);t.position.set(0,0,i),t.lookAt(0,0,0)}}),null}var C=require("react"),Z=require("@react-three/fiber"),k=T(require("three"));var ye={gold:["#FFD700","#FF8C00","#FF4500","#FFF8DC"],neon:["#00ffff","#0088ff","#ff00ff","#ffffff"],emerald:["#00ff88","#10b981","#059669","#a7f3d0"],crimson:["#ff1744","#d50000","#ff5252","#ffb74d"],obsidian:["#a855f7","#6366f1","#3b82f6","#ffffff"],glass:["#ffffff","#e0e7ff","#93c5fd","#60a5fa"]};function I({theme:e="gold",enabled:t=!0}){let{camera:r,raycaster:n}=(0,Z.useThree)(),[c,m]=(0,C.useState)([]),s=(0,C.useRef)(0),l=(0,C.useCallback)(o=>{if(!t)return;let a=0,i=0;if("touches"in o&&o.touches.length>0)a=o.touches[0].clientX,i=o.touches[0].clientY;else if("clientX"in o)a=o.clientX,i=o.clientY;else return;let f=new k.Vector2(a/window.innerWidth*2-1,-(i/window.innerHeight)*2+1);n.setFromCamera(f,r);let g=new k.Plane(new k.Vector3(0,0,1),0),d=new k.Vector3;if(n.ray.intersectPlane(g,d),!d)return;let b=ye[e]||ye.gold,u=35,p=[];for(let h=0;h<u;h++){let v=Math.random()*Math.PI*2,M=1.5+Math.random()*4.5,L=(Math.random()-.3)*3,oe=new k.Vector3(Math.cos(v)*M,Math.sin(v)*M+L,(Math.random()-.5)*M*.8),De=b[Math.floor(Math.random()*b.length)];p.push({id:h,position:d.clone(),velocity:oe,color:new k.Color(De),size:.08+Math.random()*.12,life:1,maxLife:.6+Math.random()*.8})}let x={id:s.current++,origin:d.clone(),sparks:p,color:b[0],lightIntensity:4,time:0};m(h=>[...h.slice(-4),x])},[r,n,e]);return(0,C.useEffect)(()=>(window.addEventListener("pointerdown",l),()=>{window.removeEventListener("pointerdown",l)}),[l]),(0,Z.useFrame)((o,a)=>{c.length!==0&&m(i=>i.map(f=>{let g=f.time+a,d=Math.max(0,f.lightIntensity-a*8),b=f.sparks.map(u=>{let p=u.life-a/u.maxLife;if(p<=0)return null;let x=u.position.clone().addScaledVector(u.velocity,a);return u.velocity.y-=a*3.5,u.velocity.multiplyScalar(.96),P(y({},u),{position:x,life:p})}).filter(Boolean);return b.length===0&&d<=0?null:P(y({},f),{time:g,lightIntensity:d,sparks:b})}).filter(Boolean))}),React.createElement("group",null,c.map(o=>React.createElement("group",{key:o.id},o.lightIntensity>.05&&React.createElement("pointLight",{position:o.origin,intensity:o.lightIntensity*3,distance:6,color:o.color}),o.sparks.map(a=>React.createElement("mesh",{key:a.id,position:a.position},React.createElement("sphereGeometry",{args:[a.size*a.life,6,6]}),React.createElement("meshBasicMaterial",{color:a.color,transparent:!0,opacity:a.life,toneMapped:!1}))))))}var R=require("react"),q=require("@react-three/fiber"),E=T(require("three"));var we={gold:"#FFD700",neon:"#00ffff",emerald:"#10b981",crimson:"#ff1744",obsidian:"#a855f7",glass:"#ffffff"};function _({theme:e="gold",enabled:t=!0}){let{camera:r,raycaster:n}=(0,q.useThree)(),[c,m]=(0,R.useState)([]),s=(0,R.useRef)(0),l=(0,R.useCallback)(o=>{if(!t)return;let a=0,i=0;if("touches"in o&&o.touches.length>0)a=o.touches[0].clientX,i=o.touches[0].clientY;else if("clientX"in o)a=o.clientX,i=o.clientY;else return;let f=new E.Vector2(a/window.innerWidth*2-1,-(i/window.innerHeight)*2+1);n.setFromCamera(f,r);let g=new E.Plane(new E.Vector3(0,0,1),0),d=new E.Vector3;if(n.ray.intersectPlane(g,d),!d)return;let b=we[e]||we.gold,u={id:s.current++,origin:d.clone(),radius:.1,maxRadius:3.5,life:1,color:new E.Color(b)};m(p=>[...p.slice(-4),u])},[r,n,e,t]);return(0,R.useEffect)(()=>(window.addEventListener("pointerdown",l),()=>{window.removeEventListener("pointerdown",l)}),[l]),(0,q.useFrame)((o,a)=>{c.length!==0&&m(i=>i.map(f=>{let g=f.life-a*1.8;if(g<=0)return null;let d=f.radius+a*5;return P(y({},f),{life:g,radius:d})}).filter(Boolean))}),t?React.createElement("group",null,c.map(o=>React.createElement("mesh",{key:o.id,position:o.origin,rotation:[0,0,0]},React.createElement("ringGeometry",{args:[o.radius*.9,o.radius,48]}),React.createElement("meshBasicMaterial",{color:o.color,transparent:!0,opacity:o.life*.75,side:E.DoubleSide,toneMapped:!1})))):null}var J=require("react"),Q=require("@react-three/fiber"),ee=T(require("three")),Ee={gold:"#ffaa00",neon:"#00ffff",emerald:"#00ffaa",crimson:"#ff0055",obsidian:"#9900ff",glass:"#88ccff"};function O({theme:e="neon",enabled:t=!0}){let{pointer:r}=(0,Q.useThree)(),n=(0,J.useRef)(null),c=Ee[e]||Ee.neon,m=30,s=(0,J.useMemo)(()=>{let l=new ee.BufferGeometry,o=new Float32Array(m*2*3);return l.setAttribute("position",new ee.BufferAttribute(o,3)),l},[m]);return(0,Q.useFrame)(l=>{if(!n.current||!t)return;let o=l.clock.getElapsedTime(),a=n.current.geometry.attributes.position,i=a.array,f=r.x*6,g=r.y*3;for(let d=0;d<m;d++){let b=d*6,u=d/m*Math.PI*2+o*2,p=2.5+Math.sin(o*4+d)*.5,x=Math.cos(u)*p,h=Math.sin(u)*p,v=(Math.random()-.5)*1.5,M=x+(f-x)*.3+(Math.random()-.5)*.8,L=h+(g-h)*.3+(Math.random()-.5)*.8,oe=v+(Math.random()-.5)*.8;i[b]=x,i[b+1]=h,i[b+2]=v,i[b+3]=M,i[b+4]=L,i[b+5]=oe}a.needsUpdate=!0}),t?React.createElement("lineSegments",{ref:n,geometry:s},React.createElement("lineBasicMaterial",{color:c,transparent:!0,opacity:.6,linewidth:2,toneMapped:!1})):null}var Me={gold:"radial-gradient(circle at center, #1c1503 0%, #080601 60%, #020201 100%)",neon:"radial-gradient(circle at center, #021a1e 0%, #030d14 60%, #010408 100%)",emerald:"radial-gradient(circle at center, #032117 0%, #02120d 60%, #010705 100%)",crimson:"radial-gradient(circle at center, #240409 0%, #120205 60%, #060102 100%)",obsidian:"radial-gradient(circle at center, #120d24 0%, #080512 60%, #030206 100%)",glass:"radial-gradient(circle at center, #0f172a 0%, #070b14 60%, #020205 100%)"},Je="/fonts/cinema_display.typeface.json";function Qe(e){let n=-(e.length*.65)/2;return e.split("").map((c,m)=>[n+m*.65,0,0])}function X({text:e="CINEMA",theme:t="emerald",customBackground:r,interactiveSparks:n=!0,interactiveShockwave:c=!0,interactivePlasma:m=!0,showParticles:s=!0,enableBloom:l=!0,className:o="",style:a,children:i}){let[f,g]=(0,z.useState)(e),[d,b]=(0,z.useState)(t),u=(f||e||"CINEMA").toUpperCase(),p=u.split(""),x=(0,z.useMemo)(()=>Qe(u),[u]),h=d||t||"emerald",v=r||Me[h]||Me.emerald;return React.createElement("div",{className:`relative w-full h-full min-h-[350px] overflow-hidden select-none ${o}`,style:y({background:v},a)},React.createElement("div",{className:"absolute inset-0 z-0 pointer-events-auto"},React.createElement(ke.Canvas,{camera:{position:[0,0,14],fov:45,near:.1,far:50},dpr:[1,2],gl:{antialias:!0,toneMapping:4,toneMappingExposure:1.2}},React.createElement(z.Suspense,{fallback:null},React.createElement(te.Environment,{preset:"studio"}),React.createElement("ambientLight",{intensity:.3}),React.createElement("directionalLight",{position:[5,8,5],intensity:1.5,color:"#ffffff"}),React.createElement("pointLight",{position:[-5,-3,-5],intensity:.6,color:h==="emerald"?"#10b981":h==="crimson"?"#ff1744":h==="neon"?"#00ffff":"#FFD700"}),React.createElement(A,{phase:"idle"}),React.createElement(I,{enabled:n,theme:h}),React.createElement(_,{enabled:c,theme:h}),React.createElement(O,{enabled:m,theme:h}),React.createElement(te.Center,{disableY:!0,disableZ:!0},React.createElement("group",null,p.map((M,L)=>React.createElement(H,{key:`${M}-${L}`,char:M,index:L,totalLetters:p.length,position:x[L],phase:"idle",theme:h,fontUrl:Je})))),s&&React.createElement(B,{theme:h,visible:!0}),React.createElement(N.EffectComposer,null,React.createElement(N.Bloom,{luminanceThreshold:.7,luminanceSmoothing:.9,intensity:l?.9:0,mipmapBlur:!0}),React.createElement(N.Vignette,{offset:.3,darkness:.85}),React.createElement(N.Noise,{opacity:.025}))))),i&&React.createElement("div",{className:"relative z-10 w-full h-full pointer-events-none flex flex-col items-center justify-center"},i))}function Te(e,t={}){let r=n=>le.default.createElement(X,y({},t),le.default.createElement(e,y({},n)));return r.displayName=`WithCinema3D(${e.displayName||e.name||"Component"})`,r}var w=require("react"),Re=require("@react-three/fiber"),re=require("@react-three/drei"),S=require("@react-three/postprocessing");var et=[{key:"gold",label:"Gold",color:"#FFD700"},{key:"neon",label:"Neon",color:"#00ffff"},{key:"emerald",label:"Emerald",color:"#10b981"},{key:"crimson",label:"Crimson",color:"#ff1744"},{key:"obsidian",label:"Obsidian",color:"#a855f7"},{key:"glass",label:"Glass",color:"#ffffff"}];function $({phase:e,cinemaName:t,theme:r,effects:n,onTitleChange:c,onThemeChange:m,onToggleEffect:s}){return React.createElement("div",{className:"absolute inset-0 pointer-events-none z-10 flex flex-col items-center justify-between p-6 md:p-10",style:{opacity:e==="exiting"?0:1,transition:"opacity 0.8s ease-out"}},React.createElement("div",{className:"w-full max-w-xl flex flex-col items-center gap-2 pointer-events-auto",style:{opacity:e==="idle"||e==="entering"?1:0,transform:e==="idle"||e==="entering"?"translateY(0)":"translateY(-20px)",transition:"all 1s ease-out 0.3s"}},React.createElement("label",{className:"text-[10px] tracking-[0.3em] uppercase text-white/50 font-bold"},"Live 3D Title Control"),React.createElement("div",{className:"relative w-full"},React.createElement("input",{type:"text",value:t,onChange:a=>c(a.target.value),maxLength:18,placeholder:"Type any title...",className:"w-full px-6 py-3 rounded-full text-center text-sm md:text-base font-bold tracking-widest uppercase outline-none transition-all duration-300",style:{background:"rgba(255, 255, 255, 0.08)",backdropFilter:"blur(16px)",border:"1px solid rgba(255, 255, 255, 0.2)",color:"#ffffff",boxShadow:"0 8px 32px rgba(0, 0, 0, 0.37)"}}))),e==="loading"&&React.createElement("div",{className:"absolute inset-0 flex items-center justify-center"},React.createElement("div",{className:"w-16 h-16 rounded-full border-2 animate-spin",style:{borderColor:"transparent",borderTopColor:"rgba(255, 215, 0, 0.8)",borderRightColor:"rgba(255, 215, 0, 0.3)"}})),React.createElement("div",{className:"w-full max-w-3xl flex flex-col items-center gap-5"},React.createElement("div",{className:"flex flex-wrap items-center justify-center gap-2 pointer-events-auto",style:{opacity:e==="idle"||e==="entering"?1:0,transition:"opacity 1s ease-out 0.8s"}},React.createElement("span",{className:"text-[9px] uppercase tracking-[0.25em] text-white/40 mr-2 font-bold"},"Effects"),React.createElement("button",{onClick:()=>s("sparks"),className:`px-4 py-1.5 rounded-full text-[11px] font-bold tracking-wider uppercase transition-all duration-300 cursor-pointer ${n.sparks?"bg-amber-500/30 text-amber-200 border-amber-400/60 shadow-[0_0_15px_rgba(245,158,11,0.4)]":"bg-white/5 text-white/40 border-white/10 hover:text-white/70"} border`},"\u{1F525} Sparks"),React.createElement("button",{onClick:()=>s("shockwave"),className:`px-4 py-1.5 rounded-full text-[11px] font-bold tracking-wider uppercase transition-all duration-300 cursor-pointer ${n.shockwave?"bg-cyan-500/30 text-cyan-200 border-cyan-400/60 shadow-[0_0_15px_rgba(6,182,212,0.4)]":"bg-white/5 text-white/40 border-white/10 hover:text-white/70"} border`},"\u{1F30A} Wave"),React.createElement("button",{onClick:()=>s("plasma"),className:`px-4 py-1.5 rounded-full text-[11px] font-bold tracking-wider uppercase transition-all duration-300 cursor-pointer ${n.plasma?"bg-purple-500/30 text-purple-200 border-purple-400/60 shadow-[0_0_15px_rgba(168,85,247,0.4)]":"bg-white/5 text-white/40 border-white/10 hover:text-white/70"} border`},"\u26A1 Plasma"),React.createElement("button",{onClick:()=>s("embers"),className:`px-4 py-1.5 rounded-full text-[11px] font-bold tracking-wider uppercase transition-all duration-300 cursor-pointer ${n.embers?"bg-emerald-500/30 text-emerald-200 border-emerald-400/60 shadow-[0_0_15px_rgba(16,185,129,0.4)]":"bg-white/5 text-white/40 border-white/10 hover:text-white/70"} border`},"\u2728 Embers")),React.createElement("div",{className:"flex items-center gap-3 pointer-events-auto",style:{opacity:e==="idle"||e==="entering"?1:0,transition:"opacity 1s ease-out 1.2s"}},React.createElement("span",{className:"text-[10px] uppercase tracking-[0.3em] text-white/40 mr-2 font-bold"},"Theme"),React.createElement("div",{className:"flex items-center gap-2 md:gap-3"},et.map(a=>{let i=r===a.key;return React.createElement("button",{key:a.key,onClick:()=>m(a.key),className:"group relative flex flex-col items-center gap-1.5 cursor-pointer outline-none","aria-label":`Switch to ${a.label} theme`},React.createElement("div",{className:"relative w-11 h-7 md:w-14 md:h-9 rounded-md overflow-hidden transition-all duration-300",style:{border:i?`2px solid ${a.color}`:"1px solid rgba(255, 255, 255, 0.15)",transform:i?"scale(1.1) translateY(-2px)":"scale(1) translateY(0)",boxShadow:i?`0 4px 20px ${a.color}60`:"0 2px 10px rgba(0,0,0,0.5)"}},React.createElement("div",{className:"absolute inset-0 opacity-80",style:{backgroundColor:a.color}})),React.createElement("span",{className:"text-[9px] uppercase tracking-widest font-semibold transition-colors duration-300",style:{color:i?"#ffffff":"rgba(255, 255, 255, 0.4)"}},a.label))})))))}var tt="/fonts/cinema_display.typeface.json",Ce={gold:"radial-gradient(circle at center, #1c1503 0%, #080601 60%, #020201 100%)",neon:"radial-gradient(circle at center, #021a1e 0%, #030d14 60%, #010408 100%)",emerald:"radial-gradient(circle at center, #032117 0%, #02120d 60%, #010705 100%)",crimson:"radial-gradient(circle at center, #240409 0%, #120205 60%, #060102 100%)",obsidian:"radial-gradient(circle at center, #120d24 0%, #080512 60%, #030206 100%)",glass:"radial-gradient(circle at center, #0f172a 0%, #070b14 60%, #020205 100%)"};function rt(e){let n=-(e.length*.65)/2;return e.split("").map((c,m)=>[n+m*.65,0,0])}function ce({cinemaName:e="CINEMULTIPLEX",defaultTheme:t="emerald",customBackground:r,onEnterCinema:n}){let[c,m]=(0,w.useState)("loading"),[s,l]=(0,w.useState)(t),[o,a]=(0,w.useState)(e),[i,f]=(0,w.useState)({sparks:!0,shockwave:!0,plasma:!0,embers:!0}),g=(o||"CINEMA").toUpperCase(),d=g.split(""),b=(0,w.useMemo)(()=>rt(g),[g]);(0,w.useEffect)(()=>{let h=setTimeout(()=>m("entering"),800),v=d.length*120+1500,M=setTimeout(()=>m("idle"),800+v);return()=>{clearTimeout(h),clearTimeout(M)}},[d.length]);let u=(0,w.useCallback)(()=>{m("exiting"),setTimeout(()=>{n&&n()},1800)},[n]),p=(0,w.useCallback)(h=>{f(v=>P(y({},v),{[h]:!v[h]}))},[]),x=r||Ce[s]||Ce.emerald;return React.createElement("div",{className:"fixed inset-0 w-screen h-screen transition-all duration-1000 select-none overflow-hidden",style:{background:x}},React.createElement(Re.Canvas,{camera:{position:[0,0,14],fov:45,near:.1,far:50},dpr:[1,2],gl:{antialias:!0,toneMapping:4,toneMappingExposure:1.2}},React.createElement(w.Suspense,{fallback:null},React.createElement(re.Environment,{preset:"studio"}),React.createElement("ambientLight",{intensity:.3}),React.createElement("directionalLight",{position:[5,8,5],intensity:1.5,color:"#ffffff"}),React.createElement("pointLight",{position:[-5,-3,-5],intensity:.6,color:s==="emerald"?"#10b981":s==="crimson"?"#ff1744":s==="neon"?"#00ffff":"#FFD700"}),React.createElement("spotLight",{position:[0,10,0],angle:.4,penumbra:.8,intensity:.9,color:"#ffffff"}),React.createElement("pointLight",{position:[0,0,-5],intensity:.4,color:"#ffffff"}),React.createElement(A,{phase:c}),i.sparks&&React.createElement(I,{theme:s}),React.createElement(_,{theme:s,enabled:i.shockwave}),React.createElement(O,{theme:s,enabled:i.plasma}),React.createElement(re.Center,{disableY:!0,disableZ:!0},React.createElement("group",null,d.map((h,v)=>React.createElement(H,{key:`${h}-${v}`,char:h,index:v,totalLetters:d.length,position:b[v],phase:c,theme:s,fontUrl:tt})))),React.createElement(B,{theme:s,visible:c!=="loading"&&i.embers}),React.createElement(S.EffectComposer,null,React.createElement(S.Bloom,{luminanceThreshold:.7,luminanceSmoothing:.9,intensity:s==="neon"||s==="emerald"||s==="crimson"?1.4:.7,mipmapBlur:!0}),React.createElement(S.Vignette,{offset:.3,darkness:.85}),React.createElement(S.Noise,{opacity:.025})))),React.createElement($,{phase:c,cinemaName:o,theme:s,effects:i,onTitleChange:a,onThemeChange:l,onToggleEffect:p}))}var ze=require("next-intl");var Ne=require("next-intl/routing"),Se=require("next-intl/navigation"),nt=(0,Ne.defineRouting)({locales:["en","es"],defaultLocale:"en"}),{Link:U,redirect:It,usePathname:Le,useRouter:Pe}=(0,Se.createNavigation)(nt);var He=require("next-intl");var Be=require("lucide-react");function me(){let e=(0,He.useLocale)(),t=Pe(),r=Le();return React.createElement("button",{onClick:()=>{let c=e==="en"?"es":"en";t.replace(r,{locale:c})},className:"flex items-center gap-2 text-sm font-medium text-muted-foreground hover:text-white transition-colors uppercase tracking-wider"},React.createElement(Be.Globe,{className:"w-4 h-4"}),e==="en"?"ES":"EN")}var ne=T(require("react")),_e=require("@radix-ui/react-slot"),Oe=require("class-variance-authority");var Fe=require("clsx"),Ae=require("tailwind-merge");function Ie(...e){return(0,Ae.twMerge)((0,Fe.clsx)(e))}var ot=(0,Oe.cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground shadow hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",outline:"border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2",sm:"h-8 rounded-md px-3 text-xs",lg:"h-10 rounded-md px-8",icon:"h-9 w-9"}},defaultVariants:{variant:"default",size:"default"}}),j=ne.forwardRef((s,m)=>{var l=s,{className:e,variant:t,size:r,asChild:n=!1}=l,c=pe(l,["className","variant","size","asChild"]);return ne.createElement(n?_e.Slot:"button",y({className:Ie(ot({variant:t,size:r,className:e})),ref:m},c))});j.displayName="Button";function de({cinemaName:e="NOVA",webTheme:t="neon"}){let r=(0,ze.useTranslations)(),n=t==="noir"?"bg-slate-900/40 mix-blend-color":t==="crimson"?"bg-red-900/30 mix-blend-color":"bg-blue-900/20 mix-blend-color";return React.createElement("div",{className:`min-h-screen bg-black text-white selection:bg-white/30 font-sans transition-colors duration-1000 group theme-${t}`},React.createElement("nav",{className:"absolute top-0 left-0 right-0 z-50 flex items-center justify-between px-8 py-6 mix-blend-difference"},React.createElement("div",{className:"flex items-center gap-12"},React.createElement(U,{href:"/",className:"text-3xl font-bold tracking-tighter uppercase font-display"},e,"."),React.createElement("div",{className:"hidden md:flex items-center gap-8 text-sm font-semibold tracking-widest text-white/70"},React.createElement(U,{href:"/schedule",className:"hover:text-white transition-colors"},r("nav.schedule")),React.createElement(U,{href:"/experiences",className:"hover:text-white transition-colors"},r("nav.experiences")),React.createElement(U,{href:"/membership",className:"hover:text-white transition-colors"},r("nav.membership")))),React.createElement("div",{className:"flex items-center gap-6"},React.createElement(me,null),React.createElement("div",{className:"hidden sm:flex items-center gap-4"},React.createElement(U,{href:"/login",className:"text-sm font-semibold tracking-widest text-white/70 hover:text-white transition-colors"},r("nav.login")),React.createElement(j,{variant:"outline",className:"rounded-none border-white/40 text-white bg-transparent hover:bg-white hover:text-black transition-colors font-semibold tracking-widest text-xs px-6 py-5 uppercase"},r("nav.bookTickets"))))),React.createElement("div",{className:"relative h-screen w-full flex flex-col justify-end pb-24 px-8 md:px-16 overflow-hidden"},React.createElement("div",{className:"absolute inset-0 z-0"},React.createElement("div",{className:"absolute inset-0 bg-[url('https://images.unsplash.com/photo-1605810230434-7631ac76ec81?q=80&w=2560&auto=format&fit=crop')] bg-cover bg-center"}),React.createElement("div",{className:"absolute inset-0 bg-gradient-to-t from-black via-black/50 to-transparent z-10"}),React.createElement("div",{className:`absolute inset-0 ${n} z-10`})),React.createElement("div",{className:"relative z-20 max-w-5xl"},React.createElement("div",{className:"flex items-center gap-3 mb-6"},React.createElement("span",{className:"bg-blue-600 text-white text-[10px] font-bold px-3 py-1 tracking-widest"},r("hero.genreImax")),React.createElement("span",{className:"border border-white/20 text-white/80 text-[10px] font-bold px-3 py-1 tracking-widest"},r("hero.genreAction"))),React.createElement("h1",{className:"text-6xl md:text-[8rem] leading-[0.85] font-display font-black tracking-tighter mb-6 uppercase drop-shadow-2xl"},r("hero.title")),React.createElement("p",{className:"max-w-2xl text-lg md:text-xl text-white/70 font-medium mb-10 leading-relaxed drop-shadow-md"},r("hero.synopsis")),React.createElement("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-4"},React.createElement(j,{className:"rounded-none bg-white text-black hover:bg-white/90 font-bold tracking-widest text-xs px-8 py-6 uppercase transition-transform hover:scale-105 active:scale-95"},r("hero.getTickets")),React.createElement(j,{variant:"outline",className:"rounded-none border-white/30 text-white bg-black/20 backdrop-blur-md hover:bg-white/10 transition-colors font-bold tracking-widest text-xs px-8 py-6 uppercase"},r("hero.watchTrailer"))))))}0&&(module.exports={AnimatedLetter,CameraRig,CinemaBackground,CinemaHome,CinemaLoader,ClickFireSparks,ClickShockwave,ElectricPlasma,LoaderOverlay,SceneParticles,withCinema3D});
3
3
  //# sourceMappingURL=index.js.map