File tree Expand file tree Collapse file tree 3 files changed +95
-1
lines changed
Expand file tree Collapse file tree 3 files changed +95
-1
lines changed Original file line number Diff line number Diff line change @@ -974,6 +974,57 @@ textarea.input-field {
974974 transform : translateY (0 );
975975}
976976
977+ /* ===== Preloader Styles ===== */
978+ # preloader {
979+ position : fixed;
980+ inset : 0 ;
981+ z-index : 9999 ;
982+ display : flex;
983+ flex-direction : column; /* Stack GIF and text vertically */
984+ align-items : center;
985+ justify-content : center;
986+ text-align : center;
987+ background-color : # 0d1013 ;
988+ transition : opacity 0.45s ease, visibility 0.45s ease;
989+ opacity : 1 ;
990+ visibility : visible;
991+ }
992+
993+ /* ===== Loader GIF ===== */
994+ # preloader-img {
995+ width : 150px ;
996+ height : 150px ;
997+ object-fit : contain;
998+ user-select : none;
999+ -webkit-user-drag : none;
1000+ display : block;
1001+ }
1002+
1003+ /* ===== Loading Text ===== */
1004+ .preloader-text {
1005+ margin-top : 12px ; /* gap between GIF and text */
1006+ font-family : 'Poppins' , sans-serif;
1007+ font-size : 1rem ;
1008+ font-weight : 500 ;
1009+ color : # ffffff ; /* you can change to #00A9FF for accent */
1010+ letter-spacing : 2px ;
1011+ text-transform : uppercase;
1012+ animation : pulse 1.6s ease-in-out infinite;
1013+ }
1014+
1015+ /* ===== Text Pulse Animation ===== */
1016+ @keyframes pulse {
1017+ 0% , 100% { opacity : 0.4 ; }
1018+ 50% { opacity : 1 ; }
1019+ }
1020+
1021+ /* ===== Fade-out (applied by JS) ===== */
1022+ # preloader .preloader--hidden {
1023+ opacity : 0 ;
1024+ visibility : hidden;
1025+ pointer-events : none;
1026+ }
1027+
9771028
9781029/*-----------------------------------*\
9791030 * #MEDIA QUERIES
Original file line number Diff line number Diff line change @@ -116,3 +116,43 @@ navLinks.forEach(link => {
116116 document . body . classList . remove ( "active" ) ;
117117 } ) ;
118118} ) ;
119+
120+ /**
121+ * Easy selector helper function (Used in the existing file structure)
122+ */
123+ const select = ( el , all = false ) => {
124+ el = el . trim ( ) ;
125+ if ( all ) {
126+ return [ ...document . querySelectorAll ( el ) ] ;
127+ } else {
128+ return document . querySelector ( el ) ;
129+ }
130+ }
131+
132+ /**
133+ * Preloader: fade out after short delay, then remove
134+ */
135+ let preloader = select ( '#preloader' ) ;
136+
137+ if ( preloader ) {
138+ window . addEventListener ( 'load' , ( ) => {
139+ // ⏳ Force loader to stay for at least 2 seconds
140+ setTimeout ( ( ) => {
141+ preloader . classList . add ( 'preloader--hidden' ) ;
142+
143+ const onTransitionEnd = ( e ) => {
144+ if ( e . propertyName === 'opacity' ) {
145+ preloader . removeEventListener ( 'transitionend' , onTransitionEnd ) ;
146+ if ( preloader . parentNode ) preloader . parentNode . removeChild ( preloader ) ;
147+ }
148+ } ;
149+
150+ preloader . addEventListener ( 'transitionend' , onTransitionEnd ) ;
151+
152+ // Fallback removal
153+ setTimeout ( ( ) => {
154+ if ( preloader . parentNode ) preloader . parentNode . removeChild ( preloader ) ;
155+ } , 1000 ) ;
156+ } , 2000 ) ; // <-- duration before fade-out (in ms)
157+ } ) ;
158+ }
Original file line number Diff line number Diff line change 4444</ head >
4545
4646< body class ="dark_theme " id ="top ">
47-
47+ < div id ="preloader " aria-hidden ="true ">
48+ < img src ="assets/images/loader-01.gif " alt ="Loading… " id ="preloader-img " />
49+ < p class ="preloader-text "> Loading...</ p >
50+ </ div >
4851< header class ="header " data-header >
4952 < div class ="container ">
5053 < h1 class ="h1 logo ">
You can’t perform that action at this time.
0 commit comments