
    )i                        d Z ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZ dd	d	d	d
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZy	)u  H2. 일러스트 카드 — Gemini illustration 배경 + Satori 한글 + 차트.

용도: 인포그래픽, 컨셉 카드.
배경: Gemini illustration 스타일 (Gemini CLI 통합 경로).
텍스트: Satori 한글 + 차트 요소.

외부 API 직접 호출 절대 금지 — Gemini CLI / Satori (Node.js) 통합 경로만 사용.

IDS Phase 1 §3.2.1 / §0.2 Hybrid Pattern Standard 준수.
    )annotations)Path   )build_background_layer_htmldefault_gradientgenerate_gemini_background)render_h2_procedural)KOREAN_FONT_STACKrender_html_to_png)i8  iF  N)sizedesign_tokensbackground_pathprompt_hintc          
     :   |\  }}t        |      }|j                  j                  dd       |xs i }	d}
|t        |      }|j                         r|}
|
,|r*|j                  |j                   dz  }t        ||d      }
t        | ||||t        |	            S )u  H2 일러스트 카드를 렌더링한다.

    Args:
        title: 한글 헤드라인.
        body: 한글 본문.
        output_path: 출력 PNG 경로.
        size: (width, height) 픽셀.
        design_tokens: 색상/폰트/차트 데이터 (`chart_bars`: list[int] 0-100).
        background_path: 사전 생성된 배경 이미지.
        prompt_hint: Gemini illustration 프롬프트 힌트.

    Returns:
        저장된 PNG 경로.
    T)parentsexist_okNz
_h2_bg.jpgzflat illustration vector)style)widthheightr   )r   parentmkdirexistsstemr   r	   dict)titlebodyoutput_pathr   r   r   r   r   r   tokensbg_path	candidategen_paths                H/home/jay/workspace/skills/hybrid-image/patterns/h2_illustration_card.pyrenderr#      s    0 ME6{#KTD9 bF  G")	G;%%;+;+;*<J(GG,)C
  6l     c                   g }t        |       D ])  \  }}|j                  d|dz    d|dz   d| d| d	       + dd	j                  |      z   d
z   S )u-   간단한 가로 막대 차트 (Satori HTML).z<div style="display:flex; flex-direction:row; align-items:center; margin-bottom:14px;"><div style="width:60px; font-size:24px; color:#a8b0c0;">#r   z</div><div style="display:flex; height:18px; width:600px; background:rgba(255,255,255,0.08); border-radius:9px; overflow:hidden;"><div style="width:   zpx; background:zk;"></div></div><div style="width:80px; text-align:right; font-size:24px; color:#fafaf8; margin-left:16px;">z%</div></div>z2<div style="display:flex; flex-direction:column;"> z</div>)	enumerateappendjoin)barsaccent_colorrowsipcts        r"   _build_bar_chartr0   P   s    DD/ 
3HHIAw O! "%q	 G1 25 6
	

 	=rwwt}LxWr$   c                    | j                  dd      j                  dd      j                  dd      j                  dd      S )	u%   HTML 이스케이프 (한글 보존).&z&amp;<z&lt;>z&gt;"z&quot;)replace)texts    r"   _escr8   f   s;     	S'"	f		f		h		r$   )r   strr   r9   r   z
Path | strr   ztuple[int, int]r   zdict[str, object] | Noner   zPath | str | Noner   z
str | Nonereturnr   )r+   z	list[int]r,   r9   r:   r9   )r7   r9   r:   r9   )__doc__
__future__r   pathlibr   _backgroundsr   r   r   _pil_renderr	   _satorir
   r   r#   r0   r8    r$   r"   <module>rB      s   	 #  
 . : ).2)-"44
4 4
 4 ,4 '4 4 
4n,r$   