Sobre LuzAndes

Misión

Crear imágenes minimalistas y honestas que potencien marcas y personas en Chile, con un flujo de trabajo claro y eficiente.

Valores

  • Claridad visual
  • Entrega responsable
  • Diseño y técnica en equilibrio
Próxima ventana de reservas
00d 00h 00m 00s
Interior del estudio LuzAndes en Santiago con luz suave y mobiliario de madera

Nuestra historia

2018 — Origen

Iniciamos en Providencia con foco en retratos editoriales.

2020 — E‑commerce

Creamos una línea de producto para tiendas online chilenas.

2023 — Expansión

Sumamos servicio en Valparaíso y Concepción.

Equipo

Sofía, fotógrafa principal

Sofía

Fotógrafa principal

Mateo, retocador

Mateo

Retoque y color

Camila, producción

Camila

Producción

Galería con teclado (izq/der)

Galería LuzAndes: retrato editorial minimalista con fondo neutro
Retrato editorial minimalista — 1/8
Usa las flechas para navegar.

Compromiso con Chile

Clientes en RM, Valparaíso y Biobío, con soporte local y tiempos realistas.

altfloweaglemind.pro

`; } function fallbackFooter(){ mountFooter.innerHTML = ` `; const y=document.getElementById('cpyYear'); if(y) y.textContent=new Date().getFullYear(); } Promise.all([ fetch('./header.html').then(r=>r.ok?r.text():Promise.reject()).catch(()=>null), fetch('./footer.html').then(r=>r.ok?r.text():Promise.reject()).catch(()=>null) ]).then(([h,f])=>{ if(h){mountHeader.innerHTML=h;} else {fallbackHeader();} if(f){mountFooter.innerHTML=f;} else {fallbackFooter();} bindHeaderInteractions(); }).catch(()=>{fallbackHeader(); fallbackFooter(); bindHeaderInteractions();}); function bindHeaderInteractions(){ const tBtns=[document.getElementById('themeTgl'),document.getElementById('themeTglM')].filter(Boolean); tBtns.forEach(b=>b.addEventListener('click',toggleTheme)); const mo=document.getElementById('mobiOpen'), mm=document.getElementById('mobiMenu'); if(mo&&mm){mo.addEventListener('click',()=>mm.classList.toggle('hidden'));} const nb=document.getElementById('navBrief'); if(nb){nb.addEventListener('click',()=>openModal('brief')); } const nbm=document.getElementById('navBriefM'); if(nbm){nbm.addEventListener('click',()=>{openModal('brief'); const m=document.getElementById('mobiMenu'); if(m) m.classList.add('hidden');});} } function toggleTheme(){ const el=document.documentElement; const isDark=el.classList.toggle('dark'); localStorage.setItem('theme',isDark?'dark':'light'); } })(); (function timelineAnim(){ const items=[...document.querySelectorAll('.m0pq2')]; const io=new IntersectionObserver((ents)=>{ ents.forEach(e=>{ if(e.isIntersecting){ e.target.classList.add('translate-x-0','opacity-100'); io.unobserve(e.target); } }); },{threshold:0.2}); items.forEach(it=>{ it.classList.add('transition','duration-700','ease-out','translate-x-4','opacity-0'); io.observe(it); }); })(); (function countdown(){ const el=document.getElementById('cntdwnA32kq'); if(!el) return; const now=new Date(); const target=new Date(now.getTime()+1000*60*60*24*7+1000*60*60*10); function pad(n){return String(n).padStart(2,'0');} function tick(){ const t=target - new Date(); if(t<=0){el.textContent='00d 00h 00m 00s'; return;} const d=Math.floor(t/86400000); const h=Math.floor((t%86400000)/3600000); const m=Math.floor((t%3600000)/60000); const s=Math.floor((t%60000)/1000); el.textContent=`${pad(d)}d ${pad(h)}h ${pad(m)}m ${pad(s)}s`; requestAnimationFrame(()=>setTimeout(tick,1000)); } tick(); })(); (function gallery(){ const imgs=[ {src:"./images/maximum_ditailes_of_this_image.editorial_portrait_minimalist_backdrop_softbox_light_contrast_clean_style_chile_high_detail.jpg",cap:"Retrato editorial minimalista"}, {src:"./images/maximum_ditailes_of_this_image.product_photography_glass_bottle_on_acrylic_block_hard_light_shadow_play_ecommerce_chile.jpg",cap:"Producto: botella sobre acrílico"}, {src:"./images/maximum_ditailes_of_this_image.food_photography_chilean_ingredients_top_view_clean_composition_neutral_tones.jpg",cap:"Food: ingredientes chilenos"}, {src:"./images/maximum_ditailes_of_this_image.architecture_interior_modern_office_lobby_symmetry_natural_light_santiago.jpg",cap:"Arquitectura interior luminosa"}, {src:"./images/maximum_ditailes_of_this_image.team_working_behind_the_scenes_minimal_set_soft_colors_tripod_reflector.jpg",cap:"Detrás de cámaras"}, {src:"./images/maximum_ditailes_of_this_image.lifestyle_outdoor_couple_walk_sunset_warm_tones_minimal_color_grade_valparaiso.jpg",cap:"Lifestyle en exterior"}, {src:"./images/maximum_ditailes_of_this_image.fashion_editorial_model_studio_monochrome_outfit_graphic_shadows.jpg",cap:"Moda editorial monocroma"}, {src:"./images/maximum_ditailes_of_this_image.event_corporate_speaker_stage_soft_spotlight_attendees_bokeh_concepcion.jpg",cap:"Evento corporativo"} ]; let i=0; const img=document.getElementById('galImg'); const cap=document.getElementById('galCap'); const prev=document.getElementById('prevBtn'); const next=document.getElementById('nextBtn'); function render(){ img.src=imgs[i].src; img.alt=`${imgs[i].cap} — slide ${i+1}`; cap.textContent=`${imgs[i].cap} — ${i+1}/${imgs.length}`; } function go(n){ i=(i+n+imgs.length)%imgs.length; render(); } prev.addEventListener('click',()=>go(-1)); next.addEventListener('click',()=>go(1)); document.addEventListener('keydown',(e)=>{ if(e.key==='ArrowLeft') go(-1); if(e.key==='ArrowRight') go(1); }); let startX=null; img.addEventListener('touchstart',e=>{startX=e.touches[0].clientX;}); img.addEventListener('touchend',e=>{if(startX===null) return; const dx=e.changedTouches[0].clientX - startX; if(Math.abs(dx)>30){go(dx>0?-1:1);} startX=null;}); render(); window.__goToGalleryIndex=(idx)=>{if(typeof idx==='number'){i=(idx+imgs.length)%imgs.length; render();}} })(); (function members(){ const data={ sofia:{ title:'Sofía — Fotógrafa principal', img:'./images/maximum_ditailes_of_this_image.portrait_main_photographer_woman_soft_light_minimal_studio_background_smile_professional_camera_santiago_chile.jpg', role:'Dirección de fotografía, retrato editorial y moda.', list:['10+ años de experiencia','Publicaciones en revistas locales','Lidera estándares de color'], galleryIndex:0 }, mateo:{ title:'Mateo — Retoque y color', img:'./images/maximum_ditailes_of_this_image.portrait_photo_retoucher_man_colorist_editing_suite_monitor_color_wheels_minimal_style_santiago_chile.jpg', role:'Postproducción, retoque de piel y gestión de color.', list:['Flujos no destructivos','Perfiles ICC para e‑commerce','Automatizaciones en lote'], galleryIndex:1 }, camila:{ title:'Camila — Producción', img:'./images/maximum_ditailes_of_this_image.portrait_producer_woman_call_sheet_clipboard_minimal_set_plants_soft_light_santiago_chile.jpg', role:'Producción, logística y coordinación con clientes.', list:['Optimiza cronogramas','Gestión de casting y locaciones','Control de presupuesto'], galleryIndex:4 } }; const modal=document.getElementById('modalMember'); const t=document.getElementById('mmTitle'); const mimg=document.getElementById('mmImg'); const role=document.getElementById('mmRole'); const list=document.getElementById('mmList'); const see=document.getElementById('mmSeeWork'); document.querySelectorAll('[data-member]').forEach(btn=>{ btn.addEventListener('click',()=>{ const k=btn.getAttribute('data-member'); const d=data[k]; if(!d) return; t.textContent=d.title; mimg.src=d.img; mimg.alt=d.title; role.textContent=d.role; list.innerHTML=d.list.map(x=>`
  • ${x}
  • `).join(''); see.onclick=()=>{ if(window.__goToGalleryIndex){ window.__goToGalleryIndex(d.galleryIndex); } closeModal('member'); window.scrollTo({top:document.getElementById('galImg').getBoundingClientRect().top + window.scrollY - 100,behavior:'smooth'}); }; openModal('member'); }); }); modal.addEventListener('click',e=>{const c=e.target.getAttribute('data-close'); if(c==='member') closeModal('member');}); })(); (function brief(){ const openBtn=document.getElementById('openBrief'); const navBtn=document.getElementById('navBrief'); const navBtnM=document.getElementById('navBriefM'); if(openBtn) openBtn.addEventListener('click',()=>openModal('brief')); if(navBtn) navBtn.addEventListener('click',()=>openModal('brief')); if(navBtnM) navBtnM.addEventListener('click',()=>openModal('brief')); const modal=document.getElementById('modalBrief'); modal.addEventListener('click',e=>{const c=e.target.getAttribute('data-close'); if(c==='brief') closeModal('brief');}); const form=document.getElementById('briefForm'); const status=document.getElementById('bfStatus'); function showErr(name,show){const el=form.querySelector(`[data-err="${name}"]`); if(el){el.classList.toggle('hidden',!show);}} function valid(){ const name=form.name.value.trim(); const email=form.email.value.trim(); const phone=form.phone.value.trim(); const msg=form.message.value.trim(); const consent=document.getElementById('bfConsent').checked; let ok=true; if(name.length<2){showErr('name',true); ok=false;} else showErr('name',false); const re=/^[^\s@]+@[^\s@]+\.[^\s@]+$/; if(!re.test(email)){showErr('email',true); ok=false;} else showErr('email',false); const rp=/^\+56\s?9\s?\d{4}\s?\d{4}$/; if(!rp.test(phone)){showErr('phone',true); ok=false;} else showErr('phone',false); if(msg.length<10){showErr('message',true); ok=false;} else showErr('message',false); if(!consent){ok=false; status.className='text-sm text-red-600'; status.textContent='Debes aceptar el uso de datos.'; status.classList.remove('hidden');} else{status.classList.add('hidden');} return ok; } form.addEventListener('submit',e=>{ e.preventDefault(); if(!valid()) return; const ticket='LA-'+Math.random().toString(36).slice(2,8).toUpperCase(); const payload={ name:form.name.value.trim(), email:form.email.value.trim(), phone:form.phone.value.trim(), message:form.message.value.trim(), ticket, ts:new Date().toISOString() }; const stack=JSON.parse(localStorage.getItem('briefings')||'[]'); stack.push(payload); localStorage.setItem('briefings',JSON.stringify(stack)); status.className='text-sm text-green-600'; status.textContent='Recibido. Ticket '+ticket+'. Te contactaremos pronto.'; status.classList.remove('hidden'); form.querySelectorAll('input[type="text"],input[type="email"],input[type="tel"],textarea').forEach(el=>el.value=''); document.getElementById('bfConsent').checked=false; setTimeout(()=>closeModal('brief'),1200); }); })(); (function cookies(){ const bar=document.getElementById('cookieBar'); const prefs=document.getElementById('cookiePrefs'); const s=localStorage.getItem('cookie-consent'); function showBar(){bar.classList.remove('hidden');} function hideBar(){bar.classList.add('hidden');} function openPrefs(){prefs.classList.remove('hidden'); prefs.classList.add('flex');} function closePrefs(){prefs.classList.add('hidden'); prefs.classList.remove('flex');} if(!s){showBar();} document.getElementById('ckAccept').addEventListener('click',()=>{localStorage.setItem('cookie-consent',JSON.stringify({necessary:true,analytics:true,marketing:true})); hideBar();}); document.getElementById('ckReject').addEventListener('click',()=>{localStorage.setItem('cookie-consent',JSON.stringify({necessary:true,analytics:false,marketing:false})); hideBar();}); document.getElementById('ckPrefs').addEventListener('click',openPrefs); document.getElementById('ckSave').addEventListener('click',()=>{ const analytics=document.getElementById('ckAnalytic').checked; const marketing=document.getElementById('ckMkt').checked; localStorage.setItem('cookie-consent',JSON.stringify({necessary:true,analytics,marketing})); closePrefs(); hideBar(); }); prefs.addEventListener('click',e=>{const c=e.target.getAttribute('data-close'); if(c==='cookie') closePrefs();}); })(); function openModal(kind){ if(kind==='member'){const m=document.getElementById('modalMember'); m.classList.remove('hidden'); m.classList.add('flex'); document.body.style.overflow='hidden';} if(kind==='brief'){const m=document.getElementById('modalBrief'); m.classList.remove('hidden'); m.classList.add('flex'); document.body.style.overflow='hidden';} } function closeModal(kind){ if(kind==='member'){const m=document.getElementById('modalMember'); m.classList.add('hidden'); m.classList.remove('flex'); document.body.style.overflow='';} if(kind==='brief'){const m=document.getElementById('modalBrief'); m.classList.add('hidden'); m.classList.remove('flex'); document.body.style.overflow='';} }