/* Stable content, readable hierarchy and responsive layout. */
[hidden]{display:none!important}
html{scroll-behavior:smooth;scroll-padding-top:105px}
section[id],h2[id],h3[id]{scroll-margin-top:105px}
:is(.brand-case,.service-list>a,.related-work>div>a,.principle-grid article,.kpi-grid article,.outcome-grid article){content-visibility:visible;contain:none}
.section-lux{padding-block:clamp(48px,6vw,88px)}
.section-heading{margin-bottom:40px;gap:24px}
.section-heading h2,.system-copy h2,.profile-copy h2,.deliverables-copy h2,.kpi-section h2,.related-work h2{font-size:clamp(32px,4vw,58px);line-height:1.12;letter-spacing:-.025em}
.section-heading>p,.service-list p{font-size:15px;line-height:1.65}
.gg-home .hero-lux{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(230px,.8fr);gap:48px;align-items:center;min-height:0;padding:150px 6vw 70px}
.gg-home .hero-copy-lux{min-width:0;position:relative;inset:auto;width:auto;padding:0!important}
.gg-home .hero-copy-lux h1{font-size:clamp(42px,5.7vw,82px)!important;line-height:1.1!important;letter-spacing:-.035em;max-width:13ch;margin:28px 0}
.gg-home .hero-copy-lux .overline{font-size:12px;line-height:1.7;white-space:normal;letter-spacing:.1em}
.gg-home .hero-deck{margin:0;max-width:640px;padding:0}
.gg-home .hero-deck>p{font-size:19px;line-height:1.65;margin:0 0 24px;color:#ded9d0}
.gg-home .hero-deck>div{display:flex;flex-wrap:wrap;gap:12px}
.gg-home .portrait-lux{position:relative!important;inset:auto!important;width:100%!important;max-width:360px;align-self:center;justify-self:center;transform:none!important;margin:0!important}
.gg-home .portrait-window{height:auto;aspect-ratio:4/5;min-height:0}
.gg-home .hero-ledger{position:static;grid-column:1/-1;margin:0;padding-top:20px;inset:auto}
.gg-home .portrait-label small{font-size:11px;letter-spacing:0}
.gg-home .portrait-label small::before,.gg-home .portrait-label small::after{content:none!important}
.gg-home .portrait-label small{font-size:11px!important;color:#dfc48f!important}
.gg-results{background:#f4efe5;color:#07101f;padding:64px 6vw}
.gg-results-inner{max-width:1320px;margin:auto}
.gg-results h2{font-family:Georgia,serif;font-size:clamp(32px,4vw,54px);font-weight:400;line-height:1.2;margin:16px 0}
.gg-results-inner>p{max-width:78ch;font-size:15px;line-height:1.7;color:#48515e}
.gg-result-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px;margin:28px 0}
.gg-result-grid>a{display:block;background:#fff7;border:1px solid #07101f25;padding:28px;color:#07101f;text-decoration:none;transition:background .15s}
.gg-result-grid>a:hover{background:#fff}
.gg-result-grid strong{display:block;color:#651f36;font-family:Georgia,serif;font-size:30px;font-weight:400;line-height:1.25}
.gg-result-grid h3{font-size:18px;line-height:1.5;margin:20px 0 8px}
.gg-result-grid p{color:#48515e;font-size:14px;line-height:1.65}
.gg-result-grid span,.gg-source{color:#651f36;font-size:14px;text-underline-offset:4px}
.gg-cv-evidence{background:#f4efe5;color:#07101f;padding:48px 6vw;border-top:1px solid #07101f20}
.gg-cv-evidence h2{font-size:clamp(25px,3vw,38px);line-height:1.4;max-width:850px;margin:12px 0}
.gg-cv-evidence .overline{color:#651f36}
.gg-cv-evidence .gg-period{color:#48515e;font-size:15px;text-align:start}
.gg-cv-evidence ul{padding-inline-start:22px;max-width:90ch;font-size:17px;line-height:1.8}
.gg-evidence-source{font-size:13px;line-height:1.8;max-width:90ch;color:#48515e}
.gg-evidence-source a{color:#651f36;text-decoration:underline}
.gg-home .proof-standard{padding-block:24px;text-align:center}
.gg-home .proof-standard p{max-width:unset;font-size:15px;line-height:1.7;margin:0}
.gg-home .proof-standard a{color:#dfc48f;text-decoration:underline;text-underline-offset:4px}
.scope-lux,.recs-lux,.ws-lux,.oc-lux,.bz-lux,.pf-lux,.sv-lux,.cx-lux{padding-block:clamp(40px,5vw,72px)}
.gg-case .case-hero{min-height:0;padding:145px 6vw 75px}
.gg-case .case-hero-copy{width:100%;max-width:980px}
.gg-case .case-hero-copy>.brand-mark{width:180px;height:65px;margin-bottom:22px}
.gg-case .case-hero h1{font-size:clamp(38px,5vw,70px);line-height:1.08;max-width:22ch}
.gg-case .case-hero-copy>p{max-width:65ch;font-size:18px;line-height:1.65}
.gg-case .case-hero-ledger{position:static;display:none}
.case-jump{margin-top:18px}
.gg-case .case-statement h2,.gg-case .case-truth h2{font-size:clamp(26px,3vw,40px);line-height:1.28}
.gg-case .case-brief{grid-template-columns:120px minmax(0,1fr) minmax(180px,.45fr);gap:32px}
.gg-case .case-brief p{font-size:17px;line-height:1.7}
.gg-case .case-strategy h2{font-size:32px;line-height:1.25}
.gg-case .case-craft{min-height:0}
.gg-case .principle-grid article{min-height:0}
.gg-case .principle-grid h3{margin-top:20px}
.gg-case .cx-shot{max-height:500px;overflow:hidden;display:block}
.gg-case .cx-shot img{width:100%;height:auto;object-fit:cover}
.service-hero{min-height:0!important;padding-block:140px 70px!important}
.service-hero h1{font-size:clamp(40px,5vw,76px)!important;line-height:1.1!important}
.service-contact{flex-wrap:wrap}
.service-contact .gg-form{flex-basis:100%;width:100%}
.gg-contact{padding-block:64px}
.gg-contact h2,.contact-lux h2{font-size:clamp(36px,5vw,68px);line-height:1.12}
.brand-case-grid{gap:20px}
.blog-grid>article,.blog-grid>article>a{min-width:0;max-width:100%;overflow-wrap:anywhere}
.brand-case{min-height:380px}
.gg-filter-status{font-size:14px;color:#d7cbbb;margin:15px 0}
.filter-lux{flex-wrap:wrap;gap:8px}
.filter-lux button{min-height:44px;font-size:12px;padding:10px 14px}
.menu-button{display:flex!important;min-width:56px;width:68px}
.gg-menu-open{overflow:hidden}
.menu-overlay{overflow:auto;overscroll-behavior:contain}
.gg-menu-close{position:absolute;inset-block-start:24px;inset-inline-end:24px;min-height:44px;padding:10px 20px;background:#07101f;color:#f4efe5;border:1px solid #c9a96e;font:inherit;cursor:pointer}
.gg-privacy-settings{background:none;border:1px solid currentColor;color:inherit;padding:10px 16px;font:inherit;font-size:13px;cursor:pointer;min-height:44px;margin-top:20px}
.gg-consent{padding:12px 16px;max-width:620px;gap:12px;font-size:13px;box-shadow:0 4px 25px #0004}
.gg-consent p{flex:1 1 270px;line-height:1.5}
.gg-consent div{gap:8px}
.gg-consent button{min-height:40px;padding:8px 14px;background:transparent;color:#f4efe5;border:1px solid #c9a96e}
.gg-consent button:last-child{background:transparent;color:#f4efe5}
.gg-form .gg-note{font-size:13px;line-height:1.7}
.gg-form input,.gg-form textarea{font-size:16px;max-width:100%}
.gg-form [aria-invalid="true"]{border-color:#ffb4a8}
a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid #bb934b;outline-offset:4px}
html[dir=rtl] .gg-home .hero-copy-lux h1{font-size:clamp(36px,4.7vw,66px)!important;line-height:1.55!important;max-width:15ch}
html[dir=rtl] .gg-home .hero-deck>p{font-size:18px;line-height:1.95}
html[dir=rtl] .gg-home .hero-lux{padding-block:145px 70px;grid-template-columns:minmax(0,1.6fr) minmax(230px,.8fr)}
html[dir=rtl] .gg-case .case-hero h1,html[dir=rtl] .service-hero h1{line-height:1.5!important}
@media(max-width:900px){
 .gg-result-grid{grid-template-columns:1fr}
 .gg-home .hero-lux,html[dir=rtl] .gg-home .hero-lux{grid-template-columns:minmax(0,1fr);padding:110px 24px 44px;gap:32px}
 .gg-home .hero-copy-lux h1{max-width:16ch}
 .gg-home .portrait-lux{max-width:300px}
 .gg-home .hero-ledger{grid-column:1}
 .gg-case .case-brief{grid-template-columns:1fr}
 .gg-case .case-hero{padding:110px 24px 45px}
 .site-nav .nav-signature{display:none}
 .gg-home .section-heading{grid-template-columns:1fr}
 .section-heading>p{grid-column:auto}
}
@media(max-width:600px){
 .blog-grid{grid-template-columns:minmax(0,1fr)}
 .blog-grid>article>a{padding-inline:22px}
 .gg-results,.gg-cv-evidence{padding:40px 20px}
 .gg-home .hero-lux,html[dir=rtl] .gg-home .hero-lux{padding-inline:20px}
 .gg-home .hero-copy-lux h1{font-size:43px!important;line-height:1.12!important}
 html[dir=rtl] .gg-home .hero-copy-lux h1{font-size:36px!important;line-height:1.5!important}
 .gg-home .hero-deck>p{font-size:17px}
 .gg-home .hero-deck>div{display:grid;grid-template-columns:1fr}
 .gg-home .hero-deck a{justify-content:center;text-align:center;width:100%;min-height:48px;padding-inline:12px;white-space:normal}
 .gg-home .portrait-lux{margin-top:8px!important}
 .gg-home .section-heading h2{font-size:34px}
 .gg-case .case-hero h1{font-size:40px}
 .gg-consent{inset-inline:10px;inset-block-end:10px;padding:12px;gap:9px}
 .gg-consent p{flex-basis:100%;font-size:12px}
 .gg-consent div{width:100%}
 .gg-consent button{flex:1}
 .service-hero{padding-block:110px 45px!important}
 .service-orbital-visual{max-height:360px}
 .filter-lux button{letter-spacing:0;max-width:100%}
 .gg-case .case-services,.gg-case .case-evidence{padding-inline:20px}
}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}

/* ============================================================================
   gg-fixes-20260909 - responsive, legibility and target size
   Measured across all 102 sitemap URLs at 320/360/390/768/1024/1280/1440.
   ========================================================================== */

/* 1. The kicker class name "overline" collides with a Tailwind utility of the
   same name, so every kicker also carried text-decoration-line:overline. That
   draws a rule above EVERY wrapped line box, which is the broken doubled rule
   seen at 360-414px and 768-834px, with the separator dot orphaned on line 2.
   The intended rule is the <i> bar inside .overline, not a text decoration. */
.overline{text-decoration-line:none;flex-wrap:wrap;row-gap:6px}
.overline i{flex:0 0 auto}

/* 2. Horizontal scroll at 320px on 7 pages. Three position:fixed elements were
   sized by their content rather than the viewport, so their min-content width
   (323-355px) pushed the document past 320px. */
.site-nav,.menu-overlay,.gg-consent{max-width:100vw}
.site-nav,.site-nav>*,.menu-overlay>*,.pf-row,.pf-row>*{min-width:0}
.site-nav .nav-signature{overflow:hidden}
.menu-overlay{overflow-x:hidden}
.gg-consent p{flex-basis:auto;min-width:0}
@media(max-width:359px){
  .site-nav{width:calc(100% - 12px)}
  .gg-consent{inset-inline:8px;max-width:calc(100vw - 16px)}
  .gg-consent p{flex:1 1 100%}
  .pf-row{grid-template-columns:minmax(0,1fr)}
}

/* 3. From 700px to 959px the language pill and the Menu button sat flush
   against each other with a zero-pixel gap. */
.locale-site-nav .language-switch{margin-inline-end:14px}

/* 4. Text under 12px. 10px and 10.5px on the eight service pages in both
   languages, 11px on both home pages, 11.5px on the toolkit article. */
.portrait-label small{font-size:12px!important}
.process-node small,.process-node strong{font-size:12px!important}
.service-hero-foot span{font-size:12px!important}
.ca-stat span,.ca-file small,.ca-file small bdi,.ca-call b.t,.ca-rel a i{font-size:12.5px!important}

/* 5. Tap targets below the WCAG 2.2 AA minimum of 24x24. The Privacy link
   inside the consent banner was 39x14 (49x18 in Arabic) on all 102 pages;
   "View source" and "Source: published resume" were 15-21px tall. */
.gg-consent p a,a.gg-source,.proof-standard p a,.pf-link,.ca-source,.gg-cv-evidence a{
  display:inline-block;min-height:24px;padding-block:4px;line-height:1.6}
.site-nav nav a{min-width:24px;padding-block:6px;display:inline-flex;align-items:center;justify-content:center}

/* 6. The consent banner sits over the content it is asking about. Leave room
   for it at the foot of the page while it is open. */
body:has(.gg-consent[data-open="1"]) footer{padding-bottom:96px}

/* ---- 7. the last 320px overflows, found by hiding subtrees one at a time ----
   Not the fixed chrome after all: the nav/overlay/consent offsets were symptoms
   of an already-wide document. The two real sources were unbreakable strings.
   - <h1> on four long article titles: the box is 269px but a single long word
     ("Privacy-First", "Architecture:") renders past it and extends the page.
   - The email address in .pf-contact makes that link 308px inside 22px padding.
   - .pf-kpi declares a hard 300px grid track. */
h1,h2,h3,h4,.article-hero h1,.case-hero h1,.service-hero h1{overflow-wrap:break-word}
.pf-contact,.pf-contact a,.pf-contact a *{min-width:0;overflow-wrap:anywhere}
@media(max-width:400px){
  .pf-kpi{grid-template-columns:minmax(0,1fr)}
  .pf-grid{grid-template-columns:minmax(0,1fr)}
}

/* the earlier .gg-home-scoped rule outranked the plain one */
.gg-home .portrait-label small{font-size:12px!important}

/* bind the separator to the word before it so a wrapped kicker never starts
   a line with a lone dot; the break guard keeps 320px safe. */
.overline{overflow-wrap:break-word}
