@@ -85,7 +85,22 @@ export function LogScroller() {
8585
8686 return (
8787 < div
88- className = "w-full h-[375px] bg-black rounded-lg overflow-hidden"
88+ className = "w-full h-[375px] bg-black rounded-lg overflow-hidden shadow-lg transition-all duration-300 ease-in-out"
89+ style = { {
90+ transform : "perspective(1500px) rotateX(4deg) rotateY(-8deg) rotateZ(1deg)" ,
91+ boxShadow : '0 10px 30px rgba(0, 0, 0, 0.2), 0 1px 3px rgba(0, 0, 0, 0.3), -5px 5px 15px rgba(0, 0, 0, 0.15)' ,
92+ transformOrigin : 'center center' ,
93+ marginLeft : '-40px' , // Shift more to the left
94+ marginRight : '80px' , // Increase right margin to compensate
95+ } }
96+ onMouseOver = { ( e ) => {
97+ e . currentTarget . style . transform = "perspective(1500px) rotateX(3deg) rotateY(-6deg) rotateZ(0.5deg) scale(1.01)" ;
98+ e . currentTarget . style . boxShadow = '0 15px 35px rgba(0, 0, 0, 0.25), 0 3px 5px rgba(0, 0, 0, 0.35), -8px 8px 20px rgba(0, 0, 0, 0.15)' ;
99+ } }
100+ onMouseOut = { ( e ) => {
101+ e . currentTarget . style . transform = "perspective(1500px) rotateX(4deg) rotateY(-8deg) rotateZ(1deg) scale(1)" ;
102+ e . currentTarget . style . boxShadow = '0 10px 30px rgba(0, 0, 0, 0.2), 0 1px 3px rgba(0, 0, 0, 0.3), -5px 5px 15px rgba(0, 0, 0, 0.15)' ;
103+ } }
89104 onMouseEnter = { ( ) => setIsPaused ( true ) }
90105 onMouseLeave = { ( ) => {
91106 setIsPaused ( false ) ;
@@ -97,46 +112,77 @@ export function LogScroller() {
97112 } , 100 ) ;
98113 } }
99114 >
100- < div className = "relative flex items-center bg-[#393937] px-6 py-2 w-full" >
115+ < div
116+ className = "relative flex items-center bg-[#393937] px-6 py-2 w-full"
117+ style = { {
118+ borderBottom : '1px solid rgba(0, 0, 0, 0.3)' ,
119+ boxShadow : '0 1px 0 rgba(255, 255, 255, 0.1)' ,
120+ } }
121+ >
101122 < div className = "absolute left-3 flex space-x-2" >
102- < div className = "w-3 h-3 rounded-full bg-red-500" > </ div >
103- < div className = "w-3 h-3 rounded-full bg-yellow-500" > </ div >
104- < div className = "w-3 h-3 rounded-full bg-green-500" > </ div >
123+ < div className = "w-3 h-3 rounded-full bg-red-500" style = { { boxShadow : '0 1px 1px rgba(0, 0, 0, 0.2)' } } > </ div >
124+ < div className = "w-3 h-3 rounded-full bg-yellow-500" style = { { boxShadow : '0 1px 1px rgba(0, 0, 0, 0.2)' } } > </ div >
125+ < div className = "w-3 h-3 rounded-full bg-green-500" style = { { boxShadow : '0 1px 1px rgba(0, 0, 0, 0.2)' } } > </ div >
105126 </ div >
106- < div className = "w-full text-center text-[#b5b5b3] font-extrabold text-xs font-sans" >
127+ < div
128+ className = "w-full text-center text-[#b5b5b3] font-extrabold text-xs font-sans"
129+ style = { {
130+ textShadow : '0 1px 0 rgba(0, 0, 0, 0.3)' ,
131+ letterSpacing : '0.5px'
132+ } }
133+ >
107134 Rails Server Logs
108135 </ div >
109136 </ div >
110137
111- < div
112- ref = { scrollerRef }
113- className = "h-[333px] flex flex-col overflow-auto px-6 py-2 bg-[#111421] relative"
114- >
115- < div className = "flex-grow w-full" >
116- { logs . length > 0 ? (
117- < SyntaxHighlighter
118- language = "json"
119- style = { atomDark }
120- lineProps = { {
121- style : { wordBreak : 'normal' , whiteSpace : 'pre-wrap' } ,
122- } }
123- wrapLines
124- wrapLongLines
125- customStyle = { {
126- fontSize : '11px' ,
127- backgroundColor : '#111421' ,
128- padding : '12px' ,
129- borderRadius : '0px' ,
130- minHeight : '300px' ,
131- } }
132- >
133- { logs . join ( '\n\n' ) }
134- </ SyntaxHighlighter >
135- ) : (
136- < div className = "w-full h-[300px]" > </ div >
137- ) }
138+ { /* Container with relative positioning for the scrollable content and overlay */ }
139+ < div className = "relative h-[333px]" >
140+ { /* Scrollable content */ }
141+ < div
142+ ref = { scrollerRef }
143+ className = "h-full flex flex-col overflow-auto px-6 py-2 bg-[#111421]"
144+ style = { {
145+ backgroundImage : 'linear-gradient(to bottom, rgba(20, 22, 36, 0.8) 0%, rgba(17, 20, 33, 1) 20%)' ,
146+ boxShadow : 'inset 0 1px 3px rgba(0, 0, 0, 0.3)' ,
147+ } }
148+ >
149+ < div className = "flex-grow w-full" >
150+ { logs . length > 0 ? (
151+ < SyntaxHighlighter
152+ language = "json"
153+ style = { atomDark }
154+ lineProps = { {
155+ style : { wordBreak : 'normal' , whiteSpace : 'pre-wrap' } ,
156+ } }
157+ wrapLines
158+ wrapLongLines
159+ customStyle = { {
160+ fontSize : '11px' ,
161+ backgroundColor : 'transparent' ,
162+ padding : '12px' ,
163+ borderRadius : '0px' ,
164+ minHeight : '300px' ,
165+ textShadow : '0 1px 0 rgba(0, 0, 0, 0.7)' ,
166+ letterSpacing : '0.2px' ,
167+ } }
168+ >
169+ { logs . join ( '\n\n' ) }
170+ </ SyntaxHighlighter >
171+ ) : (
172+ < div className = "w-full h-[300px]" > </ div >
173+ ) }
174+ </ div >
138175 </ div >
176+
177+ { /* Reflection overlay - placed outside the scrollable div but inside the relative container */ }
178+ < div
179+ className = "absolute inset-0 pointer-events-none"
180+ style = { {
181+ background : 'linear-gradient(110deg, rgba(255,255,255,0.05) 0%, rgba(255,255,255,0) 45%, rgba(255,255,255,0) 85%, rgba(255,255,255,0.02) 100%)' ,
182+ zIndex : 10 ,
183+ } }
184+ > </ div >
139185 </ div >
140186 </ div >
141187 ) ;
142- }
188+ }
0 commit comments