1import{an as Z,a as $,f as O,r,a_ as Q,aR as X,R as ee,j as e,_ as ae,m as i,A as se,L as F,a1 as te,W as ne,b0 as re,b1 as w,b2 as N,b3 as C,bd as ie,b4 as k,b5 as S,a5 as _,B as M,Y as oe,aD as le,aJ as de,aK as A,s as q,aW as T,b9 as ce,C as me,b7 as ue}from"./index-Dlwfq7KD.js";import{F as pe}from"./Footer-BpU4N5pB.js";import{C as m,a as p,b as x,c as h,d as g}from"./card-qgKyrVer.js";import{T as xe}from"./textarea-BPUto-jT.js";import{S as he}from"./slider-DZiWcyqa.js";import{A as ge,a as be,b as ve,c as fe}from"./accordion-B9163k5l.js";import{C as je}from"./compass-BMnLt8go.js";import{T as ye}from"./trending-up-ORO0f42Y.js";import{S as P}from"./sparkles-Dv6R3SLW.js";import{I as we}from"./instagram-Uk_a1A9h.js";import{C as Ne}from"./circle-alert-D5d7bjYC.js";import{C as Ce}from"./circle-x-CZjv95KM.js";import"./youtube-D_VbFAnH.js";import"./mail-Bh1_69pd.js";import"./phone-CeyxX5Xj.js";import"./index-BdQq_4o_.js";import"./index-DikORJAn.js";import"./index-rtu4Vv-f.js";const ke=de({motivation:A().trim().min(50,"Min. 50").max(2e3),social_links:A().trim().max(500).optional(),audience_info:A().trim().max(500).optional()}),Se=1200,Ae=.05;function Ye(){const{user:n,loading:b}=Z(),{tx:a}=$(),I=O(),[l,v]=r.useState(null),[R,E]=r.useState(!0),[z,D]=r.useState(!1),[W,f]=r.useState(!1),[j,V]=r.useState([4]),u=r.useRef(null),d=Q({resolver:ue(ke),defaultValues:{motivation:"",social_links:"",audience_info:""}});r.useEffect(()=>{b||(async()=>{if(!n){v(null),E(!1);return}const{data:t,error:o}=await q.from("ambassador_applications").select("*").eq("user_id",n.id).maybeSingle();o?console.error("Error fetching application:",o):v(t),E(!1)})()},[n,b]);const B=async(s,t)=>{D(!0);const{error:o}=await q.from("ambassador_applications").insert({user_id:t,motivation:s.motivation,social_links:s.social_links||null,audience_info:s.audience_info||null});if(o)console.error("Error submitting application:",o),T.error(a("Error al enviar la solicitud","Failed to submit application","Fehler beim Senden","Erreur lors de l'envoi"));else{T.success(a("¡Solicitud enviada! Te contactaremos pronto.","Application submitted! We'll contact you soon.","Bewerbung gesendet! Wir melden uns bald.","Candidature envoyée ! Nous vous contacterons bientôt."));const{data:y}=await q.from("ambassador_applications").select("*").eq("user_id",t).maybeSingle();v(y),d.reset()}D(!1)};r.useEffect(()=>{if(n&&u.current){const s=u.current;u.current=null,f(!1),B(s,n.id)}},[n]);const L=async s=>{if(!n){u.current=s,f(!0),T.info(a("Crea tu cuenta en 30 segundos y enviamos tu solicitud automáticamente.","Create your account in 30 seconds and we'll send your application automatically.","Erstelle dein Konto in 30 Sekunden â wir senden deine Bewerbung automatisch.","Créez votre compte en 30 secondes et nous enverrons votre candidature automatiquement."));return}await B(s,n.id)},G=[{icon:X,title:a("Ganas en cada reserva","Earn on every booking","Verdiene bei jeder Buchung","Gagnez sur chaque réservation"),desc:a("Comisión por cada viaje reservado con tu código, sin lÃmite.","Commission on every trip booked with your code, no cap.","Provision für jede Reise mit deinem Code, ohne Limit.","Commission sur chaque voyage réservé avec votre code, sans limite."),tone:"from-primary/15 to-primary/5 text-primary"},{icon:ee,title:a("Tus amigos ahorran","Your friends save","Deine Freunde sparen","Vos amis économisent"),desc:a("Tu código da descuento a quien lo usa. Todos ganan.","Your code gives a discount to whoever uses it. Everybody wins.","Dein Code gibt Rabatt. Alle gewinnen.","Votre code offre une remise. Tout le monde y gagne."),tone:"from-rose-500/15 to-rose-500/5 text-rose-500"},{icon:je,title:a("Acceso anticipado","Early access","Früher Zugang","Accès anticipé"),desc:a("Conoces los viajes nuevos antes que nadie y viajas con beneficios.","See new trips before anyone else and travel with perks.","Sieh neue Reisen als Erste:r und reise mit Vorteilen.","Découvrez les nouveaux voyages en avant-première."),tone:"from-violet-500/15 to-violet-500/5 text-violet-500"},{icon:ye,title:a("Panel en tiempo real","Real-time dashboard","Echtzeit-Dashboard","Tableau de bord en temps réel"),desc:a("Clics, reservas y comisiones acumuladas, siempre a la vista.","Clicks, bookings and earnings, always visible.","Klicks, Buchungen und Provisionen immer sichtbar.","Clics, réservations et gains toujours visibles."),tone:"from-teal-500/15 to-teal-500/5 text-teal-500"}
1],K=[{n:"1",title:a("Cuéntanos de ti","Tell us about you","Erzähl uns von dir","Parlez-nous de vous"),desc:a("Dos minutos. Sin requisitos de seguidores.","Two minutes. No follower requirements.","Zwei Minuten. Keine Follower-Vorgaben.","Deux minutes. Sans exigence d'abonnés.")},{n:"2",title:a("Recibes tu código","Get your code","Erhalte deinen Code","Recevez votre code"),desc:a("Lo revisamos y activamos tu código personalizado.","We review it and activate your personal code.","Wir prüfen und aktivieren deinen Code.","Nous validons et activons votre code.")},{n:"3",title:a("Compartes y ganas","Share and earn","Teilen und verdienen","Partagez et gagnez"),desc:a("Cada reserva con tu código suma a tu balance.","Every booking with your code adds to your balance.","Jede Buchung zahlt auf dein Guthaben ein.","Chaque réservation alimente votre solde.")}],U=[{q:a("¿Necesito ser influencer?","Do I need to be an influencer?","Muss ich Influencer sein?","Dois-je être influenceur ?"),a:a("No. Buscamos personas que amen México y viajen con amigos. Tu comunidad puede ser pequeña.","No. We look for people who love Mexico and travel with friends. Your community can be small.","Nein. Wir suchen Menschen, die Mexiko lieben.","Non. Nous cherchons des passionnés du Mexique.")},{q:a("¿Cuánto cuesta entrar?","How much does it cost?","Was kostet es?","Combien ça coûte ?"),a:a("Nada. El programa es gratuito y sin exclusividad.","Nothing. The program is free and non-exclusive.","Nichts. Das Programm ist kostenlos.","Rien. Le programme est gratuit.")},{q:a("¿Cuándo recibo mis comisiones?","When do I get paid?","Wann werde ich bezahlt?","Quand suis-je payé ?"),a:a("Cuando la reserva se confirma y pasa el periodo de cancelación. Todo se ve en tu panel.","Once the booking is confirmed and the cancellation window closes. All visible in your dashboard.","Sobald die Buchung bestätigt ist.","Une fois la réservation confirmée.")},{q:a("¿Puedo aplicar sin cuenta?","Can I apply without an account?","Kann ich mich ohne Konto bewerben?","Puis-je postuler sans compte ?"),a:a("Puedes llenar la solicitud ahora; al enviarla creamos tu cuenta en 30 segundos para darte seguimiento.","You can fill the form now; when you send it we create your account in 30 seconds to track your application.","Du kannst das Formular ausfüllen; beim Senden erstellen wir dein Konto.","Remplissez le formulaire ; à l'envoi nous créons votre compte.")}],Y=Math.round(j[0]*Se*Ae),J=()=>{if(!l)return null;switch(l.status){case"pending":return e.jsxs(m,{className:"border-amber-200 bg-amber-50 dark:border-amber-900 dark:bg-amber-950/20",children:[e.jsx(x,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(me,{className:"h-8 w-8 text-amber-600"}),e.jsxs("div",{children:[e.jsx(h,{className:"text-amber-800 dark:text-amber-200",children:a("Solicitud pendiente","Application pending","Bewerbung ausstehend","Candidature en attente")}),e.jsx(g,{className:"text-amber-700 dark:text-amber-300",children:a("Tu solicitud está siendo revisada. Te notificaremos pronto.","Your application is being reviewed. We'll notify you soon.","Deine Bewerbung wird geprüft.","Votre candidature est en cours d'examen.")})]})]})}),e.jsx(p,{children:e.jsxs("p",{className:"text-sm text-muted-foreground",children:[a("Aplicaste el","Applied on","Beworben am","Postulé le")," ",new Date(l.created_at).toLocaleDateString()]})})]});case"active":return e.jsxs(m,{className:"border-green-200 bg-green-50 dark:border-green-900 dark:bg-green-950/20",children:[e.jsx(x,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ce,{className:"h-8 w-8 text-green-600"}),e.jsxs("div",{children:[e.jsx(h,{className:"text-green-800 dark:text-green-200",children:a("¡Bienvenido al equipo!","Welcome to the team!","Willkommen im Team!","Bienvenue dans l'équipe !")}),e.jsx(g,{className:"text-green-700 dark:text-green-300",children:a("Tu solicitud fue aprobada. Entra a tu panel de embajador.","Your application was approved. Access your ambassador dashboard.","Deine Bewerbung wurde genehmigt.","Votre candidature a été approuvée.")})]})]})}),e.jsx(p,{children:e.jsxs(M,{onClick:()=>I("/ambassador"),className:"gap-2",children:[e.jsx(P,{className:"h-4 w-4"}),a("Ir al panel","Go to dashboard","Zum Dashboard","Aller au tableau de bord")]})})]});case"rejected":return e.jsxs(m,{className:"border-red-200 bg-red-50 dark:border-red-900 dark:bg-red-950/20",children:[e.jsx(x,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Ce,{className:"h-8 w-8 text-red-600"}),e.jsxs("div",{children:[e.jsx(h,{className:"text-red-800 dark:text-red-200",children:a("Solicitud no aprobada","Application not approved","Bewerbung abgelehnt","Candidature non approuvée")}
1),e.jsx(g,{className:"text-red-700 dark:text-red-300",children:a("Lo sentimos, tu solicitud no fue aprobada en esta ocasión.","Sorry, your application was not approved at this time.","Leider wurde deine Bewerbung nicht angenommen.","Désolé, votre candidature n'a pas été retenue.")})]})]})}),l.rejection_reason&&e.jsx(p,{children:e.jsxs("p",{className:"text-sm",children:[e.jsxs("strong",{children:[a("Motivo","Reason","Grund","Motif"),":"]})," ",l.rejection_reason]})})]});case"suspended":return e.jsx(m,{className:"border-orange-200 bg-orange-50 dark:border-orange-900 dark:bg-orange-950/20",children:e.jsx(x,{children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Ne,{className:"h-8 w-8 text-orange-600"}),e.jsxs("div",{children:[e.jsx(h,{className:"text-orange-800 dark:text-orange-200",children:a("Cuenta suspendida","Account suspended","Konto gesperrt","Compte suspendu")}),e.jsx(g,{className:"text-orange-700 dark:text-orange-300",children:a("Tu cuenta de embajador está suspendida. Contacta a soporte.","Your ambassador account is suspended. Contact support.","Dein Botschafter-Konto ist gesperrt.","Votre compte ambassadeur est suspendu.")})]})]})})})}},c={hidden:{opacity:0,y:20},visible:{opacity:1,y:0}};return e.jsxs("div",{className:"min-h-screen flex flex-col bg-background",children:[e.jsx(ae,{}),e.jsx("section",{className:"relative overflow-hidden pt-28 pb-16 md:pt-36 md:pb-24 px-4 bg-background",children:e.jsxs(i.div,{className:"relative container mx-auto max-w-6xl grid lg:grid-cols-[1.15fr_0.85fr] gap-12 lg:gap-16 items-center",initial:"hidden",animate:"visible",variants:{visible:{transition:{staggerChildren:.09}}},children:[e.jsxs("div",{children:[e.jsxs(i.span,{variants:c,className:"inline-flex items-center gap-2 rounded-full border border-primary/20 bg-white px-3.5 py-1.5 text-[0.7rem] font-semibold uppercase tracking-[0.18em] text-foreground shadow-sm",children:[e.jsx(P,{className:"h-3.5 w-3.5 text-primary"}),a("Programa de embajadores","Ambassador program","Botschafter-Programm","Programme ambassadeurs")]}),e.jsxs(i.h1,{variants:c,className:"mt-6 font-display font-bold leading-[1.05] text-foreground",style:{fontSize:"clamp(2.25rem, 5.5vw, 4rem)"},children:[a("Viaja, comparte","Travel, share","Reise, teile","Voyagez, partagez")," ",e.jsx("span",{className:"bg-gradient-to-r from-primary via-violet-500 to-secondary bg-clip-text text-transparent",children:a("y gana","and earn","und verdiene","et gagnez")})]}),e.jsx(i.p,{variants:c,className:"mt-5 text-muted-foreground text-base md:text-lg max-w-xl leading-relaxed",children:a("No necesitas ser influencer. Si amas viajar! o quieres ganar un extra, y tus amigos te piden recomendaciones, ya eres embajador â solo falta tu código.","You don't need to be an influencer. If you love to travel or want to earn extra, and friends ask you for recommendations, you're already an ambassador â you just need your code.","Du musst kein Influencer sein. Wenn du gerne reist oder etwas dazuverdienen willst, bist du schon Botschafter:in.","Pas besoin d'être influenceur. Si vous aimez voyager ou voulez gagner un complément, vous êtes déjà ambassadeur.")}),e.jsxs(i.div,{variants:c,className:"mt-8 flex flex-wrap items-center gap-3",children:[e.jsxs("a",{href:"#application-form",className:"inline-flex items-center gap-2 gradient-bg text-white px-7 py-3.5 rounded-full font-semibold text-sm shadow-brand transition-all duration-200 hover:scale-[1.03] active:scale-[0.97]",children:[a("Quiero mi código","I want my code","Ich will meinen Code","Je veux mon code"),e.jsx(se,{className:"h-4 w-4"})]}),e.jsx("span",{className:"text-xs text-muted-foreground font-medium",children:a("Gratis · 2 minutos · sin exclusividad","Free · 2 minutes · non-exclusive","Kostenlos · 2 Minuten","Gratuit · 2 minutes")})]})]}),e.jsxs(i.div,{variants:c,className:"relative rounded-3xl border border-white/20 gradient-bg p-7 shadow-[var(--shadow-elevated)] text-white",children:[e.jsx("p",{className:"text-xs font-semibold uppercase tracking-[0.16em] text-white/80",children:a("Calcula tus ganancias","Estimate your earnings","Verdienst schätzen","Estimez vos gains")}),e.jsx("p",{className:"mt-4 text-sm text-white/90",children:a("Amigos que viajan al año con tu código","Friends travelling per year with your code","Freunde pro Jahr mit deinem Code","Amis voyageant par an avec votre code")}),e.jsxs("div",{className:"mt-3 flex items-baseline gap-2",children:[e.jsx("span",{className:"font-display text-4xl font-bold text-white",children:j[0]}),e.jsx("span",{className:"text-sm text-white/80",children:a("personas","people","Personen","personnes")})]}),e.jsx(he,{value:j,onValueChange:V,min:1,max:30,step:1,className:"mt-5"}),e.jsxs("div",{className:"mt-7 rounded-2xl bg-white/15 backdrop-blur-sm border border-white/20 p-5 text-white",children:[e.jsx("p",{className:"text-[0.7rem] uppercase tracking-[0.16em] text-white/80",children:a("Ganancia estimada al año","Estimated yearly earnings","Geschätzter Jahresverdienst","Gains annuels estimés")}),e.jsxs("p",{className:"mt-1 font-display text-3xl font-bold text-white",children:["$",Y.toLocaleStr
1ing()," USD"]})]}),e.jsx("p",{className:"mt-3 text-[0.7rem] leading-relaxed text-white/70",children:a("Estimación con un viaje promedio de $1,200 USD y 5% de comisión. Las comisiones reales se confirman al aprobar tu solicitud.","Estimate based on a $1,200 USD average trip and a 5% commission. Actual rates are confirmed when your application is approved.","Schätzung: Reise 1.200 USD, 5 % Provision.","Estimation : voyage moyen 1 200 USD, commission 5 %.")})]})]})}),e.jsx("section",{className:"py-16 md:py-20 px-4 bg-muted/30",children:e.jsxs("div",{className:"container mx-auto max-w-5xl lg:max-w-7xl",children:[e.jsx("h2",{className:"font-display text-2xl md:text-3xl lg:text-4xl font-bold text-center text-foreground mb-12",children:a("Lo que recibes","What you get","Was du bekommst","Ce que vous recevez")}),e.jsx("div",{className:"grid sm:grid-cols-2 lg:grid-cols-4 gap-5 lg:gap-7",children:G.map(({icon:s,title:t,desc:o,tone:y},H)=>e.jsxs(i.div,{initial:{opacity:0,y:18},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{delay:H*.07,duration:.35},className:"rounded-2xl border border-border/60 bg-card p-6 lg:p-9 shadow-[var(--shadow-card)] hover:shadow-[var(--shadow-elevated)] hover:border-primary/20 transition-all duration-300",children:[e.jsx("div",{className:`w-12 h-12 lg:w-14 lg:h-14 rounded-xl bg-gradient-to-br flex items-center justify-center ${y}`,children:e.jsx(s,{className:"h-6 w-6 lg:h-7 lg:w-7"})}),e.jsx("h3",{className:"mt-5 lg:mt-6 font-display font-semibold lg:text-xl text-foreground",children:t}),e.jsx("p",{className:"mt-2.5 lg:mt-3 text-sm lg:text-base text-muted-foreground leading-relaxed",children:o})]},t))})]})}),e.jsx("section",{className:"py-10 md:py-14 px-4",children:e.jsxs("div",{className:"container mx-auto max-w-5xl lg:max-w-7xl",children:[e.jsx("h2",{className:"font-display text-xl md:text-2xl lg:text-3xl font-bold text-center text-foreground mb-6 lg:mb-10",children:a("Asà de simple","It's this simple","So einfach ist es","C'est aussi simple")}),e.jsx("div",{className:"grid md:grid-cols-3 gap-4 lg:gap-7",children:K.map((s,t)=>e.jsx(i.div,{initial:{opacity:0,y:12},whileInView:{opacity:1,y:0},viewport:{once:!0},transition:{delay:t*.08,duration:.35},className:"rounded-2xl border border-border/50 bg-card/60 p-4 md:p-5 lg:p-8",children:e.jsxs("div",{className:"flex items-center gap-3 lg:gap-4",children:[e.jsx("div",{className:"shrink-0 w-9 h-9 lg:w-14 lg:h-14 rounded-full gradient-bg flex items-center justify-center text-white text-sm lg:text-xl font-bold",children:s.n}),e.jsxs("div",{children:[e.jsx("h3",{className:"font-display font-semibold text-foreground text-sm lg:text-xl",children:s.title}),e.jsx("p",{className:"text-xs lg:text-base text-muted-foreground mt-0.5 lg:mt-1.5 leading-relaxed",children:s.desc})]})]})},s.n))})]})}),e.jsx("section",{id:"application-form",className:"py-16 md:py-20 px-4 bg-muted/20 scroll-mt-24",children:e.jsx("div",{className:"container mx-auto max-w-2xl",children:b||R?e.jsx("div",{className:"flex justify-center py-16",children:e.jsx(F,{className:"h-8 w-8 animate-spin text-primary"})}):l?J():e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"text-center mb-10",children:[e.jsxs(te,{variant:"secondary",className:"mb-4",children:[e.jsx(ne,{className:"h-3 w-3 mr-1"}),a("Solicitud","Application","Bewerbung","Candidature")]}),e.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-foreground mb-3",children:a("Cuéntanos quién eres","Tell us who you are","Erzähl uns, wer du bist","Dites-nous qui vous êtes")}),e.jsx("p",{className:"text-muted-foreground",children:a("Tres campos, dos de ellos opcionales.","Three fields, two of them optional.","Drei Felder, zwei optional.","Trois champs, deux facultatifs.")})]}),e.jsx(m,{className:"border-border/60 shadow-[var(--shadow-card)]",children:e.jsx(p,{className:"pt-6",children:e.jsx(re,{...d,children:e.jsxs("form",{onSubmit:d.handleSubmit(L),className:"space-y-6",children:[e.jsx(w,{control:d.control,name:"motivation",render:({field:s})=>e.jsxs(N,{children:[e.jsx(C,{children:a("¿Por qué quieres ser embajador?","Why do
1you want to be an ambassador?","Warum möchtest du Botschafter:in sein?","Pourquoi devenir ambassadeur ?")}),e.jsx(ie,{children:a("Cuéntanos de ti y de tu comunidad (mÃn. 50 caracteres).","Tell us about you and your community (min. 50 characters).","Erzähl von dir (mind. 50 Zeichen).","Parlez-nous de vous (min. 50 caractères).")}),e.jsx(k,{children:e.jsx(xe,{...s,rows:5,placeholder:a("Me encanta México porque...","I love Mexico because...","Ich liebe Mexiko, weil...","J'aime le Mexique parce que...")})}),e.jsx(S,{})]})}),e.jsx(w,{control:d.control,name:"social_links",render:({field:s})=>e.jsxs(N,{children:[e.jsxs(C,{className:"flex items-center gap-2",children:[e.jsx(we,{className:"h-4 w-4 text-muted-foreground"}),a("Redes sociales (opcional)","Social media (optional)","Soziale Medien (optional)","Réseaux sociaux (facultatif)")]}),e.jsx(k,{children:e.jsx(_,{...s,placeholder:"@usuario, youtube.com/..."})}),e.jsx(S,{})]})}),e.jsx(w,{control:d.control,name:"audience_info",render:({field:s})=>e.jsxs(N,{children:[e.jsx(C,{children:a("Tu audiencia (opcional)","Your audience (optional)","Deine Zielgruppe (optional)","Votre audience (facultatif)")}),e.jsx(k,{children:e.jsx(_,{...s,placeholder:a("10k seguidores, 25-35 años...","10k followers, aged 25-35...","10k Follower, 25-35 Jahre...","10k abonnés, 25-35 ans...")})}),e.jsx(S,{})]})}),e.jsxs(M,{type:"submit",className:"w-full gradient-bg text-white hover:opacity-95",disabled:z,children:[z&&e.jsx(F,{className:"h-4 w-4 mr-2 animate-spin"}),n?a("Enviar solicitud","Submit application","Bewerbung senden","Envoyer la candidature"):a("Enviar y crear mi cuenta","Submit and create my account","Senden und Konto erstellen","Envoyer et créer mon compte")]}),!n&&e.jsxs("p",{className:"flex items-center justify-center gap-1.5 text-xs text-muted-foreground",children:[e.jsx(oe,{className:"h-3 w-3"}),a("Al enviar te pedimos crear tu cuenta para dar seguimiento.","When you submit we'll ask you to create an account to track it.","Beim Senden erstellst du dein Konto.","à l'envoi, nous créerons votre compte.")]})]})})})})]})})}),e.jsx("section",{className:"py-16 md:py-20 px-4",children:e.jsxs("div",{className:"container mx-auto max-w-2xl",children:[e.jsx("h2",{className:"font-display text-2xl md:text-3xl font-bold text-center text-foreground mb-10",children:a("Preguntas frecuentes","Frequently asked questions","Häufige Fragen","Questions fréquentes")}),e.jsx(ge,{type:"single",collapsible:!0,className:"w-full",children:U.map((s,t)=>e.jsxs(be,{value:`faq-${t}`,children:[e.jsx(ve,{className:"text-left",children:s.q}),e.jsx(fe,{className:"text-muted-foreground",children:s.a})]},t))})]})}),e.jsx(pe,{}),e.jsx(le,{open:W,onOpenChange:f,defaultMode:"signup"})]})}export{Ye 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.