{ dragging.current = true; update(e.clientX); }} onTouchStart={(e) => { dragging.current = true; update(e.touches[0].clientX); }}> Antes Depois Antes & depois {item.label} ); } function SimpleCard({ item }) { return ( No salão {item.label} ); } const galStyles = { section: { background: 'var(--bg-2)', padding: 'var(--section-pad) var(--page-pad)' }, head: { display: 'flex', justifyContent: 'space-between', alignItems: 'flex-end', gap: 24, marginBottom: 36, flexWrap: 'wrap', }, title: { fontFamily: 'var(--font-display)', fontWeight: 400, fontSize: 'clamp(32px, 4.4vw, 52px)', lineHeight: 1.05, letterSpacing: '-0.01em', margin: 0, color: 'var(--fg-1)', maxWidth: 540 }, lede: { fontFamily: 'var(--font-sans)', fontSize: 'clamp(14px, 1.3vw, 15px)', lineHeight: 1.65, color: 'var(--fg-2)', margin: 0, maxWidth: 480 }, controls: { display: 'flex', gap: 10 }, arrow: { width: 48, height: 48, borderRadius: 999, border: '1px solid var(--rb-champagne)', background: 'var(--rb-creme)', cursor: 'pointer', color: 'var(--rb-espresso)', display: 'flex', alignItems: 'center', justifyContent: 'center', transition: 'all 220ms var(--ease-refined)', }, carousel: { display: 'flex', gap: 16, overflowX: 'auto', scrollSnapType: 'x mandatory', paddingBottom: 8, /* Bleed slightly into page padding so the row visually extends to the edge */ marginLeft: 'calc(var(--page-pad) * -1)', marginRight: 'calc(var(--page-pad) * -1)', paddingLeft: 'var(--page-pad)', paddingRight: 'var(--page-pad)', }, progressTrack: { height: 2, width: 240, maxWidth: '100%', background: 'var(--rb-champagne)', borderRadius: 999, marginTop: 24, position: 'relative', overflow: 'hidden', }, progressBar: { position: 'absolute', left: 0, top: 0, bottom: 0, width: 60, background: 'var(--rb-rose)', borderRadius: 999, transition: 'transform 220ms var(--ease-refined)', }, card: { flex: '0 0 clamp(280px, 36vw, 380px)', scrollSnapAlign: 'start', display: 'flex', flexDirection: 'column', gap: 12, background: 'var(--rb-creme)', borderRadius: 14, overflow: 'hidden', border: '1px solid var(--rb-champagne)', }, media: { position: 'relative', aspectRatio: '4 / 5', cursor: 'ew-resize', userSelect: 'none', overflow: 'hidden', }, img: { width: '100%', height: '100%', objectFit: 'cover', display: 'block', pointerEvents: 'none' }, beforeOver: { position: 'absolute', inset: 0, overflow: 'hidden', pointerEvents: 'none' }, handle: { position: 'absolute', top: 0, bottom: 0, width: 2, background: 'var(--rb-creme)', transform: 'translateX(-1px)', boxShadow: '0 0 0 1px rgba(43,27,18,0.15), 0 0 12px rgba(255,247,240,0.4)', pointerEvents: 'none', }, handleLine: { display: 'none' }, handleKnob: { position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', width: 44, height: 44, borderRadius: 999, background: 'var(--rb-creme)', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: 0, color: 'var(--rb-espresso)', boxShadow: '0 4px 14px rgba(43,27,18,0.25)', }, chip: { position: 'absolute', top: 14, fontFamily: 'var(--font-sans)', fontSize: 10, fontWeight: 600, letterSpacing: '0.2em', textTransform: 'uppercase', padding: '6px 12px', borderRadius: 999, }, cardFoot: { padding: '14px 20px 18px', display: 'flex', flexDirection: 'column', gap: 2 }, cardTitle: { fontFamily: 'var(--font-display)', fontSize: 18, color: 'var(--fg-1)' }, foot: { display: 'flex', justifyContent: 'center', marginTop: 40 }, }; Object.assign(window, { Gallery });