Ë
    Öÿ}jÊ ã                   ó@  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZ ddlmZ ddlZddlZ ed«      Zej)                  d¬«       ddlZ eej,                  j/                  d	«      xs#  ee«      j3                  «       j4                  d
z  «      Z ed«      ZdZd„ Z e«        ej,                  j/                  d«      xs dZej,                  j/                  dd«      Z ej,                  j/                  dd«      Z!ej,                  j/                  dd«      Z"ej,                  j/                  dd«      Z#ej,                  j/                  dd«      Z$ej,                  j/                  dd«      Z%d„ Z& ed«      Z' ed«      Z( ed«      Z) ed«      Z*h d£Z+d`dede,dz  de-fd „Z.d!e/de-fd"„Z0d#„ Z1d$„ Z2d%e/d&e,de,fd'„Z3d(e,fd)„Z4d(e,de/dz  fd*„Z5d&e,de6fd+„Z7d,e-de-fd-„Z8dade,fd.„Z9d/e-d0e-de-dz  fd1„Z:d2e-de/fd3„Z;dbd4e-d5ed6e,de<fd7„Z=d/e-d0e-de/fd8„Z>d9e-de/fd:„Z?d/e-d0e-de-fd;„Z@d!e/de/fd<„ZAd!e/de/fd=„ZBd!e/de/fd>„ZCd!e/de/fd?„ZDd@e/d!e/dAe6e-   dBe-de-f
dC„ZEd@e/d!e/dAe6e-   dBe-de-f
dD„ZFdEe/dFe-dGede6e-   fdH„ZGd@e/d!e/dAe6e-   de-fdI„ZHd(e,dJedKe,dLe-ddf
dM„ZIdLe-dKe,de-fdN„ZJdLe-de<fdO„ZKdcd9e-d5edPe,de<fdQ„ZLd(e,d!e/d@e/dRe-dSedz  dTede<fdU„ZM edV«      ZNde-fdW„ZOdXe-de-fdY„ZP	 d`d(e,d!e/d@e/dRe-dZe/dz  dedz  fd[„ZQd\ed]ede<fd^„ZRd(e,d%e/ddfd_„ZSy)duŠ  
analisador.py - Analisador automÃ¡tico de leads (prospeccao ativa)

Fluxo:
  1) Coleta dados pÃºblicos (Google Places, Instagram, site atual)
  2) Gera copy persuasiva com OpenAI GPT-4o
  3) Baixa imagens (Google Photos ou Unsplash fallback)
  4) Monta site HTML + serve via porta local + registra rota Traefik + DNS Cloudflare
  5) Gera dossiÃª PDF via WeasyPrint (com screenshot Playwright)
é    N)ÚPath)Údatetime)Ú
quote_plusz/opt/mia/workspace/analisesT)Úexist_okÚUSERS_DB_PATHzusers.dbz)/etc/easypanel/traefik/config/custom.yamlzagentesclimb.usc                  óÊ  — t        d«      } | j                  «       sy| j                  «       j                  «       D ]¦  }|j	                  «       }|r|j                  d«      sd|vrŒ+|j                  dd«      \  }}|j	                  «       }|j	                  «       j	                  d«      j	                  d«      }|sŒ�|t        j                  vsŒ”|t        j                  |<   Œ¨ y)uA   Carrega /opt/mia/.env em os.environ se ainda nÃ£o estiver setado.z/opt/mia/.envNú#Ú=é   ú"ú')	r   ÚexistsÚ	read_textÚ
splitlinesÚstripÚ
startswithÚsplitÚosÚenviron)Úenv_pathÚlineÚkÚvs       ú9/opt/mia/workspace/prospeccao_ativa-staging/analisador.pyÚ_load_env_filer   *   sµ   € ä�OÓ$€HØ�?‰?ÔØØ×"Ñ"Ó$×/Ñ/Ó1ò ˆØ�z‰z‹|ˆÙ�t—‘ sÔ+¨s¸$©ØØ�z‰z˜#˜qÓ!‰ˆˆ1Ø�G‰G‹IˆØ�G‰G‹I�O‰O˜CÓ ×&Ñ& sÓ+ˆÚ�œ"Ÿ*™*Ò$ØŒB�J‰J�qŠMñó    ÚGOOGLE_PLACES_KEYÚ'AIzaSyCnOTQxLdFua3OLBnNbb0Husoo9dH80FbwÚOPENAI_API_KEYÚ ÚANTHROPIC_API_KEYÚCLAUDE_CODE_OAUTH_TOKENÚCLOUDFLARE_DNS_TOKENÚCLOUDFLARE_ZONE_IDÚUNSPLASH_ACCESS_KEYc                  ó|   — ddl } t        r| j                  t        ¬«      S t        r| j                  t        ¬«      S y)zARetorna cliente Anthropic usando API key ou OAuth token (Bearer).r   N©Úapi_key)Ú
auth_token)Ú	anthropicr!   Ú	AnthropicÚANTHROPIC_OAUTH_TOKEN)Ú
_anthropics    r   Ú_get_anthropic_clientr.   C   s8   € ã"ÝØ×#Ñ#Ô,=Ð#Ó>Ð>ÝØ×#Ñ#Ô/DÐ#ÓEÐEØr   z1/home/mia/.claude/skills/frontend-design/SKILL.mdz//home/mia/.claude/skills/ui-ux-pro-max/SKILL.mdz//home/mia/.claude/skills/landing-funil/SKILL.mdz9/home/mia/.claude/skills/landing-funil/reference/base.css>	   ÚcursoÚebookÚonlineÚdigitalÚafiliadoÚcoachingÚmentoriaÚinfoprodutoÚtreinamentoÚpathÚlimitÚreturnc                 óˆ   — 	 | j                  d¬«      }|�|d| S |S # t        $ r}t        d| › d|› �«       Y d}~yd}~ww xY w)uA   LÃª um arquivo de skill do disco. Retorna string vazia se falhar.úutf-8©ÚencodingNz[analisador] falha lendo skill ú: r    )r   Ú	ExceptionÚprint)r8   r9   ÚcontentÚes       r   Ú_read_skillrD   Y   sW   € ðØ—.‘.¨'�.Ó2ˆØÐØ˜6˜E�?Ð"ØˆøÜò ÜÐ/°¨v°R¸°sÐ;Ô<Üûðús   ‚ › �	A¦<¼AÚdadosc                 óò   ‡— | j                  d«      xs dj                  «       }dj                  | j                  d«      xs g «      j                  «       }|dz   |z   Št        ˆfd„t        D «       «      ryy)zDClassifica o lead como 'digital' (infoproduto/curso/etc) ou 'local'.Ú	categoriar    Ú Útypesc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© )Ú.0ÚpÚcombineds     €r   ú	<genexpr>z$detectar_segmento.<locals>.<genexpr>j   s   øè ø€ Ò
3˜Qˆ1�Œ=Ñ
3ùs   ƒr2   Úlocal)ÚgetÚlowerÚjoinÚanyÚPALAVRAS_DIGITAL)rE   ÚcatrI   rO   s      @r   Údetectar_segmentorX   e   sg   ø€ à�9‰9�[Ó!Ò' R×
.Ñ
.Ó
0€CØ�H‰H�U—Y‘Y˜wÓ'Ò-¨2Ó.×4Ñ4Ó6€EØ�S‰y˜5Ñ €HÜ
Ó
3Ô"2Ô
3Ô3ØØr   c                  ót   — t        j                  t        t        «      «      } t         j                  | _        | S rK   )Úsqlite3ÚconnectÚstrÚDB_PATHÚRowÚrow_factory©Úconns    r   Ú	_get_connrb   p   s%   € Ü�?‰?œ3œw›<Ó(€DÜ—{‘{€DÔØ€Kr   c                  óz   — t        «       } | j                  d«       | j                  «        | j                  «        y)u*   Cria tabela lead_analises se nÃ£o existir.a,  
        CREATE TABLE IF NOT EXISTS lead_analises (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            lead_nome TEXT NOT NULL,
            lead_telefone TEXT,
            lead_cidade TEXT,
            lead_categoria TEXT,
            lead_instagram TEXT,
            lead_site_atual TEXT,
            status TEXT DEFAULT 'aguardando',
            site_url TEXT,
            pdf_path TEXT,
            analise_json TEXT,
            erro TEXT,
            criado_em TEXT,
            concluido_em TEXT,
            user_id INTEGER
        )
    N)rb   ÚexecuteÚcommitÚcloser`   s    r   Úensure_tablerg   v   s.   € ä‹;€DØ‡L�Lð ô 	ð& 	‡K�K„MØ‡J�J…Lr   Ú	lead_dataÚuser_idc                 óÞ  — t        «        t        «       }|j                  d| j                  d«      xs d| j                  d«      xs d| j                  d«      xs d| j                  d«      xs d| j                  d«      xs d| j                  d«      xs dt	        j
                  «       j                  «       |f«      }|j                  «        |j                  }|j                  «        |S )	Nzë
        INSERT INTO lead_analises
            (lead_nome, lead_telefone, lead_cidade, lead_categoria,
             lead_instagram, lead_site_atual, status, criado_em, user_id)
        VALUES (?, ?, ?, ?, ?, ?, 'aguardando', ?, ?)
    Únomer    ÚtelefoneÚcidaderG   Ú	instagramÚ
site_atual)
rg   rb   rd   rR   r   ÚnowÚ	isoformatre   Ú	lastrowidrf   )rh   ri   ra   ÚcurÚaids        r   Úcriar_analiseru   �   sÅ   € Ü„NÜ‹;€DØ
�,‰,ð ð 	�‰�fÓÒ# Ø�‰�jÓ!Ò' RØ�‰�hÓÒ% 2Ø�‰�kÓ"Ò( bØ�‰�kÓ"Ò( bØ�‰�lÓ#Ò) rÜ�‰‹× Ñ Ó"Øð	
ó€Cð 	‡K�K„MØ
�-‰-€CØ‡J�J„LØ€Jr   Ú
analise_idc                 ó^  — |sy g d¢}|j                  «       D ��ci c]  \  }}||v sŒ||“Œ }}}|sy dj                  d„ |D «       «      }t        |j                  «       «      | gz   }t	        «       }|j                  d|› d�|«       |j                  «        |j                  «        y c c}}w )N)ÚstatusÚsite_urlÚpdf_pathÚanalise_jsonÚerroÚconcluido_emú, c              3   ó&   K  — | ]	  }|› d �–— Œ y­w)z = ?NrL   )rM   r   s     r   rP   z!update_analise.<locals>.<genexpr>¯   s   è ø€ Ò1 A˜�s˜$”ZÑ1ùs   ‚zUPDATE lead_analises SET z WHERE id = ?)ÚitemsrT   ÚlistÚvaluesrb   rd   re   rf   )	rv   ÚkwargsÚcamposr   r   ÚupdatesÚsetsÚvalsra   s	            r   Úupdate_analiserˆ   ¨   sœ   € ÙØÚW€FØ &§¡£×>™˜˜1°!°v²+ˆq�!‰tÐ>€GÑ>ÙØØ�9‰9Ñ1¨Ô1Ó1€DÜ�—‘Ó Ó! Z LÑ0€DÜ‹;€DØ‡L�LÐ,¨T¨F°-Ð@À$ÔGØ‡K�K„MØ‡J�J…Lùó ?s
   ›B)¨B)c                 ó–   — t        «       }|j                  d| f«      j                  «       }|j                  «        |rt	        |«      S d S )Nz(SELECT * FROM lead_analises WHERE id = ?)rb   rd   Úfetchonerf   Údict)rv   ra   Úrows      r   Úget_analiser�   ·   s?   € Ü‹;€DØ
�,‰,ÐAÀJÀ=Ó
Q×
ZÑ
ZÓ
\€CØ‡J�J„LÙŒ4�‹9Ð% Ð%r   c                 óÈ   — t        «        t        «       }|j                  d| f«      j                  «       }|j	                  «        |D �cg c]  }t        |«      ‘Œ c}S c c}w )NzHSELECT * FROM lead_analises WHERE user_id = ? ORDER BY id DESC LIMIT 100)rg   rb   rd   Úfetchallrf   r‹   )ri   ra   ÚrowsÚrs       r   Úlistar_analisesr’   ¾   sS   € Ü„NÜ‹;€DØ�<‰<ØRØ	ˆ
ó÷ �hƒjð 	ð 	‡J�J„LØ!Ö"˜ŒD��GÒ"Ð"ùÒ"s   Á
AÚtextc                 óø   — | syt        j                  d| «      }|j                  dd«      j                  d«      }|j	                  «       }t        j                  dd|«      }|j                  d«      }|d d xs dS )NÚleadÚNFKDÚASCIIÚignorez
[^a-z0-9]+Ú-é(   )ÚunicodedataÚ	normalizeÚencodeÚdecoderS   ÚreÚsubr   )r“   ÚnfkdÚ
only_asciis      r   Úslugifyr£   Ê   sv   € ÙØÜ× Ñ  ¨Ó.€DØ—‘˜W hÓ/×6Ñ6°wÓ?€JØ×!Ñ!Ó#€JÜ—‘˜ s¨JÓ7€JØ×!Ñ! #Ó&€JØ�c�rˆ?Ò$˜fÐ$r   c                 ó,  — t        | |dz   «      D ]U  }t        j                  t        j                  t        j                  «      5 }	 |j	                  d|f«       |cd d d «       c S  t        d«      ‚# t
        $ r Y d d d «       Œvw xY w# 1 sw Y   ŒƒxY w)Nr   z	127.0.0.1zSem porta livre no range)ÚrangeÚsocketÚAF_INETÚSOCK_STREAMÚbindÚOSErrorÚRuntimeError)ÚinicioÚfimrN   Úss       r   Úporta_livrer¯   Õ   s•   € Ü�6˜3 ™7Ó#ò ˆÜ�]‰]œ6Ÿ>™>¬6×+=Ñ+=Ó>ð 	À!ðØ—‘˜ QÐ'Ô(Ø÷	ó 	ðô Ð1Ó
2Ð2øô ò Ø÷	ð 	ðú÷		ð 	ús*   ÁB
ÁA3Á3	BÁ<B
ÂBÂB
Â
B	rk   rm   c           	      ó  — 	 t        j                  d| › d|› �j                  «       ddt        ddœd¬«      }|j	                  «       }|j                  d	«      xs g }|r|d
   j                  d«      S 	 y# t
        $ r Y yw xY w)z$Retorna place_id do estabelecimento.zAhttps://maps.googleapis.com/maps/api/place/findplacefromtext/jsonrH   Ú	textqueryÚplace_idúpt-BR)ÚinputÚ	inputtypeÚfieldsÚkeyÚlanguageé   ©ÚparamsÚtimeoutÚ
candidatesr   N)ÚrequestsrR   r   r   Újsonr@   )rk   rm   r‘   ÚdataÚcandss        r   Ú_google_find_placerÂ   á   sœ   € ðÜ�L‰LØOà ˜6  6 (Ð+×1Ñ1Ó3Ø(Ø$Ü(Ø#ñð ô	
ˆð �v‰v‹xˆØ—‘˜Ó&Ò,¨"ˆÙØ˜‘8—<‘< 
Ó+Ð+ð ð øô ò ØØðús   ‚A/A4 Á4	B Á?B r²   c                 ó®   — 	 t        j                  d| dt        ddœd¬«      }|j                  «       j                  d«      xs i S # t        $ r i cY S w xY w)zDetalhes completos do lugar.z7https://maps.googleapis.com/maps/api/place/details/jsonz‘name,formatted_address,formatted_phone_number,website,opening_hours,rating,user_ratings_total,reviews,photos,types,url,international_phone_numberr³   )r²   r¶   r·   r¸   r¹   rº   Úresult)r¾   rR   r   r¿   r@   )r²   r‘   s     r   Ú_google_place_detailsrÅ   ÷   sc   € ðÜ�L‰LØEà$ðBô )Ø#ñð ô

ˆð �v‰v‹x�|‰|˜HÓ%Ò+¨Ð+øÜò ØŠ	ðús   ‚AA ÁAÁAÚphoto_referenceÚdestÚmaxwidthc                 óà   — 	 d|› d| › dt         › �}t        j                  |dd¬«      }|j                  dk(  r(|j                  r|j                  |j                  «       yy# t        $ r Y yw xY w)	z&Baixa foto do Places (segue redirect).z:https://maps.googleapis.com/maps/api/place/photo?maxwidth=z&photoreference=z&key=é   T©r¼   Úallow_redirectséÈ   F)r   r¾   rR   Ústatus_coderB   Úwrite_bytesr@   )rÆ   rÇ   rÈ   Úurlr‘   s        r   Ú_google_photo_downloadrÑ   
  sƒ   € ð
ðØ!˜
Ð"2°?Ð2CÀ5ÔIZÐH[ð]ð 	ô �L‰L˜ b¸$Ô?ˆØ�=‰=˜CÒ A§I¢IØ×Ñ˜QŸY™YÔ'Øð øô ò ØØðús   ‚AA! Á!	A-Á,A-c                 ó¬  — t        | |«      }|si S t        |«      }|si S |j                  d«      xs g D �cg c]%  }|j                  d«      sŒ|j                  d«      ‘Œ' }}|j                  d«      xs d|j                  d«      xs d|j                  d«      xs |j                  d«      xs d|j                  d«      xs d|j                  d	«      |j                  d
«      |j                  d«      xs g |j                  d«      xs i j                  d«      xs g |j                  d«      xs g |j                  d«      xs d|dd |dœS c c}w )z(Retorna dict com dados do Google Places.ÚphotosrÆ   Únamer    Úformatted_addressÚformatted_phone_numberÚinternational_phone_numberÚwebsiteÚratingÚuser_ratings_totalÚreviewsÚopening_hoursÚweekday_textrI   rÐ   Né   )Únome_googleÚenderecorl   Úsite_googlerÙ   Útotal_reviewsrÛ   ÚhorariosrI   Úgoogle_maps_urlÚ
fotos_refsr²   )rÂ   rÅ   rR   )rk   rm   ÚpidÚdetrN   rå   s         r   Úcoletar_google_placesrè     s?  € ä
˜T 6Ó
*€CÙØˆ	Ü
 Ó
$€CÙØˆ	Ø58·W±W¸XÓ5FÒ5LÈ"Öj¨qÐQR×QVÑQVÐWhÕQi�!—%‘%Ð)Õ*Ðj€JÐjà—w‘w˜v“Ò,¨"Ø—G‘GÐ/Ó0Ò6°BØ—G‘GÐ4Ó5Òd¸¿¹ÐA]Ó9^ÒdÐbdØ—w‘w˜yÓ)Ò/¨RØ—'‘'˜(Ó#ØŸ™Ð!5Ó6Ø—7‘7˜9Ó%Ò+¨Ø—W‘W˜_Ó-Ò3°×8Ñ8¸ÓHÒNÈBØ—‘˜Ó!Ò' RØŸ7™7 5›>Ò/¨RØ   !�nØñð ùò ks   ·EÁErÐ   c                 óD  — | si S | j                  d«      sd| z   } 	 t        j                  | dddi¬«      }|j                  d d }d}t	        j
                  d	|t        j                  t        j                  z  «      }|r"|j                  d
«      j                  «       d d }d}t	        j
                  d|t        j                  «      }|r"|j                  d
«      j                  «       d d }|||j                  dœS # t        $ r}dt        |«      d d icY d }~S d }~ww xY w)N)úhttp://úhttps://rë   é   ú
User-AgentúMozilla/5.0©r¼   Úheadersi@ r    z<title>(.*?)</title>r   rÍ   z<<meta\s+name=["\']description["\']\s+content=["\'](.+?)["\']i,  )Úsite_tituloÚsite_descricaoÚsite_statusÚ	site_erroéx   )r   r¾   rR   r“   rŸ   ÚsearchÚIÚSÚgroupr   rÎ   r@   r\   )rÐ   r‘   ÚhtmlÚtitleÚmÚdescrC   s          r   Úcoletar_site_atualrþ   4  s  € ÙØˆ	Ø�>‰>Ð1Ô2Ø˜3Ñˆð+Ü�L‰L˜ b°<ÀÐ2OÔPˆØ�v‰v�g�vˆˆØˆÜ�I‰IÐ-¨t´R·T±T¼B¿D¹D±[ÓAˆÙØ—G‘G˜A“J×$Ñ$Ó& t¨Ð,ˆEØˆÜ�I‰IÐUÐW[Ô]_×]aÑ]aÓbˆÙØ—7‘7˜1“:×#Ñ#Ó% d sÐ+ˆDØ$¸ÈQÏ]É]Ñ[Ð[øÜò +ØœS ›V D S˜\Ð*Õ*ûð+ús   œCC< Ã<	DÄDÄDÄDc                 ó  — 	 t        | › d|› d�«      }t        j                  d|› �dddi¬«      }|j                  }t	        j
                  d|«      }|r%|j                  d	«      }|j                  «       d
vr|S y# t        $ r Y yw xY w)uF   HeurÃ­stica: tenta encontrar @handle do negÃ³cio via busca DuckDuckGo.rH   z
 instagramzhttps://duckduckgo.com/html/?q=é
   rí   rî   rï   z$instagram\.com/([a-zA-Z0-9._]{3,30})r   )rN   ÚreelÚreelsÚexploreÚaccountsr    )	r   r¾   rR   r“   rŸ   rö   rù   rS   r@   )rk   rm   Úqr‘   r“   rü   Úhandles          r   Úbuscar_instagramr  I  s�   € ðÜ˜$˜˜q  ¨
Ð3Ó4ˆÜ�L‰LØ-¨a¨SÐ1ØØ! =Ð1ô
ˆð
 �v‰vˆÜ�I‰IÐ=¸tÓDˆÙØ—W‘W˜Q“ZˆFØ�|‰|‹~Ð%RÑRØ�ð øô ò ØØðús   ‚A6A: Á:	BÂBc                 óÞ  — t         st        | «      S 	 ddlm}  |t         ¬«      }d}| j	                  d«      rdj                  d„ | d   dd	 D «       «      }d
| j	                  d«      xs | j	                  d«      › d| j	                  d«      › d| j	                  d«      › d| j	                  d«      › d| j	                  d«      › d| j	                  d«      › d| j	                  d«      › ddj                  | j	                  d«      xs g «      dd › d|xs d› d| j	                  d «      xs d› d!| j	                  d"«      xs d› d#�}|j                  j                  j                  d$d%d&d'œd(|d'œgd)d*d+id,¬-«      }|j                  d   j                  j                  j                  «       }t        j                  |«      S # t        $ r#}t!        d.|› �«       t        | «      cY d}~S d}~ww xY w)/z=Gera copy persuasiva usando GPT-4o. Retorna dict estruturado.r   ©ÚOpenAIr'   r    rÛ   Ú
c              3   ór   K  — | ]/  }d |j                  dd«      › d|j                  dd«      dd › �–— Œ1 y­w©z- rÙ   ú?z/5: r“   r    NrÍ   ©rR   ©rM   r‘   s     r   rP   z$gerar_copy_openai.<locals>.<genexpr>i  óD   è ø€ ò %àð �Q—U‘U˜8 SÓ)Ð*¨$¨q¯u©u°V¸RÓ/@ÀÀ#Ð/FÐ.GÔHñ%ùó   ‚57NrÞ   u­   VocÃª Ã© um copywriter sÃªnior especialista em pequenos negÃ³cios locais brasileiros.

Gere copy persuasiva para uma landing page de demonstraÃ§Ã£o deste negÃ³cio:

- Nome: rß   rk   ú
- Cidade: rm   ú
- Categoria: rG   õ   
- EndereÃ§o: rà   ú
- Telefone: rl   ú
- Rating Google: rÙ   ú (râ   õ    avaliaÃ§Ãµes)
- HorÃ¡rios: ú | rã   é�  õ   

AvaliaÃ§Ãµes reais recentes:
õ   (sem avaliaÃ§Ãµes)ú

Site atual (se existe): rñ   ú - rò   uÌ  

Devolva EXATAMENTE este JSON (sem texto fora, sem markdown):
{
  "headline": "chamada principal impactante, atÃ© 12 palavras",
  "subheadline": "subheadline com promessa/benefÃ­cio, atÃ© 25 palavras",
  "sobre": "parÃ¡grafo de 2-3 linhas apresentando o negÃ³cio, tom acolhedor e profissional",
  "servicos": [
    {"titulo": "ServiÃ§o 1", "descricao": "descriÃ§Ã£o curta"},
    {"titulo": "ServiÃ§o 2", "descricao": "descriÃ§Ã£o curta"},
    {"titulo": "ServiÃ§o 3", "descricao": "descriÃ§Ã£o curta"}
  ],
  "por_que_escolher": [
    "Motivo 1 em uma linha",
    "Motivo 2 em uma linha",
    "Motivo 3 em uma linha",
    "Motivo 4 em uma linha"
  ],
  "depoimentos": [
    {"nome": "Nome plausÃ­vel brasileiro", "texto": "depoimento verossÃ­mil baseado nas avaliaÃ§Ãµes reais", "rating": 5},
    {"nome": "Outro nome", "texto": "outro depoimento", "rating": 5}
  ],
  "cta_principal": "texto do botÃ£o principal (2-4 palavras)",
  "cta_secundario": "texto do botÃ£o secundÃ¡rio",
  "cor_primaria": "hex hex adequado ao segmento, ex #2E7D32",
  "cor_secundaria": "hex secundÃ¡rio complementar",
  "analise_oportunidades": [
    "Oportunidade 1 identificada olhando o negÃ³cio",
    "Oportunidade 2",
    "Oportunidade 3"
  ]
}
úgpt-4oÚsystemuF   VocÃª devolve APENAS JSON vÃ¡lido, sem markdown, sem cerca de cÃ³digo.©ÚrolerB   Úuserçffffffæ?ÚtypeÚjson_objectéÜ  ©ÚmodelÚmessagesÚtemperatureÚresponse_formatÚ
max_tokensz[analisador] erro openai: ©r   Ú_copy_fallbackÚopenair
  rR   rT   ÚchatÚcompletionsÚcreateÚchoicesÚmessagerB   r   r¿   Úloadsr@   rA   )rE   r
  ÚclientÚreviews_textÚpromptÚresprB   rC   s           r   Úgerar_copy_openair<  ^  s  € åÜ˜eÓ$Ð$ðI%Ý!Ù¤Ô/ˆàˆØ�9‰9�YÔØŸ9™9ñ %à˜yÑ)¨"¨1Ð-ô%ó ˆLð
	ð 
�‰�=Ó	!Ò	6 U§Y¡Y¨vÓ%6Ð7ð 8Ø�9‰9�XÓÐ
ð  Ø�i‰i˜Ó$Ð%ð &Ø�i‰i˜
Ó#Ð$ð %Ø�Y‰Y�zÓ"Ð#ð $Ø—)‘)˜HÓ%Ð& b¨¯©°?Ó)CÐ(Dð EØ�j‰j˜Ÿ™ :Ó.Ò4°"Ó5°d°sÐ;Ð<ð =ð Ò%Ð%Ð &ð 'àŸ™ =Ó1Ò7°RÐ8¸¸E¿I¹IÐFVÓ<WÒ<]Ð[]Ð;^ð  _ð/ˆð` �{‰{×&Ñ&×-Ñ-Øà!Ð.vÑwØ¨FÑ3ðð Ø# ]Ð3Øð .ó 	
ˆð —,‘,˜q‘/×)Ñ)×1Ñ1×7Ñ7Ó9ˆÜ�z‰z˜'Ó"Ð"øÜò %ÜÐ*¨1¨#Ð.Ô/Ü˜eÓ$Õ$ûð%ús   “F,G  Ç 	G,Ç	G'Ç!G,Ç'G,c                 ó  — | j                  d«      xs | j                  d«      xs d}| j                  d«      xs d}|› d|› d| j                  dd	«      › �d
|› d�dddœdddœdddœgg d¢ddddœddddœgddddg d¢dœS ) Nrß   rk   u   Seu NegÃ³ciorG   Úatendimentou   ReferÃªncia em z em rm   r    u	   ConheÃ§a uZ   . Atendimento de qualidade, profissionais experientes e resultados que fazem a diferenÃ§a.ÚAtendimentou!   ServiÃ§o profissional e dedicado.)ÚtituloÚ	descricaoÚ	Qualidadeu'   PadrÃ£o de excelÃªncia em cada detalhe.u
   ConfianÃ§az'Anos de mercado e clientes satisfeitos.)u   ExperiÃªncia comprovadazAtendimento personalizadou   LocalizaÃ§Ã£o acessÃ­velu   PreÃ§os justosz	Ana Silvaz Atendimento nota mil. Recomendo!rÞ   )rk   ÚtextorÙ   zCarlos Souzaz/Profissionais atenciosos e resultado excelente.úAgendar agoraúFale conoscoú#2E7D32ú#1B5E20)u;   Otimizar presenÃ§a digital para atrair mais clientes locaisz'Implantar sistema de agendamento onlineu8   Estruturar campanhas de trÃ¡fego pago para escalar leads)ÚheadlineÚsubheadlineÚsobreÚservicosÚpor_que_escolherÚdepoimentosÚcta_principalÚcta_secundarioÚcor_primariaÚcor_secundariaÚanalise_oportunidadesr  )rE   rk   rW   s      r   r0  r0  ¯  sÅ   € Ø�9‰9�]Ó#ÒJ u§y¡y°Ó'8ÒJ¸N€DØ
�)‰)�KÓ
 Ò
1 M€Cà�fØ(¨¨¨T°%·)±)¸HÀbÓ2IÐ1JÐKØ˜T˜FÐ"|Ð}à$Ð3VÑWØ"Ð1ZÑ[Ø#Ð2[Ñ\ð
ò

ð !Ð+MÐYZÑ[Ø#Ð._ÐklÑmð
ð )Ø(Ø!Ø#ò"
ñ/ð r   c                 óâ  — t         st        | «      S 	 ddlm}  |t         ¬«      }d}| j	                  d«      rdj                  d„ | d   dd	 D «       «      }d
}d| j	                  d«      xs | j	                  d«      › d| j	                  d«      › d| j	                  d«      › d| j	                  d«      › d| j	                  d«      › d| j	                  d«      › d| j	                  d«      › ddj                  | j	                  d«      xs g «      dd › d|xs d› d | j	                  d!«      xs d› d"| j	                  d#«      xs d› d$�}|j                  j                  j                  d%d&|d'œd(|d'œgd)d*d+id,¬-«      }|j                  d   j                  j                  j                  «       }t        j                  |«      S # t        $ r#}t!        d.|› �«       t        | «      cY d}~S d}~ww xY w)/z4Gera copy com persona Jonathan usando OpenAI GPT-4o.r   r	  r'   r    rÛ   r  c              3   ór   K  — | ]/  }d |j                  dd«      › d|j                  dd«      dd › �–— Œ1 y­wr  r  r  s     r   rP   z._gerar_copy_jonathan_openai.<locals>.<genexpr>Ý  r  r  NrÞ   uj  VocÃª Ã© Jonathan, copywriter sÃªnior especialista em marketing digital para pequenos negÃ³cios brasileiros.
VocÃª escreve copy persuasiva, humana, especÃ­fica para o segmento â€” nunca genÃ©rica ou robÃ³tica.
VocÃª usa gatilhos emocionais, linguagem prÃ³xima, e adapta o tom ao tipo de negÃ³cio.
VocÃª devolve APENAS JSON vÃ¡lido, sem markdown, sem texto extra.õV   Gere copy persuasiva para uma landing page de demonstraÃ§Ã£o deste negÃ³cio:

- Nome: rß   rk   r  rm   r  rG   r  rà   r  rl   r  rÙ   r  râ   r  r  rã   r  r  r  r  rñ   r  rò   u   

Devolva EXATAMENTE este JSON (sem texto fora, sem markdown):
{
  "headline": "chamada principal impactante, atÃ© 12 palavras",
  "subheadline": "subheadline com promessa/benefÃ­cio, atÃ© 25 palavras",
  "sobre": "parÃ¡grafo de 2-3 linhas apresentando o negÃ³cio, tom acolhedor e profissional",
  "servicos": [
    {"titulo": "ServiÃ§o 1", "descricao": "descriÃ§Ã£o curta"},
    {"titulo": "ServiÃ§o 2", "descricao": "descriÃ§Ã£o curta"},
    {"titulo": "ServiÃ§o 3", "descricao": "descriÃ§Ã£o curta"}
  ],
  "por_que_escolher": [
    "Motivo 1 em uma linha",
    "Motivo 2 em uma linha",
    "Motivo 3 em uma linha",
    "Motivo 4 em uma linha"
  ],
  "depoimentos": [
    {"nome": "Nome plausÃ­vel brasileiro", "texto": "depoimento verossÃ­mil baseado nas avaliaÃ§Ãµes reais", "rating": 5},
    {"nome": "Outro nome", "texto": "outro depoimento", "rating": 5}
  ],
  "cta_principal": "texto do botÃ£o principal (2-4 palavras)",
  "cta_secundario": "texto do botÃ£o secundÃ¡rio",
  "cor_primaria": "hex adequado ao segmento (ex: clÃ­nica estÃ©tica tons rosÃ©/nude/dourado; restaurante tons quentes; academia tons vibrantes)",
  "cor_secundaria": "hex secundÃ¡rio complementar",
  "analise_oportunidades": [
    "Oportunidade 1 identificada olhando o negÃ³cio",
    "Oportunidade 2",
    "Oportunidade 3"
  ]
}
r   r!  r"  r$  r%  r&  r'  r(  r)  z.[analisador] erro Jonathan (openai fallback): r/  )	rE   r
  r8  r9  Úsystem_promptÚuser_promptr;  rB   rC   s	            r   Ú_gerar_copy_jonathan_openairX  Ò  s  € åÜ˜eÓ$Ð$ðO%Ý!Ù¤Ô/ˆàˆØ�9‰9�YÔØŸ9™9ñ %à˜yÑ)¨"¨1Ð-ô%ó ˆLðPð 	ð	à	�‰�=Ó	!Ò	6 U§Y¡Y¨vÓ%6Ð7ð 8Ø�9‰9�XÓÐ
ð  Ø�i‰i˜Ó$Ð%ð &Ø�i‰i˜
Ó#Ð$ð %Ø�Y‰Y�zÓ"Ð#ð $Ø—)‘)˜HÓ%Ð& b¨¯©°?Ó)CÐ(Dð EØ�j‰j˜Ÿ™ :Ó.Ò4°"Ó5°d°sÐ;Ð<ð =ð Ò%Ð%Ð &ð 'àŸ™ =Ó1Ò7°RÐ8¸¸E¿I¹IÐFVÓ<WÒ<]Ð[]Ð;^ð  _ð-ˆð\ �{‰{×&Ñ&×-Ñ-Øà!¨mÑ<Ø¨KÑ8ðð Ø# ]Ð3Øð .ó 	
ˆð —,‘,˜q‘/×)Ñ)×1Ñ1×7Ñ7Ó9ˆÜ�z‰z˜'Ó"Ð"øÜò %ÜÐ>¸q¸cÐBÔCÜ˜eÓ$Õ$ûð%ús   “F.G Ç	G.ÇG)Ç#G.Ç)G.c                 ó@  — t        «       }|st        | «      S 	 d}| j                  d«      rdj                  d„ | d   dd D «       «      }d}d| j                  d	«      xs | j                  d
«      › d| j                  d«      › d| j                  d«      › d| j                  d«      › d| j                  d«      › d| j                  d«      › d| j                  d«      › ddj                  | j                  d«      xs g «      dd › d|xs d› d| j                  d«      xs d› d| j                  d «      xs d› d!�}|j                  j                  d"d#|d$|d%œg¬&«      }d}|j                  D ]  }t        |d'«      sŒ||j                  z  }Œ  |j                  «       }|j                  d(«      r.t        j                  d)d|«      }t        j                  d*d|«      }t        j                  |«      S # t        $ r#}t!        d+|› �«       t#        | «      cY d}~S d}~ww xY w),u§   Gera copy persuasiva via persona do Jonathan (Anthropic Haiku).
    Se nÃ£o houver chave Anthropic, usa OpenAI com a mesma persona.
    Fallback final: _copy_fallback.r    rÛ   r  c              3   ór   K  — | ]/  }d |j                  dd«      › d|j                  dd«      dd › �–— Œ1 y­wr  r  r  s     r   rP   z&gerar_copy_jonathan.<locals>.<genexpr>6  r  r  NrÞ   u  VocÃª Ã© Jonathan, copywriter sÃªnior especialista em marketing digital para pequenos negÃ³cios brasileiros.
VocÃª escreve copy persuasiva, humana e que converte â€” nunca genÃ©rica ou robÃ³tica.
VocÃª devolve APENAS JSON vÃ¡lido, sem markdown, sem texto extra.rU  rß   rk   r  rm   r  rG   r  rà   r  rl   r  rÙ   r  râ   r  r  rã   r  r  r  r  rñ   r  rò   uÞ  

Devolva EXATAMENTE este JSON (sem texto fora, sem markdown, sem cerca de cÃ³digo):
{
  "headline": "chamada principal impactante, atÃ© 12 palavras",
  "subheadline": "subheadline com promessa/benefÃ­cio, atÃ© 25 palavras",
  "sobre": "parÃ¡grafo de 2-3 linhas apresentando o negÃ³cio, tom acolhedor e profissional",
  "servicos": [
    {"titulo": "ServiÃ§o 1", "descricao": "descriÃ§Ã£o curta"},
    {"titulo": "ServiÃ§o 2", "descricao": "descriÃ§Ã£o curta"},
    {"titulo": "ServiÃ§o 3", "descricao": "descriÃ§Ã£o curta"}
  ],
  "por_que_escolher": [
    "Motivo 1 em uma linha",
    "Motivo 2 em uma linha",
    "Motivo 3 em uma linha",
    "Motivo 4 em uma linha"
  ],
  "depoimentos": [
    {"nome": "Nome plausÃ­vel brasileiro", "texto": "depoimento verossÃ­mil baseado nas avaliaÃ§Ãµes reais", "rating": 5},
    {"nome": "Outro nome", "texto": "outro depoimento", "rating": 5}
  ],
  "cta_principal": "texto do botÃ£o principal (2-4 palavras)",
  "cta_secundario": "texto do botÃ£o secundÃ¡rio",
  "cor_primaria": "hex adequado ao segmento, ex #2E7D32",
  "cor_secundaria": "hex secundÃ¡rio complementar",
  "analise_oportunidades": [
    "Oportunidade 1 identificada olhando o negÃ³cio",
    "Oportunidade 2",
    "Oportunidade 3"
  ]
}
zclaude-haiku-4-5-20251001éÐ  r$  r"  ©r*  r.  r!  r+  r“   ú```z^```(?:json)?\s*ú\s*```$z([analisador] erro Jonathan (anthropic): )r.   rX  rR   rT   r+  r4  rB   Úhasattrr“   r   r   rŸ   r    r¿   r7  r@   rA   r0  )	rE   r8  r9  rV  rW  r;  ÚrawÚblockrC   s	            r   Úgerar_copy_jonathanrb  *  sN  € ô #Ó$€FÙÜ*¨5Ó1Ð1ðU%àˆØ�9‰9�YÔØŸ9™9ñ %à˜yÑ)¨"¨1Ð-ô%ó ˆLðPð 	ð	à	�‰�=Ó	!Ò	6 U§Y¡Y¨vÓ%6Ð7ð 8Ø�9‰9�XÓÐ
ð  Ø�i‰i˜Ó$Ð%ð &Ø�i‰i˜
Ó#Ð$ð %Ø�Y‰Y�zÓ"Ð#ð $Ø—)‘)˜HÓ%Ð& b¨¯©°?Ó)CÐ(Dð EØ�j‰j˜Ÿ™ :Ó.Ò4°"Ó5°d°sÐ;Ð<ð =ð Ò%Ð%Ð &ð 'àŸ™ =Ó1Ò7°RÐ8¸¸E¿I¹IÐFVÓ<WÒ<]Ð[]Ð;^ð  _ð-ˆð^ �‰×%Ñ%Ø-ØØ Ø%°+Ñ>Ð?ð	 &ó 
ˆð ˆØ—\‘\ò 	"ˆEÜ�u˜fÕ%Ø�u—z‘zÑ!‘ð	"ð �i‰i‹kˆð �>‰>˜%Ô Ü—&‘&Ð,¨b°#Ó6ˆCÜ—&‘&˜ R¨Ó-ˆCä�z‰z˜#‹ÐøÜò %ÜÐ8¸¸Ð<Ô=Ü˜eÓ$Õ$ûð%ús%   ™E"G1 Å<A4G1 Ç1	HÇ:HÈHÈHÚcopyÚimagensÚsegmentoc                 ó„  — t         st        | ||«      S 	 ddlm}  |t         ¬«      }|j	                  d«      xs |j	                  d«      xs d}|j	                  d«      xs d}|j	                  d	«      xs d}|j	                  d
«      xs d}	|j	                  d«      xs |j	                  d«      xs d}
|j	                  d«      xs d}|j	                  d«      xs d}|j	                  d«      xs g }t        j                  dd|
xs d«      }|r|j                  d«      sd|z   }d}|dk(  r-t        t        d¬«      }t        t        «      }d|› d|› �}d}d}n.t        t        d¬«      }t        t        d¬«      }d|› d|› �}d}d}dj                  g d ‘|› ‘d!‘|› ‘d"‘|› ‘d#‘|	› ‘d$‘|
› ‘d%‘|› ‘d&‘|› ‘d'‘d(j                  |«      d)d* › ‘d+‘t        j                  | d,d-¬.«      › ‘d/‘t        j                  |«      › ‘d0‘|› ‘d1‘|› ‘d2‘|› ‘d3‘|› ‘d4‘|› ‘d5‘«      }|j                   j"                  j%                  d6d7|d8œd9|d8œgd:d;¬<«      }|j&                  d   j(                  j*                  j-                  «       }|j                  d=«      r.t        j                  d>d|«      }t        j                  d?d|«      }d@|j/                  «       vs dA|j/                  «       vst1        |«      dBk  rt3        dC«       t        | ||«      S |S # t4        $ r%}t3        dD|› �«       t        | ||«      cY d)}~S d)}~ww xY w)EzBGera HTML com persona Leo usando OpenAI GPT-4o + skills injetadas.r   r	  r'   rß   rk   õ   NegÃ³ciorm   r    rG   rà   rl   Úlead_telefonerÙ   õ   â€”râ   rã   ú\DÚ55u‰  VocÃª Ã© Leo, desenvolvedor-designer sÃªnior especialista em landing pages de alta conversÃ£o para negÃ³cios brasileiros.
VocÃª gera HTML completo, auto-contido, com CSS interno (sem link pra CSS externo exceto Google Fonts).
O HTML deve ser profissional, visualmente impressionante, mobile-first, com favicon SVG inline.
ReferÃªncias de imagens SEMPRE como "imgs/NOME_ARQUIVO" (caminho relativo, nunca absoluto).
VocÃª NUNCA usa gradiente roxo/azul genÃ©rico, NUNCA usa grid idÃªntico de cards com Ã­cone+tÃ­tulo+texto, NUNCA usa glassmorphism decorativo.
VocÃª devolve APENAS o HTML completo, sem explicaÃ§Ãµes, sem markdown, sem cerca de cÃ³digo.r2   é¸  ©r9   uL   SKILL DE DESIGN (landing-funil editorial - use como referÃªncia principal):
zI

BASE CSS DO DESIGN SYSTEM (incorpore inline ou use as classes/tokens):
zEestilo editorial premium (bege + coral + navy) da skill landing-funilu@   hero VSL-style, sobre, oferta/serviÃ§os, prova social, CTA finalr[  z.DIRETRIZES DE DESIGN (frontend-design skill):
ú*

DIRETRIZES UI/UX (ui-ux-pro-max skill):
u;   design distintivo e memorÃ¡vel, especÃ­fico para o segmentouB   hero, sobre, serviÃ§os, por que escolher, depoimentos, contato/CTAui   Crie uma landing page HTML COMPLETA e AUTO-CONTIDA para o seguinte negÃ³cio:

DADOS DO NEGÃ“CIO:
- Nome: r  r  r  r  r  r  r  r  Nr  ú-

COPY GERADA (use exatamente estes textos):
Fé   ©Úensure_asciiÚindentõ<   

IMAGENS DISPONÃ�VEIS (use como src relativo "imgs/NOME"):
z

uÉ   

REQUISITOS OBRIGATÃ“RIOS:
1. HTML completo (DOCTYPE, head, body), auto-contido, com CSS interno em <style>
2. Design ÃšNICO e DISTINTIVO para ESTE negÃ³cio especÃ­fico â€” nÃ£o template genÃ©rico
3. z*
4. Paleta de cores ADEQUADA ao segmento "u÷  ":
   - ClÃ­nica estÃ©tica/beleza: tons rosÃ©, nude, dourado (nunca verde clÃ­nico genÃ©rico)
   - Restaurante/gastronomia: tons quentes, terrosos, apetitosos
   - Academia/fitness: tons vibrantes, energia
   - EscritÃ³rio/advocacia: tons sÃ³brios, navy, dourado, marrom
   - Escolha a paleta certa, NÃƒO use "#2E7D32" verde genÃ©rico como padrÃ£o
5. Google Fonts via <link rel="preconnect"> e <link href="https://fonts.googleapis.com/..."> no <head>
   (fonte escolhida por vocÃª combinando com o segmento â€” NUNCA Arial ou Roboto genÃ©rico)
6. Favicon SVG inline no <head>
7. Mobile-first e totalmente responsivo
8. Imagens referenciadas como "imgs/foto_1.jpg" (caminho RELATIVO, nunca absoluto, nunca URL)
9. WhatsApp link com nÃºmero real: https://wa.me/u   
10. SeÃ§Ãµes: u¹   
11. Sem gradiente roxo/azul genÃ©rico. Sem grid idÃªntico de cards. Sem glassmorphism decorativo.

Devolva APENAS o HTML completo. Sem explicaÃ§Ã£o, sem markdown, sem cerca de cÃ³digo.r   r!  r"  r$  gš™™™™™é?i   )r*  r+  r,  r.  r]  ú^```(?:html)?\s*r^  ú<htmlú</html>éè  uU   [analisador] Leo (openai) retornou HTML invÃ¡lido/curto, fallback pro gerador antigo.z)[analisador] erro Leo (openai fallback): )r   Úgerar_html_siter1  r
  rR   rŸ   r    r   rD   ÚSKILL_LANDING_FUNILÚSKILL_LANDING_FUNIL_BASE_CSSÚSKILL_FRONTEND_DESIGNÚSKILL_UI_UX_PRO_MAXrT   r¿   Údumpsr2  r3  r4  r5  r6  rB   r   rS   ÚlenrA   r@   )rc  rE   rd  re  r
  r8  rk   rm   rG   rà   rl   rÙ   râ   rã   Útelefone_numerosrV  Úconteudo_landing_funilÚconteudo_base_cssÚskills_blocoÚestilo_hintÚsecoesÚconteudo_frontendÚconteudo_uiuxrW  r;  r`  rC   s                              r   Ú_gerar_html_leo_openairˆ  ‹  ss  € åÜ˜t U¨GÓ4Ð4ðq5Ý!Ù¤Ô/ˆà�y‰y˜Ó'ÒJ¨5¯9©9°VÓ+<ÒJÀ
ˆØ—‘˜8Ó$Ò*¨ˆØ—I‘I˜kÓ*Ò0¨bˆ	Ø—9‘9˜ZÓ(Ò.¨BˆØ—9‘9˜ZÓ(ÒL¨E¯I©I°oÓ,FÒLÈ"ˆØ—‘˜8Ó$Ò-¨ˆØŸ	™	 /Ó2Ò7°aˆØ—9‘9˜ZÓ(Ò.¨BˆäŸ6™6 %¨¨Xª^¸Ó<ÐÙÐ$4×$?Ñ$?ÀÔ$EØ#Ð&6Ñ6Ððkð 	ð �yÒ Ü%0Ô1DÈDÔ%QÐ"Ü +Ô,HÓ IÐð ØÐ ð ð Ð ð	ˆLð
 bˆKØW‰Fä +Ô,AÈÔ NÐÜ'Ô(;À4ÔHˆMð ØÐ ð ð €ð	ˆLð
 XˆKØYˆF÷&Yó &Yð 	ð &Yð 
ˆð&Yðð&Yð ˆ(ð	&Yðð	&Yð
 ˆ[ð&Yð
ð&Yð ˆZð&Yðð&Yð ˆJð&Yðð&Yð �ð&Yð ð&Yð *˜?ð&Yð+ð&Yð �j‰j˜Ó" 4 CÐ(Ð)ð&Yð*ð&Yô ‡�ˆD˜u¨QÔ/Ð 0ð&Yð1ð&Yô ‡�ˆGÓÐ ð&Yðð&Yð" €ð#&Yð"ð#&Yð, €=ð-&Yð,*ð-&Yð. +4¨ð/&Yð.52ð/&YðD 3CÐ1CðE&YðDDðE&YðF ˆhðG&YðFVôG&YˆðP �{‰{×&Ñ&×-Ñ-Øà!¨mÑ<Ø¨KÑ8ðð Øð .ó 
ˆð �l‰l˜1‰o×%Ñ%×-Ñ-×3Ñ3Ó5ˆð �>‰>˜%Ô Ü—&‘&Ð,¨b°#Ó6ˆCÜ—&‘&˜ R¨Ó-ˆCð ˜#Ÿ)™)›+Ñ%¨¸#¿)¹)»+Ñ)EÌÈSËÐTXÊÜÐiÔjÜ" 4¨°Ó8Ð8àˆ
øÜò 5ÜÐ9¸!¸Ð=Ô>Ü˜t U¨GÓ4Õ4ûð5ús$   •K9L ÌL Ì	L?ÌL:Ì4L?Ì:L?c                 óž  — t        «       }|st        | |||«      S 	 |j                  d«      xs |j                  d«      xs d}|j                  d«      xs d}|j                  d«      xs d}|j                  d«      xs d}|j                  d«      xs |j                  d	«      xs d}	|j                  d
«      xs d}
|j                  d«      xs d}|j                  d«      xs g }t        j                  dd|	xs d«      }|r|j                  d«      sd|z   }d}|dk(  r†t        t        d¬«      }t        t        «      }d|› d|› d|› d|› d|	› d|
› d|› ddj                  |«      dd › d t        j                  | d!d"¬#«      › d$t        j                  |«      › d%|› d&|› d'|› d(�}n‡t        t        d)¬«      }t        t        d)¬«      }d*|› d|› d|› d|› d|	› d|
› d|› ddj                  |«      dd › d t        j                  | d!d"¬#«      › d$t        j                  |«      › d+|› d,|› d-|› d.�}|j                  j                  d/d0|d1|d2œg¬3«      }d}|j                   D ]  }t#        |d4«      sŒ||j$                  z  }Œ  |j'                  «       }|j                  d5«      r.t        j                  d6d|«      }t        j                  d7d|«      }d8|j)                  «       vs d9|j)                  «       vst+        |«      d:k  rt-        d;«       t/        | ||«      S |S # t0        $ r%}t-        d<|› �«       t/        | ||«      cY d}~S d}~ww xY w)=u«   Gera HTML completo via persona do Leo (Anthropic Sonnet).
    Se nÃ£o houver chave Anthropic, usa OpenAI com a mesma persona + skills.
    Fallback final: gerar_html_site.rß   rk   rg  rm   r    rG   rà   rl   rh  rÙ   ri  râ   r   rã   rj  rk  uô  VocÃª Ã© Leo, desenvolvedor-designer sÃªnior especialista em landing pages e sites de alta conversÃ£o para pequenos negÃ³cios brasileiros.
VocÃª gera HTML completo, auto-contido, com CSS inline (sem dependÃªncias externas), altamente otimizado visualmente.
O HTML deve ser profissional, belo, mobile-first, com favicon SVG inline e referÃªncias de imagens sempre como "imgs/NOME_ARQUIVO" (caminho relativo).
VocÃª devolve APENAS o HTML completo, sem explicaÃ§Ãµes, sem markdown, sem cerca de cÃ³digo.r2   i   rm  ux   Crie uma landing page HTML COMPLETA no estilo editorial premium (bege + coral + navy) para:

DADOS DO NEGÃ“CIO:
- Nome: r  r  r  r  r  r  r  r  Nr  ro  Frp  rq  rt  z-

SKILL DE DESIGN (landing-funil editorial):
zB

BASE CSS DO DESIGN SYSTEM (incorpore inline ou use as classes):
zò

REQUISITOS:
1. HTML completo, auto-contido, CSS inline
2. Estilo editorial bege/coral/navy conforme a skill landing-funil
3. Favicon SVG inline
4. Mobile-first
5. Imagens em "imgs/foto_1.jpg" (caminho relativo)
6. Link WhatsApp real: wa.me/uO   
7. SeÃ§Ãµes: hero VSL-style, sobre, oferta/serviÃ§os, prova social, CTA final
rl  uo   Crie uma landing page HTML COMPLETA e AUTO-CONTIDA para o seguinte negÃ³cio local:

DADOS DO NEGÃ“CIO:
- Nome: z0

DIRETRIZES DE DESIGN (frontend-design skill):
rn  u/  

REQUISITOS OBRIGATÃ“RIOS:
1. HTML completo com DOCTYPE, head, body
2. Todo CSS inline (sem link para CSS externo)
3. Favicon SVG inline no head
4. Mobile-first e responsivo
5. Imagens referenciadas como "imgs/foto_1.jpg" (caminho relativo, nunca absoluto)
6. Link do WhatsApp com telefone real (wa.me/u
  )
7. Design DISTINTIVO e MEMORÃ�VEL â€” nÃ£o genÃ©rico
8. SeÃ§Ãµes: hero, sobre, serviÃ§os, por que escolher, depoimentos, contato/CTA
9. Sem dependÃªncias externas (sem Google Fonts via @import que precise de internet â€” use fontes do sistema ou font-face inline)
zclaude-sonnet-4-6i@  r$  r"  r\  r“   r]  ru  r^  rv  rw  rx  uX   [analisador] Leo (anthropic) retornou HTML invÃ¡lido/curto, fallback pro gerador antigo.z#[analisador] erro Leo (anthropic): )r.   rˆ  rR   rŸ   r    r   rD   rz  r{  rT   r¿   r~  r|  r}  r+  r4  rB   r_  r“   r   rS   r  rA   ry  r@   )rc  rE   rd  re  r8  rk   rm   rG   rà   rl   rÙ   râ   rã   r€  rV  r�  r‚  rW  Úconteudo_frontend_designr‡  r;  r`  ra  rC   s                           r   Úgerar_html_leor‹    sö  € ô #Ó$€FÙÜ% d¨E°7¸HÓEÐEð~5à�y‰y˜Ó'ÒJ¨5¯9©9°VÓ+<ÒJÀ
ˆØ—‘˜8Ó$Ò*¨ˆØ—I‘I˜kÓ*Ò0¨bˆ	Ø—9‘9˜ZÓ(Ò.¨BˆØ—9‘9˜ZÓ(ÒL¨E¯I©I°oÓ,FÒLÈ"ˆØ—‘˜8Ó$Ò-¨ˆØŸ	™	 /Ó2Ò7°aˆØ—9‘9˜ZÓ(Ò.¨BˆäŸ6™6 %¨¨Xª^¸Ó<ÐÙÐ$4×$?Ñ$?ÀÔ$EØ#Ð&6Ñ6Ððkð 	ð �yÒ Ü%0Ô1DÈDÔ%QÐ"Ü +Ô,HÓ IÐð	ð 
ˆð Øˆ(ð Øˆ[ð ØˆZð ØˆJð Ø�˜˜M˜?ð +Ø�j‰j˜Ó" 4 CÐ(Ð)ð *ô ‡�ˆD˜u¨QÔ/Ð 0ð 1ô ‡�ˆGÓÐ ð ð Ð ð ð Ð ð ð /Ð/ð 0ð;‰KôB (3Ô3HÐPTÔ'UÐ$Ü'Ô(;À4ÔHˆMð	ð 
ˆð Øˆ(ð Øˆ[ð ØˆZð ØˆJð Ø�˜˜M˜?ð +Ø�j‰j˜Ó" 4 CÐ(Ð)ð *ô ‡�ˆD˜u¨QÔ/Ð 0ð 1ô ‡�ˆGÓÐ ð ð Ð ð ð €ð .ð /?Ð-?ð @ð;!ˆKðF �‰×%Ñ%Ø%ØØ Ø%°+Ñ>Ð?ð	 &ó 
ˆð ˆØ—\‘\ò 	"ˆEÜ�u˜fÕ%Ø�u—z‘zÑ!‘ð	"ð �i‰i‹kˆð �>‰>˜%Ô Ü—&‘&Ð,¨b°#Ó6ˆCÜ—&‘&˜ R¨Ó-ˆCð ˜#Ÿ)™)›+Ñ%¨¸#¿)¹)»+Ñ)EÌÈSËÐTXÊÜÐlÔmÜ" 4¨°Ó8Ð8àˆ
øÜò 5ÜÐ3°A°3Ð7Ô8Ü˜t U¨GÓ4Õ4ûð5ús+   œIL É2B)L ÌL Ì	MÌ'MÍMÍMÚdados_placerG   Údest_dirc                 ó¼  — |j                  dd¬«       g }t        | j                  d«      xs g dd «      D ]9  \  }}|d|dz   › d�z  }t        ||«      sŒ|j	                  |j
                  «       Œ; dt        |«      z
  }|d	kD  rÇt        |xs d
«      }t        |«      D ]ª  }|d|dz   › d�z  }	 d|› dt        t        j                  «       «      |z   › �}	t        j                  |	dd¬«      }
|
j                  dk(  rNt        |
j                  «      dkD  r6|j                  |
j                  «       |j	                  |j
                  «       Œ¬ |S # t        $ r Y Œºw xY w)uC   Baixa atÃ© 3 imagens. Retorna lista de nomes de arquivo (relativo).T©Úparentsr   rå   Né   Úfoto_r   z.jpgr   ÚbusinessÚ	unsplash_z&https://source.unsplash.com/1200x800/?z&sig=r¹   rË   rÍ   iˆ  )ÚmkdirÚ	enumeraterR   rÑ   ÚappendrÔ   r  r   r¥   ÚintÚtimer¾   rÎ   rB   rÏ   r@   )rŒ  rG   r�  ÚimgsÚiÚrefrÇ   ÚfaltamÚqueryrÐ   r‘   s              r   Úbaixar_imagensrŸ  �  sZ  € à‡N�N˜4¨$€NÔ/Ø€Dô ˜[Ÿ_™_¨\Ó:Ò@¸bÀ"À1ÐEÓFò #‰ˆˆ3Ø˜E ! A¡#  dÐ+Ñ+ˆÜ! # tÕ,Ø�K‰K˜Ÿ	™	Õ"ð#ð ”�T“‰]€FØ�‚zÜ˜9Ò2¨
Ó3ˆÜ�v“ò 		ˆAØ 	¨!¨A©#¨¨dÐ3Ñ3ˆDðØ>¸u¸gÀUÌ3ÌtÏyÉyË{ÓK[Ð\]ÑK]ÐJ^Ð_�Ü—L‘L ¨bÀ$ÔG�Ø—=‘= CÒ'¬C°·	±	«N¸TÒ,AØ×$Ñ$ Q§Y¡YÔ/Ø—K‘K §	¡	Ô*øð		ð €Køô ò Ùðús   Â0BEÅ	EÅEc                 óÚ  — | j                  d«      xs d}| j                  d«      xs d}|j                  d«      xs |j                  d«      xs d}|j                  d«      xs d	}|j                  d
«      xs |j                  d«      xs d	}|j                  d«      xs g }|r|d   nd	}	t        |«      dkD  r|d   n|	}
t        |«      dkD  r|d   n|	}d	j                  d„ | j                  d«      xs g dd D «       «      }d	j                  d„ | j                  d«      xs g D «       «      }d	j                  d„ | j                  d«      xs g D «       «      }d	j                  d„ |D «       «      }t        j                  dd	|xs d	«      }|r|j                  d«      sd|z   }|rd|› �nd}d	j                  g d‘|› ‘d‘|j                  dd	«      › ‘d ‘|› ‘d!‘|dd j                  «       › ‘d"‘|› ‘d#‘|› ‘d$‘|› ‘d%‘|› ‘d&‘|› ‘d'‘|› ‘d(‘|› ‘d)‘|	› ‘d*‘|› ‘d+‘|› ‘d,‘|› ‘d-‘|› ‘d.‘|› ‘d/‘|› ‘d0‘|› ‘d1‘|› ‘d(‘|› ‘d2‘|› ‘d3‘|› ‘d4‘|› ‘d5‘| j                  d6d7«      › ‘d8‘| j                  d9|«      › ‘d:‘| j                  d;d	«      › ‘d<‘|› ‘d5‘| j                  d6d7«      › ‘d=‘| j                  d>d?«      › ‘d@‘|
› ‘dA‘|› ‘dB‘| j                  dCd	«      › ‘dD‘|› ‘dE‘| j                  d6d7«      › ‘dF‘|› ‘dG‘|› ‘dH‘|› ‘dI‘|xs dJ› ‘dK‘|xs dJ› ‘dL‘|xs dM› ‘dN‘|› ‘d5‘| j                  d6dO«      › ‘dP‘t        j                  «       j                  › ‘dQ‘|› ‘dR‘«      S )Sz Gera HTML completo do site demo.rP  rF  rQ  rG  rß   rk   rg  rà   r    rl   rh  rã   r   r   rp  c              3   ón   K  — | ]-  }d |j                  dd«      › d|j                  dd«      › d�–— Œ/ y­w)z-<div class="servico-card">
              <h3>r@  r    z</h3>
              <p>rA  ú</p>
            </div>Nr  )rM   r®   s     r   rP   z"gerar_html_site.<locals>.<genexpr>º  sK   è ø€ ò ð
 ð	Ø—5‘5˜ "Ó%Ð&ð 'Ø—%‘%˜ BÓ'Ð(ð )ô	ñùs   ‚35rK  Nr‘  c              3   ó(   K  — | ]
  }d |› d�–— Œ y­w©z<li>z</li>NrL   )rM   rü   s     r   rP   z"gerar_html_site.<locals>.<genexpr>Á  s   è ø€ ò Øˆ$ˆqˆc�Œñùó   ‚rL  c           
   3   ó¬   K  — | ]L  }d dt        |j                  dd«      «      z  › d|j                  dd«      › d|j                  dd«      › d	�–— ŒN y
­w)z8<div class="dep-card">
              <div class="stars">õ   â˜…rÙ   rÞ   z</div>
              <p>"rC  r    u.   "</p>
              <div class="dep-nome">â€” rk   z</div>
            </div>N)r˜  rR   )rM   Úds     r   rP   z"gerar_html_site.<locals>.<genexpr>Ä  sl   è ø€ ò ð ð"Ø"'¬#¨a¯e©e°H¸aÓ.@Ó*AÑ"AÐ!Bð CØ—5‘5˜ Ó$Ð%ð &)Ø)*¯©¨v°bÓ)9Ð(:ð ;ô	ñùs   ‚AArM  c              3   ó(   K  — | ]
  }d |› d�–— Œ y­wr¤  rL   )rM   Úhs     r   rP   z"gerar_html_site.<locals>.<genexpr>Ì  s   è ø€ Ò>°˜d 1 # UœOÑ>ùr¥  rj  rk  zhttps://wa.me/r	   z“<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>u    â€” rm   z°</title>
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><circle cx='50' cy='50' r='50' fill='z\'/><text x='50' y='68' font-size='60' text-anchor='middle' fill='white' font-family='Arial'>a$  </text></svg>" />
<style>
  * { margin: 0; padding: 0; box-sizing: border-box; }
  body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; color: #1a1a1a; line-height: 1.6; }
  .container { max-width: 1140px; margin: 0 auto; padding: 0 20px; }
  header { background: white; padding: 16px 0; position: sticky; top: 0; z-index: 10; box-shadow: 0 2px 12px rgba(0,0,0,0.05); }
  header .container { display: flex; align-items: center; justify-content: space-between; }
  .logo { font-weight: 800; font-size: 22px; color: zD; }
  .btn { display: inline-block; padding: 12px 28px; background: z£; color: white; text-decoration: none; border-radius: 8px; font-weight: 600; transition: transform 0.2s; }
  .btn:hover { transform: translateY(-2px); background: z5; }
  .btn-outline { background: transparent; color: z; border: 2px solid z2; }
  .hero { background: linear-gradient(135deg, r~   z�); color: white; padding: 80px 0; position: relative; overflow: hidden; }
  .hero::before { content: ""; position: absolute; inset: 0; background: url('imgs/aÀ  ') center/cover; opacity: 0.25; }
  .hero .container { position: relative; z-index: 1; text-align: center; }
  .hero h1 { font-size: clamp(32px, 5vw, 56px); font-weight: 800; margin-bottom: 20px; line-height: 1.1; }
  .hero p { font-size: clamp(18px, 2vw, 22px); opacity: 0.95; max-width: 720px; margin: 0 auto 32px; }
  .hero-cta { display: flex; gap: 16px; justify-content: center; flex-wrap: wrap; }
  .hero-cta .btn { background: white; color: zô; }
  .hero-cta .btn.btn-outline { background: transparent; color: white; border-color: white; }
  section { padding: 80px 0; }
  section h2 { font-size: clamp(28px, 4vw, 40px); font-weight: 800; margin-bottom: 16px; text-align: center; color: a|  ; }
  section .lead { font-size: 18px; color: #555; text-align: center; max-width: 720px; margin: 0 auto 48px; }
  .sobre-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; align-items: center; }
  .sobre-img { border-radius: 16px; overflow: hidden; box-shadow: 0 12px 40px rgba(0,0,0,0.15); }
  .sobre-img img { width: 100%; height: 420px; object-fit: cover; display: block; }
  .servicos-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 28px; }
  .servico-card { background: white; padding: 32px; border-radius: 16px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); border-top: 4px solid zs; transition: transform 0.2s; }
  .servico-card:hover { transform: translateY(-6px); }
  .servico-card h3 { color: an  ; font-size: 22px; margin-bottom: 12px; }
  .servico-card p { color: #555; }
  .porque { background: #f8f9fa; }
  .porque ul { list-style: none; display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; max-width: 900px; margin: 0 auto; }
  .porque li { background: white; padding: 20px 24px; border-radius: 12px; border-left: 4px solid uQ   ; font-weight: 500; color: #333; }
  .porque li::before { content: "âœ“"; color: aà  ; font-weight: 800; margin-right: 12px; font-size: 18px; }
  .depoimentos-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 28px; }
  .dep-card { background: white; padding: 32px; border-radius: 16px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); }
  .dep-card .stars { color: #FFA000; font-size: 20px; margin-bottom: 12px; }
  .dep-card p { font-style: italic; color: #444; margin-bottom: 16px; }
  .dep-card .dep-nome { font-weight: 700; color: z5; }
  .contato { background: linear-gradient(135deg, a�  ); color: white; }
  .contato h2 { color: white; }
  .contato .lead { color: rgba(255,255,255,0.9); }
  .info-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 32px; max-width: 900px; margin: 0 auto 40px; }
  .info-box { background: rgba(255,255,255,0.1); padding: 24px; border-radius: 12px; backdrop-filter: blur(10px); }
  .info-box h4 { margin-bottom: 12px; font-size: 16px; opacity: 0.9; text-transform: uppercase; letter-spacing: 1px; }
  .info-box ul { list-style: none; }
  .info-box li { padding: 4px 0; font-size: 14px; }
  .contato-cta { text-align: center; }
  .contato-cta .btn { background: white; color: a˜  ; font-size: 18px; padding: 16px 40px; }
  footer { background: #1a1a1a; color: #aaa; padding: 32px 0; text-align: center; font-size: 14px; }
  @media (max-width: 768px) {
    .sobre-grid { grid-template-columns: 1fr; }
    .sobre-img img { height: 260px; }
    section { padding: 56px 0; }
    .hero { padding: 56px 0; }
  }
</style>
</head>
<body>

<header>
  <div class="container">
    <div class="logo">z</div>
    <a href="z" class="btn">rN  ÚAgendarzR</a>
  </div>
</header>

<section class="hero">
  <div class="container">
    <h1>rH  z</h1>
    <p>rI  z/</p>
    <div class="hero-cta">
      <a href="z6</a>
      <a href="#contato" class="btn btn-outline">rO  rE  z›</a>
    </div>
  </div>
</section>

<section>
  <div class="container">
    <div class="sobre-grid">
      <div class="sobre-img">
        <img src="imgs/z" alt="u�   " />
      </div>
      <div>
        <h2 style="text-align:left;">Sobre nÃ³s</h2>
        <p style="font-size:18px;color:#555;">rJ  z</p>
        <a href="z'" class="btn" style="margin-top:24px;">uê   </a>
      </div>
    </div>
  </div>
</section>

<section style="background:#f8f9fa;">
  <div class="container">
    <h2>Nossos serviÃ§os</h2>
    <p class="lead">O que oferecemos para vocÃª</p>
    <div class="servicos-grid">
      uµ   
    </div>
  </div>
</section>

<section class="porque">
  <div class="container">
    <h2>Por que nos escolher</h2>
    <p class="lead">RazÃµes que fazem a diferenÃ§a</p>
    <ul>zÖ</ul>
  </div>
</section>

<section>
  <div class="container">
    <h2>O que dizem nossos clientes</h2>
    <p class="lead">Depoimentos reais de quem confiou no nosso trabalho</p>
    <div class="depoimentos-grid">u  </div>
  </div>
</section>

<section class="contato" id="contato">
  <div class="container">
    <h2>Fale com a gente</h2>
    <p class="lead">Estamos prontos para atender vocÃª</p>
    <div class="info-grid">
      <div class="info-box">
        <h4>EndereÃ§o</h4>
        <p>ri  zT</p>
      </div>
      <div class="info-box">
        <h4>Telefone</h4>
        <p>uV   </p>
      </div>
      <div class="info-box">
        <h4>HorÃ¡rios</h4>
        <ul>õ   <li>â€”</li>zK</ul>
      </div>
    </div>
    <div class="contato-cta">
      <a href="rD  uR   </a>
    </div>
  </div>
</section>

<footer>
  <div class="container">
    <p>Â© rH   u®   . Todos os direitos reservados.</p>
    <p style="margin-top:8px;font-size:12px;opacity:0.6;">PÃ¡gina demonstrativa â€” Climb Digital</p>
  </div>
</footer>

</body>
</html>
)
rR   r  rT   rŸ   r    r   Úupperr   rp   Úyear)rc  rE   rd  Úcor1Úcor2rk   rà   rl   rã   Úimg_heroÚimg_2Úimg_3Úservicos_htmlÚmotivos_htmlÚdep_htmlÚhorarios_htmlÚwaÚwa_links                     r   ry  ry  ­  sn  € à�8‰8�NÓ#Ò0 y€DØ�8‰8Ð$Ó%Ò2¨€DØ�9‰9�]Ó#ÒF u§y¡y°Ó'8ÒF¸J€DØ�y‰y˜Ó$Ò*¨€HØ�y‰y˜Ó$ÒH¨¯	©	°/Ó(BÒHÀb€HØ�y‰y˜Ó$Ò*¨€Há$ˆw�qŠz¨"€HÜ˜g›,¨Ò*ˆG�AŠJ°€EÜ˜g›,¨Ò*ˆG�AŠJ°€Eà—G‘Gñ ð
 —(‘(˜:Ó&Ò,¨"¨b¨qÐ1ôó €Mð —7‘7ñ Ø"&§(¡(Ð+=Ó">Ò"DÀ"ôó €Lð �w‰wñ ð —(‘(˜=Ó)Ò/¨Rôó €Hð —G‘GÑ>°XÔ>Ó>€Mä	�‰��r˜8š> rÓ	*€BÙ	�"—-‘- Ô%Ø�B‰YˆÙ')�˜r˜dÑ#¨s€G÷^ó ^ð ð ^ð
 	€vð^ð
 ð^ð
 —9‘9˜X bÓ)Ð*ð^ð
+hð^ð imð  hnð^ð nJð^ð KOð  PRð  QRð  KS÷  KYñ  KYó  K[ð  J\ð^ð\6ð^ð 7;°Vð^ð<Bð^ð CGÀð^ðH:ð^ð ;?¸ð^ð@3ð^ð  48°&ð!^ð  9Mð!^ð  NRÈFð!^ð S0ð!^ð" 15¨vð#^ð" 68ð#^ð" 9=°vð#^ð">Uð#^ð$ V^ÐT^ð%^ð$_/ð%^ð. 04¨fð/^ð.5vð/^ð4 w{Ðu{ð5^ð4|Jð5^ð@ KOð  JPðA^ð@PðA^ðD #˜VðE^ðD$dðE^ðL eiÐciðM^ðLj0ðM^ðN 15¨vðO^ðN63ðO^ðX 48°&ðY^ðX93ðY^ðZ 48°&ð[^ðZ 9;ð[^ðZ <@¸&ð[^ðZ	A2ð[^ðl 37°ðm^ðl8ðm^ðH �fðI^ðHðI^ðJ ˆYðK^ðJ %ðK^ðJ &*§X¡X¨o¸yÓ%IÐ$JðK^ðJK	ðK^ðV 
�‰�*˜dÓ	#Ð$ðW^ðV%ðW^ðX 	�‰� Ó#Ð$ðY^ðX%ðY^ð\ ˆyð]^ð\ 'ð]^ð\ (,§x¡x°ÀÓ'KÐ&Lð]^ð\M2ð]^ð^ 37·(±(Ð;KÈ^Ó2\Ð1]ð_^ð^	^ð_^ðp �wðq^ðp &ðq^ðp '+ Vðq^ðp,/ðq^ðx 04¯x©x¸ÀÓ/CÐ.Dðy^ðxEðy^ðz �ð{^ðz Bð{^ðz CGÇ(Á(È?Ð[dÓBeÐAfð{^ðzgð{^ðP €oðQ^ðP		ðQ^ðb 
ˆðc^ðb#ðc^ðr $, *ðs^ðr-ðs^ðH Ò˜ÐðI^ðHðI^ðP Ò˜ÐðQ^ðPðQ^ðX Ò,˜nÐ-ðY^ðX.ðY^ð` ˆyða^ð` 'ða^ð` (,§x¡x°ÀÓ'QÐ&Rða^ð`Sða^ôn �<‰<‹>×ÑÐ
ðo^ðn  !ðo^ðn "& ðo^ðn'ôo^ð ^r   Úsite_dirÚportaÚslugc           	      óR  — d|› d| › d�}t        d|› �«      }d|› d| › d|› d|› d	�	}t        d
|› �«      }|j                  |«       t        j                  ddt	        |«      t	        |«      gd¬«       t        j                  g d¢d¬«       t        j                  dddd|gd¬«       y)z8Cria um systemd unit rodando http.server no dir do site.úanalise-r™   z.servicez/etc/systemd/system/z"[Unit]
Description=Analise Lead - z #zG
After=network.target

[Service]
Type=simple
User=mia
WorkingDirectory=z+
ExecStart=/usr/bin/python3 -m http.server zR --bind 0.0.0.0
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
z/tmp/ÚsudoÚmvT©Úcheck)r¿  Ú	systemctlzdaemon-reloadrÃ  Úenablez--nowN)r   Ú
write_textÚ
subprocessÚrunr\   )rv   rº  r»  r¼  Ú	unit_nameÚ	unit_pathrB   Útmps           r   Úmontar_servidor_siterË  u  sÀ   € à˜4˜&  * ¨XÐ6€IÜÐ+¨I¨;Ð7Ó8€IðØ ˜6  J <ð 0ð �ð +Ø+0¨'ð 2ð€Gô ��y�kÐ"Ó
#€CØ‡N�N�7ÔÜ‡N�N�F˜D¤# c£(¬C°	«NÐ;À4ÕHÜ‡N�NÒ9ÀÕFÜ‡N�N�F˜K¨°7¸IÐFÈdÖSr   c                 ó0  — ddl }| › dt        › �}d| › �}t        t        «      5 }|j	                  |«      }ddd«       d   d   }|d   d   }||v rdd	|› �ig||   d
   d<   n6dgdgd|› d�|dœ||› d�<   dgd|› d�|ddidœ||› d�<   d
ddd	|› �igii||<   t        dt        t        j                  «       «      › d�«      }	t        |	d«      5 }|j                  ||dd¬«       ddd«       t        j                  ddt        t        «      t        › dt        t        j                  «       «      › �gd¬«       t        j                  ddt        |	«      t        t        «      gd¬«       |	j                  d¬ «       |S # 1 sw Y   �ŒKxY w# 1 sw Y   Œ§xY w)!z(Adiciona rota Traefik. Retorna hostname.r   Nú.r¾  ÚhttpÚroutersÚservicesrÐ   zhttp://172.18.0.1:ÚloadBalancerÚserverszredirect-to-httpszHost(`z`))ÚentryPointsÚmiddlewaresÚruleÚservicez-httpÚhttpsÚcertResolverÚletsencrypt)rÓ  rÕ  rÖ  Útlsz-httpsz/tmp/traefik-z.yamlÚwFT)Ú	sort_keysÚallow_unicoder¿  Úcpz.bak.rÁ  )Ú
missing_ok)ÚyamlÚDOMINIO_BASEÚopenÚTRAEFIK_CONFIGÚ	safe_loadr   r˜  r™  Ú	safe_dumprÆ  rÇ  r\   Úunlink)
r¼  r»  rà  ÚhostÚservice_nameÚfÚcfgrÏ  rÐ  rÊ  s
             r   Úregistrar_traefikrë  �  sê  € ãØˆV�1”\�NÐ#€DØ˜d˜VÐ$€Lä	ŒnÓ	ð   Ø�n‰n˜QÓˆ÷ ð �&‰k˜)Ñ$€GØ�6‰{˜:Ñ&€Hð �xÑØ>CÐGYÐZ_ÐY`ÐEaÐ=bÐ<cˆ�Ñ˜~Ñ.¨yÒ9ð #˜8Ø/Ð0Ø˜T˜F "Ð%Ø#ñ	+
ˆ�<�. Ð&Ñ'ð $˜9Ø˜T˜F "Ð%Ø#Ø" MÐ2ñ	,
ˆ�<�. Ð'Ñ(ð ˜Y¨%Ð3EÀeÀWÐ1MÐ)NÐ(OÐPð"
ˆ�Ñô
 �œs¤4§9¡9£;Ó/Ð0°Ð6Ó
7€CÜ	ˆc�3‹ð D˜1Ø�‰�s˜A¨¸dˆÔC÷Dä‡N�N�F˜D¤#¤nÓ"5¼.Ð9IÈÌsÔSW×S\ÑS\ÓS^ÓO_ÐN`Ð7aÐbÐjoÕpÜ‡N�N�F˜D¤# c£(¬C´Ó,?Ð@ÈÕMØ‡J�J˜$€JÔØ€K÷C ñ  ú÷8Dð Dús   ¤E?ÃFÅ?F	ÆFc                 óF  — t         rt        sy| }|› dt        › �}	 t        j                  dt        › d�ddt         › �id|id¬	«      }|j                  «       }|j	                  d
«      ry	 d|ddddœ}	 	 ddl}|j                  dt        › �«      }||d<   t        j                  dt        › d�dt         › �ddœ|d¬«      }|j                  «       j	                  dd«      S # t        $ r Y Œ�w xY w# t        $ r Y Œew xY w# t        $ r}t        d|› �«       Y d}~yd}~ww xY w)zACria registro CNAME para slug.agentesclimb.us apontando pro root.FrÍ  z+https://api.cloudflare.com/client/v4/zones/z/dns_recordsÚAuthorizationzBearer rÔ   r¹   )rð   r»   r¼   rÄ   TÚAz168.231.106.207r   )r&  rÔ   rB   ÚttlÚproxiedr   Nzprospeccao.rB   zapplication/json)rí  zContent-Typeé   )rð   r¿   r¼   Úsuccessz[analisador] erro CF: )r#   r$   rá  r¾   rR   r¿   r@   r¦   ÚgethostbynameÚpostrA   )	r¼  Ú	subdomainÚfqdnr‘   rÀ   ÚpayloadÚskÚip_raizrC   s	            r   Úregistrar_cloudflarerú  º  sa  € åÕ'9Øà€IØˆ[˜œ,˜Ð(€DðÜ�L‰LØ9Ô:LÐ9MÈ\ÐZØ$¨Ô0DÐ/EÐ&FÐGØ˜D�>Øô	
ˆð �v‰v‹xˆØ�8‰8�HÔØð ð ØØ$ØØñ€Gðð	ÛØ×&Ñ&¨´\°NÐ'CÓDˆGØ!(ˆG�IÑô �M‰MØ9Ô:LÐ9MÈ\ÐZà#*Ô+?Ð*@Ð!AØ 2ñð Øô
ˆð �v‰v‹x�|‰|˜I uÓ-Ð-øô9 ò Ùðûô  ò 	Ùð	ûô ò ÜÐ& q cÐ*Ô+ÜûðúsI   œAC! Á5!C0 ÂA
C? Ã!	C-Ã,C-Ã0	C<Ã9C? Ã;C<Ã<C? Ã?	D ÄDÄD Ú
timeout_msc                 ót  — 	 ddl m}  |«       5 }|j                  j                  d¬«      }|j	                  dddœ¬«      }|j                  | |d	¬
«       |j                  t        |«      d¬«       |j                  «        d d d «       y# 1 sw Y   yxY w# t        $ r}t        d|› �«       Y d }~yd }~ww xY w)Nr   ©Úsync_playwrightT©Úheadlessi   i„  )ÚwidthÚheight)ÚviewportÚnetworkidle©r¼   Ú
wait_untilF)r8   Ú	full_pagez [analisador] screenshot falhou: )Úplaywright.sync_apirþ  ÚchromiumÚlaunchÚnew_pageÚgotoÚ
screenshotr\   rf   r@   rA   )rÐ   rÇ   rû  rþ  rN   ÚbrowserÚpagerC   s           r   Útirar_screenshotr  ð  s¬   € ðÝ7ÙÓð 	 !Ø—j‘j×'Ñ'°Ð'Ó6ˆGØ×#Ñ#°tÀsÑ-KÐ#ÓLˆDØ�I‰I�c :¸-ˆIÔHØ�O‰O¤ T£°eˆOÔ<Ø�M‰MŒO÷	ð ÷	ð ûÜò ÜÐ0°°Ð4Ô5Üûðús5   ‚B �A2B
ÂB Â
BÂB ÂB Â	B7ÂB2Â2B7ry   Úscreenshot_pathÚdest_pdfc                 ó@  — 	 ddl m} |j	                  d«      xs |j	                  d«      xs d}|j	                  d«      xs g }	d	j                  d
„ |	d d D «       «      xs d}
d	j                  d„ |j	                  d«      xs g D «       «      }d	}|rG|j                  «       r7t        j                  |j                  «       «      j                  «       }d|› d�}|j	                  d«      xs d}d	j                  g d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘|› ‘d‘|j	                  dd	«      › ‘d‘|j	                  dd	«      › ‘d‘t        j                  «       j                  d«      › ‘d‘|j	                  d «      xs d!› ‘d"‘|j	                  d#«      xs |j	                  d$«      xs d!› ‘d%‘|j	                  d&«      xs d!› ‘d'‘|j	                  d(«      xs d› ‘d)‘|j	                  d*«      xs |j	                  d+«      xs d!› ‘d,‘|xs d-› ‘d.‘|
› ‘d/‘|› ‘d0‘|› ‘d1‘|› ‘d2‘| › ‘d3‘«      }	  ||¬4«      j                  t        |«      «       y5# t        $ r}t        d|› �«       Y d }~yd }~ww xY w# t        $ r}t        d6|› �«       Y d }~yd }~ww xY w)7Nr   )ÚHTMLu'   [analisador] weasyprint indisponÃ­vel: Frß   rk   rg  rÛ   r    c              3   ó¸   K  — | ]R  }d |j                  dd«      › ddt        |j                  dd«      «      z  › d|j                  d«      xs d	d
d › d�–— ŒT y
­w)zR<div class="review">
              <div class="rev-head">
                <strong>Úauthor_nameri  z.</strong>
                <span class="stars">r§  rÙ   r   z.</span>
              </div>
              <p>r“   r    Nr  r¢  )rR   r˜  r  s     r   rP   z#gerar_pdf_dossie.<locals>.<genexpr>
  su   è ø€ ò 	ð ðàŸ™˜}¨UÓ3Ð4ð 5%Ø%*¬S°·±°xÀÓ1CÓ-DÑ%DÐ$Eð Fà—5‘5˜“=Ò& B¨¨Ð-Ð.ð /ô	ñ	ùs   ‚AArÞ   u+   <p><em>Sem avaliaÃ§Ãµes pÃºblicas.</em></p>c              3   ó(   K  — | ]
  }d |› d�–— Œ y­wr¤  rL   )rM   Úos     r   rP   z#gerar_pdf_dossie.<locals>.<genexpr>  s   è ø€ ò !Øˆ$ˆqˆc�Œñ!ùr¥  rR  z <img src="data:image/png;base64,z" class="screenshot" />rP  rF  uL  <!DOCTYPE html>
<html><head><meta charset="UTF-8" />
<style>
  @page { size: A4; margin: 20mm 15mm; @bottom-center { content: "DossiÃª Climb Digital â€” pÃ¡gina " counter(page); font-size: 9pt; color: #999; } }
  body { font-family: -apple-system, Arial, sans-serif; color: #222; line-height: 1.55; font-size: 11pt; }
  h1 { color: z4; font-size: 26pt; margin: 0 0 6pt; }
  h2 { color: z@; font-size: 15pt; margin: 22pt 0 8pt; border-bottom: 2px solid a  ; padding-bottom: 4pt; }
  .subtitle { color: #666; font-size: 12pt; margin-bottom: 20pt; }
  .grid { display: flex; gap: 12pt; margin: 12pt 0; }
  .box { flex: 1; background: #f7f7f7; padding: 12pt; border-radius: 6pt; }
  .box strong { display: block; color: zÚ; font-size: 9pt; text-transform: uppercase; letter-spacing: 0.5pt; margin-bottom: 4pt; }
  ul { margin: 8pt 0 8pt 18pt; }
  li { margin: 4pt 0; }
  .review { background: #fafafa; padding: 10pt; border-left: 3pt solid a  ; margin: 8pt 0; border-radius: 4pt; }
  .rev-head { display: flex; justify-content: space-between; margin-bottom: 4pt; }
  .stars { color: #FFA000; }
  .screenshot { width: 100%; border: 1pt solid #ddd; border-radius: 6pt; margin: 10pt 0; }
  .cta { background: u#  ; color: white; padding: 14pt; border-radius: 8pt; margin-top: 16pt; text-align: center; }
  .cta a { color: white; font-weight: bold; text-decoration: none; }
  .meta { color: #888; font-size: 9pt; margin-top: 24pt; text-align: center; }
</style></head>
<body>

<h1>DossiÃª de AnÃ¡lise â€” z</h1>
<div class="subtitle">rm   u    â€¢ rG   z%d/%m/%Yun   </div>

<h2>Perfil do negÃ³cio</h2>
<div class="grid">
  <div class="box">
    <strong>EndereÃ§o</strong>
    rà   ri  z@
  </div>
  <div class="box">
    <strong>Telefone</strong>
    rl   rh  ud   
  </div>
</div>
<div class="grid">
  <div class="box">
    <strong>AvaliaÃ§Ã£o Google</strong>
    rÙ   z / 5 (râ   uP    avaliaÃ§Ãµes)
  </div>
  <div class="box">
    <strong>Site atual</strong>
    Úlead_site_atualrá   z;
  </div>
</div>

<h2>Oportunidades identificadas</h2>
<ul>r¬  u,   </ul>

<h2>AvaliaÃ§Ãµes reais (Google)</h2>
u   

<h2>Site demonstrativo</h2>
<p>Preparamos uma pÃ¡gina demonstrativa mostrando como o negÃ³cio pode se apresentar online:</p>
z
<div class="cta">
  <a href="u   ">Ver site online â†’ uF   </a>
</div>

<div class="meta">Gerado por Climb Digital â€¢ AnÃ¡lise #z</div>
</body></html>
)ÚstringTz[analisador] erro pdf: )Ú
weasyprintr  r@   rA   rR   rT   r   Úbase64Ú	b64encodeÚ
read_bytesrž   r   rp   ÚstrftimeÚ	write_pdfr\   )rv   rE   rc  ry   r  r  r  rC   rk   rÛ   Úreviews_htmlÚoportunidades_htmlÚscreenshot_htmlÚb64r¯  rú   s                   r   Úgerar_pdf_dossier%     s  € ðÝ#ð
 �9‰9�]Ó#ÒF u§y¡y°Ó'8ÒF¸J€DØ�i‰i˜	Ó"Ò( b€GØ—7‘7ñ 	ð ˜˜!�ô	ó 	ò 	7ð 
7ð ð Ÿ™ñ !Ø"&§(¡(Ð+BÓ"CÒ"IÀrô!ó Ðð €OÙ˜?×1Ñ1Ô3Ü×Ñ˜×9Ñ9Ó;Ó<×CÑCÓEˆØ<¸S¸EÐAXÐYˆà�8‰8�NÓ#Ò0 y€D÷?ó ?ð ð ?ð
 ˆvð?ð
ð?ð ˆvð?ð Vð?ð W[ÐU[ð?ð\)ð?ð *.¨ð?ð/Ið?ð JNÈð?ðOð?ð" �fð#?ð"ð#?ð. "˜Fð/?ð.#ð/?ð0 —y‘y ¨"Ó-Ð.ð1?ð0 /4ð1?ð0 5:·I±I¸kÈ"Ó4MÐ3Nð1?ð0 OTð1?ô0 U]×T`ÑT`ÓTb×TkÑTkÐlvÓTwÐSxð1?ð0yð1?ð< ‡Y�YˆzÓÒ#˜eÐ$ð=?ð<%ð=?ðD ‡Y�YˆzÓÒA˜eŸi™i¨Ó8ÒA¸EÐBðE?ðDCðE?ðP ‡Y�YˆxÓÒ!˜EÐ"ðQ?ðP #)ðQ?ðP */¯©°?Ó)CÒ)HÀqÐ(IðQ?ðPJðQ?ðX ‡Y�YÐ Ó!ÒF U§Y¡Y¨}Ó%=ÒFÀÐGðY?ðXHðY?ðb Ò)˜>Ð*ðc?ðb+ðc?ðh €ði?ðhði?ðp Ð ðq?ðpðq?ðt ˆ:ðu?ðt ,ðu?ðt -5¨:ðu?ðt6:ðu?ðz ;E¸ð{?ðzFô{?€DðBÙ�DÔ×#Ñ#¤C¨£MÔ2Øøô ò ÜÐ7¸°sÐ;Ô<Üûðûô@ ò ÜÐ'¨ sÐ+Ô,Üûðús/   ‚I È6!I< É	I9É!I4É4I9É<	JÊJÊJzB/opt/mia/workspace/prospeccao_ativa/templates/dossie_template.htmlc                 óî   — 	 t        | «      } | dk\  r:| dz  }|d›j                  dd«      j	                  d«      j	                  d«      dz   S t        | «      S # t        $ r | rt        | «      cY S dcY S w xY w)u-   Formata nÃºmero: 1234 -> '1,2k' quando > 999.Ú0rx  ú.1frÍ  Ú,r   )r˜  r@   r\   ÚreplaceÚrstrip)Únr   s     r   Ú_fmt_numr-  m  s   € ð$Ü�‹Fˆð 	ˆD‚yØ�‰HˆØ�C�×!Ñ! # sÓ+×2Ñ2°3Ó7×>Ñ>¸sÓCÀcÑIÐIÜˆq‹6€Møô ò $ÙŒs�1‹vÒ# Ò#ð$ús   ‚A ÁA4Á/A4Á3A4Úurl_or_handlec                 ó  — | syt        | «      j                  «       }d|v r|j                  d«      d   }|j                  d«      d   j                  d«      d   j                  «       }|sy|j                  d«      r|S d|› �S )z;Extrai handle @xxx de qualquer coisa (URL, @handle, texto).ri  zinstagram.com/éÿÿÿÿú/r   r  ú@)r\   r   r   r   )r.  r®   s     r   Ú
_handle_igr3  y  sƒ   € áØÜˆMÓ× Ñ Ó"€AØ˜1ÑØ�G‰GÐ$Ó% bÑ)ˆØ	�‰�‹�Q‰×Ñ˜cÓ" 1Ñ%×+Ñ+Ó-€AÙØØ—‘˜SÔ!ˆ1Ð.¨¨1¨# wÐ.r   Úinstagram_datac           
      óv  — t         j                  «       st        dt         › �«       y|xs i }t        t	        | «      z  }|j                  dd¬«       |j                  d«      xs |j                  d«      xs d}|j                  d«      xs d	}|j                  d
«      xs d	}|j                  d«      xs |j                  d«      xs d}	|j                  d«      xs |j                  d«      xs d}
|j                  d«      }|j                  d«      xs |j                  d«      xs d	}|j                  d«      xs g }|j                  d«      xs d	}|rt        |«      nd}|j                  d«      xs |j                  d«      xs |xs d}t        |j                  d«      xs d«      }t        |j                  d«      xs d«      }t        |j                  d«      xs d«      }g d¢}t        j                  «       }|r$|› d||j                  dz
     › d|j                  › �n ||j                  dz
     › d|j                  › �}d	}|d z  }|j                  «       r#d!D ]  }||z  }|j                  «       sŒd"|› �} n |s&d#t        j                  d$«      j                  «       z   }d	}|d%z  }|j                  «       rd"|› �}|j!                  d&d	«      j!                  d'd	«      j#                  d(«      }|rd)nd}d}|rd*nd} |rt%        t	        |«      «      d+kD  rd,nd}!|rd,nd}"d-}#d}$d}%||z   | z   |!z   |"z   |#z   |$z   |%z   }&d.}'|&d/k  rd0}'nt'        d.|&d1z   «      }'d2„ }(|rÃg })|dd3 D ]§  }*|*j                  d4«      xs d5j)                  «       }+d6t+        |*j                  dd,«      «      z  },|*j                  d7«      xs d	j)                  «       j!                  d8d«      }-t%        |-«      d9kD  r|-dd: d;z   }-|)j-                  d<|+› d=|,› d>|-› d?�«       Œ© d	j/                  |)«      }.nd@}.g }/g }0|rt1        |«      dAk\  r|/j-                  dB«       |	r|	dk7  r|/j-                  dC«       |r|/j-                  dD«       |r(t%        t	        |«      «      dEkD  r|/j-                  dF«       |
r|
dk7  r|/j-                  dG«       |s|0j-                  dH«       n|0j-                  dI«       |0j-                  dJ«       |s|0j-                  dK«       n|0j-                  dL«       |0j-                  dM«       |/ddN xs dOg}/|0ddN }0d	j/                  dP„ |/D «       «      j#                  «       }1d	j/                  dQ„ |0D «       «      j#                  «       }2|rdR|j3                  «       xs dS› dT�}3ndU}3dV|j3                  «       xs dW› d|› dX�}4|xs dYj5                  «       }5i dZ|“d[|5“d\|“d]|	“d^|
“d_|“d`|“da|“db|“dc|rt1        |«      dd›nd“det	        |&«      “dft	        |'«      “dg|“dh|“di|“djt	        |«      “dk|3“i dl|.“dm|1“dn|2“do|4“dpt	        |«      “dqt	         |(|d)«      «      “drt	        |«      “dst	         |(|d+«      «      “dtt	        | «      “dut	         |(| dv«      «      “dwt	        |!«      “dxt	         |(|!d)«      «      “dyt	        |"«      “dzt	         |(|"dv«      «      “d{t	        |#«      “d|t	         |(|#d)«      «      “d}t	        |$«      “¥t	         |(|$d)«      «      t	        |%«      t	         |(|%d)«      «      d~œ¥}6	 t         j7                  d¬€«      }7|6j9                  «       D ]   \  }8}9|7j!                  |8t	        |9«      «      }7Œ" |d�z  }:|:j;                  |7d¬€«       |:S # t<        $ r};t        d‚|;› �«       Y d};~;yd};~;ww xY w)ƒu—   
    Gera o HTML do dossiÃª v2 (template oxblood/dourado/ivory) preenchido
    com dados do lead. Retorna o path do HTML salvo, ou None se falhar.
    u'   [analisador] template nÃ£o encontrado: NTr�  rß   rk   rg  rm   r    rG   rà   Úlead_enderecori  rl   rh  rÙ   r  rá   rÛ   rn   ÚbiorA  u   PresenÃ§a digital do negÃ³cioÚ
seguidoresr   ÚpostsÚseguindo)ÚJaneiroÚ	Fevereirou   MarÃ§oÚAbrilÚMaioÚJunhoÚJulhoÚAgostoÚSetembroÚOutubroÚNovembroÚDezembrou    Â· r   rH   rš  )z
foto_1.jpgz
foto_1.pngz
foto_0.jpgz
foto_0.pngúfile://zdata:image/svg+xml;base64,ss   <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><rect fill="#8a6535" width="100" height="100"/></svg>úscreenshot.pngrë   rê   r1  r   é   rñ  rÞ   rp  éd   rš   é\   é7   c                 óV   — 	 t        t        | |z  dz  «      «      S # t        $ r Y yw xY w)NrI  r   )r˜  Úroundr@   )r   Útots     r   Úpctzgerar_dossie_html.<locals>.pctÕ  s1   € ð	Ü”u˜a #™g¨™_Ó-Ó.Ð.øÜò 	Ùð	ús   ‚ œ	(§(r‘  r  ÚClientez&#9733;r“   r  éÜ   éÙ   z...zi
        <div class="review">
          <div class="review-head">
            <div class="review-author">z-</div>
            <div class="review-stars">z<</div>
          </div>
          <div class="review-text">"z"</div>
        </div>uo   <div class="review"><div class="review-text">Sem avaliaÃ§Ãµes pÃºblicas registradas atÃ© o momento.</div></div>g      @u(   AvaliaÃ§Ã£o Google acima de 4.5 estrelasu   EndereÃ§o visÃ­vel no perfilu   PresenÃ§a ativa no InstagramrÊ   z'Bio descreve especialidades com clarezau   Telefone de contato disponÃ­velu   Sem site profissional prÃ³priou+   Site atual nÃ£o capta leads com eficiÃªnciau*   Sem chamada para aÃ§Ã£o (CTA) clara na biou    Sem presenÃ§a ativa no Instagramu+   Link da bio nÃ£o direciona para agendamentozSem uso estruturado de hashtagsé   u   NegÃ³cio consolidado localmentec              3   ó(   K  — | ]
  }d |› d�–— Œ y­w©z            <li>z</li>
NrL   ©rM   rN   s     r   rP   z$gerar_dossie_html.<locals>.<genexpr>  ó   è ø€ Ò OÀ1Ð#3°A°3°gÔ!>Ñ Oùr¥  c              3   ó(   K  — | ]
  }d |› d�–— Œ y­wrU  rL   rV  s     r   rP   z$gerar_dossie_html.<locals>.<genexpr>  rW  r¥  uS   FrequÃªncia de postagem irregular, com uso baixo de Reels. O benchmark do setor de u	   serviÃ§osu´    para trÃ¡fego orgÃ¢nico estÃ¡ em 30 a 50% de Reels. A bio traz informaÃ§Ãµes relevantes, mas o link atual nÃ£o direciona para uma pÃ¡gina que capture contato ou faÃ§a agendamento.uÎ   Perfil de Instagram ainda nÃ£o identificado publicamente. PresenÃ§a digital concentrada em ferramentas passivas (Google Meu NegÃ³cio), sem canal ativo de captaÃ§Ã£o e relacionamento com potenciais clientes.aF      <div class="strategy-block">
      <div class="strategy-head">
        <div class="strategy-title">Presenca <em>Digital</em></div>
        <div class="strategy-week">Semana 1-2</div>
      </div>
      <ul class="strategy-items">
        <li><strong>Site profissional com agendamento online.</strong> Clientes que buscam "u   seu serviÃ§ouû  " no Google hoje encontram concorrentes primeiro.</li>
        <li><strong>Link ativo na bio</strong> direcionando para agendamento ou WhatsApp com resposta rÃ¡pida.</li>
      </ul>
    </div>

    <div class="strategy-block">
      <div class="strategy-head">
        <div class="strategy-title"><em>Conteudo</em></div>
        <div class="strategy-week">Semana 1-4</div>
      </div>
      <ul class="strategy-items">
        <li><strong>3 posts por semana:</strong> 1 educativo, 1 resultado (antes e depois), 1 depoimento de cliente.</li>
        <li><strong>Reels curtos (15-30s)</strong> tÃªm 4x mais alcance orgÃ¢nico que fotos estÃ¡ticas.</li>
        <li><strong>Stories diÃ¡rios</strong> mantÃªm o perfil ativo no algoritmo.</li>
      </ul>
    </div>

    <div class="strategy-block">
      <div class="strategy-head">
        <div class="strategy-title"><em>Atendimento</em></div>
        <div class="strategy-week">Semana 2-3</div>
      </div>
      <ul class="strategy-items">
        <li><strong>Respostas automÃ¡ticas inteligentes no WhatsApp.</strong> Clientes esperam retorno em menos de 1 hora, reduzindo perda de leads fora do horÃ¡rio.</li>
        <li><strong>Acompanhamento pÃ³s-atendimento</strong> aumenta a taxa de retorno em atÃ© 60%.</li>
      </ul>
    </div>

    <div class="strategy-block">
      <div class="strategy-head">
        <div class="strategy-title"><em>Fidelizacao</em></div>
        <div class="strategy-week">Semana 3-4</div>
      </div>
      <ul class="strategy-items">
        <li><strong>HistÃ³rico de clientes centralizado</strong> permite lembrar aniversÃ¡rios, retornos e indicaÃ§Ãµes.</li>
        <li><strong>Programa de indicaÃ§Ã£o</strong> ("traga uma amiga") digitalizado multiplica o boca-a-boca.</li>
      </ul>
    </div>zPresenca Digitalz{{NOME}}z{{SUBTITULO}}z{{INSTAGRAM_HANDLE}}z{{ENDERECO}}z{{TELEFONE}}z{{CIDADE_DATA}}z{{IG_SEGUIDORES}}z{{IG_POSTS}}z{{IG_SEGUINDO}}z{{GOOGLE_RATING}}r(  z	{{SCORE}}z{{SCORE_POTENCIAL}}z{{FOTO_PERFIL}}z{{SCREENSHOT_SITE}}z{{SITE_URL}}z
{{IG_BIO}}z{{DIAGNOSTICO_INSTAGRAM}}z{{REVIEWS_HTML}}z{{PONTOS_FORTES_HTML}}z{{PONTOS_FRACOS_HTML}}z{{ESTRATEGIA_HTML}}z{{SCORE_GOOGLE}}z{{SCORE_GOOGLE_PCT}}z{{SCORE_SITE}}z{{SCORE_SITE_PCT}}z{{SCORE_INSTAGRAM}}z{{SCORE_INSTAGRAM_PCT}}r¹   z{{SCORE_BIO}}z{{SCORE_BIO_PCT}}z{{SCORE_LINK}}z{{SCORE_LINK_PCT}}z{{SCORE_AGENDAMENTO}}z{{SCORE_AGENDAMENTO_PCT}}z{{SCORE_ATENDIMENTO}})z{{SCORE_ATENDIMENTO_PCT}}z{{SCORE_CRM}}z{{SCORE_CRM_PCT}}r<   r=   zdossie.htmlz%[analisador] erro gerar_dossie_html: )ÚTEMPLATE_DOSSIE_PATHr   rA   ÚBASE_ANALISESr\   r•  rR   r3  r-  r   rp   Úmonthr®  r  r  rž   r*  r+  r  Úminr   r˜  r—  rT   ÚfloatrS   rû   r   r€   rÅ  r@   )<rv   rE   rc  ry   r4  Úanalise_dirrk   rm   rG   rà   rl   rÙ   ro   Úreviews_rawÚinstagram_urlr  r7  Úig_seguidoresÚig_postsÚig_seguindoÚmesesÚagoraÚcidade_dataÚfoto_perfilÚimgs_dirÚcandÚfpÚscreenshot_siteÚss_pathÚsite_url_cleanÚscore_googleÚ
score_siteÚscore_instagramÚ	score_bioÚ
score_linkÚscore_agendamentoÚscore_atendimentoÚ	score_crmÚscore_totalÚscore_potencialrO  Úreviews_partsr‘   ÚauthorÚstarsr“   r!  ÚfortesÚfracosÚpontos_fortes_htmlÚpontos_fracos_htmlÚdiagnosticoÚestrategia_htmlÚ	subtituloÚreplacementsrú   r   r   rÇ   rC   s<                                                               r   Úgerar_dossie_htmlrƒ  †  s/	  € ô  ×&Ñ&Ô(ÜÐ7Ô8LÐ7MÐNÔOØà#Ò) r€NÜ¤# j£/Ñ1€KØ×Ñ˜d¨TÐÔ2ð �9‰9�]Ó#ÒF u§y¡y°Ó'8ÒF¸J€DØ�Y‰Y�xÓ Ò& B€FØ—	‘	˜+Ó&Ò,¨"€IØ�y‰y˜Ó$ÒK¨¯	©	°/Ó(BÒKÀe€HØ�y‰y˜Ó$ÒK¨¯	©	°/Ó(BÒKÀe€HØ�Y‰Y�xÓ €FØ—‘Ð,Ó-ÒO°·±¸=Ó1IÒOÈR€JØ—)‘)˜IÓ&Ò,¨"€Kà—I‘I˜kÓ*Ò0¨b€MÙ*7ŒZ˜Ô&¸U€FØ
×
Ñ
˜UÓ
#Ò
m u§y¡y°Ó'=Ò
mÀÒ
mÐNm€CÜ˜^×/Ñ/°Ó=ÒBÀÓC€MÜ˜×*Ñ*¨7Ó3Ò8°qÓ9€HÜ˜>×-Ñ-¨jÓ9Ò>¸QÓ?€KòO€Eä�L‰L‹N€EÙJP�V�H˜D  u§{¡{°Q¡Ñ!7Ð 8¸¸%¿*¹*¸ÑFÐY^Ð_d×_jÑ_jÐmnÑ_nÑYoÐXpÐpqÐrw×r|Ñr|Ðq}ÐV~€Kð €KØ˜VÑ#€HØ‡�ÔØLò 	ˆDØ˜D‘ˆBØ�y‰y�{Ø '¨ t˜n�Ùð		ñ
 à2´V×5EÑ5Eð Có6
ç
‰&‹(ñˆð €OØÐ,Ñ,€GØ‡~�~ÔØ# G 9Ð-ˆà×%Ñ% j°"Ó5×=Ñ=¸iÈÓL×SÑSÐTWÓX€Nñ  ‘2 Q€LØ€JÙ(‘a¨a€OÙœc¤# c£(›m¨bÒ0‘°q€IÙ ‘ a€JØÐØÐØ€Ià *Ñ,¨Ñ>ÀÑJØñ Ø"3ñ4Ø6GñHØJSñT€Kð <€Oà�RÒØ‰ä˜c ;°Ñ#3Ó4ˆòñ ØˆØ˜R˜a�ò 	ˆAØ—e‘e˜MÓ*Ò7¨i×>Ñ>Ó@ˆFØ¤ A§E¡E¨(°AÓ$6Ó 7Ñ7ˆEØ—E‘E˜&“MÒ' R×.Ñ.Ó0×8Ñ8¸¸sÓCˆDÜ�4‹y˜3ŠØ˜D˜S�z EÑ)�Ø× Ñ ð &(ð )/ xð 0'Ø', gð .%à%) Fð +ð"õ ð	ð —w‘w˜}Ó-‰ð Iˆð €FØ€Fá”%˜“- 3Ò&Ø�‰Ð@ÔAÙ�H Ò%Ø�‰Ð4Ô5ÙØ�‰Ð4Ô5Ù
Œs”3�s“8‹}˜rÒ!Ø�‰Ð?Ô@Ù�H Ò%Ø�‰Ð7Ô8áØ�‰Ð6Õ7à�‰ÐCÔDØ
‡M�MÐ>Ô?ÙØ�‰Ð8Õ9à�‰ÐCÔDØ
‡M�MÐ3Ô4ð �B�QˆZÒ>Ð=Ð>€FØ�B�QˆZ€FàŸ™Ñ OÈÔ OÓO×VÑVÓXÐØŸ™Ñ OÈÔ OÓO×VÑVÓXÐñ ð'Ø'0§¡Ó'8Ò'G¸KÐ&Hð IXðXñ 	ðFð 	ð]ð ^g×]lÑ]lÓ]nò  ^Að  sAð  ]Bð  BCð  DJð  CKð %Kð+€Oð\ Ò0Ð0×7Ñ7Ó9€Ið'Ø�Dð'à˜ð'ð 	 ð'ð 	˜ð	'ð
 	˜ð'ð 	˜;ð'ð 	˜]ð'ð 	˜ð'ð 	˜;ð'ð 	±v¤ f£¨cÑ2À5ð'ð 	”S˜Ó%ð'ð 	œs ?Ó3ð'ð 	˜;ð'ð 	˜ð'ð 	˜ð'ð  	”c˜#“hð!'ð" 	$ [ñ#'ð$ 	˜Lð%'ð& 	!Ð"4ð''ð( 	!Ð"4ð)'ð* 	˜ð+'ð. 	œC Ó-ð/'ð0 	¤¡C¨°bÓ$9Ó :ð1'ð2 	œ#˜j›/ð3'ð4 	œc¡# j°"Ó"5Ó6ð5'ð6 	œs ?Ó3ð7'ð8 	"¤3¡s¨?¸BÓ'?Ó#@ð9'ð: 	œ˜Y›ð;'ð< 	œS¡ Y°Ó!3Ó4ð='ð> 	œ#˜j›/ð?'ð@ 	œc¡# j°"Ó"5Ó6ðA'ðB 	 ¤Ð%6Ó!7ðC'ðD 	$¤S©Ð->ÀÓ)CÓ%DðE'ðF 	 ¤Ð%6Ó!7ñG'ôH &)©Ð->ÀÓ)CÓ%DÜ˜Y›Ü ¡ Y°Ó!3Ó4òM'€LðR
Ü#×-Ñ-°wÐ-Ó?ˆØ ×&Ñ&Ó(ò 	+‰DˆAˆqØ—<‘< ¤3 q£6Ó*‰Dð	+ð ˜]Ñ*ˆØ�‰˜ wˆÔ/ØˆøÜò ÜÐ5°a°SÐ9Ô:Üûðús   Ü4A"^ Þ	^8Þ ^3Þ3^8Ú	html_pathrz   c                 ó   — 	 ddl m}  |«       5 }|j                  j                  d¬«      }|j	                  «       }|j                  d| › �dd¬«       |j                  d	«       |j                  t        |«      d
ddddddœ¬«       |j                  «        ddd«       y# 1 sw Y   yxY w# t        $ r}t        d|› �«       Y d}~yd}~ww xY w)z5Gera PDF a partir de HTML usando Playwright/Chromium.r   rý  Trÿ  rF  i0u  r  r  r[  ÚA4r'  )ÚtopÚbottomÚleftÚright)r8   ÚformatÚprint_backgroundÚmarginNz"[analisador] erro playwright pdf: F)r  rþ  r	  r
  r  r  Úwait_for_timeoutÚpdfr\   rf   r@   rA   )r„  rz   rþ  rN   r  r  rC   s          r   Úgerar_pdf_playwrightr�  ˆ  sÏ   € ðÝ7ÙÓð 	 !Ø—j‘j×'Ñ'°Ð'Ó6ˆGØ×#Ñ#Ó%ˆDØ�I‰I˜ 	˜{Ð+°UÀ}ˆIÔUØ×!Ñ! $Ô'Ø�H‰HÜ˜“]ØØ!%Ø"¨c¸3ÈÑMð	 ô ð �M‰MŒO÷	ð ÷	ð ûÜò ÜÐ2°1°#Ð6Ô7Üûðús5   ‚B, �BB ÂB, Â B)Â%B, Â)B, Â,	CÂ5CÃCc           
      ó  — 	 t        | d¬«       t        |j                  dd«      |j                  dd«      «      }t        |j                  d«      xs |j                  d«      xs d«      }|j                  d«      xs, t	        |j                  dd«      |j                  dd«      «      }i |¥|¥|¥d|i¥}t        |«      }t        t        | «      z  }|d	z  }|d
z  }	|	d	z  }
|	j                  dd¬«       t        ||j                  dd«      |«      }|
j                  dd¬«       |D ]  }	 t        j                  ||z  |
|z  «       Œ! t        |«      }t        ||||«      }|	dz  j                  |d¬«       t!        |j                  dd«      «      }|› d| › �}t#        «       }	 t%        | |	||«       d}	 t)        ||«      }	 t+        |«       |rd|› �nd|› �}|dz  }d|› �}t-        j.                  d«       t1        ||«       |dz  }d}t2        j5                  «       rt7        | |||i ¬«      }|rt9        ||«      }|s-t'        d«       t;        | ||||j5                  «       r|nd|«       ||j=                  «       D ��ci c]  \  }}|dvr||“Œ c}}|j                  d g «      ||||d!œ}t        | d"||j5                  «       rt        |«      ndt?        j@                  |d¬#«      tC        jD                  «       jG                  «       ¬$«       y# t        $ r Y �Œôw xY w# t        $ r}t'        d|› �«       Y d}~�Œ‰d}~ww xY w# t        $ r}t'        d|› �«       Y d}~�ŒŸd}~ww xY w# t        $ r}t'        d|› �«       Y d}~�Œ¸d}~ww xY wc c}}w # t        $ rm}d%dl$}|jK                  «       }t'        d&| › d'|› d(|› �«       t        | d)t        |«      dd* tC        jD                  «       jG                  «       ¬+«       Y d}~yd}~ww xY w),u'   Roda a anÃ¡lise completa em background.Úem_andamento)rx   rk   r    rm   ro   rá   rn   rš  ÚsiteTr�  rG   z
index.htmlr<   r=   r•   r™   z$[analisador] erro subindo servidor: Nz[analisador] erro traefik: z[analisador] erro cloudflare: rë   zhttp://127.0.0.1:rG  rp  z
dossie.pdfF)r4  z7[analisador] fallback pra gerar_pdf_dossie (WeasyPrint))rÛ   rÛ   )rc  rE   rÛ   rd  ry   r¼  r»  Ú	concluido)rr  )rx   ry   rz   r{   r}   r   z[analisador] ERRO id=r?   r  r|   iô  )rx   r|   r}   )&rˆ   rè   rR   rþ   r  rb  rZ  r\   r•  rŸ  Úshutilrc  r@   rX   r‹  rÅ  r£   r¯   rË  rA   rë  rú  r™  Úsleepr  rY  r   rƒ  r�  r%  r€   r¿   r~  r   rp   rq   Ú	tracebackÚ
format_exc)rv   rh   ÚplaceÚ	site_infoÚinstaÚ
dados_fullrc  r^  rh  rº  Ú	site_imgsrd  r›  re  rú   Ú	slug_baser¼  r»  rC   rç  ry   r  Ú	local_urlrz   Úpdf_okr„  r   r   r÷  r—  Útbs                                  r   Úrun_analise_leadr¢  Ÿ  sI  € ðr@Ü�z¨.Õ9ô & i§m¡m°F¸BÓ&?ÀÇÁÈxÐY[ÓA\Ó]ˆÜ& y§}¡}°\Ó'BÒ'dÀeÇiÁiÐP]ÓF^Ò'dÐbdÓeˆ	Ø—‘˜kÓ*ÒvÔ.>¸y¿}¹}ÈVÐUWÓ?XÐZc×ZgÑZgÐhpÐrtÓZuÓ.vˆð
Øð
àð
ð ð
ð ˜ñ	
ˆ
ô # :Ó.ˆô $¤c¨*£oÑ5ˆØ Ñ'ˆØ Ñ'ˆØ˜vÑ%ˆ	Ø�‰˜t¨dˆÔ3ä  ¨	¯©°kÀ2Ó(FÈÓQˆà�‰ ¨tˆÔ4Øò 	ˆAðÜ—‘˜H q™L¨)°a©-Õ8ð	ô % ZÓ0ˆÜ˜d J°¸ÓBˆØ	�LÑ	 ×,Ñ,¨T¸GÐ,ÔDä˜IŸM™M¨&°&Ó9Ó:ˆ	Ø�˜A˜j˜\Ð*ˆÜ“ˆð	>Ü  ¨X°u¸dÔCð ˆð	5Ü$ T¨5Ó1ˆDð
	8Ü  Ô&ñ )-�X˜d˜VÑ$Ð4EÀeÀWÐ2Mˆð &Ð(8Ñ8ˆà'¨ wÐ/ˆ	Ü�
‰
�1ŒÜ˜ OÔ4à Ñ-ˆð ˆÜ×&Ñ&Ô(Ü)Ø˜J¨¨hÀrôˆIñ Ü-¨i¸ÓB�ñ ÜÐKÔMÜ˜Z¨°T¸8Ø0?×0FÑ0FÔ0H™_ÈdØ%ô'ð à!+×!1Ñ!1Ó!3÷Ù˜˜AØ˜LÑ(ð �1‘óð "—~‘~ i°Ó4ØØ ØØñ
ˆô 	ØØØØ&.§o¡oÔ&7”S˜”]¸TÜŸ™ G¸%Ô@Ü!Ÿ™›×1Ñ1Ó3ö	
øôM ò Úðûô ò 	>ÜÐ8¸¸Ð<×=Ò=ûð	>ûô ò 	5ÜÐ/°¨sÐ3×4Ò4ûð	5ûô
 ò 	8ÜÐ2°1°#Ð6×7Ò7ûð	8üóBøô& ò @ÛØ×!Ñ!Ó#ˆÜÐ% j \°°A°3°b¸¸Ð=Ô>Ü�z¨&´s¸1³v¸d¸s°|Ü$,§L¡L£N×$<Ñ$<Ó$>÷	@ò 	@ûð	@úsÄ   ‚D)N Ä,LÅAN Æ&L  Æ4N Æ7M ÇM* ÇB3N ÊNÊA<N Ì	LÌN ÌLÌN Ì 	MÌ)L=Ì7N Ì=MÍN Í	M'ÍM"ÍN Í"M'Í'N Í*	NÍ3NÎN ÎNÎ	N Î	PÎA#PÐPrK   )iŒ#  i%  )i°  )i N  )TÚ__doc__r   rŸ   Úior¿   r™  r  r•  r¦   rZ   r›   rÆ  Úpathlibr   r   Úurllib.parser   r¾   r*   rZ  r•  Ú_os_dbr   rR   Ú__file__ÚresolveÚparentr]   rã  rá  r   r   r   r!   r,   r#   r$   r%   r.   r|  r}  rz  r{  rV   r˜  r\   rD   r‹   rX   rb   rg   ru   rˆ   r�   r�   r’   r£   r¯   rÂ   rÅ   ÚboolrÑ   rè   rþ   r  r<  r0  rX  rb  rˆ  r‹  rŸ  ry  rË  rë  rú  r  r%  rY  r-  r3  rƒ  r�  r¢  rL   r   r   ú<module>r¬     s[  ðñ	ó 
Û 	Û 	Û Û Û Û Û Û Û Û Ý Ý Ý #ã Û ñ Ð2Ó3€Ø × Ñ ˜TÐ Ô "Û á
ˆv�~‰~×!Ñ! /Ó2Òd±t¸H³~×7MÑ7MÓ7O×7VÑ7VÐYcÑ7cÓ
e€áÐAÓB€Ø €òñ Ô à—J‘J—N‘NÐ#6Ó7ÒdÐ;dÐ Ø—‘—‘Ð 0°"Ó5€Ø—J‘J—N‘NÐ#6¸Ó;Ð ØŸ
™
Ÿ™Ð'@À"ÓEÐ Ø—z‘z—~‘~Ð&<¸bÓAÐ Ø—Z‘Z—^‘^Ð$8¸"Ó=Ð Ø—j‘j—n‘nÐ%:¸BÓ?Ð òñ ÐPÓQÐ ÙÐLÓMÐ ÙÐLÓMÐ Ù#Ð$_Ó`Ð òÐ ñ	�dð 	 3¨¡:ð 	¸ó 	ð˜Tð  có òòð4˜Tð ¨Cð °Có ð0˜só ð&˜Cð & D¨4¡Kó &ð#˜Sð # Tó #ð%�#ð %˜#ó %ñ3¨#ó 3ð˜Sð ¨#ð °#¸±*ó ð, Cð ¨Dó ñ&¨Cð °tð Àsð ÐVZó ð  ð ¨Sð °Tó ð4+˜Cð + Dó +ð*˜3ð ¨ð °ó ð*N%˜Tð N% dó N%ðb˜$ð  4ó ðFT% tð T%°ó T%ðp]%˜tð ]%¨ó ]%ðBv5 ð v5¨dð v5¸TÀ#¹Yð v5ÐRUð v5ÐZ]ó v5ðtF5˜ð F5 dð F5°T¸#±Yð F5È#ð F5ÐRUó F5ðT ð °ð Àð ÈÈcÉó ð<D˜$ð D tð D°d¸3±ið DÀCó DðPT Sð T°Dð TÀð TÈCð TÐTXó Tð6'˜Cð '¨ð '°ó 'ðT2˜sð 2 tó 2ñl˜#ð  Tð °sð Àtó ð f ð f¨Tð f¸ð fÈð fØ&*¨T¡kðfØ=AðfØFJófñT Ð`ÓaÐ ð	�3ó 	ð
/˜cð 
/ có 
/ð DHñ #ð ¨dð ¸$ð Ø #ðØ59¸D±[ðØLPÐSWÉKóðD Dð °Dð ¸Tó ð.t@ ð t@°ð t@¸$ô t@r   