1import{j as e}from"./query-vendor-D21EOBPj.js";import{L as A,r as o}from"./react-vendor-wzkxw4Be.js";import{N as se}from"./Navbar-UeLYwKvv.js";import{F as te}from"./Footer-CmLVERiy.js";import{P as ae}from"./PageBreadcrumb-DI26x5HI.js";import{I as H}from"./input-CQECCY9r.js";import{S as B}from"./skeleton-CKqgDaBh.js";import{B as g}from"./button-B86YiuNJ.js";import{B as L}from"./badge-BKiA7n5q.js";import{u as oe}from"./useDestinations-B9XVN1wr.js";import{u as re}from"./useItemPopularity-Cqd3TOZI.js";import{F as le}from"./FavoriteButton-DT-jEOot.js";import{V as ie}from"./VisitedButton-Vf-BAZad.js";import{S as ne}from"./SmartImage-B26KSXp3.js";import{u as de}from"./useLocalizedContent-Deh0qLW9.js";import{u as ce}from"./useImageFocal-BeRPxBvK.js";import{m as S}from"./motion-vendor-BAXfWeLF.js";import{M as Z}from"./map-pin-N3k91gsM.js";import{S as me}from"./SeoHead-BO0JG3qI.js";import{i as ue,b as pe}from"./seo-63IBLTlX.js";import{S as xe,a as he,b as ge,c as fe,d as z}from"./select-BDmKCuwP.js";import{D as be,a as ve,b as je,c as Ne,d as ye}from"./dialog-rJDUBHd6.js";import{C as we}from"./chevron-left-B0-0WVss.js";import{C as Se}from"./chevron-right-KBDJSA4M.js";import{S as W}from"./search-DC8mLYoW.js";import{c as D,X as w}from"./index-D2LQAM4H.js";import{S as V}from"./sliders-horizontal-BjgkM7L6.js";import{B as ke}from"./building-2-BoOBujs_.js";import{W as Me}from"./waves-GUQ0-xf7.js";import{L as Ce}from"./leaf-DvGi22cd.js";import"./i18n-vendor-DHTM_nKn.js";import"./utensils-crossed-_iEShIoN.js";import"./shopping-bag-BafzGVyU.js";import"./settings-CSAbYrcD.js";import"./layers-B6MEx3r9.js";import"./tag-DG5US6i2.js";import"./sparkles-eMjYJsYH.js";import"./book-open-DgjXuDZl.js";import"./dropdown-menu-CDQdTKmJ.js";import"./radix-vendor-BPyhJHu2.js";import"./check-BfrsabcL.js";import"./user-B6PNVBxR.js";import"./map-CRh90O0Y.js";import"./chevron-down-BPvMgUtW.js";import"./shield-check-D9Z6_2ZX.js";import"./useSiteSettings-CU2L9fPl.js";import"./useUserInteractions-ppZDCcNc.js";import"./circle-check-BzW4n38h.js";import"./supabaseImage-rzV-CW3s.js";import"./imageAttribution-DtBsUZvK.js";import"./seo-vendor-CwGKcEKF.js";import"./chevron-up-Bg9AQ5m7.js";import"./supabase-vendor-kR6BuSaZ.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 Be=D("ArrowUpDown",[["path",{d:"m21 16-4 4-4-4",key:"f6ql7i"}],["path",{d:"M17 20V4",key:"1ejh1v"}],["path",{d:"m3 8 4-4 4 4",key:"11wl7u"}],["path",{d:"M7 4v16",key:"1glfcx"}]]);/** 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 Le=D("TreePine",[["path",{d:"m17 14 3 3.3a1 1 0 0 1-.7 1.7H4.7a1 1 0 0 1-.7-1.7L7 14h-.3a1 1 0 0 1-.7-1.7L9 9h-.2A1 1 0 0 1 8 7.3L12 3l4 4.3a1 1 0 0 1-.8 1.7H15l3 3.3a1 1 0 0 1-.7 1.7H17Z",key:"cpyugq"}],["path",{d:"M12 22v-3",key:"kmzjlo"}]]);/** 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 ze=D("Wheat",[["path",{d:"M2 22 16 8",key:"60hf96"}],["path",{d:"M3.47 12.53 5 11l1.53 1.53a3.5 3.5 0 0 1 0 4.94L5 19l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"1rdhi6"}],["path",{d:"M7.47 8.53 9 7l1.53 1.53a3.5 3.5 0 0 1 0 4.94L9 15l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"1sdzmb"}],["path",{d:"M11.47 4.53 13 3l1.53 1.53a3.5 3.5 0 0 1 0 4.94L13 11l-1.53-1.53a3.5 3.5 0 0 1 0-4.94Z",key:"eoatbi"}],["path",{d:"M20 2h2v2a4 4 0 0 1-4 4h-2V6a4 4 0 0 1 4-4Z",key:"19rau1"}],["path",{d:"M11.47 17.47 13 19l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L5 19l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"tc8ph9"}],["path",{d:"M15.47 13.47 17 15l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L9 15l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"2m8kc5"}],["path",{d:"M19.47 9.47 21 11l-1.53 1.53a3.5 3.5 0 0 1-4.94 0L13 11l1.53-1.53a3.5 3.5 0 0 1 4.94 0Z",key:"vex3ng"}]]),Ae={SP:"Sudeste",RJ:"Sudeste",MG:"Sudeste",ES:"Sudeste",PR:"Sul",SC:"Sul",RS:"Sul",BA:"Nordeste",PE:"Nordeste",CE:"Nordeste",MA:"Nordeste",PB:"Nordeste",RN:"Nordeste",AL:"Nordeste",SE:"Nordeste",PI:"Nordeste",AM:"Norte",PA:"Norte",AC:"Norte",RO:"Norte",RR:"Norte",AP:"Norte",TO:"Norte",GO:"Centro-Oeste",MT:"Centro-Oeste",MS:"Centro-Oeste",DF:"Centro-Oeste"};function De(t){return t||null}function Re({dest:t,index:d}){const i=de(t),f=i("name")||t.name,x=i("best_season"),n=De(x||t.best_season),r=t.state?Ae[t.state]:null,c=t.photos?.[0],u=ce("destination",t.id,c);return e.jsx(S.div,{initial:{opacity:0,y:24}
16,animate:{opacity:1,y:0},transition:{delay:Math.min(d*.04,.4)},children:e.jsxs(A,{to:`/destinos/${t.slug??t.id}`,className:"group block rounded-2xl overflow-hidden bg-card border border-border shadow-card hover:shadow-card-hover transition-all duration-300",children:[e.jsxs("div",{className:"relative aspect-[16/10] overflow-hidden",children:[c?e.jsx(ne,{src:c,alt:f,width:600,height:375,aspect:"auto",focal:u,sizes:"(max-width: 640px) 100vw, (max-width: 1024px) 50vw, 400px",priority:d<2,className:"w-full h-full object-cover group-hover:scale-105 transition-transform duration-500"}):e.jsx("div",{className:"w-full h-full bg-gradient-to-br from-primary/20 to-accent/10 flex items-center justify-center text-muted-foreground",children:e.jsx(Z,{size:40,className:"opacity-20"})}),e.jsx("div",{className:"gradient-card-overlay absolute inset-0"}),n&&e.jsxs("span",{className:"absolute top-3 left-3 bg-accent/90 backdrop-blur-sm text-accent-foreground text-[11px] font-semibold px-2.5 py-1 rounded-full flex items-center gap-1",children:["ð¤ï¸ ",n]}),e.jsxs("div",{className:"absolute top-2.5 right-2.5 flex gap-1",children:[e.jsx(le,{itemType:"destination",itemId:t.id,size:18,className:"bg-background/70 backdrop-blur-sm"}),e.jsx(ie,{itemType:"destination",itemId:t.id,className:"bg-background/70 backdrop-blur-sm"})]})]}),e.jsxs("div",{className:"p-4",children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("h3",{className:"font-display font-semibold text-base text-foreground group-hover:text-primary transition-colors leading-tight",children:f}),t.state&&e.jsx("span",{className:"shrink-0 text-[11px] font-bold text-primary border border-primary/30 bg-primary/5 px-2 py-0.5 rounded-md",children:t.state})]}),(t.city||r)&&e.jsxs("p",{className:"text-xs text-muted-foreground mt-1 flex items-center gap-1",children:[e.jsx(Z,{size:10}),[t.city,r].filter(Boolean).join(" · ")]}),t.tags?.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1 mt-2.5",children:t.tags.slice(0,4).map(h=>e.jsx("span",{className:"text-[10px] bg-muted text-muted-foreground px-2 py-0.5 rounded-full",children:h},h))})]})]})})}const G=[{name:"Sudeste",slug:"sudeste",Icon:ke,gradient:"from-sky-500 to-indigo-600",states:["SP","RJ","MG","ES"]},{name:"Sul",slug:"sul",Icon:Le,gradient:"from-emerald-500 to-teal-700",states:["PR","SC","RS"]},{name:"Nordeste",slug:"nordeste",Icon:Me,gradient:"from-amber-400 to-orange-500",states:["BA","PE","CE","MA","PB","RN","AL","SE","PI"]},{name:"Norte",slug:"norte",Icon:Ce,gradient:"from-green-500 to-emerald-800",states:["AM","PA","AC","RO","RR","AP","TO"]},{name:"Centro-Oeste",slug:"centro-oeste",Icon:ze,gradient:"from-yellow-400 to-amber-600",states:["GO","MT","MS","DF"]}],q=[{value:1,label:"Janeiro"},{value:2,label:"Fevereiro"},{value:3,label:"Março"},{value:4,label:"Abril"},{value:5,label:"Maio"},{value:6,label:"Junho"},{value:7,label:"Julho"},{value:8,label:"Agosto"},{value:9,label:"Setembro"},{value:10,label:"Outubro"},{value:11,label:"Novembro"},{value:12,label:"Dezembro"}],Te={janeiro:1,fevereiro:2,março:3,abril:4,maio:5,junho:6,julho:7,agosto:8,setembro:9,outubro:10,novembro:11,dezembro:12};function Ie(t,d){if(!t)return!0;const i=t.toLowerCase();if(i.includes("ano todo")||i.includes("o ano todo"))return!0;const x=(i.match(/[a-záéÃóúãõâêôç]+/g)??[]).map(c=>Te[c]).filter(Boolean);if(x.length<2)return!0;const[n,r]=x;return n<=r?d>=n&&d<=r:d>=n||d<=r}function Os(){const[t,d]=o.useState(""),[i,f]=o.useState("popularity"),[x,n]=o.useState(!1),[r,c]=o.useState(null),[u,h]=o.useState([]),[j,N]=o.useState(null),[p,b]=o.useState([]),[y,k]=o.useState(""),R=o.useRef(null),{data:m=[],isLoading:T}=oe(t?{search:t}:void 0),J=o.useMemo(()=>{if(m.length!==0)return[ue({name:"Destinos do Brasil",description:"Lista de destinos turÃsticos brasileiros catalogados no DoBrasil.org",items:m.slice(0,30).map((s,a)=>({name:s.name,url:`/destinos/${s.slug??s.id}`,image:s.photos?.[0]??null,position:a+1}))}),pe([{name:"InÃcio",url:"/"},{name:"Destinos"}])]},[m]),U=o.useMemo(()=>m.map(s=>({item_type:"destination",item_id:s.id})),[m]),{data:M={}}=re(U),I=o.useMemo(()=>{const s=new Set;return m.forEach(a=>
16(a.tags??[]).forEach(l=>s.add(l))),Array.from(s).sort()},[m]),O=o.useMemo(()=>y.trim()?I.filter(s=>s.toLowerCase().includes(y.toLowerCase())&&!p.includes(s)):[],[I,y,p]),P=o.useMemo(()=>{let s=m;return r&&(s=s.filter(a=>Ie(a.best_season,r))),u.length>0&&(s=s.filter(a=>u.every(l=>a.tags?.includes(l)))),s},[m,r,u]),C=o.useMemo(()=>{const s=[...P];switch(i){case"alpha":return s.sort((a,l)=>a.name.localeCompare(l.name,"pt-BR"));case"alpha-desc":return s.sort((a,l)=>l.name.localeCompare(a.name,"pt-BR"));case"popularity":default:return s.sort((a,l)=>{const $=M[`destination:${a.id}`],_=M[`destination:${l.id}`],ee=($?.favorites??0)+($?.visits??0);return(_?.favorites??0)+(_?.visits??0)-ee||a.name.localeCompare(l.name,"pt-BR")})}},[P,i,M]),E=s=>{R.current?.scrollBy({left:s*260,behavior:"smooth"})},v=(r?1:0)+u.length,K=()=>{N(r),b([...u]),k(""),n(!0)},X=()=>{c(j),h(p),n(!1)},F=()=>{c(null),h([]),N(null),b([])},Q=s=>{p.includes(s)||b(a=>[...a,s]),k("")},Y=s=>b(a=>a.filter(l=>l!==s));return e.jsxs("div",{className:"min-h-screen bg-background",children:[e.jsx(me,{title:"Destinos do Brasil",description:"Descubra destinos turÃsticos por todo o Brasil â praias, montanhas, cidades históricas e roteiros culturais cuidadosamente catalogados.",path:"/destinos",type:"website",structuredData:J}),e.jsx(se,{}),e.jsxs("div",{className:"pt-20",children:[e.jsx("div",{className:"bg-surface-1 border-b border-border py-12",children:e.jsxs("div",{className:"container mx-auto px-4",children:[e.jsx(ae,{items:[{label:"InÃcio",href:"/"},{label:"Destinos"}],className:"mb-3"}),e.jsx(S.h1,{initial:{opacity:0,y:16},animate:{opacity:1,y:0},className:"font-display text-3xl md:text-4xl font-bold text-foreground mb-2",children:"Destinos do Brasil"}),e.jsx("p",{className:"text-muted-foreground mb-6",children:"Descubra destinos incrÃveis por todo o Brasil"}),e.jsxs("div",{className:"mb-8",children:[e.jsxs("div",{className:"relative sm:hidden",children:[e.jsx(g,{variant:"ghost",size:"icon",className:"absolute -left-2 top-[45px] -translate-y-1/2 z-10 h-7 w-7 rounded-full bg-background shadow border border-border",onClick:()=>E(-1),children:e.jsx(we,{size:14})}),e.jsx("div",{ref:R,className:"flex gap-3 overflow-x-auto scrollbar-hide snap-x px-1 pb-1",children:G.map(s=>e.jsx(S.div,{whileHover:{scale:1.03},transition:{duration:.18},className:"snap-start shrink-0 w-[110px] will-change-transform",children:e.jsx(A,{to:`/regioes/${s.slug}`,className:"block group focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary rounded-2xl","aria-label":`Explorar região ${s.name}`,children:e.jsxs("div",{className:`relative w-full aspect-[4/3] bg-gradient-to-br ${s.gradient} rounded-2xl overflow-hidden shadow-md`,children:[e.jsx("div",{className:"absolute inset-0 bg-black/15 group-hover:bg-black/5 transition-colors duration-300"}),e.jsx(s.Icon,{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-[60%] h-8 w-8 text-white drop-shadow-md",strokeWidth:1.5}),e.jsxs("div",{className:"absolute bottom-0 inset-x-0 bg-gradient-to-t from-black/55 to-transparent pt-4 pb-2 px-2",children:[e.jsx("p",{className:"text-white font-semibold text-xs leading-tight",children:s.name}),e.jsxs("p",{className:"text-white/65 text-[10px]",children:[s.states.length," estados"]})]})]})})},s.slug))}),e.jsx(g,{variant:"ghost",size:"icon",className:"absolute -right-2 top-[45px] -translate-y-1/2 z-10 h-7 w-7 rounded-full bg-background shadow border border-border",onClick:()=>E(1),children:e.jsx(Se,{size:14})})]}),e.jsx("div",{className:"hidden sm:grid grid-cols-5 gap-4",children:G.map(s=>e.jsx(S.div,{whileHover:{y:-4,scale:1.02},transition:{duration:.2,ease:"easeOut"},className:"will-change-transform",children:e.jsx(A,{to:`/regioes/${s.slug}`,className:"block group focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary rounded-2xl","aria-label":`Explorar região ${s.name}`,children:e.jsxs("div",{className:`relative w-full aspect-[4/3] bg-gradient-to-br ${s.gradient} rounded-2xl overflow-hidden shadow-md group-hover:shadow-xl transition-shadow duration-300`,children:[e.jsx("div",{className:"absolute inset-0 bg-black/10 group-hover:bg-black/0 transition-colors duration-300"}),e.jsx(s.Icon,{className:"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-[65%] h-10 w-10 text-white drop-shadow-md",strokeWidth:1.4}),e.jsxs("div",{className:"absolute bottom-0 inset-x-0 bg-gradient-to-t from-black/60 to-transparent pt-6 pb-3 px-4",children:[e.jsx("p",{className:"text-white font-semibold text-sm leading-tight tracking-wide",children:s.name}),e.jsxs("p",{className:"text-white/65 text-[11px] mt-0.5",children:[s.states.length," estados"]})]})]})})},s.slug))})]}),e.jsxs("div",{className:"flex gap-3 flex-wrap",children:[e.jsxs("div",{className:"relative flex-1 min-w-48",children:[e.jsx(W,{size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),e.jsx(H,{placeholder:"Buscar destino...",className:"pl-9 rounded-xl",value:t,onChange:s=>d(s.target.value)})]}),e.jsxs(xe,{value:i,onValueChange:s=>
16f(s),children:[e.jsxs(he,{className:"w-[180px] rounded-xl",children:[e.jsx(Be,{size:14,className:"mr-1.5 text-muted-foreground"}),e.jsx(ge,{})]}),e.jsxs(fe,{children:[e.jsx(z,{value:"popularity",children:"Mais populares"}),e.jsx(z,{value:"alpha",children:"A â Z"}),e.jsx(z,{value:"alpha-desc",children:"Z â A"})]})]}),e.jsxs(g,{variant:v>0?"default":"outline",onClick:K,className:"rounded-xl gap-2",children:[e.jsx(V,{size:15}),"Filtros avançados",v>0&&e.jsx("span",{className:"bg-primary-foreground/20 text-xs rounded-full w-4 h-4 flex items-center justify-center font-bold",children:v})]})]}),v>0&&e.jsxs("div",{className:"flex flex-wrap gap-2 mt-3",children:[r&&e.jsxs(L,{variant:"secondary",className:"gap-1 pr-1",children:[q.find(s=>s.value===r)?.label,e.jsx("button",{onClick:()=>c(null),className:"ml-1 hover:text-destructive",children:e.jsx(w,{size:11})})]}),u.map(s=>e.jsxs(L,{variant:"secondary",className:"gap-1 pr-1",children:[s,e.jsx("button",{onClick:()=>h(a=>a.filter(l=>l!==s)),className:"ml-1 hover:text-destructive",children:e.jsx(w,{size:11})})]},s)),e.jsx("button",{onClick:F,className:"text-xs text-muted-foreground hover:text-destructive transition-colors",children:"Limpar tudo"})]})]})}),e.jsx(be,{open:x,onOpenChange:n,children:e.jsxs(ve,{className:"max-w-sm",children:[e.jsx(je,{children:e.jsxs(Ne,{className:"flex items-center gap-2",children:[e.jsx(V,{size:16})," Filtros avançados"]})}),e.jsxs("div",{className:"space-y-6 py-2",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground mb-2",children:"Mês de viagem"}),e.jsx("p",{className:"text-xs text-muted-foreground mb-3",children:"Mostra destinos recomendados para o mês selecionado"}),e.jsx("div",{className:"grid grid-cols-3 gap-1.5",children:q.map(s=>e.jsx("button",{onClick:()=>N(j===s.value?null:s.value),className:`py-1.5 px-2 rounded-lg text-sm border transition-colors ${j===s.value?"bg-primary text-primary-foreground border-primary font-semibold":"border-border text-foreground hover:bg-muted"}`,children:s.label.slice(0,3)},s.value))})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-semibold text-foreground mb-2",children:"Tags"}),e.jsx("p",{className:"text-xs text-muted-foreground mb-3",children:"Busque e adicione quantas tags quiser"}),p.length>0&&e.jsx("div",{className:"flex flex-wrap gap-1.5 mb-2",children:p.map(s=>e.jsxs(L,{variant:"default",className:"gap-1 pr-1 text-xs",children:[s,e.jsx("button",{onClick:()=>Y(s),className:"ml-0.5 hover:opacity-70",children:e.jsx(w,{size:10})})]},s))}),e.jsxs("div",{className:"relative",children:[e.jsx(W,{size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-muted-foreground"}),e.jsx(H,{placeholder:"Buscar tag (ex: praia, trilha...)",className:"pl-8 rounded-lg text-sm",value:y,onChange:s=>k(s.target.value)}),O.length>0&&e.jsx("div",{className:"absolute top-full left-0 right-0 mt-1 bg-card border border-border rounded-xl shadow-lg z-20 max-h-40 overflow-y-auto",children:O.map(s=>e.jsx("button",{onClick:()=>Q(s),className:"w-full text-left px-3 py-2 text-sm hover:bg-muted transition-colors",children:s},s))})]})]})]}),e.jsxs(ye,{className:"flex gap-2",children:[(j!==null||p.length>0)&&e.jsxs(g,{variant:"ghost",className:"text-destructive",onClick:()=>{N(null),b([])},children:[e.jsx(w,{size:14,className:"mr-1"})," Limpar"]}),e.jsx(g,{onClick:X,className:"flex-1 rounded-xl",children:"Ver resultados"})]})]})}),e.jsxs("div",{className:"container mx-auto px-4 py-12",children:[e.jsx("div",{className:"flex items-center justify-between mb-5",children:e.jsx("p",{className:"text-sm text-muted-foreground",children:T?"Carregando...":`${C.length} destinos encontrados`})}),T?e.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-5",children:Array.from({length:8}).map((s,a)=>e.jsxs("div",{className:"rounded-2xl overflow-hidden",children:[e.jsx(B,{className:"h-48 sm:h-52 w-full"}),e.jsxs("div",{className:"p-4 space-y-2",children:[e.jsx(B,{className:"h-5 w-3/4"}),e.jsx(B,{className:"h-4 w-1/2"})]})]},a))}):C.length===0?e.jsxs("div",{className:"text-center py-24 text-muted-foreground",children:[e.jsx("p",{className:"text-4xl mb-4",children:"ð"}),e.jsx("p",{className:"text-lg font-medium",children:"Nenhum destino encontrado"}),e.jsx("p",{className:"text-sm mt-1",children:"Tente buscar com outros termos ou ajuste os filtros"}),v>0&&e.jsx(g,{variant:"ghost",className:"mt-4 text-sm text-primary",onClick:F,children:"Limpar filtros"})]}):e.jsx("div",{className:"grid grid-cols-2 lg:grid-cols-3 gap-4 sm:gap-5",children:C.map((s,a)=>e.jsx(Re,{dest:s,index:a},s.id))})]})]}),e.jsx(te,{})]})}
16export{Os 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.