@@ -44,6 +44,7 @@ import {
4444} from "@/lib/utils" ;
4545
4646function App ( ) {
47+ const [ showPrivacyBanner , setShowPrivacyBanner ] = useState ( true ) ;
4748 const [ data , setData ] = useState < CopilotUsageData [ ] | null > ( null ) ;
4849 const [ aggregatedData , setAggregatedData ] = useState < AggregatedData [ ] > ( [ ] ) ;
4950 const [ uniqueModels , setUniqueModels ] = useState < string [ ] > ( [ ] ) ;
@@ -474,26 +475,37 @@ function App() {
474475 </ Button >
475476 </ div >
476477 </ header >
477-
478+
478479 { /* Privacy Banner */ }
479- < Card className = "mb-6 border-green-200 bg-green-50 dark:bg-green-950/10 dark:border-green-800" >
480- < div className = "p-4" >
481- < div className = "flex items-center gap-3" >
482- < Shield className = "h-5 w-5 text-green-600 dark:text-green-400 flex-shrink-0" />
480+ { showPrivacyBanner && (
481+ < Card className = "mb-6 border border-green-300 bg-white/90 dark:bg-zinc-900/90 shadow-sm dark:border-green-700 relative" >
482+ < button
483+ aria-label = "Close privacy banner"
484+ className = "absolute top-3 right-3 text-green-700 dark:text-green-300 hover:text-red-500 dark:hover:text-red-400 transition-colors rounded-full p-1 focus:outline-none focus:ring-2 focus:ring-green-400"
485+ onClick = { ( ) => setShowPrivacyBanner ( false ) }
486+ type = "button"
487+ >
488+ < span className = "sr-only" > Close</ span >
489+ < svg width = "20" height = "20" viewBox = "0 0 20 20" fill = "none" xmlns = "http://www.w3.org/2000/svg" >
490+ < path d = "M6 6L14 14M14 6L6 14" stroke = "currentColor" strokeWidth = "2" strokeLinecap = "round" />
491+ </ svg >
492+ </ button >
493+ < div className = "p-5 sm:p-6 flex items-center gap-4" >
494+ < Shield className = "h-6 w-6 text-green-700 dark:text-green-300 flex-shrink-0" />
483495 < div className = "flex-1" >
484496 < div className = "flex items-center gap-2 mb-1" >
485- < h3 className = "text-sm font-medium text-green-800 dark:text-green-300 " >
497+ < h3 className = "text-base sm:text-lg font-semibold text-green-900 dark:text-green-200 tracking-tight " >
486498 Your Data Stays Private
487499 </ h3 >
488500 </ div >
489- < p className = "text-xs text-green-700 dark:text-green-400 " >
490- All CSV data is processed locally in your browser. We never upload, store, or transmit your data to any server.
491- Your usage information remains completely private and secure on your machine.
501+ < p className = "text-sm sm: text-base font-medium text-gray-800 dark:text-gray-100 leading-relaxed " >
502+ All CSV data is < span className = "font-bold text-green-800 dark:text-green-300" > processed locally in your browser</ span > . We < span className = "font-bold" > never upload, store, or transmit your data</ span > to any server.< br className = "hidden sm:block" />
503+ Your usage information remains < span className = "font-bold text-green-800 dark:text-green-300" > completely private and secure</ span > on your machine.
492504 </ p >
493505 </ div >
494506 </ div >
495- </ div >
496- </ Card >
507+ </ Card >
508+ ) }
497509
498510 { ! ( data && data . length > 0 ) && (
499511 < Card className = "mb-8" >
0 commit comments