+
    Ž±Õi‰  ã            0       óx  a € RÈ t%0 t R t^ RIt^ RIt^ RIHtHt ^ RIHt ^ RI	H
t
HtHtHtHt ^ RIHt ]P"                  ! ]4      t] ! R R4      4       tRR	RR
RRRRRRRRRRRRRRRRRRRRRRR RR!RR"RR#R$R%R&/R'/ R(R)R*R+R,R-R.R/R0R1R2R3R4/R5R6/R7R	R7R
R8RRR9RR:RR;RR<RR=RR;RR:RRRRRRR R=R!R9R"R:R#R:R%R>/R'R?. RÉOR@. RÊORA. RËORBRCRD.RERF.RGRH.RIRJ../R(R)RKR+RLR-RMR/RNR1ROR3RP/R5RQRRRSRTRU/RVR	RVR
RWRRRXRRYRRZRR[RR\RRZRR]RR]RR^RR_R R\R!R[R"RZR#R]R%RX/R'/ R(R)R*R+R,R-R.R/R0R1R2R3R`/R5R6/RaR	RaR
RbRRRcRRdRReRRfRR\RRdRReRRgRRhRRiR R\R!RcR"RdR#RdR%Rf/R'/ R(R)R*R+R,R-R.R/R0R1R2R3R4/R5R6/RjR	RjR
RkRRRlRRmRRnRRoRRpRRnRRmRRRRRRR RpR!RlR"RnR#RmR%Rq/R'R?. RÌOR@. RÍORA. RÎORBRrRs.RtRu.RvRw.RxRy../R(R)RzR+R{R-R|R/R}R1R~R3R/R5R€RRRRTR‚/RƒR	RƒR
R„RRR…RR†RR‡RRˆRR‰RR‡RR‰RRŠRR‡RR…R R†R!R‹R"R…R#RŠR%R‹/R'R?. RÏOR@. RÐORA. RÑORBRŒR.RŽR.RxRy.RR‘../R(R)R’R+R“R-R”R/R•R1R–R3R—/R5R€RRR˜RTR™/RšR	RšR
R›RRRœRRRRžRRŸRR RRžRRRRRRRRR R R!RœR"RžR#RR%R¡/R'R?. RÒOR@. RÓORA. RÔORBR¢R£.RERF.RxRy.R¤R¥../R(R)R¦R+R§R-R¨R/R©R1RªR3R«/R5R€RRR¬RTR­//t] ^ k Rs] ^k Rs] ^k R® R¯ ltR° R± ltR² R³ ltR´ Rµ ltR¶ R· ltR¸ R¹ ltRº R» ltR¼ R½ ltR¾ R¿ lt RÕRÀ RÁ llt!RÖRÂ RÃ llt"R×RÄ RÅ llt#RÆ RÇ lt$R# )Øu‚  Hermes CLI skin/theme engine.

A data-driven skin system that lets users customize the CLI's visual appearance.
Skins are defined as YAML files in ~/.hermes/skins/ or as built-in presets.
No code changes are needed to add a new skin.

SKIN YAML SCHEMA
================

All fields are optional. Missing values inherit from the ``default`` skin.

.. code-block:: yaml

    # Required: skin identity
    name: mytheme                         # Unique skin name (lowercase, hyphens ok)
    description: Short description        # Shown in /skin listing

    # Colors: hex values for Rich markup (banner, UI, response box)
    colors:
      banner_border: "#CD7F32"            # Panel border color
      banner_title: "#FFD700"             # Panel title text color
      banner_accent: "#FFBF00"            # Section headers (Available Tools, etc.)
      banner_dim: "#B8860B"               # Dim/muted text (separators, labels)
      banner_text: "#FFF8DC"              # Body text (tool names, skill names)
      ui_accent: "#FFBF00"               # General UI accent
      ui_label: "#4dd0e1"                # UI labels
      ui_ok: "#4caf50"                   # Success indicators
      ui_error: "#ef5350"                # Error indicators
      ui_warn: "#ffa726"                 # Warning indicators
      prompt: "#FFF8DC"                  # Prompt text color
      input_rule: "#CD7F32"              # Input area horizontal rule
      response_border: "#FFD700"         # Response box border (ANSI)
      session_label: "#DAA520"           # Session label color
      session_border: "#8B8682"          # Session ID dim color

    # Spinner: customize the animated spinner during API calls
    spinner:
      waiting_faces:                      # Faces shown while waiting for API
        - "(âš”)"
        - "(â›¨)"
      thinking_faces:                     # Faces shown during reasoning
        - "(âŒ)"
        - "(<>)"
      thinking_verbs:                     # Verbs for spinner messages
        - "forging"
        - "plotting"
      wings:                              # Optional left/right spinner decorations
        - ["âŸªâš”", "âš”âŸ«"]                  # Each entry is [left, right] pair
        - ["âŸªâ–²", "â–²âŸ«"]

    # Branding: text strings used throughout the CLI
    branding:
      agent_name: "Hermes Agent"          # Banner title, status display
      welcome: "Welcome message"          # Shown at CLI startup
      goodbye: "Goodbye! âš•"              # Shown on exit
      response_label: " âš• Hermes "       # Response box header label
      prompt_symbol: "â¯ "                # Input prompt symbol
      help_header: "(^_^)? Commands"      # /help header text

    # Tool prefix: character for tool output lines (default: â”Š)
    tool_prefix: "â”Š"

    # Tool emojis: override the default emoji for any tool (used in spinners & progress)
    tool_emojis:
      terminal: "âš”"           # Override terminal tool emoji
      web_search: "ðŸ”®"        # Override web_search tool emoji
      # Any tool not listed here uses its registry default

USAGE
=====

.. code-block:: python

    from hermes_cli.skin_engine import get_active_skin, list_skins, set_active_skin

    skin = get_active_skin()
    print(skin.colors["banner_title"])    # "#FFD700"
    print(skin.get_branding("agent_name"))  # "Hermes Agent"

    set_active_skin("ares")               # Switch to built-in ares skin
    set_active_skin("mytheme")            # Switch to user skin from ~/.hermes/skins/

BUILT-IN SKINS
==============

- ``default`` â€” Classic Hermes gold/kawaii (the current look)
- ``ares``    â€” Crimson/bronze war-god theme with custom spinner wings
- ``mono``    â€” Clean grayscale monochrome
- ``slate``   â€” Cool blue developer-focused theme

USER SKINS
==========

Drop a YAML file in ``~/.hermes/skins/<name>.yaml`` following the schema above.
Activate with ``/skin <name>`` in the CLI or ``display.skin: <name>`` in config.yaml.
N)Ú	dataclassÚfield©ÚPath)ÚAnyÚDictÚListÚOptionalÚTuple©Úget_hermes_homec                   óØ   a € ] tR t^qt o RtRt]! ]R7      t]! ]R7      t	]! ]R7      t
Rt]! ]R7      tRtRtRV 3R lR lltV 3R lR ltV 3R	 lR
 ltRV 3R lR lltV 3R ltRtV tR# )Ú
SkinConfigzComplete skin configuration.Ú )Údefault_factoryõ   â”Šc                ó,   <€ V ^8„  d   QhRS[ RS[ RS[ /# ©é   ÚkeyÚfallbackÚreturn©Ústr)ÚformatÚ__classdict__s   "€Ú3/home/ubuntu/hermes-agent/hermes_cli/skin_engine.pyÚ__annotate__ÚSkinConfig.__annotate__~   s"   ø€ ÷ .ñ .™Sð .©Cð .¹ñ .ó    c                ó8   € V P                   P                  W4      # )z Get a color value with fallback.)ÚcolorsÚget©Úselfr   r   s   &&&r   Ú	get_colorÚSkinConfig.get_color~   s   € à{‰{‰˜sÓ-Ð-r   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# )r   r   r   )r   r   )r   r   s   "€r   r   r   ‚   s   ø€ ÷ )ñ )¡Cð )©D±­Iñ )r   c                ó:   € V P                   P                  V. 4      # )z(Get a spinner list (faces, verbs, etc.).)Úspinnerr"   )r$   r   s   &&r   Úget_spinner_listÚSkinConfig.get_spinner_list‚   s   € à|‰|×Ñ  RÓ(Ð(r   c                óF   <€ V ^8„  d   QhRS[ S[S[S[3,          ,          /# ©r   r   )r   r
   r   )r   r   s   "€r   r   r   †   s!   ø€ ÷ ñ ¡4©©c±3¨h­Õ#8ñ r   c                ó  € V P                   P                  R. 4      p. pV Ff  p\        V\        \        34      '       g   K!  \        V4      ^8X  g   K3  VP                  \        V^ ,          4      \        V^,          4      34       Kh  	  V# )z.Get spinner wing pairs, or empty list if none.Úwings)r)   r"   Ú
isinstanceÚlistÚtupleÚlenÚappendr   )r$   ÚrawÚresultÚpairs   &   r   Úget_spinner_wingsÚSkinConfig.get_spinner_wings†   sj   € àl‰l×Ñ˜w¨Ó+ˆØˆÛˆDÜ˜$¤¤u ×.Ô.´3°t³9À¶>Ø—‘œs 4¨¥7›|¬S°°aµ«\Ð:Ö;ñ ð ˆr   c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[ /# r   r   )r   r   s   "€r   r   r      s"   ø€ ÷ 0ñ 0¡ð 0©sð 0¹Cñ 0r   c                ó8   € V P                   P                  W4      # )z#Get a branding value with fallback.)Úbrandingr"   r#   s   &&&r   Úget_brandingÚSkinConfig.get_branding   s   € à}‰}× Ñ  Ó/Ð/r   c                óÞ   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[S[ S[ 3,          ;R&   S[S[ S[3,          ;R&   S[S[ S[ 3,          ;R&   S[ ;R&   S[S[ S[ 3,          ;R&   S[ ;R&   S[ ;R	&   # )
r   ÚnameÚdescriptionr!   r)   r<   Útool_prefixÚtool_emojisÚbanner_logoÚbanner_hero)r   r   r   )r   r   s   "€r   r   r   q   s™   ø‡ ‚ ñ Iñ ñ Ññ	 ñ
 ‘‘cNÑ8ñ ñ ‘#‘s(^Ñ9ñ ñ ‘3™8nÑ:ñ ñ Ññ ñ ‘c™3h•Ñ=ñ ñ Ññ ñ Ñò r   © N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rA   r   Údictr!   r)   r<   rB   rC   rD   rE   r%   r*   r8   r=   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r   q   ss   ø‡ € á&à€KÙ"°4Ô8€FÙ#°DÔ9€GÙ$°TÔ:€HØ€KÙ"'¸Ô"=€KØ€KØ€K÷.ò .÷)ð )÷ð ÷0ò 0÷= ƒ r   r   Údefaultr@   rA   u"   Classic Hermes â€” gold and kawaiir!   Úbanner_borderú#CD7F32Úbanner_titleú#FFD700Úbanner_accentz#FFBF00Ú
banner_dimz#B8860BÚbanner_textú#FFF8DCÚ	ui_accentÚui_labelz#4dd0e1Úui_okz#4caf50Úui_errorz#ef5350Úui_warnz#ffa726ÚpromptÚ
input_ruleÚresponse_borderÚsession_labelz#DAA520Úsession_borderz#8B8682r)   r<   Ú
agent_namezHermes AgentÚwelcomezAWelcome to Hermes Agent! Type your message or /help for commands.Úgoodbyeõ   Goodbye! âš•Úresponse_labelu    âš• Hermes Úprompt_symbolõ   â¯ Úhelp_headerú(^_^)? Available CommandsrB   r   Úaresu$   War-god theme â€” crimson and bronzez#9F1C1Cz#C7A96Bz#DD4A3Az#6B1717z#F1E6CFz#6E584BÚwaiting_facesÚthinking_facesÚthinking_verbsr/   u   âŸªâš”u   âš”âŸ«u   âŸªâ–²u   â–²âŸ«u   âŸªâ•¸u   â•ºâŸ«u   âŸªâ›¨u   â›¨âŸ«z
Ares Agentz?Welcome to Ares Agent! Type your message or /help for commands.u   Farewell, warrior! âš”u
    âš” Ares u   âš” â¯ u   (âš”) Available Commandsu   â•ŽrD   uW  [bold #A3261F] â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—       â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ•—   â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—[/]
[bold #B73122]â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â•â•â•â–ˆâ–ˆâ•”â•â•â•â•â•      â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â•â•â• â–ˆâ–ˆâ•”â•â•â•â•â•â–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•‘â•šâ•â•â–ˆâ–ˆâ•”â•â•â•[/]
[#C93C24]â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•”â–ˆâ–ˆâ•— â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#D84A28]â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â•  â•šâ•â•â•â•â–ˆâ–ˆâ•‘â•šâ•â•â•â•â•â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â•  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#E15A2D]â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘      â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘ â•šâ–ˆâ–ˆâ–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#EB6C32]â•šâ•â•  â•šâ•â•â•šâ•â•  â•šâ•â•â•šâ•â•â•â•â•â•â•â•šâ•â•â•â•â•â•â•      â•šâ•â•  â•šâ•â• â•šâ•â•â•â•â•â• â•šâ•â•â•â•â•â•â•â•šâ•â•  â•šâ•â•â•â•   â•šâ•â•[/]rE   u  [#9F1C1C]â €â €â €â €â €â €â €â €â €â €â €â €â €â£¤â£¤â €â €â €â €â €â €â €â €â €â €â €â €â €[/]
[#9F1C1C]â €â €â €â €â €â €â €â €â €â¢€â£´â£¿â Ÿâ »â£¿â£¦â¡€â €â €â €â €â €â €â €â €â €[/]
[#C7A96B]â €â €â €â €â €â €â €â£ â£¾â¡¿â ‹â €â €â €â ™â¢¿â£·â£„â €â €â €â €â €â €â €[/]
[#C7A96B]â €â €â €â €â €â¢€â£¾â¡¿â ‹â €â €â¢ â¡„â €â €â ™â¢¿â£·â¡€â €â €â €â €â €[/]
[#DD4A3A]â €â €â €â €â£°â£¿â Ÿâ €â €â €â£°â£¿â£¿â£†â €â €â €â »â£¿â£†â €â €â €â €[/]
[#DD4A3A]â €â €â €â¢°â£¿â â €â €â¢€â£¾â¡¿â ‰â¢¿â£·â¡€â €â €â ¹â£¿â¡†â €â €â €[/]
[#9F1C1C]â €â €â €â£¿â¡Ÿâ €â €â£ â£¿â Ÿâ €â €â €â »â£¿â£„â €â €â¢»â£¿â €â €â €[/]
[#9F1C1C]â €â €â €â£¿â¡‡â €â €â ™â ‹â €â €âš”â €â €â ™â ‹â €â €â¢¸â£¿â €â €â €[/]
[#6B1717]â €â €â €â¢¿â£§â €â €â €â €â €â €â €â €â €â €â €â €â €â£¼â¡¿â €â €â €[/]
[#6B1717]â €â €â €â ˜â¢¿â£·â£„â €â €â €â €â €â €â €â €â €â£ â£¾â¡¿â ƒâ €â €â €[/]
[#C7A96B]â €â €â €â €â ˆâ »â£¿â£·â£¦â£¤â£€â£€â£¤â£¤â£¶â£¿â ¿â ‹â €â €â €â €[/]
[#C7A96B]â €â €â €â €â €â €â €â ‰â ›â ¿â ¿â ¿â ¿â ›â ‰â €â €â €â €â €â €â €[/]
[#DD4A3A]â €â €â €â €â €â €â €â €â €â €âš”â €â €â €â €â €â €â €â €â €â €[/]
[dim #6B1717]â €â €â €â €â €â €â €â €war god onlineâ €â €â €â €â €â €â €â €[/]Úmonou   Monochrome â€” clean grayscaleú#555555z#e6edf3z#aaaaaaz#444444z#c9d1d9z#888888z#ccccccz#999999z[?] Available CommandsÚslateu   Cool blue â€” developer-focusedz#4169e1z#7eb8f6z#8EA8FFz#4b5563z#63D0A6z#F7A072z#e6a855Úposeidonu)   Ocean-god theme â€” deep blue and seafoamz#2A6FB9z#A9DFFFz#5DB8F5z#153C73z#EAF7FFz#496884u   âŸªâ‰ˆu   â‰ˆâŸ«u   âŸªÎ¨u   Î¨âŸ«u   âŸªâˆ¿u   âˆ¿âŸ«u   âŸªâ—Œu   â—ŒâŸ«zPoseidon AgentzCWelcome to Poseidon Agent! Type your message or /help for commands.u   Fair winds! Î¨u    Î¨ Poseidon u   Î¨ â¯ u   (Î¨) Available Commandsu   â”‚u=  [bold #B8E8FF]â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ•—   â–ˆâ–ˆâ•—       â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ•—   â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—[/]
[bold #97D6FF]â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â•â•â•â–ˆâ–ˆâ•”â•â•â•â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•‘      â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â•â•â• â–ˆâ–ˆâ•”â•â•â•â•â•â–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•‘â•šâ•â•â–ˆâ–ˆâ•”â•â•â•[/]
[#75C1F6]â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â–ˆâ–ˆâ•— â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•”â–ˆâ–ˆâ•— â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#4FA2E0]â–ˆâ–ˆâ•”â•â•â•â• â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â•šâ•â•â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â•  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘â•šâ•â•â•â•â•â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â•  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#2E7CC7]â–ˆâ–ˆâ•‘     â•šâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â•šâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ•‘ â•šâ–ˆâ–ˆâ–ˆâ–ˆâ•‘      â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘ â•šâ–ˆâ–ˆâ–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#1B4F95]â•šâ•â•      â•šâ•â•â•â•â•â• â•šâ•â•â•â•â•â•â•â•šâ•â•â•â•â•â•â•â•šâ•â•â•šâ•â•â•â•â•â•  â•šâ•â•â•â•â•â• â•šâ•â•  â•šâ•â•â•â•      â•šâ•â•  â•šâ•â• â•šâ•â•â•â•â•â• â•šâ•â•â•â•â•â•â•â•šâ•â•  â•šâ•â•â•â•   â•šâ•â•[/]u9  [#2A6FB9]â €â €â €â €â €â €â €â €â €â €â €â¢€â£€â¡€â €â €â €â €â €â €â €â €â €â €â €[/]
[#5DB8F5]â €â €â €â €â €â €â €â €â €â£ â£¾â£¿â£·â£„â €â €â €â €â €â €â €â €â €[/]
[#5DB8F5]â €â €â €â €â €â €â €â¢ â£¿â â €Î¨â €â ¹â£¿â¡„â €â €â €â €â €â €â €[/]
[#A9DFFF]â €â €â €â €â €â €â €â£¿â¡Ÿâ €â €â €â €â €â¢»â£¿â €â €â €â €â €â €â €[/]
[#A9DFFF]â €â €â €â‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ£¿â¡‡â €â €â €â €â €â¢¸â£¿â‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ €â €â €[/]
[#5DB8F5]â €â €â €â €â €â €â €â£¿â¡‡â €â €â €â €â €â¢¸â£¿â €â €â €â €â €â €â €[/]
[#2A6FB9]â €â €â €â €â €â €â €â¢¿â£§â €â €â €â €â €â£¼â¡¿â €â €â €â €â €â €â €[/]
[#2A6FB9]â €â €â €â €â €â €â €â ˜â¢¿â£·â£„â£€â£ â£¾â¡¿â ƒâ €â €â €â €â €â €â €[/]
[#153C73]â €â €â €â €â €â €â €â €â ˆâ »â£¿â£¿â¡¿â Ÿâ â €â €â €â €â €â €â €â €[/]
[#153C73]â €â €â €â €â €â €â €â €â €â €â ˆâ â €â €â €â €â €â €â €â €â €â €â €[/]
[#5DB8F5]â €â €â €â €â €â‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ €â €â €â €â €[/]
[#A9DFFF]â €â €â €â €â €â €â‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ‰ˆâ €â €â €â €â €â €[/]
[dim #153C73]â €â €â €â €â €â €â €deep waters holdâ €â €â €â €â €â €â €[/]Úsisyphusu6   Sisyphean theme â€” austere grayscale with persistencez#B7B7B7z#F5F5F5z#E7E7E7z#4A4A4Az#D3D3D3z#919191z#656565u   âŸªâ—‰u   â—‰âŸ«u   âŸªâ—¬u   â—¬âŸ«u   âŸªâ¬¤u   â¬¤âŸ«zSisyphus AgentzCWelcome to Sisyphus Agent! Type your message or /help for commands.u   The boulder waits. â—‰u    â—‰ Sisyphus u   â—‰ â¯ u   (â—‰) Available Commandsu  [bold #F5F5F5]â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•—   â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ•—  â–ˆâ–ˆâ•—â–ˆâ–ˆâ•—   â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—       â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ•—   â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—[/]
[bold #E7E7E7]â–ˆâ–ˆâ•”â•â•â•â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â•â•â•â•šâ–ˆâ–ˆâ•— â–ˆâ–ˆâ•”â•â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â•â•â•      â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â•â•â• â–ˆâ–ˆâ•”â•â•â•â•â•â–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•‘â•šâ•â•â–ˆâ–ˆâ•”â•â•â•[/]
[#D7D7D7]â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â•šâ–ˆâ–ˆâ–ˆâ–ˆâ•”â• â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•”â–ˆâ–ˆâ•— â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#BFBFBF]â•šâ•â•â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘â•šâ•â•â•â•â–ˆâ–ˆâ•‘  â•šâ–ˆâ–ˆâ•”â•  â–ˆâ–ˆâ•”â•â•â•â• â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â•šâ•â•â•â•â–ˆâ–ˆâ•‘â•šâ•â•â•â•â•â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â•  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#8F8F8F]â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘     â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘      â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘ â•šâ–ˆâ–ˆâ–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#626262]â•šâ•â•â•â•â•â•â•â•šâ•â•â•šâ•â•â•â•â•â•â•   â•šâ•â•   â•šâ•â•     â•šâ•â•  â•šâ•â• â•šâ•â•â•â•â•â• â•šâ•â•â•â•â•â•â•      â•šâ•â•  â•šâ•â• â•šâ•â•â•â•â•â• â•šâ•â•â•â•â•â•â•â•šâ•â•  â•šâ•â•â•â•   â•šâ•â•[/]ur  [#B7B7B7]â €â €â €â €â €â €â €â €â €â €â¢€â£€â£€â£€â¡€â €â €â €â €â €â €â €â €â €â €[/]
[#D3D3D3]â €â €â €â €â €â €â €â£ â£¾â£¿â£¿â£¿â£¿â£·â£„â €â €â €â €â €â €â €â €[/]
[#E7E7E7]â €â €â €â €â €â €â£¾â£¿â£¿â£¿â£¿â£¿â£¿â£¿â£·â €â €â €â €â €â €â €[/]
[#F5F5F5]â €â €â €â €â €â¢¸â£¿â£¿â£¿â£¿â£¿â£¿â£¿â£¿â£¿â¡‡â €â €â €â €â €â €[/]
[#E7E7E7]â €â €â €â €â €â €â£¿â£¿â£¿â£¿â£¿â£¿â£¿â£¿â£¿â €â €â €â €â €â €â €[/]
[#D3D3D3]â €â €â €â €â €â €â ˜â¢¿â£¿â£¿â£¿â£¿â£¿â¡¿â ƒâ €â €â €â €â €â €â €[/]
[#B7B7B7]â €â €â €â €â €â €â €â €â ™â ¿â£¿â ¿â ‹â €â €â €â €â €â €â €â €â €[/]
[#919191]â €â €â €â €â €â €â €â €â €â €â €â €â €â €â €â €â €â €â €â €â €â €[/]
[#656565]â €â €â €â €â €â €â €â €â €â£°â¡„â €â €â €â €â €â €â €â €â €â €â €[/]
[#656565]â €â €â €â €â €â €â €â €â£°â£¿â£¿â£†â €â €â €â €â €â €â €â €â €â €[/]
[#4A4A4A]â €â €â €â €â €â €â €â£°â£¿â£¿â£¿â£¿â£†â €â €â €â €â €â €â €â €â €[/]
[#4A4A4A]â €â €â €â €â €â£€â£´â£¿â£¿â£¿â£¿â£¿â£¿â£¦â£€â €â €â €â €â €â €[/]
[#656565]â €â €â €â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â”â €â €â €[/]
[dim #4A4A4A]â €â €â €â €â €â €â €â €â €the boulderâ €â €â €â €â €â €â €â €â €[/]Ú	charizardu)   Volcanic theme â€” burnt orange and emberz#C75B1Dz#FFD39Az#F29C38z#7A3511z#FFF0D4z#6C4724u   âŸªâœ¦u   âœ¦âŸ«u   âŸªâ—‡u   â—‡âŸ«zCharizard AgentzDWelcome to Charizard Agent! Type your message or /help for commands.u   Flame out! âœ¦u    âœ¦ Charizard u   âœ¦ â¯ u   (âœ¦) Available Commandsu  [bold #FFF0D4] â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•—  â–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—        â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•— â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ•—   â–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—[/]
[bold #FFD39A]â–ˆâ–ˆâ•”â•â•â•â•â•â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘â•šâ•â•â–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—      â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•”â•â•â•â•â• â–ˆâ–ˆâ•”â•â•â•â•â•â–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•‘â•šâ•â•â–ˆâ–ˆâ•”â•â•â•[/]
[#F29C38]â–ˆâ–ˆâ•‘     â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ–ˆâ•”â• â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—  â–ˆâ–ˆâ•”â–ˆâ–ˆâ•— â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#E2832B]â–ˆâ–ˆâ•‘     â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘ â–ˆâ–ˆâ–ˆâ•”â•  â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â•šâ•â•â•â•â•â–ˆâ–ˆâ•”â•â•â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•”â•â•â•  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#C75B1D]â•šâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•      â–ˆâ–ˆâ•‘  â–ˆâ–ˆâ•‘â•šâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•”â•â–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ–ˆâ•—â–ˆâ–ˆâ•‘ â•šâ–ˆâ–ˆâ–ˆâ–ˆâ•‘   â–ˆâ–ˆâ•‘[/]
[#7A3511] â•šâ•â•â•â•â•â•â•šâ•â•  â•šâ•â•â•šâ•â•  â•šâ•â•â•šâ•â•  â•šâ•â•â•šâ•â•â•šâ•â•â•â•â•â•â•â•šâ•â•  â•šâ•â•â•šâ•â•  â•šâ•â•â•šâ•â•â•â•â•â•       â•šâ•â•  â•šâ•â• â•šâ•â•â•â•â•â• â•šâ•â•â•â•â•â•â•â•šâ•â•  â•šâ•â•â•â•   â•šâ•â•[/]uè  [#FFD39A]â €â €â €â €â €â €â €â €â£€â£¤â ¶â ¶â ¶â£¤â£€â €â €â €â €â €â €â €â €[/]
[#F29C38]â €â €â €â €â €â €â£´â Ÿâ â €â €â €â €â ˆâ »â£¦â €â €â €â €â €â €[/]
[#F29C38]â €â €â €â €â €â£¼â â €â €â €âœ¦â €â €â €â €â ¹â£§â €â €â €â €â €[/]
[#E2832B]â €â €â €â €â¢°â¡Ÿâ €â €â£€â£¤â£¤â£¤â£€â €â €â €â¢»â¡†â €â €â €â €[/]
[#E2832B]â €â €â£ â¡¾â ›â â£ â£¾â Ÿâ ‰â €â ‰â »â£·â£„â €â ˆâ ›â¢·â£„â €â €[/]
[#C75B1D]â €â£¼â Ÿâ €â¢€â£¾â Ÿâ â €â €â €â €â €â ˆâ »â£·â¡€â €â »â£§â €[/]
[#C75B1D]â¢¸â¡Ÿâ €â €â£¿â¡Ÿâ €â €â €ðŸ”¥â €â €â €â €â¢»â£¿â €â €â¢»â¡‡[/]
[#7A3511]â €â »â£¦â¡€â ˜â¢¿â£§â¡€â €â €â €â €â €â¢€â£¼â¡¿â ƒâ¢€â£´â Ÿâ €[/]
[#7A3511]â €â €â ˆâ »â£¦â£€â ™â¢¿â£·â£¤â£¤â£¤â£¾â¡¿â ‹â£€â£´â Ÿâ â €â €[/]
[#C75B1D]â €â €â €â €â ˆâ ™â ›â ¶â ¤â ­â ­â ¤â ¶â ›â ‹â â €â €â €â €[/]
[#F29C38]â €â €â €â €â €â €â €â €â£°â¡¿â¢¿â£†â €â €â €â €â €â €â €â €â €[/]
[#F29C38]â €â €â €â €â €â €â €â£¼â¡Ÿâ €â €â¢»â£§â €â €â €â €â €â €â €â €[/]
[dim #7A3511]â €â €â €â €â €â €â €tail flame litâ €â €â €â €â €â €â €â €[/]c                ó$   € V ^8„  d   QhR\         /# r-   r   )r   s   "r   r   r     s   € ÷ 'ñ '”Dñ 'r   c                 ó$   € \        4       R,          # )zUser skins directory.Úskinsr   rF   r   r   Ú
_skins_dirry     s   € äÓ˜wÕ&Ð&r   c                óh   € V ^8„  d   QhR\         R\        \        \        \        3,          ,          /# )r   Úpathr   )r   r	   r   r   r   )r   s   "r   r   r   	  s'   € ÷ 
ñ 
œtð 
¬´´c¼3°hµÕ(@ñ 
r   c                ó2  €  ^ RI p\        V RRR7      ;_uu_ 4       pVP                  V4      pRRR4       \        X\        4      '       d
   RV9   d   V# R#   + '       g   i     L1; i  \
         d"   p\        P                  RY4        Rp?R# Rp?ii ; i)z(Load a skin definition from a YAML file.NÚrzutf-8)Úencodingr@   zFailed to load skin from %s: %s)ÚyamlÚopenÚ	safe_loadr0   rL   Ú	ExceptionÚloggerÚdebug)r{   r   ÚfÚdataÚes   &    r   Ú_load_skin_from_yamlrˆ   	  s}   € ðAÛÜ$˜ g×.Õ.°!Ø—>‘> !Ó$ˆD÷ /ädœD×!Ò! f°¤nØˆKñ ÷ /×.ûô ô AÜ‰Ð6¸×@Ð@ÙûðAús-   ‚A* œA®&A* ÁA'	Á"A* Á*BÁ5BÂBc                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# )r   r†   r   )r   r   r   r   )r   s   "r   r   r     s"   € ÷ ñ œT¤#¤s (^ð ´
ñ r   c                óŒ  € \         R,          p\        VP                  R/ 4      4      pVP                  V P                  R/ 4      4       \        VP                  R/ 4      4      pVP                  V P                  R/ 4      4       \        VP                  R/ 4      4      pVP                  V P                  R/ 4      4       \	        V P                  RR4      V P                  RR4      VVVV P                  R	VP                  R	R
4      4      V P                  R/ 4      V P                  RR4      V P                  RR4      R7	      # )zBBuild a SkinConfig from a raw dict (built-in or loaded from YAML).rP   r!   r)   r<   r@   ÚunknownrA   r   rB   r   rC   rD   rE   )	r@   rA   r!   r)   r<   rB   rC   rD   rE   )Ú_BUILTIN_SKINSrL   r"   Úupdater   )r†   rP   r!   r)   r<   s   &    r   Ú_build_skin_configrŽ     s  € ô ˜YÕ'€GÜ'—+‘+˜h¨Ó+Ó,€FØ
‡MM$—(‘(˜8 RÓ(Ô)Ü7—;‘;˜y¨"Ó-Ó.€GØ‡NN4—8‘8˜I rÓ*Ô+ÜG—K‘K 
¨BÓ/Ó0€HØ‡OOD—H‘H˜Z¨Ó,Ô-äØX‰Xf˜iÓ(Ø—H‘H˜]¨BÓ/ØØØØ—H‘H˜]¨G¯K©K¸ÀuÓ,MÓNØ—H‘H˜]¨BÓ/Ø—H‘H˜]¨BÓ/Ø—H‘H˜]¨BÓ/ô
ð 
r   c                ó\   € V ^8„  d   QhR\         \        \        \        3,          ,          /# r-   )r   r   r   )r   s   "r   r   r   .  s    € ÷ ñ ”Dœœc¤3˜hÕ(ñ r   c            
     óJ  a€ . p \         P                  4        F,  w  rV P                  RVRVP                  RR4      RR/4       K.  	  \	        4       pVP                  4       '       d¼   \        VP                  R4      4       F  p\        V4      pV'       g   K  VP                  RVP                  4      o\        ;QJ d    V3R lV  4       F  '       g   K   RM	  R	M! V3R lV  4       4      '       d   Kv  V P                  RSRVP                  RR4      RR
/4       KŸ  	  V # )z†List all available skins (built-in + user-installed).

Returns list of {"name": ..., "description": ..., "source": "builtin"|"user"}.
r@   rA   r   ÚsourceÚbuiltinz*.yamlc              3   ó:   <"  € T F  qR ,          S8H  x € K  	  R# 5i)r@   NrF   )Ú.0ÚsÚ	skin_names   & €r   Ú	<genexpr>Úlist_skins.<locals>.<genexpr>B  s   øé € Ð>±v°!˜•y IÖ-³vùs   ƒTFÚuser)rŒ   Úitemsr4   r"   ry   Úis_dirÚsortedÚglobrˆ   ÚstemÚany)r6   r@   r†   Ú
skins_pathr…   r–   s        @r   Ú
list_skinsr¡   .  só   ø€ ð
 €FÜ$×*Ñ*Ö,‰
ˆØ‰ØDØ˜4Ÿ8™8 M°2Ó6Øið
ö 	ñ -ô “€JØ×Ñ×ÒÜ˜
Ÿ™¨Ó1Ö2ˆAÜ'¨Ó*ˆDß‰tØ ŸH™H V¨Q¯V©VÓ4	ç“3Ô>±vÓ>—3—3’3Ô>±vÓ>×>Ò>ÙØ—‘Ø˜IØ! 4§8¡8¨M¸2Ó#>Ø˜fðö ñ 3ð €Mr   c                ó0   € V ^8„  d   QhR\         R\        /# ©r   r@   r   ©r   r   )r   s   "r   r   r   M  s   € ÷ 9ñ 9”Cð 9œJñ 9r   c                ó.  € \        4       pW R2,          pVP                  4       '       d   \        V4      pV'       d   \        V4      # V \        9   d   \        \        V ,          4      # \
        P                  RV 4       \        \        R,          4      # )z<Load a skin by name. Checks user skins first, then built-in.z.yamlz"Skin '%s' not found, using defaultrP   )ry   Úis_filerˆ   rŽ   rŒ   rƒ   Úwarning)r@   r    Ú	user_filer†   s   &   r   Ú	load_skinr©   M  s{   € ô “€JØ˜v U˜^Õ+€IØ×Ñ×ÒÜ# IÓ.ˆßÜ% dÓ+Ð+ð Œ~ÔÜ!¤.°Õ"6Ó7Ð7ô ‡NNÐ7¸Ô>Üœn¨YÕ7Ó8Ð8r   c                ó$   € V ^8„  d   QhR\         /# r-   )r   )r   s   "r   r   r   `  s   € ÷ ñ œñ r   c                 ó<   € \         f   \        \        4      s \         # )z.Get the currently active skin config (cached).)Ú_active_skinr©   Ú_active_skin_namerF   r   r   Úget_active_skinr®   `  s   € ô ÒÜ Ô!2Ó3ˆÜÐr   c                ó0   € V ^8„  d   QhR\         R\        /# r£   r¤   )r   s   "r   r   r   h  s   € ÷ ñ œ#ð ¤*ñ r   c                ó(   € V s \        V 4      s\        # )z3Switch the active skin. Returns the new SkinConfig.)r­   r©   r¬   )r@   s   &r   Úset_active_skinr±   h  s   € ð ÐÜ˜T“?€LÜÐr   c                ó$   € V ^8„  d   QhR\         /# r-   r   )r   s   "r   r   r   p  s   € ÷ ñ œcñ r   c                 ó   € \         # )z*Get the name of the currently active skin.)r­   rF   r   r   Úget_active_skin_namer´   p  s   € äÐr   c                ó(   € V ^8„  d   QhR\         RR/# )r   Úconfigr   N)rL   )r   s   "r   r   r   u  s   € ÷ 
#ñ 
#¤$ð 
#¨4ñ 
#r   c                óò   € V P                  R/ 4      pVP                  RR4      p\        V\        4      '       d2   VP                  4       '       d   \	        VP                  4       4       R# \	        R4       R# )ztInitialize the active skin from CLI config at startup.

Call this once during CLI init with the loaded config dict.
ÚdisplayÚskinrP   N)r"   r0   r   Ústripr±   )r¶   r¸   r–   s   &  r   Úinit_skin_from_configr»   u  sT   € ð
 j‰j˜ BÓ'€GØ—‘˜F IÓ.€IÜ)œS×!Ò! i§o¡o×&7Ò&7Ü˜	Ÿ™Ó)Ö*ä˜	Ö"r   c                ó0   € V ^8„  d   QhR\         R\         /# ©r   r   r   r   )r   s   "r   r   r   ‡  s   € ÷ ñ ¤sð ¼ñ r   c                ó^   €  \        4       P                  RV 4      #   \         d    T u # i ; i)z7Get the interactive prompt symbol from the active skin.rh   ©r®   r=   r‚   ©r   s   &r   Úget_active_prompt_symbolrÁ   ‡  s1   € ðÜÓ ×-Ñ-¨o¸xÓHÐHøÜô ØŠðúó   ‚ œ,«,c                ó0   € V ^8„  d   QhR\         R\         /# r½   r   )r   s   "r   r   r     s   € ÷ ñ ¤Sð Ì3ñ r   c                ó^   €  \        4       P                  RV 4      #   \         d    T u # i ; i)z*Get the /help header from the active skin.rj   r¿   rÀ   s   &r   Úget_active_help_headerrÅ     s1   € ðÜÓ ×-Ñ-¨m¸XÓFÐFøÜô ØŠðúrÂ   c                ó0   € V ^8„  d   QhR\         R\         /# r½   r   )r   s   "r   r   r   ™  s   € ÷ ñ ¤ð ¼#ñ r   c                ó^   €  \        4       P                  RV 4      #   \         d    T u # i ; i)z*Get the goodbye line from the active skin.re   r¿   rÀ   s   &r   Úget_active_goodbyerÈ   ™  s1   € ðÜÓ ×-Ñ-¨i¸ÓBÐBøÜô ØŠðúrÂ   c                óF   € V ^8„  d   QhR\         \        \        3,          /# r-   )r   r   )r   s   "r   r   r   ¢  s   € ÷ 2ñ 2¬D´´c°­Nñ 2r   c                 ón  €  \        4       p T P                  RR4      pT P                  RR4      pT P                  RR4      pT P                  RT4      pT P                  RR	4      pT P                  R
T4      pT P                  RR4      pT P                  RR4      p/ RTbRT R2bRTbRT R2bRT R2bRTbRT R2bRRT 2bRRT 2bRRT 2bRRT 2bRRT 2bRTbRT R2bR T R2bR!TbR"T R2bR#T R2R$TR%T R2R&TR'T R2R(TR)TR*T R2R+T R2R,T R2R-TR.T R2/C#   \         d    / u # i ; i)/zÒReturn prompt_toolkit style overrides derived from the active skin.

These are layered on top of the CLI's base TUI style so /skin can refresh
the live prompt_toolkit UI immediately without rebuilding the app.
r^   rX   r_   rR   rS   rT   rW   rV   rq   rZ   r]   z#FF8C00r\   z#FF6B6Bz
input-areaÚplaceholderz italiczprompt-workingÚhintz
input-rulezimage-badgez boldzcompletion-menuzbg:#1a1a2e zcompletion-menu.completionz"completion-menu.completion.currentzbg:#333355 zcompletion-menu.meta.completionz'completion-menu.meta.completion.currentzclarify-borderzclarify-titlezclarify-questionzclarify-choicezclarify-selectedzclarify-active-otherzclarify-countdownzsudo-promptzsudo-borderz
sudo-titlez	sudo-textzapproval-borderzapproval-titlezapproval-desczapproval-cmdzapproval-choicezapproval-selected)r®   r‚   r%   )	r¹   r^   r_   ÚtitleÚtextÚdimÚlabelÚwarnÚerrors	            r   Ú"get_prompt_toolkit_style_overridesrÓ   ¢  s4  € ðÜÓ ˆð ^‰^˜H iÓ0€FØ—‘ ¨iÓ8€JØN‰N˜>¨9Ó5€EØ>‰>˜-¨Ó0€DØ
.‰.˜ yÓ
1€CØN‰N˜: uÓ-€EØ>‰>˜) YÓ/€DØN‰N˜: yÓ1€EðØfðà˜#˜˜gðð 	&ðð 	˜S˜E ˜/ð	ð
 	3%wðð 	jðð 	˜%˜ ðð 	˜[¨¨Ð/ðð 	%¨°D°6Ð&:ðð 	-°¸E¸7Ð.Cðð 	*¨[¸¸Ð+>ðð 	2°[ÀÀÐ3Hðð 	˜*ðð 	˜E˜7 %˜ðð 	˜t˜f E˜Nðð  	˜#ð!ð" 	˜u˜g U˜Oð#ð$ 	 5 '¨Ð 1Ø˜ZØ˜%˜ ØzØ˜˜˜uoØTØ˜:Ø˜T˜F %˜.Ø˜D˜6 ˜Ø˜3˜%˜w˜Ø˜3Ø ˜w e˜_ñ;ð øô ô ØŠ	ðús   ‚
D$ Ä$D4Ä3D4c                óê   € V ^8„  d   Qh/ ^ \         9   d,   \        \        \        \        \        3,          3,          ;R&   ^\         9   d   \        \
        ,          ;R&   ^\         9   d
   \        ;R&   # )r   rŒ   r¬   r­   )Ú__conditional_annotations__r   r   r   r	   r   )r   s   "r   r   r      sk   € ÷ _ñ _÷naò a””Sœ$œs¤C˜x.Ð(Õ)ñ año_÷~ *Ò )Œh”zÕ"Ñ )ñ_÷@ #Ò "”3Ñ "òA_r   )õ   (âš”)õ   (â›¨)õ   (â–²)ú(<>)z(/))rÖ   r×   rØ   õ   (âŒ)rÙ   )ÚforgingÚmarchingzsizing the fieldzholding the linezhammering plansztempering steelzplotting impactzraising the shield)õ   (â‰ˆ)õ   (Î¨)õ   (âˆ¿)õ   (â—Œ)u   (â— ))rÞ   rß   rÝ   rÚ   rà   )zcharting currentszsounding the depthzreading foam lineszsteering the tridentztracking undertowzplotting sea laneszcalling the swellzmeasuring pressure)õ   (â—‰)rà   õ   (â—¬)u   (â¬¤)z(::))rá   râ   rà   u   (â—‹)u   (â—))zfinding tractionzmeasuring the gradezresetting the boulderzcounting the ascentztesting leveragezsetting the shoulderzpushing uphillzenduring the loop)õ   (âœ¦)rØ   õ   (â—‡)rÙ   õ   (ðŸ”¥))rã   rØ   rä   rÚ   rå   )zbanking into the draftzmeasuring burnzreading the updraftztracking ember fallzsetting wing anglezholding the flame corezplotting a hot landingzcoiling for lift)ri   )rk   )rf   )&rÕ   rK   ÚloggingÚosÚdataclassesr   r   Úpathlibr   Útypingr   r   r   r	   r
   Úhermes_constantsr   Ú	getLoggerrG   rƒ   r   rŒ   r¬   r­   ry   rˆ   rŽ   r¡   r©   r®   r±   r´   r»   rÁ   rÅ   rÈ   rÓ   r   )rÕ   s   @r   Ú<module>rí      sw  øðö_óB Û 	ß (Ý ß 3Õ 3å ,à	×	Ò	˜8Ó	$€ð ÷0ð 0ó ð0ðN Ø	ØÐ;ØØ˜YØ˜IØ˜YØ˜)Ø˜9Ø˜Ø˜	ØYØ˜	ØyØiØ˜)Ø˜yØ˜YØ˜ið
ð" 	ð 
ð 	Ø˜.ØÐZØ~Ø˜nØ˜VØÐ6ð
ð 	uð? ðB ØØÐ=ØØ˜YØ˜IØ˜YØ˜)Ø˜9Ø˜Ø˜	ØYØ˜	ØyØiØ˜)Ø˜yØ˜YØ˜ið
ð" 	ØÒGØÒJØò ð Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$ð	ð
ð 	Ø˜,ØÐXØÐ/Ø˜lØ˜ZØÐ5ð
ð 	uØð Wð 	ð Rðc?ð@ ØØÐ7ØØ˜YØ˜IØ˜YØ˜)Ø˜9Ø˜Ø˜	ØYØ˜	ØyØiØ˜)Ø˜yØ˜YØ˜ið
ð" 	2ØØ˜.ØÐZØ~Ø˜nØ˜VØÐ3ð
ð 	uð;ð> ØØÐ8ØØ˜YØ˜IØ˜YØ˜)Ø˜9Ø˜Ø˜	ØYØ˜	ØyØiØ˜)Ø˜yØ˜YØ˜ið
ð" 	2ØØ˜.ØÐZØ~Ø˜nØ˜VØÐ6ð
ð 	uð;ð> Ø
ØÐBØØ˜YØ˜IØ˜YØ˜)Ø˜9Ø˜Ø˜	ØYØ˜	ØyØiØ˜)Ø˜yØ˜YØ˜ið
ð" 	ØÒIØÒJØò ð
 Ø˜8Ð$Ø˜'Ð"Ø˜8Ð$Ø˜8Ð$ð	ð
ð 	ØÐ*ØÐ\ØÐ'Ø˜oØ˜YØÐ4ð
ð 	uØð dð 	ð Nðe?ð@ Ø
ØÐOØØ˜YØ˜IØ˜YØ˜)Ø˜9Ø˜Ø˜	ØYØ˜	ØyØiØ˜)Ø˜yØ˜YØ˜ið
ð" 	ØÒIØÒKØò ð
 Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$ð	ð
ð 	ØÐ*ØÐ\ØÐ/ØÐ.Ø˜ZØÐ5ð
ð 	uØð Xð 	ð Uðe@ðB ØØÐBØØ˜YØ˜IØ˜YØ˜)Ø˜9Ø˜Ø˜	ØYØ˜	ØyØiØ˜)Ø˜yØ˜YØ˜ið
ð" 	ØÒJØÒLØò ð
 Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$Ø˜8Ð$ð	ð
ð 	ØÐ+ØÐ]ØÐ'ØÐ/Ø˜ZØÐ5ð
ð 	uØð pð 	ð Oðe?ðC	a-€ó aðP &*€Ó )Ø"Ð Ó "õ'õ

õõ0õ>9õ&õõõ

#÷$÷÷÷2r   