/* The native rail also serves as the accessible fallback for the desktop
   scroll-driven scene. Established left and right page gutters stay clear. */
#news.news{--news-ink-rgb:var(--ink-rgb);position:relative;padding:0;background:var(--paper);color:var(--ink)}
#news{--news-gap:clamp(18px,1.4vw,28px)}
#news .news-inner{padding:clamp(112px,9vw,176px) var(--section-right) clamp(88px,8vw,144px) var(--page-left);min-width:0}
#news .news-heading{gap:32px;align-items:center;padding:0;margin-bottom:44px}
#news .news-heading-links{display:flex;align-items:center;gap:28px;flex-wrap:wrap}
#news .news-heading h2{font-size:clamp(36px,3.2vw,60px);line-height:1.1;font-weight:400}
#news .all-news-link{flex-shrink:0;flex-direction:row-reverse;gap:12px;margin:0;border-bottom:1px solid transparent;text-decoration:none;font-size:16px;font-weight:400}
#news .all-news-link:hover,#news .all-news-link:focus-visible{border-bottom-color:currentColor}
#news .all-news-link span{display:inline;width:auto;height:auto;background:transparent;color:currentColor;font-size:22px;line-height:1}
#news .news-rail-wrap{position:relative;min-width:0}
/* The next control stays on the exposed right-hand photograph, outside the
   moving rail. Its photo-relative position is refreshed only on layout changes. */
#news .news-next{position:absolute;z-index:3;right:16px;top:var(--news-next-top,0px);display:grid;place-items:center;width:64px;height:64px;padding:0;border:0;border-radius:50%;background:#000;color:#fff;transform:translateY(-50%);cursor:pointer;touch-action:manipulation}
#news .news-next[hidden]{display:none}
#news .news-next svg{display:block;width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
#news .news-next:hover:not(:disabled){background:#171717}
#news .news-next:focus-visible{outline:2px solid #fff;outline-offset:3px;box-shadow:0 0 0 5px #000}
#news .news-next:disabled{color:#777;cursor:default}
#news .news-grid{position:relative;display:grid;grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:40%;gap:var(--news-gap);min-width:0;max-width:100%;margin:0;padding:6px 0 18px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scroll-padding-inline:0;transform:none;scrollbar-width:thin}
#news .news-grid.is-news-rail-ready{scrollbar-width:none}
#news .news-grid.is-news-rail-ready::-webkit-scrollbar{display:none}
#news .news-card{min-width:0;padding:0;border:0;scroll-snap-align:start}
#news .news-photo-link{display:block;border-radius:8px;overflow:hidden}
#news .news-image{display:block;width:100%;height:var(--news-photo-height,auto);aspect-ratio:3/2;object-fit:cover;object-position:center;border-radius:8px}
#news .news-card-body{display:block;margin-top:22px}
#news .news-view-link{display:none}
#news .news-story-meta{margin:0;color:rgba(var(--news-ink-rgb),.72);font-size:14px;line-height:1.6;letter-spacing:.01em}
#news .news-card h3{max-width:32ch;margin:20px 0 0;font-size:clamp(22px,1.6vw,30px);line-height:1.3;font-weight:400;letter-spacing:-.025em;overflow-wrap:break-word}
#news a:not(.all-news-link):hover{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:5px}
#news a:hover,#news a:focus-visible{color:inherit}
#news a:focus-visible{outline:2px solid currentColor;outline-offset:5px}
#news .news-grid:focus-visible{outline:2px solid var(--ink);outline-offset:-3px}
/* A range keeps the reference's thin track usable with a mouse or keyboard. */
#news .news-progress{flex:0 1 17%;min-width:128px;height:32px;margin:0;padding:0;border:0;background:transparent;appearance:none;-webkit-appearance:none;cursor:pointer;color:var(--ink)}
#news .news-progress[hidden]{display:none}
#news .news-progress::-webkit-slider-runnable-track{height:2px;background:rgba(var(--news-ink-rgb),.16);border-radius:2px}
#news .news-progress::-webkit-slider-thumb{appearance:none;-webkit-appearance:none;width:clamp(40px,4vw,80px);height:2px;border:0;border-radius:2px;background:rgba(var(--news-ink-rgb),.65)}
#news .news-progress::-moz-range-track{height:2px;background:rgba(var(--news-ink-rgb),.16);border-radius:2px}
#news .news-progress::-moz-range-thumb{width:clamp(40px,4vw,80px);height:2px;border:0;border-radius:2px;background:rgba(var(--news-ink-rgb),.65)}
#news .news-progress:focus-visible{outline:2px solid var(--ink);outline-offset:3px}
#news .news-progress:disabled{cursor:default}
@media(max-width:900px){
  #news.news{margin:0}
  #news .news-inner{padding:88px 24px 80px}
  #news .news-heading{gap:20px;flex-wrap:wrap;margin-bottom:28px}
  #news .news-heading h2{font-size:clamp(28px,7vw,38px)}
  #news .news-heading-links{gap:18px}
  #news .all-news-link{font-size:14px;gap:8px}
  #news .news-grid{grid-auto-columns:66%}
  #news .news-next{right:10px;width:48px;height:48px}
  #news .news-card-body{margin-top:18px}
  #news .news-card h3{font-size:24px;margin-top:14px}
  #news .news-progress{flex-basis:100%;min-width:0;width:100%}
}
@media(max-width:600px){#news .news-grid{grid-auto-columns:84%;gap:18px}}

/* Title → four stories → archive invitation. The native rail is the fallback;
   desktop enhancement moves the same accessible content with vertical scroll. */
#news.news{--news-gap:clamp(24px,2vw,40px);--news-card-width:60vw;--news-end-width:clamp(240px,32vw,480px);--news-title-size:24px;--news-date-size:14px;--news-button-size:14px;--news-top-clearance:100px;scroll-margin-top:calc(var(--home-nav-height,64px) + var(--home-nav-gap,10px) + 24px)}
#news.news .news-inner{padding:88px var(--section-right) 72px var(--page-left)}
#news.news .news-heading{display:flex;flex:0 0 max(200px,30%);align-items:center;justify-content:center;margin:0;padding:0;min-width:0}
#news.news .news-heading-links{display:flex;flex-direction:column;align-items:flex-start;gap:32px;width:100%}
#news .news-heading h2{max-width:10ch;margin:0;overflow-wrap:anywhere}
/* Independent panel widths keep the compact closing card from reserving a
   photo-sized empty slot. The scroll controller measures these real widths. */
/* Stretch complete stories to the same row height. Centre alignment moves
   shorter headlines' photographs down even when every photo is the same size. */
#news.news .news-grid{display:flex;align-items:stretch;padding:0}
#news.news .news-card{flex:0 0 min(100%,var(--news-card-width));display:flex;flex-direction:column}
#news .news-card .news-photo-link{flex:none}
#news .news-card .news-card-body{flex:1}
#news .news-stage,#news .news-screen{position:relative}
#news .news-screen{background:var(--paper)}
/* Only the width is compact; stretch to the complete photo-and-caption row. */
#news .news-end{display:flex;flex:0 0 min(100%,var(--news-end-width));flex-direction:column;align-items:center;justify-content:center;align-self:stretch;gap:24px;min-width:0;min-height:0;padding:clamp(24px,2.5vw,40px);border-radius:8px;background:var(--copper,#0061ff);color:#fff;text-align:center;scroll-snap-align:start}
#news .news-end p{max-width:min(19ch,100%);margin:0;font-size:var(--spa-type-subheading,2rem);line-height:1.2;letter-spacing:-.04em;color:inherit;overflow-wrap:anywhere}
#news .news-end .more-news-link,#news .news-end .more-news-link span{color:inherit}
#news .more-news-link{display:inline-flex;gap:24px;align-items:center;padding:8px 0;border-bottom:1px solid currentColor;font-size:var(--spa-type-small,1rem);line-height:1.25;text-decoration:none}
#news .more-news-link:hover{text-decoration:none}
#news .news-progress{display:block;width:min(240px,100%);margin:32px 0 0 auto}
@media(min-width:901px){
  #news .news-image{max-height:min(var(--news-photo-fit-height,100svh),max(160px,calc(var(--news-viewport,100svh) - var(--news-top-clearance) - 230px)))}
}
#news.news.is-news-horizontal{height:calc(var(--news-viewport) + var(--news-travel));background:transparent;z-index:2;pointer-events:none}
#news.is-news-horizontal .news-stage{height:var(--news-viewport);overflow:clip;transform:translate3d(0,var(--news-pin-y,0px),0)}
#news.is-news-horizontal .news-screen{height:100%;pointer-events:auto;transform:translate3d(var(--news-screen-x,0px),0,0)}
#news.news.is-news-horizontal .news-inner{height:100%;display:flex;justify-content:center;flex-direction:column;padding-top:calc(var(--news-top-clearance) + 24px);padding-bottom:40px}
#news.is-news-horizontal .news-rail-wrap{overflow:clip;flex-shrink:0}
#news.news.is-news-horizontal .news-grid{overflow:visible;scroll-snap-type:none;transform:translate3d(var(--news-track-x,0px),0,0)}
#news.is-news-horizontal :is(.news-next,.news-progress){display:none}
.contact-footer-scene.is-news-handoff{z-index:1;margin-top:calc(var(--news-viewport) * -1);transform:translate3d(0,var(--news-contact-y,0px),0)}
/* The real Contact photograph is revealed by the departing News screen, so
   its separate vertical aperture must not conceal it during the handoff. */
.contact-footer-scene.is-news-handoff #contact-us.contact-banner .contact-banner-media{clip-path:none}
.contact-footer-scene.is-news-handoff #contact-us.contact-banner .whatsapp-cta-inner{opacity:1;transition:none}
.contact-footer-scene.is-news-handoff #contact-us.contact-banner.is-news-contact .whatsapp-button{pointer-events:auto}
@media(max-width:900px){
  #news.news .news-inner{padding:72px 24px}
  #news.news{--news-gap:24px;--news-end-width:clamp(240px,64vw,400px)}
  #news.news .news-heading{flex-basis:min(100%,var(--news-card-width));justify-content:flex-start}
}
@media(min-width:601px) and (max-width:1024px){#news.news{--news-card-width:78vw}}
@media(max-width:600px){#news.news{--news-card-width:84vw;--news-title-size:22px}}
/* News is one shared component. Keep old per-item edits stored, but let the
   group controls own frame width and type size, including nested link labels. */
:root #news :is(#spa-news-card-shared,.news-card) .news-photo-link{width:100%!important;max-width:none!important;min-width:0!important;height:auto!important}
:root #news :is(#spa-news-card-shared,.news-card) .news-image{width:100%!important;height:var(--news-photo-height,auto)!important;aspect-ratio:5/3}
:root #news :is(#spa-news-card-shared,.news-card) :is(h3,h3 a){font-size:var(--news-title-size)!important}
:root #news :is(#spa-news-card-shared,.news-card) :is(.news-story-meta,.news-story-meta span){font-size:var(--news-date-size)!important}
:root #news :is(#spa-news-card-shared,.news-card) :is(.news-view-link,.news-view-link span){font-size:var(--news-button-size)!important}
/* Desktop stories enter as complete, solid cards from below, then join the
   horizontal rail. Clip the page edges without cutting off the vertical rise. */
@media(min-width:1025px){
  /* Keep one stationary, interactive progress line above the moving cards. */
  #news.news .news-inner{display:flex;flex-direction:column}
  #news .news-progress{order:-1;flex:none;align-self:flex-end;width:clamp(200px,24vw,360px);max-width:100%;margin:0 0 24px auto}
  #news.is-news-horizontal .news-progress:not([hidden]){display:block}
  #news .news-card-body{display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto 1fr;column-gap:24px;align-items:end}
  #news .news-story-meta{grid-column:1/-1}
  #news .news-card h3{grid-column:1;align-self:start}
  #news .news-view-link{display:inline-flex;grid-column:2;align-self:end;gap:16px;margin:0;padding:6px 0;font-size:14px;line-height:1.5;white-space:nowrap}
  #news.is-news-rise .news-rail-wrap{overflow:visible;clip-path:inset(-100vh 0 -100vh)}
  #news.is-news-rise .news-card{transform:translate3d(0,var(--news-card-y,0px),0)}
  /* The scene already lifts the photograph. Keep only that media entrance
     static; captions/titles retain their own reading entrance. */
  body.home-floating-nav #news.is-news-rise .news-card .news-photo-link[data-home-entrance]{opacity:1!important;transform:none!important;clip-path:none!important;animation:none!important}
}
