@@ -770,23 +770,23 @@ async function checkForUpdates() {
770770 const result = await install . json ( ) ;
771771
772772 if ( result . status === 'success' ) {
773- btn . textContent = '✓ Restart App' ;
773+ btn . textContent = 'Restart App' ;
774774 btn . classList . add ( 'success' ) ;
775775 btn . setAttribute ( 'data-tooltip' , 'Update installed - restart application' ) ;
776776 } else {
777- btn . textContent = '✗ Update Failed' ;
777+ btn . textContent = 'Update Failed' ;
778778 btn . classList . add ( 'error' ) ;
779779 btn . setAttribute ( 'data-tooltip' , result . message ) ;
780780 btn . disabled = false ;
781781 }
782782 } ;
783783 } else if ( data . error ) {
784- btn . textContent = '✗ Check Failed' ;
784+ btn . textContent = 'Check Failed' ;
785785 btn . classList . add ( 'error' ) ;
786786 btn . setAttribute ( 'data-tooltip' , data . error ) ;
787787 btn . disabled = false ;
788788 } else {
789- btn . textContent = '✓ Latest Version' ;
789+ btn . textContent = 'Latest Version' ;
790790 btn . classList . add ( 'success' ) ;
791791 btn . setAttribute ( 'data-tooltip' , `Version ${ data . current } ` ) ;
792792 setTimeout ( ( ) => {
@@ -797,7 +797,7 @@ async function checkForUpdates() {
797797 } , 3000 ) ;
798798 }
799799 } catch ( error ) {
800- btn . textContent = '✗ Network Error' ;
800+ btn . textContent = 'Network Error' ;
801801 btn . classList . add ( 'error' ) ;
802802 btn . setAttribute ( 'data-tooltip' , 'Could not connect to update server' ) ;
803803 btn . disabled = false ;
@@ -832,13 +832,14 @@ async function loadFeatures() {
832832 const response = await fetch ( '/api/features' ) ;
833833 const features = await response . json ( ) ;
834834
835+ const benchTab = document . querySelector ( '[data-tab="benchmark"]' ) ;
836+ const startBtn = document . getElementById ( 'start-bench-btn' ) ;
837+ const startSimBtn = document . getElementById ( 'start-sim-btn' ) ;
838+ const typeButtons = document . querySelectorAll ( '.type-btn' ) ;
839+ const modeButtons = document . querySelectorAll ( '.mode-btn' ) ;
840+
835841 // Disable benchmark controls if GPU benchmark not available
836842 if ( ! features . gpu_benchmark ) {
837- const benchTab = document . querySelector ( '[data-tab="benchmark"]' ) ;
838- const startBtn = document . getElementById ( 'start-bench-btn' ) ;
839- const typeButtons = document . querySelectorAll ( '.type-btn' ) ;
840- const modeButtons = document . querySelectorAll ( '.mode-btn' ) ;
841-
842843 if ( benchTab ) {
843844 benchTab . classList . add ( 'disabled' ) ;
844845 benchTab . setAttribute ( 'data-tooltip' , 'Install CuPy or PyTorch for GPU benchmarking' ) ;
@@ -852,6 +853,13 @@ async function loadFeatures() {
852853 startBtn . title = 'GPU benchmark libraries not installed' ;
853854 }
854855
856+ if ( startSimBtn ) {
857+ startSimBtn . disabled = true ;
858+ startSimBtn . style . opacity = '0.5' ;
859+ startSimBtn . style . cursor = 'not-allowed' ;
860+ startSimBtn . title = 'Install CuPy or PyTorch for simulation' ;
861+ }
862+
855863 typeButtons . forEach ( btn => {
856864 btn . disabled = true ;
857865 btn . style . opacity = '0.5' ;
@@ -863,6 +871,39 @@ async function loadFeatures() {
863871 btn . style . opacity = '0.5' ;
864872 btn . style . cursor = 'not-allowed' ;
865873 } ) ;
874+ } else {
875+ // ENABLE controls when GPU benchmark IS available
876+ if ( benchTab ) {
877+ benchTab . classList . remove ( 'disabled' ) ;
878+ benchTab . removeAttribute ( 'data-tooltip' ) ;
879+ benchTab . style . pointerEvents = '' ;
880+ }
881+
882+ if ( startBtn ) {
883+ startBtn . disabled = false ;
884+ startBtn . style . opacity = '1' ;
885+ startBtn . style . cursor = 'pointer' ;
886+ startBtn . title = 'Start GPU benchmark' ;
887+ }
888+
889+ if ( startSimBtn ) {
890+ startSimBtn . disabled = false ;
891+ startSimBtn . style . opacity = '1' ;
892+ startSimBtn . style . cursor = 'pointer' ;
893+ startSimBtn . title = 'Start particle simulation with visualization' ;
894+ }
895+
896+ typeButtons . forEach ( btn => {
897+ btn . disabled = false ;
898+ btn . style . opacity = '1' ;
899+ btn . style . cursor = 'pointer' ;
900+ } ) ;
901+
902+ modeButtons . forEach ( btn => {
903+ btn . disabled = false ;
904+ btn . style . opacity = '1' ;
905+ btn . style . cursor = 'pointer' ;
906+ } ) ;
866907 }
867908 } catch ( error ) {
868909 console . error ( 'Error loading features:' , error ) ;
0 commit comments