6363 display : flex;
6464 align-items : center;
6565 gap : 10px ;
66+ font-family : 'JetBrains Mono' , monospace;
6667 }
6768 .nav-brand svg { width : 22px ; height : 22px ; stroke : var (--accent-contrast ); }
6869
70+ /* EFEKT MIGAJĄCEGO KURSORA TERMINALA */
71+ .terminal-cursor {
72+ display : inline-block;
73+ width : 9px ;
74+ height : 18px ;
75+ background-color : var (--accent-contrast );
76+ margin-left : 2px ;
77+ vertical-align : -2px ;
78+ animation : terminalBlink 1s infinite steps (1 );
79+ }
80+ @keyframes terminalBlink {
81+ 0% , 50% { opacity : 1 ; }
82+ 50.1%, 100% { opacity : 0 ; }
83+ }
84+
85+ /* PŁYWAJĄCY CONTAINER NAWIGACJI */
6986 .nav-center {
7087 display : flex;
7188 justify-content : flex-end;
7289 align-items : center;
73- gap : 35px ;
90+ gap : 10px ;
91+ position : relative;
7492 }
75- .nav-center a {
93+
94+ .nav-center a , .nav-center .dropbtn {
7695 text-decoration : none;
7796 color : var (--text-muted );
7897 font-weight : 600 ;
7998 font-size : 0.9rem ;
80- transition : 0.3s ;
81- position : relative;
99+ transition : color 0.3s ;
100+ padding : 8px 16px ;
101+ border-radius : 6px ;
102+ z-index : 2 ;
103+ background : transparent;
104+ border : none;
105+ cursor : pointer;
106+ font-family : 'Inter' , sans-serif;
107+ display : flex;
108+ align-items : center;
109+ gap : 5px ;
82110 }
83- .nav-center a : hover , .nav-center a .active { color : var (--accent-blue ); }
84-
85- .nav-center a .active ::after {
86- content : '' ;
111+
112+ .nav-center a : hover , .nav-center .dropbtn : hover , .nav-center .dropdown : hover .dropbtn {
113+ color : var (--accent-blue );
114+ }
115+
116+ /* DYNAMICZNY PŁYWAJĄCY SLIDER (PILL) */
117+ .nav-indicator {
87118 position : absolute;
88- bottom : -6 px ;
119+ bottom : 0 ;
89120 left : 0 ;
90- width : 100% ;
91- height : 2px ;
121+ height : 3px ;
92122 background : var (--accent-blue );
93- border-radius : 2px ;
123+ border-radius : 3px ;
124+ transition : all 0.3s cubic-bezier (0.4 , 0 , 0.2 , 1 );
125+ z-index : 1 ;
126+ box-shadow : 0 0 10px rgba (0 , 210 , 255 , 0.5 );
94127 }
95128
96129 /* DROPDOWN APPS */
97130 .dropdown { position : relative; display : inline-block; }
98- .dropbtn {
99- background : none;
100- border : none;
101- color : var (--text-muted );
102- font-family : 'Inter' , sans-serif;
103- font-weight : 600 ;
104- font-size : 0.9rem ;
105- cursor : pointer;
106- padding : 0 ;
107- transition : 0.3s ;
108- display : flex;
109- align-items : center;
110- gap : 5px ;
111- }
112- .dropbtn : hover , .dropdown : hover .dropbtn { color : var (--accent-blue ); }
113131
114132 .dropdown-content { position : absolute; right : 0 ; top : 100% ; padding-top : 12px ; min-width : 220px ; opacity : 0 ; visibility : hidden; transition : 0.25s ease; z-index : 1001 ; }
115133 .dropdown-links-wrapper { background : rgba (10 , 15 , 25 , 0.98 ); border : 1px solid var (--border ); border-radius : 8px ; box-shadow : 0 10px 30px rgba (0 , 0 , 0 , 0.8 ); overflow : hidden; backdrop-filter : blur (10px ); }
161179 }
162180 .section-tag ::before { content : '///' ; color : var (--accent-blue ); }
163181
164- /* STOPKA W STYLU NASA (PEŁNA SKALA I DETALE) */
165- footer {
182+ /* STOPKA W STYLU NASA */
183+ < footer>
166184 background: # 010204;
167185 bor der- to p: 1px solid var(- - bor der);
168186 padding: 70px 60px 40px 60px;
186204 .footer-col ul a , .footer-col ul .disabled-footer-link { color : var (--text-muted ); font-size : 0.82rem ; transition : 0.2s ; font-family : 'Inter' , sans-serif; text-decoration : none; }
187205 .footer-col ul a : hover { color : var (--accent-blue ); }
188206
189- /* STOPKA - GARMIN HOVER */
190207 .disabled-footer-link {
191208 cursor : default;
192209 position : relative;
206223 .disabled-footer-link : hover .footer-link-text { opacity : 0 ; }
207224 .disabled-footer-link : hover .footer-beta-text { opacity : 1 ; }
208225
209- /* IKONKI SPOŁECZNOŚCIOWE (Siatka dostosowana do większej liczby ikonek) */
210226 .social-icons-grid {
211227 display : flex;
212228 flex-wrap : wrap;
242258 border-top : 1px solid rgba (255 , 255 , 255 , 0.08 );
243259 }
244260
245- /* GŁÓWNY PAS Z PRZEKIEROWANIAMI W STYLU NASA */
246261 .footer-sublinks-bar {
247262 width : 100% ;
248263 max-width : 1550px ;
262277 color : var (--accent-blue );
263278 }
264279
265- /* DOLNY PAS SYSTEMOWY Z METADANYMI */
266280 .footer-meta-bar {
267281 width : 100% ;
268282 max-width : 1550px ;
283297
284298 @media (max-width : 1024px ) {
285299 .navbar { grid-template-columns : 1fr ; gap : 15px ; padding : 20px ; text-align : center; }
286- .nav-center { justify-content : center; flex-wrap : wrap; gap : 15 px ; }
300+ .nav-center { justify-content : center; flex-wrap : wrap; gap : 10 px ; }
287301 .dashboard { padding : 30px 20px ; }
288302 .footer-grid { grid-template-columns : 1fr ; gap : 30px ; }
289303 .footer-meta-bar { flex-direction : column; text-align : center; gap : 10px ; }
300314 < polyline points ="4 17 10 11 4 5 "> </ polyline >
301315 < line x1 ="12 " y1 ="19 " x2 ="20 " y2 ="19 "> </ line >
302316 </ svg >
303- DEVLABSTUDY
317+ DEVLABSTUDY< span class =" terminal-cursor " > </ span >
304318 </ a >
305319 </ div >
306- < div class ="nav-center ">
307- < a href ="/ " {% if page.url == "/ " %}class ="active "{% endif %} > Hub</ a >
308- < a href ="/newsy " {% if page.url contains "newsy" %}class="active "{% endif %} > Newsy</ a >
309- < a href ="/blog " {% if page.url contains "blog" %}class="active "{% endif %} > Blog</ a >
310- < a href ="/homelab " {% if page.url contains "homelab" %}class="active "{% endif %} > HomeLab</ a >
311- < a href ="/sponsors " {% if page.url contains "sponsors" %}class="active "{% endif %} > Sponsors</ a >
320+ < div class ="nav-center " id ="navCenter ">
321+ < div class ="nav-indicator " id ="navIndicator "> </ div >
322+ < a href ="/ " class ="nav-link {% if page.url == '/' %}active-page{% endif %} "> Hub</ a >
323+ < a href ="/newsy " class ="nav-link {% if page.url contains 'newsy' %}active-page{% endif %} "> Newsy</ a >
324+ < a href ="/blog " class ="nav-link {% if page.url contains 'blog' %}active-page{% endif %} "> Blog</ a >
325+ < a href ="/homelab " class ="nav-link {% if page.url contains 'homelab' %}active-page{% endif %} "> HomeLab</ a >
326+ < a href ="/sponsors " class ="nav-link {% if page.url contains 'sponsors' %}active-page{% endif %} "> Sponsors</ a >
312327
313- < div class ="dropdown ">
328+ < div class ="dropdown nav-link ">
314329 < button class ="dropbtn "> Apps ▾</ button >
315330 < div class ="dropdown-content ">
316331 < div class ="dropdown-links-wrapper ">
325340 </ div >
326341 </ div >
327342
328- < a href ="/kontakt " {% if page.url contains " kontakt" %}class=" active " {% endif %} > Kontakt</ a >
343+ < a href ="/kontakt " class =" nav-link {% if page.url contains ' kontakt' %}active-page {% endif %}" > Kontakt</ a >
329344 </ div >
330345 </ nav >
331346
@@ -403,7 +418,6 @@ <h4>Follow DevLabStudy</h4>
403418
404419 < div class ="footer-divider "> </ div >
405420
406- <!-- DODATKOWY PAS PRZEKIEROWAŃ W STYLU NASA -->
407421 < div class ="footer-sublinks-bar ">
408422 < a href ="/ "> Sitemap</ a >
409423 < a href ="/newsy "> For Media & Press</ a >
@@ -414,13 +428,37 @@ <h4>Follow DevLabStudy</h4>
414428 < a href ="https://github.com/DevLabStudy " target ="_blank "> Source Code (GitHub)</ a >
415429 </ div >
416430
417- <!-- DOLNY PAS METADANYCH -->
418431 < div class ="footer-meta-bar ">
419432 < div > Page Last Updated: < span > October 06, 2026</ span > </ div >
420433 < div > Page Editor: < span > Tobiasz Kajzer</ span > </ div >
421434 < div > Responsible System Official: < span > DevLabStudy Administrator</ span > </ div >
422435 </ div >
423436 </ footer >
424437
438+ <!-- SKRYPT OBSŁUGUJĄCY PŁYWAJĄCY WSKAŹNIK W NAVBARZE -->
439+ < script >
440+ const navCenter = document . getElementById ( 'navCenter' ) ;
441+ const indicator = document . getElementById ( 'navIndicator' ) ;
442+ const navLinks = navCenter . querySelectorAll ( '.nav-link' ) ;
443+ const activeLink = navCenter . querySelector ( '.active-page' ) || navLinks [ 0 ] ;
444+
445+ function moveIndicator ( el ) {
446+ indicator . style . width = el . offsetWidth + 'px' ;
447+ indicator . style . left = el . offsetLeft + 'px' ;
448+ }
449+
450+ // Ustawienie początkowe na aktywną stronę
451+ moveIndicator ( activeLink ) ;
452+
453+ navLinks . forEach ( link => {
454+ link . addEventListener ( 'mouseenter' , ( ) => {
455+ moveIndicator ( link ) ;
456+ } ) ;
457+ } ) ;
458+
459+ navCenter . addEventListener ( 'mouseleave' , ( ) => {
460+ moveIndicator ( activeLink ) ;
461+ } ) ;
462+ </ script >
425463</ body >
426464</ html >
0 commit comments