
  @font-face { font-family: "FiraGO"; src: url("../fonts/firago-georgian.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }

  @font-face { font-family:"TBC Contractica Caps"; src:url("../fonts/TBCContracticaCAPS-Light.woff2") format("woff2"); font-weight:300; font-display:swap; ascent-override:98%; descent-override:22%; }
  @font-face { font-family:"TBC Contractica Caps"; src:url("../fonts/TBCContracticaCAPS-Regular.woff2") format("woff2"); font-weight:400; font-display:swap; ascent-override:98%; descent-override:22%; }
  @font-face { font-family:"TBC Contractica Caps"; src:url("../fonts/TBCContracticaCAPS-Medium.woff2") format("woff2"); font-weight:500; font-display:swap; ascent-override:98%; descent-override:22%; }
  @font-face { font-family:"TBC Contractica Caps"; src:url("../fonts/TBCContracticaCAPS-Bold.woff2") format("woff2"); font-weight:700; font-display:swap; ascent-override:98%; descent-override:22%; }
  :root{
    --black:#141414; --white:#fff; --navy:#0c273c; --ink:#0c273c; --ink-2:#42525e; --muted:#7d8a96;
    --blue:#4083c2; --blue-light:#abcee1; --blue-lightest:#e6f0f7;
    --gray:#e6e7e8; --line:rgba(12,39,60,.12); --line-soft:rgba(12,39,60,.07);
    --paper:#fff; --paper-2:#f5f7f9; --ok:#3dbe78;
    --h:80px; --h-sm:60px; --wrap:1500px; --gut:40px; --r:14px;
    --ease:cubic-bezier(.4,0,.2,1); --ease2:cubic-bezier(.65,0,.35,1);
    --glass:saturate(150%) blur(18px);
    --font:"Noto Sans Georgian",system-ui,-apple-system,sans-serif; --disp:"TBC Contractica Caps",var(--font);
  }
  *{margin:0;padding:0;box-sizing:border-box;}
  html,body{overflow-x:hidden;overflow-x:clip;max-width:100%;}
  body{font-family:var(--font);color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;}
  a{color:inherit;text-decoration:none;} ul{list-style:none;} img{display:block;max-width:100%;}
  button{font-family:inherit;cursor:pointer;border:0;background:none;color:inherit;}
  ::selection{background:var(--blue-light);color:var(--navy);}
  .wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--gut);}
  @media(max-width:640px){ :root{ --gut:22px; } }
  .elabel{display:inline-flex;align-items:center;gap:10px;font-size:13px;font-weight:500;color:var(--muted);letter-spacing:.01em;}
  .elabel::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--blue);flex:none;}
  .blob{position:absolute;border-radius:50%;filter:blur(80px);opacity:.5;z-index:-1;pointer-events:none;}

  /* ===== header (overlaps hero, glass on scroll) ===== */
  .site-header{position:fixed;top:0;left:0;right:0;z-index:100;height:var(--h);color:#fff;font-family:var(--disp);transition:height .45s var(--ease),color .45s var(--ease);}
  .site-header::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:rgba(255,255,255,.72);backdrop-filter:var(--glass);-webkit-backdrop-filter:var(--glass);border-bottom:1px solid var(--line-soft);opacity:0;transition:opacity .45s var(--ease);}
  .site-header.scrolled{height:var(--h-sm);color:var(--navy);} .site-header.scrolled::after{opacity:1;}
  .bar{height:100%;max-width:var(--wrap);margin:0 auto;padding:0 var(--gut);display:flex;align-items:center;gap:38px;}
  .logo__img{height:50px;width:auto;display:block;filter:brightness(0) invert(1);transition:height .45s var(--ease),filter .45s var(--ease);}
  .scrolled .logo__img{height:44px;filter:none;}
  .nav{margin-right:auto;margin-left:clamp(28px,4vw,68px);} .nav ul{display:flex;align-items:center;gap:clamp(24px,2vw,32px);}
  .nav a{font-size:14px;font-weight:500;opacity:.88;transition:opacity .25s var(--ease),font-size .45s var(--ease);}
  .nav a:hover,.nav a[aria-current="page"]{opacity:1;} .scrolled .nav a{font-size:13px;}
  .hbtn{display:inline-flex;align-items:center;gap:8px;padding:11px 22px;border:1px solid currentColor;border-radius:11px;font-size:14px;font-weight:500;white-space:nowrap;transition:padding .45s var(--ease),background-color .3s var(--ease),color .3s var(--ease),border-color .3s var(--ease);}
  .hbtn svg{width:13px;height:13px;} .hbtn:hover{background:rgba(255,255,255,.12);}
  .scrolled .hbtn{background:var(--blue-light);border-color:var(--blue-light);color:var(--navy);} .scrolled .hbtn:hover{background:#9bc6dd;border-color:#9bc6dd;}
  .lang{display:flex;align-items:center;gap:7px;font-size:14px;font-weight:500;}
  .lang button{opacity:.5;} .lang button[aria-pressed="true"]{opacity:1;} .lang .sep{opacity:.4;}
  .burger{display:none;width:38px;height:38px;} .burger span{display:block;width:20px;height:1.5px;margin:5px auto;background:currentColor;transition:.3s var(--ease);}
  body.open .burger span:nth-child(1){transform:translateY(6.5px) rotate(45deg);} body.open .burger span:nth-child(2){opacity:0;} body.open .burger span:nth-child(3){transform:translateY(-6.5px) rotate(-45deg);}
  @media(max-width:1000px){ .bar{gap:16px;} .nav{position:fixed;inset:var(--h) 0 auto 0;margin:0;background:rgba(255,255,255,.97);backdrop-filter:blur(14px);transform:translateY(-12px);opacity:0;visibility:hidden;transition:.3s var(--ease);} body.open .nav{transform:none;opacity:1;visibility:visible;} .nav ul{flex-direction:column;gap:0;padding:8px var(--gut) 18px;} .nav a{color:var(--navy);padding:14px 0;width:100%;border-bottom:1px solid var(--line);font-size:16px;} .lang{margin-left:auto;} .hbtn{display:none;} .burger{display:block;} }

  /* ===== hero banner ===== */
  .hero{position:relative;min-height:clamp(540px,80vh,780px);display:flex;align-items:flex-end;overflow:hidden;color:#fff;}
  .hero__media{position:absolute;inset:0;z-index:-2;overflow:hidden;}
  .hero__media img{width:100%;height:118%;object-fit:cover;transform:translateY(0) scale(1.06);will-change:transform;}
  .hero::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,rgba(8,26,41,.6) 0%,rgba(8,26,41,.08) 30%,rgba(8,26,41,.3) 60%,rgba(8,26,41,.9) 100%);}
  .hero__top{position:absolute;top:calc(var(--h) + 16px);left:0;right:0;}
  .crumbs{display:flex;align-items:center;gap:9px;font-size:12.5px;color:rgba(255,255,255,.82);}
  .crumbs a{transition:color .2s var(--ease);} .crumbs a:hover{color:#fff;} .crumbs svg{width:14px;height:14px;opacity:.6;}
  .crumbs .cur{color:#fff;}
  .hero__in{position:relative;width:100%;padding:0 0 clamp(34px,5vh,58px);}
  .hero__panel{display:block;max-width:min(1040px,100%);}
  .hero__id{display:flex;align-items:center;gap:clamp(16px,1.9vw,28px);}
  .hero__idtx{min-width:0;}
  .hero__logo{width:clamp(66px,7vw,90px);height:clamp(66px,7vw,90px);border-radius:50%;overflow:hidden;background:#fff;display:inline-flex;flex:none;box-shadow:0 14px 34px rgba(8,26,41,.45);}
  .hero__logo img{width:100%;height:100%;object-fit:cover;}
  .hero__title{font-family:var(--disp);font-weight:600;font-size:clamp(34px,4.4vw,54px);line-height:1.02;letter-spacing:-.012em;text-shadow:0 2px 26px rgba(8,26,41,.6);}
  .hero__addr{margin-top:12px;display:inline-flex;align-items:flex-start;gap:9px;font-size:14.5px;color:rgba(255,255,255,.92);text-shadow:0 1px 12px rgba(8,26,41,.55);}
  .hero__addr svg{width:17px;height:17px;color:var(--blue-light);flex:none;margin-top:1px;}
  /* hero stat strip — hairline top rule + transparent dividers between items */
  .hero__stats{margin-top:clamp(24px,3.4vh,40px);padding-top:clamp(18px,2.2vh,26px);display:flex;flex-wrap:wrap;
    border-top:1px solid rgba(255,255,255,.22);}
  .hstat{position:relative;display:flex;flex-direction:column;gap:8px;padding:0 clamp(20px,2.6vw,38px);min-width:0;}
  .hstat:first-child{padding-left:0;}
  .hstat+.hstat::before{content:"";position:absolute;left:0;top:1px;bottom:1px;width:1px;
    background:linear-gradient(180deg,rgba(255,255,255,0),rgba(255,255,255,.34) 45%,rgba(255,255,255,0));}
  .hstat__k{font-size:13px;color:rgba(255,255,255,.62);text-shadow:0 1px 10px rgba(8,26,41,.5);}
  .hstat__v{font-family:var(--disp);font-weight:600;font-size:clamp(15px,1.4vw,19px);line-height:1.2;color:#fff;white-space:nowrap;text-shadow:0 1px 12px rgba(8,26,41,.55);}
  .hlinks{display:flex;flex-wrap:wrap;gap:8px;}
  .hlinks a{width:34px;height:34px;flex:none;display:grid;place-items:center;border-radius:9px;color:#fff;
    background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.24);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
    transition:background .22s var(--ease),border-color .22s var(--ease),transform .22s var(--ease);}
  .hlinks a:hover{background:var(--blue);border-color:var(--blue);transform:translateY(-2px);}
  .hlinks a svg{width:16px;height:16px;}
  .hstat--co{justify-content:flex-end;}
  .hstat__v--live{display:inline-flex;align-items:center;gap:10px;}
  .hstat__v--live::before{content:"";width:8px;height:8px;border-radius:50%;flex:none;background:var(--ok);box-shadow:0 0 0 4px rgba(61,190,120,.25);}
  @media(max-width:820px){
    .hero__stats{display:grid;grid-template-columns:1fr 1fr;gap:20px 0;}
    .hstat{padding:0 0 0 clamp(16px,4vw,26px);}
    .hstat:nth-child(odd){padding-left:0;}
    .hstat+.hstat::before{display:none;}
    .hstat:nth-child(even)::before{display:block;}
    .hstat__v{white-space:normal;}
  }
  @media(max-width:420px){ .hero__id{align-items:flex-start;} }
  .hero__cue{position:absolute;right:var(--gut);bottom:clamp(34px,5vh,58px);width:30px;height:48px;border:1.5px solid rgba(255,255,255,.4);border-radius:16px;display:none;}
  @media(min-width:1000px){ .hero__cue{display:block;} }
  .hero__cue::after{content:"";position:absolute;left:50%;top:9px;width:4px;height:9px;margin-left:-2px;border-radius:2px;background:#fff;animation:cue 1.9s var(--ease2) infinite;}
  @keyframes cue{0%{opacity:0;transform:translateY(0);}30%{opacity:1;}70%{opacity:1;transform:translateY(16px);}100%{opacity:0;transform:translateY(20px);}}

  main{position:relative;overflow-x:clip;}

  /* ===== gallery divider (4 blocks) ===== */
  .gsec{margin-top:clamp(32px,4vw,52px);}
  .ggrid4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;} .ggrid4>*{min-width:0;}
  @media(max-width:860px){ .ggrid4{grid-template-columns:repeat(2,1fr);} }
  .gtile{position:relative;aspect-ratio:3/4;border-radius:var(--r);overflow:hidden;background:var(--gray);cursor:zoom-in;display:block;}
  .gtile img{width:100%;height:100%;object-fit:cover;transition:transform .6s var(--ease);}
  .gtile:hover img{transform:scale(1.06);}
  .gtile__n{position:absolute;left:14px;bottom:12px;z-index:2;font-family:var(--disp);font-size:11px;letter-spacing:.16em;color:#fff;text-shadow:0 1px 8px rgba(8,26,41,.6);}
  .gtile--more::after{content:"";position:absolute;inset:0;background:linear-gradient(165deg,rgba(12,39,60,.55),rgba(12,39,60,.85));}
  .gmore{position:absolute;inset:0;z-index:2;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:#fff;text-align:center;padding:14px;}
  .gmore__ic{width:50px;height:50px;border-radius:50%;border:1px solid rgba(255,255,255,.5);display:grid;place-items:center;transition:background-color .25s var(--ease);}
  .gmore__ic svg{width:22px;height:22px;}
  .gtile--more:hover .gmore__ic{background:rgba(255,255,255,.18);}
  .gmore b{font-family:var(--disp);font-weight:500;font-size:15px;}
  .gmore em{font-style:normal;font-size:12px;opacity:.82;}

  .price{border-radius:16px;overflow:hidden;position:sticky;top:calc(var(--h-sm) + 18px);background:#fff;border:1px solid var(--line);box-shadow:0 30px 70px -34px rgba(8,26,41,.5),0 1px 3px rgba(8,26,41,.05);}
  .price__head{padding:24px 26px 20px;background:linear-gradient(180deg,#e9f2f9,#fbfdfe);border-bottom:1px solid var(--line);}
  .price__body{padding:22px 26px 26px;}
  .price__note{margin-top:10px;font-size:12px;line-height:1.5;color:var(--muted);}
  .price .cta--blue{box-shadow:0 14px 28px -12px rgba(64,131,194,.7);}
  .price__top{display:flex;align-items:center;justify-content:space-between;}
  .price__k{font-size:13px;color:var(--muted);}
  .price .cur{display:inline-flex;background:var(--paper-2);border:1px solid var(--line);border-radius:999px;padding:3px;gap:2px;}
  .price .cur button{padding:6px 15px;border-radius:999px;font-size:12.5px;font-weight:600;color:var(--muted);line-height:1;transition:background-color .2s var(--ease),color .2s var(--ease);}
  .price .cur button[aria-pressed="true"]{background:var(--navy);color:#fff;}
  .price__v{margin-top:7px;font-family:var(--disp);font-weight:600;font-size:clamp(34px,3.4vw,40px);line-height:1;letter-spacing:-.01em;color:var(--navy);}
  .price__rows{margin:0;}
  .prow{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:13px 0;border-bottom:1px solid var(--line);font-size:14px;}
  .prow:last-child{border-bottom:0;}
  .prow b{font-weight:600;} .prow span:first-child{color:var(--muted);}
  .prow__l{display:inline-flex;align-items:center;gap:9px;} .prow__l svg{width:16px;height:16px;color:var(--blue);flex:none;}
  .pbtns{display:flex;flex-direction:column;gap:10px;margin-top:14px;}
  .cta{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:14px;border-radius:11px;font-size:14.5px;font-weight:600;transition:transform .25s var(--ease),background-color .2s var(--ease),color .2s var(--ease);}
  .cta svg{width:16px;height:16px;}
  .cta--blue{background:var(--blue);color:#fff;} .cta--blue:hover{background:#356fa8;transform:translateY(-2px);}
  .cta--ghost{border:1px solid var(--navy);color:var(--navy);} .cta--ghost:hover{background:var(--navy);color:#fff;transform:translateY(-2px);}
  .price__mort{margin-top:16px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 15px;border-radius:11px;background:var(--blue-lightest);transition:background-color .2s var(--ease);}
  .price__mort:hover{background:#d8e8f3;}
  .price__mort__k{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:600;color:var(--navy);}
  .price__mort__k svg{width:16px;height:16px;color:var(--blue);}
  .price__mort__v{font-family:var(--disp);font-weight:600;font-size:18px;color:var(--navy);white-space:nowrap;}
  .price__mort__v small{font-size:.58em;color:var(--muted);font-weight:400;}
  /* TBC bank logo used as the mortgage-row icon (no plate) */
  .price__bank{display:inline-flex;flex:none;line-height:0;}
  .price__bank img{height:20px;width:auto;display:block;}

  /* ---- price card: dark navy theme ---- */
  .price{background:linear-gradient(180deg,#163a59 0%,#0e2c45 55%,#0a2236 100%);border:1px solid rgba(255,255,255,.09);box-shadow:0 34px 80px -34px rgba(8,20,32,.75),inset 0 1px 0 rgba(255,255,255,.06);}
  .price__head{background:transparent;border-bottom:1px solid rgba(255,255,255,.1);}
  .price__k{color:rgba(255,255,255,.6);}
  .price__v{color:#fff;}
  .price__note{color:rgba(255,255,255,.5);}
  .price .cur{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.16);}
  .price .cur button{color:rgba(255,255,255,.55);}
  .price .cur button[aria-pressed="true"]{background:var(--blue-light);color:var(--navy);}
  .price .prow{border-bottom-color:rgba(255,255,255,.1);}
  .price .prow b{color:#fff;}
  .price .prow span:first-child{color:rgba(255,255,255,.58);}
  .price .prow__l svg{color:var(--blue-light);}
  .price__mort{background:rgba(255,255,255,.07);}
  .price__mort:hover{background:rgba(255,255,255,.13);}
  .price__mort__k{color:#fff;} .price__mort__k svg{color:var(--blue-light);}
  .price__mort__v{color:#fff;} .price__mort__v small{color:rgba(255,255,255,.55);}
  .price .cta--ghost{border-color:rgba(255,255,255,.28);color:#fff;}
  .price .cta--ghost:hover{background:#fff;color:var(--navy);border-color:#fff;}

  /* ===== GREA involvement (inline list, matches infrastructure) ===== */
  .involve2{margin-top:28px;padding-top:22px;border-top:1px solid var(--line);}
  .invlist{margin-top:16px;display:grid;grid-template-columns:1fr 1fr;gap:12px;}
  @media(max-width:520px){ .invlist{grid-template-columns:1fr;} }
  .invlist li{display:flex;align-items:center;gap:12px;padding:15px 16px;border:1px solid var(--line);border-radius:12px;background:var(--paper-2);font-size:14.5px;transition:transform .25s var(--ease),border-color .25s var(--ease);}
  .invlist li:hover{transform:translateY(-3px);border-color:var(--blue-light);}
  .invlist__ic{width:26px;height:26px;border-radius:50%;background:var(--blue-lightest);color:var(--blue);display:grid;place-items:center;flex:none;}
  .invlist__ic svg{width:14px;height:14px;}

  /* ===== sections ===== */
  .sec{padding:clamp(32px,4vw,54px) 0 0;}
  .sec__h{font-family:var(--disp);font-weight:600;font-size:clamp(22px,2.4vw,30px);margin-top:12px;letter-spacing:-.01em;}
  .two{display:grid;grid-template-columns:1fr 400px;gap:36px;align-items:start;}
  .two>*{min-width:0;}
  @media(max-width:1040px){ .two{grid-template-columns:1fr;} }
  .prose p{font-size:16.5px;line-height:1.85;color:var(--ink-2);max-width:680px;} .prose p+p{margin-top:16px;}
  .prose .lead{font-size:clamp(18px,1.5vw,22px);line-height:1.55;color:var(--ink);}
  .dl{margin-top:28px;display:inline-flex;align-items:center;gap:10px;padding:14px 24px;border:1px solid var(--navy);border-radius:11px;font-size:14px;font-weight:600;transition:.25s var(--ease);}
  .dl:hover{background:var(--navy);color:#fff;transform:translateY(-2px);} .dl svg{width:16px;height:16px;}

  /* specs */
  .specgrid{display:grid;grid-template-columns:1fr 1fr;gap:0 40px;}
  @media(max-width:560px){ .specgrid{grid-template-columns:1fr;} }
  .spec{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 0;border-bottom:1px solid var(--line);font-size:14.5px;}
  .spec span:first-child{color:var(--muted);} .spec b{font-weight:600;text-align:right;}
  .infra{margin-top:24px;}
  .infra__list{margin-top:14px;display:grid;grid-template-columns:repeat(3,1fr);gap:12px;}
  @media(max-width:560px){ .infra__list{grid-template-columns:1fr;} }
  .infra__i{display:flex;align-items:center;gap:11px;padding:16px;border:1px solid var(--line);border-radius:12px;background:var(--paper-2);font-size:14.5px;transition:transform .25s var(--ease),border-color .25s var(--ease);}
  .infra__i:hover{transform:translateY(-3px);border-color:var(--blue-light);}
  .infra__i svg{width:19px;height:19px;color:var(--blue);flex:none;}

  /* CTA card (right side of specs) */
  .ctacard{position:relative;overflow:hidden;border-radius:var(--r);color:#fff;padding:34px;align-self:stretch;min-height:340px;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-end;box-shadow:0 26px 64px -38px rgba(8,26,41,.55);}
  .ctacard__media{position:absolute;inset:0;z-index:-2;}
  .ctacard__media img{width:100%;height:100%;object-fit:cover;}
  .ctacard::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,rgba(8,26,41,.42) 0%,rgba(8,26,41,.62) 55%,rgba(8,26,41,.92) 100%);}
  .ctacard__h{font-family:var(--disp);font-weight:600;font-size:clamp(22px,2.2vw,30px);line-height:1.08;max-width:18ch;}
  .ctacard p{margin-top:12px;font-size:14px;color:#d6e2ec;line-height:1.6;max-width:34ch;}
  .ctacard .cta{margin-top:22px;align-self:flex-start;background:var(--blue-light);color:var(--navy);} .ctacard .cta:hover{background:#fff;transform:translateY(-2px);}

  /* partners */
  /* other-projects carousel */
  .pcar{margin-top:clamp(40px,4.5vw,60px);}
  .pcar__head{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:24px;}
  .pcar__nav{display:flex;gap:10px;flex:none;}
  .pcar__btn{width:46px;height:46px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;color:var(--navy);transition:background-color .2s var(--ease),color .2s var(--ease),border-color .2s var(--ease);}
  .pcar__btn:hover{background:var(--navy);color:#fff;border-color:var(--navy);} .pcar__btn svg{width:18px;height:18px;}
  .pcar__track{display:flex;gap:14px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;padding-bottom:4px;}
  .pcar__track::-webkit-scrollbar{display:none;}
  .pcar__track>*{scroll-snap-align:start;flex:0 0 clamp(260px,30vw,350px);}
  @media(max-width:600px){ .pcar__track>*{flex:0 0 80%;} .pcar__nav{display:none;} }
  .pcard{position:relative;overflow:hidden;display:block;color:#fff;background:var(--navy);aspect-ratio:4/3;border-radius:12px;}
  .pcard__img{position:absolute;top:-8%;left:0;width:100%;height:116%;object-fit:cover;transform:scale(var(--sc,1));transition:transform .6s var(--ease);}
  .pcard:hover .pcard__img{--sc:1.07;}
  .pcard::after{content:"";position:absolute;left:0;right:0;bottom:0;top:0;z-index:1;pointer-events:none;background:linear-gradient(to top,rgba(8,20,32,.85) 0%,rgba(8,20,32,.1) 55%,transparent 100%);}
  .pcard__bar{position:absolute;left:18px;right:18px;bottom:18px;z-index:2;display:flex;align-items:center;gap:12px;transition:transform .4s var(--ease);}
  .pcard:hover .pcard__bar{transform:translateY(-36px);}
  .pcard__desc{position:absolute;left:18px;right:18px;bottom:18px;z-index:2;font-size:13px;color:rgba(255,255,255,.85);opacity:0;transform:translateY(8px);transition:opacity .4s var(--ease),transform .4s var(--ease);}
  .pcard:hover .pcard__desc{opacity:1;transform:translateY(0);}
  .pcard__badge{width:50px;height:50px;border-radius:50%;overflow:hidden;flex:none;background:#fff;}
  .pcard__badge img{width:100%;height:100%;object-fit:cover;display:block;}
  .pcard__badge--mark img{object-fit:contain;padding:10px;}
  .pcard__meta{display:flex;flex-direction:column;gap:5px;min-width:0;}
  .pcard__name{font-family:var(--disp);font-weight:600;font-size:17px;line-height:1.12;}
  .pcard__status{display:inline-flex;align-items:center;gap:7px;font-size:12px;font-weight:500;color:rgba(255,255,255,.85);}
  .pcard__status::before{content:"";width:7px;height:7px;border-radius:50%;flex:none;background:var(--blue-light);}
  .pcard__status--active::before{background:var(--ok);}

  /* closing CTA banner */
  .banner{margin-top:clamp(40px,5vw,68px);position:relative;overflow:hidden;border-radius:var(--r);color:#fff;padding:clamp(44px,6vw,76px) clamp(28px,5vw,64px);}
  .banner__media{position:absolute;inset:0;z-index:-2;}
  .banner__media img{width:100%;height:128%;object-fit:cover;will-change:transform;}
  .banner::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(110deg,rgba(12,39,60,.94),rgba(12,39,60,.55));}
  .banner__h{font-family:var(--disp);font-weight:600;font-size:clamp(26px,3.4vw,42px);max-width:20ch;line-height:1.08;}
  .banner p{margin-top:12px;font-size:15.5px;color:#d6e2ec;max-width:46ch;}
  .banner .cta{margin-top:26px;background:var(--blue-light);color:var(--navy);} .banner .cta:hover{background:#fff;}

  /* footer */
  /* ============================ SITE FOOTER (canonical · navy · geometric) ============================ */
  .site-footer{position:relative;overflow:hidden;isolation:isolate;margin-top:clamp(40px,5vw,60px);font-family:var(--font);color:#b9cad8;
    background:radial-gradient(135% 90% at 50% -22%,rgba(64,131,194,.22),transparent 56%),radial-gradient(70% 60% at 88% 6%,rgba(171,206,225,.10),transparent 60%),linear-gradient(180deg,#0c273c 0%,#0a2031 56%,#07151f 100%);}
    .sf-partners { position: relative; padding: clamp(20px,2.4vw,30px) 0; border-bottom: 1px solid rgba(255,255,255,.08); }
  .sf-partners__row { max-width: 1760px; margin: 0 auto; padding: 0 clamp(24px,3.4vw,56px);
    display: flex; align-items: center; gap: clamp(24px,3vw,48px); }
  .sf-partners__label { flex: none; width: min-content;
    font-family: "TBC Contractica Caps", var(--font); font-size: 13px; font-weight: 500;
    line-height: 1.4; letter-spacing: .02em; color: rgba(255,255,255,.5); }
  .sf-plogos { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; flex-wrap: nowrap;
    justify-content: flex-end; gap: clamp(18px,2.2vw,34px); }
  .sf-plogo { height: 36px; width: auto; object-fit: contain; display: block;
    filter: brightness(0) invert(1); opacity: .72; transition: opacity .3s var(--ease); }
  .sf-plogo:hover { opacity: 1; }
  .sf-plogo--keystone-investments { height: 32px; } .sf-plogo--cepi { height: 40px; }
  @media (max-width: 980px) { .sf-plogos { flex-wrap: wrap; gap: 22px 30px; }
    .sf-plogo { height: 32px; } .sf-plogo--keystone-investments { height: 28px; } .sf-plogo--cepi { height: 36px; } }
  @media (max-width: 720px) {
    .sf-partners__row { flex-direction: column; align-items: flex-start; gap: 15px; }
    .sf-partners__label { width: auto; }
    .sf-plogos { justify-content: flex-start; gap: 20px 28px; }
    .sf-plogo { height: 30px; }
    .sf-plogo--keystone-investments { height: 27px; } .sf-plogo--cepi { height: 33px; }
  }
  .sf-main{position:relative;max-width:var(--wrap);margin:0 auto;padding:clamp(48px,5vw,76px) var(--gut) clamp(20px,2.5vw,32px);display:grid;grid-template-columns:1.7fr .9fr .9fr 1.25fr;gap:clamp(28px,4vw,56px);}
  .sf-brand{display:flex;flex-direction:column;align-items:flex-start;gap:22px;max-width:360px;}
  .sf-brand__logo{height:58px;width:auto;align-self:flex-start;filter:brightness(0) invert(1);}
  .sf-brand__text{font-size:14px;line-height:1.7;color:rgba(255,255,255,.58);}
  .sf-cta{align-self:flex-start;display:inline-flex;align-items:center;gap:9px;padding:11px 20px;border-radius:11px;background:var(--blue-light);color:var(--navy);font-size:13.5px;font-weight:600;transition:background .25s var(--ease),transform .25s var(--ease);}
  .sf-cta svg{width:13px;height:13px;} .sf-cta:hover{background:#c3deee;}
  .sf-social{display:flex;gap:10px;}
  .sf-social a{width:40px;height:40px;border:1px solid rgba(255,255,255,.14);border-radius:11px;display:grid;place-items:center;color:rgba(255,255,255,.72);transition:background .25s var(--ease),border-color .25s var(--ease),color .25s var(--ease),transform .25s var(--ease);}
  .sf-social a:hover{background:var(--blue);border-color:var(--blue);color:#fff;} .sf-social svg{width:17px;height:17px;}
  .sf-col__h{font-family:var(--disp);font-weight:500;font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:#fff;margin:0 0 18px;}
  .sf-links{display:flex;flex-direction:column;gap:12px;}
  .sf-links a{font-size:14px;color:rgba(255,255,255,.6);width:fit-content;transition:color .25s var(--ease),transform .25s var(--ease);}
  .sf-links a:hover{color:#fff;transform:translateX(3px);}
  .sf-contact{display:flex;flex-direction:column;gap:15px;}
  /* the flex gap stacks on the heading margin — trim it so the first row lines up with the link columns */
  .sf-contact .sf-col__h{margin-bottom:3px;}
  .sf-contact__row{display:flex;gap:12px;align-items:flex-start;font-size:14px;line-height:1.5;color:rgba(255,255,255,.62);}
  .sf-contact__row svg{width:17px;height:17px;flex:none;margin-top:2px;color:var(--blue-light);}
  .sf-contact__row a{transition:color .25s var(--ease);} .sf-contact__row a:hover{color:#fff;}
  .sf-symbol{position:relative;z-index:0;display:flex;justify-content:center;margin-top:clamp(-26px,-2.6vw,-14px);margin-bottom:clamp(-48px,-4.4vw,-30px);pointer-events:none;user-select:none;}
  .sf-symbol svg{width:min(700px,92vw);height:auto;display:block;-webkit-mask-image:linear-gradient(180deg,#000 0%,#000 58%,transparent 100%);mask-image:linear-gradient(180deg,#000 0%,#000 58%,transparent 100%);}
  .sf-symbol path{fill:rgba(171,206,225,.05);stroke:rgba(171,206,225,.12);stroke-width:1.4;}
  .sf-bottom{position:relative;z-index:1;border-top:1px solid rgba(255,255,255,.08);max-width:var(--wrap);margin:0 auto;padding:22px var(--gut);display:flex;align-items:center;justify-content:space-between;gap:14px 28px;flex-wrap:wrap;font-size:12.5px;color:rgba(255,255,255,.45);}
  .sf-bottom__legal{display:flex;gap:22px;flex-wrap:wrap;}
  .sf-bottom__legal a{transition:color .25s var(--ease);} .sf-bottom__legal a:hover{color:#fff;}
  .sf-top{display:inline-flex;align-items:center;gap:10px;color:rgba(255,255,255,.6);transition:color .25s var(--ease);} .sf-top:hover{color:#fff;}
  .sf-top__btn{width:38px;height:38px;border:1px solid rgba(255,255,255,.16);border-radius:50%;display:grid;place-items:center;color:inherit;transition:background .25s var(--ease),border-color .25s var(--ease),transform .25s var(--ease);}
  .sf-top:hover .sf-top__btn{background:var(--blue);border-color:var(--blue);color:#fff;} .sf-top__btn svg{width:16px;height:16px;}
  @media(max-width:980px){ .sf-main{grid-template-columns:1fr 1fr;gap:36px 28px;} .sf-brand{grid-column:1 / -1;max-width:520px;} }
  @media(max-width:560px){ .sf-main{grid-template-columns:1fr;} .sf-bottom{flex-direction:column;align-items:flex-start;gap:18px;} .sf-symbol{margin-bottom:clamp(-30px,-7vw,-18px);} }
  @media(prefers-reduced-motion:reduce){ .sf-marquee__track{animation:none;} }

  /* reveal on scroll */
  html.js .rv{opacity:0;transform:translateY(34px);transition:opacity .95s var(--ease),transform .95s var(--ease);transition-delay:var(--d,0s);}
  html.js .rv.in{opacity:1;transform:none;}
  @media(prefers-reduced-motion:reduce){ html.js .rv{opacity:1!important;transform:none!important;} .hero__cue::after{animation:none;} .hero__media img{transform:none!important;} }

  /* lightbox */
  .lbx{position:fixed;inset:0;z-index:200;display:none;align-items:center;justify-content:center;background:rgba(8,20,32,.94);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);opacity:0;transition:opacity .3s var(--ease);}
  .lbx.open{display:flex;opacity:1;}
  .lbx__img{max-width:90vw;max-height:85vh;object-fit:contain;border-radius:8px;transform:scale(.98);transition:transform .3s var(--ease);} .lbx.open .lbx__img{transform:none;}
  .lbx__b{position:absolute;width:52px;height:52px;border-radius:50%;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.4);color:#fff;display:grid;place-items:center;transition:background-color .2s var(--ease);} .lbx__b:hover{background:rgba(255,255,255,.28);} .lbx__b svg{width:20px;height:20px;}
  .lbx__close{top:24px;right:28px;} .lbx__prev{left:24px;top:50%;transform:translateY(-50%);} .lbx__next{right:24px;top:50%;transform:translateY(-50%);}
  .lbx__count{position:absolute;bottom:26px;left:50%;transform:translateX(-50%);font-size:13px;color:rgba(255,255,255,.8);}
  @media(max-width:680px){ .lbx__prev{left:12px;} .lbx__next{right:12px;} .lbx__b{width:44px;height:44px;} }

  /* nav dropdown (media) */
  .nav__has { position: relative; }
  .nav__has > a { display: inline-flex; align-items: center; gap: 5px; }
  .nav__caret { width: 11px; height: 11px; transition: transform .25s var(--ease); }
  .nav__has:hover .nav__caret, .nav__has:focus-within .nav__caret { transform: rotate(180deg); }
  .nav__has::after { content: ""; position: absolute; left: -10px; right: -10px; top: 100%; height: 22px; }
  .nav__drop { position: absolute; top: 100%; left: 50%; transform: translateX(-50%) translateY(8px);
    min-width: 232px; margin-top: 16px; padding: 8px; list-style: none;
    background: #fff; border-radius: 14px; border: 1px solid rgba(12,39,60,.08); box-shadow: 0 26px 64px rgba(8,22,36,.2);
    display: flex; flex-direction: column; gap: 2px; opacity: 0; visibility: hidden; z-index: 60;
    transition: opacity .25s var(--ease), transform .25s var(--ease); }
  .nav__has:hover .nav__drop, .nav__has:focus-within .nav__drop { opacity: 1; visibility: visible; transform: translateX(-50%) translateY(0); }
  .nav__drop a { display: block; padding: 11px 14px; border-radius: 9px; font-size: 14px; font-weight: 500; color: var(--navy); opacity: .82; white-space: nowrap; transition: background .2s var(--ease), opacity .2s var(--ease); }
  .nav__drop a:hover { background: rgba(12,39,60,.06); opacity: 1; }
  @media (max-width: 860px) {
    .nav__has::after, .nav__caret { display: none; }
    .nav__drop { position: static; transform: none; opacity: 1; visibility: visible; min-width: 0;
      margin: 0; padding: 0 0 0 16px; background: transparent; border: none; box-shadow: none; gap: 0; }
    .nav__drop a { padding: 12px 0; border-bottom: 1px solid rgba(12,39,60,.06); font-size: 15px; opacity: .9; border-radius: 0; }
  }
  /* ===== Mega menu ===== */
  .nav__mega { position: static; }
  .nav__mega > a { display: inline-flex; align-items: center; gap: 5px; }
  .nav__mega.is-open .nav__caret { transform: rotate(180deg); }
  .nav__panel { position: fixed; left: 0; right: 0; top: var(--h); z-index: 55;
    background: rgba(255,255,255,.72); -webkit-backdrop-filter: blur(18px) saturate(140%); backdrop-filter: blur(18px) saturate(140%);
    border-bottom: 1px solid rgba(12,39,60,.08); box-shadow: 0 30px 60px rgba(8,22,36,.13);
    opacity: 0; visibility: hidden; transform: translateY(-8px);
    transition: opacity .28s var(--ease), transform .28s var(--ease), visibility .28s var(--ease); }
  .scrolled .nav__panel { top: var(--h-sm); }
  .nav__mega.is-open .nav__panel { opacity: 1; visibility: visible; transform: translateY(0); }
  .nav__panel a { opacity: 1; }
  .mega { max-width: 1760px; margin: 0 auto; padding: 32px clamp(24px,3.4vw,56px) 38px; color: var(--navy); }
  .mega--proj { display: flex; flex-direction: column; gap: 22px; }
  .mega__cards { display: grid; grid-template-columns: repeat(5, 1fr); gap: 18px; }
  .pmc { position: relative; display: block; border-radius: 12px; overflow: hidden; aspect-ratio: 4 / 5; background: #0a1f30; color: #fff; }
  .pmc img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .5s var(--ease); }
  .pmc:hover img { transform: scale(1.06); }
  .pmc::after { content: ""; position: absolute; inset: 0; background: linear-gradient(180deg, rgba(8,20,32,.1) 0%, rgba(8,20,32,0) 38%, rgba(8,20,32,.82) 100%); }
  .pmc__logo { position: absolute; top: 12px; left: 12px; z-index: 2; width: 40px; height: 40px; border-radius: 50%; overflow: hidden; background: #fff; box-shadow: 0 4px 14px rgba(8,22,36,.25); }
  .pmc__logo img { position: static; width: 100%; height: 100%; object-fit: cover; }
  .pmc__b { position: absolute; left: 14px; right: 14px; bottom: 13px; z-index: 2; }
  .pmc__name { display: block; font-family: "TBC Contractica Caps", var(--font); font-weight: 500; font-size: 15px; line-height: 1.15; }
  .pmc__loc { display: block; margin-top: 5px; font-family: "FiraGO", var(--font); font-size: 10.5px; letter-spacing: .01em; color: rgba(255,255,255,.82); }
  .mega__foot { display: flex; justify-content: space-between; align-items: center; gap: 20px; border-top: 1px solid rgba(12,39,60,.1); padding-top: 20px; }
  .mega__note { font-size: 13px; color: #5b6770; }
  .mega__note b { color: var(--navy); font-weight: 700; }
  .mega__all { display: inline-flex; align-items: center; gap: 9px; padding: 11px 20px; border-radius: 10px; background: var(--navy); color: #fff; font-family: "TBC Contractica Caps", var(--font); font-size: 13px; transition: background .25s var(--ease); }
  .mega__all:hover { background: #0f3654; }
  .mega__all svg { width: 16px; height: 16px; transition: transform .3s var(--ease); }
  .mega__all:hover svg { transform: translateX(3px); }
  .mega--media { display: grid; grid-template-columns: 25% minmax(0,1fr); gap: 40px; align-items: start; }
  .mcat { display: flex; flex-direction: column; gap: 4px; }
  .mcat__h { font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: #9aa4ac; margin-bottom: 8px; padding: 0 16px; }
  .mcat a { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 14px 16px; border-radius: 12px; transition: background .2s var(--ease); }
  .mcat a:hover { background: rgba(12,39,60,.06); }
  .mcat a span { font-family: "TBC Contractica Caps", var(--font); font-size: 16px; color: var(--navy); }
  .mcat__arr { width: 14px; height: 14px; flex: none; color: var(--blue); transition: transform .25s var(--ease); }
  .mcat a:hover .mcat__arr { transform: translate(2px,-2px); }
  .mnews { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
  .ncardh { display: flex; gap: 14px; align-items: center; padding: 8px; border-radius: 12px; transition: background .2s var(--ease); }
  .ncardh:hover { background: rgba(12,39,60,.05); }
  .ncardh__img { flex: none; width: 104px; height: 70px; border-radius: 10px; object-fit: cover; }
  .ncardh__t { min-width: 0; }
  .ncardh__date { display: block; font-size: 12px; color: #8a939b; }
  .ncardh__title { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; margin-top: 5px; font-size: 14px; line-height: 1.34; color: var(--navy); font-weight: 500; }
  /* header frosted while a mega is open */
  .site-header.header--mega { color: var(--navy); }
  .site-header.header--mega::after { opacity: 1; }
  .site-header.header--mega .logo__img { filter: brightness(1) invert(0); }
  @media (max-width: 860px) {
    .nav { max-height: calc(100dvh - var(--h)); overflow-y: auto; }
    .nav__panel { position: static; opacity: 1; visibility: visible; transform: none; box-shadow: none;
      background: transparent; border: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
    .mega { padding: 6px 0 14px; max-width: none; }
    .mega--proj { gap: 14px; }
    .mega__cards { grid-template-columns: repeat(2, 1fr); gap: 12px; }
    .mega__foot { flex-direction: column; align-items: flex-start; gap: 14px; }
    .mega--media { grid-template-columns: 1fr; gap: 16px; }
    .mnews { grid-template-columns: 1fr; }
    .mcat__h, .mcat a, .ncardh { padding-left: 0; padding-right: 0; }
    .nav__mega .nav__caret { display: none; }
  }

  /* ===== eyebrow normalization → match home .about__label ===== */
  .ab-eyebrow, .elabel, .archive__label, .blog__eyebrow, .eyebrow, .faq__label, .media__label,
  .sv2-eyebrow, .works__eyebrow, .reels__eyebrow, .hero__kicker {
    font-family: "TBC Contractica Caps", var(--font) !important;
    font-size: 13px !important; font-weight: 500 !important;
    letter-spacing: .1em !important; text-transform: uppercase !important; gap: 0 !important;
  }
  /* light-section eyebrows → navy, like About */
  .ab-eyebrow, .elabel, .archive__label, .blog__eyebrow, .eyebrow, .faq__label, .media__label, .sv2-eyebrow {
    color: var(--navy) !important; opacity: .55 !important;
  }
  /* dark-section eyebrows → light equivalent */
  .works__eyebrow, .reels__eyebrow, .hero__kicker, .eyebrow--light {
    color: rgba(255,255,255,.65) !important; opacity: 1 !important;
  }
  /* strip all dot/line decorations */
  .elabel::before, .elabel::after, .ab-eyebrow::before, .ab-eyebrow::after, .archive__label::before, .archive__label::after,
  .blog__eyebrow::before, .blog__eyebrow::after, .eyebrow::before, .eyebrow::after,
  .faq__label::before, .faq__label::after, .media__label::before, .media__label::after,
  .sv2-eyebrow::before, .sv2-eyebrow::after, .works__eyebrow::before, .works__eyebrow::after,
  .reels__eyebrow::before, .reels__eyebrow::after, .hero__kicker::before, .hero__kicker::after {
    display: none !important; content: none !important;
  }
  .sv2-dot { display: none !important; }
  
  /* ===== mobile menu redesign ===== */
  @media (max-width: 860px){
    .site-header .bar{ gap:14px; padding:0 20px; }
    .burger{ display:block; position:relative; z-index:60; }
    .bar .lang{ margin-left:auto; }
    body.open .site-header{ background:#fff !important; color:var(--navy) !important; height:var(--h) !important; }
    body.open .site-header::after{ opacity:1 !important; }
    body.open .logo__img{ filter:none !important; }
    body.open .burger span{ background:var(--navy) !important; }
    body.open .lang{ color:var(--navy) !important; }
    body.open{ overflow:hidden !important; }

    .nav{
      position:fixed !important; inset:var(--h) 0 0 0 !important; margin:0 !important;
      display:block !important; background:#fff !important;
      transform:translateY(-8px); opacity:0; visibility:hidden;
      transition:opacity .26s var(--ease), transform .26s var(--ease), visibility .26s var(--ease);
      overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain;
    }
    .scrolled .nav{ inset:var(--h) 0 0 0 !important; }
    body.open .nav{ transform:none; opacity:1; visibility:visible; }

    .nav > ul{ flex-direction:column; align-items:stretch !important; gap:0 !important; padding:6px 0 0 !important; }
    .nav > ul > li{ border-bottom:1px solid rgba(12,39,60,.09); width:100%; }
    .nav a{
      color:var(--navy) !important; text-shadow:none !important; opacity:1 !important;
      padding:19px 24px !important; width:100%; font-size:17px !important; font-weight:500;
      border:0 !important; display:flex !important; align-items:center; justify-content:space-between; gap:12px;
      text-align:left; -webkit-tap-highlight-color:transparent;
    }
    .nav__has::after{ display:none !important; }

    .nav__mega > a{ cursor:pointer; }
    .nav__mega > a .nav__caret{ display:inline-block !important; width:16px; height:16px; opacity:.4; transition:transform .3s var(--ease); flex:none; }
    .nav__mega.is-open > a .nav__caret{ transform:rotate(180deg); opacity:.7; }
    .nav__mega.is-open > a{ color:var(--blue) !important; }
    .nav__panel{
      position:static !important; opacity:1 !important; visibility:visible !important; transform:none !important;
      top:auto !important; left:auto !important; right:auto !important; width:auto !important; min-width:0 !important;
      background:transparent !important; box-shadow:none !important; border:0 !important; padding:0 !important;
      display:grid !important; grid-template-rows:0fr; transition:grid-template-rows .34s var(--ease);
    }
    .nav__mega.is-open > .nav__panel{ grid-template-rows:1fr; background:#f6f9fc !important; }
    .nav__panel > div{ min-height:0; overflow:hidden; }

    /* padding must be 0: .mega is the overflow box, so any padding survives the 0fr collapse
       and leaves a visible gap under Services / Projects / Media before they expand */
    .mega{ display:block !important; width:auto !important; max-width:none !important; padding:0 !important; margin:0 !important; }
    .mega__cards{ display:block !important; grid-template-columns:none !important; gap:0 !important; }
    .nav__panel .pmc{ display:flex !important; flex-direction:row !important; align-items:center !important; justify-content:flex-start !important; gap:13px !important; height:auto !important; min-height:0 !important; aspect-ratio:auto !important; border-radius:0 !important; background:none !important; box-shadow:none !important; overflow:visible !important; padding:11px 24px !important; border-bottom:1px solid rgba(12,39,60,.06) !important; }
    .nav__panel .pmc > img{ display:block !important; position:static !important; inset:auto !important; width:46px !important; height:46px !important; object-fit:cover !important; border-radius:8px !important; flex:none !important; }
    .pmc::before, .pmc::after{ display:none !important; content:none !important; }
    .pmc__logo{ display:none !important; }
    .pmc__b{ position:static !important; inset:auto !important; padding:0 !important; display:flex; flex-direction:column; gap:2px; }
    .pmc__name{ position:static !important; color:var(--navy) !important; font-size:15px !important; font-weight:500 !important; text-shadow:none !important; }
    .pmc__loc{ color:#7688a0 !important; font-size:12px !important; text-shadow:none !important; }
    .mega__foot{ display:flex !important; padding:15px 24px !important; border-top:1px solid rgba(12,39,60,.07) !important; margin:0 !important; }
    .mega__note{ display:none !important; }
    .mega__foot .mega__all{ color:var(--blue) !important; background:none !important; box-shadow:none !important; border:0 !important; align-items:center !important; font-weight:600 !important; padding:0 !important; justify-content:flex-start !important; font-size:14px !important; }
    .mega--media{ display:block !important; grid-template-columns:none !important; }
    .mcat{ padding:2px 0 !important; }
    .mcat__h{ display:none !important; }
    .mcat a{ padding:13px 24px 13px 40px !important; font-size:15px !important; border-bottom:1px solid rgba(12,39,60,.06) !important; }
    .mcat__arr{ display:none !important; }
    .mnews{ display:none !important; }

    .nav__mfoot{ padding:24px 24px calc(28px + env(safe-area-inset-bottom)); }
    .nav__mfoot .nav__mcta{ display:flex !important; align-items:center; justify-content:center; gap:10px; width:100%;
      padding:17px 20px !important; border-radius:12px; background:var(--navy) !important;
      font-family:"TBC Contractica Caps",var(--font); font-size:13px !important; font-weight:500; letter-spacing:.05em; text-transform:uppercase; }
    .nav__mfoot .nav__mcta, .nav__mfoot .nav__mcta span{ color:#fff !important; }
    .nav__mfoot .nav__mcta svg{ width:15px; height:15px; flex:none; }
    .nav__mfoot .nav__mtel{ display:flex !important; align-items:center; justify-content:center !important; gap:9px;
      margin-top:8px; color:var(--navy) !important; font-size:15px !important; opacity:.72; }
    .nav__mfoot .nav__mtel svg{ width:18px; height:18px; flex:none; color:#25D366; }
  }
  @media (min-width:861px){ .nav__mfoot{ display:none !important; } }
  
  /* mobile responsiveness fixes (audit) */
  @media(max-width:600px){ .cur button{ min-height:40px !important; } } @media(max-width:600px) and (hover:none){ .pcard__bar{ transform:none !important; } .pcard__desc{ opacity:1 !important; transform:none !important; } }
  
  /* ===== unified scroll-reveal + motion polish ===== */
  :root{ --grease: cubic-bezier(.22,1,.36,1); }
  .grev{ opacity:0; transform:translateY(26px); transition:opacity .8s var(--grease), transform .8s var(--grease); will-change:opacity,transform; }
  .grev.gin{ opacity:1; transform:none; }
  .rv{ transition:opacity .8s var(--grease), transform .8s var(--grease) !important; }
  .reveal.is-in{ animation-duration:.8s !important; animation-timing-function:var(--grease) !important; }
  @media (prefers-reduced-motion: reduce){ .grev,.rv{ opacity:1 !important; transform:none !important; transition:none !important; } .reveal,.reveal.is-in{ animation:none !important; opacity:1 !important; } }
  
  /* ============================ CONSULTATION MODAL ============================ */
  .cd-modal { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center;
    padding: 24px; opacity: 0; visibility: hidden; transition: opacity .3s var(--ease), visibility .3s var(--ease); }
  .cd-modal.open { opacity: 1; visibility: visible; }
  .cd-modal__overlay { position: absolute; inset: 0; background: rgba(7,21,31,.5);
    backdrop-filter: blur(10px) saturate(120%); -webkit-backdrop-filter: blur(10px) saturate(120%); }
  .cd-card { position: relative; z-index: 1; width: min(860px, 100%);
    height: min(500px, calc(100vh - 48px));   /* definite height → media aspect-ratio resolves to a true square */
    background: #fff; border-radius: 12px; padding: 5px; box-shadow: 0 40px 100px -28px rgba(8,22,36,.6);
    display: flex; overflow: hidden; transform: translateY(18px) scale(.98);
    transition: transform .4s var(--ease); }
  .cd-modal.open .cd-card { transform: none; }

  /* left media — 50/50 with the form */
  .cd-media { position: relative; flex: 1 1 0; min-width: 0; align-self: stretch;
    border-radius: 8px; overflow: hidden; }
  .cd-media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
  .cd-media::after { content: ""; position: absolute; inset: 0;
    background: linear-gradient(180deg, rgba(7,21,31,.5) 0%, rgba(7,21,31,.12) 38%, rgba(7,21,31,.72) 100%); }
  .cd-media__inner { position: absolute; inset: 0; z-index: 1; display: flex; flex-direction: column;
    justify-content: space-between; padding: clamp(18px,2.2vw,26px); color: #fff; }
  .cd-media__title { font-family: "TBC Contractica Caps", var(--font); font-weight: 500;
    font-size: clamp(20px,2.6vw,27px); line-height: 1.08; max-width: 8em; }
  .cd-media__contacts { display: flex; flex-direction: column; gap: 11px; }
  .cd-mc { display: flex; align-items: flex-start; gap: 10px; color: rgba(255,255,255,.88);
    font-size: 13px; line-height: 1.4; transition: color .2s var(--ease); }
  .cd-mc svg { width: 16px; height: 16px; flex: none; margin-top: 1px; color: var(--blue-light); }
  a.cd-mc:hover { color: #fff; }

  /* right form */
  .cd-form { flex: 1; min-width: 0; padding: clamp(22px,2.4vw,30px) clamp(20px,2.4vw,30px);
    display: flex; flex-direction: column; justify-content: center; overflow-y: auto; }
  .cd-form__head { margin-bottom: clamp(16px,2vw,22px); }
  .cd-form__title { font-family: "TBC Contractica Caps", var(--font); font-weight: 500; color: var(--navy);
    font-size: clamp(20px,2.3vw,25px); line-height: 1.1; margin: 0; }
  .cd-field { margin-bottom: 12px; }
  .cd-field label { display: block; font-size: 12px; font-weight: 600; color: var(--navy); margin-bottom: 7px; }
  .cd-input { width: 100%; height: 48px; padding: 0 14px; font-size: 14px; color: var(--navy); font-family: var(--font);
    border: 1px solid #dbe2e8; border-radius: 10px; background: #fff;
    transition: border-color .2s var(--ease), box-shadow .2s var(--ease); }
  .cd-input::placeholder { color: #9aa6b1; }
  .cd-input:focus { outline: none; border-color: var(--blue); box-shadow: 0 0 0 3px rgba(64,131,194,.14); }
  .cd-phone { display: flex; gap: 8px; }
  .cd-cc { display: flex; align-items: center; gap: 7px; height: 48px; padding: 0 12px; flex: none;
    border: 1px solid #dbe2e8; border-radius: 10px; background: #f6f9fb; font-size: 14px; color: var(--navy); }
  .cd-cc img { width: 20px; height: 20px; border-radius: 50%; display: block; }
  .cd-phone .cd-input { flex: 1; }
  .cd-submit { margin-top: 7px; width: 100%; height: 52px; display: inline-flex; align-items: center;
    justify-content: center; gap: 10px; background: var(--navy); color: #fff; border-radius: 11px;
    font-family: "TBC Contractica Caps", var(--font); font-size: 13px; font-weight: 500; letter-spacing: .05em;
    text-transform: uppercase; transition: background .25s var(--ease), transform .2s var(--ease); }
  .cd-submit:hover { background: #143957; transform: translateY(-2px); }
  .cd-submit svg { width: 16px; height: 16px; transition: transform .3s var(--ease); }
  .cd-submit:hover svg { transform: translateX(4px); }
  .cd-note { margin-top: 12px; font-size: 11.5px; color: #8190a0; text-align: center; line-height: 1.45; }

  .cd-close { position: absolute; top: 14px; right: 14px; z-index: 3; width: 38px; height: 38px; border-radius: 50%;
    display: grid; place-items: center; background: rgba(255,255,255,.92); color: var(--navy);
    border: 1px solid rgba(12,39,60,.08); box-shadow: 0 6px 18px rgba(8,22,36,.14);
    transition: background .2s var(--ease), transform .3s var(--ease); }
  .cd-close:hover { background: #fff; transform: rotate(90deg); }
  .cd-close svg { width: 18px; height: 18px; }

  .cd-success { display: none; flex: 1; flex-direction: column; align-items: center; justify-content: center;
    text-align: center; gap: 12px; padding: 24px; }
  .cd-form.done > form, .cd-form.done > .cd-form__head { display: none; }
  .cd-form.done .cd-success { display: flex; }
  .cd-success__ico { width: 62px; height: 62px; border-radius: 50%; background: rgba(64,131,194,.12);
    color: var(--blue); display: grid; place-items: center; }
  .cd-success__ico svg { width: 30px; height: 30px; }
  .cd-success h3 { font-family: "TBC Contractica Caps", var(--font); font-weight: 500; color: var(--navy); font-size: 23px; }
  .cd-success p { font-size: 14px; color: #5a6b7b; line-height: 1.55; max-width: 300px; }


  /* project lead mode — same shell, project-specific fields */
  .cd-lead { display: none; }
  .cd-form--lead > #cdFormEl { display: none; }
  .cd-form--lead .cd-lead { display: block; }
  .cd-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
  .cd-select { appearance: none; -webkit-appearance: none; cursor: pointer; padding-right: 38px;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%230c273c' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'><path d='M6 9l6 6 6-6'/></svg>");
    background-repeat: no-repeat; background-position: right 13px center; background-size: 16px; }
  @media (max-width: 480px) { .cd-row { grid-template-columns: 1fr; gap: 0; } }

  .cd-media__badge { width: 58px; height: 58px; border-radius: 50%; overflow: hidden; background: #fff;
    box-shadow: 0 10px 26px -10px rgba(8,26,41,.6); display: block; }
  /* .cd-media img is absolutely full-bleed — keep the badge's img out of that */
  .cd-media__badge img { position: static; inset: auto; width: 100%; height: 100%; object-fit: cover; display: block; }
  .cd-media__inner { justify-content: space-between; }

  .cd-open { overflow: hidden !important; }

  @media (max-width: 680px) {
    .cd-modal { padding: 16px; }
    .cd-card { flex-direction: column; height: auto; max-height: calc(100vh - 32px); overflow-y: auto; }
    .cd-media { flex: none; align-self: stretch; aspect-ratio: auto; width: auto; min-height: 184px; height: 184px; }
    .cd-form { overflow-y: visible; }
    .cd-media__title { font-size: 22px; }
  }
  @media (prefers-reduced-motion: reduce) { .cd-card { transition: none; } }
  
  .mega--svc { display: grid; grid-template-columns: 300px minmax(0,1fr); gap: clamp(28px,3vw,44px); align-items: start; }
  .svcm__lbl { font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: #9aa4ac; margin: 0 0 10px; padding: 0 4px; }
  .svcaud { display: flex; flex-direction: column; gap: 8px; }
  .svcaud a { display: flex; align-items: center; gap: 12px; padding: 11px 13px; border-radius: 12px; border: 1px solid rgba(12,39,60,.1); transition: background .2s var(--ease), border-color .2s var(--ease); }
  .svcaud a:hover { background: rgba(12,39,60,.04); border-color: rgba(12,39,60,.22); }
  .svcaud__ico { flex: none; width: 36px; height: 36px; border-radius: 10px; display: grid; place-items: center; background: rgba(43,108,176,.1); color: var(--blue); }
  .svcaud__ico svg { width: 19px; height: 19px; }
  .svcaud__tx { min-width: 0; }
  .svcaud__k { display: block; font-family: "TBC Contractica Caps", var(--font); font-size: 15px; color: var(--navy); }
  .svcphs { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 4px 22px; }
  .svccol { display: flex; flex-direction: column; }
  .svccol__h { font-family: "TBC Contractica Caps", var(--font); font-size: 13px; font-weight: 600; color: var(--navy); margin: 0 0 6px; padding: 0 8px; }
  .svclink { position: relative; display: flex; align-items: baseline; gap: 8px; padding: 11px 18px 11px 12px; border-radius: 10px; transition: background .2s var(--ease); }
  .svclink:hover { background: rgba(12,39,60,.06); }
  /* same arrow as the mega footer links — slides in on hover, space is always reserved so nothing reflows */
  .svclink::after { content: ""; position: absolute; right: 4px; top: 50%; width: 12px; height: 12px;
    background: var(--blue); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12h14M13 6l6 6-6 6'/%3E%3C/svg%3E") center / contain no-repeat;
    opacity: 0; transform: translate(-5px,-50%);
    transition: opacity .25s var(--ease), transform .3s var(--ease); }
  .svclink:hover::after, .svclink:focus-visible::after { opacity: 1; transform: translate(0,-50%); }
  @media (prefers-reduced-motion: reduce) { .svclink::after { transition: opacity .15s linear; transform: translate(0,-50%); } }
  .svclink__n { flex: none; font-size: 11px; color: var(--blue); font-family: "TBC Contractica Caps", var(--font); }
  .svclink__t { font-size: 13px; color: #38485f; line-height: 1.3; }
  @media (max-width: 860px) {
    .mega--svc { grid-template-columns: 1fr; gap: 16px; }
    .svcphs { grid-template-columns: 1fr 1fr; border-left: 0; padding-left: 0; gap: 2px 14px; }
    .svcm__lbl { display: none; }
  }

  /* services mega — audience switches the right-hand list (hover on desktop) */
  .svcaud a { position: relative; }
  .svcaud a.is-on { background: rgba(12,39,60,.05); border-color: rgba(12,39,60,.28); }
  .svcaud a.is-on .svcaud__ico { background: var(--blue); color: #fff; }
  .svcphs { display: block; }
  .svcpanel { display: none; }
  .svcpanel.is-on { display: block; }
  .svcpanel__h { font-family: "TBC Contractica Caps", var(--font); font-size: 14px; font-weight: 600;
    color: var(--navy); margin: 0 0 16px; padding: 0 8px; }
  /* tools/build_assets.py svcgrid_columns: three columns, rows from the services. */
  .svcgrid { display: block; columns: 3; column-gap: 22px; }
  .svcgrid .svclink { break-inside: avoid; margin-bottom: 4px; }
  @media (max-width: 860px) {
    /* audience switch = two underlined tabs (active: blue rule, inactive: hairline) */
    .svcaudwrap { padding: 0 !important; }
    .svcaud { display: grid !important; grid-template-columns: 1fr 1fr; gap: 0 !important;
      border-bottom: 1px solid rgba(12,39,60,.10); }
    .svcaud a { display: flex !important; align-items: center; justify-content: center !important;
      gap: 0 !important; padding: 15px 8px !important; margin-bottom: -1px;
      border: 0 !important; border-bottom: 2px solid transparent !important; border-radius: 0 !important;
      background: none !important; color: #6e7a84 !important; }
    .svcaud a .svcaud__ico { display: none !important; }
    .svcaud__tx { flex: 0 1 auto !important; text-align: center; }
    .svcaud__k { font-family: "TBC Contractica Caps", var(--font) !important; font-size: 13.5px !important;
      letter-spacing: .02em; color: inherit !important; }
    .svcaud a.is-on { background: none !important; border-bottom-color: var(--blue) !important; color: var(--navy) !important; }
    .svcaud a.is-on .svcaud__ico { background: none !important; }
    .svcaud a.is-on::after { content: none !important; display: none !important; }

    /* the service list = plain one-column menu rows, same rhythm as the Media links */
    .svcphs { margin-top: 0 !important; }
    .svcpanel__h { display: none !important; }
    .svcgrid { display: block !important; columns: auto !important; grid-template-columns: none !important; grid-template-rows: none !important; gap: 0 !important; }
    .svcgrid .svclink { margin-bottom: 0 !important; }
    .nav__panel .svclink { display: flex !important; align-items: center !important; gap: 12px !important;
      justify-content: flex-start !important; padding: 13px 24px !important; border-radius: 0 !important;
      border-bottom: 1px solid rgba(12,39,60,.06) !important; }
    .nav__panel .svclink::after { content: none !important; display: none !important; }
    .svclink__n { flex: none; width: 18px; font-size: 12px !important; color: #9aa4ac !important; }
    .svclink__t { font-size: 15px !important; line-height: 1.3 !important; color: var(--navy) !important; }
  }

  /* consultation modal — mobile/iOS fixes (mobile-only; desktop untouched) */
  @media (max-width: 680px) {
    /* iOS treats 100vh as the LARGE viewport, so the card could exceed the visible
       area inside the fixed overlay and clip its own top — close button unreachable */
    .cd-card { max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); }
    /* Safari zooms the page when a focused input is under 16px */
    .cd-input, .cd-form select, .cd-form textarea { font-size: 16px; }
    /* flex children default to min-width:auto, so the +995 chip could force overflow */
    .cd-phone .cd-input { min-width: 0; }
    .cd-cc { flex: none; }
    /* 38px close button is under the 44px touch target */
    .cd-close { width: 44px; height: 44px; }
  }

/* ===== GREA type & spacing scale — one 3-level system for all inner pages =====
   L1 page titles · L2 section titles · L3 card/item titles (+ lead, eyebrow, card tokens).
   Anchored on the client-approved news.html values. Injected last in <head> so it
   wins the cascade at equal specificity — home (index.html) keeps its display scale. */
:root{
  --t-h1: clamp(28px,3.4vw,46px);
  --t-h2: clamp(22px,2.6vw,32px);
  --t-h3: clamp(18px,2vw,24px);
  --t-lead: clamp(15px,1.35vw,17.5px);
  --t-eyebrow: 13px;
  --t-card: 17px;
  --hero-top: calc(var(--h) + clamp(34px,4.2vw,52px));
  --sec-pad: clamp(56px,6.5vw,96px);
}
/* L1 — page titles + full-width display bands */
.ab-hero__title, .archive__title, .art__title, .hero__title, .faq__title, .media__title,
.ftitle, .sv3-title, .sv2-title, .svp-title, .banner__h, .inquire__h, .next__big
{ font-family:"TBC Contractica Caps",var(--font); font-weight:700; font-size:var(--t-h1); line-height:1.12; }
/* L2 — section titles */
.ab-h2, .sec-title, .blog__title, .more__title, .pgroup__title, .msec__title, .news__title,
.sec__h, .pnum__title, .about__h, .specs__h, .sv3-side__h, .sv2-invest__h, .sv2-band__h,
.svp-sec > h2, .svp-next__h
{ font-family:"TBC Contractica Caps",var(--font); font-weight:700; font-size:var(--t-h2); line-height:1.16; }
/* L3 — card / item / accordion titles (size only; each keeps its family & weight) */
.ab-mvv__h, .ab-band__l, .ab-glink__t, .vac__title, .vac-loc__t, .feat__title, .latest__h,
.faqq__text, .fcard__title, .fhead h2, .legal h2, .ctacard__h, .role__t, .amen__i,
.sv3-nm, .sv2-name, .svp-faq__i h3, .svp-next__t, .success h3
{ font-size:var(--t-h3); }
/* flat 20px: service-page FAQ questions + career vacancy titles */
.svp-faq__i h3, .vac__title{ font-size:20px; }
/* dense-grid card titles */
.pcard__name, .mcard__title, .ncard__title, .ab-mem__n, .svp-agent__n { font-size:var(--t-card); }
/* leads / intro statements */
.ab-hero__lead, .ab-intro__body p:first-child, .hero__sub, .sec-sub, .vac__lead, .faq__intro,
.svp-lead, .sv2-lead, .sv3-side__p, .intro__sub, .about__body .first
{ font-size:var(--t-lead); line-height:1.6; }
.art__lead{ font-size:var(--t-lead) !important; line-height:1.62 !important; }
/* eyebrows — align every page to the existing 13px caps standard */
.ab-eyebrow, .ab-label, .ab-stats__pl, .archive__label, .eyebrow, .faq__label, .media__label,
.feyebrow, .elabel, .pnum__eyebrow, .svp-n
{ font-family:"TBC Contractica Caps",var(--font); font-size:var(--t-eyebrow); font-weight:500; letter-spacing:.1em; text-transform:uppercase; }
/* services CTA band — match the shared prefooter CTA (.cta2__h) */
.sv2-cta__h{ font-size:clamp(20px,2.6vw,27px); }
@media (max-width:700px){ :root{ --hero-top: calc(var(--h) + 22px); } }
/* page spacing — one hero offset, capped section gaps */
.prose .lead{font-size:16.5px;line-height:1.85;color:var(--ink-2);}

/* Markup-hidden chrome this bundle styles: restate [hidden] (build_assets.py carry_chrome_rules) */
.cd-media__badge[hidden]{display:none;}

/* Shared chrome rules this page's prototype never carried (build_assets.py carry_chrome_rules) */
.site-header--solid{color:var(--navy);}.site-header--solid:not(.scrolled){border-bottom:1px solid #00000010;}.site-header--solid .logo__img{filter:brightness(1) invert(0);}.logo{display:flex; align-items:center;}.btn{display:inline-flex; align-items:center; gap:8px; padding:11px 22px; border:1px solid currentColor; border-radius:10px; font-size:14px; font-weight:500; letter-spacing:.01em; white-space:nowrap; opacity:.95; transition:padding .4s var(--ease), font-size .4s var(--ease), background-color .25s var(--ease), border-color .25s var(--ease), color .25s var(--ease);}.btn__arrow{width:13px; height:13px; flex:none; transition:color .25s var(--ease);}.btn:hover{background:rgba(255,255,255,.14);}.scrolled .btn{padding:8px 16px; font-size:12.5px;}.scrolled .btn, .site-header--solid .btn{background:var(--blue-light); border-color:var(--blue-light); color:var(--navy);}.scrolled .btn .btn__arrow, .site-header--solid .btn .btn__arrow{color:var(--blue);}.scrolled .btn:hover, .site-header--solid .btn:hover{background:#9bc6dd; border-color:#9bc6dd;}
@media (max-width:860px){.btn{display:none;}}

/* Client review: no green - the brand is navy, blue and light blue
   (tools/build_assets.py brand_status_colors). Each rule below answers one
   the design drew in #3dbe78; errors keep their red. */
  :root { --ok: #4083c2; }
  .pcard__status--active::before { background: #4083c2; }
  .hstat__v--live::before { box-shadow: 0 0 0 4px rgba(64, 131, 194, .16); }

/* Client review: a two-line menu button, a little wider
   (tools/build_assets.py burger_two_lines). The design's middle bar is
   gone rather than hidden on open, and the button lays the pair out so
   the X folds from the gap it actually has. */
  @media (max-width: 1000px) {
    .burger { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 7px; }
    .burger span { width: 26px; height: 2px; margin: 0; border-radius: 1px; }
    .burger span:nth-child(2) { display: none; }
    body.open .burger span:nth-child(1) { transform: translateY(4.5px) rotate(45deg); }
    body.open .burger span:nth-child(3) { transform: translateY(-4.5px) rotate(-45deg); }
  }

  /* Client review: the country code and the number are one field, not two
     boxes (tools/build_assets.py phone_single_field). .cd-phone carries the
     border, the radius and the focus ring; .cd-cc keeps a single
     border-right as the divider inside them. Both halves keep the inner
     radius on their outer side, so a background the UA paints on one of
     them - autofill - follows the control instead of squaring off the
     corners it reaches. */
  .cd-phone { gap: 0; height: 48px; background: #fff;
    border: 1px solid #dbe2e8; border-radius: 10px;
    transition: border-color .2s var(--ease), box-shadow .2s var(--ease); }
  .cd-phone:focus-within { border-color: var(--blue); box-shadow: 0 0 0 3px rgba(64,131,194,.14); }
  .cd-phone .cd-ccode-wrap { display: flex; }
  .cd-phone .cd-cc, .cd-phone .cd-input { height: auto; background: transparent;
    border: 0; border-radius: 0; box-shadow: none; }
  .cd-phone .cd-cc { border-right: 1px solid #dbe2e8;
    border-radius: 9px 0 0 9px;
    padding-left: 14px; }
  .cd-phone .cd-cc:hover { background: rgba(12,39,60,.035); }
  .cd-phone .cd-input { border-radius: 0 9px 9px 0;
    padding-left: 12px; }
  .cd-phone:has(.cd-input[aria-invalid="true"]) { border-color: #cf4b46; }
  .cd-phone:has(.cd-input[aria-invalid="true"]):focus-within { box-shadow: 0 0 0 3px rgba(207,75,70,.14); }

  /* Client review: the modal needs the country dropdown the pages have
     (tools/build_assets.py modal_picker_css). The design's own picker rules,
     carried across under the modal's class names so the two cannot drift;
     the overrides below are what a fixed overlay needs and nothing else. */
  .cd-cc__car { width:12px;height:12px;color:var(--muted);transition:transform .25s var(--ease); }
  .cd-cc[aria-expanded="true"] .cd-cc__car { transform:rotate(180deg); }
  .cd-ccmenu { position:absolute;top:calc(100% + 8px);left:0;z-index:50;width:330px;max-width:78vw;background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:0 26px 64px rgba(8,22,36,.2);padding:10px;opacity:0;visibility:hidden;transform:translateY(-8px);transition:opacity .2s var(--ease),transform .2s var(--ease); }
  .cd-ccmenu.open { opacity:1;visibility:visible;transform:none; }
  .cd-ccsearch { position:relative;margin-bottom:8px; }
  .cd-ccsearch svg { position:absolute;left:12px;top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--muted); }
  .cd-ccsearch input { width:100%;height:42px;padding:0 12px 0 36px;font-size:14px;border:1px solid var(--line);border-radius:9px;background:#fff; }
  .cd-ccsearch input:focus { outline:none;border-color:var(--blue); }
  .cd-cclist { max-height:262px;overflow-y:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:1px;scrollbar-width:thin; }
  .cd-cclist::-webkit-scrollbar { width:8px; }
  .cd-cclist::-webkit-scrollbar-thumb { background:var(--gray);border-radius:8px;border:2px solid #fff; }
  .cd-ccopt { display:flex;align-items:center;gap:11px;width:100%;padding:9px 11px;border-radius:9px;text-align:left;font-size:14px;color:var(--navy);transition:background .15s var(--ease); }
  .cd-ccopt:hover,.cd-ccopt.active,.cd-ccopt[aria-selected="true"] { background:#eef4f9; }
  .cd-ccopt img { width:24px;height:24px;border-radius:50%;flex:none;box-shadow:0 0 0 1px rgba(12,39,60,.08); }
  .cd-ccopt__name { flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
  .cd-ccopt__dial { color:var(--muted);font-variant-numeric:tabular-nums;font-size:13.5px; }
  .cd-ccopt__check { width:16px;height:16px;color:var(--blue);opacity:0;flex:none; }
  .cd-ccopt[aria-selected="true"] .cd-ccopt__check { opacity:1; }
  .cd-ccempty { padding:18px;text-align:center;font-size:13.5px;color:var(--muted); }
  .cd-ccmenu { position: fixed; top: 0; left: 0; }
  .cd-cclist { max-height: var(--cd-cclist-max, 262px); }

  /* Client review: "scroll in dropdown ... and not whole page scroll".
     The list contains its own overscroll; the menu around it did not, so a
     wheel over its padding or its search box chained to the document and
     dragged the open menu off the viewport (tools/build_assets.py
     picker_menu_contains_scroll). */
  .cd-ccmenu { overflow: hidden; overscroll-behavior: contain; }

/* Client review: the mega panel's height eases when it changes, instead of
   snapping (tools/build_assets.py mega_panel_morph). The module pins a px
   height on .nav__panel for the length of a switch and clears it again; these
   rules are what make that read as one sheet growing or shrinking rather than
   two sheets of different heights crossing over each other.

   The timing is the panel's own fade, read off the rule above rather than typed
   here, so the height moves with the rest of the site's motion. */
  /* transform is named here although height is what we came for: this rule
     REPLACES the panel's own transition shorthand, so anything the design fades
     has to be repeated or it snaps the moment .is-open goes. Without it a close
     that lands inside a morph dropped the sheet's 8px in a single frame at full
     opacity - the most visible frame of the whole close. */
  .nav__panel.grea-morph { overflow: hidden;
    transition: height .28s var(--ease), opacity .28s var(--ease), visibility .28s var(--ease),
      transform .28s var(--ease); }
  /* The incoming sheet is the outgoing one continued: it takes over the frost
     at the height the other had reached, with no fade or 8px drop of its own -
     only its contents cross-fade. Once .is-open goes the rule above applies
     again, so closing still fades exactly as the design drew it. */
  .nav__mega.is-open > .nav__panel.grea-morph { transition: height .28s var(--ease); transform: none; }
  /* The audience switch is the SAME sheet, and it may still be running the
     entrance - the investor card is only a pointer-flick below the trigger. So
     it gets a class of its own that ADDS height to the design's list instead of
     replacing it: a property dropping out of transition-property has its
     running transition cancelled and jumps to its end value, which snapped a
     sheet still at a fifth of its opacity to fully open in one frame. It is
     placed after the rule above so it wins the tie if an item morph left its
     class on this same panel. */
  .nav__mega.is-open > .nav__panel.grea-morph--h,
  .nav__panel.grea-morph--h { overflow: hidden;
    transition: height .28s var(--ease), opacity .28s var(--ease),
      transform .28s var(--ease), visibility .28s var(--ease); }
  /* The contents cross-fade with a beat between them rather than dissolving
     through each other: the old list is gone by 45% and the new one starts at
     35%, because two sets of Georgian text at half opacity in the same place
     read as neither. Both are fractions of the design's own duration. */
  .nav__panel.grea-morph--in > .mega {
    animation: grea-mega-in calc(.28s * .65) var(--ease) calc(.28s * .35) both; }
  /* The outgoing sheet gives up its background at once - two frosted panels
     stacked for a quarter second read as a flash - but keeps its content for
     the cross-fade, clipped to the same animating height. It also stops taking
     the pointer: it is transparent but still hit-testable until visibility
     lands, and the later mega in the DOM sits above the one that replaced it.
     transform stays none for its whole life, so a close catching it mid-fade
     leaves it where it stands rather than sliding a frostless sheet. */
  .nav__panel.grea-morph--out { transform: none; background: transparent; box-shadow: none;
    border-bottom-color: transparent; -webkit-backdrop-filter: none; backdrop-filter: none;
    pointer-events: none;
    transition: height .28s var(--ease), opacity calc(.28s * .45) var(--ease), visibility .28s var(--ease); }
  /* The services audience switch. The outgoing list leaves the flow, so the
     height the panel eases to is the incoming list's, and fades where it stood
     rather than leaving a hole above the incoming one. */
  .svcphs.grea-morph { position: relative; }
  .svcpanel.grea-morph--out { display: block; position: absolute; top: 0; left: 0; right: 0;
    pointer-events: none; animation: grea-mega-out calc(.28s * .45) var(--ease) both; }
  .svcpanel.grea-morph--in {
    animation: grea-mega-in calc(.28s * .65) var(--ease) calc(.28s * .35) both; }
  @keyframes grea-mega-in { from { opacity: 0; } to { opacity: 1; } }
  @keyframes grea-mega-out { from { opacity: 1; } to { opacity: 0; } }
  /* The module never starts a morph under reduce; this is for the preference
     being turned on while one is in flight. */
  @media (prefers-reduced-motion: reduce) {
    .nav__panel.grea-morph, .nav__panel.grea-morph--h,
    .nav__mega.is-open > .nav__panel.grea-morph,
    .nav__mega.is-open > .nav__panel.grea-morph--h { transition: none; }
    .nav__panel.grea-morph--in > .mega,
    .svcpanel.grea-morph--out, .svcpanel.grea-morph--in { animation: none; }
  }

/* Client review: every scroll carousel drags with a mouse
   (tools/build_assets.py drag_carousels). The module adds .grea-draggable to a
   rail only while it actually overflows, so a row that fits shows no grab
   cursor; .drag is the prototype's own name for the state, and its rules here
   are the homepage's. Selection is suppressed during a drag rather than
   always, so the text in these rows stays selectable. */
  .grea-draggable { cursor: grab; }
  .grea-draggable.drag { cursor: grabbing; scroll-behavior: auto; scroll-snap-type: none; user-select: none; -webkit-user-select: none; }
  .grea-draggable.drag img { -webkit-user-drag: none; }


/* The studio credit, in the Back to top button's place: the button's height,
   so the footer's bottom bar keeps the design's. */
.sf-credit { min-height: 38px; }


/* --- services band ---------------------------------------------------------
   The design's two equal columns suit exactly four items. Projects carry one
   to five, so five left an orphan box on its own row and one stretched a
   single box across half the band. Tags wrap to their own width instead, and
   a picked service is a link to its own page. */
.invlist {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  grid-template-columns: none;
}

.invlist li {
  padding: 10px 16px 10px 12px;
  border-radius: 999px;
  gap: 9px;
}

.invlist__ic {
  width: 20px;
  height: 20px;
}

.invlist__ic svg { width: 12px; height: 12px; }

.invlist a {
  color: inherit;
  text-decoration: none;
}

.invlist li:has(a) {
  transition: border-color 0.16s var(--ease), background-color 0.16s var(--ease);
}

.invlist li:has(a):hover {
  border-color: var(--blue);
  background: var(--blue-lightest);
}

@media (max-width: 520px) {
  .invlist { gap: 8px; }
  .invlist li { padding: 9px 13px 9px 10px; font-size: 13.5px; }
}


/* The address line's Show on map link. Quiet - it sits on the hero photograph
   beside the address, and it is a convenience, not the page's call to action. */
.hero__addr {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.hero__map {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: 4px;
  padding: 4px 10px 4px 8px;
  border: 1px solid rgba(255, 255, 255, 0.28);
  border-radius: 999px;
  color: #fff;
  font-size: 12.5px;
  line-height: 1;
  text-decoration: none;
  white-space: nowrap;
  backdrop-filter: blur(4px);
  background: rgba(255, 255, 255, 0.08);
  transition: background-color 0.16s var(--ease), border-color 0.16s var(--ease);
}

.hero__map svg { width: 14px; height: 14px; }
.hero__map:hover { background: rgba(255, 255, 255, 0.18); border-color: rgba(255, 255, 255, 0.45); }
.hero__map:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }


/* The overview band's second column on a project whose Status is Completed,
   where the price panel is gone. The same column, radius and sticky offset the
   panel uses, so the band reads the same either way - what changes is that the
   column holds the project instead of a price. */
.pshot {
  position: sticky;
  top: calc(var(--h-sm) + 18px);
  margin: 0;
  border-radius: 16px;
  overflow: hidden;
  background: #eef3f8;
  aspect-ratio: 4 / 5;
}

.pshot img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* The facts the price card would have carried - handover, size, units - which
   otherwise have nowhere to render on a project with no price. */
.pshot__facts:not(:empty) {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  padding: 14px 16px;
  display: grid;
  gap: 6px;
  background: linear-gradient(to top, rgba(8, 22, 36, 0.86), rgba(8, 22, 36, 0));
  color: #fff;
}

.pshot__fact {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  font-size: 13px;
  line-height: 1.3;
}

.pshot__fact span { color: rgba(255, 255, 255, 0.72); }
.pshot__fact b { font-weight: 600; }

/* Below the band's own breakpoint there is one column and the gallery is just
   below, so the photograph goes - but the facts it carries have nowhere else
   to be on a project with no price, so they stay, as the hairline rows the
   specs table further down the page already uses. */
@media (max-width: 1040px) {
  .pshot {
    position: static;
    aspect-ratio: auto;
    background: none;
    border-radius: 0;
    overflow: visible;
  }
  .pshot img { display: none; }
  .pshot__facts:not(:empty) {
    position: static;
    padding: 0;
    margin-top: 26px;
    gap: 0;
    background: none;
    color: inherit;
  }
  .pshot__fact {
    padding: 15px 0;
    border-bottom: 1px solid var(--line);
    font-size: 14.5px;
  }
  .pshot__fact span { color: var(--muted); }
  .pshot__fact b { color: var(--navy); text-align: right; }
}


/* The overview band's second column runs to the bottom of the band. Under the
   price card, a photograph of the project fills the space the card leaves; on
   a completed project the photograph that stands in for the card runs the
   band's height. Neither makes the band taller. */
.pfill { display: none; }

@media (min-width: 1041px) {
  .two:has(> .pfill) { grid-template-rows: auto 1fr; row-gap: 0; }
  .two:has(> .pfill) > :first-child { grid-row: 1 / span 2; }
  .two:has(> .pfill) > .price { grid-column: 2; grid-row: 1; }

  /* Size containment: the photograph contributes nothing to the row, so the
     row is whatever the prose leaves under the card, and the photograph takes
     exactly that. */
  .two > .pfill {
    display: block;
    grid-column: 2;
    grid-row: 2;
    align-self: stretch;
    position: relative;
    container: pfill / size;
  }

  .pfill__in {
    position: absolute;
    top: 18px;
    right: 0;
    bottom: 0;
    left: 0;
    max-height: 760px;
    border-radius: 16px;
    overflow: hidden;
    background: #eef3f8;
    box-shadow: 0 30px 70px -40px rgba(8, 26, 41, 0.45);
  }

  .pfill__in img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  /* Too little room for a photograph to read as one. */
  @container pfill (max-height: 220px) {
    .pfill__in { display: none; }
  }

  .two > .pshot {
    aspect-ratio: auto;
    align-self: stretch;
    min-height: 500px;
    max-height: 1100px;
  }
}
