// ── SUPABASE GUÍA + HECHURAS v2 (con foto + email) ────

// ── Hechuras ─────────────────────────────────────────
function Hechuras() {
  const { useState, useRef } = React;
  const [hechuras, setHechuras] = useState(()=>lsGet('hechuras',[]));
  const [selId,    setSel]      = useState(null);
  const [modalNuevo,setModal]   = useState(false);
  const [emailModal,setEmailModal]=useState(null);
  const [fotoPreview,setFoto]   = useState(null);
  const [camActiva, setCam]     = useState(false);
  const fileRef=useRef(); const videoRef=useRef(); const streamRef=useRef();
  const [nuevo, setNuevo]=useState({cliente:'',tipo:'',descripcion:'',metal:'Plata 925',presupuesto:0,senal:0,tecnico:TECNICOS[0],entrega:'',urgente:false,notas:'',emailCliente:'',telefonoCliente:''});
  const TIPOS=['Anillo sello','Collar personalizado','Brazalete','Pulsera','Aros únicos','Colgante escultural','Argollas matrimonio','Joya escultural','Otro'];
  const ETAPAS=[{n:'Diseño aprobado'},{n:'Presupuesto confirmado'},{n:'Materiales listos'},{n:'Fundición'},{n:'Forjado/Armado'},{n:'Pulido'},{n:'Montaje piedra'},{n:'Control calidad'},{n:'Lista para entrega'}];
  function guardar(lista){ setHechuras(lista); lsSet('hechuras',lista); }
  function crearHechura(){
    const id=`HE-${new Date().getFullYear()}-${String(hechuras.length+1).padStart(3,'0')}`;
    const lista=[...hechuras,{...nuevo,id,estado:'Recibido',ingreso:hoy(),etapas:ETAPAS.map(e=>({...e,ok:false})),fotoReferencia:fotoPreview||null}];
    guardar(lista); setSel(id); setModal(false); setFoto(null); stopCam();
    if(nuevo.emailCliente) sendEmailOT(id,{...nuevo,id},'hechura_recibida');
    setNuevo({cliente:'',tipo:'',descripcion:'',metal:'Plata 925',presupuesto:0,senal:0,tecnico:TECNICOS[0],entrega:'',urgente:false,notas:'',emailCliente:'',telefonoCliente:''});
  }
  function toggleEtapa(hId,idx){
    const lista=hechuras.map(h=>{
      if(h.id!==hId) return h;
      const e=[...h.etapas]; e[idx]={...e[idx],ok:!e[idx].ok};
      const pct=e.filter(x=>x.ok).length/e.length;
      const est=pct===0?'Recibido':pct<1?'En proceso':'Listo';
      if(est==='Listo'&&h.estado!=='Listo'&&h.emailCliente) sendEmailOT(h.id,h,'hechura_lista');
      return {...h,etapas:e,estado:est};
    });
    guardar(lista);
  }
  async function startCam(){ try{ const s=await navigator.mediaDevices.getUserMedia({video:true}); streamRef.current=s; if(videoRef.current) videoRef.current.srcObject=s; setCam(true); } catch{ alert('No se puede acceder a la cámara.'); } }
  function stopCam(){ if(streamRef.current) streamRef.current.getTracks().forEach(t=>t.stop()); setCam(false); }
  function tomarFoto(){ if(!videoRef.current) return; const c=document.createElement('canvas'); c.width=videoRef.current.videoWidth; c.height=videoRef.current.videoHeight; c.getContext('2d').drawImage(videoRef.current,0,0); setFoto(c.toDataURL('image/jpeg',0.8)); stopCam(); }
  function subirFoto(e){ const f=e.target.files[0]; if(!f) return; const r=new FileReader(); r.onload=ev=>setFoto(ev.target.result); r.readAsDataURL(f); }
  const selH=hechuras.find(h=>h.id===selId);
  const S=hecStyles;
  return (
    <div style={{display:'flex',height:'100%',overflow:'hidden'}}>
      <div style={S.lista}>
        <div style={{display:'flex',justifyContent:'space-between',alignItems:'center',padding:'11px 13px',borderBottom:'1px solid var(--border)'}}>
          <div style={{fontFamily:'Cormorant Garamond,serif',fontSize:'16px',fontWeight:600}}>Hechuras Exclusivas</div>
          <button onClick={()=>setModal(true)} style={inv2Styles.btnGold}>+ Nueva</button>
        </div>
        <div style={{flex:1,overflowY:'auto'}}>
          {hechuras.length===0
            ? <div style={{textAlign:'center',padding:'40px',color:'var(--cream-3)'}}><div style={{fontSize:'28px',marginBottom:'8px'}}>⚒️</div>Sin hechuras. Agrega la primera.</div>
            : hechuras.map(h=>{
                const pct=Math.round(h.etapas.filter(e=>e.ok).length/h.etapas.length*100);
                return (
                  <div key={h.id} onClick={()=>setSel(h.id===selId?null:h.id)} style={{...S.hecCard,...(selId===h.id?S.hecCardSel:{})}}>
                    {h.fotoReferencia&&<img src={h.fotoReferencia} alt="" style={{width:'100%',height:'70px',objectFit:'cover',borderRadius:'6px',marginBottom:'7px'}}/>}
                    <div style={{display:'flex',justifyContent:'space-between',marginBottom:'3px'}}>
                      <span style={{color:'var(--cream)',fontWeight:500,fontSize:'12px'}}>{h.cliente}</span>
                      <span style={estadoBadge(h.estado)}>{h.estado}</span>
                    </div>
                    <div style={{color:'var(--cream-3)',fontSize:'10px',marginBottom:'6px'}}>{h.tipo||h.descripcion?.slice(0,30)}</div>
                    <div style={{height:'3px',background:'var(--surface)',borderRadius:'2px',overflow:'hidden',marginBottom:'3px'}}>
                      <div style={{height:'100%',width:`${pct}%`,background:pct===100?'#27ae60':'var(--gold)',borderRadius:'2px',transition:'width 0.4s'}}/>
                    </div>
                    <div style={{display:'flex',justifyContent:'space-between',fontSize:'10px'}}>
                      <span style={{color:'var(--cream-3)'}}>{pct}%</span>
                      <span style={{color:'var(--gold)',fontWeight:600}}>{clp(h.presupuesto)}</span>
                    </div>
                    {h.urgente&&<div style={{fontSize:'9px',color:'#c0392b',fontWeight:700,marginTop:'3px'}}>🔴 URGENTE</div>}
                  </div>
                );
              })
          }
        </div>
      </div>

      {selH&&(
        <div style={{flex:1,overflowY:'auto',padding:'18px'}}>
          <div style={{display:'flex',justifyContent:'space-between',alignItems:'flex-start',marginBottom:'14px'}}>
            <div>
              <div style={{fontFamily:'Cormorant Garamond,serif',fontSize:'21px',fontWeight:600,color:'var(--cream)'}}>{selH.tipo||'Hechura'}</div>
              <div style={{color:'var(--cream-3)',fontSize:'11px'}}>{selH.id} · {selH.cliente}</div>
            </div>
            <div style={{display:'flex',gap:'5px'}}>
              {selH.emailCliente&&<button onClick={()=>setEmailModal(selH)} style={{...inv2Styles.btnSec,fontSize:'11px'}}>✉️</button>}
              <span style={estadoBadge(selH.estado)}>{selH.estado}</span>
            </div>
          </div>
          {selH.fotoReferencia&&<img src={selH.fotoReferencia} alt="Referencia" style={{maxWidth:'280px',borderRadius:'10px',border:'1px solid var(--border)',marginBottom:'14px'}}/>}
          <div style={{display:'grid',gridTemplateColumns:'repeat(4,1fr)',gap:'7px',marginBottom:'14px'}}>
            {[{l:'Metal',v:selH.metal},{l:'Técnico',v:selH.tecnico},{l:'Ingreso',v:selH.ingreso},{l:'Entrega',v:selH.entrega||'—'}].map(f=>(
              <div key={f.l} style={{background:'var(--bg-card)',border:'1px solid var(--border)',borderRadius:'7px',padding:'9px'}}>
                <div style={{fontSize:'10px',color:'var(--cream-3)',marginBottom:'2px'}}>{f.l}</div>
                <div style={{color:'var(--cream)',fontSize:'12px',fontWeight:500}}>{f.v}</div>
              </div>
            ))}
          </div>
          <div style={{display:'grid',gridTemplateColumns:'repeat(3,1fr)',gap:'7px',marginBottom:'14px'}}>
            {[{l:'Presupuesto',v:clp(selH.presupuesto),c:'var(--gold)'},{l:'Señal',v:clp(selH.senal),c:'#27ae60'},{l:'Saldo',v:clp(selH.presupuesto-selH.senal),c:(selH.presupuesto-selH.senal)>0?'#f39c12':'#27ae60'}].map(f=>(
              <div key={f.l} style={{background:'var(--bg-card)',border:'1px solid var(--border)',borderRadius:'9px',padding:'11px',textAlign:'center'}}>
                <div style={{color:f.c,fontWeight:700,fontSize:'15px'}}>{f.v}</div>
                <div style={{color:'var(--cream-3)',fontSize:'10px',marginTop:'2px'}}>{f.l}</div>
              </div>
            ))}
          </div>
          <div style={{background:'var(--surface)',borderRadius:'9px',padding:'12px',marginBottom:'14px',borderLeft:'2px solid var(--gold)',fontSize:'12px',color:'var(--cream-2)',lineHeight:'1.6'}}>{selH.descripcion}</div>
          <div style={{background:'var(--bg-card)',border:'1px solid var(--border)',borderRadius:'12px',padding:'14px'}}>
            <div style={{fontFamily:'Cormorant Garamond,serif',fontSize:'15px',fontWeight:600,color:'var(--cream)',marginBottom:'10px'}}>Proceso de Producción</div>
            {selH.etapas.map((e,i)=>(
              <div key={i} onClick={()=>toggleEtapa(selH.id,i)}
                style={{display:'flex',alignItems:'center',gap:'9px',padding:'8px 0',borderBottom:'1px solid var(--border)',cursor:'pointer'}}>
                <div style={{width:'21px',height:'21px',borderRadius:'50%',flexShrink:0,background:e.ok?'var(--gold)':'var(--surface)',border:`2px solid ${e.ok?'var(--gold)':'var(--border)'}`,display:'flex',alignItems:'center',justifyContent:'center',color:'#0c0908',fontSize:'11px',transition:'all 0.2s'}}>{e.ok?'✓':''}</div>
                <span style={{color:e.ok?'var(--cream)':'var(--cream-3)',fontSize:'12px',flex:1}}>{e.n}</span>
                {e.ok&&<span style={{color:'var(--gold)',fontSize:'10px'}}>✦</span>}
              </div>
            ))}
            <div style={{marginTop:'8px',height:'5px',background:'var(--surface)',borderRadius:'3px',overflow:'hidden'}}>
              <div style={{height:'100%',width:`${Math.round(selH.etapas.filter(e=>e.ok).length/selH.etapas.length*100)}%`,background:selH.etapas.every(e=>e.ok)?'#27ae60':'var(--gold)',borderRadius:'3px',transition:'width 0.4s'}}/>
            </div>
          </div>
        </div>
      )}

      {modalNuevo&&(
        <div style={posStyles.overlay} onClick={e=>e.target===e.currentTarget&&(setModal(false),stopCam())}>
          <div style={{...posStyles.modalBox,maxWidth:'520px'}}>
            <div style={{...posStyles.modalHeader,marginBottom:'13px'}}>
              <span style={{fontFamily:'Cormorant Garamond,serif',fontSize:'20px',fontWeight:600}}>Nueva Hechura Exclusiva</span>
              <button onClick={()=>{setModal(false);stopCam();}} style={posStyles.clearBtn}>✕</button>
            </div>
            <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:'8px'}}>
              <div style={{gridColumn:'1/-1'}}><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Cliente *</div><input style={calcStyles.input} placeholder="Nombre del cliente" value={nuevo.cliente} onChange={e=>setNuevo(n=>({...n,cliente:e.target.value}))}/></div>
              <div><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Email (notificaciones)</div><input type="email" style={calcStyles.input} placeholder="cliente@email.cl" value={nuevo.emailCliente} onChange={e=>setNuevo(n=>({...n,emailCliente:e.target.value}))}/></div>
              <div><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Teléfono</div><input style={calcStyles.input} placeholder="+56 9 …" value={nuevo.telefonoCliente} onChange={e=>setNuevo(n=>({...n,telefonoCliente:e.target.value}))}/></div>
              <div><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Tipo de pieza</div>
                <select style={{...invStyles2.select,width:'100%'}} value={nuevo.tipo} onChange={e=>setNuevo(n=>({...n,tipo:e.target.value}))}>
                  <option value="">Seleccionar…</option>{TIPOS.map(t=><option key={t}>{t}</option>)}</select></div>
              <div><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Metal</div>
                <select style={{...invStyles2.select,width:'100%'}} value={nuevo.metal} onChange={e=>setNuevo(n=>({...n,metal:e.target.value}))}>
                  {['Plata 925','Oro 18K','Oro 14K','Cobre','Latón','Platino'].map(m=><option key={m}>{m}</option>)}</select></div>
              <div><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Presupuesto CLP</div><input type="number" style={calcStyles.input} value={nuevo.presupuesto} onChange={e=>setNuevo(n=>({...n,presupuesto:parseInt(e.target.value)||0}))}/></div>
              <div><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Señal CLP</div><input type="number" style={calcStyles.input} value={nuevo.senal} onChange={e=>setNuevo(n=>({...n,senal:parseInt(e.target.value)||0}))}/></div>
              <div><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Fecha entrega</div><input type="date" style={calcStyles.input} value={nuevo.entrega} onChange={e=>setNuevo(n=>({...n,entrega:e.target.value}))}/></div>
              <div><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Técnico</div>
                <select style={{...invStyles2.select,width:'100%'}} value={nuevo.tecnico} onChange={e=>setNuevo(n=>({...n,tecnico:e.target.value}))}>
                  {TECNICOS.map(t=><option key={t}>{t}</option>)}</select></div>
              <div style={{gridColumn:'1/-1'}}><div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Descripción del trabajo</div><textarea style={{...calcStyles.input,height:'60px'}} placeholder="Describe detalladamente la pieza…" value={nuevo.descripcion} onChange={e=>setNuevo(n=>({...n,descripcion:e.target.value}))}/></div>
              {/* Foto */}
              <div style={{gridColumn:'1/-1'}}>
                <div style={{fontSize:'11px',color:'var(--gold)',fontWeight:600,marginBottom:'7px'}}>📷 Foto o imagen de referencia</div>
                {!fotoPreview&&!camActiva&&(
                  <div style={{display:'flex',gap:'7px'}}>
                    <button onClick={startCam} style={{...inv2Styles.btnSec,flex:1}}>📷 Cámara</button>
                    <button onClick={()=>fileRef.current?.click()} style={{...inv2Styles.btnSec,flex:1}}>🖼 Subir imagen</button>
                    <input ref={fileRef} type="file" accept="image/*" style={{display:'none'}} onChange={subirFoto}/>
                  </div>
                )}
                {camActiva&&(
                  <div style={{textAlign:'center'}}>
                    <video ref={videoRef} autoPlay playsInline style={{width:'100%',maxHeight:'180px',borderRadius:'8px',border:'1px solid var(--border)'}}/>
                    <div style={{display:'flex',gap:'7px',marginTop:'7px'}}>
                      <button onClick={tomarFoto} style={{...inv2Styles.btnGold,flex:1}}>📸 Capturar</button>
                      <button onClick={stopCam} style={{...inv2Styles.btnSec,flex:1}}>✕ Cancelar</button>
                    </div>
                  </div>
                )}
                {fotoPreview&&(
                  <div style={{position:'relative',display:'inline-block'}}>
                    <img src={fotoPreview} alt="" style={{width:'100%',maxHeight:'150px',objectFit:'cover',borderRadius:'8px',border:'1px solid var(--border)'}}/>
                    <button onClick={()=>setFoto(null)} style={{position:'absolute',top:'4px',right:'4px',background:'rgba(0,0,0,0.7)',border:'none',color:'white',borderRadius:'50%',width:'20px',height:'20px',cursor:'pointer',fontSize:'11px'}}>✕</button>
                  </div>
                )}
              </div>
              <div style={{gridColumn:'1/-1',display:'flex',alignItems:'center',gap:'7px'}}>
                <input type="checkbox" checked={nuevo.urgente} onChange={e=>setNuevo(n=>({...n,urgente:e.target.checked}))} style={{accentColor:'#c0392b',width:'14px',height:'14px'}}/>
                <label style={{color:'#c0392b',fontSize:'12px',fontWeight:600,cursor:'pointer'}}>Marcar como urgente</label>
              </div>
            </div>
            <button onClick={crearHechura} style={{...posStyles.cobrarBtn,width:'100%',marginTop:'13px'}}>✦ Crear Hechura</button>
          </div>
        </div>
      )}
      {emailModal&&typeof EmailModal!=='undefined'&&<EmailModal orden={emailModal} tipo="hechura" onClose={()=>setEmailModal(null)}/>}
    </div>
  );
}

const hecStyles = {
  lista:{ width:'270px',display:'flex',flexDirection:'column',borderRight:'1px solid var(--border)',overflow:'hidden',flexShrink:0 },
  hecCard:{ padding:'10px 12px',borderBottom:'1px solid var(--border)',cursor:'pointer',transition:'background 0.1s' },
  hecCardSel:{ background:'rgba(201,168,76,0.06)',borderLeft:'2px solid var(--gold)' },
};

// ── Supabase Guía ─────────────────────────────────────
function SupabaseGuia() {
  const { useState } = React;
  const [tab,setTab]=useState('conectar');
  const [url,setUrl]=useState(()=>localStorage.getItem('sb_url')||'');
  const [key,setKey]=useState(()=>localStorage.getItem('sb_key')||'');
  const [ok,setOk]=useState(false);
  const [migEstado,setMigEstado]=useState(null); // {count,omitted} | 'cargando' | 'error'
  const [syncEstado,setSyncEstado]=useState(null); // 'cargando' | 'ok' | 'sin-cambios' | 'error'
  function guardar(){ localStorage.setItem('sb_url',url); localStorage.setItem('sb_key',key); setOk(true); setTimeout(()=>setOk(false),2500); }
  async function migrar(){
    setMigEstado('cargando');
    try { const r = await sbPushAll(); setMigEstado(r); }
    catch { setMigEstado('error'); }
  }
  async function sincronizarAhora(){
    setSyncEstado('cargando');
    try {
      const cambio = await sbPullAll();
      if (cambio) { setSyncEstado('ok'); setTimeout(()=>window.location.reload(), 900); }
      else setSyncEstado('sin-cambios');
    } catch { setSyncEstado('error'); }
  }
  const PASOS_NETLIFY=[
    {n:'1',t:'Descargar proyecto',d:'Desde el botón ZIP de este editor. Te genera un archivo descargable.'},
    {n:'2',t:'Crear cuenta en Netlify',d:'Ve a netlify.com → "Sign up" gratis con Gmail.'},
    {n:'3',t:'Subir el proyecto',d:'"Add new site" → "Deploy manually" → arrastra la carpeta del proyecto.'},
    {n:'4',t:'URL lista ✓',d:'Recibes una URL tipo navarro-erp.netlify.app. Compártela con tu equipo.'},
    {n:'5',t:'Dominio propio (opcional)',d:'Domain settings → agrega navarro-joyeria.cl si tienes el dominio.'},
  ];
  const PASOS_SB=[
    {n:'1',t:'Nuevo proyecto',d:'supabase.com → tu org Nanook → "New project". Anota la URL y anon key.'},
    {n:'2',t:'Ejecutar SQL',d:'SQL Editor → New query → pega el archivo supabase/schema_navarro_erp.sql → Run.'},
    {n:'3',t:'Importar inventario',d:'Table Editor → inventory → Import data → sube data/inventario_real.json.'},
    {n:'4',t:'Pegar credenciales',d:'Copia URL y anon key y pégalas abajo.'},
    {n:'5',t:'Conectado ✓',d:'Los datos viajan a la nube. Accesible desde cualquier dispositivo.'},
  ];
  return (
    <div style={{display:'flex',flexDirection:'column',border:'1px solid var(--border)',borderRadius:'12px',overflow:'hidden',background:'var(--bg-card)'}}>
      <div style={{display:'flex',borderBottom:'1px solid var(--border)',background:'var(--bg-card)',flexShrink:0}}>
        {[{id:'conectar',l:'🔌 Supabase'},{id:'deploy',l:'🚀 Publicar Online'},{id:'datos',l:'📦 Estado datos'}].map(t=>(
          <button key={t.id} onClick={()=>setTab(t.id)}
            style={{padding:'10px 16px',background:'transparent',border:'none',color:tab===t.id?'var(--cream)':'var(--cream-3)',cursor:'pointer',fontSize:'12px',fontFamily:'Inter,sans-serif',borderBottom:tab===t.id?'2px solid var(--gold)':'2px solid transparent'}}>
            {t.l}
          </button>
        ))}
      </div>
      <div style={{padding:'20px'}}>
        {tab==='conectar'&&(
          <div>
            <div style={{fontFamily:'Cormorant Garamond,serif',fontSize:'22px',fontWeight:600,color:'var(--cream)',marginBottom:'6px'}}>Conectar Supabase</div>
            <div style={{color:'var(--cream-3)',fontSize:'12px',marginBottom:'18px'}}>Ya tienes cuenta Nanook. Crea un proyecto y pega las credenciales aquí.</div>

            <div style={{background:'rgba(39,174,96,0.08)',border:'1px solid rgba(39,174,96,0.3)',borderRadius:'10px',padding:'14px',marginBottom:'16px'}}>
              <div style={{fontWeight:600,color:'#27ae60',marginBottom:'4px'}}>☁ Sincronización en la nube — ACTIVA</div>
              <div style={{fontSize:'12px',color:'var(--cream-3)',marginBottom:'12px'}}>
                La app ya está conectada a Supabase. Cada cambio (ventas, inventario, clientes, etc.) se sube automáticamente
                y se descarga al abrir la app desde cualquier dispositivo o región.
              </div>

              <div style={{display:'flex',flexDirection:'column',gap:'10px'}}>
                <div>
                  <button onClick={migrar} disabled={migEstado==='cargando'} style={{...posStyles.cobrarBtn,width:'100%',opacity:migEstado==='cargando'?0.6:1}}>
                    {migEstado==='cargando' ? '⏳ Subiendo datos del PC a la nube…' : '⬆ Migrar datos de este PC a la nube (usar UNA vez, en el PC Windows principal)'}
                  </button>
                  {migEstado && migEstado!=='cargando' && migEstado!=='error' && (
                    <div style={{marginTop:'7px',fontSize:'11px',color:'#27ae60'}}>
                      ✓ {migEstado.count} tablas subidas a la nube{migEstado.omitted>0?` · ${migEstado.omitted} omitidas (muy pesadas, ej. fotos — quedan locales)`:''}.
                    </div>
                  )}
                  {migEstado==='error' && <div style={{marginTop:'7px',fontSize:'11px',color:'#c0392b'}}>✕ Error al migrar. Revisa tu conexión a internet e intenta de nuevo.</div>}
                </div>

                <div>
                  <button onClick={sincronizarAhora} disabled={syncEstado==='cargando'}
                    style={{width:'100%',padding:'9px',background:'var(--surface)',border:'1px solid var(--border)',borderRadius:'7px',color:'var(--cream)',cursor:'pointer',fontSize:'12px',fontFamily:'Inter,sans-serif',opacity:syncEstado==='cargando'?0.6:1}}>
                    {syncEstado==='cargando' ? '⏳ Buscando cambios…' : '⬇ Sincronizar ahora (traer los últimos datos de la nube)'}
                  </button>
                  {syncEstado==='ok' && <div style={{marginTop:'7px',fontSize:'11px',color:'#27ae60'}}>✓ Datos actualizados. Recargando…</div>}
                  {syncEstado==='sin-cambios' && <div style={{marginTop:'7px',fontSize:'11px',color:'var(--cream-3)'}}>✓ Ya tienes los datos más recientes.</div>}
                  {syncEstado==='error' && <div style={{marginTop:'7px',fontSize:'11px',color:'#c0392b'}}>✕ No se pudo conectar a la nube. Revisa tu conexión.</div>}
                </div>
              </div>

              <div style={{marginTop:'12px',padding:'9px',background:'rgba(243,156,18,0.08)',border:'1px solid rgba(243,156,18,0.25)',borderRadius:'7px',fontSize:'11px',color:'var(--cream-3)'}}>
                ⚠ Importante: usa el botón "Migrar" <b>solo una vez</b>, desde el PC Windows que tiene todos los datos reales
                (inventario, ventas, clientes). Hacerlo desde otro dispositivo podría subir datos vacíos y sobrescribir los reales.
              </div>
            </div>

            {PASOS_SB.map(p=>(
              <div key={p.n} style={{display:'flex',gap:'10px',padding:'10px',background:'var(--bg-card)',border:'1px solid var(--border)',borderRadius:'10px',marginBottom:'7px'}}>
                <div style={{width:'24px',height:'24px',borderRadius:'50%',background:'var(--gold)',color:'#0c0908',display:'flex',alignItems:'center',justifyContent:'center',fontWeight:700,fontSize:'12px',flexShrink:0}}>{p.n}</div>
                <div><div style={{color:'var(--cream)',fontWeight:500,marginBottom:'2px',fontSize:'13px'}}>{p.t}</div><div style={{color:'var(--cream-3)',fontSize:'11px'}}>{p.d}</div></div>
              </div>
            ))}
            <div style={{marginTop:'16px'}}>
              <div style={{marginBottom:'10px'}}>
                <div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Project URL</div>
                <input style={{...calcStyles.input,fontFamily:'monospace',fontSize:'11px'}} placeholder="https://xxxx.supabase.co" value={url} onChange={e=>setUrl(e.target.value)}/>
              </div>
              <div style={{marginBottom:'14px'}}>
                <div style={{fontSize:'11px',color:'var(--cream-3)',marginBottom:'3px'}}>Anon Public Key</div>
                <input style={{...calcStyles.input,fontFamily:'monospace',fontSize:'11px'}} placeholder="eyJhbGci…" value={key} onChange={e=>setKey(e.target.value)}/>
              </div>
              <button onClick={guardar} style={{...posStyles.cobrarBtn,width:'100%'}}>{ok?'✓ Guardado':'✦ Guardar Credenciales'}</button>
            </div>
          </div>
        )}
        {tab==='deploy'&&(
          <div>
            <div style={{fontFamily:'Cormorant Garamond,serif',fontSize:'22px',fontWeight:600,color:'var(--cream)',marginBottom:'6px'}}>Publicar Online</div>
            <div style={{color:'var(--cream-3)',fontSize:'12px',marginBottom:'18px'}}>Para acceder desde celular, tienda y taller simultáneamente.</div>
            <div style={{background:'rgba(201,168,76,0.08)',border:'1px solid rgba(201,168,76,0.3)',borderRadius:'12px',padding:'14px',marginBottom:'16px'}}>
              <div style={{color:'var(--gold)',fontWeight:600,marginBottom:'6px'}}>⭐ Netlify — gratis, 5 minutos</div>
              <a href="https://netlify.com" target="_blank" style={{display:'inline-block',padding:'7px 14px',background:'var(--gold)',borderRadius:'7px',color:'#0c0908',fontWeight:700,fontSize:'12px',textDecoration:'none'}}>Ir a Netlify.com →</a>
            </div>
            {PASOS_NETLIFY.map(p=>(
              <div key={p.n} style={{display:'flex',gap:'10px',padding:'10px',background:'var(--bg-card)',border:'1px solid var(--border)',borderRadius:'10px',marginBottom:'7px'}}>
                <div style={{width:'24px',height:'24px',borderRadius:'50%',background:'var(--gold)',color:'#0c0908',display:'flex',alignItems:'center',justifyContent:'center',fontWeight:700,fontSize:'12px',flexShrink:0}}>{p.n}</div>
                <div><div style={{color:'var(--cream)',fontWeight:500,marginBottom:'2px',fontSize:'13px'}}>{p.t}</div><div style={{color:'var(--cream-3)',fontSize:'11px'}}>{p.d}</div></div>
              </div>
            ))}
          </div>
        )}
        {tab==='datos'&&(
          <div>
            <div style={{fontFamily:'Cormorant Garamond,serif',fontSize:'22px',fontWeight:600,color:'var(--cream)',marginBottom:'16px'}}>Estado de los Datos</div>
            {[
              {t:'Inventario Navarro (806)',s:'En uso ✓',c:'#27ae60',d:'Todos los productos cargados desde el archivo Excel original.'},
              {t:'Inventario Rubí',s:'Pendiente',c:'#f39c12',d:'Agrégalo desde Inventario → Nuevo producto → selecciona Rubí.'},
              {t:'Clientes',s:'Vacío — listo',c:'var(--cream-3)',d:'Se llena desde el POS o desde el módulo Clientes.'},
              {t:'Órdenes de trabajo',s:'Vacío — listo',c:'var(--cream-3)',d:'Créalas desde Taller / OT. Empiezan desde cero.'},
              {t:'Ventas',s:'Vacío — listo',c:'var(--cream-3)',d:'Cada venta del POS se guarda automáticamente.'},
              {t:'Fotos de productos',s:'806 sin foto',c:'#f39c12',d:'Agrega fotos desde Inventario → ficha del producto → ícono 📷.'},
            ].map((r,i)=>(
              <div key={i} style={{display:'flex',justifyContent:'space-between',alignItems:'flex-start',padding:'11px',background:'var(--bg-card)',border:'1px solid var(--border)',borderRadius:'9px',marginBottom:'7px',gap:'10px'}}>
                <div style={{flex:1}}><div style={{color:'var(--cream)',fontWeight:500,marginBottom:'2px'}}>{r.t}</div><div style={{color:'var(--cream-3)',fontSize:'11px'}}>{r.d}</div></div>
                <span style={{fontSize:'11px',padding:'2px 9px',borderRadius:'20px',fontWeight:600,background:`${r.c}22`,color:r.c,flexShrink:0,whiteSpace:'nowrap'}}>{r.s}</span>
              </div>
            ))}
          </div>
        )}
      </div>
    </div>
  );
}

Object.assign(window, { Hechuras, SupabaseGuia });
