
    +i^                        d 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m	Z	 dZ
ddidd	idd
idd
idd
idZ G d d      ZdZdedefdZdedefdZ	 	 d2dededededededefdZd3dededededef
dZdedefdZd4dedededefdZdedededefd Zd!ed"edefd#Zed$k(  rddlZ ej8                  d%&      Zej=                  dd'(       ej=                  d)d*edd+,       ej=                  d-d.dd/gdd01       ej?                         Z  ee jB                  e jD                  e jF                        Z$ e%e$       yy)5a  
Design System Generator - Aggregates search results and applies reasoning
to generate comprehensive design system recommendations.

Usage:
    from design_system import generate_design_system
    result = generate_design_system("SaaS dashboard", "My Project")
    
    # With persistence (Master + Overrides pattern)
    result = generate_design_system("SaaS dashboard", "My Project", persist=True)
    result = generate_design_system("SaaS dashboard", "My Project", persist=True, page="dashboard")
    N)datetime)Path)searchDATA_DIRzui-reasoning.csvmax_results         )productstylecolorlanding
typographyc                       e Zd ZdZd ZdefdZddededefdZ	d	edefd
Z
d	ededefdZdededefdZdedefdZddededefdZy)DesignSystemGeneratorzAGenerates design system recommendations from aggregated searches.c                 .    | j                         | _        y N)_load_reasoningreasoning_data)selfs    A/home/jay/.agents/skills/frontend-design/scripts/design_system.py__init__zDesignSystemGenerator.__init__(   s    "224    returnc                     t         t        z  }|j                         sg S t        |dd      5 }t	        t        j                  |            cddd       S # 1 sw Y   yxY w)zLoad reasoning rules from CSV.rutf-8encodingN)r   REASONING_FILEexistsopenlistcsv
DictReader)r   filepathfs      r   r   z%DesignSystemGenerator._load_reasoning+   sO    n, I(C'2 	+aq)*	+ 	+ 	+s   AANquerystyle_priorityc                     i }t         j                         D ]R  \  }}|dk(  r5|r3|rdj                  |dd       n|}| d| }t        |||d         ||<   @t        |||d         ||<   T |S )z)Execute searches across multiple domains.r    Nr
   r   )SEARCH_CONFIGitemsjoinr   )r   r(   r)   resultsdomainconfigpriority_querycombined_querys           r   _multi_domain_searchz*DesignSystemGenerator._multi_domain_search3   s    +113 	ONFF ^AO.!*<!=UZ$)7!N+;!<"(AV"W"(}8M"N	O r   categoryc                    |j                         | j                  D ])  }|j                  dd      j                         k(  s'|c S  | j                  D ].  }|j                  dd      j                         }|v s|v s,|c S  | j                  D ]j  }|j                  dd      j                         }|j                  dd      j                  dd      j	                         }t        fd|D              sh|c S  i S )z,Find matching reasoning rule for a category.UI_Category /r+   -c              3   &   K   | ]  }|v  
 y wr    ).0kwcategory_lowers     r   	<genexpr>z=DesignSystemGenerator._find_reasoning_rule.<locals>.<genexpr>S   s     ;B2';   )lowerr   getreplacesplitany)r   r5   ruleui_catkeywordsr?   s        @r   _find_reasoning_rulez*DesignSystemGenerator._find_reasoning_rule@   s    !) '' 	Dxxr*002nD	
 '' 	DXXmR0668F'>V+C	 '' 	DXXmR0668F~~c3/77SAGGIH;(;;		 	r   search_resultsc                    | j                  |      }|sdddgddddi dd	S i }	 t        j                  |j                  d
d            }|j                  dd      |j                  dd      j                  d      D cg c]  }|j                          c}|j                  dd      |j                  dd      |j                  dd      |j                  dd      ||j                  dd      d	S # t        j                  $ r Y w xY wc c}w )z(Apply reasoning rules to search results.Hero + Features + CTA
MinimalismzFlat DesignProfessionalCleanzSubtle hover transitionsr8   MEDIUM)patternr)   
color_moodtypography_moodkey_effectsanti_patternsdecision_rulesseverityDecision_Rulesz{}Recommended_PatternStyle_Priority+
Color_MoodTypography_MoodKey_EffectsAnti_PatternsSeverity)rJ   jsonloadsrC   JSONDecodeErrorrE   strip)r   r5   rK   rG   rW   ss         r   _apply_reasoningz&DesignSystemGenerator._apply_reasoningX   s   ((22#/"?,#*9!#"$$	 	 	!ZZ1A4(HIN
 xx 5r:26((;KR2P2V2VWZ2[\Qqwwy\((<4#xx(92>88M26!XXor:,X6	
 		
 ## 		
 ]s   %C/ =D/DDr/   priority_keywordsc                    |si S |s|d   S |D ]U  }|j                         j                         }|D ]0  }|j                  dd      j                         }||v s||v s,|c c S  W g }|D ]  }t        |      j                         }d}	|D ]z  }
|
j                         j                         }||j                  dd      j                         v r|	dz  }	I||j                  dd      j                         v r|	dz  }	q||v sv|	dz  }	| |j	                  |	|f        |j                  d d	
       |r|d   d   dkD  r|d   d   S |d   S )z7Select best matching result based on priority keywords.r   Style Categoryr8   
   Keywordsr	   r   c                     | d   S )Nr   r<   )xs    r   <lambda>z:DesignSystemGenerator._select_best_match.<locals>.<lambda>   s
    !A$ r   T)keyreverse)rB   re   rC   strappendsort)r   r/   rh   prioritypriority_lowerresult
style_namescored
result_strscorer>   kw_lowers               r   _select_best_matchz(DesignSystemGenerator._select_best_matchz   sr   I 1: * 	"H%^^-335N! "#ZZ(8"=CCE
!Z/:3O!M"	"  	+FV**,JE' 
88:++-vzz*:B?EEGGRKEJ!;!A!A!CCQJE+QJE
 MM5&/*	+  	5%&)A,*:vay|J
Jr   search_resultc                 &    |j                  dg       S )z-Extract results list from search result dict.r/   )rC   )r   r~   s     r   _extract_resultsz&DesignSystemGenerator._extract_results   s      B//r   project_namec                    t        |dd      }|j                  dg       }d}|r|d   j                  dd      }| j                  |i       }|j                  dg       }| j                  ||      }||d<   | j	                  |j                  di             }	| j	                  |j                  d	i             }
| j	                  |j                  d
i             }| j	                  |j                  di             }| j                  |	|j                  dg             }|
r|
d   ni }|r|d   ni }|r|d   ni }|j                  dd      }|j                  dd      }|r|n|}|xs |j                         ||j                  d|j                  dd            |j                  dd      |j                  dd      |j                  dd      |j                  dd      d|j                  dd      |j                  dd      ||j                  dd      |j                  dd      |j                  dd      |j                  dd      d |j                  d!d"      |j                  d#d$      |j                  d%d&      |j                  d'd(      |j                  d)d*      |j                  d+d      d,|j                  d-d.      |j                  d/d.      |j                  d0|j                  d1d            |j                  dd      |j                  d2d      |j                  d3d      d4||j                  d5d      |j                  d6i       |j                  d7d8      d9
S ):z/Generate complete design system recommendation.r   r   r/   Generalr   zProduct Typer)   r   r   r   r   Effects & Animationr8   rU   zPattern NamerR   rM   Section OrderzHero > Features > CTAPrimary CTA Placementz
Above foldColor StrategyzConversion Optimization)namesectionscta_placementcolor_strategy
conversionrj   rN   Typerl   Best ForPerformanceAccessibility)r   typeeffectsrI   best_forperformanceaccessibilityzPrimary (Hex)#2563EBzSecondary (Hex)#3B82F6z	CTA (Hex)#F97316zBackground (Hex)#F8FAFCz
Text (Hex)#1E293BNotes)primary	secondarycta
backgroundtextnoteszHeading FontInterz	Body FontzMood/Style KeywordsrT   zGoogle Fonts URLz
CSS Import)headingbodymoodr   google_fonts_url
css_importrV   rW   rX   rQ   )
r   r5   rR   r   colorsr   rU   rV   rW   rX   )r   rC   rg   r4   r   r}   upper)r   r(   r   product_resultproduct_resultsr5   	reasoningr)   rK   style_resultscolor_resultstypography_resultslanding_results
best_style
best_colorbest_typographybest_landingstyle_effectsreasoning_effectscombined_effectss                       r   generatezDesignSystemGenerator.generate   s\     y!4(,,Y;&q)--niHH ))(B7	"'7< 225.I$2y! --n.@.@".MN--n.@.@".MN!22>3E3ElTV3WX//0B0B9b0QR,,]IMMJZ\^<_`
)6]1%B
3E,Q/2-<q)" #'<bA%MM-<,9=?P )9EKKM $((yRi9jk(,,_>UV!-!1!12I<!X"."2"23CR"H*../H"M #'7F"vy9(&NN:r:&NN:r:)~~mR@!+!D &>>/9E'^^,=yI!~~k9=(nn-?K"|Y?#4 +..~wG'++KA'++,A9==QbdfCgh+//
B?$3$7$78JB$O-11,C ,&]]?B?'mm,<bA!j(;M'
 '	
r   r   )__name__
__module____qualname____doc__r   r#   r   rr   dictr4   rJ   rg   r}   r   r   r<   r   r   r   r   %   s    K5+ +# t t S T 0 
  
d  
t  
D#K$ #K4 #KD #KJ0d 0t 0I
c I
 I
 I
r   r   Z   design_systemr   c           	         | j                  dd      }| j                  di       }| j                  di       }| j                  di       }| j                  di       }| j                  dd      }| j                  d	d      }d
t        dt        dt        dt        fd}|j                  dd      j	                  d      }	|	D 
cg c]#  }
|
j                         s|
j                         % }	}
g }t        dz
  }|j                  dd|z  z   dz          |j                  d| dj                  t              dz          |j                  dd|z  z   dz          |j                  ddt        z  z   dz          |j                  d|j                  dd       j                  t              dz          |j                  d      r:|j                  d|j                  dd       j                  t              dz          |j                  d      r:|j                  d|j                  dd       j                  t              dz          |j                  dj                  t              dz          t        |	d      D ]2  \  }}|j                  d| d | j                  t              dz          4 |j                  ddt        z  z   dz          |j                  d!|j                  dd       j                  t              dz          |j                  d"      rM |d#|j                  d"d       d$t              D ])  }|j                  |j                  t              dz          + |j                  d%      rM |d&|j                  d%d       d$t              D ])  }|j                  |j                  t              dz          + |j                  d'      s|j                  d(      rRd)|j                  d'd       d*|j                  d(d       }|j                  d$| j                  t              dz          |j                  ddt        z  z   dz          |j                  d+j                  t              dz          |j                  d,|j                  d-d       j                  t              dz          |j                  d.|j                  d/d       j                  t              dz          |j                  d0|j                  d1d       j                  t              dz          |j                  d2|j                  d3d       j                  t              dz          |j                  d4|j                  d
d       j                  t              dz          |j                  d5      rM |d6|j                  d5d       d$t              D ])  }|j                  |j                  t              dz          + |j                  ddt        z  z   dz          |j                  d7|j                  d8d       d9|j                  d:d       j                  t              dz          |j                  d;      rM |d<|j                  d;d       d$t              D ])  }|j                  |j                  t              dz          + |j                  d%      rM |d&|j                  d%d       d$t              D ])  }|j                  |j                  t              dz          + |j                  d=      r:|j                  d>|j                  d=d       j                  t              dz          |j                  d?      r>|j                  d@|j                  d?d      dAdB  dCj                  t              dz          |j                  ddt        z  z   dz          |r|j                  dDj                  t              dz           ||d$t              D ])  }|j                  |j                  t              dz          + |j                  ddt        z  z   dz          |r|j                  dEj                  t              dz           ||d$t              D ])  }|j                  |j                  t              dz          + |j                  ddt        z  z   dz          |j                  dFj                  t              dz          g dG}|D ],  }|j                  d$| j                  t              dz          . |j                  ddt        z  z   dz          |j                  dd|z  z   dz          dHj                  |      S c c}
w )Iz:Format design system as ASCII box with emojis (MCP-style).r   PROJECTrR   r   r   r   rU   r8   rV   r   prefixwidthr   c                    | sg S | j                         }g }|}|D ]M  }t        |      t        |      z   dz   |dz
  k  r|||k7  rdnd|z   z  }3||k7  r|j                  |       ||z   }O ||k7  r|j                  |       |S )z#Wrap long text into multiple lines.r   r
   r+   r8   )rE   lenrs   )r   r   r   wordslinescurrent_linewords          r   	wrap_textz#format_ascii_box.<locals>.wrap_text   s    I

 	-D< 3t9,q0EAI=(>B$ NN6)LL.%}	- 6!LL&r   r   >r   r\   r:   z|  TARGET: z - RECOMMENDED DESIGN SYSTEM|r+   z|  PATTERN: r   r   z|     Conversion: r   z|     CTA: z|     Sections:z|       z. z
|  STYLE: rI   z
Keywords: z|     r   z
Best For: r   r   zPerformance: z | Accessibility: z
|  COLORS:z|     Primary:    r   z|     Secondary:  r   z|     CTA:        r   z|     Background: r   z|     Text:       r   zNotes: z|  TYPOGRAPHY: r   z / r   r   zMood: r   z|     Google Fonts: r   z|     CSS Import: NF   z...z|  KEY EFFECTS:z|  AVOID (Anti-patterns):z|  PRE-DELIVERY CHECKLIST:)z2[ ] No emojis as icons (use SVG: Heroicons/Lucide)z,[ ] cursor-pointer on all clickable elementsz4[ ] Hover states with smooth transitions (150-300ms)z+[ ] Light mode: text contrast 4.5:1 minimumz)[ ] Focus states visible for keyboard navz$[ ] prefers-reduced-motion respectedz,[ ] Responsive: 375px, 768px, 1024px, 1440px
)rC   rr   intr#   rE   re   	BOX_WIDTHrs   ljust	enumerater.   )r   projectrR   r   r   r   r   rV   r   r   rf   r   wisectionline	perf_a11ychecklist_itemsitems                      r   format_ascii_boxr      si   	:G	2.Ggr*Ex,F""<4Jr2G!%%or:M S   & {{:r*005H#+9aqwwy	9H9 EAA	LLsQw$%	LL;wi'CDJJ9UX[[\	LLsQw$%	LLsY&,- 
LL<FB 789??	JSPQ{{< )'++lB*G)HIOOPYZ]``a{{?#{7;;#C"DEKKIVY\\]	LL"((3c9:!, G
7xs"WI.44Y?#EFG	LLsY&,- 
LL:eii345;;IFLMyy
599Z+D*EFR[\ 	6DLLI.45	6yy
599Z+D*EFR[\ 	6DLLI.45	6yy599_#=#EIImR$@#AASTYT]T]^moqTrSst	vi[)//	:S@A	LLsY&,- 
LL##I.45	LL%fjjB&?%@AGG	RUXXY	LL%fjjb&A%BCII)TWZZ[	LL%fjj&;%<=CCINQTTU	LL%fjjr&B%CDJJ9UX[[\	LL%fjj&<%=>DDYORUUVzz'

7B(?'@A8YW 	6DLLI.45	6	LLsY&,- 
LL?:>>)R#@"AZ^^TZ\^E_D`agghqruxxy~~fz~~fb'A&BCXyY 	6DLLI.45	6~~j!
:>>*b+I*JKXW`a 	6DLLI.45	6~~()+JNN;Mr,R+STZZ[dehkkl~~l#)*..r*J3B*O)PPSTZZ[dehkkl	LLsY&,- &,,Y7#=>gx; 	6DLLI.45	6S3?*S01 066yACGHmXyA 	6DLLI.45	6S3?*S01 
LL-33I>DEO   =vdV_**95;<=	LLsY&,-	LLsQw$%99Uy :s    e=e=c           	         | j                  dd      }| j                  di       }| j                  di       }| j                  di       }| j                  di       }| j                  dd      }| j                  d	d      }g }|j                  d
|        |j                  d       |j                  d       |j                  d|j                  dd              |j                  d      r$|j                  d|j                  dd              |j                  d      r$|j                  d|j                  dd              |j                  d      r$|j                  d|j                  dd              |j                  d|j                  dd              |j                  d       |j                  d       |j                  d|j                  dd              |j                  d      r$|j                  d|j                  dd              |j                  d      r$|j                  d|j                  dd              |j                  d      s|j                  d      r7|j                  d|j                  dd       d|j                  dd              |j                  d       |j                  d       |j                  d        |j                  d!       |j                  d"|j                  d#d       d$       |j                  d%|j                  d&d       d$       |j                  d'|j                  d(d       d$       |j                  d)|j                  d*d       d$       |j                  d+|j                  d,d       d$       |j                  d-      r%|j                  d.|j                  d-d       d/       |j                  d       |j                  d0       |j                  d1|j                  d2d              |j                  d3|j                  d4d              |j                  d5      r$|j                  d6|j                  d5d              |j                  d      r$|j                  d|j                  dd              |j                  d7      r$|j                  d8|j                  d7d              |j                  d9      rU|j                  d:       |j                  d;       |j                  |j                  d9d              |j                  d<       |j                  d       |r4|j                  d=       |j                  |        |j                  d       |rH|j                  d>       d?}	|j                  d@|j                  dA|	              |j                  d       |j                  dB       |j                  dC       |j                  dD       |j                  dE       |j                  dF       |j                  dG       |j                  dH       |j                  dI       |j                  d       dJj                  |      S )Kz!Format design system as markdown.r   r   rR   r   r   r   rU   r8   rV   z## Design System: z### Patternz- **Name:** r   r   z- **Conversion Focus:** r   - **CTA Placement:** r   z- **Color Strategy:** z- **Sections:** r   z	### StylerI   z- **Keywords:** r   z- **Best For:** r   r   z- **Performance:** z | **Accessibility:** z
### Colorsz| Role | Hex |z|------|-----|z| Primary | r   z |z| Secondary | r   z| CTA | r   z| Background | r   z	| Text | r   r   z	
*Notes: *### Typographyz- **Heading:** r   z- **Body:** r   r   - **Mood:** r   z- **Google Fonts:** r   z- **CSS Import:**```css```z### Key Effectsz### Avoid (Anti-patterns)z
- -  + z### Pre-Delivery Checklistz4- [ ] No emojis as icons (use SVG: Heroicons/Lucide)z.- [ ] cursor-pointer on all clickable elements6- [ ] Hover states with smooth transitions (150-300ms)-- [ ] Light mode: text contrast 4.5:1 minimumz+- [ ] Focus states visible for keyboard navz&- [ ] prefers-reduced-motion respected.- [ ] Responsive: 375px, 768px, 1024px, 1440pxr   )rC   rs   rD   r.   )
r   r   rR   r   r   r   r   rV   r   newline_bullets
             r   format_markdownr   o  s   	:G	2.Ggr*Ex,F""<4Jr2G!%%or:ME	LL%gY/0	LL 
LL	LL<FB 789:{{< /L"0M/NOP{{?#,W[["-M,NOP{{#$-gkk:JB.O-PQR	LL#GKK
B$?#@AB	LL 
LL	LL<		&" 5678yy'		*b(A'BCDyy'		*b(A'BCDyy599_#=*599]B+G*HH^_d_h_hixz|_}^~  	A	LL 
LL	LL>#	LL>#	LL<

9b 9:"=>	LL>&**[""=!>bAB	LL8FJJub12"56	LL?6::lB#?"@CD	LL9VZZ34B78zz'z&**Wb"9!:!<=	LL 
LL!"	LL?:>>)R#@"ABC	LL<
vr :;<=~~f|JNN62$>#?@A~~j!'
z2(F'GHI~~()+JNN;Mr,R+STU~~l#(*v
|R89;s	LL &'y"R 01r-//~FGHIR 
LL-.	LLGH	LLAB	LLIJ	LL@A	LL>?	LL9:	LLAB	LL99Ur   asciir(   r   output_formatpersistpage
output_dirc                     t               }|j                  | |      }|rt        ||||        |dk(  rt        |      S t	        |      S )a  
    Main entry point for design system generation.

    Args:
        query: Search query (e.g., "SaaS dashboard", "e-commerce luxury")
        project_name: Optional project name for output header
        output_format: "ascii" (default) or "markdown"
        persist: If True, save design system to design-system/ folder
        page: Optional page name for page-specific override file
        output_dir: Optional output directory (defaults to current working directory)

    Returns:
        Formatted design system string
    markdown)r   r   persist_design_systemr   r   )r(   r   r   r   r   r   	generatorr   s           r   generate_design_systemr     sO      &'I&&ul;M mT:uE
"}--M**r   
page_queryc                    |rt        |      nt        j                         }| j                  dd      }|j                         j	                  dd      }|dz  |z  }|dz  }g }	|j                  dd       |j                  dd       |d	z  }
t        |       }t        |
d
d      5 }|j                  |       ddd       |	j                  t        |
             |ru||j                         j	                  dd       dz  }t        | ||      }t        |d
d      5 }|j                  |       ddd       |	j                  t        |             dt        |      |	dS # 1 sw Y   xY w# 1 sw Y   >xY w)a  
    Persist design system to design-system/<project>/ folder using Master + Overrides pattern.
    
    Args:
        design_system: The generated design system dictionary
        page: Optional page name for page-specific override file
        output_dir: Optional output directory (defaults to current working directory)
        page_query: Optional query string for intelligent page override generation
    
    Returns:
        dict with created file paths and status
    r   defaultr+   r:   zdesign-systempagesT)parentsexist_okz	MASTER.mdr   r   r   Nz.mdsuccess)statusdesign_system_dircreated_files)r   cwdrC   rB   rD   mkdirformat_master_mdr"   writers   rr   format_page_override_md)r   r   r   r   base_dirr   project_slugr   	pages_dirr   master_filemaster_contentr'   	page_filepage_contents                  r   r   r     sw    $.tJ488:H !$$^Y?L%%'//S9L ?2\A!G+IM D48OOD4O0#k1K &m4N	k3	1  Q	 [)* 4::<#7#7S#A"B# FF	.}dJO)S73 	"qGGL!	"S^,  !23&    	" 	"s   'E!E-!E*-E6c                 "   | j                  dd      }| j                  di       }| j                  di       }| j                  di       }| j                  di       }| j                  dd      }| j                  d	d      }t        j                         j                  d
      }g }	|	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d|        |	j	                  d|        |	j	                  d| j                  dd              |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d|j                  dd       d       |	j	                  d|j                  dd       d        |	j	                  d!|j                  d"d#       d$       |	j	                  d%|j                  d&d'       d(       |	j	                  d)|j                  d*d+       d,       |	j	                  d       |j                  d-      r5|	j	                  d.|j                  d-d              |	j	                  d       |	j	                  d/       |	j	                  d       |	j	                  d0|j                  d1d2              |	j	                  d3|j                  d4d2              |j                  d5      r$|	j	                  d6|j                  d5d              |j                  d7      rK|	j	                  d8|j                  d1d       d9|j                  d4d       d:|j                  d7d       d;       |	j	                  d       |j                  d<      re|	j	                  d=       |	j	                  d>       |	j	                  |j                  d<d             |	j	                  d?       |	j	                  d       |	j	                  d@       |	j	                  d       |	j	                  dA       |	j	                  dB       |	j	                  dC       |	j	                  dD       |	j	                  dE       |	j	                  dF       |	j	                  dG       |	j	                  dH       |	j	                  dI       |	j	                  d       |	j	                  dJ       |	j	                  d       |	j	                  dK       |	j	                  dB       |	j	                  dL       |	j	                  dM       |	j	                  dN       |	j	                  dO       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  dP       |	j	                  d       |	j	                  dQ       |	j	                  d       |	j	                  d>       |	j	                  dR       |	j	                  dS       |	j	                  dT|j                  d"d#       dU       |	j	                  dV       |	j	                  dW       |	j	                  dX       |	j	                  dY       |	j	                  dZ       |	j	                  d[       |	j	                  d\       |	j	                  d       |	j	                  d]       |	j	                  d^       |	j	                  d_       |	j	                  d\       |	j	                  d       |	j	                  d`       |	j	                  da       |	j	                  db       |	j	                  dc|j                  dd       dU       |	j	                  dd|j                  dd       dU       |	j	                  dW       |	j	                  dX       |	j	                  dY       |	j	                  dZ       |	j	                  d[       |	j	                  d\       |	j	                  d?       |	j	                  d       |	j	                  de       |	j	                  d       |	j	                  d>       |	j	                  df       |	j	                  dT|j                  d&dg       dU       |	j	                  dh       |	j	                  di       |	j	                  dj       |	j	                  dZ       |	j	                  d[       |	j	                  d\       |	j	                  d       |	j	                  dk       |	j	                  dl       |	j	                  dm       |	j	                  d\       |	j	                  d?       |	j	                  d       |	j	                  dn       |	j	                  d       |	j	                  d>       |	j	                  do       |	j	                  dp       |	j	                  dq       |	j	                  dX       |	j	                  dr       |	j	                  ds       |	j	                  d\       |	j	                  d       |	j	                  dt       |	j	                  du|j                  dd       dU       |	j	                  dv       |	j	                  dw|j                  dd       dx       |	j	                  d\       |	j	                  d?       |	j	                  d       |	j	                  dy       |	j	                  d       |	j	                  d>       |	j	                  dz       |	j	                  d{       |	j	                  d|       |	j	                  d\       |	j	                  d       |	j	                  d}       |	j	                  d~       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d\       |	j	                  d?       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d|j                  dd              |	j	                  d       |j                  d      r5|	j	                  d|j                  dd              |	j	                  d       |j                  d      r5|	j	                  d|j                  dd              |	j	                  d       |r%|	j	                  d|        |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d|j                  dd              |	j	                  d       |j                  d      r$|	j	                  d|j                  dd              |j                  d      r$|	j	                  d|j                  dd              |	j	                  d|j                  dd              |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |rJ|j                  d      D 
cg c]  }
|
j                          }}
|D ]  }|s|	j	                  d|         |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       |	j	                  d       dj                  |	      S c c}
w )zCFormat design system as MASTER.md with hierarchical override logic.r   r   rR   r   r   r   rU   r8   rV   %Y-%m-%d %H:%M:%Sz# Design System Master Filez]> **LOGIC:** When building a specific page, first check `design-system/pages/[page-name].md`.z?> If that file exists, its rules **override** this Master file.z*> If not, strictly follow the rules below.---z**Project:** z**Generated:** z**Category:** r5   r   z## Global Rulesz### Color Palettez| Role | Hex | CSS Variable |z|------|-----|--------------|z| Primary | `r   r   z` | `--color-primary` |z| Secondary | `r   r   z` | `--color-secondary` |z| CTA/Accent | `r   r   z` | `--color-cta` |z| Background | `r   r   z` | `--color-background` |z
| Text | `r   r   z` | `--color-text` |r   z**Color Notes:** r   z- **Heading Font:** r   r   z- **Body Font:** r   r   r   r   z- **Google Fonts:** [r   z]()r   z**CSS Import:**r   r   z### Spacing Variablesz| Token | Value | Usage |z|-------|-------|-------|z1| `--space-xs` | `4px` / `0.25rem` | Tight gaps |z?| `--space-sm` | `8px` / `0.5rem` | Icon gaps, inline spacing |z5| `--space-md` | `16px` / `1rem` | Standard padding |z6| `--space-lg` | `24px` / `1.5rem` | Section padding |z/| `--space-xl` | `32px` / `2rem` | Large gaps |z5| `--space-2xl` | `48px` / `3rem` | Section margins |z2| `--space-3xl` | `64px` / `4rem` | Hero padding |z### Shadow Depthsz| Level | Value | Usage |z>| `--shadow-sm` | `0 1px 2px rgba(0,0,0,0.05)` | Subtle lift |z@| `--shadow-md` | `0 4px 6px rgba(0,0,0,0.1)` | Cards, buttons |zE| `--shadow-lg` | `0 10px 15px rgba(0,0,0,0.1)` | Modals, dropdowns |zP| `--shadow-xl` | `0 20px 25px rgba(0,0,0,0.15)` | Hero images, featured cards |z## Component Specsz### Buttonsz/* Primary Button */z.btn-primary {z  background: ;z  color: white;z  padding: 12px 24px;z  border-radius: 8px;z  font-weight: 600;z  transition: all 200ms ease;z  cursor: pointer;}z.btn-primary:hover {z  opacity: 0.9;z  transform: translateY(-1px);z/* Secondary Button */z.btn-secondary {z  background: transparent;z	  color: z  border: 2px solid z	### Cardsz.card {z#FFFFFFz  border-radius: 12px;z  padding: 24px;z  box-shadow: var(--shadow-md);z.card:hover {z  box-shadow: var(--shadow-lg);z  transform: translateY(-2px);z
### Inputsz.input {z  padding: 12px 16px;z  border: 1px solid #E2E8F0;z  font-size: 16px;z&  transition: border-color 200ms ease;z.input:focus {z  border-color: z  outline: none;z  box-shadow: 0 0 0 3px z20;z
### Modalsz.modal-overlay {z!  background: rgba(0, 0, 0, 0.5);z  backdrop-filter: blur(4px);z.modal {z  background: white;z  border-radius: 16px;z  padding: 32px;z  box-shadow: var(--shadow-xl);z  max-width: 500px;z  width: 90%;z## Style Guidelinesz**Style:** r   rN   rI   z**Keywords:** r   z**Best For:** z**Key Effects:** z### Page Patternz**Pattern Name:** r   z- **Conversion Strategy:** r   r   z- **Section Order:** r   z## Anti-Patterns (Do NOT Use)r\   u   - ❌ z!### Additional Forbidden PatternsuM   - ❌ **Emojis as icons** — Use SVG icons (Heroicons, Lucide, Simple Icons)uT   - ❌ **Missing cursor:pointer** — All clickable elements must have cursor:pointeruM   - ❌ **Layout-shifting hovers** — Avoid scale transforms that shift layoutuE   - ❌ **Low contrast text** — Maintain 4.5:1 minimum contrast ratiouF   - ❌ **Instant state changes** — Always use transitions (150-300ms)uJ   - ❌ **Invisible focus states** — Focus states must be visible for a11yz## Pre-Delivery Checklistz&Before delivering any UI code, verify:z/- [ ] No emojis used as icons (use SVG instead)z;- [ ] All icons from consistent icon set (Heroicons/Lucide)z0- [ ] `cursor-pointer` on all clickable elementsr   r   z2- [ ] Focus states visible for keyboard navigationz(- [ ] `prefers-reduced-motion` respectedr   z,- [ ] No content hidden behind fixed navbarsz$- [ ] No horizontal scroll on mobiler   )rC   r   nowstrftimers   rE   re   r.   )r   r   rR   r   r   r   r   rV   	timestampr   a	anti_listantis                r   r   r     s   	:G	2.Ggr*Ex,F""<4Jr2G!%%or:M''(;<IE 
LL./	LL	LLpq	LLRS	LL=>	LL	LL	LL	LL=	*+	LL?9+./	LL>-"3"3J	"J!KLM	LL	LL	LL 
LL"#	LL 
LL$%	LL	LL01	LL01	LL=Iy!A BBYZ[	LL?6::k9#E"FF_`a	LL#FJJui$@#AATUV	LL#FJJ|Y$G#HHbcd	LL:fjj;<<PQR	LLzz'(GR)@(ABCR 
LL!"	LL	LL'
y'(J'KLM	LL$Z^^FG%D$EFG~~f|JNN62$>#?@A~~(),Z^^Ir-J,K3z~~^dfhOiNjjlmwm{m{  }O  QS  nT  mU  UV  W  	X	LL~~l#&'XZ^^L"56UR 
LL()	LL	LL,-	LL,-	LLDE	LLRS	LLHI	LLIJ	LLBC	LLHI	LLEF	LL 
LL$%	LL	LL,-	LL,-	LLQR	LLST	LLXY	LLcd	LL 
LL	LL	LL%&	LL 
LL	LL	LL	LL'(	LL!"	LL>&**UI">!?qAB	LL"#	LL()	LL()	LL&'	LL01	LL%&	LL	LL	LL'(	LL"#	LL12	LL	LL	LL)*	LL#$	LL-/	LL9VZZ	9=>a@A	LL'

9i(H'IKL	LL()	LL()	LL&'	LL01	LL%&	LL	LL	LL 
LL	LL	LL	LL	LL>&**\9"E!FaHI	LL)*	LL#$	LL23	LL01	LL%&	LL	LL	LL!	LL23	LL12	LL	LL	LL 
LL	LL	LL	LL	LL()	LL/0	LL()	LL%&	LL9:	LL	LL	LL!"	LL#FJJy)$D#EQGH	LL#$	LL+FJJy),L+MSQR	LL	LL	LL 
LL	LL	LL	LL#$	LL45	LL01	LL	LL	LL	LL'(	LL)*	LL#$	LL23	LL&'	LL!	LL	LL	LL 
LL	LL	LL&'	LL	LL;uyy>?@A	LLyy~eii
B&?%@ABRyy~eii
B&?%@ABR(	23R 
LL#$	LL	LL%gkk&"&=%>?@	LL{{< 27;;|R3P2QRS{{?#,W[["-M,NOP	LL(Z)D(EFG	LL 
LL	LL	LL01	LL(5(;(;C(@A1QWWYA	A 	.DvdV_-	. 
LL	LL45	LL	LL`a	LLgh	LL`a	LLXY	LLYZ	LL]^	LL 
LL	LL	LL,-	LL	LL9:	LL	LLBC	LLNO	LLCD	LLIJ	LL@A	LLEF	LL;<	LLAB	LL?@	LL78	LL99UE Bs   5AD	page_namec                 \
   | j                  dd      }t        j                         j                  d      }|j	                  dd      j	                  dd      j                         }t        |||       }g }|j                  d| d       |j                  d	       |j                  d
|        |j                  d|        |j                  d|j                  dd              |j                  d	       |j                  d       |j                  d       |j                  d	       |j                  d       |j                  d	       |j                  d       |j                  d	       |j                  d       |j                  d	       |j                  di       }|r0|j                         D ]  \  }	}
|j                  d|	 d|
         n|j                  d       |j                  d	       |j                  d       |j                  d	       |j                  di       }|r0|j                         D ]  \  }	}
|j                  d|	 d|
         n|j                  d       |j                  d	       |j                  d       |j                  d	       |j                  di       }|r0|j                         D ]  \  }	}
|j                  d|	 d|
         n|j                  d       |j                  d	       |j                  d       |j                  d	       |j                  di       }|r0|j                         D ]  \  }	}
|j                  d|	 d|
         n|j                  d        |j                  d	       |j                  d!       |j                  d	       |j                  d"g       }|r|D ]  }|j                  d#|         n|j                  d$       |j                  d	       |j                  d       |j                  d	       |j                  d%       |j                  d	       |j                  d&g       }|r|D ]  }|j                  d#|         n|j                  d'       |j                  d	       |j                  d       |j                  d	       |j                  d(       |j                  d	       |j                  d)g       }|r|D ]  }|j                  d#|         |j                  d	       d*j                  |      S )+zKFormat a page-specific override file with intelligent AI-generated content.r   r   r  r:   r+   _z# z Page Overridesr8   z> **PROJECT:** z> **Generated:** z> **Page Type:** 	page_typer   ud   > ⚠️ **IMPORTANT:** Rules in this file **override** the Master file (`design-system/MASTER.md`).z`> Only deviations from the Master are documented here. For all other rules, refer to the Master.r  z## Page-Specific Rulesz### Layout Overrideslayoutz- **z:** u$   - No overrides — use Master layoutz### Spacing Overridesspacingu%   - No overrides — use Master spacingz### Typography Overridesr   u(   - No overrides — use Master typographyz### Color Overridesr   u$   - No overrides — use Master colorsz### Component Overrides
componentsr   u-   - No overrides — use Master component specsz## Page-Specific Componentsunique_componentsz$- No unique components for this pagez## Recommendationsrecommendationsr   )
rC   r   r  r  rD   title_generate_intelligent_overridesrs   r-   r.   )r   r  r   r   r  
page_titlepage_overridesr   r  rp   valuer  r   r   r  compr  r  recs                      r   r  r  %  s   	:G''(;<I""3,44S#>DDFJ 5Y
MZNE	LL2j\12	LL	LL?7),-	LL$YK01	LL$^%7%7Y%O$PQR	LL	LLwx	LLst	LL	LL	LL 
LL)*	LL 
LL'(	LL"-F ,,. 	2JCLL4uD01	2 	;<	LL 
LL()	LL  B/G!--/ 	2JCLL4uD01	2 	<=	LL 
LL+,	LL##L"5J$**, 	2JCLL4uD01	2 	?@	LL 
LL&'	LL"-F ,,. 	2JCLL4uD01	2 	;<	LL 
LL*+	LL##L"5J 	&DLL2dV%	& 	DE	LL 
LL	LL	LL./	LL&**+>C% 	&DLL2dV%	& 	;<	LL 
LL	LL	LL%&	LL$(():B?O" 	%CLL2cU$	%	LL99Ur   c           	        ! ddl m} | j                         }|xs dj                         }| d| } ||dd      } ||dd	      } ||d
d      }	|j                  dg       }
|j                  dg       }|	j                  dg       }t	        ||
      }i }i }i }i }g }g }g }|
r|
d   }|j                  dd      }|j                  dd      !|j                  dd      }|j                  dd      }t        !fddD              rd|d<   d|d<   d|d<   n.t        !fddD              rd|d<   d|d<   d|d<   n
d|d<   d|d<   |r|j                  d |        |D ]g  }|j                  d!d      }|j                  d"d      }|j                  d#d      }|r|j                  | d$|        |sT|j                  d%|        i |r_|d   }|j                  d&d      }|j                  d'd      }|j                  d(d      } |r||d)<   |r|j                  d*|        | r| |d+<   |s
d,|d<   d-|d<   |sd.d/g}||||||||d0S )1z
    Generate intelligent overrides based on page type using layered search.
    
    Uses the existing search infrastructure to find relevant style, UX, and layout
    data instead of hardcoded page types.
    r   )r   r8   r+   r   r   )r   uxr	   r   r/   rj   rl   r   r   c              3   B   K   | ]  }|j                         v   y wr   rB   r=   r>   rI   s     r   r@   z2_generate_intelligent_overrides.<locals>.<genexpr>  s     W"rX^^%%W   )datadense	dashboardgridz1400px or full-widthz	Max Widthz#12-column grid for data flexibilityGridu)   High — optimize for information displayzContent Densityc              3   B   K   | ]  }|j                         v   y wr   r)  r*  s     r   r@   z2_generate_intelligent_overrides.<locals>.<genexpr>  s     [Bx~~''[r+  )minimalsimplecleansinglez800px (narrow, focused)zSingle column, centeredLayoutu   Low — focus on clarityz1200px (standard)z%Full-width sections, centered contentz	Effects: CategoryDozDon'tz: zAvoid: r   r   r   SectionszCTA Placement: Strategy1200pxzResponsive gridz'Refer to MASTER.md for all design rulesz.Add specific overrides as needed for this page)r  r  r  r   r   r  r  r  )corer   rB   rC   _detect_page_typerF   rs   )"r  r   r   r   
page_lowerquery_lowercombined_contextstyle_search	ux_searchlanding_searchr   
ux_resultsr   r  r  r  r   r   r  r  r  r   rx   r   r   r'  r5   do_text	dont_textr   r   r   r   rI   s"                                    @r   r   r     s    "J#**,K$Q{m4 *GCL'1=I,iQGN !$$Y3My"-J$((B7O ""2MBI FGJFJO a YY/4
99Z,99Z,))126 W0VWW"8F;BF6N)TG%&[2Z[[";F;8F8)CG%&"5F;FF8""Ywi#89  566*b)&&r"FF7B'	""hZr'#;<	{345 !!$;;3$;R@ %5r:!)F:""_]O#DE!/F: &{,x5<
   .*	 	r   contextr   c                    | j                         g ddfg ddfg ddfg ddfg d	d
fg ddfg ddfg ddfg ddfg ddfg
}|D ]  \  }}t        fd|D              s|c S  |rX|d   j                  dd      j                         }|d   j                  dd      j                         }d|v sd|v ryd|v sd|v ryy)z1Detect page type from context and search results.)r.  admin	analyticsr,  metricsstatsmonitoroverviewzDashboard / Data View)checkoutpaymentcartpurchaseorderbillingzCheckout / Payment)settingsprofileaccountpreferencesr1   zSettings / Profile)r   	marketinghomepageherohomepromozLanding / Marketing)loginsigninsignupregisterauthpasswordAuthentication)pricingplanssubscriptiontierspackageszPricing / Plans)blogarticlepostnewscontentstoryzBlog / Article)r   r   detailpdpshopstorezProduct Detail)r   r/   browsefiltercatalogr#   zSearch Results)empty404errorz	not foundzerozEmpty Statec              3   &   K   | ]  }|v  
 y wr   r<   )r=   r>   context_lowers     r   r@   z$_detect_page_type.<locals>.<genexpr>  s     6rr]"6rA   r   rj   r8   r   r.  r,  r   rY  r   )rB   rF   rC   )rG  r   page_patternsrI   r  rx   r   r|  s          @r   r=  r=    s   MMOM 
`axy	HJ^_	DFZ[	FH]^	FHXY	BDUV	@BRS	>@PQ	EGWX	7GM  - )6X66
 "1%))*:B?EEG
 #''
B7==?("f&8*("kX&=(r   __main__zGenerate Design System)descriptionz%Search query (e.g., 'SaaS dashboard'))helpz--project-namez-pzProject name)r   r   r  z--formatz-fr   zOutput format)choicesr   r  )Nr   FNN)NNNr   )&r   r$   rb   osr   pathlibr   r<  r   r   r    r,   r   r   r   rr   r   r   boolr   r   r   r  r   r#   r=  r   argparseArgumentParserparseradd_argument
parse_argsargsr(   r   formatrw   printr<   r   r   <module>r     s/     	   ! $ q!QQq! !$G
 G
V 	zD zS zz[4 [C [~ W^VZ+# +S +PS +$(+8;+PS+_b+:0 0S 0S 0eh 0tx 0fDD DS DNj4 jC jS j\_ jZgs g gTX g]a gT s  4  C  H z$X$$1IJF
&MN
($S$^\

D7J2GQX_noD#DJJ0A0A4;;OF	&M r   