/* R5 — one bounded content width, with backgrounds free to fill the viewport.
   Load after the R3 shell and hero variants. Intro/journey fragments own their
   scene framing and consume the same width and navigation-clearance tokens. */
:root{
  --gutter:clamp(22px,4vw,64px);
  --nl-max-width:1520px;
  --nl-nav-clearance:112px;
  --nl-viewport-width:100vw;
  --nl-type-width:min(var(--nl-viewport-width),var(--nl-max-width));
  --nl-content-width:min(calc(var(--nl-viewport-width) - 2 * var(--gutter)),var(--nl-max-width));
  --nl-edge:max(var(--gutter),calc((var(--nl-viewport-width) - var(--nl-max-width)) / 2));
}
body.nl-home,body[data-nolvos-immersive-page]{--gutter:clamp(22px,4vw,64px)}
html:has(body.nl-home),html:has(body[data-nolvos-immersive-page]){scroll-padding-top:0}

/* Fixed navigation remains available over every chapter, including the footer.
   Its matte background carries contrast without depending on the scene below. */
body.nl-home .nl-header,
body.nl-home .nl-header.is-reading-hidden,
body.nl-home .nl-header.is-footer-hidden{
  left:var(--nl-edge);right:var(--nl-edge);top:20px;
  transform:none;opacity:1;visibility:visible;pointer-events:auto;
  padding:11px 13px 11px 19px;gap:20px;
  background:#f5f4ee;border:1px solid #18202b1f;border-radius:100px;
  box-shadow:0 3px 18px #18202b0c;
  backdrop-filter:none;-webkit-backdrop-filter:none;
}
body.nl-home .nl-header .nl-logo{width:132px;flex-shrink:0}
body.nl-home .nl-header .nl-header-actions{gap:8px;min-width:0}
body.nl-home .nl-header .nl-contact-pill{display:inline-flex;white-space:nowrap;font-size:12px;min-height:44px;padding:13px 20px;gap:18px}
body.nl-home .nl-header .nl-menu-toggle,
body.nl-home .nl-menu-top .nl-menu-toggle{white-space:nowrap;font-size:12px;min-height:44px;padding:13px 20px;gap:13px}
body.nl-home .nl-header a:focus-visible,
body.nl-home .nl-header button:focus-visible{outline-offset:4px}

/* Ordinary content shares a centred column; its coloured section stays wide. */
body.nl-home .nl-pad{padding-inline:var(--nl-edge)}
body.nl-home .nv-work{padding-inline:var(--nl-edge)}
body.nl-home .nv-work-intro,
body.nl-home .nv-work-grid{width:100%;max-width:var(--nl-max-width);margin-inline:auto}
body.nl-home .nl-story-bottom,
body.nl-home .nl-contact-grid{max-width:var(--nl-max-width);margin-inline:auto}
body.nl-home .nl-footer{padding-inline:var(--nl-edge)}
body.nl-home .nl-footer-top,
body.nl-home .nl-footer-bottom{max-width:var(--nl-max-width);margin-inline:auto}
body.nl-home .nl-footer-next{margin-inline:calc(-1 * var(--nl-edge));padding-inline:var(--nl-edge)}

/* Visuals fill a normal desktop display; type retains its independent cap. */
body.nl-home[data-hero-variant] #nl-scene,
body.nl-home[data-hero-variant] .nl-hero-fallback{
  left:50%;right:auto;width:min(var(--nl-viewport-width),1920px);max-width:1920px;
  transform:translateX(-50%);
}
body.nl-home[data-hero-variant] .nl-hero-copy{
  padding-inline:var(--nl-edge);
  top:max(var(--nl-nav-clearance),clamp(124px,19svh,190px));
}
body.nl-home[data-hero-variant] .nl-hero-grid{max-width:var(--nl-max-width)}
body.nl-home[data-hero-variant] .nl-hero h1{font-size:clamp(30px,calc(var(--nl-type-width) * .0325),58px)}
body.nl-home[data-hero-variant] .nl-hero h1>span{white-space:nowrap}
/* Hit-test the real title for local glyph response; hero clicks still bubble. */
body.nl-home[data-hero-variant] .nl-hero h1,
body.nl-home[data-hero-variant] .nl-hero-grid>p{pointer-events:auto}
/* Only the currently active tunnel phase may receive local ink response. */
body.nl-home .nl-journey-phase:not([inert]) h2{pointer-events:auto}
body.nl-home[data-hero-variant] .nl-hero-foot{left:var(--nl-edge);right:var(--nl-edge)}
/* The light word studio shares the cream page; no dark fallback flash. */
body.nl-home[data-hero-variant] .nl-hero{background:#f5f4ee}
body.nl-home[data-hero-variant=words] .nl-hero-copy{color:#18202b}
body.nl-home[data-hero-variant=words] .nl-hero-fallback{background:#f5f4ee}
body.nl-home[data-hero-variant=words] .nl-explore,
body.nl-home[data-hero-variant=words] .nl-hero-interaction-hint{background:#ffffffb8;color:#344253;backdrop-filter:none}
body.nl-home[data-hero-variant=words] .nl-explore-icon{border-color:#34425340}
/* Keep the approved readability gradient after the sampled live composition. */
body.nl-home[data-hero-variant=surface] .nl-hero:has(>.nl-immersive-surfaces)::after{z-index:6}

/* Intro, film and product windows share the same width. The film keeps its
   complete 16:9 frame in normal flow, without a second viewport-height cap. */
body.nl-home .nl-reel{height:auto;padding:0 var(--nl-edge) clamp(48px,6vw,88px);scroll-margin-top:var(--nl-nav-clearance)}
body.nl-home .nl-reel-sticky{position:relative;top:auto;width:100%;max-width:var(--nl-max-width);height:auto;min-height:0;margin-inline:auto;padding:0;gap:16px}
body.nl-home .nl-reel-frame{width:100%;max-width:var(--nl-max-width);height:auto;min-height:0;max-height:none;aspect-ratio:16/9;transform:none!important;will-change:auto}
body.nl-home .nl-reel-preview{display:block;width:100%;height:100%;aspect-ratio:16/9;object-fit:contain;transform:none!important}
body.nl-home .nl-reel-caption{width:100%;max-width:var(--nl-max-width);margin-inline:auto}

/* Existing type scales retain their normal-window size, then stop at 1520px.
   The approved introduction type and the specialised 3D chapters are untouched. */
body.nl-home .nv-work-intro h2{font-size:clamp(38px,calc(var(--nl-type-width) * .051),80px)}
body.nl-home .nv-work-caption h3{font-size:clamp(20px,calc(var(--nl-type-width) * .017),27px)}
body.nl-home .nl-story-title{font-size:clamp(35px,calc(var(--nl-type-width) * .057),90px)}
body.nl-home .nl-footer-next>strong{font-size:clamp(32px,calc(var(--nl-type-width) * .05),80px)}

/* Anchor destinations reserve the fixed pill instead of placing titles below it. */
body.nl-home :is(#approche,#solutions,#methode,#contact,#projet,#cabinets),
body[data-nolvos-immersive-page] main [id]{scroll-margin-top:var(--nl-nav-clearance)}
/* Full-height chapters already reserve this clearance inside their own stage. */
body.nl-home :is(#approche,#contact,#nl-journey){scroll-margin-top:0}

/* A neutral connection badge; it claims no certification or partnership. */
body.nl-home .nl-cabinet-tools{
  display:inline-grid;grid-template-columns:36px minmax(0,1fr);align-items:center;gap:2px 12px;
  max-width:100%;margin-top:22px;padding:10px 14px;
  border:1px solid #c9ddcb;border-radius:17px;
  background:#edf4ec;color:#24583d;font-size:14px;line-height:1.35;
}
body.nl-home .nl-cabinet-tools img{grid-row:1/3;width:36px;height:36px;object-fit:contain;flex:none}
body.nl-home .nl-cabinet-tools>span:not(.nl-cabinet-tools-caption){font-weight:600}
body.nl-home .nl-cabinet-tools .nl-cabinet-tools-caption{grid-column:2;font-size:11px;line-height:1.4;color:#597463}

/* Interior previews keep their existing smaller columns, but never exceed the cap. */
body[data-nolvos-immersive-page] .wrap{max-width:min(var(--nl-max-width),1328px);margin-inline:auto}

@media(max-width:760px){
  :root{--gutter:18px;--nl-nav-clearance:94px}
  body.nl-home,body[data-nolvos-immersive-page]{--gutter:18px}
  body.nl-home .nl-header,
  body.nl-home .nl-header.is-reading-hidden,
  body.nl-home .nl-header.is-footer-hidden{left:12px;right:12px;top:12px;padding:8px 9px;gap:8px}
  body.nl-home .nl-header .nl-logo{width:clamp(74px,21vw,96px)}
  body.nl-home .nl-header .nl-header-actions{gap:6px}
  body.nl-home .nl-header .nl-contact-pill{display:inline-flex;font-size:9px;line-height:1.2;min-height:36px;padding:10px 8px;gap:0}
  body.nl-home .nl-header .nl-contact-pill>span:last-child{display:none}
  body.nl-home .nl-header .nl-menu-toggle,
  body.nl-home .nl-menu-top .nl-menu-toggle{font-size:9px;line-height:1.2;min-height:36px;padding:10px 9px;gap:7px}
  body.nl-home[data-hero-variant] .nl-hero-copy{top:max(var(--nl-nav-clearance),124px)}
  body.nl-home[data-hero-variant] .nl-hero h1{font-size:clamp(17px,5.05vw,36px);line-height:1.22}
  body.nl-home .nv-work-intro h2{font-size:clamp(35px,8vw,58px)}
  body.nl-home .nv-work-caption h3{font-size:clamp(20px,1.7vw,27px)}
  body.nl-home .nl-story-title{font-size:7.2vw}
  body.nl-home .nl-footer-next>strong{font-size:34px}
  body.nl-home .nl-cabinet-tools{gap:2px 10px;padding:9px 11px;font-size:13px}
}
@media(max-width:380px){
  body.nl-home .nl-header .nl-menu-icon,
  body.nl-home .nl-menu-top .nl-menu-icon{display:none}
}

/* R5 — native automatic passage, frontal cabinet screen, readable conclusion. */
body.nl-home .nl-journey{height:720svh;background:var(--paper)}
body.nl-home .nl-journey-screen{width:var(--nl-content-width,min(calc(100vw - 2 * var(--gutter)),1520px));max-width:var(--nl-max-width,1520px);margin-inline:auto;top:var(--nl-nav-clearance,112px);height:calc(100svh - var(--nl-nav-clearance,112px) - 18px);min-height:0;border-radius:16px;transform:none;overflow:clip}
body.nl-home .nl-journey-screen #nl-tunnel-scene{clip-path:none!important;opacity:var(--portal-enter,0);transition:opacity .18s linear}
body.nl-home .nl-portal-intro{inset:0;display:grid;grid-template-columns:minmax(0,1.16fr) minmax(280px,.9fr);gap:clamp(28px,5vw,72px);width:100%;max-width:var(--nl-max-width,1520px);padding:clamp(30px,6svh,64px) clamp(22px,4vw,60px);box-sizing:border-box}
body.nl-home .nl-portal-device{width:100%;min-width:0;max-width:760px;margin:0;border:1px solid #17243426!important;border-radius:12px;transform:translateY(calc(var(--portal-enter,0)*-12px)) scale(calc(1 + var(--portal-enter,0)*.05))!important;transform-origin:center;box-shadow:0 18px 50px #10151f14;will-change:auto}
body.nl-home .nl-portal-live{width:100%;aspect-ratio:1.48;max-height:none!important}
body.nl-home .nl-portal-copy{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;justify-self:center;width:100%;max-width:470px;transform:none!important}
body.nl-home .nl-portal-copy h2{font-size:clamp(32px,4.2vw,64px);line-height:1.06;max-width:600px;margin-bottom:22px}
body.nl-home .nl-portal-copy>p:not(.nl-kicker){font-size:clamp(12px,1.05vw,16px);line-height:1.65;max-width:470px}
body.nl-home .nl-portal-copy>.nl-text-link{align-self:flex-start;justify-content:space-between;gap:24px;width:min(100%,280px);margin-top:24px}
body.nl-home .nl-journey-phase{max-width:90%;width:min(90%,1050px)}
body.nl-home .nl-journey-phase h2{font-size:clamp(34px,min(6vw,10svh),84px);line-height:1.12;letter-spacing:-.05em}
body.nl-home .nl-journey-phase[data-journey-phase="3"] h2{font-size:clamp(31px,min(5.1vw,9svh),74px)}
body.nl-home .nl-journey-phase[data-journey-phase="2"] h2{font-size:clamp(34px,min(5.4vw,9.2svh),78px)}
body.nl-home .nl-journey-phase[data-journey-phase="2"] .nl-pill{pointer-events:auto!important}
body.nl-home .nl-journey-hold,body.nl-home .nl-journey-phase>span,body.nl-home .nl-journey-footer>span{display:none!important}
body.nl-home .nl-journey-footer{justify-content:flex-end;bottom:22px;left:24px;right:24px}
body.nl-home .nl-journey-footer>a{font-size:11px;background:#16233ed9;padding:8px 13px;border-radius:20px}
body.nl-home .nl-contact{overflow:clip}
body.nl-home .nl-contact-cinematic{height:190svh;min-height:0}
body.nl-home .nl-contact-stage{width:var(--nl-content-width,min(calc(100vw - 2 * var(--gutter)),1520px));max-width:var(--nl-max-width,1520px);margin-inline:auto;top:var(--nl-nav-clearance,112px);height:calc(100svh - var(--nl-nav-clearance,112px) - 18px);min-height:0;padding:32px 28px 30px;border-radius:16px;overflow:clip}
body.nl-home .nl-contact-cinematic .nl-contact-title{position:absolute;left:22px;right:22px;top:50%;translate:0 -50%;width:auto;max-width:1080px;margin:0 auto;padding:0 .02em .12em;font-size:clamp(36px,min(7.4vw,11svh),105px);line-height:1.12;letter-spacing:-.055em;text-align:center;transform:none!important;opacity:1!important;overflow:visible;z-index:3}
body.nl-home .nl-contact-title a{display:inline-block;position:relative;color:inherit;text-decoration:none}
body.nl-home .nl-contact-title a>i{display:none}
body.nl-home .nl-contact-title .nl-type-word,body.nl-home .nl-contact-title .nl-type-letter{overflow:visible}
body.nl-home .nl-contact-title .nl-type-letter>i{transform:none!important;animation:none!important}
body.nl-home .nl-contact-title .nl-type-letter>i::after{display:none}
body.nl-home .nl-finale-caption{left:28px;right:28px;bottom:22px;max-width:calc(100% - 56px);font-size:8px}
body.nl-home .nl-contact-stage .nl-section-line{position:relative;z-index:3}
body.nl-home #nl-finale-scene{touch-action:pan-y}
@media(max-width:760px){
 body.nl-home .nl-journey{height:650svh}
 body.nl-home .nl-journey-screen,body.nl-home .nl-contact-stage{top:var(--nl-nav-clearance,94px);height:calc(100svh - var(--nl-nav-clearance,94px) - 14px);border-radius:12px}
 body.nl-home .nl-portal-intro{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto;align-content:center;gap:24px;padding:28px 20px}
 body.nl-home .nl-portal-copy{grid-row:1;align-items:center;text-align:center;max-width:480px;margin-inline:auto}
 body.nl-home .nl-portal-device{grid-row:2;width:100%;max-width:540px;margin:auto;transform:translateY(calc(var(--portal-enter,0)*-8px)) scale(calc(1 + var(--portal-enter,0)*.025))!important}
 body.nl-home .nl-portal-copy h2{font-size:34px;margin-bottom:15px}
 body.nl-home .nl-portal-copy .nl-kicker{margin-bottom:15px}
 body.nl-home .nl-portal-copy>p:not(.nl-kicker){font-size:12px;line-height:1.6}
 body.nl-home .nl-portal-copy .nl-text-link{align-self:center;margin-top:16px;font-size:11px}
 body.nl-home .nl-journey-phase h2,body.nl-home .nl-journey-phase[data-journey-phase="2"] h2{font-size:clamp(29px,8vw,48px)}
 body.nl-home .nl-journey-phase[data-journey-phase="3"] h2{font-size:clamp(27px,7.2vw,44px)}
 body.nl-home .nl-contact-cinematic{height:170svh}
 body.nl-home .nl-contact-cinematic .nl-contact-title{left:14px;right:14px;font-size:clamp(31px,8.1vw,58px);line-height:1.15}
 body.nl-home .nl-contact-stage{padding:24px 20px}
 body.nl-home .nl-finale-caption{left:20px;right:20px;bottom:20px;font-size:6px}
}
@media(min-width:700px) and (max-height:620px){
 body.nl-home .nl-portal-intro{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);grid-template-rows:auto;gap:28px;padding:20px 28px}
 body.nl-home .nl-portal-device,body.nl-home .nl-portal-copy{grid-row:auto}
 body.nl-home .nl-portal-copy{align-items:flex-start;text-align:left}
 body.nl-home .nl-portal-copy>.nl-text-link{align-self:flex-start}
 body.nl-home .nl-portal-device{width:min(100%,calc((100svh - var(--nl-nav-clearance,112px) - 95px)*1.48));justify-self:center}
 body.nl-home .nl-portal-copy h2{font-size:29px;margin-bottom:12px}
 body.nl-home .nl-portal-copy .nl-kicker{margin-bottom:10px}
 body.nl-home .nl-portal-copy>p:not(.nl-kicker){font-size:11px;line-height:1.5}
 body.nl-home .nl-portal-copy .nl-text-link{margin-top:12px;font-size:10px}
 body.nl-home .nl-contact-cinematic .nl-contact-title{font-size:clamp(34px,8svh,60px)}
 body.nl-home .nl-finale-caption{bottom:14px;font-size:6px}
}
@media(max-width:760px) and (max-height:680px){
 body.nl-home .nl-portal-intro{gap:14px;padding:18px}
 body.nl-home .nl-portal-copy .nl-kicker{display:none}
 body.nl-home .nl-portal-copy h2{font-size:28px;line-height:1.05;margin-bottom:10px}
 body.nl-home .nl-portal-copy>p:not(.nl-kicker){font-size:11px;line-height:1.5}
 body.nl-home .nl-portal-copy .nl-text-link{margin-top:10px}
 body.nl-home .nl-portal-device{max-width:calc((100svh - var(--nl-nav-clearance,94px) - 14px)*.32*1.48)}
}
@media(prefers-reduced-motion:reduce){
 body.nl-home .nl-journey{height:auto!important}
 body.nl-home .nl-journey-screen{position:relative;top:0;height:auto;min-height:0;overflow:visible}
 body.nl-home .nl-portal-intro{position:relative;min-height:0;opacity:1!important;padding-block:45px}
 body.nl-home .nl-portal-device{transform:none!important}
 body.nl-home .nl-contact-cinematic{height:auto}
 body.nl-home .nl-contact-stage{position:relative;top:0;height:70svh;min-height:400px}
}
body.nl-home .has-tunnel-error .nl-journey-screen{position:relative;top:0;height:auto;min-height:0;overflow:visible}
body.nl-home .has-tunnel-error .nl-portal-device{transform:none!important}
