Nume Company, Agentur für Digitalmarketing in São Paulo. Ab jetzt gehen wir gemeinsam voran.
Full-Service-Marketingagentur. Von der Strategie bis zum Ergebnis mit 360-Grad-Marketing, für nationale und globale Marken.
Jetzt sprechenNationale
Jahre
Erfahrung
Globale
Präsenz
Auszeichnung
in Monaco
Senior-
Team
Was können wir für Ihr Unternehmen tun?
Scrollen Sie durch die 11 Leistungen von Nume.
Referenzen im Fokus.
Tippen Sie auf eine Referenz für Details
organische Website-Zugriffe durch SEO in 60 Tagen
Verweildauer auf der Website in 1 Jahr



für die Social-Media-Arbeit der Marke
Nume Company: Agentur für Digitalmarketing in São Paulo
Nume Company ist eine Full-Service-Agentur für Digitalmarketing mit einem Büro in Itaim Bibi, São Paulo (SP). Seit mehr als 18 Jahren betreut sie Unternehmen vom lokalen Betrieb bis zur globalen Marke, mit über 180 betreuten Unternehmen, einem 100 % senior besetzten Team, einer Bewertung von 5,0 aus 39 Kundenbewertungen bei Google und Referenzen in Brasilien, den Vereinigten Staaten, Portugal, Deutschland, Australien und Monaco, darunter eine in Monaco ausgezeichnete Social-Media-Referenz für Wheaton. Die Agentur wurde von Pedro Bruder gegründet und wird von ihm geleitet. Er ist CEO, Autor des bei Amazon vertriebenen Buchs Domine o Marketing 5.0 und offizieller Gastredner des Parque Tecnológico und der Stadtverwaltung.
Wir sind eine Marketingagentur für Unternehmen, die wachsen wollen: Social-Media-Agentur, Paid-Media-Agentur, SEO- und GEO-Agentur, Branding sowie Erstellung von Websites und Apps, mit Strategie und Umsetzung in einem Team.
Leistungen unserer Marketingagentur
- Analyse realer Marktdaten
- Segmentierung und Personas
- Full-Service-Marketingstrategie
- Social-Media-Betreuung
- Management von Paid Media (Google Ads, Meta Ads, LinkedIn Ads)
- Branding für Marken und Unternehmen
- Logo-Design und visuelle Identität
- UX/UI-Design und Gestaltung von Werbemitteln
- Organischer Traffic durch SEO und GEO (Optimierung für Google, ChatGPT und Gemini)
- Generierung qualifizierter Nachfrage
- E-Mail-Automatisierung
- Erstellung relevanter Inhalte
- Entwicklung leistungsstarker Websites und Apps
- Influencer-Marketing-Management für Marken
Referenzen mit Ergebnissen
- Jardineira Grill (São Paulo): 12.000 organische Website-Besuche in 60 Tagen durch SEO, 4.609 Routenanfragen und 1.815 Anrufe über das Unternehmensprofil bei Google sowie organische Reels mit mehr als 600.000 Aufrufen.
- Oliveira Trust: mit Nume bei Google Ads in einem Jahr +90 % Impressionen, 41 % niedrigerer Klickpreis, 42,5 % geringere Investition und 472 % längere durchschnittliche Verweildauer auf der Website.
- Wheaton: in Monaco ausgezeichnetes Branding- und Social-Media-Projekt.
- Wheaton: in Monaco ausgezeichnete Referenz (Social Media)
- Beflex: App und Vorteile auf einer einzigen Karte (Websites und Apps)
- Melten: Soft-Service Experience (Branding und Social Media)
- Água Dias D'Ávila: die komplette Produktlinie (Branding und Social Media)
- JAH: Glücklichsein hat System (Branding und Social Media)
- Summit Cosmetics: Innovation in Farben (Social Media)
- JA Solar: so präsent wie die Sonne (Social Media)
- Serigy: Energie auf Hochtouren (Branding und Social Media)
- VaBene auf der FIPAN 2026 (Social Media)
- Lynx Biological: das grüne Gold Brasiliens (Social Media)
- Fulya Guaraná (Branding und Social Media)
- Content mit Erick Jacquin (Studio Nume)
- Wheaton: Menschen, die verändern (Social Media)
- JAH: Açaí, wie er sein soll (Branding und Social Media)
- Dias D'Ávila mit Sprudel (Branding und Social Media)
- Summit Cosmetics: Home-Off (Social Media)
- VaBene: Extra-Dessert (Social Media)
- Serigy: Markenaktivierung (Branding und Social Media)
- JA Solar: Messestand (Social Media)
- JAH: Eis am Stiel, 0 % Laktose (Branding und Social Media)
- Das auf Usability ausgerichtete Projekt für HD entdecken (Websites und Apps)
- Beflex: alle Vorteile auf einer einzigen Karte (Websites und Apps)
- Erfrischen Sie sich mit der neuen Website für Água Dias D'Ávila (Websites und Apps)
- Leistungsstarke Website für Prime Veículos (Websites und Apps)
- Amica Systems: Präzision, Geschwindigkeit und Technologie (Websites und Apps)
Kundenstimmen
- Lorena Coltro, Marketing-Koordinatorin Yesbank: „Nach vier Monaten Zusammenarbeit mit Nume sind wir bei YESPAY schon in vielen Punkten vorangekommen. Sehr viel Einsatz und Konzentration im Projekt, und die Lieferungen kommen immer pünktlich. Bei Design und Ästhetik hat uns die großartige Arbeit wirklich überrascht! Ich habe keinen Zweifel, dass ich unter allen Werbeagenturen, die ich verglichen habe, die beste Wahl getroffen habe. Die Leute dort haben wirklich viel Talent! Vielen Dank für die Herzlichkeit und Aufmerksamkeit aller Beteiligten!“
- Esmeralda Angelita, CEO Costatt Clinic Australien: „Danke für die gute Arbeit, wir sind sehr zufrieden. Es rufen viele Leute an und suchen uns über die Anzeigen, das ist sehr positiv und zeigt, dass es gut funktioniert. Deshalb möchte ich mich bedanken. Sehr gut!“
- Alexandre Fernandes, CEO der NX Capital: „Nume war für uns der Wendepunkt nach vielen Versuchen mit anderen Agenturen. Das technische Wissen, die Expertise und das Know-how im Bereich Werbung sind beeindruckend und haben das Niveau unserer Marke auf Spitzenklasse gehoben. Besonders auffällig ist das Betreuungsmodell: stets nah am Kunden, mit Antworten auf alle Fragen und Ideen, auf die wir zuvor nie gekommen wären, um unsere Investitionen zu optimieren. Ich empfehle Nume ausdrücklich und bin überzeugt, dass sie die Besten am Markt sind.“
- Felipe Pregnolatto, Gamers Club: „Ein Unternehmen, das genau das beherrscht, was es anbietet, mit einzigartigem Know-how und dem Anspruch an exzellente Betreuung. Es versteht den Kunden als Mittelpunkt des Geschäfts und schätzt ihn entsprechend.“
- Roberta Furniel, Marketingleiterin Fidati und Beflex: „Nume ist mehr als eine Agentur, sie ist ein Geschäftspartner für Fidati. Neben unserem Rebranding hat Nume zu unserer Strategie und zur Umsetzung des 360°-Marketingplans beigetragen, der die wichtigsten Säulen abdeckt. Das Team ist stets bereit, noch mehr zu leisten, und bringt proaktiv neue Ideen ein!“
- Talita Aurani, Futuro House: „Äußerst effiziente, lösungsorientierte und menschliche Betreuung, aufmerksam für jedes Detail und jeden Bedarf, den wir für unser Projekt angesprochen haben.“
Nume Blog
- So positionieren Sie Ihre Website bei „In meiner Nähe“-Suchen in São Paulo und gewinnen jeden Tag Kunden
- Die besten Digitalmarketing-Strategien für kleine Unternehmen, die wirklich funktionieren
- Was kostet eine Marketingagentur in São Paulo, SP?
- Medizinmarketing: Der ultimative Leitfaden, um ethisch und effizient mehr Patienten zu gewinnen
- Lokales SEO: So wird Ihr Unternehmen für Menschen in Ihrer Nähe sichtbar
- B2B-Digitalmarketing: So verkaufen Sie an andere Unternehmen, ohne es zu verkomplizieren
- Paid-Media-Agentur: Das Geheimnis, mehr Kunden zu gewinnen und mehr zu verkaufen
- Full-Service-Agentur für Digitalmarketing: Die Komplettlösung, die Ihr Unternehmen braucht
- Die 50 größten Marketingagenturen der Welt: Die Giganten der Werbebranche
- Die Giganten der Kreativität: Wer führt die größten Werbeagenturen Brasiliens?
- Die besten Digitalmarketing-Agenturen in São Paulo: Der komplette Leitfaden für Ihre Auswahl
- Die besten Digitalmarketing-Agenturen Brasiliens
39 Kundenbewertungen bei Google
Höchstnote bei Bewertungen.
Scrollen zum Aufleuchten · Klicken zum Feiern
Fast zwei Jahrzehnte voller Ideen, die Wirklichkeit werden.
Wheaton · Social Media Unsere LeistungenJa, Ihre Marke kann Marktreferenz werden.

Wheaton: in Monaco ausgezeichnete Referenz
Spezialitäten des Hauses
Ideen und Narrative
Wir entwickeln Storytelling, das konvertiert.
Ressourcenoptimierung
Strategien, mit denen das Budget Wirkung zeigt.
Erhalten Sie eine kostenlose Beratung für Ihre Marke oder Ihr Unternehmen.
Jetzt Termin buchenUnsere Kunden empfehlen uns weltweit weiter.
Senior-Team mit mehr als 18 Jahren Erfahrung in lokalen, nationalen und globalen Unternehmen.
SpezialistenMultiplattform
Omnichannel-Marketing.
Erstellung von Websites und Apps mit hoher Performance.
Wie finden Sie die richtige Agentur?
Suchen Sie jemanden, der etwas vorzuweisen hat
Ein gutes Portfolio zeigt in der Praxis, was die Agentur liefert.
Jahre am Markt zählen
Erfahrung trennt Abenteurer von Profis.
Strategie und Umsetzung aus einer Hand.
100 % Senior-Team, 360-Grad-Marketing und Experten für die größten Plattformen.
Kostenlose Beratung100 %
Senior-Team
Erfahrene Performance-Manager leiten jedes Konto, vom lokalen Betrieb bis zur globalen Marke.
Mit einem Experten sprechenInfluencer-Marketing-Management für Marken.
Mehr als +200 Influencer in unserer Datenbank.
Wer uns kennt, liebt unsere Arbeit, empfiehlt uns und vertraut uns.
Nume Blog
Noch Fragen?
Warum eine Digitalmarketing-Agentur beauftragen?+
Eine echte Digitalmarketing-Agentur erkennt das Potenzial ihrer Kunden. Sie entwickelt wirksame Strategien, die zum jeweiligen Ziel der Marke in ihrer aktuellen Phase passen: Markenaufbau, Lead-Gewinnung oder Conversion.
Was kostet die Beauftragung einer Digitalmarketing-Agentur?+
Die Leistung einer Agentur wird pro Projekt oder über ein monatliches Fee abgerechnet. Die Spanne ergibt sich aus den Zielen und dem Bedarf an bestimmten Fachleuten. Gibt es zum Beispiel Videoproduktion, Social-Media-Betreuung, Marketing-Automation, SEO? In welchem Umfang? Alles hängt von der „Größe“ des Ziels ab.
Wie wählt man eine Digitalmarketing-Agentur aus?+
Zuerst muss das Ziel Ihres Unternehmens feststehen. Wollen Sie mehr Kunden, einen höheren durchschnittlichen Bestellwert oder mehr Markenbekanntheit? Ist das geklärt, suchen Sie Agenturen, die das Digitalmarketing als Ganzes verstehen, aber ihre Spezialgebiete klar benennen. Denn wer behauptet, in allem gut zu sein, wird seine Arbeit selten perfekt machen. Holen Sie mindestens drei verschiedene Angebote ein und entscheiden Sie sich für die Agentur, die am besten zu Markenziel und Budget passt.
Ist jede Digitalmarketing-Agentur gleich?+
Keineswegs: Jede Agentur hat ihre eigene Spezialisierung und ihr eigenes Erfahrungsniveau.
Digitalmarketing-Agentur beauftragen oder intern aufbauen?+
Das gesamte Marketing intern aufzubauen, ist wie Schuhe selbst zu schustern: Man kommt vielleicht aus dem Haus, aber bis zum ersten Loch wahrscheinlich nicht weit. Detailwissen und Erfahrung in der Marketingsteuerung sorgen für Stabilität und Kontinuität in der Strategie. Dennoch ist ein interner Ansprechpartner für die Agentur wichtig, damit die Kommunikation reibungslos läuft.
Unser Büro in Itaim Bibi
Ein Raum, um Kunden zu empfangen und gemeinsam zu kreieren und zu planen, in São Paulo.








`;
const show=()=>{cap.textContent=c[1]+' · '+c[2];a._h=1};const hide=()=>{a._h=0};a.addEventListener('pointerenter',show);a.addEventListener('focus',show);a.addEventListener('pointerleave',hide);a.addEventListener('blur',hide);arc.appendChild(a);return a});
cap.textContent=L[0][1]+' · '+L[0][2];
let R=600,cy=660;const sec=box.closest('section');
const fit=()=>{const w=box.clientWidth,H=box.clientHeight;const cw=(cards[0]&&cards[0].offsetWidth)||200;R=Math.max(460,Math.min(w*.56,880));cy=Math.max(R+cw*.85+70,H*.5+R*.5);arc.style.top=cy+'px';ctr.style.top=Math.min(H-ctr.offsetHeight-40,cy-R*.5)+'px'};
new ResizeObserver(fit).observe(box);fit();
const seen=watch(sec);const st=Math.max(16,(cards[0].offsetWidth*1.08)/R*57.3),N=cards.length;let pS=0;
onTick(()=>{if(!seen())return;const r=sec.getBoundingClientRect();const p=clamp(-r.top/Math.max(1,sec.offsetHeight-innerHeight),0,1);pS=lerp(pS,p,RM?1:.1);
const lead=-95+pS*(190+(N-1)*st);
cards.forEach((el,i)=>{const a=lead-i*st;const o=1-clamp((Math.abs(a)-72)/18,0,1);const s=el._h?1.1:1;el.style.transform=`rotate(${a}deg) translateY(${-R}px) scale(${s})`;el.style.opacity=o;el.style.visibility=o<.02?'hidden':'visible';el.style.zIndex=el._h?5:1})});
})();
/* ---------------- together we make (built while scrolling) ---------------- */
(function(){const sec=$('#juntos'),strip=$('#twm'),end=$('#twEnd');let pS=0;const seen=watch(sec);
const parts=$$('.tb',strip),rings=$$('.ring:not(.dash)',strip),dash=null;
const mk=$('.tw-word.make',strip);const letters=[...mk.textContent].map(c=>{const sp=document.createElement('span');sp.className='ch';sp.textContent=c;return sp});mk.textContent='';letters.forEach(l=>mk.appendChild(l));
const ease=x=>1-Math.pow(1-x,3),back=x=>{const c=1.7;return 1+(c+1)*Math.pow(x-1,3)+c*Math.pow(x-1,2)};
onTick((dt,t)=>{if(!seen())return;const r=sec.getBoundingClientRect();const p=clamp(-r.top/Math.max(1,sec.offsetHeight-innerHeight),0,1);pS=lerp(pS,p,RM?1:.12);
const W=innerWidth;const e=end.offsetLeft+end.offsetWidth/2,sw=strip.scrollWidth;
const a=clamp(pS/.7,0,1),b=clamp((pS-.66)/.34,0,1);
const off=(el)=>{let x=0,y=0,n=el;while(n&&n!==strip){x+=n.offsetLeft;y+=n.offsetTop;n=n.offsetParent}return [x,y]};const la=letters[1],[ax,ay]=off(la),aX=ax+la.offsetWidth*.5,aY=ay+la.offsetHeight*.66;const tx=lerp(W*.92,W/2-e,ease(a))+(e-aX)*Math.min(1,b*1.6);const need=Math.hypot(W,innerHeight)/(la.offsetWidth*.32);const sc=Math.exp(Math.log(need)*Math.pow(b,1.5));
strip.style.setProperty('--tx',tx+'px');strip.style.setProperty('--ox',aX+'px');strip.style.setProperty('--oy',aY+'px');const fd=RM?0:clamp((b-.5)/.3,0,1);strip.style.opacity=(1-fd).toFixed(3);strip.style.setProperty('--ts',sc.toFixed(3));
const K=new Map();parts.forEach(el=>{const bx=el.getBoundingClientRect();const cx=bx.left+bx.width/2;const k=RM?1:clamp((W*.98-cx)/(W*.32),0,1);K.set(el,k);el.style.setProperty('--k',back(k).toFixed(3));el.style.setProperty('--o',Math.min(1,k*2).toFixed(2));el.style.setProperty('--rr',((1-k)*-25)+'deg')});
rings.forEach((rg,i)=>{const k=RM?1:clamp((K.get(rg.closest('.tb'))-.5)/.5,0,1);rg.style.setProperty('--d',(1-ease(k)).toFixed(3))});
const km=K.get(mk.closest('.tb'));
letters.forEach((l,i)=>{const k=RM?1:clamp((km-.35-i*.1)/.35,0,1);const e2=back(k);l.style.setProperty('--cy',((1-e2)*.6)+'em');l.style.setProperty('--cr',((1-k)*-14)+'deg');l.style.setProperty('--co',Math.min(1,k*1.5))})});
})();
/* ---------------- lightbox ---------------- */
const lb=$('#lb');
const CPG={'c-wheaton':['case-wheaton','/case-wheaton-redes-sociais-premiado-monaco/'],'c-beflex':['case-beflex','/case-beflex-branding-site-app/'],'c-diasdavila':['case-dias','/case-agua-dias-davila-branding-redes-sociais/'],'c-serigy':['case-serigy','/case-serigy-branding-redes-sociais/']};
function openCase(img,title,cat,url){$('#lbImg').src='/img/case-'+img+'.webp';$('#lbTitle').textContent=title;$('#lbCat').textContent=cat;const L=$('#lbLink'),pg=CPG[img.replace(/\d+$/,'')];if(pg){L.href=pg[1];L.dataset.pg=pg[0];L.removeAttribute('target')}else{L.href=U+url;delete L.dataset.pg;L.target='_blank'}lb.classList.add('open');setTimeout(()=>$('#lbClose').focus(),200)}
$('#lbClose').addEventListener('click',()=>lb.classList.remove('open'));
lb.addEventListener('click',e=>{if(e.target===lb)lb.classList.remove('open')});
addEventListener('keydown',e=>{if(e.key==='Escape'){lb.classList.remove('open');mf.classList.remove('open');sheet.classList.remove('open')}});
/* ---------------- cases cloud (Three.js) ---------------- */
const ccImg=$('#ccImg'),ccTitle=$('#ccTitle'),ccCat=$('#ccCat'),ccIdx=$('#ccIdx'),cdots=$('#cdots');
CASES.forEach(()=>cdots.appendChild(document.createElement('i')));
let focus=-1;
function setFocus(i){if(i===focus)return;focus=i;const c=CASES[i];ccImg.style.opacity=0;setTimeout(()=>{ccImg.src='/img/case-'+c[0]+'.webp';ccImg.style.opacity=1},180);ccTitle.textContent=c[1];ccCat.textContent=c[2];ccIdx.textContent=String(i+1).padStart(2,'0')+' / '+String(CASES.length).padStart(2,'0');$$('i',cdots).forEach((d,k)=>d.classList.toggle('on',k===i))}
setFocus(0);
$('#ccOpen').addEventListener('click',()=>{const c=CASES[focus];openCase(c[0],c[1],c[2],c[3])});
const __cloud=function cloud(){
const sec=$('#cases'),stick=$('#cloudStick'),cv=$('#cloud'),cprog=$('#cprog');
const scroll=()=>{const r=sec.getBoundingClientRect();return clamp(-r.top/Math.max(1,sec.offsetHeight-innerHeight),0,1)};
if(!HAS3){onTick(()=>setFocus(Math.round(scroll()*(CASES.length-1))));return}
let renderer;try{renderer=new THREE.WebGLRenderer({canvas:cv,antialias:true,alpha:true,premultipliedAlpha:false,powerPreference:'high-performance'})}catch(e){onTick(()=>setFocus(Math.round(scroll()*(CASES.length-1))));return}
renderer.setPixelRatio(Math.min(devicePixelRatio||1,1.75));renderer.setClearColor(0x000000,0);
const scene=new THREE.Scene(),cam=new THREE.PerspectiveCamera(48,1,.1,120);
const loader=new THREE.TextureLoader();const texCache={};const tex=s=>texCache[s]||(texCache[s]=loader.load(s,t=>{t.minFilter=THREE.LinearFilter;t.generateMipmaps=false}));
const geo=new THREE.PlaneGeometry(1,1);
const vsh='varying vec2 vUv;varying float vD;void main(){vUv=uv;vec4 mv=modelViewMatrix*vec4(position,1.);vD=-mv.z;gl_Position=projectionMatrix*mv;}';
const fsh=`uniform sampler2D uTex;uniform float uAsp,uR,uDim,uMode,uLA;uniform vec3 uCol;uniform vec2 uFog;varying vec2 vUv;varying float vD;
float sdr(vec2 p,vec2 b,float r){vec2 q=abs(p)-b+r;return length(max(q,0.))+min(max(q.x,q.y),0.)-r;}
void main(){vec2 p=(vUv-.5)*vec2(uAsp,1.);float d=sdr(p,vec2(uAsp,1.)*.5,uR);float a=1.-smoothstep(-.004,.004,d);if(a<.02)discard;vec3 c;
if(uMode<.5){c=texture2D(uTex,vUv).rgb;}
else if(uMode<1.5){vec2 l=(vUv-.5)*vec2(1.25,1.25*uLA)+.5;float inb=step(0.,l.x)*step(l.x,1.)*step(0.,l.y)*step(l.y,1.);vec4 t=texture2D(uTex,clamp(l,0.,1.));c=mix(vec3(1.),t.rgb,t.a*inb);}
else{vec4 t=texture2D(uTex,vUv);c=mix(uCol,t.rgb,t.a);}
vec3 bg=vec3(.945,.949,.925);c=mix(bg,c,uDim);float f=smoothstep(uFog.x,uFog.y,vD);gl_FragColor=vec4(c,a*(1.-f));}`;
const mk=(t,mode,asp,col,la)=>new THREE.ShaderMaterial({uniforms:{uTex:{value:t},uAsp:{value:asp},uR:{value:.075},uDim:{value:1},uMode:{value:mode},uLA:{value:la||1},uCol:{value:new THREE.Color(col||'#D7FF0F')},uFog:{value:new THREE.Vector2(14,46)}},vertexShader:vsh,fragmentShader:fsh,transparent:true});
// lime dot-pattern texture (brand tile)
const dc=document.createElement('canvas');dc.width=dc.height=256;const dx=dc.getContext('2d');dx.fillStyle='#0c0d0b';[[80,96,14],[128,84,22],[184,92,30],[70,150,18],[130,148,28],[192,160,22],[104,200,12],[158,206,16],[210,214,10]].forEach(([x,y,r])=>{dx.beginPath();dx.arc(x,y,r,0,7);dx.fill()});
const dotTex=new THREE.CanvasTexture(dc);
const N=CASES.length,DZ=9,H=3.3,ASP=504/696;
const mains=[],decos=[];let seed=7;const rnd=()=>((seed=(seed*16807)%2147483647)/2147483647);
CASES.forEach((c,i)=>{const m=new THREE.Mesh(geo,mk(tex('/img/case-'+c[0]+'.webp'),0,ASP));m.scale.set(H*ASP,H,1);const side=i%2?1:-1;m.userData={i,side,bx:side*(1.5+rnd()*.7),by:(rnd()-.5)*1.1,k:0};m.position.set(m.userData.bx,m.userData.by,-i*DZ);scene.add(m);mains.push(m)});
const pool=[...CASES.map(c=>['c','/img/case-'+c[0]+'.webp']),...['harley','byd','runsolar','oiti','platinum','barbahall'].map(s=>['c','/img/case-'+s+'.webp']),...CLIENTS.map(c=>['l','/img/cli-'+c+'.webp'])];
const span=N*DZ+16;
for(let i=0;i<140;i++){const it=pool[i%pool.length];let m,s;
if(it[0]==='c'){m=new THREE.Mesh(geo,mk(tex(it[1]),0,ASP));s=.9+rnd()*1.1;m.scale.set(s*ASP,s,1)}
else if(it[0]==='l'){m=new THREE.Mesh(geo,mk(tex(it[1]),1,1,null,320/220));s=.7+rnd()*.6;m.scale.set(s,s,1);m.material.uniforms.uR.value=.16}
else{m=new THREE.Mesh(geo,mk(dotTex,2,1,'#D7FF0F'));s=.9+rnd()*.9;m.scale.set(s,s,1);m.material.uniforms.uR.value=.1}
const ang=rnd()*Math.PI*2,rad=3.6+rnd()*6;m.userData={bx:Math.cos(ang)*rad*1.35,by:Math.sin(ang)*rad*.75,ph:rnd()*6,sp:.2+rnd()*.4,ry:(rnd()-.5)*.8};
if(it[0]==='c')m.userData.cs=s;m.position.set(m.userData.bx,m.userData.by,8-rnd()*span);m.rotation.y=m.userData.ry;scene.add(m);decos.push(m)}
let W=1,Hh=1,camX=0,camY=0,camZ=7,narrow=false;
const fit=()=>{const r=stick.getBoundingClientRect();W=r.width;Hh=r.height;renderer.setSize(W,Hh,false);cam.aspect=W/Hh;narrow=cam.aspect<.9;cam.fov=narrow?62:48;cam.updateProjectionMatrix()};
new ResizeObserver(fit).observe(stick);fit();
const seen=watch(stick);const ray=new THREE.Raycaster(),v2=new THREE.Vector2();
const pick=e=>{const r=cv.getBoundingClientRect();v2.set((e.clientX-r.left)/r.width*2-1,-(e.clientY-r.top)/r.height*2+1);ray.setFromCamera(v2,cam);const h=ray.intersectObjects(mains)[0];return h?h.object:null};
let down=null;
stick.addEventListener('pointerdown',e=>{down=[e.clientX,e.clientY]});
stick.addEventListener('pointerup',e=>{if(!down||e.target.closest('.cloud-card'))return;if(Math.hypot(e.clientX-down[0],e.clientY-down[1])>8)return;const m=pick(e);if(m){const c=CASES[m.userData.i];openCase(c[0],c[1],c[2],c[3])}});
stick.addEventListener('pointermove',e=>{if(e.pointerType!=='mouse')return;cv.style.cursor=pick(e)?'pointer':'default'});
let pS=0;
onTick((dt,t)=>{if(!seen())return;const p=scroll();pS=lerp(pS,p,RM?1:.07);cprog.style.setProperty('--cp',p.toFixed(4));const fi=pS*(N-1);const f=clamp(Math.round(fi),0,N-1);setFocus(f);
const spread=narrow?.45:1;
mains.forEach(m=>{const u=m.userData;const k=Math.max(0,1-Math.abs(u.i-fi));u.k=lerp(u.k,k,.12);m.position.x=u.bx*spread*(1-u.k*.35);m.position.y=u.by+(RM?0:Math.sin(t*.6+u.i)*.08);
m.rotation.y=lerp(-u.side*.42,0,u.k);m.rotation.z=lerp(u.side*.04,0,u.k);const s=1+u.k*.18;const im=m.material.uniforms.uTex.value.image;if(!u.asp&&im&&im.width){u.asp=im.width/im.height;m.material.uniforms.uAsp.value=u.asp}const A=u.asp||ASP,hh=A>1?H/A*1.25:H;m.scale.set(hh*A*s,hh*s,1);m.material.uniforms.uDim.value=.62+.38*u.k});
decos.forEach(m=>{const u=m.userData;if(u.cs&&!u.asp){const im=m.material.uniforms.uTex.value.image;if(im&&im.width){u.asp=im.width/im.height;m.material.uniforms.uAsp.value=u.asp;const hh=u.asp>1?u.cs/u.asp*1.2:u.cs;m.scale.set(hh*u.asp,hh,1)}}m.position.x=u.bx*(narrow?.7:1)+(RM?0:Math.sin(t*u.sp+u.ph)*.3);m.position.y=u.by+(RM?0:Math.cos(t*u.sp*.8+u.ph)*.25);m.rotation.y=u.ry+(RM?0:Math.sin(t*.3+u.ph)*.15);m.material.uniforms.uDim.value=.9});
const tz=7-fi*DZ+ .2, a=mains[f].userData;
camZ=tz;camX=lerp(camX,mains[f].position.x*.55+mouse.nx*.7,.06);camY=lerp(camY,a.by*.5-mouse.ny*.45,.06);
cam.position.set(camX,camY,camZ);mains.forEach(m=>{const dz=camZ-m.position.z;m.visible=dz>2.6;m.material.uniforms.uDim.value*=clamp((dz-2.6)/2.5,0,1)});decos.forEach(m=>{m.visible=camZ-m.position.z>1.2});cam.lookAt(camX*.4,camY*.4,camZ-12);
renderer.render(scene,cam)});
};
const pars=$$('.par');
/* ---------------- services checkerboard ---------------- */
(function(){const SV=[
['Senior-Erfahrung','c-wheaton2','100 % Senior-Team, vom lokalen Betrieb bis zur globalen Marke.'],
['Multiplataformas','c-beflex','Marketing Omnichannel.'],
['Ideen und Narrative','c-jah1','Wir entwickeln Storytelling, das konvertiert.'],
['Ressourcenoptimierung','c-jasolar1','Strategien, mit denen das Budget Wirkung zeigt.']];
const A=$('#svcA'),B=$('#svcB'),idx=$('#svcIndex'),sec=$('#servicos');const labels=[],imgs=[];
const lb=(s,i)=>{const d=document.createElement('div');d.className='cell lbl';d.innerHTML=`
`;imgs.push(d);return d};
const sp=()=>{const d=document.createElement('div');d.className='cell sp';return d};
B.appendChild(sp());
SV.forEach((s,i)=>{const col=i%2?B:A;col.appendChild(lb(s,i));col.appendChild(im(s,i));const li=document.createElement('li');li.textContent=String(i+1).padStart(2,'0');li.title=s[0];li.addEventListener('click',()=>labels[i].scrollIntoView({behavior:'smooth',block:'center'}));idx.appendChild(li)});
A.appendChild(sp());
const lis=$$('li',idx);
const iio=new IntersectionObserver(es=>es.forEach(e=>{if(e.isIntersecting){e.target.classList.add('in');iio.unobserve(e.target)}}),{threshold:.2});
if(RM)imgs.forEach(c=>c.classList.add('in'));else{imgs.forEach(c=>{if(c.getBoundingClientRect().top
':TRIO[x[3]]?'
`).join('')+'
`}
`;g.appendChild(d)}return g};f.className='tm3';const t=document.createElement('div');t.className='tm3-track';t.appendChild(mk());t.appendChild(mk());f.appendChild(t)})();
/* ---------------- count up ---------------- */
const cio=new IntersectionObserver(es=>es.forEach(e=>{if(!e.isIntersecting||RM)return;cio.unobserve(e.target);const el=e.target,to=+el.dataset.count,pre=el.dataset.prefix||'',suf=el.dataset.suffix||'';const t0=performance.now();
(function f(n){const k=clamp((n-t0)/1600,0,1),v=Math.round(to*(1-Math.pow(1-k,4)));el.textContent=pre+v+suf;if(k<1)requestAnimationFrame(f)})(t0)}),{threshold:.6});
$$('[data-count]').forEach(e=>cio.observe(e));
/* ---------------- sites & apps 3-card scroll ---------------- */
(function(){const box=$('#cf'),sec=$('#sites'),tt=$('#cfTitle'),tc=$('#cfCat'),pill=$('#cfPill');const N=SITES.length;let pos=0,drag=null,dragOff=0;
const items=SITES.map((s,i)=>{const d=document.createElement('div');d.className='cf-item';d.innerHTML=`
`;box.appendChild(d);
d.addEventListener('click',()=>{if(drag&&drag.moved)return;if(Math.round(pos)===i)openCase(s[0],s[1],'Websites und Apps',s[2]);else go(i)});return d});
const dots=SITES.map((s,i)=>{const b=document.createElement('button');b.setAttribute('role','tab');b.setAttribute('aria-label',s[1]);b.addEventListener('click',()=>go(i));pill.appendChild(b);return b});
function go(i){const range=sec.offsetHeight-innerHeight;scrollTo({top:sec.offsetTop+range*(i/(N-1)),behavior:RM?'auto':'smooth'})}
let shown=-1;const title=i=>{if(i===shown)return;shown=i;tt.textContent=SITES[i][1];tc.textContent='Websites und Apps · '+String(i+1).padStart(2,'0')+'/'+N;dots.forEach((d,k)=>d.setAttribute('aria-selected',k===i));tt.animate([{opacity:0,transform:'translateY(8px)'},{opacity:1,transform:'none'}],{duration:400})};
box.addEventListener('pointerdown',e=>{drag={x:e.clientX,moved:false}});
addEventListener('pointermove',e=>{if(!drag)return;const dx=e.clientX-drag.x;if(Math.abs(dx)>6)drag.moved=true;dragOff=-dx/(items[0].offsetWidth*.8)});
addEventListener('pointerup',()=>{if(!drag)return;const t=clamp(Math.round(pos+dragOff),0,N-1);dragOff=0;if(drag.moved)go(t);setTimeout(()=>drag=null,0)});
box.addEventListener('keydown',e=>{const c=Math.round(pos);if(e.key==='ArrowLeft'){e.preventDefault();go(Math.max(0,c-1))}if(e.key==='ArrowRight'){e.preventDefault();go(Math.min(N-1,c+1))}if(e.key==='Enter'){const s=SITES[c];openCase(s[0],s[1],'Websites und Apps',s[2])}});
const seen=watch(sec);let first=true;
onTick(()=>{if(!seen()&&!first)return;first=false;const r=sec.getBoundingClientRect();const p=clamp(-r.top/Math.max(1,sec.offsetHeight-innerHeight),0,1);const target=clamp(p*(N-1)+dragOff,0,N-1);pos=lerp(pos,target,RM?1:.14);
title(Math.round(pos));const w=items[0].offsetWidth;
items.forEach((el,i)=>{const d=i-pos,ad=Math.abs(d);const x=Math.sign(d)*Math.min(ad,1)*w*.86+Math.sign(d)*Math.max(0,ad-1)*w*.3;const sc=1-Math.min(ad,1)*.34-Math.max(0,ad-1)*.1;const ry=-clamp(d,-1.6,1.6)*26;const z=-Math.min(ad,2)*120;
el.style.transform=`translate(-50%,-50%) translate3d(${x}px,0,${z}px) rotateY(${ry}deg) scale(${sc})`;el.style.zIndex=100-Math.round(ad*10);el.style.opacity=ad>1.6?0:ad>1?1-(ad-1)/.6:1;el.style.filter=`brightness(${1-Math.min(ad,1)*.1})`;el.style.visibility=ad>1.6?'hidden':'visible'})});
})();
/* ---------------- liquid glass sphere ---------------- */
const __globe=function(){const wrap=$('#globeWrap'),cv=$('#globe');if(!HAS3)return;
let renderer;try{renderer=new THREE.WebGLRenderer({canvas:cv,antialias:true,alpha:true})}catch(e){return}
renderer.setPixelRatio(Math.min(devicePixelRatio||1,2));renderer.setClearColor(0x000000,0);
const scene=new THREE.Scene(),cam=new THREE.PerspectiveCamera(32,1,.1,100);cam.position.set(0,0,10);
const g=new THREE.Group();scene.add(g);const Rg=2.05;
const U={uT:{value:0},uM:{value:new THREE.Vector2()}};
const vs=`varying vec3 vN;varying vec3 vV;varying vec3 vP;void main(){vec4 wp=modelMatrix*vec4(position,1.);vP=position;vN=normalize(normalMatrix*normal);vec4 mv=viewMatrix*wp;vV=normalize(-mv.xyz);gl_Position=projectionMatrix*mv;}`;
const fs=`precision highp float;uniform float uT;uniform vec2 uM;varying vec3 vN;varying vec3 vV;varying vec3 vP;
float h(vec3 p){return fract(sin(dot(p,vec3(127.1,311.7,74.7)))*43758.5453);}
float n3(vec3 p){vec3 i=floor(p),f=fract(p);f=f*f*(3.-2.*f);return mix(mix(mix(h(i),h(i+vec3(1,0,0)),f.x),mix(h(i+vec3(0,1,0)),h(i+vec3(1,1,0)),f.x),f.y),mix(mix(h(i+vec3(0,0,1)),h(i+vec3(1,0,1)),f.x),mix(h(i+vec3(0,1,1)),h(i+vec3(1,1,1)),f.x),f.y),f.z);}
float fbm(vec3 p){float a=.5,s=0.;for(int i=0;i<4;i++){s+=a*n3(p);p*=2.02;a*=.5;}return s;}
void main(){vec3 N=normalize(vN),V=normalize(vV);float fr=1.-max(dot(N,V),0.);
vec3 q=vP*.55+vec3(0.,uT*.06,uT*.04);vec3 w=vec3(fbm(q),fbm(q+4.7),fbm(q+9.1));float f=fbm(q+w*1.6+vec3(uM*.3,0.));
vec3 pink=vec3(.97,.70,.86),lav=vec3(.72,.70,.97),sky=vec3(.70,.86,.99),butter=vec3(1.,.96,.74),mint=vec3(.74,.96,.92),white=vec3(1.);
vec2 sp=N.xy;
vec3 c=mix(lav,sky,smoothstep(-.2,.7,sp.y-sp.x*.3+(f-.5)*.6));
c=mix(c,pink,smoothstep(.55,.0,length(sp-vec2(-.05,-.2))-(f-.5)*.35)*.9);
c=mix(c,butter,smoothstep(.5,.0,length(sp-vec2(.15,.15))-(w.x-.5)*.3)*.85);
c=mix(c,mint,smoothstep(.25,.0,length(sp-vec2(.45,.05))-(w.y-.5)*.3)*.5);
c=mix(c,white,.5+smoothstep(.4,.85,fbm(q*.9+w))*.25);
/* clean curved stripes on two sides */
float st=sin((dot(sp,normalize(vec2(.8,-.6)))*1.2+length(sp)*.9+(fbm(vP*.6+uT*.03)-.5)*.25)*190.);
float lines=smoothstep(.0,.9,st*.5+.5);
float mA=smoothstep(.45,.85,length(sp))*smoothstep(.1,-.5,sp.x+sp.y);
float mB=smoothstep(.55,.9,length(sp))*smoothstep(.3,.9,sp.x+sp.y*.6)*smoothstep(-.3,.4,sp.y);
c=mix(c,c*vec3(.9,.91,.99),lines*(mA+mB)*.22);
vec3 spec=.5+.5*cos(6.2831*(fr*1.2+vec3(0.,.33,.67))+uT*.15);
c=mix(c,mix(white,spec,.15),smoothstep(.75,1.,fr)*.6);
vec3 L=normalize(vec3(-.4,.6,.7));float hl=pow(max(dot(reflect(-L,N),V),0.),8.);c=mix(c,white,hl*.25);
float a=.52-smoothstep(.9,1.,fr)*.1;gl_FragColor=vec4(c,a);}`;
const sph=new THREE.Mesh(new THREE.SphereGeometry(Rg,128,128),new THREE.ShaderMaterial({uniforms:U,vertexShader:vs,fragmentShader:fs,transparent:true}));g.add(sph);
/* thin outer halo */
const halo=new THREE.Mesh(new THREE.SphereGeometry(Rg*1.08,96,96),new THREE.ShaderMaterial({transparent:true,depthWrite:false,side:THREE.BackSide,vertexShader:vs,fragmentShader:`varying vec3 vN;varying vec3 vV;void main(){float fr=1.-abs(dot(normalize(vN),normalize(vV)));gl_FragColor=vec4(1.,1.,1.,smoothstep(.0,.9,1.-fr)*pow(fr,1.5)*.55);}`}));g.add(halo);
const PINS=[[-23.55,-46.63,'Brasil',1],[38.9,-77.0,'EUA'],[43.73,7.42,'Mônaco'],[-33.87,151.2,'Austrália'],[52.52,13.4,'Alemanha'],[38.72,-9.14,'Portugal']];const pinsEl=document.createElement('div');wrap.appendChild(pinsEl);
const PV=[];PINS.forEach((p,i)=>{const el=document.createElement('div');el.className='pin'+(p[3]?' main':'');el.innerHTML=`![${d[1]}](/img/dep-${d[0]}.webp)

![${b[2]} | Blog da Nume, agência de marketing digital em São Paulo](/img/blog-${b[0]}.webp)