/* Cinematic banners: light architectural depth, page-specific linework, calm motion. */
.kinetic-hero{
 --pointer-x:0px;--pointer-y:0px;--light-x:50%;--light-y:50%;
 --banner-violet:#87639f;--banner-gold:#b08c51;
 position:relative;isolation:isolate;overflow:clip;
 background:linear-gradient(150deg,#fdfcf9 8%,#f7f1fb 54%,#fcfaf6 96%);
}
.banner-atmosphere{position:absolute;inset:0;z-index:-1;pointer-events:none;overflow:hidden}
.banner-halo{position:absolute;display:block;width:640px;height:640px;border-radius:50%;filter:blur(4px);opacity:.6;animation:banner-orbit 24s ease-in-out infinite alternate;animation-play-state:paused}
.banner-halo-one{right:-14%;top:-290px;background:radial-gradient(circle,#c7afd84d 0,#ddcbea33 37%,transparent 69%)}
.banner-halo-two{width:500px;height:500px;left:-190px;bottom:-120px;background:radial-gradient(circle,#ddc5943d,transparent 66%);animation-delay:-9s;animation-duration:31s}
.banner-grid{position:absolute;inset:0;background-image:radial-gradient(#8f71974a .8px,transparent .8px);background-size:32px 32px;opacity:.38;mask-image:linear-gradient(120deg,#0008,transparent 60%)}
.banner-blueprint{position:absolute;right:-2%;top:0;width:min(66%,830px);height:100%;color:var(--banner-violet);transform:translate(calc(var(--pointer-x) * -.5),calc(var(--pointer-y) * -.5));transition:transform .65s ease-out;overflow:visible}
.banner-route-ghost{stroke:currentColor;stroke-width:1;opacity:.16;vector-effect:non-scaling-stroke}
.banner-route{stroke:var(--banner-gold);stroke-width:1.4;opacity:.32;stroke-dasharray:1;stroke-dashoffset:1;animation:banner-route-draw 2.8s cubic-bezier(.22,.61,.36,1) .15s both;animation-play-state:paused;vector-effect:non-scaling-stroke}
.banner-node{fill:#b18c51;opacity:.5;transform-box:fill-box;transform-origin:center;animation:banner-node-glow 5s ease-in-out infinite;animation-play-state:paused}
.banner-node-1{animation-delay:-1.7s}.banner-node-2{animation-delay:-3.4s}.banner-node-3{animation-delay:-2.4s}
.banner-horizon{position:absolute;height:1px;left:5.5%;right:5.5%;bottom:0;background:linear-gradient(90deg,transparent,#bb9d704f,#b69fc85c,transparent)}
.kinetic-hero .banner-copy{position:relative;z-index:2}
.banner-title{position:relative;text-wrap:balance}
.kinetic-hero .banner-title em{background:linear-gradient(105deg,#633d85 15%,#98744b 52%,#633d85 85%);background-clip:text;-webkit-background-clip:text;color:transparent;background-size:170% 100%}
.kinetic-hero .banner-copy>.eyebrow{gap:12px;letter-spacing:.12em;color:#715581}
.kinetic-hero .banner-copy>.eyebrow>span:empty{width:34px;height:1px;background:linear-gradient(90deg,#b18c51,#9874aa);display:inline-block;flex:none}
.kinetic-hero .banner-copy>p:not(.eyebrow){color:#62556d}
.banner-entered .banner-reveal{animation:banner-copy-arrive .85s cubic-bezier(.2,.65,.25,1) both;animation-delay:calc(var(--banner-order,0) * .105s);animation-play-state:paused}
.banner-entered .banner-visual{animation:banner-frame-arrive 1.1s cubic-bezier(.2,.65,.25,1) .14s both;animation-play-state:paused}
.banner-visual{position:relative;z-index:1}
.banner-media{position:relative;overflow:hidden;background:#f1ebf2;isolation:isolate}
.banner-photo-plane{position:absolute;inset:-10px;transform:translate3d(var(--pointer-x),var(--pointer-y),0);transition:transform .75s cubic-bezier(.2,.65,.25,1)}
.kinetic-hero .banner-photo-plane>img{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(.84) brightness(1.035);transform:scale(1.035);animation:banner-photo-drift 24s ease-in-out infinite alternate;animation-play-state:paused}
.banner-media-light{position:absolute;inset:0;pointer-events:none;z-index:1;background:radial-gradient(ellipse at var(--light-x) var(--light-y),#fff7 0,#ffffff0a 38%,transparent 70%);opacity:.5;transition:opacity .8s}
.banner-media::after{content:"";position:absolute;inset:-30% -70%;background:linear-gradient(110deg,transparent 39%,#fff3 47%,#fff5 50%,#fff2 53%,transparent 61%);transform:translateX(-32%);animation:banner-light-pass 18s ease-in-out infinite;animation-play-state:paused;pointer-events:none;z-index:1}
.banner-visual:focus-within .banner-media-light,.banner-visual:hover .banner-media-light{opacity:.8}
.kinetic-hero .button-primary{position:relative;box-shadow:0 9px 26px #6038811c;transition:background .3s,box-shadow .3s,transform .3s}
.kinetic-hero .button-primary::after{content:"";position:absolute;inset:-50% -75%;background:linear-gradient(110deg,transparent 40%,#fff3 50%,transparent 60%);transform:translateX(-80%);transition:transform .7s;pointer-events:none}
.kinetic-hero .button-primary:hover::after,.kinetic-hero .button-primary:focus-visible::after{transform:translateX(80%)}
.kinetic-hero .button-primary:hover{box-shadow:0 14px 28px #633d8526;transform:translateY(-2px)}
.kinetic-hero .button-outline{background:#ffffffb3;backdrop-filter:blur(8px)}
.banner-edge{height:2px;display:flex;gap:8px;justify-content:center;width:100%;margin-top:30px;pointer-events:none}
.banner-edge i{height:2px;width:40px;border-radius:5px;background:#d9cbe0}
.banner-edge i:nth-child(2){width:86px;background:linear-gradient(90deg,#ac85bc,#bc9a5e)}
.banner-topics{display:flex;flex-wrap:wrap;gap:10px 20px;margin-top:30px;padding-top:22px;border-top:1px solid #d8cbe28c;max-width:660px}
.banner-topics>a{display:inline-flex;align-items:center;gap:8px;color:#685273;font-size:.875rem;line-height:1.6;text-decoration:none;padding:5px 0;position:relative}
.banner-topics>a>span:first-child{font-family:Space,sans-serif;color:#967445;font-size:.8125rem}
.banner-topic-dot{width:5px;height:5px;border:1px solid #b290bc;border-radius:50%;margin-left:2px;transition:background .2s,transform .2s}
.banner-topics>a:hover .banner-topic-dot,.banner-topics>a:focus-visible .banner-topic-dot{background:#805291;transform:scale(1.35)}
.banner-topics>a::after{content:"";height:1px;background:#9b78ad;position:absolute;bottom:0;left:0;right:0;transform:scaleX(0);transform-origin:left;transition:transform .3s}
.banner-topics>a:hover::after,.banner-topics>a:focus-visible::after{transform:scaleX(1)}

/* Home: a panoramic scene beside a tactile, responsive practice directory. */
.kinetic-hero[data-banner=home]{padding-top:68px;padding-bottom:40px}
.kinetic-hero[data-banner=home] .studio-heading{margin-bottom:42px}
.kinetic-hero[data-banner=home] .hero-stage{gap:22px;align-items:stretch;opacity:1;transform:none}
.kinetic-hero[data-banner=home] .hero-image-card{padding:15px;border-radius:28px;background:linear-gradient(145deg,#fffc,#fcf7ffdd);border-color:#d6c6e3;box-shadow:0 26px 70px #5b386112,inset 0 0 0 1px #fff}
.kinetic-hero[data-banner=home] .panorama-frame{height:365px;border-radius:17px}
.kinetic-hero[data-banner=home] .panorama-frame::after{background:linear-gradient(110deg,transparent 39%,#fff3 47%,#fff5 50%,#fff2 53%,transparent 61%)}
.kinetic-hero[data-banner=home] .panorama-label{z-index:3;left:22px;bottom:22px;padding:13px 18px;max-width:calc(100% - 44px);background:#fffffff0;border-left:2px solid #b79453;backdrop-filter:blur(12px)}
.kinetic-hero[data-banner=home] .image-card-heading{padding:4px 8px 17px}
.kinetic-hero[data-banner=home] .image-card-bottom{padding-top:19px;padding-bottom:8px;gap:12px}
.kinetic-hero[data-banner=home] .hero-focus-card{border-radius:28px;background:linear-gradient(140deg,#fff,#f4ecf9);box-shadow:0 20px 65px #59385e0a}
.kinetic-hero[data-banner=home] .hero-focus-card>a:not(.focus-help){transition:background .35s,padding .35s,border-color .35s}
.kinetic-hero[data-banner=home] .hero-focus-card>a:not(.focus-help):hover{background:#e9def44d;padding-left:10px;border-color:#cdbad9}
.kinetic-hero[data-banner=home] .hero-focus-card>a>.icon{transition:transform .3s}
.kinetic-hero[data-banner=home] .hero-focus-card>a:hover>.icon{transform:translate(2px,-2px)}
.kinetic-hero[data-banner=home] .hero-ribbon{margin-top:27px}

/* Practice banners: each photo and line drawing belongs to its own subject. */
.kinetic-hero.practice-hero{padding-top:34px!important}
.kinetic-hero.practice-hero .breadcrumbs{position:relative;z-index:2;margin-bottom:40px}
.kinetic-hero.practice-hero .detail-hero-grid{grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:5%;align-items:center;padding-bottom:45px}
.kinetic-hero.practice-hero .practice-portrait{height:490px;padding:12px;border-radius:28px;background:linear-gradient(145deg,#fffe,#ede3f380);box-shadow:0 28px 60px #63407314,inset 0 0 0 1px #fff}
.kinetic-hero.practice-hero .banner-media{height:100%;border-radius:18px}
.kinetic-hero.practice-hero .banner-photo-plane>img{border-radius:0}
.kinetic-hero.practice-hero .detail-badge{z-index:3;right:29px;top:29px;background:#fffffff0;box-shadow:0 6px 18px #593a6e09}
.kinetic-hero.practice-hero .portrait-caption{z-index:3;left:29px;right:29px;bottom:29px;background:linear-gradient(115deg,#fffffff5,#faf5fbe8);box-shadow:0 12px 28px #4b365519;border:1px solid #fff;border-left:2px solid #b69a61;padding:20px 22px}
.kinetic-hero.practice-hero .portrait-caption strong{max-width:340px}
.kinetic-hero.practice-hero .chapter-nav{position:relative;z-index:2;background:#fffc;border-radius:15px;box-shadow:0 8px 25px #60378107;margin-bottom:2px}
.kinetic-hero.practice-hero .chapter-nav a{transition:background .3s,color .3s,padding .3s}
.kinetic-hero.practice-hero .chapter-nav a:hover{background:#eee3f5;color:#55316e}
.kinetic-hero.practice-hero .banner-edge{margin-top:22px;margin-bottom:14px}
.kinetic-hero[data-banner=solar]{--banner-violet:#947db0;--banner-gold:#b9944e}
.kinetic-hero[data-banner=solar] .banner-blueprint{right:15%;top:-6%;width:72%;opacity:.7;transform:translate(calc(var(--pointer-x) * -.5),calc(var(--pointer-y) * -.5)) rotate(-7deg)}
.kinetic-hero[data-banner=financing] .banner-blueprint{right:27%;width:64%;opacity:.7}
.kinetic-hero[data-banner=financing] .banner-halo-two{left:30%;bottom:-170px}
.kinetic-hero[data-banner=construction] .banner-blueprint{right:16%;width:70%;opacity:.65}
.kinetic-hero[data-banner=consumer] .banner-blueprint{right:23%;width:67%;opacity:.65;transform:translate(calc(var(--pointer-x) * -.5),calc(var(--pointer-y) * -.5)) rotate(5deg)}

/* Our Firm: a moving courtyard scene, with its message on a still reading panel. */
.kinetic-hero[data-banner=about] .breadcrumbs{position:relative;z-index:2}
.kinetic-hero[data-banner=about] .about-studio-heading{max-width:1140px}
.kinetic-hero[data-banner=about] .about-panorama{border-radius:29px;gap:14px;padding:13px;box-shadow:0 25px 75px #50335410;background:#fffd}
.kinetic-hero[data-banner=about] .banner-media{min-height:390px;border-radius:18px}
.kinetic-hero[data-banner=about] .about-manifesto{border-radius:18px;background:linear-gradient(140deg,#fcf9ff,#f6f0f8 65%,#faf6ed);position:relative;padding:46px 35px}
.kinetic-hero[data-banner=about] .about-manifesto::before{content:"";position:absolute;left:35px;right:35px;top:24px;height:1px;background:linear-gradient(90deg,#bc9b5a77,#b495c344,transparent)}
.kinetic-hero[data-banner=about] .about-image-caption{z-index:3;background:#fffffff0;color:#655271;backdrop-filter:blur(12px);border-left:2px solid #b89a64}
.kinetic-hero[data-banner=about] .banner-blueprint{right:4%;top:-9%;width:84%;opacity:.65}

/* Approach and contact: movement around the message, never behind form entries. */
.kinetic-hero[data-banner=approach] .editorial-grid{gap:7%;align-items:center}
.kinetic-hero[data-banner=approach] .journey-visual{padding-block:28px}
.kinetic-hero[data-banner=approach] .journey-visual>a{background:linear-gradient(110deg,#fff,#f8f1fc);border-color:#d3bfdf;box-shadow:0 14px 38px #613d7510;transition:transform .35s,border-color .35s,box-shadow .35s}
.kinetic-hero[data-banner=approach] .journey-visual>a:hover{transform:translateY(-4px);box-shadow:0 18px 38px #613d751c;border-color:#ae88c1}
.kinetic-hero[data-banner=approach] .journey-visual>a>div>.icon{padding:0;color:#93639f}
.kinetic-hero[data-banner=approach] .journey-orbit{border-color:#bd9a6759}
.kinetic-hero[data-banner=approach] .banner-blueprint{right:9%;top:-8%;opacity:.8}
.review-banner-shell{border:1px solid #e0d0e9;border-radius:30px;padding:44px 40px 24px;margin-bottom:36px;box-shadow:0 22px 65px #56336809}
.review-banner-shell .contact-heading{margin-bottom:0;position:relative;gap:6%;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr)}
.review-banner-shell .contact-assurance{background:linear-gradient(140deg,#fffffff0,#f5edf9e6);border-color:#d9c6e5;box-shadow:0 15px 40px #5633680c}
.review-banner-shell .banner-copy>.button{margin-top:27px}
.review-banner-shell .assurance-icon{position:relative;box-shadow:0 0 0 9px #fbf8fe,0 0 0 10px #decee7}
.review-banner-shell .assurance-icon::after{content:"";position:absolute;inset:-11px;border:1px solid #bc9d6199;border-radius:20px;animation:banner-assurance-breathe 6s ease-in-out infinite;animation-play-state:paused;pointer-events:none}
.review-banner-shell .banner-blueprint{right:3%;width:70%;opacity:.6}
.review-banner-shell .banner-edge{margin-top:34px}

/* JS only schedules decoration; the default markup stays fully readable. */
.banner-running .banner-halo,.banner-running .banner-route,.banner-running .banner-node,
.banner-running .banner-photo-plane>img,.banner-running .banner-media::after,
.banner-running .banner-reveal,.banner-running .banner-visual,
.banner-running .assurance-icon::after{animation-play-state:running}
.kinetic-hero:not(.banner-running) .banner-photo-plane{transition:none}
@keyframes banner-copy-arrive{from{opacity:.45;transform:translateY(13px)}to{opacity:1;transform:translateY(0)}}
@keyframes banner-frame-arrive{from{opacity:.72;transform:translateY(18px) scale(.99)}to{opacity:1;transform:none}}
@keyframes banner-photo-drift{from{transform:scale(1.035) translate(-.35%,0)}to{transform:scale(1.085) translate(.6%,-.5%)}}
@keyframes banner-route-draw{to{stroke-dashoffset:0}}
@keyframes banner-orbit{from{transform:translate(-3%,-2%) scale(.95)}to{transform:translate(6%,5%) scale(1.08)}}
@keyframes banner-node-glow{0%,100%{opacity:.35;transform:scale(.8)}50%{opacity:.7;transform:scale(1.3)}}
@keyframes banner-light-pass{0%,35%{transform:translateX(-32%);opacity:0}45%{opacity:.6}65%,100%{transform:translateX(32%);opacity:0}}
@keyframes banner-assurance-breathe{0%,100%{transform:scale(1);opacity:.5}50%{transform:scale(1.12);opacity:.25}}
@media(max-width:1100px){
 .kinetic-hero.practice-hero .detail-hero-grid{gap:4%;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr)}
 .kinetic-hero.practice-hero .practice-portrait{height:440px}
 .kinetic-hero.practice-hero .portrait-caption{padding:18px;left:23px;right:23px;bottom:23px}
 .banner-topics{gap:8px 15px}
 .banner-topics>a{font-size:.875rem}
 .review-banner-shell{padding:35px 28px 24px}
}
@media(max-width:850px){
 .kinetic-hero.practice-hero .detail-hero-grid{grid-template-columns:1fr;gap:32px}
 .kinetic-hero.practice-hero .practice-portrait{height:410px;max-width:740px;width:100%;margin:auto}
 .kinetic-hero.practice-hero .banner-copy{max-width:730px}
 .kinetic-hero.practice-hero .detail-hero-grid h1{max-width:730px}
 .kinetic-hero.practice-hero .banner-blueprint{right:-16%;width:90%;height:65%;top:5%}
 .review-banner-shell .contact-heading{grid-template-columns:1fr;gap:32px}
 .review-banner-shell .contact-assurance{max-width:none}
 .kinetic-hero[data-banner=about] .about-manifesto{padding:38px 24px}
}
@media(max-width:700px){
 .kinetic-hero[data-banner=home]{padding-top:39px;padding-bottom:30px}
 .kinetic-hero .banner-copy>.eyebrow{letter-spacing:.075em}
 .kinetic-hero[data-banner=home] .studio-heading{margin-bottom:33px}
 .kinetic-hero[data-banner=home] .hero-stage{gap:19px}
 .kinetic-hero[data-banner=home] .hero-image-card{padding:11px;border-radius:21px}
 .kinetic-hero[data-banner=home] .panorama-frame{height:295px;border-radius:13px}
 .kinetic-hero[data-banner=home] .panorama-label{left:15px;bottom:15px;padding:11px 14px;max-width:calc(100% - 30px)}
 .kinetic-hero[data-banner=home] .hero-focus-card{border-radius:21px}
 .kinetic-hero[data-banner=home] .image-card-heading{padding:4px 5px 14px}
 .kinetic-hero[data-banner=home] .image-card-bottom{padding:16px 5px 4px}
 .banner-halo{width:450px;height:450px;opacity:.45}
 .banner-blueprint{width:115%;right:-45%;opacity:.5}
 .kinetic-hero.practice-hero .breadcrumbs{margin-bottom:28px}
 .kinetic-hero.practice-hero .practice-portrait{height:355px;border-radius:23px;padding:10px}
 .kinetic-hero.practice-hero .banner-media{border-radius:14px}
 .kinetic-hero.practice-hero .detail-badge{right:22px;top:22px}
 .kinetic-hero.practice-hero .portrait-caption{left:22px;right:22px;bottom:22px;padding:17px 18px}
 .kinetic-hero.practice-hero .portrait-caption strong{max-width:100%}
 .kinetic-hero.practice-hero .chapter-nav{border-radius:12px}
 .banner-topics{margin-top:24px;padding-top:18px;gap:8px 17px}
 .banner-topics>a{font-size:.875rem}
 .kinetic-hero[data-banner=about] .about-panorama{padding:11px;border-radius:23px;gap:12px}
 .kinetic-hero[data-banner=about] .banner-media{height:290px;min-height:0;border-radius:14px;grid-row:1}
 .kinetic-hero[data-banner=about] .about-image-caption{position:static;grid-row:2;max-width:calc(100% - 16px);margin:0 8px;padding:8px 11px}
 .kinetic-hero[data-banner=about] .about-manifesto{grid-row:3;padding:35px 24px 29px;border-radius:14px}
 .kinetic-hero[data-banner=about] .about-manifesto::before{left:24px;right:24px;top:17px}
 .kinetic-hero[data-banner=approach] .journey-visual{padding:16px 0}
 .review-banner-shell{padding:30px 21px 22px;border-radius:22px;margin-bottom:27px}
 .review-banner-shell .contact-heading h1{font-size:clamp(2.6rem,10vw,4rem)}
 .review-banner-shell .contact-assurance{padding:25px 21px}
 .review-banner-shell .banner-copy>.button{width:100%;font-size:1rem}
 .banner-edge{margin-top:25px}
}
@media(max-width:380px){
 .kinetic-hero[data-banner=home] .panorama-frame{height:265px}
 .kinetic-hero.practice-hero .practice-portrait{height:360px}
 .kinetic-hero.practice-hero .portrait-caption{padding:14px;left:20px;right:20px;bottom:20px}
 .banner-topics{gap:7px 14px}
 .review-banner-shell{padding-inline:17px}
 .review-banner-shell .contact-assurance{padding:23px 17px}
}
html.motion-off .kinetic-hero *,html.motion-off .kinetic-hero *::before,html.motion-off .kinetic-hero *::after{animation:none!important;transition:none!important}
html.motion-off .kinetic-hero .banner-reveal,html.motion-off .kinetic-hero .banner-visual{opacity:1;transform:none}
html.motion-off .kinetic-hero .banner-route{stroke-dashoffset:0}
html.motion-off .kinetic-hero .banner-media::after{display:none}
html.motion-off .kinetic-hero .banner-photo-plane,html.motion-off .kinetic-hero .banner-blueprint{transform:none}
@media(prefers-reduced-motion:reduce){
 .kinetic-hero *,.kinetic-hero *::before,.kinetic-hero *::after{animation:none!important;transition:none!important}
 .kinetic-hero .banner-reveal,.kinetic-hero .banner-visual{opacity:1;transform:none}
 .kinetic-hero .banner-route{stroke-dashoffset:0}
 .kinetic-hero .banner-media::after{display:none}
 .kinetic-hero .banner-photo-plane,.kinetic-hero .banner-blueprint{transform:none}
}
@media print{
 .banner-atmosphere,.banner-media-light,.banner-edge{display:none}
 .kinetic-hero{background:#fff;overflow:visible;box-shadow:none}
 .kinetic-hero *,.kinetic-hero *::before,.kinetic-hero *::after{animation:none!important;transition:none!important}
 .kinetic-hero .banner-reveal,.kinetic-hero .banner-visual{opacity:1;transform:none}
 .kinetic-hero .banner-media::after{display:none}
 .kinetic-hero .banner-title em{background:none;color:#333}
}
