FitTrack Gym Lisbon

FitTrack Gym Lisbon | Modern Fitness, Classes & PT {“@context”:”https://schema.org”,”@type”:”LocalBusiness”,”name”:”FitTrack Gym”,”description”:”Achieve your fitness goals at FitTrack Gym in Lisbon. We offer modern gym facilities, diverse classes, expert personal training, and flexible memberships for young professionals.”} @import url(‘https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Space+Grotesk:wght@600;700&display=swap’); :root{–bg:#F8FAFC;–bg-alt:#EEF2F7;–surface:#FFFFFF;–text:#16130E;–text-muted:#5C574D;–text-dim:#9B958A;–border:#E8E5DE;–accent-border:rgba(37,99,235,0.32);–accent:#F59E0B;–accent-2:#F59E0B;–accent-glow:rgba(245,158,11,0.25);–nav-bg:rgba(250,250,248,0.85);–footer-bg:#F3F2EE;–badge-bg:rgba(37,99,235,0.08);–badge-border:rgba(37,99,235,0.25);–icon-bg:rgba(37,99,235,0.1);–glow-1:rgba(37,99,235,0.08);–glow-2:rgba(249,115,22,0.08);–cta-bg-1:rgba(37,99,235,0.06);–cta-bg-2:rgba(249,115,22,0.06);–radius:10px;–font-body:’Inter’,system-ui,sans-serif;–font-display:’Space Grotesk’,’Inter’,sans-serif} /* ═══ RESET & BASE ═══ */ *,*::before,*::after{margin:0;padding:0;box-sizing:border-box} html{scroll-behavior:smooth} body{font-family:var(–font-body);background:var(–bg);color:var(–text);line-height:1.6;-webkit-font-smoothing:antialiased;overflow-x:hidden} section{scroll-margin-top:96px} .hero-split>*{min-width:0} @media(max-width:620px){.h-xl{font-size:clamp(1.9rem,8.5vw,2.5rem)}.hero-sub{font-size:1rem}.hero-stats{gap:24px}.stat-num{font-size:1.6rem}} img{max-width:100%;display:block} a{color:inherit;text-decoration:none} button{font-family:inherit;cursor:pointer;border:none} input,textarea{font-family:inherit} ::selection{background:var(–accent);color:var(–bg)} ::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:var(–bg)} ::-webkit-scrollbar-thumb{background:var(–border);border-radius:5px} ::-webkit-scrollbar-thumb:hover{background:var(–accent)} /* ═══ LAYOUT ═══ */ .container{max-width:1200px;margin:0 auto;padding:0 32px} .section{padding:96px 0;position:relative} .section-sm{padding:64px 0} .kicker{display:inline-flex;align-items:center;gap:8px;color:var(–accent);font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:2px;margin-bottom:16px} .kicker::before{content:”;width:24px;height:2px;background:var(–accent);border-radius:2px} h1,h2,h3,h4{font-family:var(–font-display);line-height:1.15;font-weight:700;letter-spacing:-0.02em} .h-xl{font-size:clamp(2.5rem,5.5vw,4.25rem)} .h-lg{font-size:clamp(2rem,4vw,3rem)} .h-md{font-size:clamp(1.5rem,2.5vw,2rem)} .lead{font-size:clamp(1.05rem,1.5vw,1.25rem);color:var(–text-muted);max-width:640px} .center{text-align:center}.center .lead{margin-left:auto;margin-right:auto} /* ═══ NAVIGATION ═══ */ .nav{position:fixed;top:0;left:0;right:0;z-index:1000;transition:all .35s cubic-bezier(.4,0,.2,1)} .nav-inner{max-width:1200px;margin:0 auto;padding:18px 32px;display:flex;align-items:center;justify-content:space-between;gap:24px} .nav.scrolled{background:var(–nav-bg);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(–border);box-shadow:0 8px 32px rgba(0,0,0,.12)} .nav.scrolled .nav-inner{padding-top:12px;padding-bottom:12px} .nav-logo{display:flex;align-items:center;gap:10px;font-family:var(–font-display);font-weight:800;font-size:20px;letter-spacing:-0.02em} .nav-logo-mark{width:36px;height:36px;border-radius:10px;background:linear-gradient(135deg,var(–accent),var(–accent-2));display:flex;align-items:center;justify-content:center;font-size:17px;color:var(–bg);font-weight:900} .nav-links{display:flex;align-items:center;gap:6px;list-style:none} .nav-link{position:relative;padding:8px 14px;font-size:14.5px;font-weight:500;color:var(–text-muted);border-radius:8px;transition:color .25s;cursor:pointer} .nav-link:hover{color:var(–text)} .nav-link::after{content:”;position:absolute;left:14px;right:14px;bottom:4px;height:2px;background:var(–accent);border-radius:2px;transform:scaleX(0);transform-origin:left;transition:transform .3s cubic-bezier(.4,0,.2,1)} .nav-link:hover::after,.nav-link.active::after{transform:scaleX(1)} .nav-link.active{color:var(–text)} .nav-cta{padding:10px 22px;background:var(–accent);color:var(–bg);font-weight:600;font-size:14px;border-radius:10px;transition:all .25s;cursor:pointer} .nav-cta:hover{transform:translateY(-2px);box-shadow:0 8px 24px var(–accent-glow)} .nav-burger{display:none;background:none;color:var(–text);font-size:24px;padding:4px 10px} @media(max-width:860px){ .nav-links{position:fixed;inset:0;top:64px;background:var(–bg);flex-direction:column;padding:32px;gap:12px;transform:translateX(100%);transition:transform .4s cubic-bezier(.4,0,.2,1)} .nav-links.open{transform:translateX(0)} .nav-link{font-size:20px} .nav-burger{display:block;z-index:1001} .nav-cta{display:none} } /* ═══ PAGES & TRANSITIONS ═══ */ .page{display:none;min-height:100vh;padding-top:80px;animation:none} .page.active{display:block} .page.entering{animation:pageIn .55s cubic-bezier(.22,1,.36,1) both} .page.leaving{animation:pageOut .3s ease both} @keyframes pageIn{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}} @keyframes pageOut{from{opacity:1}to{opacity:0;transform:translateY(-12px)}} /* ═══ HERO ═══ */ .hero{position:relative;min-height:calc(100vh – 80px);display:flex;align-items:center;overflow:hidden} .hero-glow{position:absolute;border-radius:50%;filter:blur(120px);opacity:.5;pointer-events:none;animation:glowFloat 9s ease-in-out infinite} .hero-glow.g1{width:560px;height:560px;background:var(–glow-1);top:-180px;right:-120px} .hero-glow.g2{width:480px;height:480px;background:var(–glow-2);bottom:-160px;left:-140px;animation-delay:3s} @keyframes glowFloat{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(30px,-20px) scale(1.06)}} .hero-inner{position:relative;z-index:2;padding:64px 0} .hero-badge{display:inline-flex;align-items:center;gap:8px;padding:8px 18px;border-radius:100px;background:var(–badge-bg);border:1px solid var(–badge-border);color:var(–accent);font-size:13.5px;font-weight:600;margin-bottom:28px} .hero-badge .dot{width:7px;height:7px;border-radius:50%;background:var(–accent);animation:pulse 2s infinite} @keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.3)}} .hero-title{margin-bottom:24px} .hero-title .grad{background:linear-gradient(120deg,var(–accent),var(–accent-2));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent} .hero-sub{color:var(–text-muted);font-size:clamp(1.05rem,1.6vw,1.3rem);max-width:600px;margin-bottom:40px} .hero-ctas{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:64px} .hero-stats{display:flex;gap:56px;flex-wrap:wrap} .stat-num{font-family:var(–font-display);font-size:clamp(1.8rem,3vw,2.5rem);font-weight:800;color:var(–accent);letter-spacing:-0.02em} .stat-label{font-size:13.5px;color:var(–text-dim);margin-top:2px} /* ═══ BUTTONS ═══ */ .btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:16px 34px;border-radius:12px;font-weight:600;font-size:15.5px;transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden;cursor:pointer} .btn-primary{background:var(–accent);color:var(–bg)} .btn-primary::before{content:”;position:absolute;top:0;left:-100%;width:100%;height:100%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.25),transparent);transition:left .5s} .btn-primary:hover::before{left:100%} .btn-primary:hover{transform:translateY(-3px);box-shadow:0 14px 36px var(–accent-glow)} .btn-secondary{background:var(–surface);color:var(–text);border:1px solid var(–border)} .btn-secondary:hover{border-color:var(–accent);color:var(–accent);transform:translateY(-3px)} .btn-sm{padding:11px 24px;font-size:14px} /* ═══ CARDS ═══ */ .grid{display:grid;gap:24px} .grid-2{grid-template-columns:repeat(2,1fr)} .grid-3{grid-template-columns:repeat(3,1fr)} .grid-4{grid-template-columns:repeat(4,1fr)} @media(max-width:960px){.grid-3,.grid-4{grid-template-columns:repeat(2,1fr)}} @media(max-width:620px){.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.hero-stats{gap:32px}} .card{background:var(–surface);border:1px solid var(–border);border-radius:var(–radius);padding:32px;transition:all .35s cubic-bezier(.4,0,.2,1);position:relative;overflow:hidden} .card:hover{transform:translateY(-6px);border-color:var(–accent-border);box-shadow:0 20px 48px rgba(0,0,0,.18)} .card-icon{width:52px;height:52px;border-radius:14px;background:var(–icon-bg);display:flex;align-items:center;justify-content:center;font-size:24px;margin-bottom:20px;color:var(–accent)} .card h3{font-size:19px;margin-bottom:10px} .card p{color:var(–text-muted);font-size:15px} .card-tag{display:inline-block;margin-top:16px;padding:4px 12px;border-radius:100px;background:var(–badge-bg);color:var(–accent);font-size:12px;font-weight:600} /* ═══ STEPS ═══ */ .steps{counter-reset:step} .step{position:relative;padding-left:88px;margin-bottom:40px} .step-num{position:absolute;left:0;top:0;width:60px;height:60px;border-radius:16px;background:linear-gradient(135deg,var(–accent),var(–accent-2));color:var(–bg);font-family:var(–font-display);font-weight:800;font-size:22px;display:flex;align-items:center;justify-content:center} .step h3{font-size:19px;margin-bottom:8px} .step p{color:var(–text-muted);font-size:15px} /* ═══ TESTIMONIALS ═══ */ .tcard{background:var(–surface);border:1px solid var(–border);border-radius:var(–radius);padding:32px;transition:all .35s} .tcard:hover{transform:translateY(-6px);border-color:var(–accent-border)} .tstars{color:#FBBF24;font-size:16px;letter-spacing:3px;margin-bottom:16px} .tquote{font-size:16px;font-style:italic;color:var(–text);margin-bottom:24px;line-height:1.7} .tperson{display:flex;align-items:center;gap:14px} .tavatar{width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,var(–accent),var(–accent-2));color:var(–bg);font-weight:700;display:flex;align-items:center;justify-content:center;font-size:15px} .tname{font-weight:600;font-size:15px} .trole{color:var(–text-dim);font-size:13px} /* ═══ PRICING ═══ */ .plan{background:var(–surface);border:1px solid var(–border);border-radius:var(–radius);padding:40px 32px;transition:all .35s;position:relative;display:flex;flex-direction:column} .plan:hover{transform:translateY(-6px);border-color:var(–accent-border)} .plan.featured{border-color:var(–accent);box-shadow:0 20px 60px var(–accent-glow);transform:scale(1.03)} .plan.featured:hover{transform:scale(1.03) translateY(-6px)} .plan-badge{position:absolute;top:-13px;left:50%;transform:translateX(-50%);padding:5px 18px;background:var(–accent);color:var(–bg);border-radius:100px;font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:1px} .plan-name{font-size:15px;font-weight:600;color:var(–text-muted);text-transform:uppercase;letter-spacing:1.5px;margin-bottom:12px} .plan-price{font-family:var(–font-display);font-size:44px;font-weight:800;letter-spacing:-0.03em;margin-bottom:4px} .plan-period{color:var(–text-dim);font-size:14px;margin-bottom:28px} .plan-features{list-style:none;margin-bottom:32px;flex:1} .plan-features li{padding:9px 0;color:var(–text-muted);font-size:14.5px;display:flex;gap:10px;align-items:flex-start} .plan-features li::before{content:’✓’;color:var(–accent);font-weight:700;flex-shrink:0} /* ═══ FAQ ═══ */ .faq-item{border:1px solid var(–border);border-radius:14px;margin-bottom:14px;background:var(–surface);overflow:hidden;transition:border-color .3s} .faq-item.open{border-color:var(–accent-border)} .faq-q{width:100%;background:none;color:var(–text);padding:22px 26px;display:flex;justify-content:space-between;align-items:center;font-size:16px;font-weight:600;text-align:left;gap:16px} .faq-q .fx{color:var(–accent);font-size:22px;transition:transform .3s;flex-shrink:0} .faq-item.open .fx{transform:rotate(45deg)} .faq-a{max-height:0;overflow:hidden;transition:max-height .4s cubic-bezier(.4,0,.2,1),padding .3s} .faq-item.open .faq-a{max-height:300px} .faq-a-inner{padding:0 26px 22px;color:var(–text-muted);font-size:15px} /* ═══ FORMS ═══ */ .form-card{background:var(–surface);border:1px solid var(–border);border-radius:var(–radius);padding:36px} .field{margin-bottom:18px} .field label{display:block;font-size:13px;font-weight:500;color:var(–text-muted);margin-bottom:7px} .field input,.field textarea{width:100%;padding:13px 16px;border-radius:10px;border:1px solid var(–border);background:var(–bg);color:var(–text);font-size:14.5px;outline:none;transition:all .25s} .field input:focus,.field textarea:focus{border-color:var(–accent);box-shadow:0 0 0 3px var(–accent-glow)} .contact-info-item{display:flex;align-items:center;gap:16px;margin-bottom:24px} .contact-info-icon{width:46px;height:46px;border-radius:12px;background:var(–icon-bg);color:var(–accent);display:flex;align-items:center;justify-content:center;font-size:19px;flex-shrink:0} .contact-info-label{font-size:13px;color:var(–text-dim)} .contact-info-value{font-size:15px;font-weight:600} /* ═══ FOOTER ═══ */ .footer{border-top:1px solid var(–border);padding:64px 0 32px;margin-top:48px;background:var(–footer-bg)} .footer-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:48px;margin-bottom:48px} @media(max-width:860px){.footer-grid{grid-template-columns:1fr 1fr}} .footer-desc{color:var(–text-muted);font-size:14.5px;max-width:300px;margin-top:14px} .footer h4{font-size:14px;text-transform:uppercase;letter-spacing:1.5px;color:var(–text-dim);margin-bottom:18px} .footer-links{list-style:none} .footer-links li{margin-bottom:10px} .footer-links a{color:var(–text-muted);font-size:14.5px;transition:color .25s;cursor:pointer} .footer-links a:hover{color:var(–accent)} .footer-bottom{border-top:1px solid var(–border);padding-top:28px;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;color:var(–text-dim);font-size:13.5px} /* ═══ REVEAL ANIMATIONS — progressive enhancement ═══ Content is VISIBLE by default. Only when JS is confirmed present (the router script adds .js to ) do we hide-then-reveal on scroll. Without JS every section still renders — never a blank page. */ .rv{opacity:1;transform:none;transition:opacity .8s cubic-bezier(.22,1,.36,1),transform .8s cubic-bezier(.22,1,.36,1)} html.js .rv{opacity:0;transform:translateY(32px)} html.js .rv.in{opacity:1;transform:translateY(0)} .rv-d1{transition-delay:.1s}.rv-d2{transition-delay:.2s}.rv-d3{transition-delay:.3s}.rv-d4{transition-delay:.4s}.rv-d5{transition-delay:.5s} @media(prefers-reduced-motion:reduce){html.js .rv{opacity:1;transform:none}.hero-glow{animation:none}} /* ═══ DIVIDER CTA ═══ */ .cta-band{position:relative;border-radius:calc(var(–radius) * 1.4);padding:72px 48px;text-align:center;overflow:hidden;background:linear-gradient(135deg,var(–cta-bg-1),var(–cta-bg-2));border:1px solid var(–border)} .cta-band .hero-glow{opacity:.35} .card{box-shadow:0 1px 3px rgba(22,19,14,.05)} .card:hover{box-shadow:0 16px 40px rgba(22,19,14,.1)} .btn-primary{color:#16130E} .nav-cta{color:#16130E} .stat-num{color:var(–text)} .hero{background:radial-gradient(ellipse 70% 55% at 75% 25%,rgba(245,158,11,0.08),transparent)} .plan.featured{box-shadow:0 20px 50px rgba(245,158,11,0.2)} .kicker{color:var(–accent-2)} .btn-primary{color:#fff}.card:hover{border-color:var(–accent-border)}
Porto’s Premier Pilates

Elevate Your Practice. Transform Your Body.

Small-group and private Pilates for discerning professionals. Experience results in Porto’s most refined studio.

8
max class size
95%
member retention
1:4
instructor:member ratio
FitTrack Gym
Why Choose Us?

Pilates Designed for Your Success

Every session is calibrated to your body, your goals, your schedule.

Expert Coaching

Certified instructors (500+ hours) provide real-time form correction, ensuring measurable progress in every movement.

Exclusive Small Groups

Maximum 8 participants per class. Receive personalized attention without the private session premium.

Premium Reformer Equipment

Studio-grade Balanced Body equipment, meticulously maintained weekly. Trusted by professional athletes.

Flexible Booking

Morning, lunch, and evening classes, 7 days a week. Easy 24-hour cancellation and rescheduling via our member portal.

Objective Progress Tracking

Quarterly movement assessments track your strength, flexibility, and posture with objective data.

Holistic Movement

Beyond reps: we integrate breath work, mobility, and recovery for a stronger, more balanced you.

Your First Steps

Your First Month at FitTrack Gym

1

Book Your Foundation Session

Start with a complimentary 30-minute assessment. We’ll map your movement, discuss goals, and recommend your ideal class level.

2

Join Your First Class

Experience your first small-group session. Equipment setup and modifications are tailored to you – no prior experience needed.

3

Build Your Practice

Most members attend 2-3 sessions weekly within a month, reporting noticeable improvements in core strength and posture.

Testimonials

What Our Members Say

★★★★★

“After six months at FitTrack, my chronic lower back pain disappeared and I added 12kg to my deadlift—the instructors genuinely care about your progress.”

SM
Sofia M.
Marketing Director, Porto
★★★★★

“I’ve tried three pilates studios in Porto and this is the only one where I felt the instructor knew my name and my limitations by the second class.”

RL
Ricardo L.
Architect, Foz do Douro
★★★★★

“The small class sizes mean real coaching—I corrected a shoulder imbalance I’ve had for years because my instructor caught it in week one.”

AP
Ana P.
Lawyer, Boavista

Ready to Feel Better?

Book your complimentary foundation session and discover Porto’s most personalized Pilates studio.

Our Services

Pilates for Every Lifestyle

Small-group energy or focused one-on-one. Choose the session that moves you forward.

Small-Group Classes

Maximum 8 participants for personalized attention and a motivated community.

From €28/session

Private Sessions

100% tailored programming with a dedicated instructor, designed around your body and goals.

From €65/session

Reformer Pilates

Spring-loaded resistance training to sculpt lean muscle, improve posture, and build core stability.

All levels

Mat Pilates

Bodyweight flows that strengthen deep stabilizers and increase flexibility without equipment.

Beginner friendly

Power Pilates

High-intensity interval training meets classical Pilates. Cardio, plyometrics, and core work in one dynamic hour.

Intermediate+

Rehabilitation & Recovery

Gentle, therapeutic movement based on physiotherapy principles to rebuild strength post-injury or surgery.

Medical referrals accepted
Get in Touch

Begin Your Journey

Book your first session or ask us anything. We’re here to help you move better.

Email
hello@fittrackgym.pt
Phone
+351 220 123 456
Location
Porto, Portugal
Hours
Mon–Sat, 7:00–21:00
document.documentElement.classList.add(‘js’); (function(){ var pages = document.querySelectorAll(‘.page’); var links = document.querySelectorAll(‘[data-nav]’); var navLinks = document.querySelectorAll(‘.nav-link’); var current = ‘home’; function go(id, push){ if(!document.getElementById(‘page-‘+id) || id===current) return; var out = document.getElementById(‘page-‘+current); var into = document.getElementById(‘page-‘+id); out.classList.add(‘leaving’); setTimeout(function(){ out.classList.remove(‘active’,’leaving’); into.classList.add(‘active’,’entering’); window.scrollTo({top:0,behavior:’instant’}); setTimeout(function(){ into.classList.remove(‘entering’); bindReveal(into); },550); }, 220); current = id; navLinks.forEach(function(l){ l.classList.toggle(‘active’, l.getAttribute(‘data-nav’)===id); }); if(push !== false) history.replaceState(null,”,’#/’+id); document.querySelector(‘.nav-links’) && document.querySelector(‘.nav-links’).classList.remove(‘open’); bindReveal(into); } links.forEach(function(l){ l.addEventListener(‘click’, function(e){ e.preventDefault(); go(l.getAttribute(‘data-nav’)); }); }); window.addEventListener(‘hashchange’, function(){ var nh = (location.hash||”).replace(‘#/’,”).replace(‘#’,”); if(nh && nh!==current && document.getElementById(‘page-‘+nh)) go(nh, false); }); var h = (location.hash||”).replace(‘#/’,”).replace(‘#’,”); if(h && document.getElementById(‘page-‘+h)){ document.getElementById(‘page-‘+current).classList.remove(‘active’); document.getElementById(‘page-‘+h).classList.add(‘active’); current = h; navLinks.forEach(function(l){ l.classList.toggle(‘active’, l.getAttribute(‘data-nav’)===h); }); } // Nav scroll state var nav = document.querySelector(‘.nav’); window.addEventListener(‘scroll’, function(){ nav.classList.toggle(‘scrolled’, window.scrollY > 30); }, {passive:true}); // Burger var burger = document.querySelector(‘.nav-burger’); if(burger) burger.addEventListener(‘click’, function(){ document.querySelector(‘.nav-links’).classList.toggle(‘open’); }); // Reveal on scroll var io = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add(‘in’); io.unobserve(e.target); } }); }, {threshold:0.12}); function bindReveal(scope){ (scope||document).querySelectorAll(‘.rv:not(.in)’).forEach(function(el){ io.observe(el); }); } bindReveal(document); // Animated counters var cio = new IntersectionObserver(function(entries){ entries.forEach(function(e){ if(!e.isIntersecting) return; cio.unobserve(e.target); var el = e.target, raw = el.getAttribute(‘data-count’)||”; var m = raw.match(/^([d.,]+)(.*)$/); if(!m) return; var target = parseFloat(m[1].replace(/,/g,”)), suffix = m[2]||”; var t0 = null, dur = 1400; function tick(t){ if(!t0) t0 = t; var p = Math.min((t-t0)/dur, 1), ease = 1-Math.pow(1-p,3); el.textContent = (target%1===0 ? Math.round(target*ease).toLocaleString() : (target*ease).toFixed(1)) + suffix; if(p<1) requestAnimationFrame(tick); } requestAnimationFrame(tick); }); }, {threshold:0.6}); document.querySelectorAll('[data-count]').forEach(function(el){ cio.observe(el); }); })();