
    xii-              	          S r SSKJr  SSKJr  SSKJrJrJr  SSK	r
SSKrSSKJr  SSSS	S
SSSS.rSrSrSr/ SQrSSS jjrSS jrSSS jjrS rSS jrS rS r\SS S jj5       rg)!u  
Funciones.py
------------
Utilidades de UI/formatos y tema visual para el dashboard Cabanna.

Incluye:
- Identidad de marca (colores y tipografías).
- Paleta Picton Blue (solo charts).
- Helpers de formato (moneda, % seguro, rangos).
- Componentes UI (cards) para Streamlit.
- Tema Plotly consistente con fondo oscuro.

Notas de diseño:
- Este archivo NO debe conectarse a la base de datos (evitar acoplamiento).
- Mantenerlo como "UI toolkit" reutilizable por los renders.
    )annotations)contextmanager)OptionalTupleAnyNz#8B4513z#FD6A02z#FFFFFFz#2F4F4Fz#F5F5DCz#000000z#C19A6Bz#8B0000)browngoldwhite	darkslatebeigeblacklight_browndark_redzPlayfair Display, serifzLato, sans-serifzMontserrat, sans-serif)z#eff8ffz#dff0ffz#b8e3ffz#78cdffz#38b6ffz#069af1z#007acez#0061a7z#02528az#084572z#062b4bc                X    [         R                  " XUS9  [         R                  " SSS9  g)uJ   Renderiza una métrica dentro de una tarjeta visual coherente con el tema.)labelvaluehelp</div>Tunsafe_allow_htmlN)stmetricmarkdown)r   r   	help_texts      _C:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\Proyectos\Cabanna\modules\Funciones.pyrender_metricr   3   s    IIEY7KKD1    c                    SU S 3$ )z"Formatea a moneda con separadores.$z,.2f )xs    r   fmt_currencyr"   8   s    qh<r   c                    [        [        [        S[        S   S9[        S   [        S   [        SSSSS9[        SS	S
SSS[        [        S   S9S9S9nU R                  " S0 UD6  U $ )u   
Aplica fondo negro, tipografía de marca y la paleta Picton Blue SOLO a la figura.
Si 'title' es None, respeta el título ya presente en la figura.
   r
   )familysizecolorr   
   <   )lrtbNhbottomgRQ?leftr      )r'   )titleorientationyanchoryxanchorr!   font)r7   paper_bgcolorplot_bgcolormarginlegendr    )dict	BODY_FONTCOLORSPICTON_BLUEupdate_layout)figr2   layout_updatess      r   apply_cabanna_themerC   =   st     6'?CWoG_bB"+CfKN+

N ''Jr   c                $    Ub  US:X  a  g X-
  U-  $ )Nr   r    )numdens     r   	_safe_pctrG   Q   s    
{cQhIr   c                    Sn[         R                  " U 5      R                  U5      nUc  U$ [         R                  " U5      R                  U5      nU SU 3$ )z0Formatea una fecha o rango en formato dd/mm/yyyyz%d/%m/%Yu    → )pdto_datetimestrftime)d1d2fmtfecha1fecha2s        r   
_fmt_rangerQ   V   sT    
C^^B((-F	z^^B((-FXU6(##r   c                >    U c  gU S:  a  SOSnU S:  a  SOSnU S X4$ )N)NAz#9aa0a6 r   z#22c55ez#ef4444u   ↗u   ↘z+.2%r    )pr'   arrows      r   _fmt_pct_valuerW   b   s3    y"aIYE!VEEX$$r   c                v    [        U5      u  pVn[        R                  " SU  SU SU SU SU SU SU S3S	S
9  g )Nz?
        <div class="var-card">
        <div class="var-title">z3</div>
        <div class="var-value" style="color:z"> z'</div>
        <div class="var-legend">z'</div>
        <div class="var-range">(z vs z)</div>
        </div>
        Tr   )rW   r   r   )titulopctleyendarango_actualrango_anterior	value_strr'   rV   s           r   _render_var_cardr`   i   si    ,S1IeKK  &x (--2G2i[% I!!(	 *!!-d>2B C		 
r   c              #     #    U (       a  [         R                  " SU  S3SS9  U(       a  [         R                  " SU S3SS9   Sv   [         R                  " SSS9  g! [         R                  " SSS9  f = f7f)u   
Context manager para envolver cualquier bloque en una tarjeta de UI
consistente con la identidad (negro/dorado).
Uso:
    with st_card("Título", "Subtítulo opcional"):
        st.plotly_chart(...)

Cierra automáticamente su contenedor al salir.
z<div class='cab-card-title'>r   Tr   z<div class='cab-card-sub'>N)r   r   )r2   subtitles     r   st_cardrc   x   sc      
25'@TXY
0
&AUYZ6
H5H5s   AA8A A8A55A8)N)r   strr   rd   r   
str | None)r!   floatreturnrd   )rA   	go.Figurer2   re   rg   rh   )NN)r2   re   rb   re   )__doc__
__future__r   
contextlibr   typingr   r   r   pandasrI   	streamlitr   plotly.graph_objectsgraph_objectsgor>   
TITLE_FONTr=   ALT_FONTr?   r   r"   rC   rG   rQ   rW   r`   rc   r    r   r   <module>rt      s   " # % ' '   ! 	
 '
	%
2

(

$% 6 6r   