1import{N as R,Q as T,U as d,j as e,n as l,o as H}from"./ui-DLVXeerz.js";import{r}from"./vendor-B1E6Wj30.js";import{c as w}from"./index-BFhU1yPg.js";/** 2 * @license lucide-react v0.462.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const D=w("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]);/** 7 * @license lucide-react v0.462.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */const q=w("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/** 12 * @license lucide-react v0.462.0 - ISC 13 * 14 * This source code is licensed under the ISC license. 15 * See the LICENSE file in the root directory of this source tree. 16 */const Y=w("Quote",[["path",{d:"M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"rib7q0"}],["path",{d:"M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z",key:"1ymkrd"}]]),c=[{quote:"I bring two contractor bags every Saturday morning. In and out in under ten minutes, and I walk out with real cash â not a store credit slip.",name:"Robert Mancini",role:"Regular customer",city:"Waterbury, CT"},{quote:"Our Scout troop has been running bottle drives here for almost two years. The counts are honest, the staff is patient with the kids, and it funds half our camping trips.",name:"Jenna Ruiz",role:"Troop parent volunteer",city:"Wolcott, CT"},{quote:"I run a small cleanup route on weekends. Hitting the $400 daily cap is the difference between this being a hobby and a real side income.",name:"Darnell Foster",role:"Independent collector",city:"Waterbury, CT"},{quote:"After our block party we had eight bins of cans and bottles. Drove them straight to Railroad Hill â sorted, counted, paid out the same afternoon.",name:"Linda Petrosky",role:"Neighborhood organizer",city:"Watertown, CT"}],L=6e3,$=()=>{const[s,y]=r.useState(0),[m,j]=r.useState(1),[i,N]=r.useState(!1),[o,k]=r.useState(!1),[M,C]=r.useState(0),P=r.useRef(null),h=R(0),u=R(0),S=T(h,{stiffness:60,damping:18}),I=T(u,{stiffness:60,damping:18}),W=d(S,[-1,1],[-24,24]),A=d(I,[-1,1],[-24,24]),E=d(S,[-1,1],[24,-24]),V=d(I,[-1,1],[24,-24]),z=a=>{const t=P.current;if(!t)return;const n=t.getBoundingClientRect();h.set((a.clientX-n.left)/n.width*2-1),u.set((a.clientY-n.top)/n.height*2-1)},B=()=>{h.set(0),u.set(0),N(!1)},x=(a,t)=>{j(t),y((a+c.length)%c.length),C(n=>n+1)},g=()=>x(s+1,1),f=()=>x(s-1,-1);r.useEffect(()=>{if(i||o)return;const a=setTimeout(()=>{j(1),y(t=>(t+1)%c.length),C(t=>t+1)},L);return()=>clearTimeout(a)},[s,i,o]);const p=c[s],b=22,v=2*Math.PI*b;return e.jsxs("section",{id:"voices",className:"band section-y relative overflow-hidden",children:[e.jsx("div",{className:"seam-glow -top-40"}),e.jsxs("div",{className:"relative w-full rail",children:[e.jsxs(l.div,{ref:P,onPointerMove:z,onPointerEnter:()=>N(!0),onPointerLeave:B,initial:{opacity:0,y:30},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{duration:.8},className:"relative text-white",children:[e.jsx(l.div,{style:{x:W,y:A},className:"absolute -top-40 -right-40 w-[32rem] h-[32rem] rounded-full bg-[hsl(var(--eye-green))/0.16] blur-3xl pointer-events-none"}),e.jsx(l.div,{style:{x:E,y:V},className:"absolute -bottom-40 -left-40 w-[32rem] h-[32rem] rounded-full bg-[hsl(var(--eye-secondary))/0.16] blur-3xl pointer-events-none"}),e.jsxs("div",{className:"relative",children:[e.jsxs("div",{className:"text-center max-w-2xl mx-auto",children:[e.jsxs("div",{className:"inline-flex items-center gap-2 rounded-full glass-dark px-4 py-2 text-sm font-medium",children:[e.jsx(Y,{className:"w-4 h-4 text-[hsl(var(--eye-green))]"}),"Voices"]}),e.jsxs("h2",{className:"mt-5 font-display font-bold tracking-[-0.03em] text-[clamp(1.75rem,5vw,3.25rem)] leading-[1.05]",children:["What Waterbury"," ",e.jsx("span",{className:"eco-gradient-text",children:"neighbors say."})]})]}),e.jsxs("div",{className:"relative mt-10 md:mt-14",children:[e.jsx("button",{"aria-label":"Previous testimonial",onClick:f,className:"hidden md:flex absolute left-2 top-1/2 -translate-y-1/2 w-12 h-12 rounded-full glass-dark border border-white/15 hover:bg-white/15 text-white items-center justify-center transition-colors focus:outline-none focus:ring-2 focus:ring-[hsl(var(--eye-green))]",children:e.jsx(D,{className:"w-5 h-5"})}),e.jsx("button",{"aria-label":"Next testimonial",onClick:g,className:"hidden md:flex absolute right-2 top-1/2 -translate-y-1/2 w-12 h-12 rounded-full glass-dark border border-white/15 hover:bg-white/15 text-white items-center justify-center transition-colors focus:outline-none focus:ring-2 focus:ring-[hsl(var(--eye-green))]",children:e.jsx(q,{className:"w-5 h-5"})}),e.jsx("div",{className:"md:px-20 min-h-[300px] sm:min-h-[260px] md:min-
16h-[220px] flex items-center",children:e.jsx(H,{mode:"wait",custom:m,children:e.jsxs(l.figure,{initial:{opacity:0,x:40*m},animate:{opacity:1,x:0},exit:{opacity:0,x:-40*m},transition:{duration:.45,ease:[.22,1,.36,1]},drag:"x",dragConstraints:{left:0,right:0},dragElastic:.25,onDragStart:()=>k(!0),onDragEnd:(a,t)=>{k(!1),t.offset.x<-80?g():t.offset.x>80&&f()},className:"w-full text-center cursor-grab active:cursor-grabbing select-none",children:[e.jsx("span",{"aria-hidden":!0,className:"block mx-auto mb-7 h-8 w-px bg-[hsl(var(--eye-green))]"}),e.jsxs("blockquote",{className:"font-display text-white/90 text-[clamp(1.125rem,2.2vw,1.75rem)] leading-[1.55] md:leading-[1.5] tracking-tight max-w-[44rem] mx-auto",children:["â",p.quote,"â"]}),e.jsxs("figcaption",{className:"mt-7 flex flex-col items-center",children:[e.jsx("span",{"aria-hidden":!0,className:"block h-px w-8 bg-white/20 mb-4"}),e.jsxs("div",{className:"text-sm text-white/60",children:[p.role," · ",p.city]})]})]},s)})})]}),e.jsxs("div",{className:"mt-8 md:mt-10 flex items-center justify-center gap-4 sm:gap-5",children:[e.jsx("button",{"aria-label":"Previous testimonial",onClick:f,className:"md:hidden w-11 h-11 rounded-full glass-dark border border-white/15 hover:bg-white/15 text-white flex items-center justify-center transition-colors",children:e.jsx(D,{className:"w-5 h-5"})}),e.jsx("div",{className:"flex items-center gap-1.5",children:c.map((a,t)=>e.jsx("button",{"aria-label":`Go to testimonial ${t+1}`,onClick:()=>x(t,t>s?1:-1),className:`h-2 rounded-full transition-all duration-300 ${t===s?"w-8 bg-[hsl(var(--eye-green))]":"w-2 bg-white/25 hover:bg-white/40"}`},t))}),e.jsxs("div",{className:"relative w-12 h-12 flex items-center justify-center",children:[e.jsxs("svg",{className:"absolute inset-0 -rotate-90",viewBox:"0 0 48 48",children:[e.jsx("circle",{cx:"24",cy:"24",r:b,fill:"none",stroke:"hsl(0 0% 100% / 0.18)",strokeWidth:"2"}),e.jsx(l.circle,{cx:"24",cy:"24",r:b,fill:"none",stroke:"hsl(var(--eye-green))",strokeWidth:"2",strokeLinecap:"round",strokeDasharray:v,initial:{strokeDashoffset:v},animate:{strokeDashoffset:i||o?v:0},transition:{duration:i||o?.3:L/1e3,ease:"linear"}},M+(i||o?"-p":"-r"))]}),e.jsx("div",{className:"text-[10px] font-semibold tracking-[0.14em] uppercase text-white/70",children:String(s+1).padStart(2,"0")})]}),e.jsx("button",{"aria-label":"Next testimonial",onClick:g,className:"md:hidden w-11 h-11 rounded-full glass-dark border border-white/15 hover:bg-white/15 text-white flex items-center justify-center transition-colors",children:e.jsx(q,{className:"w-5 h-5"})})]})]})]}),e.jsx("div",{className:"mt-8 text-center",children:e.jsx("p",{className:"max-w-md mx-auto text-xs font-semibold uppercase tracking-[0.18em] leading-relaxed text-muted-foreground",children:` 17`})})]})]})};export{$ as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.