VoidVision commited on
Commit
eb7e870
·
verified ·
1 Parent(s): adedd68

i need it very very professional type

Browse files
Files changed (3) hide show
  1. components/parallax-section.js +85 -0
  2. script.js +23 -12
  3. style.css +168 -31
components/parallax-section.js ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class ParallaxSection extends HTMLElement {
2
+ connectedCallback() {
3
+ this.attachShadow({ mode: 'open' });
4
+ this.shadowRoot.innerHTML = `
5
+ <style>
6
+ :host {
7
+ display: block;
8
+ position: relative;
9
+ height: 100vh;
10
+ overflow: hidden;
11
+ perspective: 1000px;
12
+ }
13
+ .parallax-container {
14
+ position: absolute;
15
+ top: 0;
16
+ left: 0;
17
+ right: 0;
18
+ bottom: 0;
19
+ transform-style: preserve-3d;
20
+ }
21
+ .parallax-layer {
22
+ position: absolute;
23
+ inset: 0;
24
+ background-size: cover;
25
+ background-position: center;
26
+ will-change: transform;
27
+ }
28
+ .content-layer {
29
+ position: relative;
30
+ z-index: 10;
31
+ height: 100%;
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ }
36
+ </style>
37
+ <div class="parallax-container">
38
+ <div class="parallax-layer layer-1"></div>
39
+ <div class="parallax-layer layer-2"></div>
40
+ <div class="parallax-layer layer-3"></div>
41
+ <div class="content-layer">
42
+ <slot></slot>
43
+ </div>
44
+ </div>
45
+ `;
46
+
47
+ this.layers = [
48
+ this.shadowRoot.querySelector('.layer-1'),
49
+ this.shadowRoot.querySelector('.layer-2'),
50
+ this.shadowRoot.querySelector('.layer-3')
51
+ ];
52
+
53
+ // Set background images from attributes
54
+ if (this.hasAttribute('layer1')) {
55
+ this.layers[0].style.backgroundImage = `url('${this.getAttribute('layer1')}')`;
56
+ }
57
+ if (this.hasAttribute('layer2')) {
58
+ this.layers[1].style.backgroundImage = `url('${this.getAttribute('layer2')}')`;
59
+ }
60
+ if (this.hasAttribute('layer3')) {
61
+ this.layers[2].style.backgroundImage = `url('${this.getAttribute('layer3')}')`;
62
+ }
63
+
64
+ // Parallax effect
65
+ window.addEventListener('scroll', () => {
66
+ const scrollY = window.scrollY;
67
+ const rect = this.getBoundingClientRect();
68
+ const offsetTop = rect.top + window.scrollY;
69
+ const viewportHeight = window.innerHeight;
70
+
71
+ // Only animate when section is in view
72
+ if (scrollY + viewportHeight > offsetTop && scrollY < offsetTop + rect.height) {
73
+ const progress = (scrollY - offsetTop + viewportHeight) / (viewportHeight + rect.height);
74
+
75
+ this.layers.forEach((layer, index) => {
76
+ const depth = (index + 1) * 0.2;
77
+ const translateY = progress * 100 * depth;
78
+ layer.style.transform = `translate3d(0, ${translateY}px, 0)`;
79
+ });
80
+ }
81
+ });
82
+ }
83
+ }
84
+
85
+ customElements.define('parallax-section', ParallaxSection);
script.js CHANGED
@@ -1,35 +1,38 @@
1
 
2
  document.addEventListener('DOMContentLoaded', function() {
3
- // Premium cursor effect
4
  class PremiumCursor {
5
  constructor() {
6
  this.cursor = document.createElement('div');
7
  this.cursorFollower = document.createElement('div');
8
  this.cursorInner = document.createElement('div');
 
9
  this.posX = 0;
10
  this.posY = 0;
11
  this.mouseX = 0;
12
  this.mouseY = 0;
13
  this.isHovering = false;
 
 
14
 
15
  this.initCursor();
16
  this.initEvents();
17
  this.animate();
 
18
  }
19
-
20
  initCursor() {
21
- // Outer circle
22
  this.cursor.style.position = 'fixed';
23
- this.cursor.style.width = '40px';
24
- this.cursor.style.height = '40px';
25
- this.cursor.style.border = '1px solid rgba(14, 165, 233, 0.5)';
26
  this.cursor.style.borderRadius = '50%';
27
  this.cursor.style.pointerEvents = 'none';
28
  this.cursor.style.zIndex = '9999';
29
  this.cursor.style.transform = 'translate(-50%, -50%) scale(0)';
30
- this.cursor.style.transition = 'transform 0.2s cubic-bezier(0.25, 0.1, 0.25, 1), border-color 0.3s ease';
31
-
32
- // Follower
33
  this.cursorFollower.style.position = 'fixed';
34
  this.cursorFollower.style.width = '12px';
35
  this.cursorFollower.style.height = '12px';
@@ -96,9 +99,17 @@ document.addEventListener('DOMContentLoaded', function() {
96
  requestAnimationFrame(() => this.animate());
97
  }
98
  }
99
-
100
- // Initialize premium cursor
101
- new PremiumCursor();
 
 
 
 
 
 
 
 
102
  const cursorTrail = document.createElement('div');
103
  cursorTrail.style.position = 'fixed';
104
  cursorTrail.style.width = '24px';
 
1
 
2
  document.addEventListener('DOMContentLoaded', function() {
3
+ // Luxury Cursor System
4
  class PremiumCursor {
5
  constructor() {
6
  this.cursor = document.createElement('div');
7
  this.cursorFollower = document.createElement('div');
8
  this.cursorInner = document.createElement('div');
9
+ this.cursorText = document.createElement('div');
10
  this.posX = 0;
11
  this.posY = 0;
12
  this.mouseX = 0;
13
  this.mouseY = 0;
14
  this.isHovering = false;
15
+ this.isClicking = false;
16
+ this.currentText = '';
17
 
18
  this.initCursor();
19
  this.initEvents();
20
  this.animate();
21
+ this.addHoverTextEffects();
22
  }
 
23
  initCursor() {
24
+ // Outer circle (magnetic field)
25
  this.cursor.style.position = 'fixed';
26
+ this.cursor.style.width = '48px';
27
+ this.cursor.style.height = '48px';
28
+ this.cursor.style.border = '1px solid rgba(14, 165, 233, 0.3)';
29
  this.cursor.style.borderRadius = '50%';
30
  this.cursor.style.pointerEvents = 'none';
31
  this.cursor.style.zIndex = '9999';
32
  this.cursor.style.transform = 'translate(-50%, -50%) scale(0)';
33
+ this.cursor.style.transition = 'transform 0.4s cubic-bezier(0.33, 1, 0.68, 1), border-color 0.4s ease, width 0.4s ease, height 0.4s ease';
34
+ this.cursor.style.mixBlendMode = 'exclusion';
35
+ // Follower
36
  this.cursorFollower.style.position = 'fixed';
37
  this.cursorFollower.style.width = '12px';
38
  this.cursorFollower.style.height = '12px';
 
99
  requestAnimationFrame(() => this.animate());
100
  }
101
  }
102
+ // Initialize luxury cursor system
103
+ const luxuryCursor = new PremiumCursor();
104
+
105
+ // Add click animation
106
+ document.addEventListener('mousedown', () => {
107
+ luxuryCursor.startClick();
108
+ });
109
+
110
+ document.addEventListener('mouseup', () => {
111
+ luxuryCursor.endClick();
112
+ });
113
  const cursorTrail = document.createElement('div');
114
  cursorTrail.style.position = 'fixed';
115
  cursorTrail.style.width = '24px';
style.css CHANGED
@@ -185,16 +185,55 @@
185
  transform: scale(1.05);
186
  filter: url('#liquid');
187
  }
188
- /* Professional Glass Morphism */
189
  .glass-morphism {
190
- background: linear-gradient(135deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.05));
191
- backdrop-filter: blur(12px) saturate(180%);
192
- -webkit-backdrop-filter: blur(12px) saturate(180%);
193
- border: 1px solid rgba(255, 255, 255, 0.125);
194
- box-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.15);
195
- transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
  }
197
 
 
 
 
 
 
 
 
 
 
 
 
198
  .glass-morphism:hover {
199
  transform: translateY(-2px);
200
  box-shadow: 0 12px 40px 0 rgba(31, 38, 135, 0.25);
@@ -349,29 +388,47 @@ h3 { font-size: var(--text-3xl); }
349
  h4 { font-size: var(--text-2xl); }
350
  h5 { font-size: var(--text-xl); }
351
  h6 { font-size: var(--text-lg); }
352
-
353
- /* Professional Underline Animation */
354
  .professional-underline {
355
  position: relative;
356
  display: inline-block;
 
357
  }
358
 
 
359
  .professional-underline::after {
360
  content: '';
361
  position: absolute;
362
- width: 0;
363
- height: 2px;
364
- bottom: -4px;
365
  left: 0;
 
 
366
  background: currentColor;
367
- transition: width 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
 
 
 
 
 
 
 
 
 
 
 
 
368
  transform-origin: left center;
369
  }
370
 
 
371
  .professional-underline:hover::after {
372
- width: 100%;
 
373
  }
374
 
 
 
 
375
  /* Typography Enhancements */
376
  .professional-headline {
377
  font-family: var(--font-decorative);
@@ -519,24 +576,55 @@ h6 { font-size: var(--text-lg); }
519
  .text-balance {
520
  text-wrap: balance;
521
  }
522
- /* Professional Card */
523
  .professional-card {
524
  position: relative;
525
  overflow: hidden;
526
  transition: all 0.8s cubic-bezier(0.16, 1, 0.3, 1);
527
  transform: translateZ(0);
528
  will-change: transform;
529
- border-radius: 24px;
 
 
 
 
 
530
  box-shadow:
531
- 0 1px 1px rgba(0,0,0,0.04),
532
- 0 2px 2px rgba(0,0,0,0.04),
533
- 0 4px 4px rgba(0,0,0,0.04),
534
- 0 8px 8px rgba(0,0,0,0.04),
535
- 0 16px 16px rgba(0,0,0,0.04);
536
- background: white;
537
- border: 1px solid rgba(var(--color-dark), 0.03);
538
- backdrop-filter: blur(12px);
539
- -webkit-backdrop-filter: blur(12px);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
540
  }
541
  .professional-card::before {
542
  content: '';
@@ -592,16 +680,52 @@ h6 { font-size: var(--text-lg); }
592
  .professional-card:hover::before {
593
  opacity: 1;
594
  }
595
-
596
- /* Professional Button */
597
  .professional-btn {
598
  position: relative;
599
  overflow: hidden;
600
- transition: all 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);
601
  transform: translateZ(0);
602
  will-change: transform;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
603
  }
604
 
 
 
 
 
 
 
 
 
 
 
 
 
 
605
  .professional-btn::after {
606
  content: '';
607
  position: absolute;
@@ -613,12 +737,25 @@ h6 { font-size: var(--text-lg); }
613
  transform: translateX(-100%);
614
  transition: transform 0.6s cubic-bezier(0.25, 0.8, 0.25, 1);
615
  }
616
-
617
  .professional-btn:hover {
618
- transform: translateY(-2px);
619
- box-shadow: 0 8px 20px rgba(14,165,233,0.3);
 
 
 
 
 
 
 
 
 
 
620
  }
621
 
 
 
 
 
622
  .professional-btn:hover::after {
623
  transform: translateX(0);
624
  }
 
185
  transform: scale(1.05);
186
  filter: url('#liquid');
187
  }
188
+ /* Ultra Premium Glass Morphism */
189
  .glass-morphism {
190
+ background: linear-gradient(
191
+ 135deg,
192
+ rgba(255, 255, 255, 0.12) 0%,
193
+ rgba(255, 255, 255, 0.05) 100%
194
+ );
195
+ backdrop-filter: blur(24px) saturate(200%) contrast(120%);
196
+ -webkit-backdrop-filter: blur(24px) saturate(200%) contrast(120%);
197
+ border: 1px solid rgba(255, 255, 255, 0.18);
198
+ box-shadow:
199
+ 0 12px 32px -12px rgba(31, 38, 135, 0.2),
200
+ inset 0 -8px 32px -8px rgba(0, 0, 0, 0.05),
201
+ inset 0 8px 32px -8px rgba(255, 255, 255, 0.08);
202
+ transition: all 0.5s cubic-bezier(0.33, 1, 0.68, 1);
203
+ position: relative;
204
+ overflow: hidden;
205
+ z-index: 1;
206
+ }
207
+
208
+ .glass-morphism::before {
209
+ content: '';
210
+ position: absolute;
211
+ top: 0;
212
+ left: 0;
213
+ right: 0;
214
+ bottom: 0;
215
+ background: linear-gradient(
216
+ 135deg,
217
+ rgba(255, 255, 255, 0.15) 0%,
218
+ rgba(255, 255, 255, 0) 60%
219
+ );
220
+ z-index: -1;
221
+ pointer-events: none;
222
+ transform: translateY(-100%);
223
+ transition: transform 0.6s cubic-bezier(0.33, 1, 0.68, 1);
224
  }
225
 
226
+ .glass-morphism:hover {
227
+ transform: translateY(-4px);
228
+ box-shadow:
229
+ 0 24px 48px -12px rgba(31, 38, 135, 0.3),
230
+ inset 0 -8px 32px -8px rgba(0, 0, 0, 0.1),
231
+ inset 0 8px 32px -8px rgba(255, 255, 255, 0.12);
232
+ }
233
+
234
+ .glass-morphism:hover::before {
235
+ transform: translateY(0);
236
+ }
237
  .glass-morphism:hover {
238
  transform: translateY(-2px);
239
  box-shadow: 0 12px 40px 0 rgba(31, 38, 135, 0.25);
 
388
  h4 { font-size: var(--text-2xl); }
389
  h5 { font-size: var(--text-xl); }
390
  h6 { font-size: var(--text-lg); }
391
+ /* Premium Underline Animation */
 
392
  .professional-underline {
393
  position: relative;
394
  display: inline-block;
395
+ padding-bottom: 0.25em;
396
  }
397
 
398
+ .professional-underline::before,
399
  .professional-underline::after {
400
  content: '';
401
  position: absolute;
402
+ bottom: 0;
 
 
403
  left: 0;
404
+ width: 100%;
405
+ height: 2px;
406
  background: currentColor;
407
+ transform-origin: right center;
408
+ transition: transform 0.6s cubic-bezier(0.33, 1, 0.68, 1);
409
+ }
410
+
411
+ .professional-underline::before {
412
+ transform: scaleX(0);
413
+ z-index: 2;
414
+ height: 1px;
415
+ background: rgba(255, 255, 255, 0.8);
416
+ }
417
+
418
+ .professional-underline::after {
419
+ transform: scaleX(0);
420
  transform-origin: left center;
421
  }
422
 
423
+ .professional-underline:hover::before,
424
  .professional-underline:hover::after {
425
+ transform: scaleX(1);
426
+ transform-origin: left center;
427
  }
428
 
429
+ .professional-underline:hover::after {
430
+ transition-delay: 0.1s;
431
+ }
432
  /* Typography Enhancements */
433
  .professional-headline {
434
  font-family: var(--font-decorative);
 
576
  .text-balance {
577
  text-wrap: balance;
578
  }
579
+ /* Executive Card Design */
580
  .professional-card {
581
  position: relative;
582
  overflow: hidden;
583
  transition: all 0.8s cubic-bezier(0.16, 1, 0.3, 1);
584
  transform: translateZ(0);
585
  will-change: transform;
586
+ border-radius: 32px;
587
+ background: linear-gradient(
588
+ 145deg,
589
+ rgba(255, 255, 255, 0.95) 0%,
590
+ rgba(255, 255, 255, 0.98) 100%
591
+ );
592
  box-shadow:
593
+ 0 1.6px 3.6px rgba(0, 0, 0, 0.012),
594
+ 0 4.4px 10px rgba(0, 0, 0, 0.018),
595
+ 0 10.5px 24.1px rgba(0, 0, 0, 0.022),
596
+ 0 35px 80px rgba(0, 0, 0, 0.03);
597
+ border: 1px solid rgba(var(--color-dark), 0.04);
598
+ backdrop-filter: blur(16px) saturate(180%) brightness(105%);
599
+ -webkit-backdrop-filter: blur(16px) saturate(180%) brightness(105%);
600
+ transform-style: preserve-3d;
601
+ perspective: 1000px;
602
+ }
603
+
604
+ .professional-card::after {
605
+ content: '';
606
+ position: absolute;
607
+ inset: 0;
608
+ background: linear-gradient(
609
+ 135deg,
610
+ rgba(255, 255, 255, 0.4) 0%,
611
+ rgba(255, 255, 255, 0.1) 100%
612
+ );
613
+ z-index: 1;
614
+ pointer-events: none;
615
+ opacity: 0;
616
+ transition: opacity 0.6s cubic-bezier(0.33, 1, 0.68, 1);
617
+ }
618
+
619
+ .professional-card:hover {
620
+ transform: translateY(-8px) scale(1.02) rotateX(1deg) rotateY(1deg);
621
+ box-shadow:
622
+ 0 25px 50px -12px rgba(0, 0, 0, 0.25),
623
+ 0 8px 24px -8px rgba(14, 165, 233, 0.15);
624
+ }
625
+
626
+ .professional-card:hover::after {
627
+ opacity: 1;
628
  }
629
  .professional-card::before {
630
  content: '';
 
680
  .professional-card:hover::before {
681
  opacity: 1;
682
  }
683
+ /* Luxury Button Effect */
 
684
  .professional-btn {
685
  position: relative;
686
  overflow: hidden;
687
+ transition: all 0.6s cubic-bezier(0.33, 1, 0.68, 1);
688
  transform: translateZ(0);
689
  will-change: transform;
690
+ perspective: 1000px;
691
+ transform-style: preserve-3d;
692
+ border: none;
693
+ outline: none;
694
+ cursor: pointer;
695
+ font-weight: 600;
696
+ letter-spacing: 0.02em;
697
+ text-transform: uppercase;
698
+ font-size: 0.875rem;
699
+ }
700
+
701
+ .professional-btn::before {
702
+ content: '';
703
+ position: absolute;
704
+ inset: 0;
705
+ background: linear-gradient(
706
+ 135deg,
707
+ rgba(255, 255, 255, 0.2) 0%,
708
+ rgba(255, 255, 255, 0.05) 50%,
709
+ rgba(255, 255, 255, 0.2) 100%
710
+ );
711
+ transform: translateX(-100%) skewX(-15deg);
712
+ transition: transform 0.8s cubic-bezier(0.33, 1, 0.68, 1);
713
+ z-index: 1;
714
  }
715
 
716
+ .professional-btn::after {
717
+ content: '';
718
+ position: absolute;
719
+ inset: 0;
720
+ border-radius: inherit;
721
+ background: linear-gradient(
722
+ 135deg,
723
+ rgba(255, 255, 255, 0.15) 0%,
724
+ rgba(255, 255, 255, 0) 60%
725
+ );
726
+ opacity: 0;
727
+ transition: opacity 0.4s ease;
728
+ }
729
  .professional-btn::after {
730
  content: '';
731
  position: absolute;
 
737
  transform: translateX(-100%);
738
  transition: transform 0.6s cubic-bezier(0.25, 0.8, 0.25, 1);
739
  }
 
740
  .professional-btn:hover {
741
+ transform: translateY(-4px) scale(1.02);
742
+ box-shadow:
743
+ 0 12px 24px rgba(14, 165, 233, 0.25),
744
+ 0 4px 12px rgba(124, 58, 237, 0.2);
745
+ }
746
+
747
+ .professional-btn:hover::before {
748
+ transform: translateX(150%) skewX(-15deg);
749
+ }
750
+
751
+ .professional-btn:hover::after {
752
+ opacity: 1;
753
  }
754
 
755
+ .professional-btn:active {
756
+ transform: translateY(-1px) scale(0.98);
757
+ transition: transform 0.2s ease;
758
+ }
759
  .professional-btn:hover::after {
760
  transform: translateX(0);
761
  }