/* Scoped annual archive presentation. Home/Events keep their established card
   proportions, with the selected group photograph centered as requested. */
.card.is-centered-photo .card-media img,.event-archive-media.is-centered-photo img{object-position:center center}
.single-cyw_event .event-body{grid-template-columns:minmax(0,1fr);max-width:var(--container);min-width:0}
.single-cyw_event .event-body>div{min-width:0}
.single-cyw_event .event-body .entry-content{max-width:none;min-width:0}
.annual-recap{color:var(--ink-soft);min-width:0}
.annual-recap a:focus-visible,.annual-recap .recap-nav button:focus-visible{outline:3px solid var(--teal);outline-offset:5px}
.annual-recap .recap-nav{display:flex;gap:clamp(1rem,3vw,2.5rem);align-items:center;flex-wrap:wrap;padding:0 0 var(--sp-5);margin:0 0 var(--sp-6);border-bottom:1px solid var(--line)}
.annual-recap .recap-nav[hidden]{display:none!important}
.annual-recap .recap-nav button{min-height:44px;margin:0;padding:.35rem 0;border:0;background:transparent;color:var(--ink);font:600 var(--fs-sm)/1.4 var(--font-body);cursor:pointer}
.annual-recap .recap-nav button:hover{color:var(--teal)}
.annual-recap .recap-cover{margin:0;min-inline-size:0;max-inline-size:100%}
/* The stage owns its translated slides' clipping boundary, including before
   enhancement; the native fallback still scrolls inside this bounded stage. */
.annual-recap .recap-carousel-stage{position:relative;inline-size:100%;min-inline-size:0;max-inline-size:100%;overflow:hidden;overflow:clip;overflow-clip-margin:8px}
.annual-recap .recap-carousel-track{display:flex;gap:var(--sp-4);min-inline-size:0;max-inline-size:100%;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scroll-padding-inline:8%;padding:0 8% var(--sp-3);position:relative;align-items:stretch;scrollbar-width:none;border-radius:var(--radius-lg)}
.annual-recap .recap-carousel-track::-webkit-scrollbar{display:none}
.annual-recap .recap-carousel-track:focus-visible{outline:3px solid var(--teal);outline-offset:5px}
.annual-recap .recap-carousel-slide{flex:0 0 100%;min-width:0;margin:0;scroll-snap-align:center;scroll-snap-stop:always}
.annual-recap .recap-carousel-frame{position:relative;aspect-ratio:3/2;display:grid;place-items:center;overflow:hidden;border-radius:var(--radius-lg);background:var(--paper-warm)}
.annual-recap .recap-carousel-frame img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:contain;border:0;border-radius:0;margin:0}
.annual-recap .recap-carousel-footer{display:flex;align-items:center;justify-content:center;padding:.65rem 0;border-bottom:1px solid var(--line)}
.annual-recap .recap-screen-reader{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important}
.annual-recap .recap-carousel [hidden]{display:none!important}
.annual-recap .recap-carousel-button{position:absolute;top:50%;transform:translateY(-50%);z-index:3;display:grid;place-items:center;width:44px;height:44px;padding:0;border:1px solid var(--line);border-radius:50%;background:rgba(247,245,238,.88);color:var(--ink);font:600 1.2rem/1 var(--font-body);cursor:pointer}
.annual-recap .recap-carousel-prev{left:1.5%}
.annual-recap .recap-carousel-next{right:1.5%}
.annual-recap .recap-carousel-button:hover{border-color:var(--teal);background:var(--teal-tint);color:var(--teal-deep)}
.annual-recap .recap-carousel-button:focus-visible{outline:3px solid var(--teal);outline-offset:4px}
.annual-recap .recap-carousel-dots{display:flex;align-items:center;justify-content:center;width:min(100%,304px)}
.annual-recap .recap-carousel-dots button{display:grid;place-items:center;flex:1 1 0;min-width:0;width:38px;min-height:44px;padding:0;border:0;background:transparent;cursor:pointer}
.annual-recap .recap-carousel-dots span{width:6px;height:6px;border-radius:4px;background:var(--line);transition:width 400ms ease,background 400ms ease}
.annual-recap .recap-carousel-dots [aria-current="true"] span{width:26px;background:var(--ink)}
.annual-recap .recap-carousel-dots button:hover span{background:var(--teal)}
.annual-recap .recap-carousel-dots button:focus-visible{outline:3px solid var(--teal);outline-offset:0;border-radius:4px}
/* Position and motion follow the supplied summer-training reference. */
.annual-recap .recap-carousel.is-enhanced .recap-carousel-track{display:block;aspect-ratio:2.2;overflow:hidden;touch-action:pan-y;padding:0;scroll-snap-type:none;scrollbar-width:none;border-radius:0}
.annual-recap .recap-carousel.is-enhanced .recap-carousel-slide{position:absolute;left:50%;top:50%;width:76%;transform:translate(calc(-50% + var(--slide-offset)*98%),-50%) scale(.9);opacity:0;pointer-events:none;transition:transform 800ms cubic-bezier(.22,.68,0,1),opacity 650ms ease;will-change:transform,opacity;z-index:0}
.annual-recap .recap-carousel.is-enhanced .recap-carousel-slide.is-adjacent{opacity:.22;z-index:1}
.annual-recap .recap-carousel.is-enhanced .recap-carousel-slide.is-active{transform:translate(-50%,-50%) scale(1);opacity:1;pointer-events:auto;z-index:2}
.annual-recap .recap-carousel.is-enhanced .recap-carousel-frame{aspect-ratio:1.8;border-radius:4px}
.annual-recap .recap-section{padding:clamp(2.75rem,5vw,4.5rem) 0;border-bottom:1px solid var(--line);scroll-margin-top:100px}
.annual-recap .recap-section:last-of-type{border-bottom:0;padding-bottom:0}
.annual-recap .recap-section .eyebrow{margin:0 0 var(--sp-4)}
.annual-recap .recap-section h2{margin:0 0 var(--sp-5);font-size:clamp(1.8rem,3vw,2.5rem);line-height:1.15}
.annual-recap .recap-section p{margin:0 0 var(--sp-4);max-width:70ch}
.annual-recap .recap-section p:last-child{margin-bottom:0}
.annual-recap .recap-overview{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.9fr);gap:clamp(2rem,6vw,5rem);align-items:start}
.annual-recap .recap-facts{display:grid;gap:0;margin:0;border-top:1px solid var(--line)}
.annual-recap .recap-facts>div{padding:var(--sp-5) 0;border-bottom:1px solid var(--line)}
.annual-recap .recap-facts dt{font-size:var(--fs-xs);font-weight:600;color:var(--teal);margin:0 0 var(--sp-2)}
.annual-recap .recap-facts dd{margin:0;color:var(--ink);font-size:var(--fs-md);line-height:1.55}
.annual-recap .recap-highlights{display:grid;gap:var(--sp-4)}
.annual-recap .recap-highlight{min-width:0;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--white);overflow:hidden;overflow:clip}
.annual-recap .recap-highlight summary{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-5);min-height:74px;padding:var(--sp-5) var(--sp-6);color:var(--ink);font:650 var(--fs-md)/1.4 var(--font-body);list-style:none;cursor:pointer}
.annual-recap .recap-highlight summary::-webkit-details-marker{display:none}
.annual-recap .recap-highlight summary::after{content:'+';flex:0 0 auto;color:var(--teal-deep);font-size:1.4rem;font-weight:500;line-height:1}
.annual-recap .recap-highlight summary:hover{background:var(--teal-tint)}
.annual-recap .recap-highlight summary:focus-visible{outline:3px solid var(--teal);outline-offset:-5px}
.annual-recap .recap-highlight[open] summary{background:var(--teal-tint);border-bottom:1px solid var(--line)}
.annual-recap .recap-highlight[open] summary::after{content:'−'}
.annual-recap .recap-highlight-body{padding:var(--sp-6)}
.annual-recap .recap-highlight-copy{width:100%;min-width:0;max-width:none}
.annual-recap .recap-highlight-copy p,.annual-recap .recap-highlight-copy ul,.annual-recap .recap-highlight-copy ol{max-width:none}
.annual-recap .recap-source-content{width:100%;max-width:760px;min-width:0;margin-inline:auto}
.annual-recap [data-source-article]{width:100%;max-width:824px;min-width:0;margin-inline:auto}
.annual-recap .recap-source-static{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--sp-6);margin:var(--sp-6) 0}
.annual-recap .recap-source-content p{max-width:none;line-height:1.8}
.annual-recap .recap-source-content h3{margin:var(--sp-7) 0 var(--sp-5);font-size:clamp(1.15rem,2vw,1.45rem);line-height:1.5;color:var(--ink)}
.annual-recap .recap-source-byline{color:var(--ink-mute);font-size:var(--fs-sm)}
.annual-recap .recap-source-row{display:flex;align-items:flex-start;flex-wrap:nowrap;gap:0;width:100%;min-width:0;margin:var(--sp-6) 0}
.annual-recap .recap-source-photo{box-sizing:border-box;min-width:0;margin:0}
.annual-recap .recap-source-row>.recap-source-photo,.annual-recap .recap-source-row>.recap-source-label{flex:0 0 var(--source-photo-width);width:var(--source-photo-width);margin-left:var(--source-photo-gap)}
.annual-recap .recap-source-photo .recap-photo-link{display:block;width:100%;min-width:0;text-decoration:none}
.annual-recap .recap-source-photo img{position:static;display:block;box-sizing:border-box;width:100%;height:auto;max-height:none;object-fit:contain;object-position:center;margin:0;border:1px solid var(--line);border-radius:var(--radius-lg)}
.annual-recap .recap-source-photo figcaption{max-width:none;margin:var(--sp-3) 0 0;color:var(--ink-mute);font-size:var(--fs-xs);font-style:normal;line-height:1.6;overflow-wrap:anywhere}
.annual-recap .recap-source-label{box-sizing:border-box;display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;aspect-ratio:1;background:var(--teal-tint);color:var(--teal-deep);border-radius:var(--radius-lg);font:600 clamp(.95rem,2.5vw,1.6rem)/1.4 var(--font-body)}
.annual-recap .recap-source-label small{font-size:clamp(.625rem,1.5vw,.85rem);font-weight:400;margin-top:var(--sp-3)}
.annual-recap .recap-source-content .recap-source-group-caption{font-size:var(--fs-xs);color:var(--ink-mute);line-height:1.6;margin-top:calc(-1*var(--sp-3))}
.annual-recap .recap-source-film{margin:var(--sp-6) 0;scroll-margin-top:100px}
.annual-recap .recap-source-film h3{margin-top:0}
.annual-recap .recap-source-credits{max-width:760px;margin:var(--sp-6) auto 0;color:var(--ink-mute);font-size:var(--fs-xs);text-align:center}
.annual-recap .recap-source-credits p{margin:0 0 var(--sp-2);max-width:none}
.annual-recap .recap-source-carousel{margin:var(--sp-6) 0}
.annual-recap .recap-source-carousel .recap-carousel-track{padding:0;scroll-padding:0}
.annual-recap .recap-source-carousel .recap-carousel-frame{display:block;aspect-ratio:auto;background:transparent;border-radius:0;overflow:visible}
.annual-recap .recap-source-carousel .recap-carousel-frame img{position:static;inset:auto;display:block;width:100%;height:auto;object-fit:contain;margin:0;border:1px solid var(--line);border-radius:var(--radius-lg)}
.annual-recap .recap-source-content .recap-source-carousel.is-enhanced .recap-carousel-track{aspect-ratio:var(--source-carousel-aspect);border-radius:var(--radius-lg)}
.annual-recap .recap-source-content .recap-source-carousel.is-enhanced .recap-carousel-frame{aspect-ratio:auto}
.annual-recap .recap-source-content .recap-source-carousel.is-enhanced .recap-carousel-slide{left:0;top:0;width:100%;transform:translateX(calc(var(--slide-offset)*100%));opacity:0;pointer-events:none}
.annual-recap .recap-source-content .recap-source-carousel.is-enhanced .recap-carousel-slide.is-active{transform:translateX(0);opacity:1;pointer-events:auto}
.annual-recap .recap-source-carousel .recap-carousel-footer{border-bottom:0}
.annual-recap .recap-source-carousel .recap-carousel-dots{width:96px}
/* Uniform previews read left to right; the photo viewer retains the full frame. */
.annual-recap .recap-inline-gallery{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-5);width:100%;min-width:0;max-width:100%;margin:var(--sp-6) 0 0}
.annual-recap .recap-inline-gallery figure{display:flex;flex-direction:column;box-sizing:border-box;width:100%;min-width:0;max-width:100%;margin:0;break-inside:avoid;page-break-inside:avoid}
.annual-recap .recap-inline-gallery .recap-photo-link{display:block;box-sizing:border-box;width:100%;min-width:0;max-width:100%;aspect-ratio:3/2;overflow:hidden;margin:0;padding:0;color:inherit;text-decoration:none;text-align:left;font-style:normal;white-space:normal;overflow-wrap:anywhere;border:1px solid var(--line);border-radius:var(--radius-lg)}
.annual-recap .recap-inline-gallery .recap-photo-link:hover+figcaption{color:var(--teal-deep)}
.annual-recap .recap-inline-gallery img{display:block;box-sizing:border-box;width:100%;max-width:100%;height:100%;max-height:none;aspect-ratio:3/2;object-fit:cover;object-position:center 25%;margin:0;border:0;border-radius:0}
.annual-recap .recap-inline-gallery figcaption{width:100%;max-width:none;margin:var(--sp-3) 0 0;font-size:var(--fs-xs);font-style:normal;line-height:1.5;text-align:left;white-space:normal;overflow-wrap:anywhere;color:var(--ink-mute)}
.annual-recap .recap-film-player{max-width:960px;overflow:hidden;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--ink)}
.annual-recap .recap-film-player video{display:block;width:100%;height:auto;aspect-ratio:16/9;max-height:75vh;object-fit:contain}
.annual-recap .recap-section .recap-film-note,.annual-recap .recap-section .recap-source{margin-top:var(--sp-4);font-size:var(--fs-sm);line-height:1.6;color:var(--ink-mute)}
.annual-recap .recap-source a{color:var(--teal-deep);text-underline-offset:.2em}
.cywater-photo-viewer-open{overflow:hidden}
.annual-recap .recap-photo-link{cursor:zoom-in}
.annual-recap .recap-photo-viewer{box-sizing:border-box;width:min(1120px,calc(100% - 2rem));max-width:calc(100% - 2rem);max-height:calc(100dvh - 2rem);padding:var(--sp-5);margin:auto;border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--paper);color:var(--ink);overflow:auto}
.annual-recap .recap-photo-viewer::backdrop{background:rgba(14,27,43,.82)}
.annual-recap .recap-viewer-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);margin-bottom:var(--sp-4)}
.annual-recap .recap-viewer-position{margin:0;font-size:var(--fs-sm);color:var(--ink-mute)}
.annual-recap .recap-viewer-actions{display:flex;align-items:center;gap:var(--sp-3)}
.annual-recap .recap-viewer-actions .btn{min-width:44px;min-height:44px;padding:.55rem .85rem;color:var(--ink);border-color:var(--line);font:600 var(--fs-sm)/1.3 var(--font-body);cursor:pointer}
.annual-recap .recap-viewer-actions .btn:hover{background:var(--teal-tint);border-color:var(--teal);color:var(--teal-deep)}
.annual-recap .recap-viewer-actions .btn:focus-visible{outline:3px solid var(--teal);outline-offset:2px}
.annual-recap .recap-photo-viewer figure{margin:0;max-width:none}
.annual-recap .recap-photo-viewer img{display:block;width:auto;height:auto;max-width:100%;max-height:min(760px,calc(100dvh - 13rem));object-fit:contain;margin:0 auto;border:0;border-radius:0}
.annual-recap .recap-photo-viewer figcaption{margin:var(--sp-4) 0 0;max-width:none;color:var(--ink-soft);font-size:var(--fs-sm);font-style:normal;line-height:1.5;text-align:left;overflow-wrap:anywhere}
.annual-recap .recap-section-heading{margin-bottom:var(--sp-6)}
.annual-recap .recap-programme-panel{display:grid;grid-template-columns:minmax(180px,.65fr) minmax(0,1fr);align-items:center;gap:clamp(2rem,5vw,5rem);background:var(--teal-tint);border:1px solid var(--teal-soft);border-radius:var(--radius-lg);padding:clamp(2rem,4vw,3.5rem)}
.annual-recap .recap-agenda-cover{display:block;justify-self:center;width:min(100%,260px);background:var(--white);transform:rotate(-3deg);box-shadow:0 15px 30px rgba(14,27,43,.16),0 2px 5px rgba(14,27,43,.1);text-decoration:none;transition:transform 250ms ease}
.annual-recap .recap-agenda-cover:hover,.annual-recap .recap-agenda-cover:focus-visible{transform:translateY(-4px) rotate(0deg)}
.annual-recap .recap-agenda-cover img{display:block;width:100%;height:auto;margin:0;border:1px solid var(--line);border-radius:0}
.annual-recap .recap-programme-panel h3{font-size:clamp(1.65rem,3vw,2.5rem);margin:var(--sp-3) 0 var(--sp-4)}
.annual-recap .recap-programme-dates{color:var(--teal-deep);font-size:var(--fs-sm);font-weight:650}
.annual-recap .recap-programme-panel .recap-agenda-meta{margin-top:var(--sp-5);color:var(--ink-mute);font-size:var(--fs-sm)}
.annual-recap .recap-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-4) var(--sp-5);margin-top:var(--sp-5)}
.annual-recap .recap-actions .btn{text-decoration:none;white-space:normal;text-align:center;line-height:1.3}
.annual-recap .recap-actions .btn-primary{color:var(--white)}
.annual-recap .recap-agenda-online{display:inline-flex;align-items:center;gap:.5rem;color:var(--teal-deep);font-size:var(--fs-sm);font-weight:600;text-underline-offset:.25em}
.annual-recap .recap-agenda-online:hover{color:var(--ink)}
.annual-recap .recap-photo-download-panel{display:grid;grid-template-columns:minmax(180px,.65fr) minmax(0,1fr);align-items:center;gap:clamp(2.5rem,5vw,5rem);background:var(--teal-tint);border:1px solid var(--teal-soft);border-radius:var(--radius-lg);padding:clamp(2.5rem,4vw,3.5rem)}
.annual-recap .recap-photo-stack{position:relative;width:min(100%,360px);justify-self:center;aspect-ratio:3/2;margin:var(--sp-4) 0;transform:rotate(-3deg);transition:transform 250ms ease}
.annual-recap .recap-photo-stack:hover{transform:translateY(-4px) rotate(0deg)}
.annual-recap .recap-photo-stack::before,.annual-recap .recap-photo-stack::after,.annual-recap .recap-photo-print{content:'';position:absolute;inset:0;background:var(--white) var(--recap-photo-cover) center/contain no-repeat;border:8px solid var(--white);box-shadow:0 8px 20px rgba(14,27,43,.13)}
.annual-recap .recap-photo-stack::before{transform:rotate(-6deg);z-index:0}
.annual-recap .recap-photo-stack::after{transform:rotate(5deg);z-index:1}
.annual-recap .recap-photo-print{transform:rotate(-1deg);z-index:2}
.annual-recap .recap-photo-download-panel h3{font-size:clamp(1.65rem,3vw,2.5rem);margin:0 0 var(--sp-4)}
.annual-recap .recap-photo-download-panel .recap-photo-download-meta{margin-top:var(--sp-5);color:var(--ink-mute);font-size:var(--fs-sm)}
@media(max-width:900px){.annual-recap .recap-overview{grid-template-columns:1fr;gap:var(--sp-6)}.annual-recap .recap-programme-panel{gap:var(--sp-6);grid-template-columns:minmax(150px,.6fr) minmax(0,1fr)}.annual-recap .recap-inline-gallery{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:760px){.annual-recap .recap-carousel.is-enhanced .recap-carousel-track{aspect-ratio:1.7}.annual-recap .recap-carousel.is-enhanced .recap-carousel-slide{width:80%}.annual-recap .recap-carousel.is-enhanced .recap-carousel-frame{aspect-ratio:1.45}}
@media(max-width:600px){.annual-recap .recap-nav{column-gap:1.2rem;row-gap:.85rem;padding-bottom:var(--sp-4);margin-bottom:var(--sp-5)}.annual-recap .recap-nav button{font-size:.8rem}.annual-recap .recap-carousel-track{gap:var(--sp-3);padding-inline:6%;scroll-padding-inline:6%}.annual-recap .recap-programme-panel,.annual-recap .recap-photo-download-panel{grid-template-columns:1fr;gap:var(--sp-7)}.annual-recap .recap-agenda-cover{width:min(80%,220px)}.annual-recap .recap-programme-panel .recap-actions{display:grid;justify-items:start}.annual-recap .recap-highlight summary{padding:var(--sp-5);font-size:var(--fs-sm)}.annual-recap .recap-highlight-body{padding:var(--sp-5)}}
@media(max-width:559.98px){.annual-recap .recap-inline-gallery{grid-template-columns:minmax(0,1fr)}}
@media(prefers-reduced-motion:reduce){.annual-recap .recap-carousel-track{scroll-behavior:auto}.annual-recap .recap-carousel.is-enhanced .recap-carousel-slide,.annual-recap .recap-carousel-dots span,.annual-recap .recap-agenda-cover,.annual-recap .recap-photo-stack{transition:none}.annual-recap .recap-agenda-cover:hover,.annual-recap .recap-agenda-cover:focus-visible,.annual-recap .recap-photo-stack:hover{transform:rotate(-3deg)}}
@media print{.annual-recap .recap-nav,.annual-recap .recap-carousel-button,.annual-recap .recap-carousel-footer,.annual-recap .recap-film-player{display:none}.annual-recap .recap-carousel.is-enhanced .recap-carousel-track,.annual-recap .recap-carousel-track{display:grid;aspect-ratio:auto;overflow:visible;padding:0;grid-template-columns:repeat(2,minmax(0,1fr))}.annual-recap .recap-carousel.is-enhanced .recap-carousel-slide,.annual-recap .recap-carousel-slide{position:static;width:100%;transform:none!important;opacity:1;break-inside:avoid}.annual-recap .recap-highlight{break-inside:avoid}}
