html{overflow-x:hidden}body{overflow-x:hidden}.wrap{width:min(1440px,calc(100% - 40px));margin:auto}section.block{padding-block:clamp(70px,7vw,112px)}.pm-visual-placeholder{position:absolute;inset:0;background:radial-gradient(circle at 22% 20%,rgba(255,138,0,.32),transparent 25%),radial-gradient(circle at 78% 70%,rgba(122,31,255,.35),transparent 30%),linear-gradient(135deg,#0b1626,#263a55)}.pm-capability-hub{background:#f5f7fa;border-top:1px solid #e3e8ee;border-bottom:1px solid #e3e8ee;padding:clamp(60px,7vw,100px) 0}.pm-capability-hub h2{font-family:var(--disp);font-weight:800;letter-spacing:-.035em;line-height:.98;color:#0b1626;font-size:clamp(2.3rem,5vw,4.7rem);max-width:13ch;margin:0}.pm-kicker{font:700 .68rem/1 var(--mono);letter-spacing:.2em;text-transform:uppercase;color:#e65a16;margin-bottom:16px}.pm-intro{max-width:62ch;color:#5f6b7a;line-height:1.65;margin:18px 0 0}.pm-uv-feature{display:grid;grid-template-columns:.72fr 1.28fr;min-height:360px;margin:42px 0 30px;border-radius:28px;overflow:hidden;background:#0b1626;box-shadow:0 24px 60px rgba(8,17,31,.13)}.pm-uv-copy{padding:clamp(28px,4vw,54px);display:flex;flex-direction:column;justify-content:center;color:#fff}.pm-uv-copy h3{font-family:var(--disp);font-size:clamp(2rem,4vw,4rem);line-height:.98;letter-spacing:-.035em;margin:14px 0}.pm-uv-copy p{color:#cbd3dd;line-height:1.65;max-width:45ch}.pm-uv-photo{min-height:360px}.pm-uv-photo img{width:100%;height:100%;object-fit:cover;display:block}.pm-workgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;margin-top:28px}.pm-workcard{background:#fff;border:1px solid #e0e5eb;border-radius:20px;overflow:hidden;box-shadow:0 10px 30px rgba(8,17,31,.06);transition:.25s}.pm-workcard:hover{transform:translateY(-5px);box-shadow:0 18px 40px rgba(8,17,31,.11)}.pm-workcard .pm-photo{aspect-ratio:4/3;overflow:hidden;background:#e9edf2}.pm-workcard img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .55s}.pm-workcard:hover img{transform:scale(1.045)}.pm-workcard .pm-copy{padding:17px 18px 20px}.pm-workcard h3{margin:4px 0 7px;color:#101b2b;font-size:1.05rem}.pm-workcard p{margin:0;color:#687484;font-size:.88rem;line-height:1.5}.pm-card-no{font:700 .62rem/1 var(--mono);letter-spacing:.14em;color:#e65a16}.pm-capability-head{display:flex;align-items:end;justify-content:space-between;gap:28px;margin-top:58px}.pm-capability-head h3{font-family:var(--disp);font-weight:800;color:#0b1626;font-size:clamp(1.9rem,3.4vw,3rem);letter-spacing:-.03em;margin:0}.pm-capability-head p{color:#657182;max-width:48ch;line-height:1.55;margin:0}.pm-service-list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-top:24px}.pm-service-pill{display:block;text-decoration:none;border:1px solid #dde3ea;border-radius:18px;background:#fff;overflow:hidden;box-shadow:0 8px 24px rgba(8,17,31,.05);transition:.25s}.pm-service-pill:hover{transform:translateY(-4px);box-shadow:0 16px 34px rgba(8,17,31,.1)}.pm-service-pill img{width:100%;height:155px;display:block;object-fit:cover}.pm-service-pill span{display:block;color:#172235;font-weight:800;padding:14px 15px 5px;font-size:.98rem}.pm-service-pill small{display:block;color:#6c7887;font-size:.76rem;line-height:1.45;padding:0 15px 16px}.pm-portfolio-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px;margin-top:30px}.pm-portfolio-card{margin:0;position:relative;border-radius:18px;overflow:hidden;background:#0b1626;aspect-ratio:4/3}.pm-portfolio-card img{width:100%;height:100%;display:block;object-fit:cover;transition:.6s}.pm-portfolio-card:hover img{transform:scale(1.05)}.pm-portfolio-card figcaption{position:absolute;left:0;right:0;bottom:0;padding:28px 15px 14px;color:#fff;background:linear-gradient(180deg,transparent,rgba(8,17,31,.88));display:flex;flex-direction:column;gap:3px}.pm-portfolio-card figcaption span{font:700 .58rem/1 var(--mono);letter-spacing:.16em;color:#9fc8ff}.pm-portfolio-card figcaption strong{font-size:.95rem}@media(max-width:980px){.navlinks,.nav-cta{display:none!important}.menu-btn{display:inline-flex;align-items:center;justify-content:center}.pm-workgrid{grid-template-columns:repeat(2,minmax(0,1fr))}.pm-service-list{grid-template-columns:repeat(3,minmax(0,1fr))}.pm-uv-feature{grid-template-columns:1fr}.pm-uv-photo{min-height:300px}.svc-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.proj-grid{grid-template-columns:1fr}.proj.wide{grid-column:auto}.pm-portfolio-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:700px){.wrap{width:calc(100% - 28px)}section.block{padding-block:56px}.svc-grid{grid-template-columns:1fr}.pm-workgrid{grid-template-columns:1fr}.pm-capability-head{display:block}.pm-capability-head p{margin-top:12px}.pm-service-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.pm-service-pill img{height:120px}.pm-portfolio-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.pm-portfolio-card{border-radius:14px}.pm-portfolio-card figcaption{padding:26px 10px 10px}.pm-portfolio-card figcaption strong{font-size:.8rem}.nums{grid-template-columns:1fr 1fr!important}.team-grid,.prod-grid,.infra-grid{grid-template-columns:1fr!important}}@media(max-width:430px){.pm-service-list{grid-template-columns:1fr}.pm-service-pill img{height:180px}.pm-portfolio-grid{grid-template-columns:1fr}.pm-portfolio-card{aspect-ratio:16/10}.nums{grid-template-columns:1fr!important}.caps{grid-template-columns:1fr}}.pm-added-photo{width:100%;height:100%;display:block;object-fit:cover}
.pm-faq{margin-top:26px;border-top:1px solid #e0e5eb}.pm-faq-item{border-bottom:1px solid #e0e5eb}.pm-faq-item summary{cursor:pointer;list-style:none;padding:20px 44px 20px 0;position:relative;font-family:var(--disp);font-weight:700;color:#101b2b;font-size:clamp(1rem,1.6vw,1.16rem);line-height:1.4}.pm-faq-item summary::-webkit-details-marker{display:none}.pm-faq-item summary::after{content:"+";position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:1.5rem;color:#e65a16;font-weight:400;line-height:1}.pm-faq-item[open] summary::after{content:"\2212"}.pm-faq-item summary:focus-visible{outline:2px solid #7A1FFF;outline-offset:2px;border-radius:4px}.pm-faq-a{padding:0 44px 22px 0}.pm-faq-a p{margin:0;color:#5f6b7a;line-height:1.7;max-width:78ch}.pm-vidgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:34px}.pm-vid{margin:0;background:#0F1E32;border:1px solid rgba(247,248,250,.1);border-radius:18px;overflow:hidden}.pm-vid video{width:100%;aspect-ratio:16/10;object-fit:cover;display:block;background:#0A1220}.pm-vid figcaption{padding:15px 17px 18px;display:flex;flex-direction:column;gap:5px}.pm-vid figcaption strong{color:#EEF2F7;font-size:.98rem;font-family:var(--disp);letter-spacing:-.01em}.pm-vid figcaption span{color:#94A1B2;font-size:.85rem;line-height:1.5}@media(max-width:980px){.pm-vidgrid{grid-template-columns:1fr;gap:16px}}.pm-fill-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;z-index:0}
/* Safari-safe media boxes: absolutely-positioned photos need a sized parent */
.proj .shot{aspect-ratio:16/10;min-height:220px}
.shot{overflow:hidden}
.shot>img,.pm-fill-photo,.pm-added-photo{max-width:100%;max-height:100%}
@supports not (aspect-ratio:1/1){.proj .shot{height:300px}}
@media(max-width:700px){.proj .shot{min-height:180px}}
/* no transform fighting a long transition while scrolling */
.shot img{transition:transform .45s ease}
.proj .shot{aspect-ratio:4/3}
.proj.wide .shot{aspect-ratio:21/9}
@media(max-width:700px){.proj .shot,.proj.wide .shot{aspect-ratio:16/10}}

/* hero media must sit BEHIND the darkening veil, else it washes out the nav */
.page-hero .pm-fill-photo{z-index:-3}
.page-hero .photo-veil{z-index:-2}
.pm-hero-vector{object-fit:cover;object-position:center}
/* guarantee the sticky nav stays readable over any hero media */
.page-hero::before{content:'';position:absolute;left:0;right:0;top:0;height:190px;z-index:-1;
  pointer-events:none;background:linear-gradient(180deg,rgba(8,17,31,.92),rgba(8,17,31,.55) 55%,rgba(8,17,31,0))}
/* stronger, consistent darkening so hero copy always reads over busy photos */
.page-hero .photo-veil{background:linear-gradient(90deg,rgba(8,17,31,.95) 0%,rgba(8,17,31,.86) 45%,rgba(8,17,31,.70) 100%),linear-gradient(180deg,rgba(8,17,31,.55),rgba(8,17,31,.80))}
.page-hero .pm-fill-photo{filter:saturate(.8) contrast(.95) brightness(.75)}

/* ============ CONTRAST FIXES (WCAG AA) ============ */
/* 1. Light-background sections were inheriting light text -> invisible */
.pm-realwork,
.pm-realwork .wrap,
.pm-realwork .pm-uv-copy{color:#101b2b}
.pm-realwork h1,.pm-realwork h2,.pm-realwork h3,.pm-realwork h4,
.pm-realwork .sec-title,.pm-realwork strong,.pm-realwork b{color:#0b1626}
.pm-realwork p,.pm-realwork li,.pm-realwork span:not([class*="g"]){color:#4a5666}
.pm-realwork small,.pm-realwork .sub{color:#5a6472}

/* 2. Service pills sitting on white were white-on-white */
.pm-service-pill{color:#101b2b}
.pm-service-pill small,.pm-service-pill span{color:#4a5666}
/* keep them light when they sit on a dark panel */
.block:not(.light) .pm-service-pill,
.pm-capability-hub:not(.light) .pm-service-pill{color:#EEF2F7}
.block:not(.light) .pm-service-pill small,
.block:not(.light) .pm-service-pill span{color:#9AA7B8}

/* 3. Muted text on dark: 3.49:1 -> 7.8:1 */
.ft .k,.ft h5,.ft span,.ft a,.ft small,
.block:not(.light) .k,.block:not(.light) .ix,.block:not(.light) .sd-ix,
.page-hero span,.page-hero .k,.form-tiny,.form-tiny a{color:#9AA7B8}

/* 4. Muted text on light: 3.6:1 -> 6.0:1 */
.light small,.light .sub,.light .muted,small.muted,
.pm-card small,.pm-service-pill small{color:#5A6472}

/* 5. Accent orange on light backgrounds: 3.35:1 -> 5.6:1 */
.light .pm-kicker,.pm-kicker,.pm-card-no,
.light a.pm-link,.pm-realwork .pm-kicker{color:#B34309}

/* never override the intentional spectrum gradient text */
.g,[class*="grad"]{color:inherit}

/* --- dark panels that sit INSIDE light sections need light text --- */
.pm-uv-feature,.pm-uv-feature .pm-uv-copy{color:#EEF2F7}
.pm-uv-feature h1,.pm-uv-feature h2,.pm-uv-feature h3,.pm-uv-feature h4,
.pm-realwork .pm-uv-feature h2,.pm-realwork .pm-uv-feature h3{color:#F4F6F9}
.pm-uv-feature p,.pm-realwork .pm-uv-feature p,.pm-uv-feature li{color:#9AA7B8}
.pm-uv-feature small,.pm-uv-feature .pm-kicker{color:#B9C4D2}

.svc{color:#EEF2F7}
.svc h2,.svc h3,.svc h4,.light .svc h3{color:#F4F6F9}
.svc p,.svc li,.light .svc p{color:#9AA7B8}
.svc small{color:#9AA7B8}

/* remaining muted greys on dark: index numbers + breadcrumb */
.ix,.sd-ix,.crumb,.crumb a,.crumb span,
.block:not(.light) .ix,.block:not(.light) .sd-ix{color:#9AA7B8}
.crumb a:hover{color:#F4F6F9}

/* --- .process-visual is a light section that was inheriting dark-theme text --- */
.process-visual{color:#101b2b}
.process-visual h1,.process-visual h2,.process-visual h3,.process-visual h4,
.process-visual .sec-title{color:#0b1626}
.process-visual p,.process-visual .mut,.process-visual li{color:#4A5666}
.process-visual .eyebrow{color:#5A6472}
.process-visual .vector-step h3{color:#0b1626}
.process-visual .vector-step p{color:#4A5666}

/* index numerals: raise specificity so the muted default cannot win */
span.ix,span.sd-ix,.svc .ix,.sd .sd-ix{color:#9AA7B8 !important}

/* --- final contrast pass --- */
.hero-foot .spec span,.hero-foot .scrollcue span,.hero-foot span,.pct{color:#9AA7B8}
/* orange links on light backgrounds */
.pm-faq a,#faq .wrap>p a{color:#B34309}
.pm-faq a:hover,#faq .wrap>p a:hover{color:#8f3407}
#pre .pct,.pre .pct{color:#9AA7B8}

/* --- form field alignment: paired fields rendered at different heights,
       so the following label collided with the taller one --- */
form .row2{align-items:start}
form .field{align-content:start}
form .field label{display:block;margin:0 0 7px;line-height:1.45;min-height:15px}
form input:not([type=checkbox]):not([type=radio]),
form select{box-sizing:border-box;height:48px;line-height:1.2}
form textarea{box-sizing:border-box;min-height:118px;line-height:1.5}
form .field:last-of-type{margin-bottom:4px}
form button[type=submit],form .btn{margin-top:8px}
@media(max-width:700px){
  form .row2{grid-template-columns:1fr;gap:0}
  form input:not([type=checkbox]),form select{height:46px}
}
form.form,form.pmform{row-gap:22px}
