@@ -3463,31 +3463,37 @@ <h3>Truth Table Gen</h3>
34633463< button id ="scroll-top-btn " onclick ="window.scrollTo({top: 0, behavior: 'smooth'}) ">
34643464 < i class ="fas fa-arrow-up "> </ i >
34653465</ button >
3466+
3467+ < button id ="scroll-top-btn " onclick ="window.scrollTo({top: 0, behavior: 'smooth'}) ">
3468+ < i class ="fas fa-arrow-up "> </ i >
3469+ </ button >
3470+
34663471< button onclick ="toggleCalc() " style ="
34673472 position: fixed; bottom: 20px; right: 20px;
34683473 width: 60px; height: 60px; border-radius: 50%;
34693474 background: var(--primary); color: white; border: none;
34703475 box-shadow: 0 10px 25px var(--primary-glow);
3471- z-index: 7000 ; cursor: pointer; font-size: 1.5rem;
3476+ z-index: 9500 ; cursor: pointer; font-size: 1.5rem;
34723477 display: flex; align-items: center; justify-content: center;
3473- ">
3478+ transition: 0.2s;
3479+ " title ="Open Calculator ">
34743480 < i class ="fas fa-calculator "> </ i >
34753481</ button >
34763482
3477- < footer class ="app-footer ">
3483+ < footer class ="app-footer ">
34783484 < div class ="footer-content ">
34793485 < div class ="footer-brand ">
34803486 < h4 > StudyTools India</ h4 >
34813487 < p > Empowering the next generation of engineers with < b > Precision</ b > , < b > Speed</ b > , and < b > Zero-Cost</ b > academic intelligence.</ p >
34823488
34833489 < div class ="social-links ">
3484- < a href ="https://instagram.com/VibeVaultReels " target ="_blank " class ="social-btn " title ="Instagram ">
3490+ < a href ="https://instagram.com/studytoolsindia " target ="_blank " class ="social-btn " title ="Instagram ">
34853491 < i class ="fab fa-instagram "> </ i >
34863492 </ a >
34873493 < a href ="https://github.com/return7521-ui " target ="_blank " class ="social-btn " title ="GitHub Source ">
34883494 < i class ="fab fa-github "> </ i >
34893495 </ a >
3490- < a href ="mailto:shashank@studytools .com " class ="social-btn " title ="Contact Architect ">
3496+ < a href ="mailto:return7521@gmail .com " class ="social-btn " title ="Contact Architect ">
34913497 < i class ="fas fa-envelope "> </ i >
34923498 </ a >
34933499 </ div >
@@ -3541,9 +3547,9 @@ <h3><i class="fas fa-scale-balanced"></i> Legal Framework</h3>
35413547 </ div >
35423548 < div class ="modal-body ">
35433549 < p style ="font-size:0.9rem; color:var(--text-dim); line-height:1.6; ">
3544- < b > 1. Educational Purpose:</ b > This tool is for verification and learning assistance only. It is not a substitute for official academic computation. < br > < br >
3545- < b > 2. Intellectual Property:</ b > The code, design system, and algorithms are the intellectual property of < b > Shashank Kushwaha</ b > . Cloning for commercial use is prohibited .< br > < br >
3546- < b > 3. Liability:</ b > The developer is not liable for academic errors resulting from misuse of these tools .
3550+ < b > 1. Educational Purpose:</ b > This tool is for verification and learning assistance only.< br > < br >
3551+ < b > 2. Intellectual Property:</ b > The code and design are the intellectual property of < b > Shashank Kushwaha</ b > .< br > < br >
3552+ < b > 3. Liability:</ b > The developer is not liable for academic errors resulting from misuse.
35473553 </ p >
35483554 </ div >
35493555</ div >
@@ -3556,79 +3562,102 @@ <h3><i class="fas fa-shield-halved"></i> Data Protocol</h3>
35563562 < div class ="modal-body ">
35573563 < p style ="font-size:0.9rem; color:var(--text-dim); line-height:1.6; ">
35583564 < b > Zero-Knowledge Architecture:</ b > < br >
3559- We believe your grades and data are personal.
35603565 < ul >
35613566 < li > No data is sent to any server.</ li >
35623567 < li > No tracking cookies are used.</ li >
3563- < li > Inputs are processed instantly in your browser's RAM and cleared on refresh .</ li >
3568+ < li > Inputs are processed instantly in your browser's RAM.</ li >
35643569 </ ul >
35653570 </ p >
35663571 </ div >
35673572</ div >
3568-
35693573
35703574< script >
35713575 // --- A. NIGHT MODE LOGIC ---
35723576 function toggleGlobalTheme ( ) {
35733577 document . body . classList . toggle ( 'dark-mode' ) ;
35743578 const isDark = document . body . classList . contains ( 'dark-mode' ) ;
35753579 localStorage . setItem ( 'theme' , isDark ? 'dark' : 'light' ) ;
3576-
3577- // Update Icon
35783580 const btn = document . querySelector ( '.theme-toggle i' ) ;
35793581 if ( btn ) btn . className = isDark ? 'fas fa-sun' : 'fas fa-moon' ;
35803582 }
3581- // Auto-Load Theme
3583+ // Auto-Load
35823584 if ( localStorage . getItem ( 'theme' ) === 'dark' ) {
35833585 document . body . classList . add ( 'dark-mode' ) ;
35843586 const btn = document . querySelector ( '.theme-toggle i' ) ;
35853587 if ( btn ) btn . className = 'fas fa-sun' ;
35863588 }
35873589
3588- // --- B. INSTALL APP LOGIC (PWA) ---
3590+ // --- B. INSTALL APP LOGIC ---
35893591 let deferredPrompt ;
35903592 window . addEventListener ( 'beforeinstallprompt' , ( e ) => {
3591- // Prevent Chrome 67 and earlier from automatically showing the prompt
35923593 e . preventDefault ( ) ;
35933594 deferredPrompt = e ;
3594- // Show the install button now that it's available
35953595 const installBtn = document . getElementById ( 'install-btn' ) ;
35963596 if ( installBtn ) {
35973597 installBtn . style . display = 'block' ;
35983598 installBtn . addEventListener ( 'click' , ( ) => {
35993599 deferredPrompt . prompt ( ) ;
3600- deferredPrompt . userChoice . then ( ( choiceResult ) => {
3601- if ( choiceResult . outcome === 'accepted' ) {
3602- console . log ( 'User accepted the A2HS prompt' ) ;
3603- }
3604- deferredPrompt = null ;
3605- } ) ;
3600+ deferredPrompt . userChoice . then ( ( choiceResult ) => { deferredPrompt = null ; } ) ;
36063601 } ) ;
36073602 }
36083603 } ) ;
36093604
3610- // --- C. SOCIAL SHARE LOGIC (PROFESSIONAL UPGRADE ) ---
3605+ // --- C. SOCIAL SHARE LOGIC (PROFESSIONAL) ---
36113606 async function nativeShare ( ) {
36123607 const shareData = {
36133608 title : 'StudyTools India | Elite Academic Engine' ,
36143609 text : '🚀 Experience the Next-Gen Academic Toolkit. Precision calculators for JEE, NDA & ISC designed by Shashank Kushwaha. Try the PWA now:' ,
3615- url : 'https://return7521-ui.github.io/studytoolsindia /'
3610+ url : 'https://return7521-ui.github.io/studytools-india /'
36163611 } ;
3617-
36183612 if ( navigator . share ) {
3619- try {
3620- await navigator . share ( shareData ) ;
3621- } catch ( err ) {
3622- console . log ( 'Share canceled' ) ;
3623- }
3613+ try { await navigator . share ( shareData ) ; } catch ( err ) { }
36243614 } else {
3625- // Fallback: Copy to Clipboard
36263615 navigator . clipboard . writeText ( shareData . url ) ;
36273616 alert ( "System Link copied to clipboard." ) ;
36283617 }
36293618 }
36303619
3631- // --- D. SEARCH ENGINE (Fixing Overlap & Logic) ---
3620+ // --- D. MODAL CONTROLLER (Fixes "Nothing Happens") ---
3621+ function openModal ( id ) {
3622+ const overlay = document . getElementById ( 'modal-overlay' ) ;
3623+ const modal = document . getElementById ( id ) ;
3624+
3625+ if ( overlay && modal ) {
3626+ overlay . classList . add ( 'active' ) ;
3627+ modal . classList . add ( 'active' ) ;
3628+ } else {
3629+ console . error ( 'Target modal not found:' , id ) ;
3630+ }
3631+ }
3632+
3633+ function closeAllModals ( ) {
3634+ document . getElementById ( 'modal-overlay' ) . classList . remove ( 'active' ) ;
3635+ document . querySelectorAll ( '.modal-window' ) . forEach ( m => m . classList . remove ( 'active' ) ) ;
3636+ }
3637+
3638+ // --- E. SCIENTIFIC CALC TOGGLE ---
3639+ function toggleCalc ( ) {
3640+ document . getElementById ( 'scientific-dock' ) . classList . toggle ( 'active' ) ;
3641+ }
3642+
3643+ // --- F. SCROLL TO TOP ---
3644+ window . addEventListener ( 'scroll' , ( ) => {
3645+ const btn = document . getElementById ( 'scroll-top-btn' ) ;
3646+ if ( btn ) {
3647+ if ( window . scrollY > 300 ) {
3648+ btn . style . opacity = '1' ;
3649+ btn . style . pointerEvents = 'all' ;
3650+ } else {
3651+ btn . style . opacity = '0' ;
3652+ btn . style . pointerEvents = 'none' ;
3653+ }
3654+ }
3655+ } ) ;
3656+
3657+ // --- G. PWA REGISTRATION ---
3658+ if ( 'serviceWorker' in navigator ) navigator . serviceWorker . register ( 'sw.js' ) ;
3659+
3660+ // --- H. SEARCH ENGINE ---
36323661 const searchInput = document . getElementById ( 'master-search' ) ;
36333662 if ( searchInput ) {
36343663 searchInput . addEventListener ( 'keyup' , function ( ) {
@@ -3646,34 +3675,13 @@ <h3><i class="fas fa-shield-halved"></i> Data Protocol</h3>
36463675 card . style . display = "none" ;
36473676 }
36483677 } ) ;
3649-
3650- // Update the status text
36513678 const status = document . getElementById ( 'search-count' ) ;
36523679 if ( status ) status . innerText = filter === "" ? "Ready" : `${ visibleCount } Found` ;
36533680 } ) ;
36543681 }
3655-
3656- // --- E. SCIENTIFIC CALC TOGGLE ---
3657- function toggleCalc ( ) {
3658- const dock = document . getElementById ( 'scientific-dock' ) ;
3659- dock . classList . toggle ( 'active' ) ;
3660- }
3661-
3662- // --- F. SCROLL TO TOP ---
3663- window . addEventListener ( 'scroll' , ( ) => {
3664- const btn = document . getElementById ( 'scroll-top-btn' ) ;
3665- if ( btn ) {
3666- if ( window . scrollY > 300 ) {
3667- btn . style . opacity = '1' ;
3668- btn . style . pointerEvents = 'all' ;
3669- } else {
3670- btn . style . opacity = '0' ;
3671- btn . style . pointerEvents = 'none' ;
3672- }
3673- }
3674- } ) ;
3675-
3676- /* === 1. ULTRA-PREMIUM FOOTER === */
3682+
3683+ document . getElementById ( 'year-span' ) . innerText = new Date ( ) . getFullYear ( ) ;
3684+ /* === 1. ULTRA-PREMIUM FOOTER (Breathtaking UI) === */
36773685. app - footer {
36783686 position: relative ; z - index : 10 ;
36793687 margin - top : 80 px ;
@@ -3783,86 +3791,29 @@ <h3><i class="fas fa-shield-halved"></i> Data Protocol</h3>
37833791}
37843792. close - modal :hover { background : var ( -- danger ) ; color: white ; transform: rotate ( 90 deg ) ; }
37853793
3786-
3787- // --- H. PWA REGISTRATION ---
3788- if ( 'serviceWorker' in navigator ) navigator . serviceWorker . register ( 'sw.js' ) ;
3789- </ script >
3790-
3791- < style >
3792- /* CRITICAL LAYOUT FIXES FOR FOOTER & BUTTONS */
3793- # scroll-top-btn {
3794- position : fixed; bottom : 90px ; right : 20px ;
3795- width : 50px ; height : 50px ; border-radius : 50% ;
3796- background : var (--primary ); color : white; border : none;
3797- box-shadow : 0 5px 15px rgba (99 , 102 , 241 , 0.4 );
3798- z-index : 9000 ; cursor : pointer; opacity : 0 ; pointer-events : none;
3799- transition : 0.3s ; display : flex; align-items : center; justify-content : center;
3800- }
3801-
3802- .app-footer {
3803- position : relative; z-index : 10 ;
3804- margin-top : 50px ; padding-bottom : 120px ; /* Space for Calc */
3805- background : var (--card-glass );
3806- border-top : 1px solid var (--border-glass );
3807- }
3808- /* === FIXED CALCULATOR DOCK (The Drawer Logic) === */
3794+ /* === 3. FIXED CALCULATOR DRAWER === */
38093795. calc - dock {
3810- position : fixed;
3811- bottom : 0 ;
3812- left : 0 ;
3813- width : 100% ;
3814-
3815- /* 1. Force it to sit ON TOP of footer when open */
3816- z-index : 8000 !important ;
3817-
3818- /* 2. HIDE IT by pushing it 100% down (off-screen) */
3819- transform : translateY (100% );
3820-
3821- /* 3. Smooth Slide Animation */
3796+ position: fixed ; bottom: 0 ; left: 0 ; width: 100 % ;
3797+ z - index : 8000 ! important ; /* Above footer, below modal */
3798+ transform: translateY ( 100 % ) ; /* Hidden by default */
38223799 transition: transform 0.4 s cubic - bezier ( 0.25 , 0.8 , 0.25 , 1 ) ;
3823-
3824- /* Visual styling */
3825- background : var (--card-glass );
3826- backdrop-filter : blur (30px );
3800+ background: var ( -- card - glass ) ; backdrop - filter : blur ( 30 px ) ;
38273801 border - top : 1 px solid var ( -- border - glass ) ;
38283802 border - radius : 30 px 30 px 0 0 ;
38293803 box - shadow : 0 - 10 px 40 px rgba ( 0 , 0 , 0 , 0.2 ) ;
38303804}
3805+ . calc - dock . active { transform: translateY ( 0 ) ! important ; }
38313806
3832- /* This class pulls it back up when you click the button */
3833- .calc-dock .active {
3834- transform : translateY (0 ) !important ;
3807+ /* === 4. FIXED SCROLL BUTTON === */
3808+ #scroll- top - btn {
3809+ position: fixed ; bottom: 90 px ; right: 20 px ;
3810+ width: 50 px ; height: 50 px ; border - radius : 50 % ;
3811+ background: var ( -- primary ) ; color: white ; border: none ;
3812+ box - shadow : 0 5 px 15 px var ( -- primary - glow ) ;
3813+ z - index : 9000 ; cursor: pointer ;
3814+ opacity: 0 ; pointer - events : none ; transition: 0.3 s ;
3815+ display: flex ; align - items : center ; justify - content : center ; font - size : 1.2 rem ;
38353816}
3836-
3837- /* Handle Design */
3838- .calc-handle {
3839- padding : 15px ; text-align : center; cursor : pointer;
3840- color : var (--primary ); font-weight : 700 ;
3841- }
3842- // --- SCIENTIFIC CALC TOGGLE ---
3843- function toggleCalc () {
3844- const dock = document.getElementById ('scientific-dock' );
3845- dock.classList .toggle ('active' ); / / This triggers the slide up/ down
3846- }
3847- // --- UPDATED MODAL CONTROLLER (Fixes "Nothing Happens") ---
3848- function openModal (id) {
3849- const overlay = document.getElementById ('modal-overlay' );
3850- const modal = document.getElementById (id);
3851-
3852- if (overlay & & modal ) {
3853- overlay .classList .add ('active' );
3854- modal.classList .add ('active' );
3855- / / Z- Index override to ensure it pops over the footer/ calc
3856- modal.style .zIndex = '10001' ;
3857- overlay.style .zIndex = '10000' ;
3858- } else {
3859- console .error ('Target modal not found:' , id );
3860- }
3861- }
3862-
3863- function closeAllModals () {
3864- document .getElementById ('modal-overlay' ).classList .remove ('active' );
3865- document.querySelectorAll ('.modal-window' ).forEach (m = > m .classList .remove ('active' ));
3866- }
3817+ #scroll- top - btn . visible { opacity: 1 ; pointer - events : all ; }
38673818
3868- </ style >
3819+ </ script >
0 commit comments