Files
Claude 45d080197a feat: add WordPress theme hooklab (réplique exacte du site Next.js)
- style.css : design system complet (navy #1B2A4A, orange #E8772E, Inter, animations)
- functions.php : enqueue scripts/styles + handler AJAX formulaire contact
- header.php : navbar sticky avec burger mobile
- front-page.php : toutes les sections (Hero, Problématique, Process, Demos, About, FAQ, Contact)
- footer.php : footer 3 colonnes + bottom bar légal
- js/main.js : scroll reveal, FAQ accordion, menu mobile, formulaire AJAX
- index.php / page.php : templates fallback

https://claude.ai/code/session_01PzA98VhLMmsHpzs7gnLHGs
2026-02-24 21:37:14 +00:00

335 lines
22 KiB
CSS
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
Theme Name: HookLab
Theme URI: https://hooklab.eu
Author: Enguerrand Ozano
Version: 1.0.0
Description: Thème HookLab Agence web artisans du Nord (59)
Text Domain: hooklab
*/
/* ── VARIABLES ── */
:root {
--navy: #1B2A4A;
--navy-l: #2A3D66;
--navy-d: #111D36;
--orange: #E8772E;
--orange-h: #D06522;
--bg: #F7F8FA;
--bg-w: #FFFFFF;
--text: #1A1A2E;
--text-l: #6B7280;
--text-m: #9CA3AF;
--border: #E5E7EB;
--success: #10B981;
--error: #EF4444;
--max-w: 1152px;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:'Inter',system-ui,sans-serif;color:var(--text);background:var(--bg-w);line-height:1.6;-webkit-font-smoothing:antialiased}
img{max-width:100%;height:auto;display:block}
a{text-decoration:none;color:inherit}
ul{list-style:none}
button{font-family:inherit;cursor:pointer;border:none;background:none}
/* ── LAYOUT ── */
.container{max-width:var(--max-w);margin:0 auto;padding:0 clamp(1rem,4vw,2rem)}
.sec{padding:5rem 0}
@media(min-width:768px){.sec{padding:6rem 0}}
/* ── BUTTONS ── */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.75rem 1.5rem;border-radius:12px;font-weight:700;font-size:.875rem;transition:all .2s;cursor:pointer;border:none;font-family:inherit}
.btn-lg{padding:.9rem 2rem;font-size:1rem;border-radius:14px}
.btn-orange{background:var(--orange);color:#fff}
.btn-orange:hover{background:var(--orange-h);transform:translateY(-1px)}
.btn-navy{background:var(--navy);color:#fff}
.btn-navy:hover{background:var(--navy-l)}
.btn-full{width:100%}
.pulse{animation:pulseGlow 2.5s ease-in-out infinite}
@keyframes pulseGlow{0%,100%{box-shadow:0 0 0 0 rgba(232,119,46,0)}50%{box-shadow:0 0 0 12px rgba(232,119,46,.18)}}
/* ── BADGE ── */
.badge{display:inline-flex;align-items:center;gap:.5rem;padding:.375rem .875rem;border-radius:999px;font-size:.75rem;font-weight:600}
.badge-or{background:rgba(232,119,46,.12);border:1px solid rgba(232,119,46,.25);color:var(--orange)}
.badge-nv{background:rgba(27,42,74,.06);border:1px solid rgba(27,42,74,.1);color:var(--navy)}
.badge-wh{background:rgba(255,255,255,.15);color:#fff}
/* ── CARD ── */
.card{background:var(--bg-w);border:1px solid var(--border);border-radius:20px;overflow:hidden;box-shadow:0 1px 3px rgba(0,0,0,.08);transition:border-color .3s,box-shadow .3s,transform .3s}
.card:hover{border-color:rgba(232,119,46,.25);box-shadow:0 4px 16px rgba(0,0,0,.1);transform:translateY(-2px)}
/* ── FORM ── */
.form-g{display:flex;flex-direction:column;gap:.375rem}
.form-l{font-size:.875rem;font-weight:500;color:var(--text)}
.form-i{width:100%;padding:.75rem 1rem;background:var(--bg);border:1.5px solid var(--border);border-radius:12px;font-size:.875rem;font-family:inherit;color:var(--text);transition:border-color .2s,box-shadow .2s;outline:none}
.form-i::placeholder{color:var(--text-m)}
.form-i:focus{border-color:var(--orange);box-shadow:0 0 0 3px rgba(232,119,46,.12)}
.form-err{color:var(--error);font-size:.8125rem}
.form-hint{color:var(--text-m);font-size:.75rem;text-align:center}
/* ── ICON CHECK ── */
.chk{width:2rem;height:2rem;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center}
.chk svg{width:1rem;height:1rem}
.chk-or{background:rgba(232,119,46,.12)}
.chk-or svg{color:var(--orange)}
.chk-gn{background:rgba(16,185,129,.15)}
.chk-gn svg{color:var(--success)}
.chk-wh{background:rgba(255,255,255,.2)}
.chk-wh svg{color:#fff}
/* ── SCROLL REVEAL ── */
.sr{opacity:0;transition:opacity .65s cubic-bezier(.16,1,.3,1),transform .65s cubic-bezier(.16,1,.3,1)}
.sr-up{transform:translateY(40px)}
.sr-dn{transform:translateY(-40px)}
.sr-lf{transform:translateX(-40px)}
.sr-rt{transform:translateX(40px)}
.sr-fd{transform:scale(.95)}
.sr.vis{opacity:1;transform:none}
/* ════════════════════════════════
NAVBAR
════════════════════════════════ */
#hl-nav{position:sticky;top:0;z-index:100;background:rgba(255,255,255,.92);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--border)}
.nav-in{display:flex;align-items:center;justify-content:space-between;height:4rem}
.nav-logo{display:flex;align-items:center;gap:.5rem;font-size:1.25rem;font-weight:700;color:var(--navy)}
.nav-logo .lb{width:2.25rem;height:2.25rem;background:var(--navy);border-radius:8px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:.9rem}
.nav-logo em{color:var(--orange);font-style:normal}
.nav-links{display:none;align-items:center;gap:2rem}
@media(min-width:768px){.nav-links{display:flex}}
.nav-links a{font-size:.875rem;font-weight:500;color:var(--text-l);transition:color .2s}
.nav-links a:hover{color:var(--navy)}
.nav-cta{display:none}
@media(min-width:768px){.nav-cta{display:block}}
.nav-burger{display:flex;padding:.5rem;color:var(--text-l);transition:color .2s}
@media(min-width:768px){.nav-burger{display:none}}
.nav-burger:hover{color:var(--navy)}
.nav-burger svg{width:1.5rem;height:1.5rem}
.nav-mob{display:none;flex-direction:column;gap:.25rem;border-top:1px solid var(--border);padding:1rem 0}
.nav-mob.open{display:flex}
.nav-mob a{padding:.625rem 0;font-size:.875rem;font-weight:500;color:var(--text-l);transition:color .2s}
.nav-mob a:hover{color:var(--navy)}
.nav-mob .btn-orange{margin-top:.5rem;justify-content:center}
/* ════════════════════════════════
HERO
════════════════════════════════ */
#hl-hero{position:relative;min-height:90vh;display:flex;align-items:center;background:var(--navy);overflow:hidden}
@media(min-width:768px){#hl-hero{min-height:100vh}}
.h-g1{position:absolute;inset:0;background:radial-gradient(ellipse at 20% 50%,rgba(232,119,46,.08),transparent 60%)}
.h-g2{position:absolute;inset:0;background:radial-gradient(circle at 80% 20%,rgba(255,255,255,.04),transparent 50%)}
.h-grid{position:absolute;inset:0;opacity:.03;background-image:linear-gradient(rgba(255,255,255,.1) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.1) 1px,transparent 1px);background-size:60px 60px}
.h-blob{position:absolute;border-radius:50%;opacity:.06;animation:fltSlow 6s ease-in-out infinite}
.h-blob-1{width:12rem;height:12rem;background:var(--orange);top:10%;left:5%}
.h-blob-2{width:8rem;height:8rem;background:#fff;top:60%;right:8%;animation-delay:2s}
.h-blob-3{width:6rem;height:6rem;background:var(--orange);bottom:20%;left:30%;animation-delay:4s}
.h-cont{position:relative;z-index:10;padding:5rem 0}
@media(min-width:768px){.h-cont{padding:8rem 0}}
.h-gl{display:grid;grid-template-columns:1fr;gap:3rem;align-items:center}
@media(min-width:1024px){.h-gl{grid-template-columns:1fr 1fr}}
.h-loc{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;background:rgba(232,119,46,.12);border:1px solid rgba(232,119,46,.25);border-radius:999px;color:var(--orange);font-size:.75rem;font-weight:600;margin-bottom:2rem;animation:fadeDown .6s ease both}
.h-loc .dot{width:.5rem;height:.5rem;background:var(--orange);border-radius:50%;animation:dot-pulse 2s infinite}
.h-h1{font-size:clamp(2.25rem,5vw,3.75rem);font-weight:900;color:#fff;line-height:1.1;letter-spacing:-0.03em;margin-bottom:1.5rem}
.h-h1 .l1{display:block;animation:heroTxt .5s ease .1s both}
.h-h1 .l2{display:block;animation:heroTxt .5s ease .3s both}
.h-h1 .l3{display:block;color:var(--orange);position:relative;animation:heroTxt .5s ease .5s both}
.h-h1 .l3::after{content:'';position:absolute;bottom:-.25rem;left:0;height:3px;background:rgba(232,119,46,.4);border-radius:99px;width:0;animation:ulGrow 1s ease .8s forwards}
.h-sub{color:rgba(255,255,255,.65);font-size:1.0625rem;line-height:1.7;max-width:38rem;margin-bottom:2.5rem;animation:fadeUp .5s ease .6s both}
.h-ctas{display:flex;flex-direction:column;gap:1rem;animation:fadeUp .5s ease .8s both}
@media(min-width:640px){.h-ctas{flex-direction:row}}
.h-ne{color:rgba(255,255,255,.35);font-size:.75rem;margin-top:.75rem;animation:fadeUp .5s ease .8s both}
.h-chks{display:flex;flex-wrap:wrap;gap:1.25rem;margin-top:2rem;animation:fadeUp .5s ease 1s both}
.h-chk{display:flex;align-items:center;gap:.5rem;color:rgba(255,255,255,.5);font-size:.875rem}
.h-chk .cc{width:1.25rem;height:1.25rem;background:rgba(16,185,129,.2);border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.h-chk .cc svg{width:.75rem;height:.75rem;color:var(--success)}
.h-portrait{display:none}
@media(min-width:1024px){.h-portrait{display:flex;justify-content:center}}
.h-p-inner{position:relative}
.h-p-glow{position:absolute;inset:-1rem;background:rgba(232,119,46,.2);border-radius:1.5rem;filter:blur(2rem)}
.h-p-img{position:relative;width:20rem;height:24rem;border-radius:1rem;overflow:hidden;border:2px solid rgba(255,255,255,.1)}
.h-p-img img{width:100%;height:100%;object-fit:cover}
.h-p-ph{width:100%;height:100%;background:var(--navy-l);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.75rem}
.h-p-ph svg{width:2.5rem;height:2.5rem;color:rgba(232,119,46,.5)}
.h-p-ph p{color:rgba(255,255,255,.3);font-size:.875rem}
.h-p-badge{position:absolute;bottom:-.75rem;right:-.75rem;background:var(--orange);color:#fff;font-size:.75rem;font-weight:700;padding:.5rem 1rem;border-radius:.75rem;box-shadow:0 4px 12px rgba(0,0,0,.2)}
.h-scroll{position:absolute;bottom:2rem;left:50%;transform:translateX(-50%);z-index:10;display:flex;flex-direction:column;align-items:center;gap:.5rem;color:rgba(255,255,255,.3);font-size:.6875rem;font-weight:500;letter-spacing:.08em;text-transform:uppercase;animation:bounce 2s ease-in-out infinite}
.h-scroll svg{width:1.25rem;height:1.25rem}
/* ════════════════════════════════
PROBLEMATIQUE
════════════════════════════════ */
#hl-pb{background:var(--bg)}
.pb-title{font-size:clamp(1.5rem,3vw,2.25rem);font-weight:700;color:var(--navy);letter-spacing:-.02em;margin-bottom:.75rem}
.pb-title em{font-style:normal;color:var(--orange)}
.pb-sub{color:var(--text-l);font-size:1.0625rem;max-width:38rem;margin:0 auto}
.pb-lead{font-weight:700;font-size:1.0625rem;color:var(--navy);margin:2rem 0 1.25rem}
.pb-list{display:flex;flex-direction:column;gap:1rem;margin-bottom:3rem}
.pb-item{display:flex;align-items:flex-start;gap:1rem;padding:1.25rem;background:var(--bg-w);border:1px solid var(--border);border-radius:16px;transition:border-color .3s}
.pb-item:hover{border-color:rgba(232,119,46,.25)}
.pb-item-text strong{display:block;font-weight:700;color:var(--navy);margin-bottom:.25rem}
.pb-item-text p{font-size:.875rem;color:var(--text-l);line-height:1.65}
.pb-engage{background:var(--navy);border-radius:1.25rem;padding:2rem;text-align:center;color:#fff;font-size:1rem;line-height:1.7}
@media(min-width:768px){.pb-engage{padding:2.5rem;font-size:1.125rem}}
.pb-engage strong{color:var(--orange);font-size:1.125rem;font-weight:900}
@media(min-width:768px){.pb-engage strong{font-size:1.25rem}}
/* ════════════════════════════════
PROCESS
════════════════════════════════ */
#hl-proc{background:var(--bg)}
.sec-h{text-align:center;margin-bottom:4rem}
.sec-h h2{font-size:clamp(1.5rem,3vw,2.5rem);color:var(--navy);margin:.75rem 0}
.sec-h h2 em{font-style:normal;color:var(--orange)}
.sec-h p{color:var(--text-l);font-size:1.0625rem;max-width:38rem;margin:0 auto}
.proc-steps{display:flex;flex-direction:column;gap:4rem}
@media(min-width:768px){.proc-steps{gap:6rem}}
.proc-step{display:grid;grid-template-columns:1fr;gap:2.5rem;align-items:center}
@media(min-width:768px){.proc-step{grid-template-columns:1fr 1fr}}
.proc-step.rev .ps-img{order:0}
.proc-step.rev .ps-txt{order:0}
@media(min-width:768px){.proc-step.rev .ps-img{order:2}.proc-step.rev .ps-txt{order:1}}
.ps-img{position:relative}
.ps-img-inner{border-radius:1.25rem;overflow:hidden;box-shadow:0 10px 40px rgba(0,0,0,.14);position:relative}
.ps-img-inner img{width:100%;height:16rem;object-fit:cover}
@media(min-width:768px){.ps-img-inner img{height:20rem}}
.ps-img-inner::after{content:'';position:absolute;inset:0;background:linear-gradient(to top,rgba(27,42,74,.3),transparent)}
.ps-num{position:absolute;top:-1rem;left:-1rem;width:4rem;height:4rem;background:var(--orange);border-radius:1rem;display:flex;align-items:center;justify-content:center;color:#fff;font-size:1.5rem;font-weight:900;box-shadow:0 4px 16px rgba(0,0,0,.1);z-index:1}
.ps-txt .sub{color:var(--orange);font-size:.8125rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em}
.ps-txt h3{font-size:clamp(1.375rem,2.5vw,1.875rem);color:var(--navy);margin:.5rem 0 1rem}
.ps-txt p{color:var(--text-l);line-height:1.7;margin-bottom:1.5rem}
.ps-pts{display:flex;flex-direction:column;gap:.75rem}
.ps-pt{display:flex;align-items:flex-start;gap:.75rem}
.ps-pt .chk-or{margin-top:.125rem}
.ps-pt span{font-size:.875rem;font-weight:500;color:var(--text)}
/* ════════════════════════════════
DEMOS
════════════════════════════════ */
#hl-demos{background:var(--bg)}
.demos-grid{display:grid;grid-template-columns:1fr;gap:1.5rem}
@media(min-width:768px){.demos-grid{grid-template-columns:repeat(3,1fr)}}
.demos-grid .card{display:flex;flex-direction:column}
.dc-head{background:var(--navy);padding:1.5rem;text-align:center}
.dc-icon{width:4rem;height:4rem;background:rgba(232,119,46,.18);border-radius:1rem;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;color:var(--orange)}
.dc-icon svg{width:2.5rem;height:2.5rem}
.dc-head h3{color:#fff;font-size:1.125rem;margin-bottom:.25rem}
.dc-head p{color:var(--orange);font-size:.875rem;font-weight:600}
.dc-body{padding:1.25rem;display:flex;flex-direction:column;flex:1}
.dc-body p{color:var(--text-l);font-size:.875rem;line-height:1.65;flex:1}
.dc-cta{display:flex;align-items:center;justify-content:center;gap:.5rem;background:var(--orange);color:#fff;font-weight:700;font-size:.875rem;padding:.75rem 1.25rem;border-radius:.75rem;margin-top:1.25rem;transition:background .2s,transform .2s}
.dc-cta:hover{background:var(--orange-h);transform:scale(1.02)}
.dc-cta svg{width:1rem;height:1rem}
/* ════════════════════════════════
ABOUT
════════════════════════════════ */
#hl-about{background:var(--orange);position:relative;overflow:hidden}
.ab-c1{position:absolute;top:5rem;right:5rem;width:10rem;height:10rem;border:2px solid rgba(255,255,255,.15);border-radius:50%}
.ab-c2{position:absolute;bottom:2rem;left:2rem;width:15rem;height:15rem;border:2px solid rgba(255,255,255,.1);border-radius:50%}
.ab-wrap{display:flex;justify-content:center}
.ab-inner{position:relative}
.ab-frame{width:16rem;height:22rem;border-radius:1.25rem;overflow:hidden;border:4px solid rgba(255,255,255,.2);box-shadow:0 10px 40px rgba(0,0,0,.14)}
@media(min-width:640px){.ab-frame{width:18rem;height:24rem}}
.ab-frame img{width:100%;height:100%;object-fit:cover}
.ab-ph{width:100%;height:100%;background:var(--orange-h);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;padding:1.5rem}
.ab-ph svg{width:2.5rem;height:2.5rem;color:rgba(255,255,255,.5)}
.ab-ph p{color:rgba(255,255,255,.5);font-size:.875rem;text-align:center}
.ab-loc{position:absolute;bottom:-.75rem;left:50%;transform:translateX(-50%);background:var(--navy);color:#fff;font-size:.75rem;font-weight:700;padding:.5rem 1.25rem;border-radius:999px;box-shadow:0 4px 12px rgba(0,0,0,.2);white-space:nowrap}
.ab-txt .badge{margin-bottom:1rem}
.ab-txt h2{font-size:clamp(1.5rem,3vw,2.5rem);color:#fff;margin-bottom:1rem}
.ab-txt h2 em{font-style:normal;color:var(--navy)}
.ab-txt>p{color:rgba(255,255,255,.9);line-height:1.7;margin-bottom:1.5rem}
.ab-list{display:flex;flex-direction:column;gap:1rem;margin-bottom:1.5rem}
.ab-li{display:flex;align-items:flex-start;gap:.75rem}
.ab-li .chk-wh{flex-shrink:0;margin-top:.125rem}
.ab-li p{color:rgba(255,255,255,.8);line-height:1.6}
.ab-li strong{color:#fff}
/* ════════════════════════════════
FAQ
════════════════════════════════ */
#hl-faq{background:var(--bg)}
.faq-list{display:flex;flex-direction:column;gap:.75rem}
.faq-item{background:var(--bg-w);border:1px solid var(--border);border-radius:16px;overflow:hidden;transition:border-color .3s}
.faq-item:hover,.faq-item.open{border-color:rgba(232,119,46,.2)}
.faq-q{width:100%;display:flex;align-items:center;justify-content:space-between;padding:1.25rem;text-align:left;cursor:pointer;background:none;border:none;font-family:inherit;font-size:.9375rem;font-weight:600;color:var(--navy);transition:background .2s}
.faq-q:hover{background:rgba(247,248,250,.8)}
.faq-icon{width:1.25rem;height:1.25rem;color:var(--text-m);flex-shrink:0;transition:transform .3s}
.faq-item.open .faq-icon{transform:rotate(180deg)}
.faq-a{overflow:hidden;max-height:0;opacity:0;transition:max-height .35s ease,opacity .35s ease}
.faq-item.open .faq-a{max-height:20rem;opacity:1}
.faq-a-in{padding:0 1.25rem 1.25rem;color:var(--text-l);font-size:.875rem;line-height:1.7}
/* ════════════════════════════════
CONTACT
════════════════════════════════ */
#hl-contact{background:var(--navy)}
.ct-l .badge{margin-bottom:1rem}
.ct-l h2{font-size:clamp(1.5rem,3vw,2.5rem);color:#fff;margin-bottom:1rem}
.ct-l>p{color:rgba(255,255,255,.7);line-height:1.7;margin-bottom:1.5rem}
.ct-chks{display:flex;flex-direction:column;gap:.75rem}
.ct-chk{display:flex;align-items:center;gap:.75rem}
.ct-chk .chk-or2{width:1.25rem;height:1.25rem;background:rgba(232,119,46,.2);border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ct-chk .chk-or2 svg{width:.75rem;height:.75rem;color:var(--orange)}
.ct-chk span{color:rgba(255,255,255,.8);font-size:.875rem}
.ct-box{background:#fff;border-radius:1.25rem;padding:2rem;box-shadow:0 10px 40px rgba(0,0,0,.14)}
@media(min-width:640px){.ct-box{padding:2.5rem}}
.ct-box h3{font-size:1.25rem;color:var(--navy);margin-bottom:.25rem}
.ct-box>p{color:var(--text-l);font-size:.875rem;margin-bottom:1.5rem}
.ct-form{display:flex;flex-direction:column;gap:1rem}
.ct-success{text-align:center;padding:2rem 0;display:none}
.ct-success.show{display:block}
.ct-success .si{width:4rem;height:4rem;background:rgba(16,185,129,.12);border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem}
.ct-success .si svg{width:2rem;height:2rem;color:var(--success)}
.ct-success h3{font-size:1.25rem;color:var(--navy);margin-bottom:.5rem}
.ct-success p{color:var(--text-l);font-size:.875rem}
.ct-form-wrap{display:block}
.ct-form-wrap.hide{display:none}
/* ════════════════════════════════
FOOTER
════════════════════════════════ */
#hl-footer{background:var(--bg-w);border-top:1px solid var(--border);padding:3rem 0 2rem}
.ft-grid{display:grid;grid-template-columns:1fr;gap:2rem;margin-bottom:2rem}
@media(min-width:768px){.ft-grid{grid-template-columns:repeat(3,1fr)}}
.ft-logo{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;font-weight:700;color:var(--navy);margin-bottom:.75rem}
.ft-logo .lb{width:2rem;height:2rem;background:var(--navy);border-radius:6px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:.8125rem}
.ft-logo em{font-style:normal;color:var(--orange)}
.ft-brand p{color:var(--text-l);font-size:.875rem;line-height:1.6;max-width:18rem}
.ft-brand small{color:var(--text-m);font-size:.75rem;display:block;margin-top:.75rem}
.ft-col h4{color:var(--navy);font-size:.875rem;font-weight:600;margin-bottom:1rem}
.ft-col li{margin-bottom:.5rem}
.ft-col li a,.ft-col li span{color:var(--text-l);font-size:.875rem;transition:color .2s}
.ft-col li a:hover{color:var(--navy)}
.ft-bot{border-top:1px solid var(--border);padding-top:1.5rem;display:flex;flex-direction:column;gap:.75rem;align-items:center;justify-content:space-between}
@media(min-width:768px){.ft-bot{flex-direction:row}}
.ft-bot p{color:var(--text-m);font-size:.75rem;text-align:center}
/* ── KEYFRAMES ── */
@keyframes heroTxt{from{opacity:0;transform:translateY(20px);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
@keyframes fadeDown{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}
@keyframes fadeUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes ulGrow{from{width:0}to{width:100%}}
@keyframes fltSlow{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-20px) scale(1.05)}}
@keyframes dot-pulse{0%,100%{opacity:1}50%{opacity:.4}}
@keyframes bounce{0%,100%{transform:translateX(-50%) translateY(0)}50%{transform:translateX(-50%) translateY(8px)}}
@keyframes spin{to{transform:rotate(360deg)}}
/* misc */
.text-orange{color:var(--orange)}
.text-navy{color:var(--navy)}
.spinner{width:1rem;height:1rem;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .6s linear infinite}
.btn.loading{opacity:.8;pointer-events:none}