Commit 8479baabc7f75aa45a7f085e9c1450dc910d9262

Authored by “wangming”
1 parent 763801a5

优化统计卡片样式和布局,调整卡片间距和大小,增加卡片图标颜色渐变效果;更新统计数据查询逻辑,确保邀约、预约、耗卡和开单数统计基于拓客会员数进行去重统计;修复部分代码格式问题,提升可读性。

Showing 67 changed files with 6950 additions and 157 deletions
.shared/ui-ux-pro-max/data/charts.csv 0 → 100644
  1 +No,Data Type,Keywords,Best Chart Type,Secondary Options,Color Guidance,Performance Impact,Accessibility Notes,Library Recommendation,Interactive Level
  2 +1,Trend Over Time,"trend, time-series, line, growth, timeline, progress",Line Chart,"Area Chart, Smooth Area",Primary: #0080FF. Multiple series: use distinct colors. Fill: 20% opacity,⚡ Excellent (optimized),✓ Clear line patterns for colorblind users. Add pattern overlays.,"Chart.js, Recharts, ApexCharts",Hover + Zoom
  3 +2,Compare Categories,"compare, categories, bar, comparison, ranking",Bar Chart (Horizontal or Vertical),"Column Chart, Grouped Bar",Each bar: distinct color. Category: grouped same color. Sorted: descending order,⚡ Excellent,✓ Easy to compare. Add value labels on bars for clarity.,"Chart.js, Recharts, D3.js",Hover + Sort
  4 +3,Part-to-Whole,"part-to-whole, pie, donut, percentage, proportion, share",Pie Chart or Donut,"Stacked Bar, Treemap",Colors: 5-6 max. Contrasting palette. Large slices first. Use labels.,⚡ Good (limit 6 slices),⚠ Hard for accessibility. Better: Stacked bar with legend. Avoid pie if >5 items.,"Chart.js, Recharts, D3.js",Hover + Drill
  5 +4,Correlation/Distribution,"correlation, distribution, scatter, relationship, pattern",Scatter Plot or Bubble Chart,"Heat Map, Matrix",Color axis: gradient (blue-red). Size: relative. Opacity: 0.6-0.8 to show density,⚠ Moderate (many points),⚠ Provide data table alternative. Use pattern + color distinction.,"D3.js, Plotly, Recharts",Hover + Brush
  6 +5,Heatmap/Intensity,"heatmap, heat-map, intensity, density, matrix",Heat Map or Choropleth,"Grid Heat Map, Bubble Heat",Gradient: Cool (blue) to Hot (red). Scale: clear legend. Divergent for ±data,⚡ Excellent (color CSS),⚠ Colorblind: Use pattern overlay. Provide numerical legend.,"D3.js, Plotly, ApexCharts",Hover + Zoom
  7 +6,Geographic Data,"geographic, map, location, region, geo, spatial","Choropleth Map, Bubble Map",Geographic Heat Map,Regional: single color gradient or categorized colors. Legend: clear scale,⚠ Moderate (rendering),⚠ Include text labels for regions. Provide data table alternative.,"D3.js, Mapbox, Leaflet",Pan + Zoom + Drill
  8 +7,Funnel/Flow,funnel/flow,"Funnel Chart, Sankey",Waterfall (for flows),Stages: gradient (starting color → ending color). Show conversion %,⚡ Good,✓ Clear stage labels + percentages. Good for accessibility if labeled.,"D3.js, Recharts, Custom SVG",Hover + Drill
  9 +8,Performance vs Target,performance-vs-target,Gauge Chart or Bullet Chart,"Dial, Thermometer",Performance: Red→Yellow→Green gradient. Target: marker line. Threshold colors,⚡ Good,✓ Add numerical value + percentage label beside gauge.,"D3.js, ApexCharts, Custom SVG",Hover
  10 +9,Time-Series Forecast,time-series-forecast,Line with Confidence Band,Ribbon Chart,Actual: solid line #0080FF. Forecast: dashed #FF9500. Band: light shading,⚡ Good,✓ Clearly distinguish actual vs forecast. Add legend.,"Chart.js, ApexCharts, Plotly",Hover + Toggle
  11 +10,Anomaly Detection,anomaly-detection,Line Chart with Highlights,Scatter with Alert,Normal: blue #0080FF. Anomaly: red #FF0000 circle/square marker + alert,⚡ Good,✓ Circle/marker for anomalies. Add text alert annotation.,"D3.js, Plotly, ApexCharts",Hover + Alert
  12 +11,Hierarchical/Nested Data,hierarchical/nested-data,Treemap,"Sunburst, Nested Donut, Icicle",Parent: distinct hues. Children: lighter shades. White borders 2-3px.,⚠ Moderate,⚠ Poor - provide table alternative. Label large areas.,"D3.js, Recharts, ApexCharts",Hover + Drilldown
  13 +12,Flow/Process Data,flow/process-data,Sankey Diagram,"Alluvial, Chord Diagram",Gradient from source to target. Opacity 0.4-0.6 for flows.,⚠ Moderate,⚠ Poor - provide flow table alternative.,"D3.js (d3-sankey), Plotly",Hover + Drilldown
  14 +13,Cumulative Changes,cumulative-changes,Waterfall Chart,"Stacked Bar, Cascade",Increases: #4CAF50. Decreases: #F44336. Start: #2196F3. End: #0D47A1.,⚡ Good,✓ Good - clear directional colors with labels.,"ApexCharts, Highcharts, Plotly",Hover
  15 +14,Multi-Variable Comparison,multi-variable-comparison,Radar/Spider Chart,"Parallel Coordinates, Grouped Bar",Single: #0080FF 20% fill. Multiple: distinct colors per dataset.,⚡ Good,⚠ Moderate - limit 5-8 axes. Add data table.,"Chart.js, Recharts, ApexCharts",Hover + Toggle
  16 +15,Stock/Trading OHLC,stock/trading-ohlc,Candlestick Chart,"OHLC Bar, Heikin-Ashi",Bullish: #26A69A. Bearish: #EF5350. Volume: 40% opacity below.,⚡ Good,⚠ Moderate - provide OHLC data table.,"Lightweight Charts (TradingView), ApexCharts",Real-time + Hover + Zoom
  17 +16,Relationship/Connection Data,relationship/connection-data,Network Graph,"Hierarchical Tree, Adjacency Matrix",Node types: categorical colors. Edges: #90A4AE 60% opacity.,❌ Poor (500+ nodes struggles),❌ Very Poor - provide adjacency list alternative.,"D3.js (d3-force), Vis.js, Cytoscape.js",Drilldown + Hover + Drag
  18 +17,Distribution/Statistical,distribution/statistical,Box Plot,"Violin Plot, Beeswarm",Box: #BBDEFB. Border: #1976D2. Median: #D32F2F. Outliers: #F44336.,⚡ Excellent,"✓ Good - include stats table (min, Q1, median, Q3, max).","Plotly, D3.js, Chart.js (plugin)",Hover
  19 +18,Performance vs Target (Compact),performance-vs-target-(compact),Bullet Chart,"Gauge, Progress Bar","Ranges: #FFCDD2, #FFF9C4, #C8E6C9. Performance: #1976D2. Target: black 3px.",⚡ Excellent,✓ Excellent - compact with clear values.,"D3.js, Plotly, Custom SVG",Hover
  20 +19,Proportional/Percentage,proportional/percentage,Waffle Chart,"Pictogram, Stacked Bar 100%",10x10 grid. 3-5 categories max. 2-3px spacing between squares.,⚡ Good,✓ Good - better than pie for accessibility.,"D3.js, React-Waffle, Custom CSS Grid",Hover
  21 +20,Hierarchical Proportional,hierarchical-proportional,Sunburst Chart,"Treemap, Icicle, Circle Packing",Center to outer: darker to lighter. 15-20% lighter per level.,⚠ Moderate,⚠ Poor - provide hierarchy table alternative.,"D3.js (d3-hierarchy), Recharts, ApexCharts",Drilldown + Hover
  22 +21,Root Cause Analysis,"root cause, decomposition, tree, hierarchy, drill-down, ai-split",Decomposition Tree,"Decision Tree, Flow Chart",Nodes: #2563EB (Primary) vs #EF4444 (Negative impact). Connectors: Neutral grey.,⚠ Moderate (calculation heavy),✓ clear hierarchy. Allow keyboard navigation for nodes.,"Power BI (native), React-Flow, Custom D3.js",Drill + Expand
  23 +22,3D Spatial Data,"3d, spatial, immersive, terrain, molecular, volumetric",3D Scatter/Surface Plot,"Volumetric Rendering, Point Cloud",Depth cues: lighting/shading. Z-axis: color gradient (cool to warm).,❌ Heavy (WebGL required),❌ Poor - requires alternative 2D view or data table.,"Three.js, Deck.gl, Plotly 3D",Rotate + Zoom + VR
  24 +23,Real-Time Streaming,"streaming, real-time, ticker, live, velocity, pulse",Streaming Area Chart,"Ticker Tape, Moving Gauge",Current: Bright Pulse (#00FF00). History: Fading opacity. Grid: Dark.,⚡ Optimized (canvas/webgl),⚠ Flashing elements - provide pause button. High contrast.,Smoothed D3.js, CanvasJS, SciChart,Real-time + Pause
  25 +24,Sentiment/Emotion,"sentiment, emotion, nlp, opinion, feeling",Word Cloud with Sentiment,"Sentiment Arc, Radar Chart",Positive: #22C55E. Negative: #EF4444. Neutral: #94A3B8. Size = Frequency.,⚡ Good,⚠ Word clouds poor for screen readers. Use list view.,"D3-cloud, Highcharts, Nivo",Hover + Filter
  26 +25,Process Mining,"process, mining, variants, path, bottleneck, log",Process Map / Graph,"Directed Acyclic Graph (DAG), Petri Net",Happy path: #10B981 (Thick). Deviations: #F59E0B (Thin). Bottlenecks: #EF4444.,⚠ Moderate to Heavy,⚠ Complex graphs hard to navigate. Provide path summary.,"React-Flow, Cytoscape.js, Recharts",Drag + Node-Click
0 27 \ No newline at end of file
... ...
.shared/ui-ux-pro-max/data/colors.csv 0 → 100644
  1 +No,Product Type,Keywords,Primary (Hex),Secondary (Hex),CTA (Hex),Background (Hex),Text (Hex),Border (Hex),Notes
  2 +1,SaaS (General),"saas, general",#2563EB,#3B82F6,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust blue + accent contrast
  3 +2,Micro SaaS,"micro, saas",#2563EB,#3B82F6,#F97316,#F8FAFC,#1E293B,#E2E8F0,Vibrant primary + white space
  4 +3,E-commerce,commerce,#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand primary + success green
  5 +4,E-commerce Luxury,"commerce, luxury",#1C1917,#44403C,#CA8A04,#FAFAF9,#0C0A09,#D6D3D1,Premium colors + minimal accent
  6 +5,Service Landing Page,"service, landing, page",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand primary + trust colors
  7 +6,B2B Service,"b2b, service",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional blue + neutral grey
  8 +7,Financial Dashboard,"financial, dashboard",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark bg + red/green alerts + trust blue
  9 +8,Analytics Dashboard,"analytics, dashboard",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Cool→Hot gradients + neutral grey
  10 +9,Healthcare App,"healthcare, app",#0891B2,#22D3EE,#059669,#ECFEFF,#164E63,#A5F3FC,Calm blue + health green + trust
  11 +10,Educational App,"educational, app",#4F46E5,#818CF8,#F97316,#EEF2FF,#1E1B4B,#C7D2FE,Playful colors + clear hierarchy
  12 +11,Creative Agency,"creative, agency",#EC4899,#F472B6,#06B6D4,#FDF2F8,#831843,#FBCFE8,Bold primaries + artistic freedom
  13 +12,Portfolio/Personal,"portfolio, personal",#18181B,#3F3F46,#2563EB,#FAFAFA,#09090B,#E4E4E7,Brand primary + artistic interpretation
  14 +13,Gaming,gaming,#7C3AED,#A78BFA,#F43F5E,#0F0F23,#E2E8F0,#4C1D95,Vibrant + neon + immersive colors
  15 +14,Government/Public Service,"government, public, service",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional blue + high contrast
  16 +15,Fintech/Crypto,"fintech, crypto",#F59E0B,#FBBF24,#8B5CF6,#0F172A,#F8FAFC,#334155,Dark tech colors + trust + vibrant accents
  17 +16,Social Media App,"social, media, app",#2563EB,#60A5FA,#F43F5E,#F8FAFC,#1E293B,#DBEAFE,Vibrant + engagement colors
  18 +17,Productivity Tool,"productivity, tool",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Clear hierarchy + functional colors
  19 +18,Design System/Component Library,"design, system, component, library",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Clear hierarchy + code-like structure
  20 +19,AI/Chatbot Platform,"chatbot, platform",#7C3AED,#A78BFA,#06B6D4,#FAF5FF,#1E1B4B,#DDD6FE,Neutral + AI Purple (#6366F1)
  21 +20,NFT/Web3 Platform,"nft, web3, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Neon + Gold (#FFD700)
  22 +21,Creator Economy Platform,"creator, economy, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Vibrant + Brand colors
  23 +22,Sustainability/ESG Platform,"sustainability, esg, platform",#7C3AED,#A78BFA,#06B6D4,#FAF5FF,#1E1B4B,#DDD6FE,Green (#228B22) + Earth tones
  24 +23,Remote Work/Collaboration Tool,"remote, work, collaboration, tool",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Calm Blue + Neutral grey
  25 +24,Mental Health App,"mental, health, app",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Calm Pastels + Trust colors
  26 +25,Pet Tech App,"pet, tech, app",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Playful + Warm colors
  27 +26,Smart Home/IoT Dashboard,"smart, home, iot, dashboard",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Status indicator colors
  28 +27,EV/Charging Ecosystem,"charging, ecosystem",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Electric Blue (#009CD1) + Green
  29 +28,Subscription Box Service,"subscription, box, service",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand + Excitement colors
  30 +29,Podcast Platform,"podcast, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Audio waveform accents
  31 +30,Dating App,"dating, app",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Warm + Romantic (Pink/Red gradients)
  32 +31,Micro-Credentials/Badges Platform,"micro, credentials, badges, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust Blue + Gold (#FFD700)
  33 +32,Knowledge Base/Documentation,"knowledge, base, documentation",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Clean hierarchy + minimal color
  34 +33,Hyperlocal Services,"hyperlocal, services",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Location markers + Trust colors
  35 +34,Beauty/Spa/Wellness Service,"beauty, spa, wellness, service",#10B981,#34D399,#8B5CF6,#ECFDF5,#064E3B,#A7F3D0,Soft pastels (Pink #FFB6C1 Sage #90EE90) + Cream + Gold accents
  36 +35,Luxury/Premium Brand,"luxury, premium, brand",#1C1917,#44403C,#CA8A04,#FAFAF9,#0C0A09,#D6D3D1,Black + Gold (#FFD700) + White + Minimal accent
  37 +36,Restaurant/Food Service,"restaurant, food, service",#DC2626,#F87171,#CA8A04,#FEF2F2,#450A0A,#FECACA,Warm colors (Orange Red Brown) + appetizing imagery
  38 +37,Fitness/Gym App,"fitness, gym, app",#DC2626,#F87171,#16A34A,#FEF2F2,#1F2937,#FECACA,Energetic (Orange #FF6B35 Electric Blue) + Dark bg
  39 +38,Real Estate/Property,"real, estate, property",#0F766E,#14B8A6,#0369A1,#F0FDFA,#134E4A,#99F6E4,Trust Blue (#0077B6) + Gold accents + White
  40 +39,Travel/Tourism Agency,"travel, tourism, agency",#EC4899,#F472B6,#06B6D4,#FDF2F8,#831843,#FBCFE8,Vibrant destination colors + Sky Blue + Warm accents
  41 +40,Hotel/Hospitality,"hotel, hospitality",#1E3A8A,#3B82F6,#CA8A04,#F8FAFC,#1E40AF,#BFDBFE,Warm neutrals + Gold (#D4AF37) + Brand accent
  42 +41,Wedding/Event Planning,"wedding, event, planning",#7C3AED,#A78BFA,#F97316,#FAF5FF,#4C1D95,#DDD6FE,Soft Pink (#FFD6E0) + Gold + Cream + Sage
  43 +42,Legal Services,"legal, services",#1E3A8A,#1E40AF,#B45309,#F8FAFC,#0F172A,#CBD5E1,Navy Blue (#1E3A5F) + Gold + White
  44 +43,Insurance Platform,"insurance, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust Blue (#0066CC) + Green (security) + Neutral
  45 +44,Banking/Traditional Finance,"banking, traditional, finance",#0F766E,#14B8A6,#0369A1,#F0FDFA,#134E4A,#99F6E4,Navy (#0A1628) + Trust Blue + Gold accents
  46 +45,Online Course/E-learning,"online, course, learning",#0D9488,#2DD4BF,#EA580C,#F0FDFA,#134E4A,#5EEAD4,Vibrant learning colors + Progress green
  47 +46,Non-profit/Charity,"non, profit, charity",#0891B2,#22D3EE,#F97316,#ECFEFF,#164E63,#A5F3FC,Cause-related colors + Trust + Warm
  48 +47,Music Streaming,"music, streaming",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark (#121212) + Vibrant accents + Album art colors
  49 +48,Video Streaming/OTT,"video, streaming, ott",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark bg + Content poster colors + Brand accent
  50 +49,Job Board/Recruitment,"job, board, recruitment",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional Blue + Success Green + Neutral
  51 +50,Marketplace (P2P),"marketplace, p2p",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust colors + Category colors + Success green
  52 +51,Logistics/Delivery,"logistics, delivery",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Blue (#2563EB) + Orange (tracking) + Green (delivered)
  53 +52,Agriculture/Farm Tech,"agriculture, farm, tech",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Earth Green (#4A7C23) + Brown + Sky Blue
  54 +53,Construction/Architecture,"construction, architecture",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Grey (#4A4A4A) + Orange (safety) + Blueprint Blue
  55 +54,Automotive/Car Dealership,"automotive, car, dealership",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand colors + Metallic accents + Dark/Light
  56 +55,Photography Studio,"photography, studio",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Black + White + Minimal accent
  57 +56,Coworking Space,"coworking, space",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Energetic colors + Wood tones + Brand accent
  58 +57,Cleaning Service,"cleaning, service",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Fresh Blue (#00B4D8) + Clean White + Green
  59 +58,Home Services (Plumber/Electrician),"home, services, plumber, electrician",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Trust Blue + Safety Orange + Professional grey
  60 +59,Childcare/Daycare,"childcare, daycare",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Playful pastels + Safe colors + Warm accents
  61 +60,Senior Care/Elderly,"senior, care, elderly",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Calm Blue + Warm neutrals + Large text
  62 +61,Medical Clinic,"medical, clinic",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Medical Blue (#0077B6) + Trust White + Calm Green
  63 +62,Pharmacy/Drug Store,"pharmacy, drug, store",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Pharmacy Green + Trust Blue + Clean White
  64 +63,Dental Practice,"dental, practice",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Fresh Blue + White + Smile Yellow accent
  65 +64,Veterinary Clinic,"veterinary, clinic",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Caring Blue + Pet-friendly colors + Warm accents
  66 +65,Florist/Plant Shop,"florist, plant, shop",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Natural Green + Floral pinks/purples + Earth tones
  67 +66,Bakery/Cafe,"bakery, cafe",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Warm Brown + Cream + Appetizing accents
  68 +67,Coffee Shop,"coffee, shop",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Coffee Brown (#6F4E37) + Cream + Warm accents
  69 +68,Brewery/Winery,"brewery, winery",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Deep amber/burgundy + Gold + Craft aesthetic
  70 +69,Airline,airline,#7C3AED,#A78BFA,#06B6D4,#FAF5FF,#1E1B4B,#DDD6FE,Sky Blue + Brand colors + Trust accents
  71 +70,News/Media Platform,"news, media, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand colors + High contrast + Category colors
  72 +71,Magazine/Blog,"magazine, blog",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Editorial colors + Brand primary + Clean white
  73 +72,Freelancer Platform,"freelancer, platform",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional Blue + Success Green + Neutral
  74 +73,Consulting Firm,"consulting, firm",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Navy + Gold + Professional grey
  75 +74,Marketing Agency,"marketing, agency",#EC4899,#F472B6,#06B6D4,#FDF2F8,#831843,#FBCFE8,Bold brand colors + Creative freedom
  76 +75,Event Management,"event, management",#7C3AED,#A78BFA,#F97316,#FAF5FF,#4C1D95,#DDD6FE,Event theme colors + Excitement accents
  77 +76,Conference/Webinar Platform,"conference, webinar, platform",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional Blue + Video accent + Brand
  78 +77,Membership/Community,"membership, community",#7C3AED,#A78BFA,#F97316,#FAF5FF,#4C1D95,#DDD6FE,Community brand colors + Engagement accents
  79 +78,Newsletter Platform,"newsletter, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand primary + Clean white + CTA accent
  80 +79,Digital Products/Downloads,"digital, products, downloads",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Product category colors + Brand + Success green
  81 +80,Church/Religious Organization,"church, religious, organization",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Warm Gold + Deep Purple/Blue + White
  82 +81,Sports Team/Club,"sports, team, club",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Team colors + Energetic accents
  83 +82,Museum/Gallery,"museum, gallery",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Art-appropriate neutrals + Exhibition accents
  84 +83,Theater/Cinema,"theater, cinema",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Spotlight accents + Gold
  85 +84,Language Learning App,"language, learning, app",#0D9488,#2DD4BF,#EA580C,#F0FDFA,#134E4A,#5EEAD4,Playful colors + Progress indicators + Country flags
  86 +85,Coding Bootcamp,"coding, bootcamp",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Code editor colors + Brand + Success green
  87 +86,Cybersecurity Platform,"cybersecurity, security, cyber, hacker",#00FF41,#0D0D0D,#00FF41,#000000,#E0E0E0,#1F1F1F,Matrix Green + Deep Black + Terminal feel
  88 +87,Developer Tool / IDE,"developer, tool, ide, code, dev",#3B82F6,#1E293B,#2563EB,#0F172A,#F1F5F9,#334155,Dark syntax theme colors + Blue focus
  89 +88,Biotech / Life Sciences,"biotech, science, biology, medical",#0EA5E9,#0284C7,#10B981,#F8FAFC,#0F172A,#E2E8F0,Sterile White + DNA Blue + Life Green
  90 +89,Space Tech / Aerospace,"space, aerospace, tech, futuristic",#FFFFFF,#94A3B8,#3B82F6,#0B0B10,#F8FAFC,#1E293B,Deep Space Black + Star White + Metallic
  91 +90,Architecture / Interior,"architecture, interior, design, luxury",#171717,#404040,#D4AF37,#FFFFFF,#171717,#E5E5E5,Monochrome + Gold Accent + High Imagery
  92 +91,Quantum Computing,"quantum, qubit, tech",#00FFFF,#7B61FF,#FF00FF,#050510,#E0E0FF,#333344,Interference patterns + Neon + Deep Dark
  93 +92,Biohacking / Longevity,"bio, health, science",#FF4D4D,#4D94FF,#00E676,#F5F5F7,#1C1C1E,#E5E5EA,Biological red/blue + Clinical white
  94 +93,Autonomous Systems,"drone, robot, fleet",#00FF41,#008F11,#FF3333,#0D1117,#E6EDF3,#30363D,Terminal Green + Tactical Dark
  95 +94,Generative AI Art,"art, gen-ai, creative",#111111,#333333,#FFFFFF,#FAFAFA,#000000,#E5E5E5,Canvas Neutral + High Contrast
  96 +95,Spatial / Vision OS,"spatial, glass, vision",#FFFFFF,#E5E5E5,#007AFF,#888888,#000000,#FFFFFF,Glass opacity 20% + System Blue
  97 +96,Climate Tech,"climate, green, energy",#2E8B57,#87CEEB,#FFD700,#F0FFF4,#1A3320,#C6E6C6,Nature Green + Solar Yellow + Air Blue
0 98 \ No newline at end of file
... ...
.shared/ui-ux-pro-max/data/landing.csv 0 → 100644
  1 +No,Pattern Name,Keywords,Section Order,Primary CTA Placement,Color Strategy,Recommended Effects,Conversion Optimization
  2 +1,Hero + Features + CTA,"hero, hero-centric, features, feature-rich, cta, call-to-action","1. Hero with headline/image, 2. Value prop, 3. Key features (3-5), 4. CTA section, 5. Footer",Hero (sticky) + Bottom,Hero: Brand primary or vibrant. Features: Card bg #FAFAFA. CTA: Contrasting accent color,"Hero parallax, feature card hover lift, CTA glow on hover",Deep CTA placement. Use contrasting color (at least 7:1 contrast ratio). Sticky navbar CTA.
  3 +2,Hero + Testimonials + CTA,"hero, testimonials, social-proof, trust, reviews, cta","1. Hero, 2. Problem statement, 3. Solution overview, 4. Testimonials carousel, 5. CTA",Hero (sticky) + Post-testimonials,"Hero: Brand color. Testimonials: Light bg #F5F5F5. Quotes: Italic, muted color #666. CTA: Vibrant","Testimonial carousel slide animations, quote marks animations, avatar fade-in",Social proof before CTA. Use 3-5 testimonials. Include photo + name + role. CTA after social proof.
  4 +3,Product Demo + Features,"demo, product-demo, features, showcase, interactive","1. Hero, 2. Product video/mockup (center), 3. Feature breakdown per section, 4. Comparison (optional), 5. CTA",Video center + CTA right/bottom,Video surround: Brand color overlay. Features: Icon color #0080FF. Text: Dark #222,"Video play button pulse, feature scroll reveals, demo interaction highlights",Embedded product demo increases engagement. Use interactive mockup if possible. Auto-play video muted.
  5 +4,Minimal Single Column,"minimal, simple, direct, single-column, clean","1. Hero headline, 2. Short description, 3. Benefit bullets (3 max), 4. CTA, 5. Footer","Center, large CTA button",Minimalist: Brand + white #FFFFFF + accent. Buttons: High contrast 7:1+. Text: Black/Dark grey,Minimal hover effects. Smooth scroll. CTA scale on hover (subtle),Single CTA focus. Large typography. Lots of whitespace. No nav clutter. Mobile-first.
  6 +5,Funnel (3-Step Conversion),"funnel, conversion, steps, wizard, onboarding","1. Hero, 2. Step 1 (problem), 3. Step 2 (solution), 4. Step 3 (action), 5. CTA progression",Each step: mini-CTA. Final: main CTA,"Step colors: 1 (Red/Problem), 2 (Orange/Process), 3 (Green/Solution). CTA: Brand color","Step number animations, progress bar fill, step transitions smooth scroll",Progressive disclosure. Show only essential info per step. Use progress indicators. Multiple CTAs.
  7 +6,Comparison Table + CTA,"comparison, table, compare, versus, cta","1. Hero, 2. Problem intro, 3. Comparison table (product vs competitors), 4. Pricing (optional), 5. CTA",Table: Right column. CTA: Below table,Table: Alternating rows (white/light grey). Your product: Highlight #FFFACD (light yellow) or green. Text: Dark,"Table row hover highlight, price toggle animations, feature checkmark animations",Use comparison to show unique value. Highlight your product row. Include 'free trial' in pricing row.
  8 +7,Lead Magnet + Form,"lead, form, signup, capture, email, magnet","1. Hero (benefit headline), 2. Lead magnet preview (ebook cover, checklist, etc), 3. Form (minimal fields), 4. CTA submit",Form CTA: Submit button,Lead magnet: Professional design. Form: Clean white bg. Inputs: Light border #CCCCCC. CTA: Brand color,"Form focus state animations, input validation animations, success confirmation animation",Form fields ≤ 3 for best conversion. Offer valuable lead magnet preview. Show form submission progress.
  9 +8,Pricing Page + CTA,"pricing, plans, tiers, comparison, cta","1. Hero (pricing headline), 2. Price comparison cards, 3. Feature comparison table, 4. FAQ section, 5. Final CTA",Each card: CTA button. Sticky CTA in nav,"Free: Grey, Starter: Blue, Pro: Green/Gold, Enterprise: Dark. Cards: 1px border, shadow","Price toggle animation (monthly/yearly), card comparison highlight, FAQ accordion open/close",Recommend starter plan (pre-select/highlight). Show annual discount (20-30%). Use FAQs to address concerns.
  10 +9,Video-First Hero,"video, hero, media, visual, engaging","1. Hero with video background, 2. Key features overlay, 3. Benefits section, 4. CTA",Overlay on video (center/bottom) + Bottom section,Dark overlay 60% on video. Brand accent for CTA. White text on dark.,"Video autoplay muted, parallax scroll, text fade-in on scroll",86% higher engagement with video. Add captions for accessibility. Compress video for performance.
  11 +10,Scroll-Triggered Storytelling,"storytelling, scroll, narrative, story, immersive","1. Intro hook, 2. Chapter 1 (problem), 3. Chapter 2 (journey), 4. Chapter 3 (solution), 5. Climax CTA",End of each chapter (mini) + Final climax CTA,Progressive reveal. Each chapter has distinct color. Building intensity.,"ScrollTrigger animations, parallax layers, progressive disclosure, chapter transitions",Narrative increases time-on-page 3x. Use progress indicator. Mobile: simplify animations.
  12 +11,AI Personalization Landing,"ai, personalization, smart, recommendation, dynamic","1. Dynamic hero (personalized), 2. Relevant features, 3. Tailored testimonials, 4. Smart CTA",Context-aware placement based on user segment,Adaptive based on user data. A/B test color variations per segment.,"Dynamic content swap, fade transitions, personalized product recommendations",20%+ conversion with personalization. Requires analytics integration. Fallback for new users.
  13 +12,Waitlist/Coming Soon,"waitlist, coming-soon, launch, early-access, notify","1. Hero with countdown, 2. Product teaser/preview, 3. Email capture form, 4. Social proof (waitlist count)",Email form prominent (above fold) + Sticky form on scroll,Anticipation: Dark + accent highlights. Countdown in brand color. Urgency indicators.,"Countdown timer animation, email validation feedback, success confetti, social share buttons",Scarcity + exclusivity. Show waitlist count. Early access benefits. Referral program.
  14 +13,Comparison Table Focus,"comparison, table, versus, compare, features","1. Hero (problem statement), 2. Comparison matrix (you vs competitors), 3. Feature deep-dive, 4. Winner CTA",After comparison table (highlighted row) + Bottom,Your product column highlighted (accent bg or green). Competitors neutral. Checkmarks green.,"Table row hover highlight, feature checkmark animations, sticky comparison header",Show value vs competitors. 35% higher conversion. Be factual. Include pricing if favorable.
  15 +14,Pricing-Focused Landing,"pricing, price, cost, plans, subscription","1. Hero (value proposition), 2. Pricing cards (3 tiers), 3. Feature comparison, 4. FAQ, 5. Final CTA",Each pricing card + Sticky CTA in nav + Bottom,Popular plan highlighted (brand color border/bg). Free: grey. Enterprise: dark/premium.,"Price toggle monthly/annual animation, card hover lift, FAQ accordion smooth open",Annual discount 20-30%. Recommend mid-tier (most popular badge). Address objections in FAQ.
  16 +15,App Store Style Landing,"app, mobile, download, store, install","1. Hero with device mockup, 2. Screenshots carousel, 3. Features with icons, 4. Reviews/ratings, 5. Download CTAs",Download buttons prominent (App Store + Play Store) throughout,Dark/light matching app store feel. Star ratings in gold. Screenshots with device frames.,"Device mockup rotations, screenshot slider, star rating animations, download button pulse",Show real screenshots. Include ratings (4.5+ stars). QR code for mobile. Platform-specific CTAs.
  17 +16,FAQ/Documentation Landing,"faq, documentation, help, support, questions","1. Hero with search bar, 2. Popular categories, 3. FAQ accordion, 4. Contact/support CTA",Search bar prominent + Contact CTA for unresolved questions,"Clean, high readability. Minimal color. Category icons in brand color. Success green for resolved.","Search autocomplete, smooth accordion open/close, category hover, helpful feedback buttons",Reduce support tickets. Track search analytics. Show related articles. Contact escalation path.
  18 +17,Immersive/Interactive Experience,"immersive, interactive, experience, 3d, animation","1. Full-screen interactive element, 2. Guided product tour, 3. Key benefits revealed, 4. CTA after completion",After interaction complete + Skip option for impatient users,Immersive experience colors. Dark background for focus. Highlight interactive elements.,"WebGL, 3D interactions, gamification elements, progress indicators, reward animations",40% higher engagement. Performance trade-off. Provide skip option. Mobile fallback essential.
  19 +18,Event/Conference Landing,"event, conference, meetup, registration, schedule","1. Hero (date/location/countdown), 2. Speakers grid, 3. Agenda/schedule, 4. Sponsors, 5. Register CTA",Register CTA sticky + After speakers + Bottom,Urgency colors (countdown). Event branding. Speaker cards professional. Sponsor logos neutral.,"Countdown timer, speaker hover cards with bio, agenda tabs, early bird countdown",Early bird pricing with deadline. Social proof (past attendees). Speaker credibility. Multi-ticket discounts.
  20 +19,Product Review/Ratings Focused,"reviews, ratings, testimonials, social-proof, stars","1. Hero (product + aggregate rating), 2. Rating breakdown, 3. Individual reviews, 4. Buy/CTA",After reviews summary + Buy button alongside reviews,Trust colors. Star ratings gold. Verified badge green. Review sentiment colors.,"Star fill animations, review filtering, helpful vote interactions, photo lightbox",User-generated content builds trust. Show verified purchases. Filter by rating. Respond to negative reviews.
  21 +20,Community/Forum Landing,"community, forum, social, members, discussion","1. Hero (community value prop), 2. Popular topics/categories, 3. Active members showcase, 4. Join CTA",Join button prominent + After member showcase,"Warm, welcoming. Member photos add humanity. Topic badges in brand colors. Activity indicators green.","Member avatars animation, activity feed live updates, topic hover previews, join success celebration","Show active community (member count, posts today). Highlight benefits. Preview content. Easy onboarding."
  22 +21,Before-After Transformation,"before-after, transformation, results, comparison","1. Hero (problem state), 2. Transformation slider/comparison, 3. How it works, 4. Results CTA",After transformation reveal + Bottom,Contrast: muted/grey (before) vs vibrant/colorful (after). Success green for results.,"Slider comparison interaction, before/after reveal animations, result counters, testimonial videos",Visual proof of value. 45% higher conversion. Real results. Specific metrics. Guarantee offer.
  23 +22,Marketplace / Directory,"marketplace, directory, search, listing","1. Hero (Search focused), 2. Categories, 3. Featured Listings, 4. Trust/Safety, 5. CTA (Become a host/seller)",Hero Search Bar + Navbar 'List your item',Search: High contrast. Categories: Visual icons. Trust: Blue/Green.,Search autocomplete animation, map hover pins, card carousel,Search bar is the CTA. Reduce friction to search. Popular searches suggestions.
  24 +23,Newsletter / Content First,"newsletter, content, writer, blog, subscribe","1. Hero (Value Prop + Form), 2. Recent Issues/Archives, 3. Social Proof (Subscriber count), 4. About Author",Hero inline form + Sticky header form,Minimalist. Paper-like background. Text focus. Accent color for Subscribe.,Text highlight animations, typewriter effect, subtle fade-in,Single field form (Email only). Show 'Join X,000 readers'. Read sample link.
  25 +24,Webinar Registration,"webinar, registration, event, training, live","1. Hero (Topic + Timer + Form), 2. What you'll learn, 3. Speaker Bio, 4. Urgency/Bonuses, 5. Form (again)",Hero (Right side form) + Bottom anchor,Urgency: Red/Orange. Professional: Blue/Navy. Form: High contrast white.,Countdown timer, speaker avatar float, urgent ticker,Limited seats logic. 'Live' indicator. Auto-fill timezone.
  26 +25,Enterprise Gateway,"enterprise, corporate, gateway, solutions, portal","1. Hero (Video/Mission), 2. Solutions by Industry, 3. Solutions by Role, 4. Client Logos, 5. Contact Sales",Contact Sales (Primary) + Login (Secondary),Corporate: Navy/Grey. High integrity. Conservative accents.,Slow video background, logo carousel, tab switching for industries,Path selection (I am a...). Mega menu navigation. Trust signals prominent.
  27 +26,Portfolio Grid,"portfolio, grid, showcase, gallery, masonry","1. Hero (Name/Role), 2. Project Grid (Masonry), 3. About/Philosophy, 4. Contact",Project Card Hover + Footer Contact,Neutral background (let work shine). Text: Black/White. Accent: Minimal.,Image lazy load reveal, hover overlay info, lightbox view,Visuals first. Filter by category. Fast loading essential.
  28 +27,Horizontal Scroll Journey,"horizontal, scroll, journey, gallery, storytelling, panoramic","1. Intro (Vertical), 2. The Journey (Horizontal Track), 3. Detail Reveal, 4. Vertical Footer","Floating Sticky CTA or End of Horizontal Track","Continuous palette transition. Chapter colors. Progress bar #000000.","Scroll-jacking (careful), parallax layers, horizontal slide, progress indicator","Immersive product discovery. High engagement. Keep navigation visible.
  29 +28,Bento Grid Showcase,"bento, grid, features, modular, apple-style, showcase","1. Hero, 2. Bento Grid (Key Features), 3. Detail Cards, 4. Tech Specs, 5. CTA","Floating Action Button or Bottom of Grid","Card backgrounds: #F5F5F7 or Glass. Icons: Vibrant brand colors. Text: Dark.","Hover card scale (1.02), video inside cards, tilt effect, staggered reveal","Scannable value props. High information density without clutter. Mobile stack.
  30 +29,Interactive 3D Configurator,"3d, configurator, customizer, interactive, product","1. Hero (Configurator), 2. Feature Highlight (synced), 3. Price/Specs, 4. Purchase","Inside Configurator UI + Sticky Bottom Bar","Neutral studio background. Product: Realistic materials. UI: Minimal overlay.","Real-time rendering, material swap animation, camera rotate/zoom, light reflection","Increases ownership feeling. 360 view reduces return rates. Direct add-to-cart.
  31 +30,AI-Driven Dynamic Landing,"ai, dynamic, personalized, adaptive, generative","1. Prompt/Input Hero, 2. Generated Result Preview, 3. How it Works, 4. Value Prop","Input Field (Hero) + 'Try it' Buttons","Adaptive to user input. Dark mode for compute feel. Neon accents.","Typing text effects, shimmering generation loaders, morphing layouts","Immediate value demonstration. 'Show, don't tell'. Low friction start.
0 32 \ No newline at end of file
... ...
.shared/ui-ux-pro-max/data/products.csv 0 → 100644
  1 +No,Product Type,Keywords,Primary Style Recommendation,Secondary Styles,Landing Page Pattern,Dashboard Style (if applicable),Color Palette Focus,Key Considerations
  2 +1,SaaS (General),"app, b2b, cloud, general, saas, software, subscription",Glassmorphism + Flat Design,"Soft UI Evolution, Minimalism",Hero + Features + CTA,Data-Dense + Real-Time Monitoring,Trust blue + accent contrast,Balance modern feel with clarity. Focus on CTAs.
  3 +2,Micro SaaS,"app, b2b, cloud, indie, micro, micro-saas, niche, saas, small, software, solo, subscription",Flat Design + Vibrant & Block,"Motion-Driven, Micro-interactions",Minimal & Direct + Demo,Executive Dashboard,Vibrant primary + white space,"Keep simple, show product quickly. Speed is key."
  4 +3,E-commerce,"buy, commerce, e, ecommerce, products, retail, sell, shop, store",Vibrant & Block-based,"Aurora UI, Motion-Driven",Feature-Rich Showcase,Sales Intelligence Dashboard,Brand primary + success green,Engagement & conversions. High visual hierarchy.
  5 +4,E-commerce Luxury,"buy, commerce, e, ecommerce, elegant, exclusive, high-end, luxury, premium, products, retail, sell, shop, store",Liquid Glass + Glassmorphism,"3D & Hyperrealism, Aurora UI",Feature-Rich Showcase,Sales Intelligence Dashboard,Premium colors + minimal accent,Elegance & sophistication. Premium materials.
  6 +5,Service Landing Page,"appointment, booking, consultation, conversion, landing, marketing, page, service",Hero-Centric + Trust & Authority,"Social Proof-Focused, Storytelling",Hero-Centric Design,N/A - Analytics for conversions,Brand primary + trust colors,Social proof essential. Show expertise.
  7 +6,B2B Service,"appointment, b, b2b, booking, business, consultation, corporate, enterprise, service",Trust & Authority + Minimal,"Feature-Rich, Conversion-Optimized",Feature-Rich Showcase,Sales Intelligence Dashboard,Professional blue + neutral grey,Credibility essential. Clear ROI messaging.
  8 +7,Financial Dashboard,"admin, analytics, dashboard, data, financial, panel",Dark Mode (OLED) + Data-Dense,"Minimalism, Accessible & Ethical",N/A - Dashboard focused,Financial Dashboard,Dark bg + red/green alerts + trust blue,"High contrast, real-time updates, accuracy paramount."
  9 +8,Analytics Dashboard,"admin, analytics, dashboard, data, panel",Data-Dense + Heat Map & Heatmap,"Minimalism, Dark Mode (OLED)",N/A - Analytics focused,Drill-Down Analytics + Comparative,Cool→Hot gradients + neutral grey,Clarity > aesthetics. Color-coded data priority.
  10 +9,Healthcare App,"app, clinic, health, healthcare, medical, patient",Neumorphism + Accessible & Ethical,"Soft UI Evolution, Claymorphism (for patients)",Social Proof-Focused,User Behavior Analytics,Calm blue + health green + trust,Accessibility mandatory. Calming aesthetic.
  11 +10,Educational App,"app, course, education, educational, learning, school, training",Claymorphism + Micro-interactions,"Vibrant & Block-based, Flat Design",Storytelling-Driven,User Behavior Analytics,Playful colors + clear hierarchy,Engagement & ease of use. Age-appropriate design.
  12 +11,Creative Agency,"agency, creative, design, marketing, studio",Brutalism + Motion-Driven,"Retro-Futurism, Storytelling-Driven",Storytelling-Driven,N/A - Portfolio focused,Bold primaries + artistic freedom,Differentiation key. Wow-factor necessary.
  13 +12,Portfolio/Personal,"creative, personal, portfolio, projects, showcase, work",Motion-Driven + Minimalism,"Brutalism, Aurora UI",Storytelling-Driven,N/A - Personal branding,Brand primary + artistic interpretation,Showcase work. Personality shine through.
  14 +13,Gaming,"entertainment, esports, game, gaming, play",3D & Hyperrealism + Retro-Futurism,"Motion-Driven, Vibrant & Block",Feature-Rich Showcase,N/A - Game focused,Vibrant + neon + immersive colors,Immersion priority. Performance critical.
  15 +14,Government/Public Service,"appointment, booking, consultation, government, public, service",Accessible & Ethical + Minimalism,"Flat Design, Inclusive Design",Minimal & Direct,Executive Dashboard,Professional blue + high contrast,WCAG AAA mandatory. Trust paramount.
  16 +15,Fintech/Crypto,"banking, blockchain, crypto, defi, finance, fintech, money, nft, payment, web3",Glassmorphism + Dark Mode (OLED),"Retro-Futurism, Motion-Driven",Conversion-Optimized,Real-Time Monitoring + Predictive,Dark tech colors + trust + vibrant accents,Security perception. Real-time data critical.
  17 +16,Social Media App,"app, community, content, entertainment, media, network, sharing, social, streaming, users, video",Vibrant & Block-based + Motion-Driven,"Aurora UI, Micro-interactions",Feature-Rich Showcase,User Behavior Analytics,Vibrant + engagement colors,Engagement & retention. Addictive design ethics.
  18 +17,Productivity Tool,"collaboration, productivity, project, task, tool, workflow",Flat Design + Micro-interactions,"Minimalism, Soft UI Evolution",Interactive Product Demo,Drill-Down Analytics,Clear hierarchy + functional colors,Ease of use. Speed & efficiency focus.
  19 +18,Design System/Component Library,"component, design, library, system",Minimalism + Accessible & Ethical,"Flat Design, Zero Interface",Feature-Rich Showcase,N/A - Dev focused,Clear hierarchy + code-like structure,Consistency. Developer-first approach.
  20 +19,AI/Chatbot Platform,"ai, artificial-intelligence, automation, chatbot, machine-learning, ml, platform",AI-Native UI + Minimalism,"Zero Interface, Glassmorphism",Interactive Product Demo,AI/ML Analytics Dashboard,Neutral + AI Purple (#6366F1),Conversational UI. Streaming text. Context awareness. Minimal chrome.
  21 +20,NFT/Web3 Platform,"nft, platform, web",Cyberpunk UI + Glassmorphism,"Aurora UI, 3D & Hyperrealism",Feature-Rich Showcase,Crypto/Blockchain Dashboard,Dark + Neon + Gold (#FFD700),Wallet integration. Transaction feedback. Gas fees display. Dark mode essential.
  22 +21,Creator Economy Platform,"creator, economy, platform",Vibrant & Block-based + Bento Box Grid,"Motion-Driven, Aurora UI",Social Proof-Focused,User Behavior Analytics,Vibrant + Brand colors,Creator profiles. Monetization display. Engagement metrics. Social proof.
  23 +22,Sustainability/ESG Platform,"ai, artificial-intelligence, automation, esg, machine-learning, ml, platform, sustainability",Organic Biophilic + Minimalism,"Accessible & Ethical, Flat Design",Trust & Authority,Energy/Utilities Dashboard,Green (#228B22) + Earth tones,Carbon footprint visuals. Progress indicators. Certification badges. Eco-friendly imagery.
  24 +23,Remote Work/Collaboration Tool,"collaboration, remote, tool, work",Soft UI Evolution + Minimalism,"Glassmorphism, Micro-interactions",Feature-Rich Showcase,Drill-Down Analytics,Calm Blue + Neutral grey,Real-time collaboration. Status indicators. Video integration. Notification management.
  25 +24,Mental Health App,"app, health, mental",Neumorphism + Accessible & Ethical,"Claymorphism, Soft UI Evolution",Social Proof-Focused,Healthcare Analytics,Calm Pastels + Trust colors,Calming aesthetics. Privacy-first. Crisis resources. Progress tracking. Accessibility mandatory.
  26 +25,Pet Tech App,"app, pet, tech",Claymorphism + Vibrant & Block-based,"Micro-interactions, Flat Design",Storytelling-Driven,User Behavior Analytics,Playful + Warm colors,Pet profiles. Health tracking. Playful UI. Photo galleries. Vet integration.
  27 +26,Smart Home/IoT Dashboard,"admin, analytics, dashboard, data, home, iot, panel, smart",Glassmorphism + Dark Mode (OLED),"Minimalism, AI-Native UI",Interactive Product Demo,Real-Time Monitoring,Dark + Status indicator colors,Device status. Real-time controls. Energy monitoring. Automation rules. Quick actions.
  28 +27,EV/Charging Ecosystem,"charging, ecosystem, ev",Minimalism + Aurora UI,"Glassmorphism, Organic Biophilic",Hero-Centric Design,Energy/Utilities Dashboard,Electric Blue (#009CD1) + Green,Charging station maps. Range estimation. Cost calculation. Environmental impact.
  29 +28,Subscription Box Service,"appointment, booking, box, consultation, membership, plan, recurring, service, subscription",Vibrant & Block-based + Motion-Driven,"Claymorphism, Aurora UI",Feature-Rich Showcase,E-commerce Analytics,Brand + Excitement colors,Unboxing experience. Personalization quiz. Subscription management. Product reveals.
  30 +29,Podcast Platform,"platform, podcast",Dark Mode (OLED) + Minimalism,"Motion-Driven, Vibrant & Block-based",Storytelling-Driven,Media/Entertainment Dashboard,Dark + Audio waveform accents,Audio player UX. Episode discovery. Creator tools. Analytics for podcasters.
  31 +30,Dating App,"app, dating",Vibrant & Block-based + Motion-Driven,"Aurora UI, Glassmorphism",Social Proof-Focused,User Behavior Analytics,Warm + Romantic (Pink/Red gradients),Profile cards. Swipe interactions. Match animations. Safety features. Video chat.
  32 +31,Micro-Credentials/Badges Platform,"badges, credentials, micro, platform",Minimalism + Flat Design,"Accessible & Ethical, Swiss Modernism 2.0",Trust & Authority,Education Dashboard,Trust Blue + Gold (#FFD700),Credential verification. Badge display. Progress tracking. Issuer trust. LinkedIn integration.
  33 +32,Knowledge Base/Documentation,"base, documentation, knowledge",Minimalism + Accessible & Ethical,"Swiss Modernism 2.0, Flat Design",FAQ/Documentation,N/A - Documentation focused,Clean hierarchy + minimal color,Search-first. Clear navigation. Code highlighting. Version switching. Feedback system.
  34 +33,Hyperlocal Services,"appointment, booking, consultation, hyperlocal, service, services",Minimalism + Vibrant & Block-based,"Micro-interactions, Flat Design",Conversion-Optimized,Drill-Down Analytics + Map,Location markers + Trust colors,Map integration. Service categories. Provider profiles. Booking system. Reviews.
  35 +34,Beauty/Spa/Wellness Service,"appointment, beauty, booking, consultation, service, spa, wellness",Soft UI Evolution + Neumorphism,"Glassmorphism, Minimalism",Hero-Centric Design + Social Proof,User Behavior Analytics,Soft pastels (Pink #FFB6C1 Sage #90EE90) + Cream + Gold accents,Calming aesthetic. Booking system. Service menu. Before/after gallery. Testimonials. Relaxing imagery.
  36 +35,Luxury/Premium Brand,"brand, elegant, exclusive, high-end, luxury, premium",Liquid Glass + Glassmorphism,"Minimalism, 3D & Hyperrealism",Storytelling-Driven + Feature-Rich,Sales Intelligence Dashboard,Black + Gold (#FFD700) + White + Minimal accent,Elegance paramount. Premium imagery. Storytelling. High-quality visuals. Exclusive feel.
  37 +36,Restaurant/Food Service,"appointment, booking, consultation, delivery, food, menu, order, restaurant, service",Vibrant & Block-based + Motion-Driven,"Claymorphism, Flat Design",Hero-Centric Design + Conversion,N/A - Booking focused,Warm colors (Orange Red Brown) + appetizing imagery,Menu display. Online ordering. Reservation system. Food photography. Location/hours prominent.
  38 +37,Fitness/Gym App,"app, exercise, fitness, gym, health, workout",Vibrant & Block-based + Dark Mode (OLED),"Motion-Driven, Neumorphism",Feature-Rich Showcase,User Behavior Analytics,Energetic (Orange #FF6B35 Electric Blue) + Dark bg,Progress tracking. Workout plans. Community features. Achievements. Motivational design.
  39 +38,Real Estate/Property,"buy, estate, housing, property, real, real-estate, rent",Glassmorphism + Minimalism,"Motion-Driven, 3D & Hyperrealism",Hero-Centric Design + Feature-Rich,Sales Intelligence Dashboard,Trust Blue (#0077B6) + Gold accents + White,Property listings. Virtual tours. Map integration. Agent profiles. Mortgage calculator. High-quality imagery.
  40 +39,Travel/Tourism Agency,"agency, booking, creative, design, flight, hotel, marketing, studio, tourism, travel, vacation",Aurora UI + Motion-Driven,"Vibrant & Block-based, Glassmorphism",Storytelling-Driven + Hero-Centric,Booking Analytics,Vibrant destination colors + Sky Blue + Warm accents,Destination showcase. Booking system. Itinerary builder. Reviews. Inspiration galleries. Mobile-first.
  41 +40,Hotel/Hospitality,"hospitality, hotel",Liquid Glass + Minimalism,"Glassmorphism, Soft UI Evolution",Hero-Centric Design + Social Proof,Revenue Management Dashboard,Warm neutrals + Gold (#D4AF37) + Brand accent,Room booking. Amenities showcase. Location maps. Guest reviews. Seasonal pricing. Luxury imagery.
  42 +41,Wedding/Event Planning,"conference, event, meetup, planning, registration, ticket, wedding",Soft UI Evolution + Aurora UI,"Glassmorphism, Motion-Driven",Storytelling-Driven + Social Proof,N/A - Planning focused,Soft Pink (#FFD6E0) + Gold + Cream + Sage,Portfolio gallery. Vendor directory. Planning tools. Timeline. Budget tracker. Romantic aesthetic.
  43 +42,Legal Services,"appointment, attorney, booking, compliance, consultation, contract, law, legal, service, services",Trust & Authority + Minimalism,"Accessible & Ethical, Swiss Modernism 2.0",Trust & Authority + Minimal,Case Management Dashboard,Navy Blue (#1E3A5F) + Gold + White,Credibility paramount. Practice areas. Attorney profiles. Case results. Contact forms. Professional imagery.
  44 +43,Insurance Platform,"insurance, platform",Trust & Authority + Flat Design,"Accessible & Ethical, Minimalism",Conversion-Optimized + Trust,Claims Analytics Dashboard,Trust Blue (#0066CC) + Green (security) + Neutral,Quote calculator. Policy comparison. Claims process. Trust signals. Clear pricing. Security badges.
  45 +44,Banking/Traditional Finance,"banking, finance, traditional",Minimalism + Accessible & Ethical,"Trust & Authority, Dark Mode (OLED)",Trust & Authority + Feature-Rich,Financial Dashboard,Navy (#0A1628) + Trust Blue + Gold accents,Security-first. Account overview. Transaction history. Mobile banking. Accessibility critical. Trust paramount.
  46 +45,Online Course/E-learning,"course, e, learning, online",Claymorphism + Vibrant & Block-based,"Motion-Driven, Flat Design",Feature-Rich Showcase + Social Proof,Education Dashboard,Vibrant learning colors + Progress green,Course catalog. Progress tracking. Video player. Quizzes. Certificates. Community forums. Gamification.
  47 +46,Non-profit/Charity,"charity, non, profit",Accessible & Ethical + Organic Biophilic,"Minimalism, Storytelling-Driven",Storytelling-Driven + Trust,Donation Analytics Dashboard,Cause-related colors + Trust + Warm,Impact stories. Donation flow. Transparency reports. Volunteer signup. Event calendar. Emotional connection.
  48 +47,Music Streaming,"music, streaming",Dark Mode (OLED) + Vibrant & Block-based,"Motion-Driven, Aurora UI",Feature-Rich Showcase,Media/Entertainment Dashboard,Dark (#121212) + Vibrant accents + Album art colors,Audio player. Playlist management. Artist pages. Personalization. Social features. Waveform visualizations.
  49 +48,Video Streaming/OTT,"ott, streaming, video",Dark Mode (OLED) + Motion-Driven,"Glassmorphism, Vibrant & Block-based",Hero-Centric Design + Feature-Rich,Media/Entertainment Dashboard,Dark bg + Content poster colors + Brand accent,Video player. Content discovery. Watchlist. Continue watching. Personalized recommendations. Thumbnail-heavy.
  50 +49,Job Board/Recruitment,"board, job, recruitment",Flat Design + Minimalism,"Vibrant & Block-based, Accessible & Ethical",Conversion-Optimized + Feature-Rich,HR Analytics Dashboard,Professional Blue + Success Green + Neutral,Job listings. Search/filter. Company profiles. Application tracking. Resume upload. Salary insights.
  51 +50,Marketplace (P2P),"buyers, listings, marketplace, p, platform, sellers",Vibrant & Block-based + Flat Design,"Micro-interactions, Trust & Authority",Feature-Rich Showcase + Social Proof,E-commerce Analytics,Trust colors + Category colors + Success green,Seller/buyer profiles. Listings. Reviews/ratings. Secure payment. Messaging. Search/filter. Trust badges.
  52 +51,Logistics/Delivery,"delivery, logistics",Minimalism + Flat Design,"Dark Mode (OLED), Micro-interactions",Feature-Rich Showcase + Conversion,Real-Time Monitoring + Route Analytics,Blue (#2563EB) + Orange (tracking) + Green (delivered),Real-time tracking. Delivery scheduling. Route optimization. Driver management. Status updates. Map integration.
  53 +52,Agriculture/Farm Tech,"agriculture, farm, tech",Organic Biophilic + Flat Design,"Minimalism, Accessible & Ethical",Feature-Rich Showcase + Trust,IoT Sensor Dashboard,Earth Green (#4A7C23) + Brown + Sky Blue,Crop monitoring. Weather data. IoT sensors. Yield tracking. Market prices. Sustainable imagery.
  54 +53,Construction/Architecture,"architecture, construction",Minimalism + 3D & Hyperrealism,"Brutalism, Swiss Modernism 2.0",Hero-Centric Design + Feature-Rich,Project Management Dashboard,Grey (#4A4A4A) + Orange (safety) + Blueprint Blue,Project portfolio. 3D renders. Timeline. Material specs. Team collaboration. Blueprint aesthetic.
  55 +54,Automotive/Car Dealership,"automotive, car, dealership",Motion-Driven + 3D & Hyperrealism,"Dark Mode (OLED), Glassmorphism",Hero-Centric Design + Feature-Rich,Sales Intelligence Dashboard,Brand colors + Metallic accents + Dark/Light,Vehicle showcase. 360° views. Comparison tools. Financing calculator. Test drive booking. High-quality imagery.
  56 +55,Photography Studio,"photography, studio",Motion-Driven + Minimalism,"Aurora UI, Glassmorphism",Storytelling-Driven + Hero-Centric,N/A - Portfolio focused,Black + White + Minimal accent,Portfolio gallery. Before/after. Service packages. Booking system. Client galleries. Full-bleed imagery.
  57 +56,Coworking Space,"coworking, space",Vibrant & Block-based + Glassmorphism,"Minimalism, Motion-Driven",Hero-Centric Design + Feature-Rich,Occupancy Dashboard,Energetic colors + Wood tones + Brand accent,Space tour. Membership plans. Booking system. Amenities. Community events. Virtual tour.
  58 +57,Cleaning Service,"appointment, booking, cleaning, consultation, service",Soft UI Evolution + Flat Design,"Minimalism, Micro-interactions",Conversion-Optimized + Trust,Service Analytics,Fresh Blue (#00B4D8) + Clean White + Green,Service packages. Booking system. Price calculator. Before/after gallery. Reviews. Trust badges.
  59 +58,Home Services (Plumber/Electrician),"appointment, booking, consultation, electrician, home, plumber, service, services",Flat Design + Trust & Authority,"Minimalism, Accessible & Ethical",Conversion-Optimized + Trust,Service Analytics,Trust Blue + Safety Orange + Professional grey,Service list. Emergency contact. Booking. Price transparency. Certifications. Local trust signals.
  60 +59,Childcare/Daycare,"childcare, daycare",Claymorphism + Vibrant & Block-based,"Soft UI Evolution, Accessible & Ethical",Social Proof-Focused + Trust,Parent Dashboard,Playful pastels + Safe colors + Warm accents,Programs. Staff profiles. Safety certifications. Parent portal. Activity updates. Cheerful imagery.
  61 +60,Senior Care/Elderly,"care, elderly, senior",Accessible & Ethical + Soft UI Evolution,"Minimalism, Neumorphism",Trust & Authority + Social Proof,Healthcare Analytics,Calm Blue + Warm neutrals + Large text,Care services. Staff qualifications. Facility tour. Family portal. Large touch targets. High contrast. Accessibility-first.
  62 +61,Medical Clinic,"clinic, medical",Accessible & Ethical + Minimalism,"Neumorphism, Trust & Authority",Trust & Authority + Conversion,Healthcare Analytics,Medical Blue (#0077B6) + Trust White + Calm Green,Services. Doctor profiles. Online booking. Patient portal. Insurance info. HIPAA compliant. Trust signals.
  63 +62,Pharmacy/Drug Store,"drug, pharmacy, store",Flat Design + Accessible & Ethical,"Minimalism, Trust & Authority",Conversion-Optimized + Trust,Inventory Dashboard,Pharmacy Green + Trust Blue + Clean White,Product catalog. Prescription upload. Refill reminders. Health info. Store locator. Safety certifications.
  64 +63,Dental Practice,"dental, practice",Soft UI Evolution + Minimalism,"Accessible & Ethical, Trust & Authority",Social Proof-Focused + Conversion,Patient Analytics,Fresh Blue + White + Smile Yellow accent,Services. Dentist profiles. Before/after. Online booking. Insurance. Patient testimonials. Friendly imagery.
  65 +64,Veterinary Clinic,"clinic, veterinary",Claymorphism + Accessible & Ethical,"Soft UI Evolution, Flat Design",Social Proof-Focused + Trust,Pet Health Dashboard,Caring Blue + Pet-friendly colors + Warm accents,Pet services. Vet profiles. Online booking. Pet portal. Emergency info. Friendly animal imagery.
  66 +65,Florist/Plant Shop,"florist, plant, shop",Organic Biophilic + Vibrant & Block-based,"Aurora UI, Motion-Driven",Hero-Centric Design + Conversion,E-commerce Analytics,Natural Green + Floral pinks/purples + Earth tones,Product catalog. Occasion categories. Delivery scheduling. Care guides. Seasonal collections. Beautiful imagery.
  67 +66,Bakery/Cafe,"bakery, cafe",Vibrant & Block-based + Soft UI Evolution,"Claymorphism, Motion-Driven",Hero-Centric Design + Conversion,N/A - Order focused,Warm Brown + Cream + Appetizing accents,Menu display. Online ordering. Location/hours. Catering. Seasonal specials. Appetizing photography.
  68 +67,Coffee Shop,"coffee, shop",Minimalism + Organic Biophilic,"Soft UI Evolution, Flat Design",Hero-Centric Design + Conversion,N/A - Order focused,Coffee Brown (#6F4E37) + Cream + Warm accents,Menu. Online ordering. Loyalty program. Location. Story/origin. Cozy aesthetic.
  69 +68,Brewery/Winery,"brewery, winery",Motion-Driven + Storytelling-Driven,"Dark Mode (OLED), Organic Biophilic",Storytelling-Driven + Hero-Centric,N/A - E-commerce focused,Deep amber/burgundy + Gold + Craft aesthetic,Product showcase. Story/heritage. Tasting notes. Events. Club membership. Artisanal imagery.
  70 +69,Airline,"ai, airline, artificial-intelligence, automation, machine-learning, ml",Minimalism + Glassmorphism,"Motion-Driven, Accessible & Ethical",Conversion-Optimized + Feature-Rich,Operations Dashboard,Sky Blue + Brand colors + Trust accents,Flight search. Booking. Check-in. Boarding pass. Loyalty program. Route maps. Mobile-first.
  71 +70,News/Media Platform,"content, entertainment, media, news, platform, streaming, video",Minimalism + Flat Design,"Dark Mode (OLED), Accessible & Ethical",Hero-Centric Design + Feature-Rich,Media Analytics Dashboard,Brand colors + High contrast + Category colors,Article layout. Breaking news. Categories. Search. Subscription. Mobile reading. Fast loading.
  72 +71,Magazine/Blog,"articles, blog, content, magazine, posts, writing",Swiss Modernism 2.0 + Motion-Driven,"Minimalism, Aurora UI",Storytelling-Driven + Hero-Centric,Content Analytics,Editorial colors + Brand primary + Clean white,Article showcase. Category navigation. Author profiles. Newsletter signup. Related content. Typography-focused.
  73 +72,Freelancer Platform,"freelancer, platform",Flat Design + Minimalism,"Vibrant & Block-based, Micro-interactions",Feature-Rich Showcase + Conversion,Marketplace Analytics,Professional Blue + Success Green + Neutral,Profile creation. Portfolio. Skill matching. Messaging. Payment. Reviews. Project management.
  74 +73,Consulting Firm,"consulting, firm",Trust & Authority + Minimalism,"Swiss Modernism 2.0, Accessible & Ethical",Trust & Authority + Feature-Rich,N/A - Lead generation,Navy + Gold + Professional grey,Service areas. Case studies. Team profiles. Thought leadership. Contact. Professional credibility.
  75 +74,Marketing Agency,"agency, creative, design, marketing, studio",Brutalism + Motion-Driven,"Vibrant & Block-based, Aurora UI",Storytelling-Driven + Feature-Rich,Campaign Analytics,Bold brand colors + Creative freedom,Portfolio. Case studies. Services. Team. Creative showcase. Results-focused. Bold aesthetic.
  76 +75,Event Management,"conference, event, management, meetup, registration, ticket",Vibrant & Block-based + Motion-Driven,"Glassmorphism, Aurora UI",Hero-Centric Design + Feature-Rich,Event Analytics,Event theme colors + Excitement accents,Event showcase. Registration. Agenda. Speakers. Sponsors. Ticket sales. Countdown timer.
  77 +76,Conference/Webinar Platform,"conference, platform, webinar",Glassmorphism + Minimalism,"Motion-Driven, Flat Design",Feature-Rich Showcase + Conversion,Attendee Analytics,Professional Blue + Video accent + Brand,Registration. Agenda. Speaker profiles. Live stream. Networking. Recording access. Virtual event features.
  78 +77,Membership/Community,"community, membership",Vibrant & Block-based + Soft UI Evolution,"Bento Box Grid, Micro-interactions",Social Proof-Focused + Conversion,Community Analytics,Community brand colors + Engagement accents,Member benefits. Pricing tiers. Community showcase. Events. Member directory. Exclusive content.
  79 +78,Newsletter Platform,"newsletter, platform",Minimalism + Flat Design,"Swiss Modernism 2.0, Accessible & Ethical",Minimal & Direct + Conversion,Email Analytics,Brand primary + Clean white + CTA accent,Subscribe form. Archive. About. Social proof. Sample content. Simple conversion.
  80 +79,Digital Products/Downloads,"digital, downloads, products",Vibrant & Block-based + Motion-Driven,"Glassmorphism, Bento Box Grid",Feature-Rich Showcase + Conversion,E-commerce Analytics,Product category colors + Brand + Success green,Product showcase. Preview. Pricing. Instant delivery. License management. Customer reviews.
  81 +80,Church/Religious Organization,"church, organization, religious",Accessible & Ethical + Soft UI Evolution,"Minimalism, Trust & Authority",Hero-Centric Design + Social Proof,N/A - Community focused,Warm Gold + Deep Purple/Blue + White,Service times. Events. Sermons. Community. Giving. Location. Welcoming imagery.
  82 +81,Sports Team/Club,"club, sports, team",Vibrant & Block-based + Motion-Driven,"Dark Mode (OLED), 3D & Hyperrealism",Hero-Centric Design + Feature-Rich,Performance Analytics,Team colors + Energetic accents,Schedule. Roster. News. Tickets. Merchandise. Fan engagement. Action imagery.
  83 +82,Museum/Gallery,"gallery, museum",Minimalism + Motion-Driven,"Swiss Modernism 2.0, 3D & Hyperrealism",Storytelling-Driven + Feature-Rich,Visitor Analytics,Art-appropriate neutrals + Exhibition accents,Exhibitions. Collections. Tickets. Events. Virtual tours. Educational content. Art-focused design.
  84 +83,Theater/Cinema,"cinema, theater",Dark Mode (OLED) + Motion-Driven,"Vibrant & Block-based, Glassmorphism",Hero-Centric Design + Conversion,Booking Analytics,Dark + Spotlight accents + Gold,Showtimes. Seat selection. Trailers. Coming soon. Membership. Dramatic imagery.
  85 +84,Language Learning App,"app, language, learning",Claymorphism + Vibrant & Block-based,"Micro-interactions, Flat Design",Feature-Rich Showcase + Social Proof,Learning Analytics,Playful colors + Progress indicators + Country flags,Lesson structure. Progress tracking. Gamification. Speaking practice. Community. Achievement badges.
  86 +85,Coding Bootcamp,"bootcamp, coding",Dark Mode (OLED) + Minimalism,"Cyberpunk UI, Flat Design",Feature-Rich Showcase + Social Proof,Student Analytics,Code editor colors + Brand + Success green,Curriculum. Projects. Career outcomes. Alumni. Pricing. Application. Terminal aesthetic.
  87 +86,Cybersecurity Platform,"cyber, security, platform",Cyberpunk UI + Dark Mode (OLED),"Neubrutalism, Minimal & Direct",Trust & Authority + Real-Time,Real-Time Monitoring + Heat Map,Matrix Green + Deep Black + Terminal feel,Data density. Threat visualization. Dark mode default.
  88 +87,Developer Tool / IDE,"dev, developer, tool, ide",Dark Mode (OLED) + Minimalism,"Flat Design, Bento Box Grid",Minimal & Direct + Documentation,Real-Time Monitor + Terminal,Dark syntax theme colors + Blue focus,Keyboard shortcuts. Syntax highlighting. Fast performance.
  89 +88,Biotech / Life Sciences,"biotech, biology, science",Glassmorphism + Clean Science,"Minimalism, Organic Biophilic",Storytelling-Driven + Research,Data-Dense + Predictive,Sterile White + DNA Blue + Life Green,Data accuracy. Cleanliness. Complex data viz.
  90 +89,Space Tech / Aerospace,"aerospace, space, tech",Holographic / HUD + Dark Mode,"Glassmorphism, 3D & Hyperrealism",Immersive Experience + Hero,Real-Time Monitoring + 3D,Deep Space Black + Star White + Metallic,High-tech feel. Precision. Telemetry data.
  91 +90,Architecture / Interior,"architecture, design, interior",Exaggerated Minimalism + High Imagery,"Swiss Modernism 2.0, Parallax",Portfolio Grid + Visuals,Project Management + Gallery,Monochrome + Gold Accent + High Imagery,High-res images. Typography. Space.
  92 +91,Quantum Computing Interface,"quantum, computing, physics, qubit, future, science",Holographic / HUD + Dark Mode,"Glassmorphism, Spatial UI",Immersive/Interactive Experience,3D Spatial Data + Real-Time Monitor,Quantum Blue #00FFFF + Deep Black + Interference patterns,Visualize complexity. Qubit states. Probability clouds. High-tech trust.
  93 +92,Biohacking / Longevity App,"biohacking, health, longevity, tracking, wellness, science",Biomimetic / Organic 2.0,"Minimalism, Dark Mode (OLED)",Data-Dense + Storytelling,Real-Time Monitor + Biological Data,Cellular Pink/Red + DNA Blue + Clean White,Personal data privacy. Scientific credibility. Biological visualizations.
  94 +93,Autonomous Drone Fleet Manager,"drone, autonomous, fleet, aerial, logistics, robotics",HUD / Sci-Fi FUI,"Real-Time Monitor, Spatial UI",Real-Time Monitor,Geographic + Real-Time,Tactical Green #00FF00 + Alert Red + Map Dark,Real-time telemetry. 3D spatial awareness. Latency indicators. Safety alerts.
  95 +94,Generative Art Platform,"art, generative, ai, creative, platform, gallery",Minimalism (Frame) + Gen Z Chaos,"Masonry Grid, Dark Mode",Bento Grid Showcase,Gallery / Portfolio,Neutral #F5F5F5 (Canvas) + User Content,Content is king. Fast loading. Creator attribution. Minting flow.
  96 +95,Spatial Computing OS / App,"spatial, vr, ar, vision, os, immersive, mixed-reality",Spatial UI (VisionOS),"Glassmorphism, 3D & Hyperrealism",Immersive/Interactive Experience,Spatial Dashboard,Frosted Glass + System Colors + Depth,Gaze/Pinch interaction. Depth hierarchy. Environment awareness.
  97 +96,Sustainable Energy / Climate Tech,"climate, energy, sustainable, green, tech, carbon",Organic Biophilic + E-Ink / Paper,"Data-Dense, Swiss Modernism",Interactive Demo + Data,Energy/Utilities Dashboard,Earth Green + Sky Blue + Solar Yellow,Data transparency. Impact visualization. Low-carbon web design.
0 98 \ No newline at end of file
... ...
.shared/ui-ux-pro-max/data/prompts.csv 0 → 100644
  1 +STT,Style Category,AI Prompt Keywords (Copy-Paste Ready),CSS/Technical Keywords,Implementation Checklist,Design System Variables
  2 +1,Minimalism & Swiss Style,"Design a minimalist landing page. Use: white space, geometric layouts, sans-serif fonts, high contrast, grid-based structure, essential elements only. Avoid shadows and gradients. Focus on clarity and functionality.","display: grid, gap: 2rem, font-family: sans-serif, color: #000 or #FFF, max-width: 1200px, clean borders, no box-shadow unless necessary","☐ Grid-based layout 12-16 columns, ☐ Typography hierarchy clear, ☐ No unnecessary decorations, ☐ WCAG AAA contrast verified, ☐ Mobile responsive grid","--spacing: 2rem, --border-radius: 0px, --font-weight: 400-700, --shadow: none, --accent-color: single primary only"
  3 +2,Neumorphism,"Create a neumorphic UI with soft 3D effects. Use light pastels, rounded corners (12-16px), subtle soft shadows (multiple layers), no hard lines, monochromatic color scheme with light/dark variations. Embossed/debossed effect on interactive elements.","border-radius: 12-16px, box-shadow: -5px -5px 15px rgba(0,0,0,0.1), 5px 5px 15px rgba(255,255,255,0.8), background: linear-gradient(145deg, color1, color2), transform: scale on press","☐ Rounded corners 12-16px consistent, ☐ Multiple shadow layers (2-3), ☐ Pastel color verified, ☐ Monochromatic palette checked, ☐ Press animation smooth 150ms","--border-radius: 14px, --shadow-soft-1: -5px -5px 15px, --shadow-soft-2: 5px 5px 15px, --color-light: #F5F5F5, --color-primary: single pastel"
  4 +3,Glassmorphism,"Design a glassmorphic interface with frosted glass effect. Use backdrop blur (10-20px), translucent overlays (rgba 10-30% opacity), vibrant background colors, subtle borders, light source reflection, layered depth. Perfect for modern overlays and cards.","backdrop-filter: blur(15px), background: rgba(255, 255, 255, 0.15), border: 1px solid rgba(255,255,255,0.2), -webkit-backdrop-filter: blur(15px), z-index layering for depth","☐ Backdrop-filter blur 10-20px, ☐ Translucent white 15-30% opacity, ☐ Subtle border 1px light, ☐ Vibrant background verified, ☐ Text contrast 4.5:1 checked","--blur-amount: 15px, --glass-opacity: 0.15, --border-color: rgba(255,255,255,0.2), --background: vibrant color, --text-color: light/dark based on BG"
  5 +4,Brutalism,"Create a brutalist design with raw, unpolished, stark aesthetic. Use pure primary colors (red, blue, yellow), black & white, no smooth transitions (instant), sharp corners, bold large typography, visible grid lines, default system fonts, intentional 'broken' design elements.","border-radius: 0px, transition: none or 0s, font-family: system-ui or monospace, font-weight: 700+, border: visible 2-4px, colors: #FF0000, #0000FF, #FFFF00, #000000, #FFFFFF","☐ No border-radius (0px), ☐ No transitions (instant), ☐ Bold typography (700+), ☐ Pure primary colors used, ☐ Visible grid/borders, ☐ Asymmetric layout intentional","--border-radius: 0px, --transition-duration: 0s, --font-weight: 700-900, --colors: primary only, --border-style: visible, --grid-visible: true"
  6 +5,3D & Hyperrealism,"Build an immersive 3D interface using realistic textures, 3D models (Three.js/Babylon.js), complex shadows, realistic lighting, parallax scrolling (3-5 layers), physics-based motion. Include skeuomorphic elements with tactile detail.","transform: translate3d, perspective: 1000px, WebGL canvas, Three.js/Babylon.js library, box-shadow: complex multi-layer, background: complex gradients, filter: drop-shadow()","☐ WebGL/Three.js integrated, ☐ 3D models loaded, ☐ Parallax 3-5 layers, ☐ Realistic lighting verified, ☐ Complex shadows rendered, ☐ Physics animation smooth 300-400ms","--perspective: 1000px, --parallax-layers: 5, --lighting-intensity: realistic, --shadow-depth: 20-40%, --animation-duration: 300-400ms"
  7 +6,Vibrant & Block-based,"Design an energetic, vibrant interface with bold block layouts, geometric shapes, high color contrast, large typography (32px+), animated background patterns, duotone effects. Perfect for startups and youth-focused apps. Use 4-6 contrasting colors from complementary/triadic schemes.","display: flex/grid with large gaps (48px+), font-size: 32px+, background: animated patterns (CSS), color: neon/vibrant colors, animation: continuous pattern movement","☐ Block layout with 48px+ gaps, ☐ Large typography 32px+, ☐ 4-6 vibrant colors max, ☐ Animated patterns active, ☐ Scroll-snap enabled, ☐ High contrast verified (7:1+)","--block-gap: 48px, --typography-size: 32px+, --color-palette: 4-6 vibrant colors, --animation: continuous pattern, --contrast-ratio: 7:1+"
  8 +7,Dark Mode (OLED),"Create an OLED-optimized dark interface with deep black (#000000), dark grey (#121212), midnight blue accents. Use minimal glow effects, vibrant neon accents (green, blue, gold, purple), high contrast text. Optimize for eye comfort and OLED power saving.","background: #000000 or #121212, color: #FFFFFF or #E0E0E0, text-shadow: 0 0 10px neon-color (sparingly), filter: brightness(0.8) if needed, color-scheme: dark","☐ Deep black #000000 or #121212, ☐ Vibrant neon accents used, ☐ Text contrast 7:1+, ☐ Minimal glow effects, ☐ OLED power optimization, ☐ No white (#FFFFFF) background","--bg-black: #000000, --bg-dark-grey: #121212, --text-primary: #FFFFFF, --accent-neon: neon colors, --glow-effect: minimal, --oled-optimized: true"
  9 +8,Accessible & Ethical,"Design with WCAG AAA compliance. Include: high contrast (7:1+), large text (16px+), keyboard navigation, screen reader compatibility, focus states visible (3-4px ring), semantic HTML, ARIA labels, skip links, reduced motion support (prefers-reduced-motion), 44x44px touch targets.","color-contrast: 7:1+, font-size: 16px+, outline: 3-4px on :focus-visible, aria-label, role attributes, @media (prefers-reduced-motion), touch-target: 44x44px, cursor: pointer","☐ WCAG AAA verified, ☐ 7:1+ contrast checked, ☐ Keyboard navigation tested, ☐ Screen reader tested, ☐ Focus visible 3-4px, ☐ Semantic HTML used, ☐ Touch targets 44x44px","--contrast-ratio: 7:1, --font-size-min: 16px, --focus-ring: 3-4px, --touch-target: 44x44px, --wcag-level: AAA, --keyboard-accessible: true, --sr-tested: true"
  10 +9,Claymorphism,"Design a playful, toy-like interface with soft 3D, chunky elements, bubbly aesthetic, rounded edges (16-24px), thick borders (3-4px), double shadows (inner + outer), pastel colors, smooth animations. Perfect for children's apps and creative tools.","border-radius: 16-24px, border: 3-4px solid, box-shadow: inset -2px -2px 8px, 4px 4px 8px, background: pastel-gradient, animation: soft bounce (cubic-bezier 0.34, 1.56)","☐ Border-radius 16-24px, ☐ Thick borders 3-4px, ☐ Double shadows (inner+outer), ☐ Pastel colors used, ☐ Soft bounce animations, ☐ Playful interactions","--border-radius: 20px, --border-width: 3-4px, --shadow-inner: inset -2px -2px 8px, --shadow-outer: 4px 4px 8px, --color-palette: pastels, --animation: bounce"
  11 +10,Aurora UI,"Create a vibrant gradient interface inspired by Northern Lights with mesh gradients, smooth color blends, flowing animations. Use complementary color pairs (blue-orange, purple-yellow), flowing background gradients, subtle continuous animations (8-12s loops), iridescent effects.","background: conic-gradient or radial-gradient with multiple stops, animation: @keyframes gradient (8-12s), background-size: 200% 200%, filter: saturate(1.2), blend-mode: screen or multiply","☐ Mesh/flowing gradients applied, ☐ 8-12s animation loop, ☐ Complementary colors used, ☐ Smooth color transitions, ☐ Iridescent effect subtle, ☐ Text contrast verified","--gradient-colors: complementary pairs, --animation-duration: 8-12s, --blend-mode: screen, --color-saturation: 1.2, --effect: iridescent, --loop-smooth: true"
  12 +11,Retro-Futurism,"Build a retro-futuristic (cyberpunk/vaporwave) interface with neon colors (blue, pink, cyan), deep black background, 80s aesthetic, CRT scanlines, glitch effects, neon glow text/borders, monospace fonts, geometric patterns. Use neon text-shadow and animated glitch effects.","color: neon colors (#0080FF, #FF006E, #00FFFF), text-shadow: 0 0 10px neon, background: #000 or #1A1A2E, font-family: monospace, animation: glitch (skew+offset), filter: hue-rotate","☐ Neon colors used, ☐ CRT scanlines effect, ☐ Glitch animations active, ☐ Monospace font, ☐ Deep black background, ☐ Glow effects applied, ☐ 80s patterns present","--neon-colors: #0080FF #FF006E #00FFFF, --background: #000000, --font-family: monospace, --effect: glitch+glow, --scanline-opacity: 0.3, --crt-effect: true"
  13 +12,Flat Design,"Create a flat, 2D interface with bold colors, no shadows/gradients, clean lines, simple geometric shapes, icon-heavy, typography-focused, minimal ornamentation. Use 4-6 solid, bright colors in a limited palette with high saturation.","box-shadow: none, background: solid color, border-radius: 0-4px, color: solid (no gradients), fill: solid, stroke: 1-2px, font: bold sans-serif, icons: simplified SVG","☐ No shadows/gradients, ☐ 4-6 solid colors max, ☐ Clean lines consistent, ☐ Simple shapes used, ☐ Icon-heavy layout, ☐ High saturation colors, ☐ Fast loading verified","--shadow: none, --color-palette: 4-6 solid, --border-radius: 2px, --gradient: none, --icons: simplified SVG, --animation: minimal 150-200ms"
  14 +13,Skeuomorphism,"Design a realistic, textured interface with 3D depth, real-world metaphors (leather, wood, metal), complex gradients (8-12 stops), realistic shadows, grain/texture overlays, tactile press animations. Perfect for premium/luxury products.","background: complex gradient (8-12 stops), box-shadow: realistic multi-layer, background-image: texture overlay (noise, grain), filter: drop-shadow, transform: scale on press (300-500ms)","☐ Realistic textures applied, ☐ Complex gradients 8-12 stops, ☐ Multi-layer shadows, ☐ Texture overlays present, ☐ Tactile animations smooth, ☐ Depth effect pronounced","--gradient-stops: 8-12, --texture-overlay: noise+grain, --shadow-layers: 3+, --animation-duration: 300-500ms, --depth-effect: pronounced, --tactile: true"
  15 +14,Liquid Glass,"Create a premium liquid glass effect with morphing shapes, flowing animations, chromatic aberration, iridescent gradients, smooth 400-600ms transitions. Use SVG morphing for shape changes, dynamic blur, smooth color transitions creating a fluid, premium feel.","animation: morphing SVG paths (400-600ms), backdrop-filter: blur + saturate, filter: hue-rotate + brightness, blend-mode: screen, background: iridescent gradient","☐ Morphing animations 400-600ms, ☐ Chromatic aberration applied, ☐ Dynamic blur active, ☐ Iridescent gradients, ☐ Smooth color transitions, ☐ Premium feel achieved","--morph-duration: 400-600ms, --blur-amount: 15px, --chromatic-aberration: true, --iridescent: true, --blend-mode: screen, --smooth-transitions: true"
  16 +15,Motion-Driven,"Build an animation-heavy interface with scroll-triggered animations, microinteractions, parallax scrolling (3-5 layers), smooth transitions (300-400ms), entrance animations, page transitions. Use Intersection Observer for scroll effects, transform for performance, GPU acceleration.","animation: @keyframes scroll-reveal, transform: translateY/X, Intersection Observer API, will-change: transform, scroll-behavior: smooth, animation-duration: 300-400ms","☐ Scroll animations active, ☐ Parallax 3-5 layers, ☐ Entrance animations smooth, ☐ Page transitions fluid, ☐ GPU accelerated, ☐ Prefers-reduced-motion respected","--animation-duration: 300-400ms, --parallax-layers: 5, --scroll-behavior: smooth, --gpu-accelerated: true, --entrance-animation: true, --page-transition: smooth"
  17 +16,Micro-interactions,"Design with delightful micro-interactions: small 50-100ms animations, gesture-based responses, tactile feedback, loading spinners, success/error states, subtle hover effects, haptic feedback triggers for mobile. Focus on responsive, contextual interactions.","animation: short 50-100ms, transition: hover states, @media (hover: hover) for desktop, :active for press, haptic-feedback CSS/API, loading animation smooth loop","☐ Micro-animations 50-100ms, ☐ Gesture-responsive, ☐ Tactile feedback visual/haptic, ☐ Loading spinners smooth, ☐ Success/error states clear, ☐ Hover effects subtle","--micro-animation-duration: 50-100ms, --gesture-responsive: true, --haptic-feedback: true, --loading-animation: smooth, --state-feedback: success+error"
  18 +17,Inclusive Design,"Design for universal accessibility: high contrast (7:1+), large text (16px+), keyboard-only navigation, screen reader optimization, WCAG AAA compliance, symbol-based color indicators (not color-only), haptic feedback, voice interaction support, reduced motion options.","aria-* attributes complete, role attributes semantic, focus-visible: 3-4px ring, color-contrast: 7:1+, @media (prefers-reduced-motion), alt text on all images, form labels properly associated","☐ WCAG AAA verified, ☐ 7:1+ contrast all text, ☐ Keyboard accessible (Tab/Enter), ☐ Screen reader tested, ☐ Focus visible 3-4px, ☐ No color-only indicators, ☐ Haptic fallback","--contrast-ratio: 7:1, --font-size: 16px+, --keyboard-accessible: true, --sr-compatible: true, --wcag-level: AAA, --color-symbols: true, --haptic: enabled"
  19 +18,Zero Interface,"Create a voice-first, gesture-based, AI-driven interface with minimal visible UI, progressive disclosure, voice recognition UI, gesture detection, AI predictions, smart suggestions, context-aware actions. Hide controls until needed.","voice-commands: Web Speech API, gesture-detection: touch events, AI-predictions: hidden by default (reveal on hover), progressive-disclosure: show on demand, minimal UI visible","☐ Voice commands responsive, ☐ Gesture detection active, ☐ AI predictions hidden/revealed, ☐ Progressive disclosure working, ☐ Minimal visible UI, ☐ Smart suggestions contextual","--voice-ui: enabled, --gesture-detection: active, --ai-predictions: smart, --progressive-disclosure: true, --visible-ui: minimal, --context-aware: true"
  20 +19,Soft UI Evolution,"Design evolved neumorphism with improved contrast (WCAG AA+), modern aesthetics, subtle depth, accessibility focus. Use soft shadows (softer than flat but clearer than pure neumorphism), better color hierarchy, improved focus states, modern 200-300ms animations.","box-shadow: softer multi-layer (0 2px 4px), background: improved contrast pastels, border-radius: 8-12px, animation: 200-300ms smooth, outline: 2-3px on focus, contrast: 4.5:1+","☐ Improved contrast AA/AAA, ☐ Soft shadows modern, ☐ Border-radius 8-12px, ☐ Animations 200-300ms, ☐ Focus states visible, ☐ Color hierarchy clear","--shadow-soft: modern blend, --border-radius: 10px, --animation-duration: 200-300ms, --contrast-ratio: 4.5:1+, --color-hierarchy: improved, --wcag-level: AA+"
  21 +20,Bento Grids,"Design a Bento Grid layout. Use: modular grid system, rounded corners (16-24px), different card sizes (1x1, 2x1, 2x2), card-based hierarchy, soft backgrounds (#F5F5F7), subtle borders, content-first, Apple-style aesthetic.","display: grid, grid-template-columns: repeat(auto-fit, minmax(...)), gap: 1rem, border-radius: 20px, background: #FFF, box-shadow: subtle","☐ Grid layout (CSS Grid), ☐ Rounded corners 16-24px, ☐ Varied card spans, ☐ Content fits card size, ☐ Responsive re-flow, ☐ Apple-like aesthetic","--grid-gap: 20px, --card-radius: 24px, --card-bg: #FFFFFF, --page-bg: #F5F5F7, --shadow: soft"
  22 +21,Neubrutalism,"Design a neubrutalist interface. Use: high contrast, hard black borders (3px+), bright pop colors, no blur, sharp or slightly rounded corners, bold typography, hard shadows (offset 4px 4px), raw aesthetic but functional.","border: 3px solid black, box-shadow: 5px 5px 0px black, colors: #FFDB58 #FF6B6B #4ECDC4, font-weight: 700, no gradients","☐ Hard borders (2-4px), ☐ Hard offset shadows, ☐ High saturation colors, ☐ Bold typography, ☐ No blurs/gradients, ☐ Distinctive 'ugly-cute' look","--border-width: 3px, --shadow-offset: 4px, --shadow-color: #000, --colors: high saturation, --font: bold sans"
  23 +22,HUD / Sci-Fi FUI,"Design a futuristic HUD (Heads Up Display) or FUI. Use: thin lines (1px), neon cyan/blue on black, technical markers, decorative brackets, data visualization, monospaced tech fonts, glowing elements, transparency.","border: 1px solid rgba(0,255,255,0.5), color: #00FFFF, background: transparent or rgba(0,0,0,0.8), font-family: monospace, text-shadow: 0 0 5px cyan","☐ Fine lines 1px, ☐ Neon glow text/borders, ☐ Monospaced font, ☐ Dark/Transparent BG, ☐ Decorative tech markers, ☐ Holographic feel","--hud-color: #00FFFF, --bg-color: rgba(0,10,20,0.9), --line-width: 1px, --glow: 0 0 5px, --font: monospace"
  24 +23,Pixel Art,"Design a pixel art inspired interface. Use: pixelated fonts, 8-bit or 16-bit aesthetic, sharp edges (image-rendering: pixelated), limited color palette, blocky UI elements, retro gaming feel.","font-family: 'Press Start 2P', image-rendering: pixelated, box-shadow: 4px 0 0 #000 (pixel border), no anti-aliasing","☐ Pixelated fonts loaded, ☐ Images sharp (no blur), ☐ CSS box-shadow for pixel borders, ☐ Retro palette, ☐ Blocky layout","--pixel-size: 4px, --font: pixel font, --border-style: pixel-shadow, --anti-alias: none"
... ...
.shared/ui-ux-pro-max/data/stacks/flutter.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Widgets,Use StatelessWidget when possible,Immutable widgets are simpler,StatelessWidget for static UI,StatefulWidget for everything,class MyWidget extends StatelessWidget,class MyWidget extends StatefulWidget (static),Medium,https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html
  3 +2,Widgets,Keep widgets small,Single responsibility principle,Extract widgets into smaller pieces,Large build methods,Column(children: [Header() Content()]),500+ line build method,Medium,
  4 +3,Widgets,Use const constructors,Compile-time constants for performance,const MyWidget() when possible,Non-const for static widgets,const Text('Hello'),Text('Hello') for literals,High,https://dart.dev/guides/language/language-tour#constant-constructors
  5 +4,Widgets,Prefer composition over inheritance,Combine widgets using children,Compose widgets,Extend widget classes,Container(child: MyContent()),class MyContainer extends Container,Medium,
  6 +5,State,Use setState correctly,Minimal state in StatefulWidget,setState for UI state changes,setState for business logic,setState(() { _counter++; }),Complex logic in setState,Medium,https://api.flutter.dev/flutter/widgets/State/setState.html
  7 +6,State,Avoid setState in build,Never call setState during build,setState in callbacks only,setState in build method,onPressed: () => setState(() {}),build() { setState(); },High,
  8 +7,State,Use state management for complex apps,Provider Riverpod BLoC,State management for shared state,setState for global state,Provider.of<MyState>(context),Global setState calls,Medium,
  9 +8,State,Prefer Riverpod or Provider,Recommended state solutions,Riverpod for new projects,InheritedWidget manually,ref.watch(myProvider),Custom InheritedWidget,Medium,https://riverpod.dev/
  10 +9,State,Dispose resources,Clean up controllers and subscriptions,dispose() for cleanup,Memory leaks from subscriptions,@override void dispose() { controller.dispose(); },No dispose implementation,High,
  11 +10,Layout,Use Column and Row,Basic layout widgets,Column Row for linear layouts,Stack for simple layouts,"Column(children: [Text(), Button()])",Stack for vertical list,Medium,https://api.flutter.dev/flutter/widgets/Column-class.html
  12 +11,Layout,Use Expanded and Flexible,Control flex behavior,Expanded to fill space,Fixed sizes in flex containers,Expanded(child: Container()),Container(width: 200) in Row,Medium,
  13 +12,Layout,Use SizedBox for spacing,Consistent spacing,SizedBox for gaps,Container for spacing only,SizedBox(height: 16),Container(height: 16),Low,
  14 +13,Layout,Use LayoutBuilder for responsive,Respond to constraints,LayoutBuilder for adaptive layouts,Fixed sizes for responsive,LayoutBuilder(builder: (context constraints) {}),Container(width: 375),Medium,https://api.flutter.dev/flutter/widgets/LayoutBuilder-class.html
  15 +14,Layout,Avoid deep nesting,Keep widget tree shallow,Extract deeply nested widgets,10+ levels of nesting,Extract widget to method or class,Column(Row(Column(Row(...)))),Medium,
  16 +15,Lists,Use ListView.builder,Lazy list building,ListView.builder for long lists,ListView with children for large lists,"ListView.builder(itemCount: 100, itemBuilder: ...)",ListView(children: items.map(...).toList()),High,https://api.flutter.dev/flutter/widgets/ListView-class.html
  17 +16,Lists,Provide itemExtent when known,Skip measurement,itemExtent for fixed height items,No itemExtent for uniform lists,ListView.builder(itemExtent: 50),ListView.builder without itemExtent,Medium,
  18 +17,Lists,Use keys for stateful items,Preserve widget state,Key for stateful list items,No key for dynamic lists,ListTile(key: ValueKey(item.id)),ListTile without key,High,
  19 +18,Lists,Use SliverList for custom scroll,Custom scroll effects,CustomScrollView with Slivers,Nested ListViews,CustomScrollView(slivers: [SliverList()]),ListView inside ListView,Medium,https://api.flutter.dev/flutter/widgets/SliverList-class.html
  20 +19,Navigation,Use Navigator 2.0 or GoRouter,Declarative routing,go_router for navigation,Navigator.push for complex apps,GoRouter(routes: [...]),Navigator.push everywhere,Medium,https://pub.dev/packages/go_router
  21 +20,Navigation,Use named routes,Organized navigation,Named routes for clarity,Anonymous routes,Navigator.pushNamed(context '/home'),Navigator.push(context MaterialPageRoute()),Low,
  22 +21,Navigation,Handle back button (PopScope),Android back behavior and predictive back (Android 14+),Use PopScope widget (WillPopScope is deprecated),Use WillPopScope,"PopScope(canPop: false, onPopInvoked: (didPop) => ...)",WillPopScope(onWillPop: ...),High,https://api.flutter.dev/flutter/widgets/PopScope-class.html
  23 +22,Navigation,Pass typed arguments,Type-safe route arguments,Typed route arguments,Dynamic arguments,MyRoute(id: '123'),arguments: {'id': '123'},Medium,
  24 +23,Async,Use FutureBuilder,Async UI building,FutureBuilder for async data,setState for async,FutureBuilder(future: fetchData()),fetchData().then((d) => setState()),Medium,https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
  25 +24,Async,Use StreamBuilder,Stream UI building,StreamBuilder for streams,Manual stream subscription,StreamBuilder(stream: myStream),stream.listen in initState,Medium,https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html
  26 +25,Async,Handle loading and error states,Complete async UI states,ConnectionState checks,Only success state,if (snapshot.connectionState == ConnectionState.waiting),No loading indicator,High,
  27 +26,Async,Cancel subscriptions,Clean up stream subscriptions,Cancel in dispose,Memory leaks,subscription.cancel() in dispose,No subscription cleanup,High,
  28 +27,Theming,Use ThemeData,Consistent theming,ThemeData for app theme,Hardcoded colors,Theme.of(context).primaryColor,Color(0xFF123456) everywhere,Medium,https://api.flutter.dev/flutter/material/ThemeData-class.html
  29 +28,Theming,Use ColorScheme,Material 3 color system,ColorScheme for colors,Individual color properties,colorScheme: ColorScheme.fromSeed(),primaryColor: Colors.blue,Medium,
  30 +29,Theming,Access theme via context,Dynamic theme access,Theme.of(context),Static theme reference,Theme.of(context).textTheme.bodyLarge,TextStyle(fontSize: 16),Medium,
  31 +30,Theming,Support dark mode,Respect system theme,darkTheme in MaterialApp,Light theme only,"MaterialApp(theme: light, darkTheme: dark)",MaterialApp(theme: light),Medium,
  32 +31,Animation,Use implicit animations,Simple animations,AnimatedContainer AnimatedOpacity,Explicit for simple transitions,AnimatedContainer(duration: Duration()),AnimationController for fade,Low,https://api.flutter.dev/flutter/widgets/AnimatedContainer-class.html
  33 +32,Animation,Use AnimationController for complex,Fine-grained control,AnimationController with Ticker,Implicit for complex sequences,AnimationController(vsync: this),AnimatedContainer for staggered,Medium,
  34 +33,Animation,Dispose AnimationControllers,Clean up animation resources,dispose() for controllers,Memory leaks,controller.dispose() in dispose,No controller disposal,High,
  35 +34,Animation,Use Hero for transitions,Shared element transitions,Hero for navigation animations,Manual shared element,Hero(tag: 'image' child: Image()),Custom shared element animation,Low,https://api.flutter.dev/flutter/widgets/Hero-class.html
  36 +35,Forms,Use Form widget,Form validation,Form with GlobalKey,Individual validation,Form(key: _formKey child: ...),TextField without Form,Medium,https://api.flutter.dev/flutter/widgets/Form-class.html
  37 +36,Forms,Use TextEditingController,Control text input,Controller for text fields,onChanged for all text,final controller = TextEditingController(),onChanged: (v) => setState(),Medium,
  38 +37,Forms,Validate on submit,Form validation flow,_formKey.currentState!.validate(),Skip validation,if (_formKey.currentState!.validate()),Submit without validation,High,
  39 +38,Forms,Dispose controllers,Clean up text controllers,dispose() for controllers,Memory leaks,controller.dispose() in dispose,No controller disposal,High,
  40 +39,Performance,Use const widgets,Reduce rebuilds,const for static widgets,No const for literals,const Icon(Icons.add),Icon(Icons.add),High,
  41 +40,Performance,Avoid rebuilding entire tree,Minimal rebuild scope,Isolate changing widgets,setState on parent,Consumer only around changing widget,setState on root widget,High,
  42 +41,Performance,Use RepaintBoundary,Isolate repaints,RepaintBoundary for animations,Full screen repaints,RepaintBoundary(child: AnimatedWidget()),Animation without boundary,Medium,https://api.flutter.dev/flutter/widgets/RepaintBoundary-class.html
  43 +42,Performance,Profile with DevTools,Measure before optimizing,Flutter DevTools profiling,Guess at performance,DevTools performance tab,Optimize without measuring,Medium,https://docs.flutter.dev/tools/devtools
  44 +43,Accessibility,Use Semantics widget,Screen reader support,Semantics for accessibility,Missing accessibility info,Semantics(label: 'Submit button'),GestureDetector without semantics,High,https://api.flutter.dev/flutter/widgets/Semantics-class.html
  45 +44,Accessibility,Support large fonts,MediaQuery text scaling,MediaQuery.textScaleFactor,Fixed font sizes,style: Theme.of(context).textTheme,TextStyle(fontSize: 14),High,
  46 +45,Accessibility,Test with screen readers,TalkBack and VoiceOver,Test accessibility regularly,Skip accessibility testing,Regular TalkBack testing,No screen reader testing,High,
  47 +46,Testing,Use widget tests,Test widget behavior,WidgetTester for UI tests,Unit tests only,testWidgets('...' (tester) async {}),Only test() for UI,Medium,https://docs.flutter.dev/testing
  48 +47,Testing,Use integration tests,Full app testing,integration_test package,Manual testing only,IntegrationTestWidgetsFlutterBinding,Manual E2E testing,Medium,
  49 +48,Testing,Mock dependencies,Isolate tests,Mockito or mocktail,Real dependencies in tests,when(mock.method()).thenReturn(),Real API calls in tests,Medium,
  50 +49,Platform,Use Platform checks,Platform-specific code,Platform.isIOS Platform.isAndroid,Same code for all platforms,if (Platform.isIOS) {},Hardcoded iOS behavior,Medium,
  51 +50,Platform,Use kIsWeb for web,Web platform detection,kIsWeb for web checks,Platform for web,if (kIsWeb) {},Platform.isWeb (doesn't exist),Medium,
  52 +51,Packages,Use pub.dev packages,Community packages,Popular maintained packages,Custom implementations,cached_network_image,Custom image cache,Medium,https://pub.dev/
  53 +52,Packages,Check package quality,Quality before adding,Pub points and popularity,Any package without review,100+ pub points,Unmaintained packages,Medium,
... ...
.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Animation,Use Tailwind animate utilities,Built-in animations are optimized and respect reduced-motion,Use animate-pulse animate-spin animate-ping,Custom @keyframes for simple effects,animate-pulse,@keyframes pulse {...},Medium,https://tailwindcss.com/docs/animation
  3 +2,Animation,Limit bounce animations,Continuous bounce is distracting and causes motion sickness,Use animate-bounce sparingly on CTAs only,Multiple bounce animations on page,Single CTA with animate-bounce,5+ elements with animate-bounce,High,
  4 +3,Animation,Transition duration,Use appropriate transition speeds for UI feedback,duration-150 to duration-300 for UI,duration-1000 or longer for UI elements,transition-all duration-200,transition-all duration-1000,Medium,https://tailwindcss.com/docs/transition-duration
  5 +4,Animation,Hover transitions,Add smooth transitions on hover state changes,Add transition class with hover states,Instant hover changes without transition,hover:bg-gray-100 transition-colors,hover:bg-gray-100 (no transition),Low,
  6 +5,Z-Index,Use Tailwind z-* scale,Consistent stacking context with predefined scale,z-0 z-10 z-20 z-30 z-40 z-50,Arbitrary z-index values,z-50 for modals,z-[9999],Medium,https://tailwindcss.com/docs/z-index
  7 +6,Z-Index,Fixed elements z-index,Fixed navigation and modals need explicit z-index,z-50 for nav z-40 for dropdowns,Relying on DOM order for stacking,fixed top-0 z-50,fixed top-0 (no z-index),High,
  8 +7,Z-Index,Negative z-index for backgrounds,Use negative z-index for decorative backgrounds,z-[-1] for background elements,Positive z-index for backgrounds,-z-10 for decorative,z-10 for background,Low,
  9 +8,Layout,Container max-width,Limit content width for readability,max-w-7xl mx-auto for main content,Full-width content on large screens,max-w-7xl mx-auto px-4,w-full (no max-width),Medium,https://tailwindcss.com/docs/container
  10 +9,Layout,Responsive padding,Adjust padding for different screen sizes,px-4 md:px-6 lg:px-8,Same padding all sizes,px-4 sm:px-6 lg:px-8,px-8 (same all sizes),Medium,
  11 +10,Layout,Grid gaps,Use consistent gap utilities for spacing,gap-4 gap-6 gap-8,Margins on individual items,grid gap-6,grid with mb-4 on each item,Medium,https://tailwindcss.com/docs/gap
  12 +11,Layout,Flexbox alignment,Use flex utilities for alignment,items-center justify-between,Multiple nested wrappers,flex items-center justify-between,Nested divs for alignment,Low,
  13 +12,Images,Aspect ratio,Maintain consistent image aspect ratios,aspect-video aspect-square,No aspect ratio on containers,aspect-video rounded-lg,No aspect control,Medium,https://tailwindcss.com/docs/aspect-ratio
  14 +13,Images,Object fit,Control image scaling within containers,object-cover object-contain,Stretched distorted images,object-cover w-full h-full,No object-fit,Medium,https://tailwindcss.com/docs/object-fit
  15 +14,Images,Lazy loading,Defer loading of off-screen images,loading='lazy' on images,All images eager load,<img loading='lazy'>,<img> without lazy,High,
  16 +15,Images,Responsive images,Serve appropriate image sizes,srcset and sizes attributes,Same large image all devices,srcset with multiple sizes,4000px image everywhere,High,
  17 +16,Typography,Prose plugin,Use @tailwindcss/typography for rich text,prose prose-lg for article content,Custom styles for markdown,prose prose-lg max-w-none,Custom text styling,Medium,https://tailwindcss.com/docs/typography-plugin
  18 +17,Typography,Line height,Use appropriate line height for readability,leading-relaxed for body text,Default tight line height,leading-relaxed (1.625),leading-none or leading-tight,Medium,https://tailwindcss.com/docs/line-height
  19 +18,Typography,Font size scale,Use consistent text size scale,text-sm text-base text-lg text-xl,Arbitrary font sizes,text-lg,text-[17px],Low,https://tailwindcss.com/docs/font-size
  20 +19,Typography,Text truncation,Handle long text gracefully,truncate or line-clamp-*,Overflow breaking layout,line-clamp-2,No overflow handling,Medium,https://tailwindcss.com/docs/text-overflow
  21 +20,Colors,Opacity utilities,Use color opacity utilities,bg-black/50 text-white/80,Separate opacity class,bg-black/50,bg-black opacity-50,Low,https://tailwindcss.com/docs/background-color
  22 +21,Colors,Dark mode,Support dark mode with dark: prefix,dark:bg-gray-900 dark:text-white,No dark mode support,dark:bg-gray-900,Only light theme,Medium,https://tailwindcss.com/docs/dark-mode
  23 +22,Colors,Semantic colors,Use semantic color naming in config,primary secondary danger success,Generic color names in components,bg-primary,bg-blue-500 everywhere,Medium,
  24 +23,Spacing,Consistent spacing scale,Use Tailwind spacing scale consistently,p-4 m-6 gap-8,Arbitrary pixel values,p-4 (1rem),p-[15px],Low,https://tailwindcss.com/docs/customizing-spacing
  25 +24,Spacing,Negative margins,Use sparingly for overlapping effects,-mt-4 for overlapping elements,Negative margins for layout fixing,-mt-8 for card overlap,-m-2 to fix spacing issues,Medium,
  26 +25,Spacing,Space between,Use space-y-* for vertical lists,space-y-4 on flex/grid column,Margin on each child,space-y-4,Each child has mb-4,Low,https://tailwindcss.com/docs/space
  27 +26,Forms,Focus states,Always show focus indicators,focus:ring-2 focus:ring-blue-500,Remove focus outline,focus:ring-2 focus:ring-offset-2,focus:outline-none (no replacement),High,
  28 +27,Forms,Input sizing,Consistent input dimensions,h-10 px-3 for inputs,Inconsistent input heights,h-10 w-full px-3,Various heights per input,Medium,
  29 +28,Forms,Disabled states,Clear disabled styling,disabled:opacity-50 disabled:cursor-not-allowed,No disabled indication,disabled:opacity-50,Same style as enabled,Medium,
  30 +29,Forms,Placeholder styling,Style placeholder text appropriately,placeholder:text-gray-400,Dark placeholder text,placeholder:text-gray-400,Default dark placeholder,Low,
  31 +30,Responsive,Mobile-first approach,Start with mobile styles and add breakpoints,Default mobile + md: lg: xl:,Desktop-first approach,text-sm md:text-base,text-base max-md:text-sm,Medium,https://tailwindcss.com/docs/responsive-design
  32 +31,Responsive,Breakpoint testing,Test at standard breakpoints,320 375 768 1024 1280 1536,Only test on development device,Test all breakpoints,Single device testing,High,
  33 +32,Responsive,Hidden/shown utilities,Control visibility per breakpoint,hidden md:block,Different content per breakpoint,hidden md:flex,Separate mobile/desktop components,Low,https://tailwindcss.com/docs/display
  34 +33,Buttons,Button sizing,Consistent button dimensions,px-4 py-2 or px-6 py-3,Inconsistent button sizes,px-4 py-2 text-sm,Various padding per button,Medium,
  35 +34,Buttons,Touch targets,Minimum 44px touch target on mobile,min-h-[44px] on mobile,Small buttons on mobile,min-h-[44px] min-w-[44px],h-8 w-8 on mobile,High,
  36 +35,Buttons,Loading states,Show loading feedback,disabled + spinner icon,Clickable during loading,<Button disabled><Spinner/></Button>,Button without loading state,High,
  37 +36,Buttons,Icon buttons,Accessible icon-only buttons,aria-label on icon buttons,Icon button without label,<button aria-label='Close'><XIcon/></button>,<button><XIcon/></button>,High,
  38 +37,Cards,Card structure,Consistent card styling,rounded-lg shadow-md p-6,Inconsistent card styles,rounded-2xl shadow-lg p-6,Mixed card styling,Low,
  39 +38,Cards,Card hover states,Interactive cards should have hover feedback,hover:shadow-lg transition-shadow,No hover on clickable cards,hover:shadow-xl transition-shadow,Static cards that are clickable,Medium,
  40 +39,Cards,Card spacing,Consistent internal card spacing,space-y-4 for card content,Inconsistent internal spacing,space-y-4 or p-6,Mixed mb-2 mb-4 mb-6,Low,
  41 +40,Accessibility,Screen reader text,Provide context for screen readers,sr-only for hidden labels,Missing context for icons,<span class='sr-only'>Close menu</span>,No label for icon button,High,https://tailwindcss.com/docs/screen-readers
  42 +41,Accessibility,Focus visible,Show focus only for keyboard users,focus-visible:ring-2,Focus on all interactions,focus-visible:ring-2,focus:ring-2 (shows on click too),Medium,
  43 +42,Accessibility,Reduced motion,Respect user motion preferences,motion-reduce:animate-none,Ignore motion preferences,motion-reduce:transition-none,No reduced motion support,High,https://tailwindcss.com/docs/hover-focus-and-other-states#prefers-reduced-motion
  44 +43,Performance,Configure content paths,Tailwind needs to know where classes are used,Use 'content' array in config,Use deprecated 'purge' option (v2),"content: ['./src/**/*.{js,ts,jsx,tsx}']",purge: [...],High,https://tailwindcss.com/docs/content-configuration
  45 +44,Performance,JIT mode,Use JIT for faster builds and smaller bundles,JIT enabled (default in v3),Full CSS in development,Tailwind v3 defaults,Tailwind v2 without JIT,Medium,
  46 +45,Performance,Avoid @apply bloat,Use @apply sparingly,Direct utilities in HTML,Heavy @apply usage,class='px-4 py-2 rounded',@apply px-4 py-2 rounded;,Low,https://tailwindcss.com/docs/reusing-styles
  47 +46,Plugins,Official plugins,Use official Tailwind plugins,@tailwindcss/forms typography aspect-ratio,Custom implementations,@tailwindcss/forms,Custom form reset CSS,Medium,https://tailwindcss.com/docs/plugins
  48 +47,Plugins,Custom utilities,Create utilities for repeated patterns,Custom utility in config,Repeated arbitrary values,Custom shadow utility,"shadow-[0_4px_20px_rgba(0,0,0,0.1)] everywhere",Medium,
  49 +48,Layout,Container Queries,Use @container for component-based responsiveness,Use @container and @lg: etc.,Media queries for component internals,@container @lg:grid-cols-2,@media (min-width: ...) inside component,Medium,https://github.com/tailwindlabs/tailwindcss-container-queries
  50 +49,Interactivity,Group and Peer,Style based on parent/sibling state,group-hover peer-checked,JS for simple state interactions,group-hover:text-blue-500,onMouseEnter={() => setHover(true)},Low,https://tailwindcss.com/docs/hover-focus-and-other-states#styling-based-on-parent-state
  51 +50,Customization,Arbitrary Values,Use [] for one-off values,w-[350px] for specific needs,Creating config for single use,top-[117px] (if strictly needed),style={{ top: '117px' }},Low,https://tailwindcss.com/docs/adding-custom-styles#using-arbitrary-values
  52 +51,Colors,Theme color variables,Define colors in Tailwind theme and use directly,bg-primary text-success border-cta,bg-[var(--color-primary)] text-[var(--color-success)],bg-primary,bg-[var(--color-primary)],Medium,https://tailwindcss.com/docs/customizing-colors
  53 +52,Colors,Use bg-linear-to-* for gradients,Tailwind v4 uses bg-linear-to-* syntax for gradients,bg-linear-to-r bg-linear-to-b,bg-gradient-to-* (deprecated in v4),bg-linear-to-r from-blue-500 to-purple-500,bg-gradient-to-r from-blue-500 to-purple-500,Medium,https://tailwindcss.com/docs/background-image
  54 +53,Layout,Use shrink-0 shorthand,Shorter class name for flex-shrink-0,shrink-0 shrink,flex-shrink-0 flex-shrink,shrink-0,flex-shrink-0,Low,https://tailwindcss.com/docs/flex-shrink
  55 +54,Layout,Use size-* for square dimensions,Single utility for equal width and height,size-4 size-8 size-12,Separate h-* w-* for squares,size-6,h-6 w-6,Low,https://tailwindcss.com/docs/size
  56 +55,Images,SVG explicit dimensions,Add width/height attributes to SVGs to prevent layout shift before CSS loads,<svg class='size-6' width='24' height='24'>,SVG without explicit dimensions,<svg class='size-6' width='24' height='24'>,<svg class='size-6'>,High,
... ...
.shared/ui-ux-pro-max/data/stacks/nextjs.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Routing,Use App Router for new projects,App Router is the recommended approach in Next.js 14+,app/ directory with page.tsx,pages/ for new projects,app/dashboard/page.tsx,pages/dashboard.tsx,Medium,https://nextjs.org/docs/app
  3 +2,Routing,Use file-based routing,Create routes by adding files in app directory,page.tsx for routes layout.tsx for layouts,Manual route configuration,app/blog/[slug]/page.tsx,Custom router setup,Medium,https://nextjs.org/docs/app/building-your-application/routing
  4 +3,Routing,Colocate related files,Keep components styles tests with their routes,Component files alongside page.tsx,Separate components folder,app/dashboard/_components/,components/dashboard/,Low,
  5 +4,Routing,Use route groups for organization,Group routes without affecting URL,Parentheses for route groups,Nested folders affecting URL,(marketing)/about/page.tsx,marketing/about/page.tsx,Low,https://nextjs.org/docs/app/building-your-application/routing/route-groups
  6 +5,Routing,Handle loading states,Use loading.tsx for route loading UI,loading.tsx alongside page.tsx,Manual loading state management,app/dashboard/loading.tsx,useState for loading in page,Medium,https://nextjs.org/docs/app/building-your-application/routing/loading-ui-and-streaming
  7 +6,Routing,Handle errors with error.tsx,Catch errors at route level,error.tsx with reset function,try/catch in every component,app/dashboard/error.tsx,try/catch in page component,High,https://nextjs.org/docs/app/building-your-application/routing/error-handling
  8 +7,Rendering,Use Server Components by default,Server Components reduce client JS bundle,Keep components server by default,Add 'use client' unnecessarily,export default function Page(),('use client') for static content,High,https://nextjs.org/docs/app/building-your-application/rendering/server-components
  9 +8,Rendering,Mark Client Components explicitly,'use client' for interactive components,Add 'use client' only when needed,Server Component with hooks/events,('use client') for onClick useState,No directive with useState,High,https://nextjs.org/docs/app/building-your-application/rendering/client-components
  10 +9,Rendering,Push Client Components down,Keep Client Components as leaf nodes,Client wrapper for interactive parts only,Mark page as Client Component,<InteractiveButton/> in Server Page,('use client') on page.tsx,High,
  11 +10,Rendering,Use streaming for better UX,Stream content with Suspense boundaries,Suspense for slow data fetches,Wait for all data before render,<Suspense><SlowComponent/></Suspense>,await allData then render,Medium,https://nextjs.org/docs/app/building-your-application/routing/loading-ui-and-streaming
  12 +11,Rendering,Choose correct rendering strategy,SSG for static SSR for dynamic ISR for semi-static,generateStaticParams for known paths,SSR for static content,export const revalidate = 3600,fetch without cache config,Medium,
  13 +12,DataFetching,Fetch data in Server Components,Fetch directly in async Server Components,async function Page() { const data = await fetch() },useEffect for initial data,const data = await fetch(url),useEffect(() => fetch(url)),High,https://nextjs.org/docs/app/building-your-application/data-fetching
  14 +13,DataFetching,Configure caching explicitly (Next.js 15+),Next.js 15 changed defaults to uncached for fetch,Explicitly set cache: 'force-cache' for static data,Assume default is cached (it's not in Next.js 15),fetch(url { cache: 'force-cache' }),fetch(url) // Uncached in v15,High,https://nextjs.org/docs/app/building-your-application/upgrading/version-15
  15 +14,DataFetching,Deduplicate fetch requests,React and Next.js dedupe same requests,Same fetch call in multiple components,Manual request deduplication,Multiple components fetch same URL,Custom cache layer,Low,
  16 +15,DataFetching,Use Server Actions for mutations,Server Actions for form submissions,action={serverAction} in forms,API route for every mutation,<form action={createPost}>,<form onSubmit={callApiRoute}>,Medium,https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations
  17 +16,DataFetching,Revalidate data appropriately,Use revalidatePath/revalidateTag after mutations,Revalidate after Server Action,'use client' with manual refetch,revalidatePath('/posts'),router.refresh() everywhere,Medium,https://nextjs.org/docs/app/building-your-application/caching#revalidating
  18 +17,Images,Use next/image for optimization,Automatic image optimization and lazy loading,<Image> component for all images,<img> tags directly,<Image src={} alt={} width={} height={}>,<img src={}/>,High,https://nextjs.org/docs/app/building-your-application/optimizing/images
  19 +18,Images,Provide width and height,Prevent layout shift with dimensions,width and height props or fill,Missing dimensions,<Image width={400} height={300}/>,<Image src={url}/>,High,
  20 +19,Images,Use fill for responsive images,Fill container with object-fit,fill prop with relative parent,Fixed dimensions for responsive,"<Image fill className=""object-cover""/>",<Image width={window.width}/>,Medium,
  21 +20,Images,Configure remote image domains,Whitelist external image sources,remotePatterns in next.config.js,Allow all domains,remotePatterns: [{ hostname: 'cdn.example.com' }],domains: ['*'],High,https://nextjs.org/docs/app/api-reference/components/image#remotepatterns
  22 +21,Images,Use priority for LCP images,Mark above-fold images as priority,priority prop on hero images,All images with priority,<Image priority src={hero}/>,<Image priority/> on every image,Medium,
  23 +22,Fonts,Use next/font for fonts,Self-hosted fonts with zero layout shift,next/font/google or next/font/local,External font links,import { Inter } from 'next/font/google',"<link href=""fonts.googleapis.com""/>",Medium,https://nextjs.org/docs/app/building-your-application/optimizing/fonts
  24 +23,Fonts,Apply font to layout,Set font in root layout for consistency,className on body in layout.tsx,Font in individual pages,<body className={inter.className}>,Each page imports font,Low,
  25 +24,Fonts,Use variable fonts,Variable fonts reduce bundle size,Single variable font file,Multiple font weights as files,Inter({ subsets: ['latin'] }),Inter_400 Inter_500 Inter_700,Low,
  26 +25,Metadata,Use generateMetadata for dynamic,Generate metadata based on params,export async function generateMetadata(),Hardcoded metadata everywhere,generateMetadata({ params }),export const metadata = {},Medium,https://nextjs.org/docs/app/building-your-application/optimizing/metadata
  27 +26,Metadata,Include OpenGraph images,Add OG images for social sharing,opengraph-image.tsx or og property,Missing social preview images,opengraph: { images: ['/og.png'] },No OG configuration,Medium,
  28 +27,Metadata,Use metadata API,Export metadata object for static metadata,export const metadata = {},Manual head tags,export const metadata = { title: 'Page' },<head><title>Page</title></head>,Medium,
  29 +28,API,Use Route Handlers for APIs,app/api routes for API endpoints,app/api/users/route.ts,pages/api for new projects,export async function GET(request),export default function handler,Medium,https://nextjs.org/docs/app/building-your-application/routing/route-handlers
  30 +29,API,Return proper Response objects,Use NextResponse for API responses,NextResponse.json() for JSON,Plain objects or res.json(),return NextResponse.json({ data }),return { data },Medium,
  31 +30,API,Handle HTTP methods explicitly,Export named functions for methods,Export GET POST PUT DELETE,Single handler for all methods,export async function POST(),switch(req.method),Low,
  32 +31,API,Validate request body,Validate input before processing,Zod or similar for validation,Trust client input,const body = schema.parse(await req.json()),const body = await req.json(),High,
  33 +32,Middleware,Use middleware for auth,Protect routes with middleware.ts,middleware.ts at root,Auth check in every page,export function middleware(request),if (!session) redirect in page,Medium,https://nextjs.org/docs/app/building-your-application/routing/middleware
  34 +33,Middleware,Match specific paths,Configure middleware matcher,config.matcher for specific routes,Run middleware on all routes,matcher: ['/dashboard/:path*'],No matcher config,Medium,
  35 +34,Middleware,Keep middleware edge-compatible,Middleware runs on Edge runtime,Edge-compatible code only,Node.js APIs in middleware,Edge-compatible auth check,fs.readFile in middleware,High,
  36 +35,Environment,Use NEXT_PUBLIC prefix,Client-accessible env vars need prefix,NEXT_PUBLIC_ for client vars,Server vars exposed to client,NEXT_PUBLIC_API_URL,API_SECRET in client code,High,https://nextjs.org/docs/app/building-your-application/configuring/environment-variables
  37 +36,Environment,Validate env vars,Check required env vars exist,Validate on startup,Undefined env at runtime,if (!process.env.DATABASE_URL) throw,process.env.DATABASE_URL (might be undefined),High,
  38 +37,Environment,Use .env.local for secrets,Local env file for development secrets,.env.local gitignored,Secrets in .env committed,.env.local with secrets,.env with DATABASE_PASSWORD,High,
  39 +38,Performance,Analyze bundle size,Use @next/bundle-analyzer,Bundle analyzer in dev,Ship large bundles blindly,ANALYZE=true npm run build,No bundle analysis,Medium,https://nextjs.org/docs/app/building-your-application/optimizing/bundle-analyzer
  40 +39,Performance,Use dynamic imports,Code split with next/dynamic,dynamic() for heavy components,Import everything statically,const Chart = dynamic(() => import('./Chart')),import Chart from './Chart',Medium,https://nextjs.org/docs/app/building-your-application/optimizing/lazy-loading
  41 +40,Performance,Avoid layout shifts,Reserve space for dynamic content,Skeleton loaders aspect ratios,Content popping in,"<Skeleton className=""h-48""/>",No placeholder for async content,High,
  42 +41,Performance,Use Partial Prerendering,Combine static and dynamic in one route,Static shell with Suspense holes,Full dynamic or static pages,Static header + dynamic content,Entire page SSR,Low,https://nextjs.org/docs/app/building-your-application/rendering/partial-prerendering
  43 +42,Link,Use next/link for navigation,Client-side navigation with prefetching,"<Link href=""""> for internal links",<a> for internal navigation,"<Link href=""/about"">About</Link>","<a href=""/about"">About</a>",High,https://nextjs.org/docs/app/api-reference/components/link
  44 +43,Link,Prefetch strategically,Control prefetching behavior,prefetch={false} for low-priority,Prefetch all links,<Link prefetch={false}>,Default prefetch on every link,Low,
  45 +44,Link,Use scroll option appropriately,Control scroll behavior on navigation,scroll={false} for tabs pagination,Always scroll to top,<Link scroll={false}>,Manual scroll management,Low,
  46 +45,Config,Use next.config.js correctly,Configure Next.js behavior,Proper config options,Deprecated or wrong options,images: { remotePatterns: [] },images: { domains: [] },Medium,https://nextjs.org/docs/app/api-reference/next-config-js
  47 +46,Config,Enable strict mode,Catch potential issues early,reactStrictMode: true,Strict mode disabled,reactStrictMode: true,reactStrictMode: false,Medium,
  48 +47,Config,Configure redirects and rewrites,Use config for URL management,redirects() rewrites() in config,Manual redirect handling,redirects: async () => [...],res.redirect in pages,Medium,https://nextjs.org/docs/app/api-reference/next-config-js/redirects
  49 +48,Deployment,Use Vercel for easiest deploy,Vercel optimized for Next.js,Deploy to Vercel,Self-host without knowledge,vercel deploy,Complex Docker setup for simple app,Low,https://nextjs.org/docs/app/building-your-application/deploying
  50 +49,Deployment,Configure output for self-hosting,Set output option for deployment target,output: 'standalone' for Docker,Default output for containers,output: 'standalone',No output config for Docker,Medium,https://nextjs.org/docs/app/building-your-application/deploying#self-hosting
  51 +50,Security,Sanitize user input,Never trust user input,Escape sanitize validate all input,Direct interpolation of user data,DOMPurify.sanitize(userInput),dangerouslySetInnerHTML={{ __html: userInput }},High,
  52 +51,Security,Use CSP headers,Content Security Policy for XSS protection,Configure CSP in next.config.js,No security headers,headers() with CSP,No CSP configuration,High,https://nextjs.org/docs/app/building-your-application/configuring/content-security-policy
  53 +52,Security,Validate Server Action input,Server Actions are public endpoints,Validate and authorize in Server Action,Trust Server Action input,Auth check + validation in action,Direct database call without check,High,
... ...
.shared/ui-ux-pro-max/data/stacks/react-native.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Components,Use functional components,Hooks-based components are standard,Functional components with hooks,Class components,const App = () => { },class App extends Component,Medium,https://reactnative.dev/docs/intro-react
  3 +2,Components,Keep components small,Single responsibility principle,Split into smaller components,Large monolithic components,<Header /><Content /><Footer />,500+ line component,Medium,
  4 +3,Components,Use TypeScript,Type safety for props and state,TypeScript for new projects,JavaScript without types,const Button: FC<Props> = () => { },const Button = (props) => { },Medium,
  5 +4,Components,Colocate component files,Keep related files together,Component folder with styles,Flat structure,components/Button/index.tsx styles.ts,components/Button.tsx styles/button.ts,Low,
  6 +5,Styling,Use StyleSheet.create,Optimized style objects,StyleSheet for all styles,Inline style objects,StyleSheet.create({ container: {} }),style={{ margin: 10 }},High,https://reactnative.dev/docs/stylesheet
  7 +6,Styling,Avoid inline styles,Prevent object recreation,Styles in StyleSheet,Inline style objects in render,style={styles.container},"style={{ margin: 10, padding: 5 }}",Medium,
  8 +7,Styling,Use flexbox for layout,React Native uses flexbox,flexDirection alignItems justifyContent,Absolute positioning everywhere,flexDirection: 'row',position: 'absolute' everywhere,Medium,https://reactnative.dev/docs/flexbox
  9 +8,Styling,Handle platform differences,Platform-specific styles,Platform.select or .ios/.android files,Same styles for both platforms,"Platform.select({ ios: {}, android: {} })",Hardcoded iOS values,Medium,https://reactnative.dev/docs/platform-specific-code
  10 +9,Styling,Use responsive dimensions,Scale for different screens,Dimensions or useWindowDimensions,Fixed pixel values,useWindowDimensions(),width: 375,Medium,
  11 +10,Navigation,Use React Navigation,Standard navigation library,React Navigation for routing,Manual navigation management,createStackNavigator(),Custom navigation state,Medium,https://reactnavigation.org/
  12 +11,Navigation,Type navigation params,Type-safe navigation,Typed navigation props,Untyped navigation,"navigation.navigate<RootStackParamList>('Home', { id })","navigation.navigate('Home', { id })",Medium,
  13 +12,Navigation,Use deep linking,Support URL-based navigation,Configure linking prop,No deep link support,linking: { prefixes: [] },No linking configuration,Medium,https://reactnavigation.org/docs/deep-linking/
  14 +13,Navigation,Handle back button,Android back button handling,useFocusEffect with BackHandler,Ignore back button,BackHandler.addEventListener,No back handler,High,
  15 +14,State,Use useState for local state,Simple component state,useState for UI state,Class component state,"const [count, setCount] = useState(0)",this.state = { count: 0 },Medium,
  16 +15,State,Use useReducer for complex state,Complex state logic,useReducer for related state,Multiple useState for related values,useReducer(reducer initialState),5+ useState calls,Medium,
  17 +16,State,Use context sparingly,Context for global state,Context for theme auth locale,Context for frequently changing data,ThemeContext for app theme,Context for list item data,Medium,
  18 +17,State,Consider Zustand or Redux,External state management,Zustand for simple Redux for complex,useState for global state,create((set) => ({ })),Prop drilling global state,Medium,
  19 +18,Lists,Use FlatList for long lists,Virtualized list rendering,FlatList for 50+ items,ScrollView with map,<FlatList data={items} />,<ScrollView>{items.map()}</ScrollView>,High,https://reactnative.dev/docs/flatlist
  20 +19,Lists,Provide keyExtractor,Unique keys for list items,keyExtractor with stable ID,Index as key,keyExtractor={(item) => item.id},"keyExtractor={(_, index) => index}",High,
  21 +20,Lists,Optimize renderItem,Memoize list item components,React.memo for list items,Inline render function,renderItem={({ item }) => <MemoizedItem item={item} />},renderItem={({ item }) => <View>...</View>},High,
  22 +21,Lists,Use getItemLayout for fixed height,Skip measurement for performance,getItemLayout when height known,Dynamic measurement for fixed items,"getItemLayout={(_, index) => ({ length: 50, offset: 50 * index, index })}",No getItemLayout for fixed height,Medium,
  23 +22,Lists,Implement windowSize,Control render window,Smaller windowSize for memory,Default windowSize for large lists,windowSize={5},windowSize={21} for huge lists,Medium,
  24 +23,Performance,Use React.memo,Prevent unnecessary re-renders,memo for pure components,No memoization,export default memo(MyComponent),export default MyComponent,Medium,
  25 +24,Performance,Use useCallback for handlers,Stable function references,useCallback for props,New function on every render,"useCallback(() => {}, [deps])",() => handlePress(),Medium,
  26 +25,Performance,Use useMemo for expensive ops,Cache expensive calculations,useMemo for heavy computations,Recalculate every render,"useMemo(() => expensive(), [deps])",const result = expensive(),Medium,
  27 +26,Performance,Avoid anonymous functions in JSX,Prevent re-renders,Named handlers or useCallback,Inline arrow functions,onPress={handlePress},onPress={() => doSomething()},Medium,
  28 +27,Performance,Use Hermes engine,Improved startup and memory,Enable Hermes in build,JavaScriptCore for new projects,hermes_enabled: true,hermes_enabled: false,Medium,https://reactnative.dev/docs/hermes
  29 +28,Images,Use expo-image,Modern performant image component for React Native,"Use expo-image for caching, blurring, and performance",Use default Image for heavy lists or unmaintained libraries,<Image source={url} cachePolicy='memory-disk' /> (expo-image),<FastImage source={url} />,Medium,https://docs.expo.dev/versions/latest/sdk/image/
  30 +29,Images,Specify image dimensions,Prevent layout shifts,width and height for remote images,No dimensions for network images,<Image style={{ width: 100 height: 100 }} />,<Image source={{ uri }} /> no size,High,
  31 +30,Images,Use resizeMode,Control image scaling,resizeMode cover contain,Stretch images,"resizeMode=""cover""",No resizeMode,Low,
  32 +31,Forms,Use controlled inputs,State-controlled form fields,value + onChangeText,Uncontrolled inputs,<TextInput value={text} onChangeText={setText} />,<TextInput defaultValue={text} />,Medium,
  33 +32,Forms,Handle keyboard,Manage keyboard visibility,KeyboardAvoidingView,Content hidden by keyboard,"<KeyboardAvoidingView behavior=""padding"">",No keyboard handling,High,https://reactnative.dev/docs/keyboardavoidingview
  34 +33,Forms,Use proper keyboard types,Appropriate keyboard for input,keyboardType for input type,Default keyboard for all,"keyboardType=""email-address""","keyboardType=""default"" for email",Low,
  35 +34,Touch,Use Pressable,Modern touch handling,Pressable for touch interactions,TouchableOpacity for new code,<Pressable onPress={} />,<TouchableOpacity onPress={} />,Low,https://reactnative.dev/docs/pressable
  36 +35,Touch,Provide touch feedback,Visual feedback on press,Ripple or opacity change,No feedback on press,android_ripple={{ color: 'gray' }},No press feedback,Medium,
  37 +36,Touch,Set hitSlop for small targets,Increase touch area,hitSlop for icons and small buttons,Tiny touch targets,hitSlop={{ top: 10 bottom: 10 }},44x44 with no hitSlop,Medium,
  38 +37,Animation,Use Reanimated,High-performance animations,react-native-reanimated,Animated API for complex,useSharedValue useAnimatedStyle,Animated.timing for gesture,Medium,https://docs.swmansion.com/react-native-reanimated/
  39 +38,Animation,Run on UI thread,worklets for smooth animation,Run animations on UI thread,JS thread animations,runOnUI(() => {}),Animated on JS thread,High,
  40 +39,Animation,Use gesture handler,Native gesture recognition,react-native-gesture-handler,JS-based gesture handling,<GestureDetector>,<View onTouchMove={} />,Medium,https://docs.swmansion.com/react-native-gesture-handler/
  41 +40,Async,Handle loading states,Show loading indicators,ActivityIndicator during load,Empty screen during load,{isLoading ? <ActivityIndicator /> : <Content />},No loading state,Medium,
  42 +41,Async,Handle errors gracefully,Error boundaries and fallbacks,Error UI for failed requests,Crash on error,{error ? <ErrorView /> : <Content />},No error handling,High,
  43 +42,Async,Cancel async operations,Cleanup on unmount,AbortController or cleanup,Memory leaks from async,useEffect cleanup,No cleanup for subscriptions,High,
  44 +43,Accessibility,Add accessibility labels,Describe UI elements,accessibilityLabel for all interactive,Missing labels,"accessibilityLabel=""Submit form""",<Pressable> without label,High,https://reactnative.dev/docs/accessibility
  45 +44,Accessibility,Use accessibility roles,Semantic meaning,accessibilityRole for elements,Wrong roles,"accessibilityRole=""button""",No role for button,Medium,
  46 +45,Accessibility,Support screen readers,Test with TalkBack/VoiceOver,Test with screen readers,Skip accessibility testing,Regular TalkBack testing,No screen reader testing,High,
  47 +46,Testing,Use React Native Testing Library,Component testing,render and fireEvent,Enzyme or manual testing,render(<Component />),shallow(<Component />),Medium,https://callstack.github.io/react-native-testing-library/
  48 +47,Testing,Test on real devices,Real device behavior,Test on iOS and Android devices,Simulator only,Device testing in CI,Simulator only testing,High,
  49 +48,Testing,Use Detox for E2E,End-to-end testing,Detox for critical flows,Manual E2E testing,detox test,Manual testing only,Medium,https://wix.github.io/Detox/
  50 +49,Native,Use native modules carefully,Bridge has overhead,Batch native calls,Frequent bridge crossing,Batch updates,Call native on every keystroke,High,
  51 +50,Native,Use Expo when possible,Simplified development,Expo for standard features,Bare RN for simple apps,expo install package,react-native link package,Low,https://docs.expo.dev/
  52 +51,Native,Handle permissions,Request permissions properly,Check and request permissions,Assume permissions granted,PermissionsAndroid.request(),Access without permission check,High,https://reactnative.dev/docs/permissionsandroid
... ...
.shared/ui-ux-pro-max/data/stacks/react.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,State,Use useState for local state,Simple component state should use useState hook,useState for form inputs toggles counters,Class components this.state,"const [count, setCount] = useState(0)",this.state = { count: 0 },Medium,https://react.dev/reference/react/useState
  3 +2,State,Lift state up when needed,Share state between siblings by lifting to parent,Lift shared state to common ancestor,Prop drilling through many levels,Parent holds state passes down,Deep prop chains,Medium,https://react.dev/learn/sharing-state-between-components
  4 +3,State,Use useReducer for complex state,Complex state logic benefits from reducer pattern,useReducer for state with multiple sub-values,Multiple useState for related values,useReducer with action types,5+ useState calls that update together,Medium,https://react.dev/reference/react/useReducer
  5 +4,State,Avoid unnecessary state,Derive values from existing state when possible,Compute derived values in render,Store derivable values in state,const total = items.reduce(...),"const [total, setTotal] = useState(0)",High,https://react.dev/learn/choosing-the-state-structure
  6 +5,State,Initialize state lazily,Use function form for expensive initial state,useState(() => computeExpensive()),useState(computeExpensive()),useState(() => JSON.parse(data)),useState(JSON.parse(data)),Medium,https://react.dev/reference/react/useState#avoiding-recreating-the-initial-state
  7 +6,Effects,Clean up effects,Return cleanup function for subscriptions timers,Return cleanup function in useEffect,No cleanup for subscriptions,useEffect(() => { sub(); return unsub; }),useEffect(() => { subscribe(); }),High,https://react.dev/reference/react/useEffect#connecting-to-an-external-system
  8 +7,Effects,Specify dependencies correctly,Include all values used inside effect in deps array,All referenced values in dependency array,Empty deps with external references,[value] when using value in effect,[] when using props/state in effect,High,https://react.dev/reference/react/useEffect#specifying-reactive-dependencies
  9 +8,Effects,Avoid unnecessary effects,Don't use effects for transforming data or events,Transform data during render handle events directly,useEffect for derived state or event handling,const filtered = items.filter(...),useEffect(() => setFiltered(items.filter(...))),High,https://react.dev/learn/you-might-not-need-an-effect
  10 +9,Effects,Use refs for non-reactive values,Store values that don't trigger re-renders in refs,useRef for interval IDs DOM elements,useState for values that don't need render,const intervalRef = useRef(null),"const [intervalId, setIntervalId] = useState()",Medium,https://react.dev/reference/react/useRef
  11 +10,Rendering,Use keys properly,Stable unique keys for list items,Use stable IDs as keys,Array index as key for dynamic lists,key={item.id},key={index},High,https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key
  12 +11,Rendering,Memoize expensive calculations,Use useMemo for costly computations,useMemo for expensive filtering/sorting,Recalculate every render,"useMemo(() => expensive(), [deps])",const result = expensiveCalc(),Medium,https://react.dev/reference/react/useMemo
  13 +12,Rendering,Memoize callbacks passed to children,Use useCallback for functions passed as props,useCallback for handlers passed to memoized children,New function reference every render,"useCallback(() => {}, [deps])",const handler = () => {},Medium,https://react.dev/reference/react/useCallback
  14 +13,Rendering,Use React.memo wisely,Wrap components that render often with same props,memo for pure components with stable props,memo everything or nothing,memo(ExpensiveList),memo(SimpleButton),Low,https://react.dev/reference/react/memo
  15 +14,Rendering,Avoid inline object/array creation in JSX,Create objects outside render or memoize,Define style objects outside component,Inline objects in props,<div style={styles.container}>,<div style={{ margin: 10 }}>,Medium,
  16 +15,Components,Keep components small and focused,Single responsibility for each component,One concern per component,Large multi-purpose components,<UserAvatar /><UserName />,<UserCard /> with 500 lines,Medium,
  17 +16,Components,Use composition over inheritance,Compose components using children and props,Use children prop for flexibility,Inheritance hierarchies,<Card>{content}</Card>,class SpecialCard extends Card,Medium,https://react.dev/learn/thinking-in-react
  18 +17,Components,Colocate related code,Keep related components and hooks together,Related files in same directory,Flat structure with many files,components/User/UserCard.tsx,components/UserCard.tsx + hooks/useUser.ts,Low,
  19 +18,Components,Use fragments to avoid extra DOM,Fragment or <> for multiple elements without wrapper,<> for grouping without DOM node,Extra div wrappers,<>{items.map(...)}</>,<div>{items.map(...)}</div>,Low,https://react.dev/reference/react/Fragment
  20 +19,Props,Destructure props,Destructure props for cleaner component code,Destructure in function signature,props.name props.value throughout,"function User({ name, age })",function User(props),Low,
  21 +20,Props,Provide default props values,Use default parameters or defaultProps,Default values in destructuring,Undefined checks throughout,function Button({ size = 'md' }),if (size === undefined) size = 'md',Low,
  22 +21,Props,Avoid prop drilling,Use context or composition for deeply nested data,Context for global data composition for UI,Passing props through 5+ levels,<UserContext.Provider>,<A user={u}><B user={u}><C user={u}>,Medium,https://react.dev/learn/passing-data-deeply-with-context
  23 +22,Props,Validate props with TypeScript,Use TypeScript interfaces for prop types,interface Props { name: string },PropTypes or no validation,interface ButtonProps { onClick: () => void },Button.propTypes = {},Medium,
  24 +23,Events,Use synthetic events correctly,React normalizes events across browsers,e.preventDefault() e.stopPropagation(),Access native event unnecessarily,onClick={(e) => e.preventDefault()},onClick={(e) => e.nativeEvent.preventDefault()},Low,https://react.dev/reference/react-dom/components/common#react-event-object
  25 +24,Events,Avoid binding in render,Use arrow functions in class or hooks,Arrow functions in functional components,bind in render or constructor,const handleClick = () => {},this.handleClick.bind(this),Medium,
  26 +25,Events,Pass event handlers not call results,Pass function reference not invocation,onClick={handleClick},onClick={handleClick()} causing immediate call,onClick={handleClick},onClick={handleClick()},High,
  27 +26,Forms,Controlled components for forms,Use state to control form inputs,value + onChange for inputs,Uncontrolled inputs with refs,<input value={val} onChange={setVal}>,<input ref={inputRef}>,Medium,https://react.dev/reference/react-dom/components/input#controlling-an-input-with-a-state-variable
  28 +27,Forms,Handle form submission properly,Prevent default and handle in submit handler,onSubmit with preventDefault,onClick on submit button only,<form onSubmit={handleSubmit}>,<button onClick={handleSubmit}>,Medium,
  29 +28,Forms,Debounce rapid input changes,Debounce search/filter inputs,useDeferredValue or debounce for search,Filter on every keystroke,useDeferredValue(searchTerm),useEffect filtering on every change,Medium,https://react.dev/reference/react/useDeferredValue
  30 +29,Hooks,Follow rules of hooks,Only call hooks at top level and in React functions,Hooks at component top level,Hooks in conditions loops or callbacks,"const [x, setX] = useState()","if (cond) { const [x, setX] = useState() }",High,https://react.dev/reference/rules/rules-of-hooks
  31 +30,Hooks,Custom hooks for reusable logic,Extract shared stateful logic to custom hooks,useCustomHook for reusable patterns,Duplicate hook logic across components,const { data } = useFetch(url),Duplicate useEffect/useState in components,Medium,https://react.dev/learn/reusing-logic-with-custom-hooks
  32 +31,Hooks,Name custom hooks with use prefix,Custom hooks must start with use,useFetch useForm useAuth,fetchData or getData for hook,function useFetch(url),function fetchData(url),High,
  33 +32,Context,Use context for global data,Context for theme auth locale,Context for app-wide state,Context for frequently changing data,<ThemeContext.Provider>,Context for form field values,Medium,https://react.dev/learn/passing-data-deeply-with-context
  34 +33,Context,Split contexts by concern,Separate contexts for different domains,ThemeContext + AuthContext,One giant AppContext,<ThemeProvider><AuthProvider>,<AppProvider value={{theme user...}}>,Medium,
  35 +34,Context,Memoize context values,Prevent unnecessary re-renders with useMemo,useMemo for context value object,New object reference every render,"value={useMemo(() => ({...}), [])}","value={{ user, theme }}",High,
  36 +35,Performance,Use React DevTools Profiler,Profile to identify performance bottlenecks,Profile before optimizing,Optimize without measuring,React DevTools Profiler,Guessing at bottlenecks,Medium,https://react.dev/learn/react-developer-tools
  37 +36,Performance,Lazy load components,Use React.lazy for code splitting,lazy() for routes and heavy components,Import everything upfront,const Page = lazy(() => import('./Page')),import Page from './Page',Medium,https://react.dev/reference/react/lazy
  38 +37,Performance,Virtualize long lists,Use windowing for lists over 100 items,react-window or react-virtual,Render thousands of DOM nodes,<VirtualizedList items={items}/>,{items.map(i => <Item />)},High,
  39 +38,Performance,Batch state updates,React 18 auto-batches but be aware,Let React batch related updates,Manual batching with flushSync,setA(1); setB(2); // batched,flushSync(() => setA(1)),Low,https://react.dev/learn/queueing-a-series-of-state-updates
  40 +39,ErrorHandling,Use error boundaries,Catch JavaScript errors in component tree,ErrorBoundary wrapping sections,Let errors crash entire app,<ErrorBoundary><App/></ErrorBoundary>,No error handling,High,https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary
  41 +40,ErrorHandling,Handle async errors,Catch errors in async operations,try/catch in async handlers,Unhandled promise rejections,try { await fetch() } catch(e) {},await fetch() // no catch,High,
  42 +41,Testing,Test behavior not implementation,Test what user sees and does,Test renders and interactions,Test internal state or methods,expect(screen.getByText('Hello')),expect(component.state.name),Medium,https://testing-library.com/docs/react-testing-library/intro/
  43 +42,Testing,Use testing-library queries,Use accessible queries,getByRole getByLabelText,getByTestId for everything,getByRole('button'),getByTestId('submit-btn'),Medium,https://testing-library.com/docs/queries/about#priority
  44 +43,Accessibility,Use semantic HTML,Proper HTML elements for their purpose,button for clicks nav for navigation,div with onClick for buttons,<button onClick={...}>,<div onClick={...}>,High,https://react.dev/reference/react-dom/components#all-html-components
  45 +44,Accessibility,Manage focus properly,Handle focus for modals dialogs,Focus trap in modals return focus on close,No focus management,useEffect to focus input,Modal without focus trap,High,
  46 +45,Accessibility,Announce dynamic content,Use ARIA live regions for updates,aria-live for dynamic updates,Silent updates to screen readers,"<div aria-live=""polite"">{msg}</div>",<div>{msg}</div>,Medium,
  47 +46,Accessibility,Label form controls,Associate labels with inputs,htmlFor matching input id,Placeholder as only label,"<label htmlFor=""email"">Email</label>","<input placeholder=""Email""/>",High,
  48 +47,TypeScript,Type component props,Define interfaces for all props,interface Props with all prop types,any or missing types,interface Props { name: string },function Component(props: any),High,
  49 +48,TypeScript,Type state properly,Provide types for useState,useState<Type>() for complex state,Inferred any types,useState<User | null>(null),useState(null),Medium,
  50 +49,TypeScript,Type event handlers,Use React event types,React.ChangeEvent<HTMLInputElement>,Generic Event type,onChange: React.ChangeEvent<HTMLInputElement>,onChange: Event,Medium,
  51 +50,TypeScript,Use generics for reusable components,Generic components for flexible typing,Generic props for list components,Union types for flexibility,<List<T> items={T[]}>,<List items={any[]}>,Medium,
  52 +51,Patterns,Container/Presentational split,Separate data logic from UI,Container fetches presentational renders,Mixed data and UI in one,<UserContainer><UserView/></UserContainer>,<User /> with fetch and render,Low,
  53 +52,Patterns,Render props for flexibility,Share code via render prop pattern,Render prop for customizable rendering,Duplicate logic across components,<DataFetcher render={data => ...}/>,Copy paste fetch logic,Low,https://react.dev/reference/react/cloneElement#passing-data-with-a-render-prop
  54 +53,Patterns,Compound components,Related components sharing state,Tab + TabPanel sharing context,Prop drilling between related,<Tabs><Tab/><TabPanel/></Tabs>,<Tabs tabs={[]} panels={[...]}/>,Low,
... ...
.shared/ui-ux-pro-max/data/stacks/svelte.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Reactivity,Use $: for reactive statements,Automatic dependency tracking,$: for derived values,Manual recalculation,$: doubled = count * 2,let doubled; count && (doubled = count * 2),Medium,https://svelte.dev/docs/svelte-components#script-3-$-marks-a-statement-as-reactive
  3 +2,Reactivity,Trigger reactivity with assignment,Svelte tracks assignments not mutations,Reassign arrays/objects to trigger update,Mutate without reassignment,"items = [...items, newItem]",items.push(newItem),High,https://svelte.dev/docs/svelte-components#script-2-assignments-are-reactive
  4 +3,Reactivity,Use $state in Svelte 5,Runes for explicit reactivity,let count = $state(0),Implicit reactivity in Svelte 5,let count = $state(0),let count = 0 (Svelte 5),Medium,https://svelte.dev/blog/runes
  5 +4,Reactivity,Use $derived for computed values,$derived replaces $: in Svelte 5,let doubled = $derived(count * 2),$: in Svelte 5,let doubled = $derived(count * 2),$: doubled = count * 2 (Svelte 5),Medium,
  6 +5,Reactivity,Use $effect for side effects,$effect replaces $: side effects,Use $effect for subscriptions,$: for side effects in Svelte 5,$effect(() => console.log(count)),$: console.log(count) (Svelte 5),Medium,
  7 +6,Props,Export let for props,Declare props with export let,export let propName,Props without export,export let count = 0,let count = 0,High,https://svelte.dev/docs/svelte-components#script-1-export-creates-a-component-prop
  8 +7,Props,Use $props in Svelte 5,$props rune for prop access,let { name } = $props(),export let in Svelte 5,"let { name, age = 0 } = $props()",export let name; export let age = 0,Medium,
  9 +8,Props,Provide default values,Default props with assignment,export let count = 0,Required props without defaults,export let count = 0,export let count,Low,
  10 +9,Props,Use spread props,Pass through unknown props,{...$$restProps} on elements,Manual prop forwarding,<button {...$$restProps}>,<button class={$$props.class}>,Low,https://svelte.dev/docs/basic-markup#attributes-and-props
  11 +10,Bindings,Use bind: for two-way binding,Simplified input handling,bind:value for inputs,on:input with manual update,<input bind:value={name}>,<input value={name} on:input={e => name = e.target.value}>,Low,https://svelte.dev/docs/element-directives#bind-property
  12 +11,Bindings,Bind to DOM elements,Reference DOM nodes,bind:this for element reference,querySelector in onMount,<div bind:this={el}>,onMount(() => el = document.querySelector()),Medium,
  13 +12,Bindings,Use bind:group for radios/checkboxes,Simplified group handling,bind:group for radio/checkbox groups,Manual checked handling,"<input type=""radio"" bind:group={selected}>","<input type=""radio"" checked={selected === value}>",Low,
  14 +13,Events,Use on: for event handlers,Event directive syntax,on:click={handler},addEventListener in onMount,<button on:click={handleClick}>,onMount(() => btn.addEventListener()),Medium,https://svelte.dev/docs/element-directives#on-eventname
  15 +14,Events,Forward events with on:event,Pass events to parent,on:click without handler,createEventDispatcher for DOM events,<button on:click>,"dispatch('click', event)",Low,
  16 +15,Events,Use createEventDispatcher,Custom component events,dispatch for custom events,on:event for custom events,"dispatch('save', { data })",on:save without dispatch,Medium,https://svelte.dev/docs/svelte#createeventdispatcher
  17 +16,Lifecycle,Use onMount for initialization,Run code after component mounts,onMount for setup and data fetching,Code in script body for side effects,onMount(() => fetchData()),fetchData() in script body,High,https://svelte.dev/docs/svelte#onmount
  18 +17,Lifecycle,Return cleanup from onMount,Automatic cleanup on destroy,Return function from onMount,Separate onDestroy for paired cleanup,onMount(() => { sub(); return unsub }),onMount(sub); onDestroy(unsub),Medium,
  19 +18,Lifecycle,Use onDestroy sparingly,Only when onMount cleanup not possible,onDestroy for non-mount cleanup,onDestroy for mount-related cleanup,onDestroy for store unsubscribe,onDestroy(() => clearInterval(id)),Low,
  20 +19,Lifecycle,Avoid beforeUpdate/afterUpdate,Usually not needed,Reactive statements instead,beforeUpdate for derived state,$: if (x) doSomething(),beforeUpdate(() => doSomething()),Low,
  21 +20,Stores,Use writable for mutable state,Basic reactive store,writable for shared mutable state,Local variables for shared state,const count = writable(0),let count = 0 in module,Medium,https://svelte.dev/docs/svelte-store#writable
  22 +21,Stores,Use readable for read-only state,External data sources,readable for derived/external data,writable for read-only data,"readable(0, set => interval(set))",writable(0) for timer,Low,https://svelte.dev/docs/svelte-store#readable
  23 +22,Stores,Use derived for computed stores,Combine or transform stores,derived for computed values,Manual subscription for derived,"derived(count, $c => $c * 2)",count.subscribe(c => doubled = c * 2),Medium,https://svelte.dev/docs/svelte-store#derived
  24 +23,Stores,Use $ prefix for auto-subscription,Automatic subscribe/unsubscribe,$storeName in components,Manual subscription,{$count},count.subscribe(c => value = c),High,
  25 +24,Stores,Clean up custom subscriptions,Unsubscribe when component destroys,Return unsubscribe from onMount,Leave subscriptions open,onMount(() => store.subscribe(fn)),store.subscribe(fn) in script,High,
  26 +25,Slots,Use slots for composition,Content projection,<slot> for flexible content,Props for all content,<slot>Default</slot>,"<Component content=""text""/>",Medium,https://svelte.dev/docs/special-elements#slot
  27 +26,Slots,Name slots for multiple areas,Multiple content areas,"<slot name=""header"">",Single slot for complex layouts,"<slot name=""header""><slot name=""footer"">",<slot> with complex conditionals,Low,
  28 +27,Slots,Check slot content with $$slots,Conditional slot rendering,$$slots.name for conditional rendering,Always render slot wrapper,"{#if $$slots.footer}<slot name=""footer""/>{/if}","<div><slot name=""footer""/></div>",Low,
  29 +28,Styling,Use scoped styles by default,Styles scoped to component,<style> for component styles,Global styles for component,:global() only when needed,<style> all global,Medium,https://svelte.dev/docs/svelte-components#style
  30 +29,Styling,Use :global() sparingly,Escape scoping when needed,:global for third-party styling,Global for all styles,:global(.external-lib),<style> without scoping,Medium,
  31 +30,Styling,Use CSS variables for theming,Dynamic styling,CSS custom properties,Inline styles for themes,"style=""--color: {color}""","style=""color: {color}""",Low,
  32 +31,Transitions,Use built-in transitions,Svelte transition directives,transition:fade for simple effects,Manual CSS transitions,<div transition:fade>,<div class:fade={visible}>,Low,https://svelte.dev/docs/element-directives#transition-fn
  33 +32,Transitions,Use in: and out: separately,Different enter/exit animations,in:fly out:fade for asymmetric,Same transition for both,<div in:fly out:fade>,<div transition:fly>,Low,
  34 +33,Transitions,Add local modifier,Prevent ancestor trigger,transition:fade|local,Global transitions for lists,<div transition:slide|local>,<div transition:slide>,Medium,
  35 +34,Actions,Use actions for DOM behavior,Reusable DOM logic,use:action for DOM enhancements,onMount for each usage,<div use:clickOutside>,onMount(() => setupClickOutside(el)),Medium,https://svelte.dev/docs/element-directives#use-action
  36 +35,Actions,Return update and destroy,Lifecycle methods for actions,"Return { update, destroy }",Only initial setup,"return { update(params) {}, destroy() {} }",return destroy only,Medium,
  37 +36,Actions,Pass parameters to actions,Configure action behavior,use:action={params},Hardcoded action behavior,<div use:tooltip={options}>,<div use:tooltip>,Low,
  38 +37,Logic,Use {#if} for conditionals,Template conditionals,{#if} {:else if} {:else},Ternary in expressions,{#if cond}...{:else}...{/if},{cond ? a : b} for complex,Low,https://svelte.dev/docs/logic-blocks#if
  39 +38,Logic,Use {#each} for lists,List rendering,{#each} with key,Map in expression,{#each items as item (item.id)},{items.map(i => `<div>${i}</div>`)},Medium,
  40 +39,Logic,Always use keys in {#each},Proper list reconciliation,(item.id) for unique key,Index as key or no key,{#each items as item (item.id)},"{#each items as item, i (i)}",High,
  41 +40,Logic,Use {#await} for promises,Handle async states,{#await} for loading/error states,Manual promise handling,{#await promise}...{:then}...{:catch},{#if loading}...{#if error},Medium,https://svelte.dev/docs/logic-blocks#await
  42 +41,SvelteKit,Use +page.svelte for routes,File-based routing,+page.svelte for route components,Custom routing setup,routes/about/+page.svelte,routes/About.svelte,Medium,https://kit.svelte.dev/docs/routing
  43 +42,SvelteKit,Use +page.js for data loading,Load data before render,load function in +page.js,onMount for data fetching,export function load() {},onMount(() => fetchData()),High,https://kit.svelte.dev/docs/load
  44 +43,SvelteKit,Use +page.server.js for server-only,Server-side data loading,+page.server.js for sensitive data,+page.js for API keys,+page.server.js with DB access,+page.js with DB access,High,
  45 +44,SvelteKit,Use form actions,Server-side form handling,+page.server.js actions,API routes for forms,export const actions = { default },fetch('/api/submit'),Medium,https://kit.svelte.dev/docs/form-actions
  46 +45,SvelteKit,Use $app/stores for app state,$page $navigating $updated,$page for current page data,Manual URL parsing,import { page } from '$app/stores',window.location.pathname,Medium,https://kit.svelte.dev/docs/modules#$app-stores
  47 +46,Performance,Use {#key} for forced re-render,Reset component state,{#key id} for fresh instance,Manual destroy/create,{#key item.id}<Component/>{/key},on:change={() => component = null},Low,https://svelte.dev/docs/logic-blocks#key
  48 +47,Performance,Avoid unnecessary reactivity,Not everything needs $:,$: only for side effects,$: for simple assignments,$: if (x) console.log(x),$: y = x (when y = x works),Low,
  49 +48,Performance,Use immutable compiler option,Skip equality checks,immutable: true for large lists,Default for all components,<svelte:options immutable/>,Default without immutable,Low,
  50 +49,TypeScript,"Use lang=""ts"" in script",TypeScript support,"<script lang=""ts"">",JavaScript for typed projects,"<script lang=""ts"">",<script> with JSDoc,Medium,https://svelte.dev/docs/typescript
  51 +50,TypeScript,Type props with interface,Explicit prop types,interface $$Props for types,Untyped props,interface $$Props { name: string },export let name,Medium,
  52 +51,TypeScript,Type events with createEventDispatcher,Type-safe events,createEventDispatcher<Events>(),Untyped dispatch,createEventDispatcher<{ save: Data }>(),createEventDispatcher(),Medium,
  53 +52,Accessibility,Use semantic elements,Proper HTML in templates,button nav main appropriately,div for everything,<button on:click>,<div on:click>,High,
  54 +53,Accessibility,Add aria to dynamic content,Accessible state changes,aria-live for updates,Silent dynamic updates,"<div aria-live=""polite"">{message}</div>",<div>{message}</div>,Medium,
... ...
.shared/ui-ux-pro-max/data/stacks/swiftui.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Views,Use struct for views,SwiftUI views are value types,struct MyView: View,class MyView: View,struct ContentView: View { var body: some View },class ContentView: View,High,https://developer.apple.com/documentation/swiftui/view
  3 +2,Views,Keep views small and focused,Single responsibility for each view,Extract subviews for complex layouts,Large monolithic views,Extract HeaderView FooterView,500+ line View struct,Medium,
  4 +3,Views,Use body computed property,body returns the view hierarchy,var body: some View { },func body() -> some View,"var body: some View { Text(""Hello"") }",func body() -> Text,High,
  5 +4,Views,Prefer composition over inheritance,Compose views using ViewBuilder,Combine smaller views,Inheritance hierarchies,VStack { Header() Content() },class SpecialView extends BaseView,Medium,
  6 +5,State,Use @State for local state,Simple value types owned by view,@State for view-local primitives,@State for shared data,@State private var count = 0,@State var sharedData: Model,High,https://developer.apple.com/documentation/swiftui/state
  7 +6,State,Use @Binding for two-way data,Pass mutable state to child views,@Binding for child input,@State in child for parent data,@Binding var isOn: Bool,$isOn to pass binding,Medium,https://developer.apple.com/documentation/swiftui/binding
  8 +7,State,Use @StateObject for reference types,ObservableObject owned by view,@StateObject for view-created objects,@ObservedObject for owned objects,@StateObject private var vm = ViewModel(),@ObservedObject var vm = ViewModel(),High,https://developer.apple.com/documentation/swiftui/stateobject
  9 +8,State,Use @ObservedObject for injected objects,Reference types passed from parent,@ObservedObject for injected dependencies,@StateObject for injected objects,@ObservedObject var vm: ViewModel,@StateObject var vm: ViewModel (injected),High,https://developer.apple.com/documentation/swiftui/observedobject
  10 +9,State,Use @EnvironmentObject for shared state,App-wide state injection,@EnvironmentObject for global state,Prop drilling through views,@EnvironmentObject var settings: Settings,Pass settings through 5 views,Medium,https://developer.apple.com/documentation/swiftui/environmentobject
  11 +10,State,Use @Published in ObservableObject,Automatically publish property changes,@Published for observed properties,Manual objectWillChange calls,@Published var items: [Item] = [],var items: [Item] { didSet { objectWillChange.send() } },Medium,
  12 +11,Observable,Use @Observable macro (iOS 17+),Modern observation without Combine,@Observable class for view models,ObservableObject for new projects,@Observable class ViewModel { },class ViewModel: ObservableObject,Medium,https://developer.apple.com/documentation/observation
  13 +12,Observable,Use @Bindable for @Observable,Create bindings from @Observable,@Bindable var vm for bindings,@Binding with @Observable,@Bindable var viewModel,$viewModel.name with @Observable,Medium,
  14 +13,Layout,Use VStack HStack ZStack,Standard stack-based layouts,Stacks for linear arrangements,GeometryReader for simple layouts,VStack { Text() Image() },GeometryReader for vertical list,Medium,https://developer.apple.com/documentation/swiftui/vstack
  15 +14,Layout,Use LazyVStack LazyHStack for lists,Lazy loading for performance,Lazy stacks for long lists,Regular stacks for 100+ items,LazyVStack { ForEach(items) },VStack { ForEach(largeArray) },High,https://developer.apple.com/documentation/swiftui/lazyvstack
  16 +15,Layout,Use GeometryReader sparingly,Only when needed for sizing,GeometryReader for responsive layouts,GeometryReader everywhere,GeometryReader for aspect ratio,GeometryReader wrapping everything,Medium,
  17 +16,Layout,Use spacing and padding consistently,Consistent spacing throughout app,Design system spacing values,Magic numbers for spacing,.padding(16) or .padding(),".padding(13), .padding(17)",Low,
  18 +17,Layout,Use frame modifiers correctly,Set explicit sizes when needed,.frame(maxWidth: .infinity),Fixed sizes for responsive content,.frame(maxWidth: .infinity),.frame(width: 375),Medium,
  19 +18,Modifiers,Order modifiers correctly,Modifier order affects rendering,Background before padding for full coverage,Wrong modifier order,.padding().background(Color.red),.background(Color.red).padding(),High,
  20 +19,Modifiers,Create custom ViewModifiers,Reusable modifier combinations,ViewModifier for repeated styling,Duplicate modifier chains,struct CardStyle: ViewModifier,.shadow().cornerRadius() everywhere,Medium,https://developer.apple.com/documentation/swiftui/viewmodifier
  21 +20,Modifiers,Use conditional modifiers carefully,Avoid changing view identity,if-else with same view type,Conditional that changes view identity,Text(title).foregroundColor(isActive ? .blue : .gray),if isActive { Text().bold() } else { Text() },Medium,
  22 +21,Navigation,Use NavigationStack (iOS 16+),Modern navigation with type-safe paths,NavigationStack with navigationDestination,NavigationView for new projects,NavigationStack { },NavigationView { } (deprecated),Medium,https://developer.apple.com/documentation/swiftui/navigationstack
  23 +22,Navigation,Use navigationDestination,Type-safe navigation destinations,.navigationDestination(for:),NavigationLink(destination:),.navigationDestination(for: Item.self),NavigationLink(destination: DetailView()),Medium,
  24 +23,Navigation,Use @Environment for dismiss,Programmatic navigation dismissal,@Environment(\.dismiss) var dismiss,presentationMode (deprecated),@Environment(\.dismiss) var dismiss,@Environment(\.presentationMode),Low,
  25 +24,Lists,Use List for scrollable content,Built-in scrolling and styling,List for standard scrollable content,ScrollView + VStack for simple lists,List { ForEach(items) { } },ScrollView { VStack { ForEach } },Low,https://developer.apple.com/documentation/swiftui/list
  26 +25,Lists,Provide stable identifiers,Use Identifiable or explicit id,Identifiable protocol or id parameter,Index as identifier,ForEach(items) where Item: Identifiable,"ForEach(items.indices, id: \.self)",High,
  27 +26,Lists,Use onDelete and onMove,Standard list editing,onDelete for swipe to delete,Custom delete implementation,.onDelete(perform: delete),.onTapGesture for delete,Low,
  28 +27,Forms,Use Form for settings,Grouped input controls,Form for settings screens,Manual grouping for forms,Form { Section { Toggle() } },VStack { Toggle() },Low,https://developer.apple.com/documentation/swiftui/form
  29 +28,Forms,Use @FocusState for keyboard,Manage keyboard focus,@FocusState for text field focus,Manual first responder handling,@FocusState private var isFocused: Bool,UIKit first responder,Medium,https://developer.apple.com/documentation/swiftui/focusstate
  30 +29,Forms,Validate input properly,Show validation feedback,Real-time validation feedback,Submit without validation,TextField with validation state,TextField without error handling,Medium,
  31 +30,Async,Use .task for async work,Automatic cancellation on view disappear,.task for view lifecycle async,onAppear with Task,.task { await loadData() },onAppear { Task { await loadData() } },Medium,https://developer.apple.com/documentation/swiftui/view/task(priority:_:)
  32 +31,Async,Handle loading states,Show progress during async operations,ProgressView during loading,Empty view during load,if isLoading { ProgressView() },No loading indicator,Medium,
  33 +32,Async,Use @MainActor for UI updates,Ensure UI updates on main thread,@MainActor on view models,Manual DispatchQueue.main,@MainActor class ViewModel,DispatchQueue.main.async,Medium,
  34 +33,Animation,Use withAnimation,Animate state changes,withAnimation for state transitions,No animation for state changes,withAnimation { isExpanded.toggle() },isExpanded.toggle(),Low,https://developer.apple.com/documentation/swiftui/withanimation(_:_:)
  35 +34,Animation,Use .animation modifier,Apply animations to views,.animation(.spring()) on view,Manual animation timing,.animation(.easeInOut),CABasicAnimation equivalent,Low,
  36 +35,Animation,Respect reduced motion,Check accessibility settings,Check accessibilityReduceMotion,Ignore motion preferences,@Environment(\.accessibilityReduceMotion),Always animate regardless,High,
  37 +36,Preview,Use #Preview macro (Xcode 15+),Modern preview syntax,#Preview for view previews,PreviewProvider protocol,#Preview { ContentView() },struct ContentView_Previews: PreviewProvider,Low,
  38 +37,Preview,Create multiple previews,Test different states and devices,Multiple previews for states,Single preview only,"#Preview(""Light"") { } #Preview(""Dark"") { }",Single preview configuration,Low,
  39 +38,Preview,Use preview data,Dedicated preview mock data,Static preview data,Production data in previews,Item.preview for preview,Fetch real data in preview,Low,
  40 +39,Performance,Avoid expensive body computations,Body should be fast to compute,Precompute in view model,Heavy computation in body,vm.computedValue in body,Complex calculation in body,High,
  41 +40,Performance,Use Equatable views,Skip unnecessary view updates,Equatable for complex views,Default equality for all views,struct MyView: View Equatable,No Equatable conformance,Medium,
  42 +41,Performance,Profile with Instruments,Measure before optimizing,Use SwiftUI Instruments,Guess at performance issues,Profile with Instruments,Optimize without measuring,Medium,
  43 +42,Accessibility,Add accessibility labels,Describe UI elements,.accessibilityLabel for context,Missing labels,".accessibilityLabel(""Close button"")",Button without label,High,https://developer.apple.com/documentation/swiftui/view/accessibilitylabel(_:)-1d7jv
  44 +43,Accessibility,Support Dynamic Type,Respect text size preferences,Scalable fonts and layouts,Fixed font sizes,.font(.body) with Dynamic Type,.font(.system(size: 16)),High,
  45 +44,Accessibility,Use semantic views,Proper accessibility traits,Correct accessibilityTraits,Wrong semantic meaning,Button for actions Image for display,Image that acts like button,Medium,
  46 +45,Testing,Use ViewInspector for testing,Third-party view testing,ViewInspector for unit tests,UI tests only,ViewInspector assertions,Only XCUITest,Medium,
  47 +46,Testing,Test view models,Unit test business logic,XCTest for view model,Skip view model testing,Test ViewModel methods,No unit tests,Medium,
  48 +47,Testing,Use preview as visual test,Previews catch visual regressions,Multiple preview configurations,No visual verification,Preview different states,Single preview only,Low,
  49 +48,Architecture,Use MVVM pattern,Separate view and logic,ViewModel for business logic,Logic in View,ObservableObject ViewModel,@State for complex logic,Medium,
  50 +49,Architecture,Keep views dumb,Views display view model state,View reads from ViewModel,Business logic in View,view.items from vm.items,Complex filtering in View,Medium,
  51 +50,Architecture,Use dependency injection,Inject dependencies for testing,Initialize with dependencies,Hard-coded dependencies,init(service: ServiceProtocol),let service = RealService(),Medium,
... ...
.shared/ui-ux-pro-max/data/stacks/vue.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Composition,Use Composition API for new projects,Composition API offers better TypeScript support and logic reuse,<script setup> for components,Options API for new projects,<script setup>,export default { data() },Medium,https://vuejs.org/guide/extras/composition-api-faq.html
  3 +2,Composition,Use script setup syntax,Cleaner syntax with automatic exports,<script setup> with defineProps,setup() function manually,<script setup>,<script> setup() { return {} },Low,https://vuejs.org/api/sfc-script-setup.html
  4 +3,Reactivity,Use ref for primitives,ref() for primitive values that need reactivity,ref() for strings numbers booleans,reactive() for primitives,const count = ref(0),const count = reactive(0),Medium,https://vuejs.org/guide/essentials/reactivity-fundamentals.html
  5 +4,Reactivity,Use reactive for objects,reactive() for complex objects and arrays,reactive() for objects with multiple properties,ref() for complex objects,const state = reactive({ user: null }),const state = ref({ user: null }),Medium,
  6 +5,Reactivity,Access ref values with .value,Remember .value in script unwrap in template,Use .value in script,Forget .value in script,count.value++,count++ (in script),High,
  7 +6,Reactivity,Use computed for derived state,Computed properties cache and update automatically,computed() for derived values,Methods for derived values,const doubled = computed(() => count.value * 2),const doubled = () => count.value * 2,Medium,https://vuejs.org/guide/essentials/computed.html
  8 +7,Reactivity,Use shallowRef for large objects,Avoid deep reactivity for performance,shallowRef for large data structures,ref for large nested objects,const bigData = shallowRef(largeObject),const bigData = ref(largeObject),Medium,https://vuejs.org/api/reactivity-advanced.html#shallowref
  9 +8,Watchers,Use watchEffect for simple cases,Auto-tracks dependencies,watchEffect for simple reactive effects,watch with explicit deps when not needed,watchEffect(() => console.log(count.value)),"watch(count, (val) => console.log(val))",Low,https://vuejs.org/guide/essentials/watchers.html
  10 +9,Watchers,Use watch for specific sources,Explicit control over what to watch,watch with specific refs,watchEffect for complex conditional logic,"watch(userId, fetchUser)",watchEffect with conditionals,Medium,
  11 +10,Watchers,Clean up side effects,Return cleanup function in watchers,Return cleanup in watchEffect,Leave subscriptions open,watchEffect((onCleanup) => { onCleanup(unsub) }),watchEffect without cleanup,High,
  12 +11,Props,Define props with defineProps,Type-safe prop definitions,defineProps with TypeScript,Props without types,defineProps<{ msg: string }>(),defineProps(['msg']),Medium,https://vuejs.org/guide/typescript/composition-api.html#typing-component-props
  13 +12,Props,Use withDefaults for default values,Provide defaults for optional props,withDefaults with defineProps,Defaults in destructuring,"withDefaults(defineProps<Props>(), { count: 0 })",const { count = 0 } = defineProps(),Medium,
  14 +13,Props,Avoid mutating props,Props should be read-only,Emit events to parent for changes,Direct prop mutation,"emit('update:modelValue', newVal)",props.modelValue = newVal,High,
  15 +14,Emits,Define emits with defineEmits,Type-safe event emissions,defineEmits with types,Emit without definition,defineEmits<{ change: [id: number] }>(),"emit('change', id) without define",Medium,https://vuejs.org/guide/typescript/composition-api.html#typing-component-emits
  16 +15,Emits,Use v-model for two-way binding,Simplified parent-child data flow,v-model with modelValue prop,:value + @input manually,"<Child v-model=""value""/>","<Child :value=""value"" @input=""value = $event""/>",Low,https://vuejs.org/guide/components/v-model.html
  17 +16,Lifecycle,Use onMounted for DOM access,DOM is ready in onMounted,onMounted for DOM operations,Access DOM in setup directly,onMounted(() => el.value.focus()),el.value.focus() in setup,High,https://vuejs.org/api/composition-api-lifecycle.html
  18 +17,Lifecycle,Clean up in onUnmounted,Remove listeners and subscriptions,onUnmounted for cleanup,Leave listeners attached,onUnmounted(() => window.removeEventListener()),No cleanup on unmount,High,
  19 +18,Lifecycle,Avoid onBeforeMount for data,Use onMounted or setup for data fetching,Fetch in onMounted or setup,Fetch in onBeforeMount,onMounted(async () => await fetchData()),onBeforeMount(async () => await fetchData()),Low,
  20 +19,Components,Use single-file components,Keep template script style together,.vue files for components,Separate template/script files,Component.vue with all parts,Component.js + Component.html,Low,
  21 +20,Components,Use PascalCase for components,Consistent component naming,PascalCase in imports and templates,kebab-case in script,<MyComponent/>,<my-component/>,Low,https://vuejs.org/style-guide/rules-strongly-recommended.html
  22 +21,Components,Prefer composition over mixins,Composables replace mixins,Composables for shared logic,Mixins for code reuse,const { data } = useApi(),mixins: [apiMixin],Medium,
  23 +22,Composables,Name composables with use prefix,Convention for composable functions,useFetch useAuth useForm,getData or fetchApi,export function useFetch(),export function fetchData(),Medium,https://vuejs.org/guide/reusability/composables.html
  24 +23,Composables,Return refs from composables,Maintain reactivity when destructuring,Return ref values,Return reactive objects that lose reactivity,return { data: ref(null) },return reactive({ data: null }),Medium,
  25 +24,Composables,Accept ref or value params,Use toValue for flexible inputs,toValue() or unref() for params,Only accept ref or only value,const val = toValue(maybeRef),const val = maybeRef.value,Low,https://vuejs.org/api/reactivity-utilities.html#tovalue
  26 +25,Templates,Use v-bind shorthand,Cleaner template syntax,:prop instead of v-bind:prop,Full v-bind syntax,"<div :class=""cls"">","<div v-bind:class=""cls"">",Low,
  27 +26,Templates,Use v-on shorthand,Cleaner event binding,@event instead of v-on:event,Full v-on syntax,"<button @click=""handler"">","<button v-on:click=""handler"">",Low,
  28 +27,Templates,Avoid v-if with v-for,v-if has higher priority causes issues,Wrap in template or computed filter,v-if on same element as v-for,<template v-for><div v-if>,<div v-for v-if>,High,https://vuejs.org/style-guide/rules-essential.html#avoid-v-if-with-v-for
  29 +28,Templates,Use key with v-for,Proper list rendering and updates,Unique key for each item,Index as key for dynamic lists,"v-for=""item in items"" :key=""item.id""","v-for=""(item, i) in items"" :key=""i""",High,
  30 +29,State,Use Pinia for global state,Official state management for Vue 3,Pinia stores for shared state,Vuex for new projects,const store = useCounterStore(),Vuex with mutations,Medium,https://pinia.vuejs.org/
  31 +30,State,Define stores with defineStore,Composition API style stores,Setup stores with defineStore,Options stores for complex state,"defineStore('counter', () => {})","defineStore('counter', { state })",Low,
  32 +31,State,Use storeToRefs for destructuring,Maintain reactivity when destructuring,storeToRefs(store),Direct destructuring,const { count } = storeToRefs(store),const { count } = store,High,https://pinia.vuejs.org/core-concepts/#destructuring-from-a-store
  33 +32,Routing,Use useRouter and useRoute,Composition API router access,useRouter() useRoute() in setup,this.$router this.$route,const router = useRouter(),this.$router.push(),Medium,https://router.vuejs.org/guide/advanced/composition-api.html
  34 +33,Routing,Lazy load route components,Code splitting for routes,() => import() for components,Static imports for all routes,component: () => import('./Page.vue'),component: Page,Medium,https://router.vuejs.org/guide/advanced/lazy-loading.html
  35 +34,Routing,Use navigation guards,Protect routes and handle redirects,beforeEach for auth checks,Check auth in each component,router.beforeEach((to) => {}),Check auth in onMounted,Medium,
  36 +35,Performance,Use v-once for static content,Skip re-renders for static elements,v-once on never-changing content,v-once on dynamic content,<div v-once>{{ staticText }}</div>,<div v-once>{{ dynamicText }}</div>,Low,https://vuejs.org/api/built-in-directives.html#v-once
  37 +36,Performance,Use v-memo for expensive lists,Memoize list items,v-memo with dependency array,Re-render entire list always,"<div v-for v-memo=""[item.id]"">",<div v-for> without memo,Medium,https://vuejs.org/api/built-in-directives.html#v-memo
  38 +37,Performance,Use shallowReactive for flat objects,Avoid deep reactivity overhead,shallowReactive for flat state,reactive for simple objects,shallowReactive({ count: 0 }),reactive({ count: 0 }),Low,
  39 +38,Performance,Use defineAsyncComponent,Lazy load heavy components,defineAsyncComponent for modals dialogs,Import all components eagerly,defineAsyncComponent(() => import()),import HeavyComponent from,Medium,https://vuejs.org/guide/components/async.html
  40 +39,TypeScript,Use generic components,Type-safe reusable components,Generic with defineComponent,Any types in components,"<script setup lang=""ts"" generic=""T"">",<script setup> without types,Medium,https://vuejs.org/guide/typescript/composition-api.html
  41 +40,TypeScript,Type template refs,Proper typing for DOM refs,ref<HTMLInputElement>(null),ref(null) without type,const input = ref<HTMLInputElement>(null),const input = ref(null),Medium,
  42 +41,TypeScript,Use PropType for complex props,Type complex prop types,PropType<User> for object props,Object without type,type: Object as PropType<User>,type: Object,Medium,
  43 +42,Testing,Use Vue Test Utils,Official testing library,mount shallowMount for components,Manual DOM testing,import { mount } from '@vue/test-utils',document.createElement,Medium,https://test-utils.vuejs.org/
  44 +43,Testing,Test component behavior,Focus on inputs and outputs,Test props emit and rendered output,Test internal implementation,expect(wrapper.text()).toContain(),expect(wrapper.vm.internalState),Medium,
  45 +44,Forms,Use v-model modifiers,Built-in input handling,.lazy .number .trim modifiers,Manual input parsing,"<input v-model.number=""age"">","<input v-model=""age""> then parse",Low,https://vuejs.org/guide/essentials/forms.html#modifiers
  46 +45,Forms,Use VeeValidate or FormKit,Form validation libraries,VeeValidate for complex forms,Manual validation logic,useField useForm from vee-validate,Custom validation in each input,Medium,
  47 +46,Accessibility,Use semantic elements,Proper HTML elements in templates,button nav main for purpose,div for everything,<button @click>,<div @click>,High,
  48 +47,Accessibility,Bind aria attributes dynamically,Keep ARIA in sync with state,":aria-expanded=""isOpen""",Static ARIA values,":aria-expanded=""menuOpen""","aria-expanded=""true""",Medium,
  49 +48,SSR,Use Nuxt for SSR,Full-featured SSR framework,Nuxt 3 for SSR apps,Manual SSR setup,npx nuxi init my-app,Custom SSR configuration,Medium,https://nuxt.com/
  50 +49,SSR,Handle hydration mismatches,Client/server content must match,ClientOnly for browser-only content,Different content server/client,<ClientOnly><BrowserWidget/></ClientOnly>,<div>{{ Date.now() }}</div>,High,
... ...
.shared/ui-ux-pro-max/data/styles.csv 0 → 100644
  1 +STT,Style Category,Type,Keywords,Primary Colors,Secondary Colors,Effects & Animation,Best For,Do Not Use For,Light Mode ✓,Dark Mode ✓,Performance,Accessibility,Mobile-Friendly,Conversion-Focused,Framework Compatibility,Era/Origin,Complexity
  2 +1,Minimalism & Swiss Style,General,"Clean, simple, spacious, functional, white space, high contrast, geometric, sans-serif, grid-based, essential","Monochromatic, Black #000000, White #FFFFFF","Neutral (Beige #F5F1E8, Grey #808080, Taupe #B38B6D), Primary accent","Subtle hover (200-250ms), smooth transitions, sharp shadows if any, clear type hierarchy, fast loading","Enterprise apps, dashboards, documentation sites, SaaS platforms, professional tools","Creative portfolios, entertainment, playful brands, artistic experiments",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,◐ Medium,"Tailwind 10/10, Bootstrap 9/10, MUI 9/10",1950s Swiss,Low
  3 +2,Neumorphism,General,"Soft UI, embossed, debossed, convex, concave, light source, subtle depth, rounded (12-16px), monochromatic","Light pastels: Soft Blue #C8E0F4, Soft Pink #F5E0E8, Soft Grey #E8E8E8","Tints/shades (±30%), gradient subtlety, color harmony","Soft box-shadow (multiple: -5px -5px 15px, 5px 5px 15px), smooth press (150ms), inner subtle shadow","Health/wellness apps, meditation platforms, fitness trackers, minimal interaction UIs","Complex apps, critical accessibility, data-heavy dashboards, high-contrast required",✓ Full,◐ Partial,⚡ Good,⚠ Low contrast,✓ Good,◐ Medium,"Tailwind 8/10, CSS-in-JS 9/10",2020s Modern,Medium
  4 +3,Glassmorphism,General,"Frosted glass, transparent, blurred background, layered, vibrant background, light source, depth, multi-layer","Translucent white: rgba(255,255,255,0.1-0.3)","Vibrant: Electric Blue #0080FF, Neon Purple #8B00FF, Vivid Pink #FF1493, Teal #20B2AA","Backdrop blur (10-20px), subtle border (1px solid rgba white 0.2), light reflection, Z-depth","Modern SaaS, financial dashboards, high-end corporate, lifestyle apps, modal overlays, navigation","Low-contrast backgrounds, critical accessibility, performance-limited, dark text on dark",✓ Full,✓ Full,⚠ Good,⚠ Ensure 4.5:1,✓ Good,✓ High,"Tailwind 9/10, MUI 8/10, Chakra 8/10",2020s Modern,Medium
  5 +4,Brutalism,General,"Raw, unpolished, stark, high contrast, plain text, default fonts, visible borders, asymmetric, anti-design","Primary: Red #FF0000, Blue #0000FF, Yellow #FFFF00, Black #000000, White #FFFFFF","Limited: Neon Green #00FF00, Hot Pink #FF00FF, minimal secondary","No smooth transitions (instant), sharp corners (0px), bold typography (700+), visible grid, large blocks","Design portfolios, artistic projects, counter-culture brands, editorial/media sites, tech blogs","Corporate environments, conservative industries, critical accessibility, customer-facing professional",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,◐ Medium,✗ Low,"Tailwind 10/10, Bootstrap 7/10",1950s Brutalist,Low
  6 +5,3D & Hyperrealism,General,"Depth, realistic textures, 3D models, spatial navigation, tactile, skeuomorphic elements, rich detail, immersive","Deep Navy #001F3F, Forest Green #228B22, Burgundy #800020, Gold #FFD700, Silver #C0C0C0","Complex gradients (5-10 stops), realistic lighting, shadow variations (20-40% darker)","WebGL/Three.js 3D, realistic shadows (layers), physics lighting, parallax (3-5 layers), smooth 3D (300-400ms)","Gaming, product showcase, immersive experiences, high-end e-commerce, architectural viz, VR/AR","Low-end mobile, performance-limited, critical accessibility, data tables/forms",◐ Partial,◐ Partial,❌ Poor,⚠ Not accessible,✗ Low,◐ Medium,"Three.js 10/10, R3F 10/10, Babylon.js 10/10",2020s Modern,High
  7 +6,Vibrant & Block-based,General,"Bold, energetic, playful, block layout, geometric shapes, high color contrast, duotone, modern, energetic","Neon Green #39FF14, Electric Purple #BF00FF, Vivid Pink #FF1493, Bright Cyan #00FFFF, Sunburst #FFAA00","Complementary: Orange #FF7F00, Shocking Pink #FF006E, Lime #CCFF00, triadic schemes","Large sections (48px+ gaps), animated patterns, bold hover (color shift), scroll-snap, large type (32px+), 200-300ms","Startups, creative agencies, gaming, social media, youth-focused, entertainment, consumer","Financial institutions, healthcare, formal business, government, conservative, elderly",✓ Full,✓ Full,⚡ Good,◐ Ensure WCAG,✓ High,✓ High,"Tailwind 10/10, Chakra 9/10, Styled 9/10",2020s Modern,Medium
  8 +7,Dark Mode (OLED),General,"Dark theme, low light, high contrast, deep black, midnight blue, eye-friendly, OLED, night mode, power efficient","Deep Black #000000, Dark Grey #121212, Midnight Blue #0A0E27","Vibrant accents: Neon Green #39FF14, Electric Blue #0080FF, Gold #FFD700, Plasma Purple #BF00FF","Minimal glow (text-shadow: 0 0 10px), dark-to-light transitions, low white emission, high readability, visible focus","Night-mode apps, coding platforms, entertainment, eye-strain prevention, OLED devices, low-light","Print-first content, high-brightness outdoor, color-accuracy-critical",✗ No,✓ Only,⚡ Excellent,✓ WCAG AAA,✓ High,◐ Low,"Tailwind 10/10, MUI 10/10, Chakra 10/10",2020s Modern,Low
  9 +8,Accessible & Ethical,General,"High contrast, large text (16px+), keyboard navigation, screen reader friendly, WCAG compliant, focus state, semantic","WCAG AA/AAA (4.5:1 min), simple primary, clear secondary, high luminosity (7:1+)","Symbol-based colors (not color-only), supporting patterns, inclusive combinations","Clear focus rings (3-4px), ARIA labels, skip links, responsive design, reduced motion, 44x44px touch targets","Government, healthcare, education, inclusive products, large audience, legal compliance, public",None - accessibility universal,✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"All frameworks 10/10",Universal,Low
  10 +9,Claymorphism,General,"Soft 3D, chunky, playful, toy-like, bubbly, thick borders (3-4px), double shadows, rounded (16-24px)","Pastel: Soft Peach #FDBCB4, Baby Blue #ADD8E6, Mint #98FF98, Lilac #E6E6FA, light BG","Soft gradients (pastel-to-pastel), light/dark variations (20-30%), gradient subtle","Inner+outer shadows (subtle, no hard lines), soft press (200ms ease-out), fluffy elements, smooth transitions","Educational apps, children's apps, SaaS platforms, creative tools, fun-focused, onboarding, casual games","Formal corporate, professional services, data-critical, serious/medical, legal apps, finance",✓ Full,◐ Partial,⚡ Good,⚠ Ensure 4.5:1,✓ High,✓ High,"Tailwind 9/10, CSS-in-JS 9/10",2020s Modern,Medium
  11 +10,Aurora UI,General,"Vibrant gradients, smooth blend, Northern Lights effect, mesh gradient, luminous, atmospheric, abstract","Complementary: Blue-Orange, Purple-Yellow, Electric Blue #0080FF, Magenta #FF1493, Cyan #00FFFF","Smooth transitions (Blue→Purple→Pink→Teal), iridescent effects, blend modes (screen, multiply)","Large flowing CSS/SVG gradients, subtle 8-12s animations, depth via color layering, smooth morph","Modern SaaS, creative agencies, branding, music platforms, lifestyle, premium products, hero sections","Data-heavy dashboards, critical accessibility, content-heavy where distraction issues",✓ Full,✓ Full,⚠ Good,⚠ Text contrast,✓ Good,✓ High,"Tailwind 9/10, CSS-in-JS 10/10",2020s Modern,Medium
  12 +11,Retro-Futurism,General,"Vintage sci-fi, 80s aesthetic, neon glow, geometric patterns, CRT scanlines, pixel art, cyberpunk, synthwave","Neon Blue #0080FF, Hot Pink #FF006E, Cyan #00FFFF, Deep Black #1A1A2E, Purple #5D34D0","Metallic Silver #C0C0C0, Gold #FFD700, duotone, 80s Pink #FF10F0, neon accents","CRT scanlines (::before overlay), neon glow (text-shadow+box-shadow), glitch effects (skew/offset keyframes)","Gaming, entertainment, music platforms, tech brands, artistic projects, nostalgic, cyberpunk","Conservative industries, critical accessibility, professional/corporate, elderly, legal/finance",✓ Full,✓ Dark focused,⚠ Moderate,⚠ High contrast/strain,◐ Medium,◐ Medium,"Tailwind 8/10, CSS-in-JS 9/10",1980s Retro,Medium
  13 +12,Flat Design,General,"2D, minimalist, bold colors, no shadows, clean lines, simple shapes, typography-focused, modern, icon-heavy","Solid bright: Red, Orange, Blue, Green, limited palette (4-6 max)","Complementary colors, muted secondaries, high saturation, clean accents","No gradients/shadows, simple hover (color/opacity shift), fast loading, clean transitions (150-200ms ease), minimal icons","Web apps, mobile apps, cross-platform, startup MVPs, user-friendly, SaaS, dashboards, corporate","Complex 3D, premium/luxury, artistic portfolios, immersive experiences, high-detail",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"Tailwind 10/10, Bootstrap 10/10, MUI 9/10",2010s Modern,Low
  14 +13,Skeuomorphism,General,"Realistic, texture, depth, 3D appearance, real-world metaphors, shadows, gradients, tactile, detailed, material","Rich realistic: wood, leather, metal colors, detailed gradients (8-12 stops), metallic effects","Realistic lighting gradients, shadow variations (30-50% darker), texture overlays, material colors","Realistic shadows (layers), depth (perspective), texture details (noise, grain), realistic animations (300-500ms)","Legacy apps, gaming, immersive storytelling, premium products, luxury, realistic simulations, education","Modern enterprise, critical accessibility, low-performance, web (use Flat/Modern)",◐ Partial,◐ Partial,❌ Poor,⚠ Textures reduce readability,✗ Low,◐ Medium,"CSS-in-JS 7/10, Custom 8/10",2007-2012 iOS,High
  15 +14,Liquid Glass,General,"Flowing glass, morphing, smooth transitions, fluid effects, translucent, animated blur, iridescent, chromatic aberration","Vibrant iridescent (rainbow spectrum), translucent base with opacity shifts, gradient fluidity","Chromatic aberration (Red-Cyan), iridescent oil-spill, fluid gradient blends, holographic effects","Morphing elements (SVG/CSS), fluid animations (400-600ms curves), dynamic blur (backdrop-filter), color transitions","Premium SaaS, high-end e-commerce, creative platforms, branding experiences, luxury portfolios","Performance-limited, critical accessibility, complex data, budget projects",✓ Full,✓ Full,⚠ Moderate-Poor,⚠ Text contrast,◐ Medium,✓ High,"Framer Motion 10/10, GSAP 10/10",2020s Modern,High
  16 +15,Motion-Driven,General,"Animation-heavy, microinteractions, smooth transitions, scroll effects, parallax, entrance anim, page transitions","Bold colors emphasize movement, high contrast animated, dynamic gradients, accent action colors","Transitional states, success (Green #22C55E), error (Red #EF4444), neutral feedback","Scroll anim (Intersection Observer), hover (300-400ms), entrance, parallax (3-5 layers), page transitions","Portfolio sites, storytelling platforms, interactive experiences, entertainment apps, creative, SaaS","Data dashboards, critical accessibility, low-power devices, content-heavy, motion-sensitive",✓ Full,✓ Full,⚠ Good,⚠ Prefers-reduced-motion,✓ Good,✓ High,"GSAP 10/10, Framer Motion 10/10",2020s Modern,High
  17 +16,Micro-interactions,General,"Small animations, gesture-based, tactile feedback, subtle animations, contextual interactions, responsive","Subtle color shifts (10-20%), feedback: Green #22C55E, Red #EF4444, Amber #F59E0B","Accent feedback, neutral supporting, clear action indicators","Small hover (50-100ms), loading spinners, success/error state anim, gesture-triggered (swipe/pinch), haptic","Mobile apps, touchscreen UIs, productivity tools, user-friendly, consumer apps, interactive components","Desktop-only, critical performance, accessibility-first (alternatives needed)",✓ Full,✓ Full,⚡ Excellent,✓ Good,✓ High,✓ High,"Framer Motion 10/10, React Spring 9/10",2020s Modern,Medium
  18 +17,Inclusive Design,General,"Accessible, color-blind friendly, high contrast, haptic feedback, voice interaction, screen reader, WCAG AAA, universal","WCAG AAA (7:1+ contrast), avoid red-green only, symbol-based indicators, high contrast primary","Supporting patterns (stripes, dots, hatch), symbols, combinations, clear non-color indicators","Haptic feedback (vibration), voice guidance, focus indicators (4px+ ring), motion options, alt content, semantic","Public services, education, healthcare, finance, government, accessible consumer, inclusive",None - accessibility universal,✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"All frameworks 10/10",Universal,Low
  19 +18,Zero Interface,General,"Minimal visible UI, voice-first, gesture-based, AI-driven, invisible controls, predictive, context-aware, ambient","Neutral backgrounds: Soft white #FAFAFA, light grey #F0F0F0, warm off-white #F5F1E8","Subtle feedback: light green, light red, minimal UI elements, soft accents","Voice recognition UI, gesture detection, AI predictions (smooth reveal), progressive disclosure, smart suggestions","Voice assistants, AI platforms, future-forward UX, smart home, contextual computing, ambient experiences","Complex workflows, data-entry heavy, traditional systems, legacy support, explicit control",✓ Full,✓ Full,⚡ Excellent,✓ Excellent,✓ High,✓ High,"Tailwind 10/10, Custom 10/10",2020s AI-Era,Low
  20 +19,Soft UI Evolution,General,"Evolved soft UI, better contrast, modern aesthetics, subtle depth, accessibility-focused, improved shadows, hybrid","Improved contrast pastels: Soft Blue #87CEEB, Soft Pink #FFB6C1, Soft Green #90EE90, better hierarchy","Better combinations, accessible secondary, supporting with improved contrast, modern accents","Improved shadows (softer than flat, clearer than neumorphism), modern (200-300ms), focus visible, WCAG AA/AAA","Modern enterprise apps, SaaS platforms, health/wellness, modern business tools, professional, hybrid","Extreme minimalism, critical performance, systems without modern OS",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA+,✓ High,✓ High,"Tailwind 9/10, MUI 9/10, Chakra 9/10",2020s Modern,Medium
  21 +20,Hero-Centric Design,Landing Page,"Large hero section, compelling headline, high-contrast CTA, product showcase, value proposition, hero image/video, dramatic visual","Brand primary color, white/light backgrounds for contrast, accent color for CTA","Supporting colors for secondary CTAs, accent highlights, trust elements (testimonials, logos)","Smooth scroll reveal, fade-in animations on hero, subtle background parallax, CTA glow/pulse effect","SaaS landing pages, product launches, service landing pages, B2B platforms, tech companies","Complex navigation, multi-page experiences, data-heavy applications",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,✓ Full,✓ Very High,"Tailwind 10/10, Bootstrap 9/10",2020s Modern,Medium
  22 +21,Conversion-Optimized,Landing Page,"Form-focused, minimalist design, single CTA focus, high contrast, urgency elements, trust signals, social proof, clear value","Primary brand color, high-contrast white/light backgrounds, warning/urgency colors for time-limited offers","Secondary CTA color (muted), trust element colors (testimonial highlights), accent for key benefits","Hover states on CTA (color shift, slight scale), form field focus animations, loading spinner, success feedback","E-commerce product pages, free trial signups, lead generation, SaaS pricing pages, limited-time offers","Complex feature explanations, multi-product showcases, technical documentation",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ Full (mobile-optimized),✓ Very High
  23 +22,Feature-Rich Showcase,Landing Page,"Multiple feature sections, grid layout, benefit cards, visual feature demonstrations, interactive elements, problem-solution pairs","Primary brand, bright secondary colors for feature cards, contrasting accent for CTAs","Supporting colors for: benefits (green), problems (red/orange), features (blue/purple), social proof (neutral)","Card hover effects (lift/scale), icon animations on scroll, feature toggle animations, smooth section transitions","Enterprise SaaS, software tools landing pages, platform services, complex product explanations, B2B products","Simple product pages, early-stage startups with few features, entertainment landing pages",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,✓ Good,✓ High
  24 +23,Minimal & Direct,Landing Page,"Minimal text, white space heavy, single column layout, direct messaging, clean typography, visual-centric, fast-loading","Monochromatic primary, white background, single accent color for CTA, black/dark grey text","Minimal secondary colors, reserved for critical CTAs only, neutral supporting elements","Very subtle hover effects, minimal animations, fast page load (no heavy animations), smooth scroll","Simple service landing pages, indie products, consulting services, micro SaaS, freelancer portfolios","Feature-heavy products, complex explanations, multi-product showcases",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ Full,✓ High
  25 +24,Social Proof-Focused,Landing Page,"Testimonials prominent, client logos displayed, case studies sections, reviews/ratings, user avatars, success metrics, credibility markers","Primary brand, trust colors (blue), success/growth colors (green), neutral backgrounds","Testimonial highlight colors, logo grid backgrounds (light grey), badge/achievement colors","Testimonial carousel animations, logo grid fade-in, stat counter animations (number count-up), review star ratings","B2B SaaS, professional services, premium products, e-commerce conversion pages, established brands","Startup MVPs, products without users, niche/experimental products",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,✓ Full,✓ High
  26 +25,Interactive Product Demo,Landing Page,"Embedded product mockup/video, interactive elements, product walkthrough, step-by-step guides, hover-to-reveal features, embedded demos","Primary brand, interface colors matching product, demo highlight colors for interactive elements","Product UI colors, tutorial step colors (numbered progression), hover state indicators","Product animation playback, step progression animations, hover reveal effects, smooth zoom on interaction","SaaS platforms, tool/software products, productivity apps landing pages, developer tools, productivity software","Simple services, consulting, non-digital products, complexity-averse audiences",✓ Full,✓ Full,⚠ Good (video/interactive),✓ WCAG AA,✓ Good,✓ Very High
  27 +26,Trust & Authority,Landing Page,"Certificates/badges displayed, expert credentials, case studies with metrics, before/after comparisons, industry recognition, security badges","Professional colors (blue/grey), trust colors, certification badge colors (gold/silver accents)","Certificate highlight colors, metric showcase colors, comparison highlight (success green)","Badge hover effects, metric pulse animations, certificate carousel, smooth stat reveal","Healthcare/medical landing pages, financial services, enterprise software, premium/luxury products, legal services","Casual products, entertainment, viral/social-first products",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ Full,✓ High
  28 +27,Storytelling-Driven,Landing Page,"Narrative flow, visual story progression, section transitions, consistent character/brand voice, emotional messaging, journey visualization","Brand primary, warm/emotional colors, varied accent colors per story section, high visual variety","Story section color coding, emotional state colors (calm, excitement, success), transitional gradients","Section-to-section animations, scroll-triggered reveals, character/icon animations, morphing transitions, parallax narrative","Brand/startup stories, mission-driven products, premium/lifestyle brands, documentary-style products, educational","Technical/complex products (unless narrative-driven), traditional enterprise software",✓ Full,✓ Full,⚠ Moderate (animations),✓ WCAG AA,✓ Good,✓ High
  29 +28,Data-Dense Dashboard,BI/Analytics,"Multiple charts/widgets, data tables, KPI cards, minimal padding, grid layout, space-efficient, maximum data visibility","Neutral primary (light grey/white #F5F5F5), data colors (blue/green/red), dark text #333333","Chart colors: success (green #22C55E), warning (amber #F59E0B), alert (red #EF4444), neutral (grey)","Hover tooltips, chart zoom on click, row highlighting on hover, smooth filter animations, data loading spinners","Business intelligence dashboards, financial analytics, enterprise reporting, operational dashboards, data warehousing","Marketing dashboards, consumer-facing analytics, simple reporting",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,◐ Medium,✗ Not applicable
  30 +29,Heat Map & Heatmap Style,BI/Analytics,"Color-coded grid/matrix, data intensity visualization, geographical heat maps, correlation matrices, cell-based representation, gradient coloring","Gradient scale: Cool (blue #0080FF) to hot (red #FF0000), neutral middle (white/yellow)","Support gradients: Light (cool blue) to dark (warm red), divergent for positive/negative data, monochromatic options","Color gradient transitions on data change, cell highlighting on hover, tooltip reveal on click, smooth color animation","Geographical analysis, performance matrices, correlation analysis, user behavior heatmaps, temperature/intensity data","Linear data representation, categorical comparisons (use bar charts), small datasets",✓ Full,✓ Full (with adjustments),⚡ Excellent,⚠ Colorblind considerations,◐ Medium,✗ Not applicable
  31 +30,Executive Dashboard,BI/Analytics,"High-level KPIs, large key metrics, minimal detail, summary view, trend indicators, at-a-glance insights, executive summary","Brand colors, professional palette (blue/grey/white), accent for KPIs, red for alerts/concerns","KPI highlight colors: positive (green), negative (red), neutral (grey), trend arrow colors","KPI value animations (count-up), trend arrow direction animations, metric card hover lift, alert pulse effect","C-suite dashboards, business summary reports, decision-maker dashboards, strategic planning views","Detailed analyst dashboards, technical deep-dives, operational monitoring",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✗ Low (not mobile-optimized),✗ Not applicable
  32 +31,Real-Time Monitoring,BI/Analytics,"Live data updates, status indicators, alert notifications, streaming data visualization, active monitoring, streaming charts","Alert colors: critical (red #FF0000), warning (orange #FFA500), normal (green #22C55E), updating (blue animation)","Status indicator colors, chart line colors varying by metric, streaming data highlight colors","Real-time chart animations, alert pulse/glow, status indicator blink animation, smooth data stream updates, loading effect","System monitoring dashboards, DevOps dashboards, real-time analytics, stock market dashboards, live event tracking","Historical analysis, long-term trend reports, archived data dashboards",✓ Full,✓ Full,⚡ Good (real-time load),✓ WCAG AA,◐ Medium,✗ Not applicable
  33 +32,Drill-Down Analytics,BI/Analytics,"Hierarchical data exploration, expandable sections, interactive drill-down paths, summary-to-detail flow, context preservation","Primary brand, breadcrumb colors, drill-level indicator colors, hierarchy depth colors","Drill-down path indicator colors, level-specific colors, highlight colors for selected level, transition colors","Drill-down expand animations, breadcrumb click transitions, smooth detail reveal, level change smooth, data reload animation","Sales analytics, product analytics, funnel analysis, multi-dimensional data exploration, business intelligence","Simple linear data, single-metric dashboards, streaming real-time dashboards",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,◐ Medium,✗ Not applicable
  34 +33,Comparative Analysis Dashboard,BI/Analytics,"Side-by-side comparisons, period-over-period metrics, A/B test results, regional comparisons, performance benchmarks","Comparison colors: primary (blue), comparison (orange/purple), delta indicator (green/red)","Winning metric color (green), losing metric color (red), neutral comparison (grey), benchmark colors","Comparison bar animations (grow to value), delta indicator animations (direction arrows), highlight on compare","Period-over-period reporting, A/B test dashboards, market comparison, competitive analysis, regional performance","Single metric dashboards, future projections (use forecasting), real-time only (no historical)",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,◐ Medium,✗ Not applicable
  35 +34,Predictive Analytics,BI/Analytics,"Forecast lines, confidence intervals, trend projections, scenario modeling, AI-driven insights, anomaly detection visualization","Forecast line color (distinct from actual), confidence interval shading, anomaly highlight (red alert), trend colors","High confidence (dark color), low confidence (light color), anomaly colors (red/orange), normal trend (green/blue)","Forecast line animation on draw, confidence band fade-in, anomaly pulse alert, smoothing function animations","Forecasting dashboards, anomaly detection systems, trend prediction dashboards, AI-powered analytics, budget planning","Historical-only dashboards, simple reporting, real-time operational dashboards",✓ Full,✓ Full,⚠ Good (computation),✓ WCAG AA,◐ Medium,✗ Not applicable
  36 +35,User Behavior Analytics,BI/Analytics,"Funnel visualization, user flow diagrams, conversion tracking, engagement metrics, user journey mapping, cohort analysis","Funnel stage colors: high engagement (green), drop-off (red), conversion (blue), user flow arrows (grey)","Stage completion colors (success), abandonment colors (warning), engagement levels (gradient), cohort colors","Funnel animation (fill-down), flow diagram animations (connection draw), conversion pulse, engagement bar fill","Conversion funnel analysis, user journey tracking, engagement analytics, cohort analysis, retention tracking","Real-time operational metrics, technical system monitoring, financial transactions",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,✓ Good,✗ Not applicable
  37 +36,Financial Dashboard,BI/Analytics,"Revenue metrics, profit/loss visualization, budget tracking, financial ratios, portfolio performance, cash flow, audit trail","Financial colors: profit (green #22C55E), loss (red #EF4444), neutral (grey), trust (dark blue #003366)","Revenue highlight (green), expenses (red), budget variance (orange/red), balance (grey), accuracy (blue)","Number animations (count-up), trend direction indicators, percentage change animations, profit/loss color transitions","Financial reporting, accounting dashboards, portfolio tracking, budget monitoring, banking analytics","Simple business dashboards, entertainment/social metrics, non-financial data",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✗ Low,✗ Not applicable
  38 +37,Sales Intelligence Dashboard,BI/Analytics,"Deal pipeline, sales metrics, territory performance, sales rep leaderboard, win-loss analysis, quota tracking, forecast accuracy","Sales colors: won (green), lost (red), in-progress (blue), blocked (orange), quota met (gold), quota missed (grey)","Pipeline stage colors, rep performance colors, quota achievement colors, forecast accuracy colors","Deal movement animations, metric updates, leaderboard ranking changes, gauge needle movements, status change highlights","CRM dashboards, sales management, opportunity tracking, performance management, quota planning","Marketing analytics, customer support metrics, HR dashboards",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,◐ Medium,✗ Not applicable,"Recharts 9/10, Chart.js 9/10",2020s Modern,Medium
  39 +38,Neubrutalism,General,"Bold borders, black outlines, primary colors, thick shadows, no gradients, flat colors, 45° shadows, playful, Gen Z","#FFEB3B (Yellow), #FF5252 (Red), #2196F3 (Blue), #000000 (Black borders)","Limited accent colors, high contrast combinations, no gradients allowed","box-shadow: 4px 4px 0 #000, border: 3px solid #000, no gradients, sharp corners (0px), bold typography","Gen Z brands, startups, creative agencies, Figma-style apps, Notion-style interfaces, tech blogs","Luxury brands, finance, healthcare, conservative industries (too playful)",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"Tailwind 10/10, Bootstrap 8/10",2020s Modern,Low
  40 +39,Bento Box Grid,General,"Modular cards, asymmetric grid, varied sizes, Apple-style, dashboard tiles, negative space, clean hierarchy, cards","Neutral base + brand accent, #FFFFFF, #F5F5F5, brand primary","Subtle gradients, shadow variations, accent highlights for interactive cards","grid-template with varied spans, rounded-xl (16px), subtle shadows, hover scale (1.02), smooth transitions","Dashboards, product pages, portfolios, Apple-style marketing, feature showcases, SaaS","Dense data tables, text-heavy content, real-time monitoring",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"Tailwind 10/10, CSS Grid 10/10",2020s Apple,Low
  41 +40,Y2K Aesthetic,General,"Neon pink, chrome, metallic, bubblegum, iridescent, glossy, retro-futurism, 2000s, futuristic nostalgia","#FF69B4 (Hot Pink), #00FFFF (Cyan), #C0C0C0 (Silver), #9400D3 (Purple)","Metallic gradients, glossy overlays, iridescent effects, chrome textures","linear-gradient metallic, glossy buttons, 3D chrome effects, glow animations, bubble shapes","Fashion brands, music platforms, Gen Z brands, nostalgia marketing, entertainment, youth-focused","B2B enterprise, healthcare, finance, conservative industries, elderly users",✓ Full,◐ Partial,⚠ Good,⚠ Check contrast,✓ Good,✓ High,"Tailwind 8/10, CSS-in-JS 9/10",Y2K 2000s,Medium
  42 +41,Cyberpunk UI,General,"Neon, dark mode, terminal, HUD, sci-fi, glitch, dystopian, futuristic, matrix, tech noir","#00FF00 (Matrix Green), #FF00FF (Magenta), #00FFFF (Cyan), #0D0D0D (Dark)","Neon gradients, scanline overlays, glitch colors, terminal green accents","Neon glow (text-shadow), glitch animations (skew/offset), scanlines (::before overlay), terminal fonts","Gaming platforms, tech products, crypto apps, sci-fi applications, developer tools, entertainment","Corporate enterprise, healthcare, family apps, conservative brands, elderly users",✗ No,✓ Only,⚠ Moderate,⚠ Limited (dark+neon),◐ Medium,◐ Medium,"Tailwind 8/10, Custom CSS 10/10",2020s Cyberpunk,Medium
  43 +42,Organic Biophilic,General,"Nature, organic shapes, green, sustainable, rounded, flowing, wellness, earthy, natural textures","#228B22 (Forest Green), #8B4513 (Earth Brown), #87CEEB (Sky Blue), #F5F5DC (Beige)","Natural gradients, earth tones, sky blues, organic textures, wood/stone colors","Rounded corners (16-24px), organic curves (border-radius variations), natural shadows, flowing SVG shapes","Wellness apps, sustainability brands, eco products, health apps, meditation, organic food brands","Tech-focused products, gaming, industrial, urban brands",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"Tailwind 10/10, CSS 10/10",2020s Sustainable,Low
  44 +43,AI-Native UI,General,"Chatbot, conversational, voice, assistant, agentic, ambient, minimal chrome, streaming text, AI interactions","Neutral + single accent, #6366F1 (AI Purple), #10B981 (Success), #F5F5F5 (Background)","Status indicators, streaming highlights, context card colors, subtle accent variations","Typing indicators (3-dot pulse), streaming text animations, pulse animations, context cards, smooth reveals","AI products, chatbots, voice assistants, copilots, AI-powered tools, conversational interfaces","Traditional forms, data-heavy dashboards, print-first content",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"Tailwind 10/10, React 10/10",2020s AI-Era,Low
  45 +44,Memphis Design,General,"80s, geometric, playful, postmodern, shapes, patterns, squiggles, triangles, neon, abstract, bold","#FF71CE (Hot Pink), #FFCE5C (Yellow), #86CCCA (Teal), #6A7BB4 (Blue Purple)","Complementary geometric colors, pattern fills, contrasting accent shapes","transform: rotate(), clip-path: polygon(), mix-blend-mode, repeating patterns, bold shapes","Creative agencies, music sites, youth brands, event promotion, artistic portfolios, entertainment","Corporate finance, healthcare, legal, elderly users, conservative brands",✓ Full,✓ Full,⚡ Excellent,⚠ Check contrast,✓ Good,◐ Medium,"Tailwind 9/10, CSS 10/10",1980s Postmodern,Medium
  46 +45,Vaporwave,General,"Synthwave, retro-futuristic, 80s-90s, neon, glitch, nostalgic, sunset gradient, dreamy, aesthetic","#FF71CE (Pink), #01CDFE (Cyan), #05FFA1 (Mint), #B967FF (Purple)","Sunset gradients, glitch overlays, VHS effects, neon accents, pastel variations","text-shadow glow, linear-gradient, filter: hue-rotate(), glitch animations, retro scan lines","Music platforms, gaming, creative portfolios, tech startups, entertainment, artistic projects","Business apps, e-commerce, education, healthcare, enterprise software",✓ Full,✓ Dark focused,⚠ Moderate,⚠ Poor (motion),◐ Medium,◐ Medium,"Tailwind 8/10, CSS-in-JS 9/10",1980s-90s Retro,Medium
  47 +46,Dimensional Layering,General,"Depth, overlapping, z-index, layers, 3D, shadows, elevation, floating, cards, spatial hierarchy","Neutral base (#FFFFFF, #F5F5F5, #E0E0E0) + brand accent for elevated elements","Shadow variations (sm/md/lg/xl), elevation colors, highlight colors for top layers","z-index stacking, box-shadow elevation (4 levels), transform: translateZ(), backdrop-filter, parallax","Dashboards, card layouts, modals, navigation, product showcases, SaaS interfaces","Print-style layouts, simple blogs, low-end devices, flat design requirements",✓ Full,✓ Full,⚠ Good,⚠ Moderate (SR issues),✓ Good,✓ High,"Tailwind 10/10, MUI 10/10, Chakra 10/10",2020s Modern,Medium
  48 +47,Exaggerated Minimalism,General,"Bold minimalism, oversized typography, high contrast, negative space, loud minimal, statement design","#000000 (Black), #FFFFFF (White), single vibrant accent only","Minimal - single accent color, no secondary colors, extreme restraint","font-size: clamp(3rem 10vw 12rem), font-weight: 900, letter-spacing: -0.05em, massive whitespace","Fashion, architecture, portfolios, agency landing pages, luxury brands, editorial","E-commerce catalogs, dashboards, forms, data-heavy, elderly users, complex apps",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"Tailwind 10/10, Typography.js 10/10",2020s Modern,Low
  49 +48,Kinetic Typography,General,"Motion text, animated type, moving letters, dynamic, typing effect, morphing, scroll-triggered text","Flexible - high contrast recommended, bold colors for emphasis, animation-friendly palette","Accent colors for emphasis, transition colors, gradient text fills","@keyframes text animation, typing effect, background-clip: text, GSAP ScrollTrigger, split text","Hero sections, marketing sites, video platforms, storytelling, creative portfolios, landing pages","Long-form content, accessibility-critical, data interfaces, forms, elderly users",✓ Full,✓ Full,⚠ Moderate,❌ Poor (motion),✓ Good,✓ Very High,"GSAP 10/10, Framer Motion 10/10",2020s Modern,High
  50 +49,Parallax Storytelling,General,"Scroll-driven, narrative, layered scrolling, immersive, progressive disclosure, cinematic, scroll-triggered","Story-dependent, often gradients and natural colors, section-specific palettes","Section transition colors, depth layer colors, narrative mood colors","transform: translateY(scroll), position: fixed/sticky, perspective: 1px, scroll-triggered animations","Brand storytelling, product launches, case studies, portfolios, annual reports, marketing campaigns","E-commerce, dashboards, mobile-first, SEO-critical, accessibility-required",✓ Full,✓ Full,❌ Poor,❌ Poor (motion),✗ Low,✓ High,"GSAP ScrollTrigger 10/10, Locomotive Scroll 10/10",2020s Modern,High
  51 +50,Swiss Modernism 2.0,General,"Grid system, Helvetica, modular, asymmetric, international style, rational, clean, mathematical spacing","#000000, #FFFFFF, #F5F5F5, single vibrant accent only","Minimal secondary, accent for emphasis only, no gradients","display: grid, grid-template-columns: repeat(12 1fr), gap: 1rem, mathematical ratios, clear hierarchy","Corporate sites, architecture, editorial, SaaS, museums, professional services, documentation","Playful brands, children's sites, entertainment, gaming, emotional storytelling",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"Tailwind 10/10, Bootstrap 9/10, Foundation 10/10",1950s Swiss + 2020s,Low
  52 +51,HUD / Sci-Fi FUI,General,"Futuristic, technical, wireframe, neon, data, transparency, iron man, sci-fi, interface","Neon Cyan #00FFFF, Holographic Blue #0080FF, Alert Red #FF0000","Transparent Black, Grid Lines #333333","Glow effects, scanning animations, ticker text, blinking markers, fine line drawing","Sci-fi games, space tech, cybersecurity, movie props, immersive dashboards","Standard corporate, reading heavy content, accessible public services",✓ Low,✓ Full,⚠ Moderate (renders),⚠ Poor (thin lines),◐ Medium,✗ Low,"React 9/10, Canvas 10/10",2010s Sci-Fi,High
  53 +52,Pixel Art,General,"Retro, 8-bit, 16-bit, gaming, blocky, nostalgic, pixelated, arcade","Primary colors (NES Palette), brights, limited palette","Black outlines, shading via dithering or block colors","Frame-by-frame sprite animation, blinking cursor, instant transitions, marquee text","Indie games, retro tools, creative portfolios, nostalgia marketing, Web3/NFT","Professional corporate, modern SaaS, high-res photography sites",✓ Full,✓ Full,⚡ Excellent,✓ Good (if contrast ok),✓ High,◐ Medium,"CSS (box-shadow) 8/10, Canvas 10/10",1980s Arcade,Medium
  54 +53,Bento Grids,General,"Apple-style, modular, cards, organized, clean, hierarchy, grid, rounded, soft","Off-white #F5F5F7, Clean White #FFFFFF, Text #1D1D1F","Subtle accents, soft shadows, blurred backdrops","Hover scale (1.02), soft shadow expansion, smooth layout shifts, content reveal","Product features, dashboards, personal sites, marketing summaries, galleries","Long-form reading, data tables, complex forms",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"CSS Grid 10/10, Tailwind 10/10",2020s Apple/Linear,Low
  55 +54,Neubrutalism,General,"Bold, ugly-cute, raw, high contrast, flat, hard shadows, distinct, playful, loud","Pop Yellow #FFDE59, Bright Red #FF5757, Black #000000","Lavender #CBA6F7, Mint #76E0C2","Hard hover shifts (4px), marquee scrolling, jitter animations, bold borders","Design tools, creative agencies, Gen Z brands, personal blogs, gumroad-style","Banking, legal, healthcare, serious enterprise, elderly users",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"Tailwind 10/10, Plain CSS 10/10",2020s Modern Retro,Low
  56 +55,Spatial UI (VisionOS),General,"Glass, depth, immersion, spatial, translucent, gaze, gesture, apple, vision-pro","Frosted Glass #FFFFFF (15-30% opacity), System White","Vibrant system colors for active states, deep shadows for depth","Parallax depth, dynamic lighting response, gaze-hover effects, smooth scale on focus","Spatial computing apps, VR/AR interfaces, immersive media, futuristic dashboards","Text-heavy documents, high-contrast requirements, non-3D capable devices",✓ Full,✓ Full,⚠ Moderate (blur cost),⚠ Contrast risks,✓ High (if adapted),✓ High,"SwiftUI, React (Three.js/Fiber)",2024 Spatial Era,High
  57 +56,E-Ink / Paper,General,"Paper-like, matte, high contrast, texture, reading, calm, slow tech, monochrome","Off-White #FDFBF7, Paper White #F5F5F5, Ink Black #1A1A1A","Pencil Grey #4A4A4A, Highlighter Yellow #FFFF00 (accent)","No motion blur, distinct page turns, grain/noise texture, sharp transitions (no fade)","Reading apps, digital newspapers, minimal journals, distraction-free writing, slow-living brands","Gaming, video platforms, high-energy marketing, dark mode dependent apps",✓ Full,✗ Low (inverted only),⚡ Excellent,✓ WCAG AAA,✓ High,✓ Medium,"Tailwind 10/10, CSS 10/10",2020s Digital Well-being,Low
  58 +57,Gen Z Chaos / Maximalism,General,"Chaos, clutter, stickers, raw, collage, mixed media, loud, internet culture, ironic","Clashing Brights: #FF00FF, #00FF00, #FFFF00, #0000FF","Gradients, rainbow, glitch, noise, heavily saturated mix","Marquee scrolls, jitter, sticker layering, GIF overload, random placement, drag-and-drop","Gen Z lifestyle brands, music artists, creative portfolios, viral marketing, fashion","Corporate, government, healthcare, banking, serious tools",✓ Full,✓ Full,⚠ Poor (heavy assets),❌ Poor,◐ Medium,✓ High (Viral),CSS-in-JS 8/10,2023+ Internet Core,High
  59 +58,Biomimetic / Organic 2.0,General,"Nature-inspired, cellular, fluid, breathing, generative, algorithms, life-like","Cellular Pink #FF9999, Chlorophyll Green #00FF41, Bioluminescent Blue","Deep Ocean #001E3C, Coral #FF7F50, Organic gradients","Breathing animations, fluid morphing, generative growth, physics-based movement","Sustainability tech, biotech, advanced health, meditation, generative art platforms","Standard SaaS, data grids, strict corporate, accounting",✓ Full,✓ Full,⚠ Moderate,✓ Good,✓ Good,✓ High,"Canvas 10/10, WebGL 10/10",2024+ Generative,High
0 60 \ No newline at end of file
... ...
.shared/ui-ux-pro-max/data/typography.csv 0 → 100644
  1 +STT,Font Pairing Name,Category,Heading Font,Body Font,Mood/Style Keywords,Best For,Google Fonts URL,CSS Import,Tailwind Config,Notes
  2 +1,Classic Elegant,"Serif + Sans",Playfair Display,Inter,"elegant, luxury, sophisticated, timeless, premium, editorial","Luxury brands, fashion, spa, beauty, editorial, magazines, high-end e-commerce","https://fonts.google.com/share?selection.family=Inter:wght@300;400;500;600;700|Playfair+Display:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Playfair+Display:wght@400;500;600;700&display=swap');","fontFamily: { serif: ['Playfair Display', 'serif'], sans: ['Inter', 'sans-serif'] }","High contrast between elegant heading and clean body. Perfect for luxury/premium."
  3 +2,Modern Professional,"Sans + Sans",Poppins,Open Sans,"modern, professional, clean, corporate, friendly, approachable","SaaS, corporate sites, business apps, startups, professional services","https://fonts.google.com/share?selection.family=Open+Sans:wght@300;400;500;600;700|Poppins:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;500;600;700&family=Poppins:wght@400;500;600;700&display=swap');","fontFamily: { heading: ['Poppins', 'sans-serif'], body: ['Open Sans', 'sans-serif'] }","Geometric Poppins for headings, humanist Open Sans for readability."
  4 +3,Tech Startup,"Sans + Sans",Space Grotesk,DM Sans,"tech, startup, modern, innovative, bold, futuristic","Tech companies, startups, SaaS, developer tools, AI products","https://fonts.google.com/share?selection.family=DM+Sans:wght@400;500;700|Space+Grotesk:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Space+Grotesk:wght@400;500;600;700&display=swap');","fontFamily: { heading: ['Space Grotesk', 'sans-serif'], body: ['DM Sans', 'sans-serif'] }","Space Grotesk has unique character, DM Sans is highly readable."
  5 +4,Editorial Classic,"Serif + Serif",Cormorant Garamond,Libre Baskerville,"editorial, classic, literary, traditional, refined, bookish","Publishing, blogs, news sites, literary magazines, book covers","https://fonts.google.com/share?selection.family=Cormorant+Garamond:wght@400;500;600;700|Libre+Baskerville:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600;700&family=Libre+Baskerville:wght@400;700&display=swap');","fontFamily: { heading: ['Cormorant Garamond', 'serif'], body: ['Libre Baskerville', 'serif'] }","All-serif pairing for traditional editorial feel."
  6 +5,Minimal Swiss,"Sans + Sans",Inter,Inter,"minimal, clean, swiss, functional, neutral, professional","Dashboards, admin panels, documentation, enterprise apps, design systems","https://fonts.google.com/share?selection.family=Inter:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');","fontFamily: { sans: ['Inter', 'sans-serif'] }","Single font family with weight variations. Ultimate simplicity."
  7 +6,Playful Creative,"Display + Sans",Fredoka,Nunito,"playful, friendly, fun, creative, warm, approachable","Children's apps, educational, gaming, creative tools, entertainment","https://fonts.google.com/share?selection.family=Fredoka:wght@400;500;600;700|Nunito:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Fredoka:wght@400;500;600;700&family=Nunito:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Fredoka', 'sans-serif'], body: ['Nunito', 'sans-serif'] }","Rounded, friendly fonts perfect for playful UIs."
  8 +7,Bold Statement,"Display + Sans",Bebas Neue,Source Sans 3,"bold, impactful, strong, dramatic, modern, headlines","Marketing sites, portfolios, agencies, event pages, sports","https://fonts.google.com/share?selection.family=Bebas+Neue|Source+Sans+3:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Source+Sans+3:wght@300;400;500;600;700&display=swap');","fontFamily: { display: ['Bebas Neue', 'sans-serif'], body: ['Source Sans 3', 'sans-serif'] }","Bebas Neue for large headlines only. All-caps display font."
  9 +8,Wellness Calm,"Serif + Sans",Lora,Raleway,"calm, wellness, health, relaxing, natural, organic","Health apps, wellness, spa, meditation, yoga, organic brands","https://fonts.google.com/share?selection.family=Lora:wght@400;500;600;700|Raleway:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Lora:wght@400;500;600;700&family=Raleway:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Lora', 'serif'], sans: ['Raleway', 'sans-serif'] }","Lora's organic curves with Raleway's elegant simplicity."
  10 +9,Developer Mono,"Mono + Sans",JetBrains Mono,IBM Plex Sans,"code, developer, technical, precise, functional, hacker","Developer tools, documentation, code editors, tech blogs, CLI apps","https://fonts.google.com/share?selection.family=IBM+Plex+Sans:wght@300;400;500;600;700|JetBrains+Mono:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap');","fontFamily: { mono: ['JetBrains Mono', 'monospace'], sans: ['IBM Plex Sans', 'sans-serif'] }","JetBrains for code, IBM Plex for UI. Developer-focused."
  11 +10,Retro Vintage,"Display + Serif",Abril Fatface,Merriweather,"retro, vintage, nostalgic, dramatic, decorative, bold","Vintage brands, breweries, restaurants, creative portfolios, posters","https://fonts.google.com/share?selection.family=Abril+Fatface|Merriweather:wght@300;400;700","@import url('https://fonts.googleapis.com/css2?family=Abril+Fatface&family=Merriweather:wght@300;400;700&display=swap');","fontFamily: { display: ['Abril Fatface', 'serif'], body: ['Merriweather', 'serif'] }","Abril Fatface for hero headlines only. High-impact vintage feel."
  12 +11,Geometric Modern,"Sans + Sans",Outfit,Work Sans,"geometric, modern, clean, balanced, contemporary, versatile","General purpose, portfolios, agencies, modern brands, landing pages","https://fonts.google.com/share?selection.family=Outfit:wght@300;400;500;600;700|Work+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&family=Work+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Outfit', 'sans-serif'], body: ['Work Sans', 'sans-serif'] }","Both geometric but Outfit more distinctive for headings."
  13 +12,Luxury Serif,"Serif + Sans",Cormorant,Montserrat,"luxury, high-end, fashion, elegant, refined, premium","Fashion brands, luxury e-commerce, jewelry, high-end services","https://fonts.google.com/share?selection.family=Cormorant:wght@400;500;600;700|Montserrat:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Cormorant:wght@400;500;600;700&family=Montserrat:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Cormorant', 'serif'], sans: ['Montserrat', 'sans-serif'] }","Cormorant's elegance with Montserrat's geometric precision."
  14 +13,Friendly SaaS,"Sans + Sans",Plus Jakarta Sans,Plus Jakarta Sans,"friendly, modern, saas, clean, approachable, professional","SaaS products, web apps, dashboards, B2B, productivity tools","https://fonts.google.com/share?selection.family=Plus+Jakarta+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { sans: ['Plus Jakarta Sans', 'sans-serif'] }","Single versatile font. Modern alternative to Inter."
  15 +14,News Editorial,"Serif + Sans",Newsreader,Roboto,"news, editorial, journalism, trustworthy, readable, informative","News sites, blogs, magazines, journalism, content-heavy sites","https://fonts.google.com/share?selection.family=Newsreader:wght@400;500;600;700|Roboto:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Newsreader:wght@400;500;600;700&family=Roboto:wght@300;400;500;700&display=swap');","fontFamily: { serif: ['Newsreader', 'serif'], sans: ['Roboto', 'sans-serif'] }","Newsreader designed for long-form reading. Roboto for UI."
  16 +15,Handwritten Charm,"Script + Sans",Caveat,Quicksand,"handwritten, personal, friendly, casual, warm, charming","Personal blogs, invitations, creative portfolios, lifestyle brands","https://fonts.google.com/share?selection.family=Caveat:wght@400;500;600;700|Quicksand:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&family=Quicksand:wght@300;400;500;600;700&display=swap');","fontFamily: { script: ['Caveat', 'cursive'], sans: ['Quicksand', 'sans-serif'] }","Use Caveat sparingly for accents. Quicksand for body."
  17 +16,Corporate Trust,"Sans + Sans",Lexend,Source Sans 3,"corporate, trustworthy, accessible, readable, professional, clean","Enterprise, government, healthcare, finance, accessibility-focused","https://fonts.google.com/share?selection.family=Lexend:wght@300;400;500;600;700|Source+Sans+3:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Lexend:wght@300;400;500;600;700&family=Source+Sans+3:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Lexend', 'sans-serif'], body: ['Source Sans 3', 'sans-serif'] }","Lexend designed for readability. Excellent accessibility."
  18 +17,Brutalist Raw,"Mono + Mono",Space Mono,Space Mono,"brutalist, raw, technical, monospace, minimal, stark","Brutalist designs, developer portfolios, experimental, tech art","https://fonts.google.com/share?selection.family=Space+Mono:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&display=swap');","fontFamily: { mono: ['Space Mono', 'monospace'] }","All-mono for raw brutalist aesthetic. Limited weights."
  19 +18,Fashion Forward,"Sans + Sans",Syne,Manrope,"fashion, avant-garde, creative, bold, artistic, edgy","Fashion brands, creative agencies, art galleries, design studios","https://fonts.google.com/share?selection.family=Manrope:wght@300;400;500;600;700|Syne:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@300;400;500;600;700&family=Syne:wght@400;500;600;700&display=swap');","fontFamily: { heading: ['Syne', 'sans-serif'], body: ['Manrope', 'sans-serif'] }","Syne's unique character for headlines. Manrope for readability."
  20 +19,Soft Rounded,"Sans + Sans",Varela Round,Nunito Sans,"soft, rounded, friendly, approachable, warm, gentle","Children's products, pet apps, friendly brands, wellness, soft UI","https://fonts.google.com/share?selection.family=Nunito+Sans:wght@300;400;500;600;700|Varela+Round","@import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@300;400;500;600;700&family=Varela+Round&display=swap');","fontFamily: { heading: ['Varela Round', 'sans-serif'], body: ['Nunito Sans', 'sans-serif'] }","Both rounded and friendly. Perfect for soft UI designs."
  21 +20,Premium Sans,"Sans + Sans",Satoshi,General Sans,"premium, modern, clean, sophisticated, versatile, balanced","Premium brands, modern agencies, SaaS, portfolios, startups","https://fonts.google.com/share?selection.family=DM+Sans:wght@400;500;700","@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&display=swap');","fontFamily: { sans: ['DM Sans', 'sans-serif'] }","Note: Satoshi/General Sans on Fontshare. DM Sans as Google alternative."
  22 +21,Vietnamese Friendly,"Sans + Sans",Be Vietnam Pro,Noto Sans,"vietnamese, international, readable, clean, multilingual, accessible","Vietnamese sites, multilingual apps, international products","https://fonts.google.com/share?selection.family=Be+Vietnam+Pro:wght@300;400;500;600;700|Noto+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:wght@300;400;500;600;700&family=Noto+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { sans: ['Be Vietnam Pro', 'Noto Sans', 'sans-serif'] }","Be Vietnam Pro excellent Vietnamese support. Noto as fallback."
  23 +22,Japanese Elegant,"Serif + Sans",Noto Serif JP,Noto Sans JP,"japanese, elegant, traditional, modern, multilingual, readable","Japanese sites, Japanese restaurants, cultural sites, anime/manga","https://fonts.google.com/share?selection.family=Noto+Sans+JP:wght@300;400;500;700|Noto+Serif+JP:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@300;400;500;700&family=Noto+Serif+JP:wght@400;500;600;700&display=swap');","fontFamily: { serif: ['Noto Serif JP', 'serif'], sans: ['Noto Sans JP', 'sans-serif'] }","Noto fonts excellent Japanese support. Traditional + modern feel."
  24 +23,Korean Modern,"Sans + Sans",Noto Sans KR,Noto Sans KR,"korean, modern, clean, professional, multilingual, readable","Korean sites, K-beauty, K-pop, Korean businesses, multilingual","https://fonts.google.com/share?selection.family=Noto+Sans+KR:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Noto Sans KR', 'sans-serif'] }","Clean Korean typography. Single font with weight variations."
  25 +24,Chinese Traditional,"Serif + Sans",Noto Serif TC,Noto Sans TC,"chinese, traditional, elegant, cultural, multilingual, readable","Traditional Chinese sites, cultural content, Taiwan/Hong Kong markets","https://fonts.google.com/share?selection.family=Noto+Sans+TC:wght@300;400;500;700|Noto+Serif+TC:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@300;400;500;700&family=Noto+Serif+TC:wght@400;500;600;700&display=swap');","fontFamily: { serif: ['Noto Serif TC', 'serif'], sans: ['Noto Sans TC', 'sans-serif'] }","Traditional Chinese character support. Elegant pairing."
  26 +25,Chinese Simplified,"Sans + Sans",Noto Sans SC,Noto Sans SC,"chinese, simplified, modern, professional, multilingual, readable","Simplified Chinese sites, mainland China market, business apps","https://fonts.google.com/share?selection.family=Noto+Sans+SC:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Noto Sans SC', 'sans-serif'] }","Simplified Chinese support. Clean modern look."
  27 +26,Arabic Elegant,"Serif + Sans",Noto Naskh Arabic,Noto Sans Arabic,"arabic, elegant, traditional, cultural, RTL, readable","Arabic sites, Middle East market, Islamic content, bilingual sites","https://fonts.google.com/share?selection.family=Noto+Naskh+Arabic:wght@400;500;600;700|Noto+Sans+Arabic:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Naskh+Arabic:wght@400;500;600;700&family=Noto+Sans+Arabic:wght@300;400;500;700&display=swap');","fontFamily: { serif: ['Noto Naskh Arabic', 'serif'], sans: ['Noto Sans Arabic', 'sans-serif'] }","RTL support. Naskh for traditional, Sans for modern Arabic."
  28 +27,Thai Modern,"Sans + Sans",Noto Sans Thai,Noto Sans Thai,"thai, modern, readable, clean, multilingual, accessible","Thai sites, Southeast Asia, tourism, Thai restaurants","https://fonts.google.com/share?selection.family=Noto+Sans+Thai:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Thai:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Noto Sans Thai', 'sans-serif'] }","Clean Thai typography. Excellent readability."
  29 +28,Hebrew Modern,"Sans + Sans",Noto Sans Hebrew,Noto Sans Hebrew,"hebrew, modern, RTL, clean, professional, readable","Hebrew sites, Israeli market, Jewish content, bilingual sites","https://fonts.google.com/share?selection.family=Noto+Sans+Hebrew:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Hebrew:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Noto Sans Hebrew', 'sans-serif'] }","RTL support. Clean modern Hebrew typography."
  30 +29,Legal Professional,"Serif + Sans",EB Garamond,Lato,"legal, professional, traditional, trustworthy, formal, authoritative","Law firms, legal services, contracts, formal documents, government","https://fonts.google.com/share?selection.family=EB+Garamond:wght@400;500;600;700|Lato:wght@300;400;700","@import url('https://fonts.googleapis.com/css2?family=EB+Garamond:wght@400;500;600;700&family=Lato:wght@300;400;700&display=swap');","fontFamily: { serif: ['EB Garamond', 'serif'], sans: ['Lato', 'sans-serif'] }","EB Garamond for authority. Lato for clean body text."
  31 +30,Medical Clean,"Sans + Sans",Figtree,Noto Sans,"medical, clean, accessible, professional, healthcare, trustworthy","Healthcare, medical clinics, pharma, health apps, accessibility","https://fonts.google.com/share?selection.family=Figtree:wght@300;400;500;600;700|Noto+Sans:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Figtree:wght@300;400;500;600;700&family=Noto+Sans:wght@300;400;500;700&display=swap');","fontFamily: { heading: ['Figtree', 'sans-serif'], body: ['Noto Sans', 'sans-serif'] }","Clean, accessible fonts for medical contexts."
  32 +31,Financial Trust,"Sans + Sans",IBM Plex Sans,IBM Plex Sans,"financial, trustworthy, professional, corporate, banking, serious","Banks, finance, insurance, investment, fintech, enterprise","https://fonts.google.com/share?selection.family=IBM+Plex+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { sans: ['IBM Plex Sans', 'sans-serif'] }","IBM Plex conveys trust and professionalism. Excellent for data."
  33 +32,Real Estate Luxury,"Serif + Sans",Cinzel,Josefin Sans,"real estate, luxury, elegant, sophisticated, property, premium","Real estate, luxury properties, architecture, interior design","https://fonts.google.com/share?selection.family=Cinzel:wght@400;500;600;700|Josefin+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;500;600;700&family=Josefin+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Cinzel', 'serif'], sans: ['Josefin Sans', 'sans-serif'] }","Cinzel's elegance for headlines. Josefin for modern body."
  34 +33,Restaurant Menu,"Serif + Sans",Playfair Display SC,Karla,"restaurant, menu, culinary, elegant, foodie, hospitality","Restaurants, cafes, food blogs, culinary, hospitality","https://fonts.google.com/share?selection.family=Karla:wght@300;400;500;600;700|Playfair+Display+SC:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Karla:wght@300;400;500;600;700&family=Playfair+Display+SC:wght@400;700&display=swap');","fontFamily: { display: ['Playfair Display SC', 'serif'], sans: ['Karla', 'sans-serif'] }","Small caps Playfair for menu headers. Karla for descriptions."
  35 +34,Art Deco,"Display + Sans",Poiret One,Didact Gothic,"art deco, vintage, 1920s, elegant, decorative, gatsby","Vintage events, art deco themes, luxury hotels, classic cocktails","https://fonts.google.com/share?selection.family=Didact+Gothic|Poiret+One","@import url('https://fonts.googleapis.com/css2?family=Didact+Gothic&family=Poiret+One&display=swap');","fontFamily: { display: ['Poiret One', 'sans-serif'], sans: ['Didact Gothic', 'sans-serif'] }","Poiret One for art deco headlines only. Didact for body."
  36 +35,Magazine Style,"Serif + Sans",Libre Bodoni,Public Sans,"magazine, editorial, publishing, refined, journalism, print","Magazines, online publications, editorial content, journalism","https://fonts.google.com/share?selection.family=Libre+Bodoni:wght@400;500;600;700|Public+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Libre+Bodoni:wght@400;500;600;700&family=Public+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Libre Bodoni', 'serif'], sans: ['Public Sans', 'sans-serif'] }","Bodoni's editorial elegance. Public Sans for clean UI."
  37 +36,Crypto/Web3,"Sans + Sans",Orbitron,Exo 2,"crypto, web3, futuristic, tech, blockchain, digital","Crypto platforms, NFT, blockchain, web3, futuristic tech","https://fonts.google.com/share?selection.family=Exo+2:wght@300;400;500;600;700|Orbitron:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Exo+2:wght@300;400;500;600;700&family=Orbitron:wght@400;500;600;700&display=swap');","fontFamily: { display: ['Orbitron', 'sans-serif'], body: ['Exo 2', 'sans-serif'] }","Orbitron for futuristic headers. Exo 2 for readable body."
  38 +37,Gaming Bold,"Display + Sans",Russo One,Chakra Petch,"gaming, bold, action, esports, competitive, energetic","Gaming, esports, action games, competitive sports, entertainment","https://fonts.google.com/share?selection.family=Chakra+Petch:wght@300;400;500;600;700|Russo+One","@import url('https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@300;400;500;600;700&family=Russo+One&display=swap');","fontFamily: { display: ['Russo One', 'sans-serif'], body: ['Chakra Petch', 'sans-serif'] }","Russo One for impact. Chakra Petch for techy body text."
  39 +38,Indie/Craft,"Display + Sans",Amatic SC,Cabin,"indie, craft, handmade, artisan, organic, creative","Craft brands, indie products, artisan, handmade, organic products","https://fonts.google.com/share?selection.family=Amatic+SC:wght@400;700|Cabin:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Amatic+SC:wght@400;700&family=Cabin:wght@400;500;600;700&display=swap');","fontFamily: { display: ['Amatic SC', 'sans-serif'], sans: ['Cabin', 'sans-serif'] }","Amatic for handwritten feel. Cabin for readable body."
  40 +39,Startup Bold,"Sans + Sans",Clash Display,Satoshi,"startup, bold, modern, innovative, confident, dynamic","Startups, pitch decks, product launches, bold brands","https://fonts.google.com/share?selection.family=Outfit:wght@400;500;600;700|Rubik:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&family=Rubik:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Outfit', 'sans-serif'], body: ['Rubik', 'sans-serif'] }","Note: Clash Display on Fontshare. Outfit as Google alternative."
  41 +40,E-commerce Clean,"Sans + Sans",Rubik,Nunito Sans,"ecommerce, clean, shopping, product, retail, conversion","E-commerce, online stores, product pages, retail, shopping","https://fonts.google.com/share?selection.family=Nunito+Sans:wght@300;400;500;600;700|Rubik:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@300;400;500;600;700&family=Rubik:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Rubik', 'sans-serif'], body: ['Nunito Sans', 'sans-serif'] }","Clean readable fonts perfect for product descriptions."
  42 +41,Academic/Research,"Serif + Sans",Crimson Pro,Atkinson Hyperlegible,"academic, research, scholarly, accessible, readable, educational","Universities, research papers, academic journals, educational","https://fonts.google.com/share?selection.family=Atkinson+Hyperlegible:wght@400;700|Crimson+Pro:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&family=Crimson+Pro:wght@400;500;600;700&display=swap');","fontFamily: { serif: ['Crimson Pro', 'serif'], sans: ['Atkinson Hyperlegible', 'sans-serif'] }","Crimson for scholarly headlines. Atkinson for accessibility."
  43 +42,Dashboard Data,"Mono + Sans",Fira Code,Fira Sans,"dashboard, data, analytics, code, technical, precise","Dashboards, analytics, data visualization, admin panels","https://fonts.google.com/share?selection.family=Fira+Code:wght@400;500;600;700|Fira+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Fira+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { mono: ['Fira Code', 'monospace'], sans: ['Fira Sans', 'sans-serif'] }","Fira family cohesion. Code for data, Sans for labels."
  44 +43,Music/Entertainment,"Display + Sans",Righteous,Poppins,"music, entertainment, fun, energetic, bold, performance","Music platforms, entertainment, events, festivals, performers","https://fonts.google.com/share?selection.family=Poppins:wght@300;400;500;600;700|Righteous","@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Righteous&display=swap');","fontFamily: { display: ['Righteous', 'sans-serif'], sans: ['Poppins', 'sans-serif'] }","Righteous for bold entertainment headers. Poppins for body."
  45 +44,Minimalist Portfolio,"Sans + Sans",Archivo,Space Grotesk,"minimal, portfolio, designer, creative, clean, artistic","Design portfolios, creative professionals, minimalist brands","https://fonts.google.com/share?selection.family=Archivo:wght@300;400;500;600;700|Space+Grotesk:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Archivo:wght@300;400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Space Grotesk', 'sans-serif'], body: ['Archivo', 'sans-serif'] }","Space Grotesk for distinctive headers. Archivo for clean body."
  46 +45,Kids/Education,"Display + Sans",Baloo 2,Comic Neue,"kids, education, playful, friendly, colorful, learning","Children's apps, educational games, kid-friendly content","https://fonts.google.com/share?selection.family=Baloo+2:wght@400;500;600;700|Comic+Neue:wght@300;400;700","@import url('https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700&family=Comic+Neue:wght@300;400;700&display=swap');","fontFamily: { display: ['Baloo 2', 'sans-serif'], sans: ['Comic Neue', 'sans-serif'] }","Fun, playful fonts for children. Comic Neue is readable comic style."
  47 +46,Wedding/Romance,"Script + Serif",Great Vibes,Cormorant Infant,"wedding, romance, elegant, script, invitation, feminine","Wedding sites, invitations, romantic brands, bridal","https://fonts.google.com/share?selection.family=Cormorant+Infant:wght@300;400;500;600;700|Great+Vibes","@import url('https://fonts.googleapis.com/css2?family=Cormorant+Infant:wght@300;400;500;600;700&family=Great+Vibes&display=swap');","fontFamily: { script: ['Great Vibes', 'cursive'], serif: ['Cormorant Infant', 'serif'] }","Great Vibes for elegant accents. Cormorant for readable text."
  48 +47,Science/Tech,"Sans + Sans",Exo,Roboto Mono,"science, technology, research, data, futuristic, precise","Science, research, tech documentation, data-heavy sites","https://fonts.google.com/share?selection.family=Exo:wght@300;400;500;600;700|Roboto+Mono:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Exo:wght@300;400;500;600;700&family=Roboto+Mono:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Exo', 'sans-serif'], mono: ['Roboto Mono', 'monospace'] }","Exo for modern tech feel. Roboto Mono for code/data."
  49 +48,Accessibility First,"Sans + Sans",Atkinson Hyperlegible,Atkinson Hyperlegible,"accessible, readable, inclusive, WCAG, dyslexia-friendly, clear","Accessibility-critical sites, government, healthcare, inclusive design","https://fonts.google.com/share?selection.family=Atkinson+Hyperlegible:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&display=swap');","fontFamily: { sans: ['Atkinson Hyperlegible', 'sans-serif'] }","Designed for maximum legibility. Excellent for accessibility."
  50 +49,Sports/Fitness,"Sans + Sans",Barlow Condensed,Barlow,"sports, fitness, athletic, energetic, condensed, action","Sports, fitness, gyms, athletic brands, competition","https://fonts.google.com/share?selection.family=Barlow+Condensed:wght@400;500;600;700|Barlow:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@400;500;600;700&family=Barlow:wght@300;400;500;600;700&display=swap');","fontFamily: { display: ['Barlow Condensed', 'sans-serif'], body: ['Barlow', 'sans-serif'] }","Condensed for impact headlines. Regular Barlow for body."
  51 +50,Luxury Minimalist,"Serif + Sans",Bodoni Moda,Jost,"luxury, minimalist, high-end, sophisticated, refined, premium","Luxury minimalist brands, high-end fashion, premium products","https://fonts.google.com/share?selection.family=Bodoni+Moda:wght@400;500;600;700|Jost:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Bodoni+Moda:wght@400;500;600;700&family=Jost:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Bodoni Moda', 'serif'], sans: ['Jost', 'sans-serif'] }","Bodoni's high contrast elegance. Jost for geometric body."
  52 +51,Tech/HUD Mono,"Mono + Mono",Share Tech Mono,Fira Code,"tech, futuristic, hud, sci-fi, data, monospaced, precise","Sci-fi interfaces, developer tools, cybersecurity, dashboards","https://fonts.google.com/share?selection.family=Fira+Code:wght@300;400;500;600;700|Share+Tech+Mono","@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@300;400;500;600;700&family=Share+Tech+Mono&display=swap');","fontFamily: { hud: ['Share Tech Mono', 'monospace'], code: ['Fira Code', 'monospace'] }","Share Tech Mono has that classic sci-fi look."
  53 +52,Pixel Retro,"Display + Sans",Press Start 2P,VT323,"pixel, retro, gaming, 8-bit, nostalgic, arcade","Pixel art games, retro websites, creative portfolios","https://fonts.google.com/share?selection.family=Press+Start+2P|VT323","@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=VT323&display=swap');","fontFamily: { pixel: ['Press Start 2P', 'cursive'], terminal: ['VT323', 'monospace'] }","Press Start 2P is very wide/large. VT323 is better for body text."
  54 +53,Neubrutalist Bold,"Display + Sans",Lexend Mega,Public Sans,"bold, neubrutalist, loud, strong, geometric, quirky","Neubrutalist designs, Gen Z brands, bold marketing","https://fonts.google.com/share?selection.family=Lexend+Mega:wght@100..900|Public+Sans:wght@100..900","@import url('https://fonts.googleapis.com/css2?family=Lexend+Mega:wght@100..900&family=Public+Sans:wght@100..900&display=swap');","fontFamily: { mega: ['Lexend Mega', 'sans-serif'], body: ['Public Sans', 'sans-serif'] }","Lexend Mega has distinct character and variable weight."
  55 +54,Academic/Archival,"Serif + Serif",EB Garamond,Crimson Text,"academic, old-school, university, research, serious, traditional","University sites, archives, research papers, history","https://fonts.google.com/share?selection.family=Crimson+Text:wght@400;600;700|EB+Garamond:wght@400;500;600;700;800","@import url('https://fonts.googleapis.com/css2?family=Crimson+Text:wght@400;600;700&family=EB+Garamond:wght@400;500;600;700;800&display=swap');","fontFamily: { classic: ['EB Garamond', 'serif'], text: ['Crimson Text', 'serif'] }","Classic academic aesthetic. Very legible."
  56 +55,Spatial Clear,"Sans + Sans",Inter,Inter,"spatial, legible, glass, system, clean, neutral","Spatial computing, AR/VR, glassmorphism interfaces","https://fonts.google.com/share?selection.family=Inter:wght@300;400;500;600","@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap');","fontFamily: { sans: ['Inter', 'sans-serif'] }","Optimized for readability on dynamic backgrounds."
  57 +56,Kinetic Motion,"Display + Mono",Syncopate,Space Mono,"kinetic, motion, futuristic, speed, wide, tech","Music festivals, automotive, high-energy brands","https://fonts.google.com/share?selection.family=Space+Mono:wght@400;700|Syncopate:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&family=Syncopate:wght@400;700&display=swap');","fontFamily: { display: ['Syncopate', 'sans-serif'], mono: ['Space Mono', 'monospace'] }","Syncopate's wide stance works well with motion effects."
  58 +57,Gen Z Brutal,"Display + Sans",Anton,Epilogue,"brutal, loud, shouty, meme, internet, bold","Gen Z marketing, streetwear, viral campaigns","https://fonts.google.com/share?selection.family=Anton|Epilogue:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Anton&family=Epilogue:wght@400;500;600;700&display=swap');","fontFamily: { display: ['Anton', 'sans-serif'], body: ['Epilogue', 'sans-serif'] }","Anton is impactful and condensed. Good for stickers/badges."
0 59 \ No newline at end of file
... ...
.shared/ui-ux-pro-max/data/ux-guidelines.csv 0 → 100644
  1 +No,Category,Issue,Platform,Description,Do,Don't,Code Example Good,Code Example Bad,Severity
  2 +1,Navigation,Smooth Scroll,Web,Anchor links should scroll smoothly to target section,Use scroll-behavior: smooth on html element,Jump directly without transition,html { scroll-behavior: smooth; },<a href='#section'> without CSS,High
  3 +2,Navigation,Sticky Navigation,Web,Fixed nav should not obscure content,Add padding-top to body equal to nav height,Let nav overlap first section content,pt-20 (if nav is h-20),No padding compensation,Medium
  4 +3,Navigation,Active State,All,Current page/section should be visually indicated,Highlight active nav item with color/underline,No visual feedback on current location,text-primary border-b-2,All links same style,Medium
  5 +4,Navigation,Back Button,Mobile,Users expect back to work predictably,Preserve navigation history properly,Break browser/app back button behavior,history.pushState(),location.replace(),High
  6 +5,Navigation,Deep Linking,All,URLs should reflect current state for sharing,Update URL on state/view changes,Static URLs for dynamic content,Use query params or hash,Single URL for all states,Medium
  7 +6,Navigation,Breadcrumbs,Web,Show user location in site hierarchy,Use for sites with 3+ levels of depth,Use for flat single-level sites,Home > Category > Product,Only on deep nested pages,Low
  8 +7,Animation,Excessive Motion,All,Too many animations cause distraction and motion sickness,Animate 1-2 key elements per view maximum,Animate everything that moves,Single hero animation,animate-bounce on 5+ elements,High
  9 +8,Animation,Duration Timing,All,Animations should feel responsive not sluggish,Use 150-300ms for micro-interactions,Use animations longer than 500ms for UI,transition-all duration-200,duration-1000,Medium
  10 +9,Animation,Reduced Motion,All,Respect user's motion preferences,Check prefers-reduced-motion media query,Ignore accessibility motion settings,@media (prefers-reduced-motion: reduce),No motion query check,High
  11 +10,Animation,Loading States,All,Show feedback during async operations,Use skeleton screens or spinners,Leave UI frozen with no feedback,animate-pulse skeleton,Blank screen while loading,High
  12 +11,Animation,Hover vs Tap,All,Hover effects don't work on touch devices,Use click/tap for primary interactions,Rely only on hover for important actions,onClick handler,onMouseEnter only,High
  13 +12,Animation,Continuous Animation,All,Infinite animations are distracting,Use for loading indicators only,Use for decorative elements,animate-spin on loader,animate-bounce on icons,Medium
  14 +13,Animation,Transform Performance,Web,Some CSS properties trigger expensive repaints,Use transform and opacity for animations,Animate width/height/top/left properties,transform: translateY(),top: 10px animation,Medium
  15 +14,Animation,Easing Functions,All,Linear motion feels robotic,Use ease-out for entering ease-in for exiting,Use linear for UI transitions,ease-out,linear,Low
  16 +15,Layout,Z-Index Management,Web,Stacking context conflicts cause hidden elements,Define z-index scale system (10 20 30 50),Use arbitrary large z-index values,z-10 z-20 z-50,z-[9999],High
  17 +16,Layout,Overflow Hidden,Web,Hidden overflow can clip important content,Test all content fits within containers,Blindly apply overflow-hidden,overflow-auto with scroll,overflow-hidden truncating content,Medium
  18 +17,Layout,Fixed Positioning,Web,Fixed elements can overlap or be inaccessible,Account for safe areas and other fixed elements,Stack multiple fixed elements carelessly,Fixed nav + fixed bottom with gap,Multiple overlapping fixed elements,Medium
  19 +18,Layout,Stacking Context,Web,New stacking contexts reset z-index,Understand what creates new stacking context,Expect z-index to work across contexts,Parent with z-index isolates children,z-index: 9999 not working,Medium
  20 +19,Layout,Content Jumping,Web,Layout shift when content loads is jarring,Reserve space for async content,Let images/content push layout around,aspect-ratio or fixed height,No dimensions on images,High
  21 +20,Layout,Viewport Units,Web,100vh can be problematic on mobile browsers,Use dvh or account for mobile browser chrome,Use 100vh for full-screen mobile layouts,min-h-dvh or min-h-screen,h-screen on mobile,Medium
  22 +21,Layout,Container Width,Web,Content too wide is hard to read,Limit max-width for text content (65-75ch),Let text span full viewport width,max-w-prose or max-w-3xl,Full width paragraphs,Medium
  23 +22,Touch,Touch Target Size,Mobile,Small buttons are hard to tap accurately,Minimum 44x44px touch targets,Tiny clickable areas,min-h-[44px] min-w-[44px],w-6 h-6 buttons,High
  24 +23,Touch,Touch Spacing,Mobile,Adjacent touch targets need adequate spacing,Minimum 8px gap between touch targets,Tightly packed clickable elements,gap-2 between buttons,gap-0 or gap-1,Medium
  25 +24,Touch,Gesture Conflicts,Mobile,Custom gestures can conflict with system,Avoid horizontal swipe on main content,Override system gestures,Vertical scroll primary,Horizontal swipe carousel only,Medium
  26 +25,Touch,Tap Delay,Mobile,300ms tap delay feels laggy,Use touch-action CSS or fastclick,Default mobile tap handling,touch-action: manipulation,No touch optimization,Medium
  27 +26,Touch,Pull to Refresh,Mobile,Accidental refresh is frustrating,Disable where not needed,Enable by default everywhere,overscroll-behavior: contain,Default overscroll,Low
  28 +27,Touch,Haptic Feedback,Mobile,Tactile feedback improves interaction feel,Use for confirmations and important actions,Overuse vibration feedback,navigator.vibrate(10),Vibrate on every tap,Low
  29 +28,Interaction,Focus States,All,Keyboard users need visible focus indicators,Use visible focus rings on interactive elements,Remove focus outline without replacement,focus:ring-2 focus:ring-blue-500,outline-none without alternative,High
  30 +29,Interaction,Hover States,Web,Visual feedback on interactive elements,Change cursor and add subtle visual change,No hover feedback on clickable elements,hover:bg-gray-100 cursor-pointer,No hover style,Medium
  31 +30,Interaction,Active States,All,Show immediate feedback on press/click,Add pressed/active state visual change,No feedback during interaction,active:scale-95,No active state,Medium
  32 +31,Interaction,Disabled States,All,Clearly indicate non-interactive elements,Reduce opacity and change cursor,Confuse disabled with normal state,opacity-50 cursor-not-allowed,Same style as enabled,Medium
  33 +32,Interaction,Loading Buttons,All,Prevent double submission during async actions,Disable button and show loading state,Allow multiple clicks during processing,disabled={loading} spinner,Button clickable while loading,High
  34 +33,Interaction,Error Feedback,All,Users need to know when something fails,Show clear error messages near problem,Silent failures with no feedback,Red border + error message,No indication of error,High
  35 +34,Interaction,Success Feedback,All,Confirm successful actions to users,Show success message or visual change,No confirmation of completed action,Toast notification or checkmark,Action completes silently,Medium
  36 +35,Interaction,Confirmation Dialogs,All,Prevent accidental destructive actions,Confirm before delete/irreversible actions,Delete without confirmation,Are you sure modal,Direct delete on click,High
  37 +36,Accessibility,Color Contrast,All,Text must be readable against background,Minimum 4.5:1 ratio for normal text,Low contrast text,#333 on white (7:1),#999 on white (2.8:1),High
  38 +37,Accessibility,Color Only,All,Don't convey information by color alone,Use icons/text in addition to color,Red/green only for error/success,Red text + error icon,Red border only for error,High
  39 +38,Accessibility,Alt Text,All,Images need text alternatives,Descriptive alt text for meaningful images,Empty or missing alt attributes,alt='Dog playing in park',alt='' for content images,High
  40 +39,Accessibility,Heading Hierarchy,Web,Screen readers use headings for navigation,Use sequential heading levels h1-h6,Skip heading levels or misuse for styling,h1 then h2 then h3,h1 then h4,Medium
  41 +40,Accessibility,ARIA Labels,All,Interactive elements need accessible names,Add aria-label for icon-only buttons,Icon buttons without labels,aria-label='Close menu',<button><Icon/></button>,High
  42 +41,Accessibility,Keyboard Navigation,Web,All functionality accessible via keyboard,Tab order matches visual order,Keyboard traps or illogical tab order,tabIndex for custom order,Unreachable elements,High
  43 +42,Accessibility,Screen Reader,All,Content should make sense when read aloud,Use semantic HTML and ARIA properly,Div soup with no semantics,<nav> <main> <article>,<div> for everything,Medium
  44 +43,Accessibility,Form Labels,All,Inputs must have associated labels,Use label with for attribute or wrap input,Placeholder-only inputs,<label for='email'>,placeholder='Email' only,High
  45 +44,Accessibility,Error Messages,All,Error messages must be announced,Use aria-live or role=alert for errors,Visual-only error indication,role='alert',Red border only,High
  46 +45,Accessibility,Skip Links,Web,Allow keyboard users to skip navigation,Provide skip to main content link,No skip link on nav-heavy pages,Skip to main content link,100 tabs to reach content,Medium
  47 +46,Performance,Image Optimization,All,Large images slow page load,Use appropriate size and format (WebP),Unoptimized full-size images,srcset with multiple sizes,4000px image for 400px display,High
  48 +47,Performance,Lazy Loading,All,Load content as needed,Lazy load below-fold images and content,Load everything upfront,loading='lazy',All images eager load,Medium
  49 +48,Performance,Code Splitting,Web,Large bundles slow initial load,Split code by route/feature,Single large bundle,dynamic import(),All code in main bundle,Medium
  50 +49,Performance,Caching,Web,Repeat visits should be fast,Set appropriate cache headers,No caching strategy,Cache-Control headers,Every request hits server,Medium
  51 +50,Performance,Font Loading,Web,Web fonts can block rendering,Use font-display swap or optional,Invisible text during font load,font-display: swap,FOIT (Flash of Invisible Text),Medium
  52 +51,Performance,Third Party Scripts,Web,External scripts can block rendering,Load non-critical scripts async/defer,Synchronous third-party scripts,async or defer attribute,<script src='...'> in head,Medium
  53 +52,Performance,Bundle Size,Web,Large JavaScript slows interaction,Monitor and minimize bundle size,Ignore bundle size growth,Bundle analyzer,No size monitoring,Medium
  54 +53,Performance,Render Blocking,Web,CSS/JS can block first paint,Inline critical CSS defer non-critical,Large blocking CSS files,Critical CSS inline,All CSS in head,Medium
  55 +54,Forms,Input Labels,All,Every input needs a visible label,Always show label above or beside input,Placeholder as only label,<label>Email</label><input>,placeholder='Email' only,High
  56 +55,Forms,Error Placement,All,Errors should appear near the problem,Show error below related input,Single error message at top of form,Error under each field,All errors at form top,Medium
  57 +56,Forms,Inline Validation,All,Validate as user types or on blur,Validate on blur for most fields,Validate only on submit,onBlur validation,Submit-only validation,Medium
  58 +57,Forms,Input Types,All,Use appropriate input types,Use email tel number url etc,Text input for everything,type='email',type='text' for email,Medium
  59 +58,Forms,Autofill Support,Web,Help browsers autofill correctly,Use autocomplete attribute properly,Block or ignore autofill,autocomplete='email',autocomplete='off' everywhere,Medium
  60 +59,Forms,Required Indicators,All,Mark required fields clearly,Use asterisk or (required) text,No indication of required fields,* required indicator,Guess which are required,Medium
  61 +60,Forms,Password Visibility,All,Let users see password while typing,Toggle to show/hide password,No visibility toggle,Show/hide password button,Password always hidden,Medium
  62 +61,Forms,Submit Feedback,All,Confirm form submission status,Show loading then success/error state,No feedback after submit,Loading -> Success message,Button click with no response,High
  63 +62,Forms,Input Affordance,All,Inputs should look interactive,Use distinct input styling,Inputs that look like plain text,Border/background on inputs,Borderless inputs,Medium
  64 +63,Forms,Mobile Keyboards,Mobile,Show appropriate keyboard for input type,Use inputmode attribute,Default keyboard for all inputs,inputmode='numeric',Text keyboard for numbers,Medium
  65 +64,Responsive,Mobile First,Web,Design for mobile then enhance for larger,Start with mobile styles then add breakpoints,Desktop-first causing mobile issues,Default mobile + md: lg: xl:,Desktop default + max-width queries,Medium
  66 +65,Responsive,Breakpoint Testing,Web,Test at all common screen sizes,Test at 320 375 414 768 1024 1440,Only test on your device,Multiple device testing,Single device development,Medium
  67 +66,Responsive,Touch Friendly,Web,Mobile layouts need touch-sized targets,Increase touch targets on mobile,Same tiny buttons on mobile,Larger buttons on mobile,Desktop-sized targets on mobile,High
  68 +67,Responsive,Readable Font Size,All,Text must be readable on all devices,Minimum 16px body text on mobile,Tiny text on mobile,text-base or larger,text-xs for body text,High
  69 +68,Responsive,Viewport Meta,Web,Set viewport for mobile devices,Use width=device-width initial-scale=1,Missing or incorrect viewport,<meta name='viewport'...>,No viewport meta tag,High
  70 +69,Responsive,Horizontal Scroll,Web,Avoid horizontal scrolling,Ensure content fits viewport width,Content wider than viewport,max-w-full overflow-x-hidden,Horizontal scrollbar on mobile,High
  71 +70,Responsive,Image Scaling,Web,Images should scale with container,Use max-width: 100% on images,Fixed width images overflow,max-w-full h-auto,width='800' fixed,Medium
  72 +71,Responsive,Table Handling,Web,Tables can overflow on mobile,Use horizontal scroll or card layout,Wide tables breaking layout,overflow-x-auto wrapper,Table overflows viewport,Medium
  73 +72,Typography,Line Height,All,Adequate line height improves readability,Use 1.5-1.75 for body text,Cramped or excessive line height,leading-relaxed (1.625),leading-none (1),Medium
  74 +73,Typography,Line Length,Web,Long lines are hard to read,Limit to 65-75 characters per line,Full-width text on large screens,max-w-prose,Full viewport width text,Medium
  75 +74,Typography,Font Size Scale,All,Consistent type hierarchy aids scanning,Use consistent modular scale,Random font sizes,Type scale (12 14 16 18 24 32),Arbitrary sizes,Medium
  76 +75,Typography,Font Loading,Web,Fonts should load without layout shift,Reserve space with fallback font,Layout shift when fonts load,font-display: swap + similar fallback,No fallback font,Medium
  77 +76,Typography,Contrast Readability,All,Body text needs good contrast,Use darker text on light backgrounds,Gray text on gray background,text-gray-900 on white,text-gray-400 on gray-100,High
  78 +77,Typography,Heading Clarity,All,Headings should stand out from body,Clear size/weight difference,Headings similar to body text,Bold + larger size,Same size as body,Medium
  79 +78,Feedback,Loading Indicators,All,Show system status during waits,Show spinner/skeleton for operations > 300ms,No feedback during loading,Skeleton or spinner,Frozen UI,High
  80 +79,Feedback,Empty States,All,Guide users when no content exists,Show helpful message and action,Blank empty screens,No items yet. Create one!,Empty white space,Medium
  81 +80,Feedback,Error Recovery,All,Help users recover from errors,Provide clear next steps,Error without recovery path,Try again button + help link,Error message only,Medium
  82 +81,Feedback,Progress Indicators,All,Show progress for multi-step processes,Step indicators or progress bar,No indication of progress,Step 2 of 4 indicator,No step information,Medium
  83 +82,Feedback,Toast Notifications,All,Transient messages for non-critical info,Auto-dismiss after 3-5 seconds,Toasts that never disappear,Auto-dismiss toast,Persistent toast,Medium
  84 +83,Feedback,Confirmation Messages,All,Confirm successful actions,Brief success message,Silent success,Saved successfully toast,No confirmation,Medium
  85 +84,Content,Truncation,All,Handle long content gracefully,Truncate with ellipsis and expand option,Overflow or broken layout,line-clamp-2 with expand,Overflow or cut off,Medium
  86 +85,Content,Date Formatting,All,Use locale-appropriate date formats,Use relative or locale-aware dates,Ambiguous date formats,2 hours ago or locale format,01/02/03,Low
  87 +86,Content,Number Formatting,All,Format large numbers for readability,Use thousand separators or abbreviations,Long unformatted numbers,"1.2K or 1,234",1234567,Low
  88 +87,Content,Placeholder Content,All,Show realistic placeholders during dev,Use realistic sample data,Lorem ipsum everywhere,Real sample content,Lorem ipsum,Low
  89 +88,Onboarding,User Freedom,All,Users should be able to skip tutorials,Provide Skip and Back buttons,Force linear unskippable tour,Skip Tutorial button,Locked overlay until finished,Medium
  90 +89,Search,Autocomplete,Web,Help users find results faster,Show predictions as user types,Require full type and enter,Debounced fetch + dropdown,No suggestions,Medium
  91 +90,Search,No Results,Web,Dead ends frustrate users,Show 'No results' with suggestions,Blank screen or '0 results',Try searching for X instead,No results found.,Medium
  92 +91,Data Entry,Bulk Actions,Web,Editing one by one is tedious,Allow multi-select and bulk edit,Single row actions only,Checkbox column + Action bar,Repeated actions per row,Low
  93 +92,AI Interaction,Disclaimer,All,Users need to know they talk to AI,Clearly label AI generated content,Present AI as human,AI Assistant label,Fake human name without label,High
  94 +93,AI Interaction,Streaming,All,Waiting for full text is slow,Stream text response token by token,Show loading spinner for 10s+,Typewriter effect,Spinner until 100% complete,Medium
  95 +94,Spatial UI,Gaze Hover,VisionOS,Elements should respond to eye tracking before pinch,Scale/highlight element on look,Static element until pinch,hoverEffect(),onTap only,High
  96 +95,Spatial UI,Depth Layering,VisionOS,UI needs Z-depth to separate content from environment,Use glass material and z-offset,Flat opaque panels blocking view,.glassBackgroundEffect(),bg-white,Medium
  97 +96,Sustainability,Auto-Play Video,Web,Video consumes massive data and energy,Click-to-play or pause when off-screen,Auto-play high-res video loops,playsInline muted preload='none',autoplay loop,Medium
  98 +97,Sustainability,Asset Weight,Web,Heavy 3D/Image assets increase carbon footprint,Compress and lazy load 3D models,Load 50MB textures,Draco compression,Raw .obj files,Medium
  99 +98,AI Interaction,Feedback Loop,All,AI needs user feedback to improve,Thumps up/down or 'Regenerate',Static output only,Feedback component,Read-only text,Low
  100 +99,Accessibility,Motion Sensitivity,All,Parallax/Scroll-jacking causes nausea,Respect prefers-reduced-motion,Force scroll effects,@media (prefers-reduced-motion),ScrollTrigger.create(),High
0 101 \ No newline at end of file
... ...
.shared/ui-ux-pro-max/scripts/core.py 0 → 100644
  1 +#!/usr/bin/env python3
  2 +# -*- coding: utf-8 -*-
  3 +"""
  4 +UI/UX Pro Max Core - BM25 search engine for UI/UX style guides
  5 +"""
  6 +
  7 +import csv
  8 +import re
  9 +from pathlib import Path
  10 +from math import log
  11 +from collections import defaultdict
  12 +
  13 +# ============ CONFIGURATION ============
  14 +DATA_DIR = Path(__file__).parent.parent / "data"
  15 +MAX_RESULTS = 3
  16 +
  17 +CSV_CONFIG = {
  18 + "style": {
  19 + "file": "styles.csv",
  20 + "search_cols": ["Style Category", "Keywords", "Best For", "Type"],
  21 + "output_cols": ["Style Category", "Type", "Keywords", "Primary Colors", "Effects & Animation", "Best For", "Performance", "Accessibility", "Framework Compatibility", "Complexity"]
  22 + },
  23 + "prompt": {
  24 + "file": "prompts.csv",
  25 + "search_cols": ["Style Category", "AI Prompt Keywords (Copy-Paste Ready)", "CSS/Technical Keywords"],
  26 + "output_cols": ["Style Category", "AI Prompt Keywords (Copy-Paste Ready)", "CSS/Technical Keywords", "Implementation Checklist"]
  27 + },
  28 + "color": {
  29 + "file": "colors.csv",
  30 + "search_cols": ["Product Type", "Keywords", "Notes"],
  31 + "output_cols": ["Product Type", "Keywords", "Primary (Hex)", "Secondary (Hex)", "CTA (Hex)", "Background (Hex)", "Text (Hex)", "Border (Hex)", "Notes"]
  32 + },
  33 + "chart": {
  34 + "file": "charts.csv",
  35 + "search_cols": ["Data Type", "Keywords", "Best Chart Type", "Accessibility Notes"],
  36 + "output_cols": ["Data Type", "Keywords", "Best Chart Type", "Secondary Options", "Color Guidance", "Accessibility Notes", "Library Recommendation", "Interactive Level"]
  37 + },
  38 + "landing": {
  39 + "file": "landing.csv",
  40 + "search_cols": ["Pattern Name", "Keywords", "Conversion Optimization", "Section Order"],
  41 + "output_cols": ["Pattern Name", "Keywords", "Section Order", "Primary CTA Placement", "Color Strategy", "Conversion Optimization"]
  42 + },
  43 + "product": {
  44 + "file": "products.csv",
  45 + "search_cols": ["Product Type", "Keywords", "Primary Style Recommendation", "Key Considerations"],
  46 + "output_cols": ["Product Type", "Keywords", "Primary Style Recommendation", "Secondary Styles", "Landing Page Pattern", "Dashboard Style (if applicable)", "Color Palette Focus"]
  47 + },
  48 + "ux": {
  49 + "file": "ux-guidelines.csv",
  50 + "search_cols": ["Category", "Issue", "Description", "Platform"],
  51 + "output_cols": ["Category", "Issue", "Platform", "Description", "Do", "Don't", "Code Example Good", "Code Example Bad", "Severity"]
  52 + },
  53 + "typography": {
  54 + "file": "typography.csv",
  55 + "search_cols": ["Font Pairing Name", "Category", "Mood/Style Keywords", "Best For", "Heading Font", "Body Font"],
  56 + "output_cols": ["Font Pairing Name", "Category", "Heading Font", "Body Font", "Mood/Style Keywords", "Best For", "Google Fonts URL", "CSS Import", "Tailwind Config", "Notes"]
  57 + }
  58 +}
  59 +
  60 +STACK_CONFIG = {
  61 + "html-tailwind": {"file": "stacks/html-tailwind.csv"},
  62 + "react": {"file": "stacks/react.csv"},
  63 + "nextjs": {"file": "stacks/nextjs.csv"},
  64 + "vue": {"file": "stacks/vue.csv"},
  65 + "svelte": {"file": "stacks/svelte.csv"},
  66 + "swiftui": {"file": "stacks/swiftui.csv"},
  67 + "react-native": {"file": "stacks/react-native.csv"},
  68 + "flutter": {"file": "stacks/flutter.csv"}
  69 +}
  70 +
  71 +# Common columns for all stacks
  72 +_STACK_COLS = {
  73 + "search_cols": ["Category", "Guideline", "Description", "Do", "Don't"],
  74 + "output_cols": ["Category", "Guideline", "Description", "Do", "Don't", "Code Good", "Code Bad", "Severity", "Docs URL"]
  75 +}
  76 +
  77 +AVAILABLE_STACKS = list(STACK_CONFIG.keys())
  78 +
  79 +
  80 +# ============ BM25 IMPLEMENTATION ============
  81 +class BM25:
  82 + """BM25 ranking algorithm for text search"""
  83 +
  84 + def __init__(self, k1=1.5, b=0.75):
  85 + self.k1 = k1
  86 + self.b = b
  87 + self.corpus = []
  88 + self.doc_lengths = []
  89 + self.avgdl = 0
  90 + self.idf = {}
  91 + self.doc_freqs = defaultdict(int)
  92 + self.N = 0
  93 +
  94 + def tokenize(self, text):
  95 + """Lowercase, split, remove punctuation, filter short words"""
  96 + text = re.sub(r'[^\w\s]', ' ', str(text).lower())
  97 + return [w for w in text.split() if len(w) > 2]
  98 +
  99 + def fit(self, documents):
  100 + """Build BM25 index from documents"""
  101 + self.corpus = [self.tokenize(doc) for doc in documents]
  102 + self.N = len(self.corpus)
  103 + if self.N == 0:
  104 + return
  105 + self.doc_lengths = [len(doc) for doc in self.corpus]
  106 + self.avgdl = sum(self.doc_lengths) / self.N
  107 +
  108 + for doc in self.corpus:
  109 + seen = set()
  110 + for word in doc:
  111 + if word not in seen:
  112 + self.doc_freqs[word] += 1
  113 + seen.add(word)
  114 +
  115 + for word, freq in self.doc_freqs.items():
  116 + self.idf[word] = log((self.N - freq + 0.5) / (freq + 0.5) + 1)
  117 +
  118 + def score(self, query):
  119 + """Score all documents against query"""
  120 + query_tokens = self.tokenize(query)
  121 + scores = []
  122 +
  123 + for idx, doc in enumerate(self.corpus):
  124 + score = 0
  125 + doc_len = self.doc_lengths[idx]
  126 + term_freqs = defaultdict(int)
  127 + for word in doc:
  128 + term_freqs[word] += 1
  129 +
  130 + for token in query_tokens:
  131 + if token in self.idf:
  132 + tf = term_freqs[token]
  133 + idf = self.idf[token]
  134 + numerator = tf * (self.k1 + 1)
  135 + denominator = tf + self.k1 * (1 - self.b + self.b * doc_len / self.avgdl)
  136 + score += idf * numerator / denominator
  137 +
  138 + scores.append((idx, score))
  139 +
  140 + return sorted(scores, key=lambda x: x[1], reverse=True)
  141 +
  142 +
  143 +# ============ SEARCH FUNCTIONS ============
  144 +def _load_csv(filepath):
  145 + """Load CSV and return list of dicts"""
  146 + with open(filepath, 'r', encoding='utf-8') as f:
  147 + return list(csv.DictReader(f))
  148 +
  149 +
  150 +def _search_csv(filepath, search_cols, output_cols, query, max_results):
  151 + """Core search function using BM25"""
  152 + if not filepath.exists():
  153 + return []
  154 +
  155 + data = _load_csv(filepath)
  156 +
  157 + # Build documents from search columns
  158 + documents = [" ".join(str(row.get(col, "")) for col in search_cols) for row in data]
  159 +
  160 + # BM25 search
  161 + bm25 = BM25()
  162 + bm25.fit(documents)
  163 + ranked = bm25.score(query)
  164 +
  165 + # Get top results with score > 0
  166 + results = []
  167 + for idx, score in ranked[:max_results]:
  168 + if score > 0:
  169 + row = data[idx]
  170 + results.append({col: row.get(col, "") for col in output_cols if col in row})
  171 +
  172 + return results
  173 +
  174 +
  175 +def detect_domain(query):
  176 + """Auto-detect the most relevant domain from query"""
  177 + query_lower = query.lower()
  178 +
  179 + domain_keywords = {
  180 + "color": ["color", "palette", "hex", "#", "rgb"],
  181 + "chart": ["chart", "graph", "visualization", "trend", "bar", "pie", "scatter", "heatmap", "funnel"],
  182 + "landing": ["landing", "page", "cta", "conversion", "hero", "testimonial", "pricing", "section"],
  183 + "product": ["saas", "ecommerce", "e-commerce", "fintech", "healthcare", "gaming", "portfolio", "crypto", "dashboard"],
  184 + "prompt": ["prompt", "css", "implementation", "variable", "checklist", "tailwind"],
  185 + "style": ["style", "design", "ui", "minimalism", "glassmorphism", "neumorphism", "brutalism", "dark mode", "flat", "aurora"],
  186 + "ux": ["ux", "usability", "accessibility", "wcag", "touch", "scroll", "animation", "keyboard", "navigation", "mobile"],
  187 + "typography": ["font", "typography", "heading", "serif", "sans"]
  188 + }
  189 +
  190 + scores = {domain: sum(1 for kw in keywords if kw in query_lower) for domain, keywords in domain_keywords.items()}
  191 + best = max(scores, key=scores.get)
  192 + return best if scores[best] > 0 else "style"
  193 +
  194 +
  195 +def search(query, domain=None, max_results=MAX_RESULTS):
  196 + """Main search function with auto-domain detection"""
  197 + if domain is None:
  198 + domain = detect_domain(query)
  199 +
  200 + config = CSV_CONFIG.get(domain, CSV_CONFIG["style"])
  201 + filepath = DATA_DIR / config["file"]
  202 +
  203 + if not filepath.exists():
  204 + return {"error": f"File not found: {filepath}", "domain": domain}
  205 +
  206 + results = _search_csv(filepath, config["search_cols"], config["output_cols"], query, max_results)
  207 +
  208 + return {
  209 + "domain": domain,
  210 + "query": query,
  211 + "file": config["file"],
  212 + "count": len(results),
  213 + "results": results
  214 + }
  215 +
  216 +
  217 +def search_stack(query, stack, max_results=MAX_RESULTS):
  218 + """Search stack-specific guidelines"""
  219 + if stack not in STACK_CONFIG:
  220 + return {"error": f"Unknown stack: {stack}. Available: {', '.join(AVAILABLE_STACKS)}"}
  221 +
  222 + filepath = DATA_DIR / STACK_CONFIG[stack]["file"]
  223 +
  224 + if not filepath.exists():
  225 + return {"error": f"Stack file not found: {filepath}", "stack": stack}
  226 +
  227 + results = _search_csv(filepath, _STACK_COLS["search_cols"], _STACK_COLS["output_cols"], query, max_results)
  228 +
  229 + return {
  230 + "domain": "stack",
  231 + "stack": stack,
  232 + "query": query,
  233 + "file": STACK_CONFIG[stack]["file"],
  234 + "count": len(results),
  235 + "results": results
  236 + }
... ...
.shared/ui-ux-pro-max/scripts/search.py 0 → 100644
  1 +#!/usr/bin/env python3
  2 +# -*- coding: utf-8 -*-
  3 +"""
  4 +UI/UX Pro Max Search - BM25 search engine for UI/UX style guides
  5 +Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--max-results 3]
  6 +
  7 +Domains: style, prompt, color, chart, landing, product, ux, typography
  8 +Stacks: html-tailwind, react, nextjs
  9 +"""
  10 +
  11 +import argparse
  12 +from core import CSV_CONFIG, AVAILABLE_STACKS, MAX_RESULTS, search, search_stack
  13 +
  14 +
  15 +def format_output(result):
  16 + """Format results for Claude consumption (token-optimized)"""
  17 + if "error" in result:
  18 + return f"Error: {result['error']}"
  19 +
  20 + output = []
  21 + if result.get("stack"):
  22 + output.append(f"## UI Pro Max Stack Guidelines")
  23 + output.append(f"**Stack:** {result['stack']} | **Query:** {result['query']}")
  24 + else:
  25 + output.append(f"## UI Pro Max Search Results")
  26 + output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")
  27 + output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")
  28 +
  29 + for i, row in enumerate(result['results'], 1):
  30 + output.append(f"### Result {i}")
  31 + for key, value in row.items():
  32 + value_str = str(value)
  33 + if len(value_str) > 300:
  34 + value_str = value_str[:300] + "..."
  35 + output.append(f"- **{key}:** {value_str}")
  36 + output.append("")
  37 +
  38 + return "\n".join(output)
  39 +
  40 +
  41 +if __name__ == "__main__":
  42 + parser = argparse.ArgumentParser(description="UI Pro Max Search")
  43 + parser.add_argument("query", help="Search query")
  44 + parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")
  45 + parser.add_argument("--stack", "-s", choices=AVAILABLE_STACKS, help="Stack-specific search (html-tailwind, react, nextjs)")
  46 + parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")
  47 + parser.add_argument("--json", action="store_true", help="Output as JSON")
  48 +
  49 + args = parser.parse_args()
  50 +
  51 + # Stack search takes priority
  52 + if args.stack:
  53 + result = search_stack(args.query, args.stack, args.max_results)
  54 + else:
  55 + result = search(args.query, args.domain, args.max_results)
  56 +
  57 + if args.json:
  58 + import json
  59 + print(json.dumps(result, indent=2, ensure_ascii=False))
  60 + else:
  61 + print(format_output(result))
... ...
IMPLEMENTATION_PLAN.md 0 → 100644
  1 +# 科技部驾驶舱接口实现计划
  2 +
  3 +## 当前状态
  4 +
  5 +✅ **已实现接口(2个)**:
  6 +1. GetStatistics - 核心指标
  7 +2. GetShareStatistics - 股份统计
  8 +
  9 +⏳ **待实现接口(11个)**:
  10 +1. GetPerformanceTrend - 业绩趋势
  11 +2. GetShareTrend - 股份趋势
  12 +3. GetStoreRanking - 门店排行
  13 +4. GetStoreDistribution - 门店分布
  14 +5. GetTeacherRanking - 老师排行
  15 +6. GetOperationStatistics - 运营分析
  16 +7. GetComparisonAnalysis - 对比分析
  17 +8. GetStoreDetailList - 门店明细列表
  18 +9. GetTeacherDetailList - 老师明细列表
  19 +10. GetBillingDetailList - 开单明细列表
  20 +11. GetConsumeDetailList - 消耗明细列表
  21 +
  22 +## 实现计划
  23 +
  24 +由于代码量巨大(约11个接口,估计总代码量约2000-3000行),采用分批实现策略:
  25 +
  26 +**第一批**:GetPerformanceTrend, GetShareTrend(趋势分析接口)
  27 +**第二批**:GetStoreRanking, GetStoreDistribution, GetTeacherRanking(排行和分布接口)
  28 +**第三批**:GetOperationStatistics, GetComparisonAnalysis(分析和对比接口)
  29 +**第四批**:GetStoreDetailList, GetTeacherDetailList, GetBillingDetailList, GetConsumeDetailList(明细列表接口)
  30 +
  31 +## 注意事项
  32 +
  33 +- 所有DTO类已创建完成
  34 +- 实体类命名空间:NCC.Extend.Entitys(已在使用)
  35 +- UserEntity通过NCC.System.Entitys.Permission使用
  36 +- 所有接口都需要遵循月份维度要求
  37 +- 所有接口都需要支持techDepartmentId或storeIds参数
  38 +
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/charts.csv 0 → 100644
  1 +No,Data Type,Keywords,Best Chart Type,Secondary Options,Color Guidance,Performance Impact,Accessibility Notes,Library Recommendation,Interactive Level
  2 +1,Trend Over Time,"trend, time-series, line, growth, timeline, progress",Line Chart,"Area Chart, Smooth Area",Primary: #0080FF. Multiple series: use distinct colors. Fill: 20% opacity,⚡ Excellent (optimized),✓ Clear line patterns for colorblind users. Add pattern overlays.,"Chart.js, Recharts, ApexCharts",Hover + Zoom
  3 +2,Compare Categories,"compare, categories, bar, comparison, ranking",Bar Chart (Horizontal or Vertical),"Column Chart, Grouped Bar",Each bar: distinct color. Category: grouped same color. Sorted: descending order,⚡ Excellent,✓ Easy to compare. Add value labels on bars for clarity.,"Chart.js, Recharts, D3.js",Hover + Sort
  4 +3,Part-to-Whole,"part-to-whole, pie, donut, percentage, proportion, share",Pie Chart or Donut,"Stacked Bar, Treemap",Colors: 5-6 max. Contrasting palette. Large slices first. Use labels.,⚡ Good (limit 6 slices),⚠ Hard for accessibility. Better: Stacked bar with legend. Avoid pie if >5 items.,"Chart.js, Recharts, D3.js",Hover + Drill
  5 +4,Correlation/Distribution,"correlation, distribution, scatter, relationship, pattern",Scatter Plot or Bubble Chart,"Heat Map, Matrix",Color axis: gradient (blue-red). Size: relative. Opacity: 0.6-0.8 to show density,⚠ Moderate (many points),⚠ Provide data table alternative. Use pattern + color distinction.,"D3.js, Plotly, Recharts",Hover + Brush
  6 +5,Heatmap/Intensity,"heatmap, heat-map, intensity, density, matrix",Heat Map or Choropleth,"Grid Heat Map, Bubble Heat",Gradient: Cool (blue) to Hot (red). Scale: clear legend. Divergent for ±data,⚡ Excellent (color CSS),⚠ Colorblind: Use pattern overlay. Provide numerical legend.,"D3.js, Plotly, ApexCharts",Hover + Zoom
  7 +6,Geographic Data,"geographic, map, location, region, geo, spatial","Choropleth Map, Bubble Map",Geographic Heat Map,Regional: single color gradient or categorized colors. Legend: clear scale,⚠ Moderate (rendering),⚠ Include text labels for regions. Provide data table alternative.,"D3.js, Mapbox, Leaflet",Pan + Zoom + Drill
  8 +7,Funnel/Flow,funnel/flow,"Funnel Chart, Sankey",Waterfall (for flows),Stages: gradient (starting color → ending color). Show conversion %,⚡ Good,✓ Clear stage labels + percentages. Good for accessibility if labeled.,"D3.js, Recharts, Custom SVG",Hover + Drill
  9 +8,Performance vs Target,performance-vs-target,Gauge Chart or Bullet Chart,"Dial, Thermometer",Performance: Red→Yellow→Green gradient. Target: marker line. Threshold colors,⚡ Good,✓ Add numerical value + percentage label beside gauge.,"D3.js, ApexCharts, Custom SVG",Hover
  10 +9,Time-Series Forecast,time-series-forecast,Line with Confidence Band,Ribbon Chart,Actual: solid line #0080FF. Forecast: dashed #FF9500. Band: light shading,⚡ Good,✓ Clearly distinguish actual vs forecast. Add legend.,"Chart.js, ApexCharts, Plotly",Hover + Toggle
  11 +10,Anomaly Detection,anomaly-detection,Line Chart with Highlights,Scatter with Alert,Normal: blue #0080FF. Anomaly: red #FF0000 circle/square marker + alert,⚡ Good,✓ Circle/marker for anomalies. Add text alert annotation.,"D3.js, Plotly, ApexCharts",Hover + Alert
  12 +11,Hierarchical/Nested Data,hierarchical/nested-data,Treemap,"Sunburst, Nested Donut, Icicle",Parent: distinct hues. Children: lighter shades. White borders 2-3px.,⚠ Moderate,⚠ Poor - provide table alternative. Label large areas.,"D3.js, Recharts, ApexCharts",Hover + Drilldown
  13 +12,Flow/Process Data,flow/process-data,Sankey Diagram,"Alluvial, Chord Diagram",Gradient from source to target. Opacity 0.4-0.6 for flows.,⚠ Moderate,⚠ Poor - provide flow table alternative.,"D3.js (d3-sankey), Plotly",Hover + Drilldown
  14 +13,Cumulative Changes,cumulative-changes,Waterfall Chart,"Stacked Bar, Cascade",Increases: #4CAF50. Decreases: #F44336. Start: #2196F3. End: #0D47A1.,⚡ Good,✓ Good - clear directional colors with labels.,"ApexCharts, Highcharts, Plotly",Hover
  15 +14,Multi-Variable Comparison,multi-variable-comparison,Radar/Spider Chart,"Parallel Coordinates, Grouped Bar",Single: #0080FF 20% fill. Multiple: distinct colors per dataset.,⚡ Good,⚠ Moderate - limit 5-8 axes. Add data table.,"Chart.js, Recharts, ApexCharts",Hover + Toggle
  16 +15,Stock/Trading OHLC,stock/trading-ohlc,Candlestick Chart,"OHLC Bar, Heikin-Ashi",Bullish: #26A69A. Bearish: #EF5350. Volume: 40% opacity below.,⚡ Good,⚠ Moderate - provide OHLC data table.,"Lightweight Charts (TradingView), ApexCharts",Real-time + Hover + Zoom
  17 +16,Relationship/Connection Data,relationship/connection-data,Network Graph,"Hierarchical Tree, Adjacency Matrix",Node types: categorical colors. Edges: #90A4AE 60% opacity.,❌ Poor (500+ nodes struggles),❌ Very Poor - provide adjacency list alternative.,"D3.js (d3-force), Vis.js, Cytoscape.js",Drilldown + Hover + Drag
  18 +17,Distribution/Statistical,distribution/statistical,Box Plot,"Violin Plot, Beeswarm",Box: #BBDEFB. Border: #1976D2. Median: #D32F2F. Outliers: #F44336.,⚡ Excellent,"✓ Good - include stats table (min, Q1, median, Q3, max).","Plotly, D3.js, Chart.js (plugin)",Hover
  19 +18,Performance vs Target (Compact),performance-vs-target-(compact),Bullet Chart,"Gauge, Progress Bar","Ranges: #FFCDD2, #FFF9C4, #C8E6C9. Performance: #1976D2. Target: black 3px.",⚡ Excellent,✓ Excellent - compact with clear values.,"D3.js, Plotly, Custom SVG",Hover
  20 +19,Proportional/Percentage,proportional/percentage,Waffle Chart,"Pictogram, Stacked Bar 100%",10x10 grid. 3-5 categories max. 2-3px spacing between squares.,⚡ Good,✓ Good - better than pie for accessibility.,"D3.js, React-Waffle, Custom CSS Grid",Hover
  21 +20,Hierarchical Proportional,hierarchical-proportional,Sunburst Chart,"Treemap, Icicle, Circle Packing",Center to outer: darker to lighter. 15-20% lighter per level.,⚠ Moderate,⚠ Poor - provide hierarchy table alternative.,"D3.js (d3-hierarchy), Recharts, ApexCharts",Drilldown + Hover
  22 +21,Root Cause Analysis,"root cause, decomposition, tree, hierarchy, drill-down, ai-split",Decomposition Tree,"Decision Tree, Flow Chart",Nodes: #2563EB (Primary) vs #EF4444 (Negative impact). Connectors: Neutral grey.,⚠ Moderate (calculation heavy),✓ clear hierarchy. Allow keyboard navigation for nodes.,"Power BI (native), React-Flow, Custom D3.js",Drill + Expand
  23 +22,3D Spatial Data,"3d, spatial, immersive, terrain, molecular, volumetric",3D Scatter/Surface Plot,"Volumetric Rendering, Point Cloud",Depth cues: lighting/shading. Z-axis: color gradient (cool to warm).,❌ Heavy (WebGL required),❌ Poor - requires alternative 2D view or data table.,"Three.js, Deck.gl, Plotly 3D",Rotate + Zoom + VR
  24 +23,Real-Time Streaming,"streaming, real-time, ticker, live, velocity, pulse",Streaming Area Chart,"Ticker Tape, Moving Gauge",Current: Bright Pulse (#00FF00). History: Fading opacity. Grid: Dark.,⚡ Optimized (canvas/webgl),⚠ Flashing elements - provide pause button. High contrast.,Smoothed D3.js, CanvasJS, SciChart,Real-time + Pause
  25 +24,Sentiment/Emotion,"sentiment, emotion, nlp, opinion, feeling",Word Cloud with Sentiment,"Sentiment Arc, Radar Chart",Positive: #22C55E. Negative: #EF4444. Neutral: #94A3B8. Size = Frequency.,⚡ Good,⚠ Word clouds poor for screen readers. Use list view.,"D3-cloud, Highcharts, Nivo",Hover + Filter
  26 +25,Process Mining,"process, mining, variants, path, bottleneck, log",Process Map / Graph,"Directed Acyclic Graph (DAG), Petri Net",Happy path: #10B981 (Thick). Deviations: #F59E0B (Thin). Bottlenecks: #EF4444.,⚠ Moderate to Heavy,⚠ Complex graphs hard to navigate. Provide path summary.,"React-Flow, Cytoscape.js, Recharts",Drag + Node-Click
0 27 \ No newline at end of file
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/colors.csv 0 → 100644
  1 +No,Product Type,Keywords,Primary (Hex),Secondary (Hex),CTA (Hex),Background (Hex),Text (Hex),Border (Hex),Notes
  2 +1,SaaS (General),"saas, general",#2563EB,#3B82F6,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust blue + accent contrast
  3 +2,Micro SaaS,"micro, saas",#2563EB,#3B82F6,#F97316,#F8FAFC,#1E293B,#E2E8F0,Vibrant primary + white space
  4 +3,E-commerce,commerce,#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand primary + success green
  5 +4,E-commerce Luxury,"commerce, luxury",#1C1917,#44403C,#CA8A04,#FAFAF9,#0C0A09,#D6D3D1,Premium colors + minimal accent
  6 +5,Service Landing Page,"service, landing, page",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand primary + trust colors
  7 +6,B2B Service,"b2b, service",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional blue + neutral grey
  8 +7,Financial Dashboard,"financial, dashboard",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark bg + red/green alerts + trust blue
  9 +8,Analytics Dashboard,"analytics, dashboard",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Cool→Hot gradients + neutral grey
  10 +9,Healthcare App,"healthcare, app",#0891B2,#22D3EE,#059669,#ECFEFF,#164E63,#A5F3FC,Calm blue + health green + trust
  11 +10,Educational App,"educational, app",#4F46E5,#818CF8,#F97316,#EEF2FF,#1E1B4B,#C7D2FE,Playful colors + clear hierarchy
  12 +11,Creative Agency,"creative, agency",#EC4899,#F472B6,#06B6D4,#FDF2F8,#831843,#FBCFE8,Bold primaries + artistic freedom
  13 +12,Portfolio/Personal,"portfolio, personal",#18181B,#3F3F46,#2563EB,#FAFAFA,#09090B,#E4E4E7,Brand primary + artistic interpretation
  14 +13,Gaming,gaming,#7C3AED,#A78BFA,#F43F5E,#0F0F23,#E2E8F0,#4C1D95,Vibrant + neon + immersive colors
  15 +14,Government/Public Service,"government, public, service",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional blue + high contrast
  16 +15,Fintech/Crypto,"fintech, crypto",#F59E0B,#FBBF24,#8B5CF6,#0F172A,#F8FAFC,#334155,Dark tech colors + trust + vibrant accents
  17 +16,Social Media App,"social, media, app",#2563EB,#60A5FA,#F43F5E,#F8FAFC,#1E293B,#DBEAFE,Vibrant + engagement colors
  18 +17,Productivity Tool,"productivity, tool",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Clear hierarchy + functional colors
  19 +18,Design System/Component Library,"design, system, component, library",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Clear hierarchy + code-like structure
  20 +19,AI/Chatbot Platform,"chatbot, platform",#7C3AED,#A78BFA,#06B6D4,#FAF5FF,#1E1B4B,#DDD6FE,Neutral + AI Purple (#6366F1)
  21 +20,NFT/Web3 Platform,"nft, web3, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Neon + Gold (#FFD700)
  22 +21,Creator Economy Platform,"creator, economy, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Vibrant + Brand colors
  23 +22,Sustainability/ESG Platform,"sustainability, esg, platform",#7C3AED,#A78BFA,#06B6D4,#FAF5FF,#1E1B4B,#DDD6FE,Green (#228B22) + Earth tones
  24 +23,Remote Work/Collaboration Tool,"remote, work, collaboration, tool",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Calm Blue + Neutral grey
  25 +24,Mental Health App,"mental, health, app",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Calm Pastels + Trust colors
  26 +25,Pet Tech App,"pet, tech, app",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Playful + Warm colors
  27 +26,Smart Home/IoT Dashboard,"smart, home, iot, dashboard",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Status indicator colors
  28 +27,EV/Charging Ecosystem,"charging, ecosystem",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Electric Blue (#009CD1) + Green
  29 +28,Subscription Box Service,"subscription, box, service",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand + Excitement colors
  30 +29,Podcast Platform,"podcast, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Audio waveform accents
  31 +30,Dating App,"dating, app",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Warm + Romantic (Pink/Red gradients)
  32 +31,Micro-Credentials/Badges Platform,"micro, credentials, badges, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust Blue + Gold (#FFD700)
  33 +32,Knowledge Base/Documentation,"knowledge, base, documentation",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Clean hierarchy + minimal color
  34 +33,Hyperlocal Services,"hyperlocal, services",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Location markers + Trust colors
  35 +34,Beauty/Spa/Wellness Service,"beauty, spa, wellness, service",#10B981,#34D399,#8B5CF6,#ECFDF5,#064E3B,#A7F3D0,Soft pastels (Pink #FFB6C1 Sage #90EE90) + Cream + Gold accents
  36 +35,Luxury/Premium Brand,"luxury, premium, brand",#1C1917,#44403C,#CA8A04,#FAFAF9,#0C0A09,#D6D3D1,Black + Gold (#FFD700) + White + Minimal accent
  37 +36,Restaurant/Food Service,"restaurant, food, service",#DC2626,#F87171,#CA8A04,#FEF2F2,#450A0A,#FECACA,Warm colors (Orange Red Brown) + appetizing imagery
  38 +37,Fitness/Gym App,"fitness, gym, app",#DC2626,#F87171,#16A34A,#FEF2F2,#1F2937,#FECACA,Energetic (Orange #FF6B35 Electric Blue) + Dark bg
  39 +38,Real Estate/Property,"real, estate, property",#0F766E,#14B8A6,#0369A1,#F0FDFA,#134E4A,#99F6E4,Trust Blue (#0077B6) + Gold accents + White
  40 +39,Travel/Tourism Agency,"travel, tourism, agency",#EC4899,#F472B6,#06B6D4,#FDF2F8,#831843,#FBCFE8,Vibrant destination colors + Sky Blue + Warm accents
  41 +40,Hotel/Hospitality,"hotel, hospitality",#1E3A8A,#3B82F6,#CA8A04,#F8FAFC,#1E40AF,#BFDBFE,Warm neutrals + Gold (#D4AF37) + Brand accent
  42 +41,Wedding/Event Planning,"wedding, event, planning",#7C3AED,#A78BFA,#F97316,#FAF5FF,#4C1D95,#DDD6FE,Soft Pink (#FFD6E0) + Gold + Cream + Sage
  43 +42,Legal Services,"legal, services",#1E3A8A,#1E40AF,#B45309,#F8FAFC,#0F172A,#CBD5E1,Navy Blue (#1E3A5F) + Gold + White
  44 +43,Insurance Platform,"insurance, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust Blue (#0066CC) + Green (security) + Neutral
  45 +44,Banking/Traditional Finance,"banking, traditional, finance",#0F766E,#14B8A6,#0369A1,#F0FDFA,#134E4A,#99F6E4,Navy (#0A1628) + Trust Blue + Gold accents
  46 +45,Online Course/E-learning,"online, course, learning",#0D9488,#2DD4BF,#EA580C,#F0FDFA,#134E4A,#5EEAD4,Vibrant learning colors + Progress green
  47 +46,Non-profit/Charity,"non, profit, charity",#0891B2,#22D3EE,#F97316,#ECFEFF,#164E63,#A5F3FC,Cause-related colors + Trust + Warm
  48 +47,Music Streaming,"music, streaming",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark (#121212) + Vibrant accents + Album art colors
  49 +48,Video Streaming/OTT,"video, streaming, ott",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark bg + Content poster colors + Brand accent
  50 +49,Job Board/Recruitment,"job, board, recruitment",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional Blue + Success Green + Neutral
  51 +50,Marketplace (P2P),"marketplace, p2p",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Trust colors + Category colors + Success green
  52 +51,Logistics/Delivery,"logistics, delivery",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Blue (#2563EB) + Orange (tracking) + Green (delivered)
  53 +52,Agriculture/Farm Tech,"agriculture, farm, tech",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Earth Green (#4A7C23) + Brown + Sky Blue
  54 +53,Construction/Architecture,"construction, architecture",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Grey (#4A4A4A) + Orange (safety) + Blueprint Blue
  55 +54,Automotive/Car Dealership,"automotive, car, dealership",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand colors + Metallic accents + Dark/Light
  56 +55,Photography Studio,"photography, studio",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Black + White + Minimal accent
  57 +56,Coworking Space,"coworking, space",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Energetic colors + Wood tones + Brand accent
  58 +57,Cleaning Service,"cleaning, service",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Fresh Blue (#00B4D8) + Clean White + Green
  59 +58,Home Services (Plumber/Electrician),"home, services, plumber, electrician",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Trust Blue + Safety Orange + Professional grey
  60 +59,Childcare/Daycare,"childcare, daycare",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Playful pastels + Safe colors + Warm accents
  61 +60,Senior Care/Elderly,"senior, care, elderly",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Calm Blue + Warm neutrals + Large text
  62 +61,Medical Clinic,"medical, clinic",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Medical Blue (#0077B6) + Trust White + Calm Green
  63 +62,Pharmacy/Drug Store,"pharmacy, drug, store",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Pharmacy Green + Trust Blue + Clean White
  64 +63,Dental Practice,"dental, practice",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Fresh Blue + White + Smile Yellow accent
  65 +64,Veterinary Clinic,"veterinary, clinic",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Caring Blue + Pet-friendly colors + Warm accents
  66 +65,Florist/Plant Shop,"florist, plant, shop",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Natural Green + Floral pinks/purples + Earth tones
  67 +66,Bakery/Cafe,"bakery, cafe",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Warm Brown + Cream + Appetizing accents
  68 +67,Coffee Shop,"coffee, shop",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Coffee Brown (#6F4E37) + Cream + Warm accents
  69 +68,Brewery/Winery,"brewery, winery",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Deep amber/burgundy + Gold + Craft aesthetic
  70 +69,Airline,airline,#7C3AED,#A78BFA,#06B6D4,#FAF5FF,#1E1B4B,#DDD6FE,Sky Blue + Brand colors + Trust accents
  71 +70,News/Media Platform,"news, media, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand colors + High contrast + Category colors
  72 +71,Magazine/Blog,"magazine, blog",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Editorial colors + Brand primary + Clean white
  73 +72,Freelancer Platform,"freelancer, platform",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional Blue + Success Green + Neutral
  74 +73,Consulting Firm,"consulting, firm",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Navy + Gold + Professional grey
  75 +74,Marketing Agency,"marketing, agency",#EC4899,#F472B6,#06B6D4,#FDF2F8,#831843,#FBCFE8,Bold brand colors + Creative freedom
  76 +75,Event Management,"event, management",#7C3AED,#A78BFA,#F97316,#FAF5FF,#4C1D95,#DDD6FE,Event theme colors + Excitement accents
  77 +76,Conference/Webinar Platform,"conference, webinar, platform",#0F172A,#334155,#0369A1,#F8FAFC,#020617,#E2E8F0,Professional Blue + Video accent + Brand
  78 +77,Membership/Community,"membership, community",#7C3AED,#A78BFA,#F97316,#FAF5FF,#4C1D95,#DDD6FE,Community brand colors + Engagement accents
  79 +78,Newsletter Platform,"newsletter, platform",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Brand primary + Clean white + CTA accent
  80 +79,Digital Products/Downloads,"digital, products, downloads",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Product category colors + Brand + Success green
  81 +80,Church/Religious Organization,"church, religious, organization",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Warm Gold + Deep Purple/Blue + White
  82 +81,Sports Team/Club,"sports, team, club",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Team colors + Energetic accents
  83 +82,Museum/Gallery,"museum, gallery",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Art-appropriate neutrals + Exhibition accents
  84 +83,Theater/Cinema,"theater, cinema",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Dark + Spotlight accents + Gold
  85 +84,Language Learning App,"language, learning, app",#0D9488,#2DD4BF,#EA580C,#F0FDFA,#134E4A,#5EEAD4,Playful colors + Progress indicators + Country flags
  86 +85,Coding Bootcamp,"coding, bootcamp",#3B82F6,#60A5FA,#F97316,#F8FAFC,#1E293B,#E2E8F0,Code editor colors + Brand + Success green
  87 +86,Cybersecurity Platform,"cybersecurity, security, cyber, hacker",#00FF41,#0D0D0D,#00FF41,#000000,#E0E0E0,#1F1F1F,Matrix Green + Deep Black + Terminal feel
  88 +87,Developer Tool / IDE,"developer, tool, ide, code, dev",#3B82F6,#1E293B,#2563EB,#0F172A,#F1F5F9,#334155,Dark syntax theme colors + Blue focus
  89 +88,Biotech / Life Sciences,"biotech, science, biology, medical",#0EA5E9,#0284C7,#10B981,#F8FAFC,#0F172A,#E2E8F0,Sterile White + DNA Blue + Life Green
  90 +89,Space Tech / Aerospace,"space, aerospace, tech, futuristic",#FFFFFF,#94A3B8,#3B82F6,#0B0B10,#F8FAFC,#1E293B,Deep Space Black + Star White + Metallic
  91 +90,Architecture / Interior,"architecture, interior, design, luxury",#171717,#404040,#D4AF37,#FFFFFF,#171717,#E5E5E5,Monochrome + Gold Accent + High Imagery
  92 +91,Quantum Computing,"quantum, qubit, tech",#00FFFF,#7B61FF,#FF00FF,#050510,#E0E0FF,#333344,Interference patterns + Neon + Deep Dark
  93 +92,Biohacking / Longevity,"bio, health, science",#FF4D4D,#4D94FF,#00E676,#F5F5F7,#1C1C1E,#E5E5EA,Biological red/blue + Clinical white
  94 +93,Autonomous Systems,"drone, robot, fleet",#00FF41,#008F11,#FF3333,#0D1117,#E6EDF3,#30363D,Terminal Green + Tactical Dark
  95 +94,Generative AI Art,"art, gen-ai, creative",#111111,#333333,#FFFFFF,#FAFAFA,#000000,#E5E5E5,Canvas Neutral + High Contrast
  96 +95,Spatial / Vision OS,"spatial, glass, vision",#FFFFFF,#E5E5E5,#007AFF,#888888,#000000,#FFFFFF,Glass opacity 20% + System Blue
  97 +96,Climate Tech,"climate, green, energy",#2E8B57,#87CEEB,#FFD700,#F0FFF4,#1A3320,#C6E6C6,Nature Green + Solar Yellow + Air Blue
0 98 \ No newline at end of file
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/landing.csv 0 → 100644
  1 +No,Pattern Name,Keywords,Section Order,Primary CTA Placement,Color Strategy,Recommended Effects,Conversion Optimization
  2 +1,Hero + Features + CTA,"hero, hero-centric, features, feature-rich, cta, call-to-action","1. Hero with headline/image, 2. Value prop, 3. Key features (3-5), 4. CTA section, 5. Footer",Hero (sticky) + Bottom,Hero: Brand primary or vibrant. Features: Card bg #FAFAFA. CTA: Contrasting accent color,"Hero parallax, feature card hover lift, CTA glow on hover",Deep CTA placement. Use contrasting color (at least 7:1 contrast ratio). Sticky navbar CTA.
  3 +2,Hero + Testimonials + CTA,"hero, testimonials, social-proof, trust, reviews, cta","1. Hero, 2. Problem statement, 3. Solution overview, 4. Testimonials carousel, 5. CTA",Hero (sticky) + Post-testimonials,"Hero: Brand color. Testimonials: Light bg #F5F5F5. Quotes: Italic, muted color #666. CTA: Vibrant","Testimonial carousel slide animations, quote marks animations, avatar fade-in",Social proof before CTA. Use 3-5 testimonials. Include photo + name + role. CTA after social proof.
  4 +3,Product Demo + Features,"demo, product-demo, features, showcase, interactive","1. Hero, 2. Product video/mockup (center), 3. Feature breakdown per section, 4. Comparison (optional), 5. CTA",Video center + CTA right/bottom,Video surround: Brand color overlay. Features: Icon color #0080FF. Text: Dark #222,"Video play button pulse, feature scroll reveals, demo interaction highlights",Embedded product demo increases engagement. Use interactive mockup if possible. Auto-play video muted.
  5 +4,Minimal Single Column,"minimal, simple, direct, single-column, clean","1. Hero headline, 2. Short description, 3. Benefit bullets (3 max), 4. CTA, 5. Footer","Center, large CTA button",Minimalist: Brand + white #FFFFFF + accent. Buttons: High contrast 7:1+. Text: Black/Dark grey,Minimal hover effects. Smooth scroll. CTA scale on hover (subtle),Single CTA focus. Large typography. Lots of whitespace. No nav clutter. Mobile-first.
  6 +5,Funnel (3-Step Conversion),"funnel, conversion, steps, wizard, onboarding","1. Hero, 2. Step 1 (problem), 3. Step 2 (solution), 4. Step 3 (action), 5. CTA progression",Each step: mini-CTA. Final: main CTA,"Step colors: 1 (Red/Problem), 2 (Orange/Process), 3 (Green/Solution). CTA: Brand color","Step number animations, progress bar fill, step transitions smooth scroll",Progressive disclosure. Show only essential info per step. Use progress indicators. Multiple CTAs.
  7 +6,Comparison Table + CTA,"comparison, table, compare, versus, cta","1. Hero, 2. Problem intro, 3. Comparison table (product vs competitors), 4. Pricing (optional), 5. CTA",Table: Right column. CTA: Below table,Table: Alternating rows (white/light grey). Your product: Highlight #FFFACD (light yellow) or green. Text: Dark,"Table row hover highlight, price toggle animations, feature checkmark animations",Use comparison to show unique value. Highlight your product row. Include 'free trial' in pricing row.
  8 +7,Lead Magnet + Form,"lead, form, signup, capture, email, magnet","1. Hero (benefit headline), 2. Lead magnet preview (ebook cover, checklist, etc), 3. Form (minimal fields), 4. CTA submit",Form CTA: Submit button,Lead magnet: Professional design. Form: Clean white bg. Inputs: Light border #CCCCCC. CTA: Brand color,"Form focus state animations, input validation animations, success confirmation animation",Form fields ≤ 3 for best conversion. Offer valuable lead magnet preview. Show form submission progress.
  9 +8,Pricing Page + CTA,"pricing, plans, tiers, comparison, cta","1. Hero (pricing headline), 2. Price comparison cards, 3. Feature comparison table, 4. FAQ section, 5. Final CTA",Each card: CTA button. Sticky CTA in nav,"Free: Grey, Starter: Blue, Pro: Green/Gold, Enterprise: Dark. Cards: 1px border, shadow","Price toggle animation (monthly/yearly), card comparison highlight, FAQ accordion open/close",Recommend starter plan (pre-select/highlight). Show annual discount (20-30%). Use FAQs to address concerns.
  10 +9,Video-First Hero,"video, hero, media, visual, engaging","1. Hero with video background, 2. Key features overlay, 3. Benefits section, 4. CTA",Overlay on video (center/bottom) + Bottom section,Dark overlay 60% on video. Brand accent for CTA. White text on dark.,"Video autoplay muted, parallax scroll, text fade-in on scroll",86% higher engagement with video. Add captions for accessibility. Compress video for performance.
  11 +10,Scroll-Triggered Storytelling,"storytelling, scroll, narrative, story, immersive","1. Intro hook, 2. Chapter 1 (problem), 3. Chapter 2 (journey), 4. Chapter 3 (solution), 5. Climax CTA",End of each chapter (mini) + Final climax CTA,Progressive reveal. Each chapter has distinct color. Building intensity.,"ScrollTrigger animations, parallax layers, progressive disclosure, chapter transitions",Narrative increases time-on-page 3x. Use progress indicator. Mobile: simplify animations.
  12 +11,AI Personalization Landing,"ai, personalization, smart, recommendation, dynamic","1. Dynamic hero (personalized), 2. Relevant features, 3. Tailored testimonials, 4. Smart CTA",Context-aware placement based on user segment,Adaptive based on user data. A/B test color variations per segment.,"Dynamic content swap, fade transitions, personalized product recommendations",20%+ conversion with personalization. Requires analytics integration. Fallback for new users.
  13 +12,Waitlist/Coming Soon,"waitlist, coming-soon, launch, early-access, notify","1. Hero with countdown, 2. Product teaser/preview, 3. Email capture form, 4. Social proof (waitlist count)",Email form prominent (above fold) + Sticky form on scroll,Anticipation: Dark + accent highlights. Countdown in brand color. Urgency indicators.,"Countdown timer animation, email validation feedback, success confetti, social share buttons",Scarcity + exclusivity. Show waitlist count. Early access benefits. Referral program.
  14 +13,Comparison Table Focus,"comparison, table, versus, compare, features","1. Hero (problem statement), 2. Comparison matrix (you vs competitors), 3. Feature deep-dive, 4. Winner CTA",After comparison table (highlighted row) + Bottom,Your product column highlighted (accent bg or green). Competitors neutral. Checkmarks green.,"Table row hover highlight, feature checkmark animations, sticky comparison header",Show value vs competitors. 35% higher conversion. Be factual. Include pricing if favorable.
  15 +14,Pricing-Focused Landing,"pricing, price, cost, plans, subscription","1. Hero (value proposition), 2. Pricing cards (3 tiers), 3. Feature comparison, 4. FAQ, 5. Final CTA",Each pricing card + Sticky CTA in nav + Bottom,Popular plan highlighted (brand color border/bg). Free: grey. Enterprise: dark/premium.,"Price toggle monthly/annual animation, card hover lift, FAQ accordion smooth open",Annual discount 20-30%. Recommend mid-tier (most popular badge). Address objections in FAQ.
  16 +15,App Store Style Landing,"app, mobile, download, store, install","1. Hero with device mockup, 2. Screenshots carousel, 3. Features with icons, 4. Reviews/ratings, 5. Download CTAs",Download buttons prominent (App Store + Play Store) throughout,Dark/light matching app store feel. Star ratings in gold. Screenshots with device frames.,"Device mockup rotations, screenshot slider, star rating animations, download button pulse",Show real screenshots. Include ratings (4.5+ stars). QR code for mobile. Platform-specific CTAs.
  17 +16,FAQ/Documentation Landing,"faq, documentation, help, support, questions","1. Hero with search bar, 2. Popular categories, 3. FAQ accordion, 4. Contact/support CTA",Search bar prominent + Contact CTA for unresolved questions,"Clean, high readability. Minimal color. Category icons in brand color. Success green for resolved.","Search autocomplete, smooth accordion open/close, category hover, helpful feedback buttons",Reduce support tickets. Track search analytics. Show related articles. Contact escalation path.
  18 +17,Immersive/Interactive Experience,"immersive, interactive, experience, 3d, animation","1. Full-screen interactive element, 2. Guided product tour, 3. Key benefits revealed, 4. CTA after completion",After interaction complete + Skip option for impatient users,Immersive experience colors. Dark background for focus. Highlight interactive elements.,"WebGL, 3D interactions, gamification elements, progress indicators, reward animations",40% higher engagement. Performance trade-off. Provide skip option. Mobile fallback essential.
  19 +18,Event/Conference Landing,"event, conference, meetup, registration, schedule","1. Hero (date/location/countdown), 2. Speakers grid, 3. Agenda/schedule, 4. Sponsors, 5. Register CTA",Register CTA sticky + After speakers + Bottom,Urgency colors (countdown). Event branding. Speaker cards professional. Sponsor logos neutral.,"Countdown timer, speaker hover cards with bio, agenda tabs, early bird countdown",Early bird pricing with deadline. Social proof (past attendees). Speaker credibility. Multi-ticket discounts.
  20 +19,Product Review/Ratings Focused,"reviews, ratings, testimonials, social-proof, stars","1. Hero (product + aggregate rating), 2. Rating breakdown, 3. Individual reviews, 4. Buy/CTA",After reviews summary + Buy button alongside reviews,Trust colors. Star ratings gold. Verified badge green. Review sentiment colors.,"Star fill animations, review filtering, helpful vote interactions, photo lightbox",User-generated content builds trust. Show verified purchases. Filter by rating. Respond to negative reviews.
  21 +20,Community/Forum Landing,"community, forum, social, members, discussion","1. Hero (community value prop), 2. Popular topics/categories, 3. Active members showcase, 4. Join CTA",Join button prominent + After member showcase,"Warm, welcoming. Member photos add humanity. Topic badges in brand colors. Activity indicators green.","Member avatars animation, activity feed live updates, topic hover previews, join success celebration","Show active community (member count, posts today). Highlight benefits. Preview content. Easy onboarding."
  22 +21,Before-After Transformation,"before-after, transformation, results, comparison","1. Hero (problem state), 2. Transformation slider/comparison, 3. How it works, 4. Results CTA",After transformation reveal + Bottom,Contrast: muted/grey (before) vs vibrant/colorful (after). Success green for results.,"Slider comparison interaction, before/after reveal animations, result counters, testimonial videos",Visual proof of value. 45% higher conversion. Real results. Specific metrics. Guarantee offer.
  23 +22,Marketplace / Directory,"marketplace, directory, search, listing","1. Hero (Search focused), 2. Categories, 3. Featured Listings, 4. Trust/Safety, 5. CTA (Become a host/seller)",Hero Search Bar + Navbar 'List your item',Search: High contrast. Categories: Visual icons. Trust: Blue/Green.,Search autocomplete animation, map hover pins, card carousel,Search bar is the CTA. Reduce friction to search. Popular searches suggestions.
  24 +23,Newsletter / Content First,"newsletter, content, writer, blog, subscribe","1. Hero (Value Prop + Form), 2. Recent Issues/Archives, 3. Social Proof (Subscriber count), 4. About Author",Hero inline form + Sticky header form,Minimalist. Paper-like background. Text focus. Accent color for Subscribe.,Text highlight animations, typewriter effect, subtle fade-in,Single field form (Email only). Show 'Join X,000 readers'. Read sample link.
  25 +24,Webinar Registration,"webinar, registration, event, training, live","1. Hero (Topic + Timer + Form), 2. What you'll learn, 3. Speaker Bio, 4. Urgency/Bonuses, 5. Form (again)",Hero (Right side form) + Bottom anchor,Urgency: Red/Orange. Professional: Blue/Navy. Form: High contrast white.,Countdown timer, speaker avatar float, urgent ticker,Limited seats logic. 'Live' indicator. Auto-fill timezone.
  26 +25,Enterprise Gateway,"enterprise, corporate, gateway, solutions, portal","1. Hero (Video/Mission), 2. Solutions by Industry, 3. Solutions by Role, 4. Client Logos, 5. Contact Sales",Contact Sales (Primary) + Login (Secondary),Corporate: Navy/Grey. High integrity. Conservative accents.,Slow video background, logo carousel, tab switching for industries,Path selection (I am a...). Mega menu navigation. Trust signals prominent.
  27 +26,Portfolio Grid,"portfolio, grid, showcase, gallery, masonry","1. Hero (Name/Role), 2. Project Grid (Masonry), 3. About/Philosophy, 4. Contact",Project Card Hover + Footer Contact,Neutral background (let work shine). Text: Black/White. Accent: Minimal.,Image lazy load reveal, hover overlay info, lightbox view,Visuals first. Filter by category. Fast loading essential.
  28 +27,Horizontal Scroll Journey,"horizontal, scroll, journey, gallery, storytelling, panoramic","1. Intro (Vertical), 2. The Journey (Horizontal Track), 3. Detail Reveal, 4. Vertical Footer","Floating Sticky CTA or End of Horizontal Track","Continuous palette transition. Chapter colors. Progress bar #000000.","Scroll-jacking (careful), parallax layers, horizontal slide, progress indicator","Immersive product discovery. High engagement. Keep navigation visible.
  29 +28,Bento Grid Showcase,"bento, grid, features, modular, apple-style, showcase","1. Hero, 2. Bento Grid (Key Features), 3. Detail Cards, 4. Tech Specs, 5. CTA","Floating Action Button or Bottom of Grid","Card backgrounds: #F5F5F7 or Glass. Icons: Vibrant brand colors. Text: Dark.","Hover card scale (1.02), video inside cards, tilt effect, staggered reveal","Scannable value props. High information density without clutter. Mobile stack.
  30 +29,Interactive 3D Configurator,"3d, configurator, customizer, interactive, product","1. Hero (Configurator), 2. Feature Highlight (synced), 3. Price/Specs, 4. Purchase","Inside Configurator UI + Sticky Bottom Bar","Neutral studio background. Product: Realistic materials. UI: Minimal overlay.","Real-time rendering, material swap animation, camera rotate/zoom, light reflection","Increases ownership feeling. 360 view reduces return rates. Direct add-to-cart.
  31 +30,AI-Driven Dynamic Landing,"ai, dynamic, personalized, adaptive, generative","1. Prompt/Input Hero, 2. Generated Result Preview, 3. How it Works, 4. Value Prop","Input Field (Hero) + 'Try it' Buttons","Adaptive to user input. Dark mode for compute feel. Neon accents.","Typing text effects, shimmering generation loaders, morphing layouts","Immediate value demonstration. 'Show, don't tell'. Low friction start.
0 32 \ No newline at end of file
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/products.csv 0 → 100644
  1 +No,Product Type,Keywords,Primary Style Recommendation,Secondary Styles,Landing Page Pattern,Dashboard Style (if applicable),Color Palette Focus,Key Considerations
  2 +1,SaaS (General),"app, b2b, cloud, general, saas, software, subscription",Glassmorphism + Flat Design,"Soft UI Evolution, Minimalism",Hero + Features + CTA,Data-Dense + Real-Time Monitoring,Trust blue + accent contrast,Balance modern feel with clarity. Focus on CTAs.
  3 +2,Micro SaaS,"app, b2b, cloud, indie, micro, micro-saas, niche, saas, small, software, solo, subscription",Flat Design + Vibrant & Block,"Motion-Driven, Micro-interactions",Minimal & Direct + Demo,Executive Dashboard,Vibrant primary + white space,"Keep simple, show product quickly. Speed is key."
  4 +3,E-commerce,"buy, commerce, e, ecommerce, products, retail, sell, shop, store",Vibrant & Block-based,"Aurora UI, Motion-Driven",Feature-Rich Showcase,Sales Intelligence Dashboard,Brand primary + success green,Engagement & conversions. High visual hierarchy.
  5 +4,E-commerce Luxury,"buy, commerce, e, ecommerce, elegant, exclusive, high-end, luxury, premium, products, retail, sell, shop, store",Liquid Glass + Glassmorphism,"3D & Hyperrealism, Aurora UI",Feature-Rich Showcase,Sales Intelligence Dashboard,Premium colors + minimal accent,Elegance & sophistication. Premium materials.
  6 +5,Service Landing Page,"appointment, booking, consultation, conversion, landing, marketing, page, service",Hero-Centric + Trust & Authority,"Social Proof-Focused, Storytelling",Hero-Centric Design,N/A - Analytics for conversions,Brand primary + trust colors,Social proof essential. Show expertise.
  7 +6,B2B Service,"appointment, b, b2b, booking, business, consultation, corporate, enterprise, service",Trust & Authority + Minimal,"Feature-Rich, Conversion-Optimized",Feature-Rich Showcase,Sales Intelligence Dashboard,Professional blue + neutral grey,Credibility essential. Clear ROI messaging.
  8 +7,Financial Dashboard,"admin, analytics, dashboard, data, financial, panel",Dark Mode (OLED) + Data-Dense,"Minimalism, Accessible & Ethical",N/A - Dashboard focused,Financial Dashboard,Dark bg + red/green alerts + trust blue,"High contrast, real-time updates, accuracy paramount."
  9 +8,Analytics Dashboard,"admin, analytics, dashboard, data, panel",Data-Dense + Heat Map & Heatmap,"Minimalism, Dark Mode (OLED)",N/A - Analytics focused,Drill-Down Analytics + Comparative,Cool→Hot gradients + neutral grey,Clarity > aesthetics. Color-coded data priority.
  10 +9,Healthcare App,"app, clinic, health, healthcare, medical, patient",Neumorphism + Accessible & Ethical,"Soft UI Evolution, Claymorphism (for patients)",Social Proof-Focused,User Behavior Analytics,Calm blue + health green + trust,Accessibility mandatory. Calming aesthetic.
  11 +10,Educational App,"app, course, education, educational, learning, school, training",Claymorphism + Micro-interactions,"Vibrant & Block-based, Flat Design",Storytelling-Driven,User Behavior Analytics,Playful colors + clear hierarchy,Engagement & ease of use. Age-appropriate design.
  12 +11,Creative Agency,"agency, creative, design, marketing, studio",Brutalism + Motion-Driven,"Retro-Futurism, Storytelling-Driven",Storytelling-Driven,N/A - Portfolio focused,Bold primaries + artistic freedom,Differentiation key. Wow-factor necessary.
  13 +12,Portfolio/Personal,"creative, personal, portfolio, projects, showcase, work",Motion-Driven + Minimalism,"Brutalism, Aurora UI",Storytelling-Driven,N/A - Personal branding,Brand primary + artistic interpretation,Showcase work. Personality shine through.
  14 +13,Gaming,"entertainment, esports, game, gaming, play",3D & Hyperrealism + Retro-Futurism,"Motion-Driven, Vibrant & Block",Feature-Rich Showcase,N/A - Game focused,Vibrant + neon + immersive colors,Immersion priority. Performance critical.
  15 +14,Government/Public Service,"appointment, booking, consultation, government, public, service",Accessible & Ethical + Minimalism,"Flat Design, Inclusive Design",Minimal & Direct,Executive Dashboard,Professional blue + high contrast,WCAG AAA mandatory. Trust paramount.
  16 +15,Fintech/Crypto,"banking, blockchain, crypto, defi, finance, fintech, money, nft, payment, web3",Glassmorphism + Dark Mode (OLED),"Retro-Futurism, Motion-Driven",Conversion-Optimized,Real-Time Monitoring + Predictive,Dark tech colors + trust + vibrant accents,Security perception. Real-time data critical.
  17 +16,Social Media App,"app, community, content, entertainment, media, network, sharing, social, streaming, users, video",Vibrant & Block-based + Motion-Driven,"Aurora UI, Micro-interactions",Feature-Rich Showcase,User Behavior Analytics,Vibrant + engagement colors,Engagement & retention. Addictive design ethics.
  18 +17,Productivity Tool,"collaboration, productivity, project, task, tool, workflow",Flat Design + Micro-interactions,"Minimalism, Soft UI Evolution",Interactive Product Demo,Drill-Down Analytics,Clear hierarchy + functional colors,Ease of use. Speed & efficiency focus.
  19 +18,Design System/Component Library,"component, design, library, system",Minimalism + Accessible & Ethical,"Flat Design, Zero Interface",Feature-Rich Showcase,N/A - Dev focused,Clear hierarchy + code-like structure,Consistency. Developer-first approach.
  20 +19,AI/Chatbot Platform,"ai, artificial-intelligence, automation, chatbot, machine-learning, ml, platform",AI-Native UI + Minimalism,"Zero Interface, Glassmorphism",Interactive Product Demo,AI/ML Analytics Dashboard,Neutral + AI Purple (#6366F1),Conversational UI. Streaming text. Context awareness. Minimal chrome.
  21 +20,NFT/Web3 Platform,"nft, platform, web",Cyberpunk UI + Glassmorphism,"Aurora UI, 3D & Hyperrealism",Feature-Rich Showcase,Crypto/Blockchain Dashboard,Dark + Neon + Gold (#FFD700),Wallet integration. Transaction feedback. Gas fees display. Dark mode essential.
  22 +21,Creator Economy Platform,"creator, economy, platform",Vibrant & Block-based + Bento Box Grid,"Motion-Driven, Aurora UI",Social Proof-Focused,User Behavior Analytics,Vibrant + Brand colors,Creator profiles. Monetization display. Engagement metrics. Social proof.
  23 +22,Sustainability/ESG Platform,"ai, artificial-intelligence, automation, esg, machine-learning, ml, platform, sustainability",Organic Biophilic + Minimalism,"Accessible & Ethical, Flat Design",Trust & Authority,Energy/Utilities Dashboard,Green (#228B22) + Earth tones,Carbon footprint visuals. Progress indicators. Certification badges. Eco-friendly imagery.
  24 +23,Remote Work/Collaboration Tool,"collaboration, remote, tool, work",Soft UI Evolution + Minimalism,"Glassmorphism, Micro-interactions",Feature-Rich Showcase,Drill-Down Analytics,Calm Blue + Neutral grey,Real-time collaboration. Status indicators. Video integration. Notification management.
  25 +24,Mental Health App,"app, health, mental",Neumorphism + Accessible & Ethical,"Claymorphism, Soft UI Evolution",Social Proof-Focused,Healthcare Analytics,Calm Pastels + Trust colors,Calming aesthetics. Privacy-first. Crisis resources. Progress tracking. Accessibility mandatory.
  26 +25,Pet Tech App,"app, pet, tech",Claymorphism + Vibrant & Block-based,"Micro-interactions, Flat Design",Storytelling-Driven,User Behavior Analytics,Playful + Warm colors,Pet profiles. Health tracking. Playful UI. Photo galleries. Vet integration.
  27 +26,Smart Home/IoT Dashboard,"admin, analytics, dashboard, data, home, iot, panel, smart",Glassmorphism + Dark Mode (OLED),"Minimalism, AI-Native UI",Interactive Product Demo,Real-Time Monitoring,Dark + Status indicator colors,Device status. Real-time controls. Energy monitoring. Automation rules. Quick actions.
  28 +27,EV/Charging Ecosystem,"charging, ecosystem, ev",Minimalism + Aurora UI,"Glassmorphism, Organic Biophilic",Hero-Centric Design,Energy/Utilities Dashboard,Electric Blue (#009CD1) + Green,Charging station maps. Range estimation. Cost calculation. Environmental impact.
  29 +28,Subscription Box Service,"appointment, booking, box, consultation, membership, plan, recurring, service, subscription",Vibrant & Block-based + Motion-Driven,"Claymorphism, Aurora UI",Feature-Rich Showcase,E-commerce Analytics,Brand + Excitement colors,Unboxing experience. Personalization quiz. Subscription management. Product reveals.
  30 +29,Podcast Platform,"platform, podcast",Dark Mode (OLED) + Minimalism,"Motion-Driven, Vibrant & Block-based",Storytelling-Driven,Media/Entertainment Dashboard,Dark + Audio waveform accents,Audio player UX. Episode discovery. Creator tools. Analytics for podcasters.
  31 +30,Dating App,"app, dating",Vibrant & Block-based + Motion-Driven,"Aurora UI, Glassmorphism",Social Proof-Focused,User Behavior Analytics,Warm + Romantic (Pink/Red gradients),Profile cards. Swipe interactions. Match animations. Safety features. Video chat.
  32 +31,Micro-Credentials/Badges Platform,"badges, credentials, micro, platform",Minimalism + Flat Design,"Accessible & Ethical, Swiss Modernism 2.0",Trust & Authority,Education Dashboard,Trust Blue + Gold (#FFD700),Credential verification. Badge display. Progress tracking. Issuer trust. LinkedIn integration.
  33 +32,Knowledge Base/Documentation,"base, documentation, knowledge",Minimalism + Accessible & Ethical,"Swiss Modernism 2.0, Flat Design",FAQ/Documentation,N/A - Documentation focused,Clean hierarchy + minimal color,Search-first. Clear navigation. Code highlighting. Version switching. Feedback system.
  34 +33,Hyperlocal Services,"appointment, booking, consultation, hyperlocal, service, services",Minimalism + Vibrant & Block-based,"Micro-interactions, Flat Design",Conversion-Optimized,Drill-Down Analytics + Map,Location markers + Trust colors,Map integration. Service categories. Provider profiles. Booking system. Reviews.
  35 +34,Beauty/Spa/Wellness Service,"appointment, beauty, booking, consultation, service, spa, wellness",Soft UI Evolution + Neumorphism,"Glassmorphism, Minimalism",Hero-Centric Design + Social Proof,User Behavior Analytics,Soft pastels (Pink #FFB6C1 Sage #90EE90) + Cream + Gold accents,Calming aesthetic. Booking system. Service menu. Before/after gallery. Testimonials. Relaxing imagery.
  36 +35,Luxury/Premium Brand,"brand, elegant, exclusive, high-end, luxury, premium",Liquid Glass + Glassmorphism,"Minimalism, 3D & Hyperrealism",Storytelling-Driven + Feature-Rich,Sales Intelligence Dashboard,Black + Gold (#FFD700) + White + Minimal accent,Elegance paramount. Premium imagery. Storytelling. High-quality visuals. Exclusive feel.
  37 +36,Restaurant/Food Service,"appointment, booking, consultation, delivery, food, menu, order, restaurant, service",Vibrant & Block-based + Motion-Driven,"Claymorphism, Flat Design",Hero-Centric Design + Conversion,N/A - Booking focused,Warm colors (Orange Red Brown) + appetizing imagery,Menu display. Online ordering. Reservation system. Food photography. Location/hours prominent.
  38 +37,Fitness/Gym App,"app, exercise, fitness, gym, health, workout",Vibrant & Block-based + Dark Mode (OLED),"Motion-Driven, Neumorphism",Feature-Rich Showcase,User Behavior Analytics,Energetic (Orange #FF6B35 Electric Blue) + Dark bg,Progress tracking. Workout plans. Community features. Achievements. Motivational design.
  39 +38,Real Estate/Property,"buy, estate, housing, property, real, real-estate, rent",Glassmorphism + Minimalism,"Motion-Driven, 3D & Hyperrealism",Hero-Centric Design + Feature-Rich,Sales Intelligence Dashboard,Trust Blue (#0077B6) + Gold accents + White,Property listings. Virtual tours. Map integration. Agent profiles. Mortgage calculator. High-quality imagery.
  40 +39,Travel/Tourism Agency,"agency, booking, creative, design, flight, hotel, marketing, studio, tourism, travel, vacation",Aurora UI + Motion-Driven,"Vibrant & Block-based, Glassmorphism",Storytelling-Driven + Hero-Centric,Booking Analytics,Vibrant destination colors + Sky Blue + Warm accents,Destination showcase. Booking system. Itinerary builder. Reviews. Inspiration galleries. Mobile-first.
  41 +40,Hotel/Hospitality,"hospitality, hotel",Liquid Glass + Minimalism,"Glassmorphism, Soft UI Evolution",Hero-Centric Design + Social Proof,Revenue Management Dashboard,Warm neutrals + Gold (#D4AF37) + Brand accent,Room booking. Amenities showcase. Location maps. Guest reviews. Seasonal pricing. Luxury imagery.
  42 +41,Wedding/Event Planning,"conference, event, meetup, planning, registration, ticket, wedding",Soft UI Evolution + Aurora UI,"Glassmorphism, Motion-Driven",Storytelling-Driven + Social Proof,N/A - Planning focused,Soft Pink (#FFD6E0) + Gold + Cream + Sage,Portfolio gallery. Vendor directory. Planning tools. Timeline. Budget tracker. Romantic aesthetic.
  43 +42,Legal Services,"appointment, attorney, booking, compliance, consultation, contract, law, legal, service, services",Trust & Authority + Minimalism,"Accessible & Ethical, Swiss Modernism 2.0",Trust & Authority + Minimal,Case Management Dashboard,Navy Blue (#1E3A5F) + Gold + White,Credibility paramount. Practice areas. Attorney profiles. Case results. Contact forms. Professional imagery.
  44 +43,Insurance Platform,"insurance, platform",Trust & Authority + Flat Design,"Accessible & Ethical, Minimalism",Conversion-Optimized + Trust,Claims Analytics Dashboard,Trust Blue (#0066CC) + Green (security) + Neutral,Quote calculator. Policy comparison. Claims process. Trust signals. Clear pricing. Security badges.
  45 +44,Banking/Traditional Finance,"banking, finance, traditional",Minimalism + Accessible & Ethical,"Trust & Authority, Dark Mode (OLED)",Trust & Authority + Feature-Rich,Financial Dashboard,Navy (#0A1628) + Trust Blue + Gold accents,Security-first. Account overview. Transaction history. Mobile banking. Accessibility critical. Trust paramount.
  46 +45,Online Course/E-learning,"course, e, learning, online",Claymorphism + Vibrant & Block-based,"Motion-Driven, Flat Design",Feature-Rich Showcase + Social Proof,Education Dashboard,Vibrant learning colors + Progress green,Course catalog. Progress tracking. Video player. Quizzes. Certificates. Community forums. Gamification.
  47 +46,Non-profit/Charity,"charity, non, profit",Accessible & Ethical + Organic Biophilic,"Minimalism, Storytelling-Driven",Storytelling-Driven + Trust,Donation Analytics Dashboard,Cause-related colors + Trust + Warm,Impact stories. Donation flow. Transparency reports. Volunteer signup. Event calendar. Emotional connection.
  48 +47,Music Streaming,"music, streaming",Dark Mode (OLED) + Vibrant & Block-based,"Motion-Driven, Aurora UI",Feature-Rich Showcase,Media/Entertainment Dashboard,Dark (#121212) + Vibrant accents + Album art colors,Audio player. Playlist management. Artist pages. Personalization. Social features. Waveform visualizations.
  49 +48,Video Streaming/OTT,"ott, streaming, video",Dark Mode (OLED) + Motion-Driven,"Glassmorphism, Vibrant & Block-based",Hero-Centric Design + Feature-Rich,Media/Entertainment Dashboard,Dark bg + Content poster colors + Brand accent,Video player. Content discovery. Watchlist. Continue watching. Personalized recommendations. Thumbnail-heavy.
  50 +49,Job Board/Recruitment,"board, job, recruitment",Flat Design + Minimalism,"Vibrant & Block-based, Accessible & Ethical",Conversion-Optimized + Feature-Rich,HR Analytics Dashboard,Professional Blue + Success Green + Neutral,Job listings. Search/filter. Company profiles. Application tracking. Resume upload. Salary insights.
  51 +50,Marketplace (P2P),"buyers, listings, marketplace, p, platform, sellers",Vibrant & Block-based + Flat Design,"Micro-interactions, Trust & Authority",Feature-Rich Showcase + Social Proof,E-commerce Analytics,Trust colors + Category colors + Success green,Seller/buyer profiles. Listings. Reviews/ratings. Secure payment. Messaging. Search/filter. Trust badges.
  52 +51,Logistics/Delivery,"delivery, logistics",Minimalism + Flat Design,"Dark Mode (OLED), Micro-interactions",Feature-Rich Showcase + Conversion,Real-Time Monitoring + Route Analytics,Blue (#2563EB) + Orange (tracking) + Green (delivered),Real-time tracking. Delivery scheduling. Route optimization. Driver management. Status updates. Map integration.
  53 +52,Agriculture/Farm Tech,"agriculture, farm, tech",Organic Biophilic + Flat Design,"Minimalism, Accessible & Ethical",Feature-Rich Showcase + Trust,IoT Sensor Dashboard,Earth Green (#4A7C23) + Brown + Sky Blue,Crop monitoring. Weather data. IoT sensors. Yield tracking. Market prices. Sustainable imagery.
  54 +53,Construction/Architecture,"architecture, construction",Minimalism + 3D & Hyperrealism,"Brutalism, Swiss Modernism 2.0",Hero-Centric Design + Feature-Rich,Project Management Dashboard,Grey (#4A4A4A) + Orange (safety) + Blueprint Blue,Project portfolio. 3D renders. Timeline. Material specs. Team collaboration. Blueprint aesthetic.
  55 +54,Automotive/Car Dealership,"automotive, car, dealership",Motion-Driven + 3D & Hyperrealism,"Dark Mode (OLED), Glassmorphism",Hero-Centric Design + Feature-Rich,Sales Intelligence Dashboard,Brand colors + Metallic accents + Dark/Light,Vehicle showcase. 360° views. Comparison tools. Financing calculator. Test drive booking. High-quality imagery.
  56 +55,Photography Studio,"photography, studio",Motion-Driven + Minimalism,"Aurora UI, Glassmorphism",Storytelling-Driven + Hero-Centric,N/A - Portfolio focused,Black + White + Minimal accent,Portfolio gallery. Before/after. Service packages. Booking system. Client galleries. Full-bleed imagery.
  57 +56,Coworking Space,"coworking, space",Vibrant & Block-based + Glassmorphism,"Minimalism, Motion-Driven",Hero-Centric Design + Feature-Rich,Occupancy Dashboard,Energetic colors + Wood tones + Brand accent,Space tour. Membership plans. Booking system. Amenities. Community events. Virtual tour.
  58 +57,Cleaning Service,"appointment, booking, cleaning, consultation, service",Soft UI Evolution + Flat Design,"Minimalism, Micro-interactions",Conversion-Optimized + Trust,Service Analytics,Fresh Blue (#00B4D8) + Clean White + Green,Service packages. Booking system. Price calculator. Before/after gallery. Reviews. Trust badges.
  59 +58,Home Services (Plumber/Electrician),"appointment, booking, consultation, electrician, home, plumber, service, services",Flat Design + Trust & Authority,"Minimalism, Accessible & Ethical",Conversion-Optimized + Trust,Service Analytics,Trust Blue + Safety Orange + Professional grey,Service list. Emergency contact. Booking. Price transparency. Certifications. Local trust signals.
  60 +59,Childcare/Daycare,"childcare, daycare",Claymorphism + Vibrant & Block-based,"Soft UI Evolution, Accessible & Ethical",Social Proof-Focused + Trust,Parent Dashboard,Playful pastels + Safe colors + Warm accents,Programs. Staff profiles. Safety certifications. Parent portal. Activity updates. Cheerful imagery.
  61 +60,Senior Care/Elderly,"care, elderly, senior",Accessible & Ethical + Soft UI Evolution,"Minimalism, Neumorphism",Trust & Authority + Social Proof,Healthcare Analytics,Calm Blue + Warm neutrals + Large text,Care services. Staff qualifications. Facility tour. Family portal. Large touch targets. High contrast. Accessibility-first.
  62 +61,Medical Clinic,"clinic, medical",Accessible & Ethical + Minimalism,"Neumorphism, Trust & Authority",Trust & Authority + Conversion,Healthcare Analytics,Medical Blue (#0077B6) + Trust White + Calm Green,Services. Doctor profiles. Online booking. Patient portal. Insurance info. HIPAA compliant. Trust signals.
  63 +62,Pharmacy/Drug Store,"drug, pharmacy, store",Flat Design + Accessible & Ethical,"Minimalism, Trust & Authority",Conversion-Optimized + Trust,Inventory Dashboard,Pharmacy Green + Trust Blue + Clean White,Product catalog. Prescription upload. Refill reminders. Health info. Store locator. Safety certifications.
  64 +63,Dental Practice,"dental, practice",Soft UI Evolution + Minimalism,"Accessible & Ethical, Trust & Authority",Social Proof-Focused + Conversion,Patient Analytics,Fresh Blue + White + Smile Yellow accent,Services. Dentist profiles. Before/after. Online booking. Insurance. Patient testimonials. Friendly imagery.
  65 +64,Veterinary Clinic,"clinic, veterinary",Claymorphism + Accessible & Ethical,"Soft UI Evolution, Flat Design",Social Proof-Focused + Trust,Pet Health Dashboard,Caring Blue + Pet-friendly colors + Warm accents,Pet services. Vet profiles. Online booking. Pet portal. Emergency info. Friendly animal imagery.
  66 +65,Florist/Plant Shop,"florist, plant, shop",Organic Biophilic + Vibrant & Block-based,"Aurora UI, Motion-Driven",Hero-Centric Design + Conversion,E-commerce Analytics,Natural Green + Floral pinks/purples + Earth tones,Product catalog. Occasion categories. Delivery scheduling. Care guides. Seasonal collections. Beautiful imagery.
  67 +66,Bakery/Cafe,"bakery, cafe",Vibrant & Block-based + Soft UI Evolution,"Claymorphism, Motion-Driven",Hero-Centric Design + Conversion,N/A - Order focused,Warm Brown + Cream + Appetizing accents,Menu display. Online ordering. Location/hours. Catering. Seasonal specials. Appetizing photography.
  68 +67,Coffee Shop,"coffee, shop",Minimalism + Organic Biophilic,"Soft UI Evolution, Flat Design",Hero-Centric Design + Conversion,N/A - Order focused,Coffee Brown (#6F4E37) + Cream + Warm accents,Menu. Online ordering. Loyalty program. Location. Story/origin. Cozy aesthetic.
  69 +68,Brewery/Winery,"brewery, winery",Motion-Driven + Storytelling-Driven,"Dark Mode (OLED), Organic Biophilic",Storytelling-Driven + Hero-Centric,N/A - E-commerce focused,Deep amber/burgundy + Gold + Craft aesthetic,Product showcase. Story/heritage. Tasting notes. Events. Club membership. Artisanal imagery.
  70 +69,Airline,"ai, airline, artificial-intelligence, automation, machine-learning, ml",Minimalism + Glassmorphism,"Motion-Driven, Accessible & Ethical",Conversion-Optimized + Feature-Rich,Operations Dashboard,Sky Blue + Brand colors + Trust accents,Flight search. Booking. Check-in. Boarding pass. Loyalty program. Route maps. Mobile-first.
  71 +70,News/Media Platform,"content, entertainment, media, news, platform, streaming, video",Minimalism + Flat Design,"Dark Mode (OLED), Accessible & Ethical",Hero-Centric Design + Feature-Rich,Media Analytics Dashboard,Brand colors + High contrast + Category colors,Article layout. Breaking news. Categories. Search. Subscription. Mobile reading. Fast loading.
  72 +71,Magazine/Blog,"articles, blog, content, magazine, posts, writing",Swiss Modernism 2.0 + Motion-Driven,"Minimalism, Aurora UI",Storytelling-Driven + Hero-Centric,Content Analytics,Editorial colors + Brand primary + Clean white,Article showcase. Category navigation. Author profiles. Newsletter signup. Related content. Typography-focused.
  73 +72,Freelancer Platform,"freelancer, platform",Flat Design + Minimalism,"Vibrant & Block-based, Micro-interactions",Feature-Rich Showcase + Conversion,Marketplace Analytics,Professional Blue + Success Green + Neutral,Profile creation. Portfolio. Skill matching. Messaging. Payment. Reviews. Project management.
  74 +73,Consulting Firm,"consulting, firm",Trust & Authority + Minimalism,"Swiss Modernism 2.0, Accessible & Ethical",Trust & Authority + Feature-Rich,N/A - Lead generation,Navy + Gold + Professional grey,Service areas. Case studies. Team profiles. Thought leadership. Contact. Professional credibility.
  75 +74,Marketing Agency,"agency, creative, design, marketing, studio",Brutalism + Motion-Driven,"Vibrant & Block-based, Aurora UI",Storytelling-Driven + Feature-Rich,Campaign Analytics,Bold brand colors + Creative freedom,Portfolio. Case studies. Services. Team. Creative showcase. Results-focused. Bold aesthetic.
  76 +75,Event Management,"conference, event, management, meetup, registration, ticket",Vibrant & Block-based + Motion-Driven,"Glassmorphism, Aurora UI",Hero-Centric Design + Feature-Rich,Event Analytics,Event theme colors + Excitement accents,Event showcase. Registration. Agenda. Speakers. Sponsors. Ticket sales. Countdown timer.
  77 +76,Conference/Webinar Platform,"conference, platform, webinar",Glassmorphism + Minimalism,"Motion-Driven, Flat Design",Feature-Rich Showcase + Conversion,Attendee Analytics,Professional Blue + Video accent + Brand,Registration. Agenda. Speaker profiles. Live stream. Networking. Recording access. Virtual event features.
  78 +77,Membership/Community,"community, membership",Vibrant & Block-based + Soft UI Evolution,"Bento Box Grid, Micro-interactions",Social Proof-Focused + Conversion,Community Analytics,Community brand colors + Engagement accents,Member benefits. Pricing tiers. Community showcase. Events. Member directory. Exclusive content.
  79 +78,Newsletter Platform,"newsletter, platform",Minimalism + Flat Design,"Swiss Modernism 2.0, Accessible & Ethical",Minimal & Direct + Conversion,Email Analytics,Brand primary + Clean white + CTA accent,Subscribe form. Archive. About. Social proof. Sample content. Simple conversion.
  80 +79,Digital Products/Downloads,"digital, downloads, products",Vibrant & Block-based + Motion-Driven,"Glassmorphism, Bento Box Grid",Feature-Rich Showcase + Conversion,E-commerce Analytics,Product category colors + Brand + Success green,Product showcase. Preview. Pricing. Instant delivery. License management. Customer reviews.
  81 +80,Church/Religious Organization,"church, organization, religious",Accessible & Ethical + Soft UI Evolution,"Minimalism, Trust & Authority",Hero-Centric Design + Social Proof,N/A - Community focused,Warm Gold + Deep Purple/Blue + White,Service times. Events. Sermons. Community. Giving. Location. Welcoming imagery.
  82 +81,Sports Team/Club,"club, sports, team",Vibrant & Block-based + Motion-Driven,"Dark Mode (OLED), 3D & Hyperrealism",Hero-Centric Design + Feature-Rich,Performance Analytics,Team colors + Energetic accents,Schedule. Roster. News. Tickets. Merchandise. Fan engagement. Action imagery.
  83 +82,Museum/Gallery,"gallery, museum",Minimalism + Motion-Driven,"Swiss Modernism 2.0, 3D & Hyperrealism",Storytelling-Driven + Feature-Rich,Visitor Analytics,Art-appropriate neutrals + Exhibition accents,Exhibitions. Collections. Tickets. Events. Virtual tours. Educational content. Art-focused design.
  84 +83,Theater/Cinema,"cinema, theater",Dark Mode (OLED) + Motion-Driven,"Vibrant & Block-based, Glassmorphism",Hero-Centric Design + Conversion,Booking Analytics,Dark + Spotlight accents + Gold,Showtimes. Seat selection. Trailers. Coming soon. Membership. Dramatic imagery.
  85 +84,Language Learning App,"app, language, learning",Claymorphism + Vibrant & Block-based,"Micro-interactions, Flat Design",Feature-Rich Showcase + Social Proof,Learning Analytics,Playful colors + Progress indicators + Country flags,Lesson structure. Progress tracking. Gamification. Speaking practice. Community. Achievement badges.
  86 +85,Coding Bootcamp,"bootcamp, coding",Dark Mode (OLED) + Minimalism,"Cyberpunk UI, Flat Design",Feature-Rich Showcase + Social Proof,Student Analytics,Code editor colors + Brand + Success green,Curriculum. Projects. Career outcomes. Alumni. Pricing. Application. Terminal aesthetic.
  87 +86,Cybersecurity Platform,"cyber, security, platform",Cyberpunk UI + Dark Mode (OLED),"Neubrutalism, Minimal & Direct",Trust & Authority + Real-Time,Real-Time Monitoring + Heat Map,Matrix Green + Deep Black + Terminal feel,Data density. Threat visualization. Dark mode default.
  88 +87,Developer Tool / IDE,"dev, developer, tool, ide",Dark Mode (OLED) + Minimalism,"Flat Design, Bento Box Grid",Minimal & Direct + Documentation,Real-Time Monitor + Terminal,Dark syntax theme colors + Blue focus,Keyboard shortcuts. Syntax highlighting. Fast performance.
  89 +88,Biotech / Life Sciences,"biotech, biology, science",Glassmorphism + Clean Science,"Minimalism, Organic Biophilic",Storytelling-Driven + Research,Data-Dense + Predictive,Sterile White + DNA Blue + Life Green,Data accuracy. Cleanliness. Complex data viz.
  90 +89,Space Tech / Aerospace,"aerospace, space, tech",Holographic / HUD + Dark Mode,"Glassmorphism, 3D & Hyperrealism",Immersive Experience + Hero,Real-Time Monitoring + 3D,Deep Space Black + Star White + Metallic,High-tech feel. Precision. Telemetry data.
  91 +90,Architecture / Interior,"architecture, design, interior",Exaggerated Minimalism + High Imagery,"Swiss Modernism 2.0, Parallax",Portfolio Grid + Visuals,Project Management + Gallery,Monochrome + Gold Accent + High Imagery,High-res images. Typography. Space.
  92 +91,Quantum Computing Interface,"quantum, computing, physics, qubit, future, science",Holographic / HUD + Dark Mode,"Glassmorphism, Spatial UI",Immersive/Interactive Experience,3D Spatial Data + Real-Time Monitor,Quantum Blue #00FFFF + Deep Black + Interference patterns,Visualize complexity. Qubit states. Probability clouds. High-tech trust.
  93 +92,Biohacking / Longevity App,"biohacking, health, longevity, tracking, wellness, science",Biomimetic / Organic 2.0,"Minimalism, Dark Mode (OLED)",Data-Dense + Storytelling,Real-Time Monitor + Biological Data,Cellular Pink/Red + DNA Blue + Clean White,Personal data privacy. Scientific credibility. Biological visualizations.
  94 +93,Autonomous Drone Fleet Manager,"drone, autonomous, fleet, aerial, logistics, robotics",HUD / Sci-Fi FUI,"Real-Time Monitor, Spatial UI",Real-Time Monitor,Geographic + Real-Time,Tactical Green #00FF00 + Alert Red + Map Dark,Real-time telemetry. 3D spatial awareness. Latency indicators. Safety alerts.
  95 +94,Generative Art Platform,"art, generative, ai, creative, platform, gallery",Minimalism (Frame) + Gen Z Chaos,"Masonry Grid, Dark Mode",Bento Grid Showcase,Gallery / Portfolio,Neutral #F5F5F5 (Canvas) + User Content,Content is king. Fast loading. Creator attribution. Minting flow.
  96 +95,Spatial Computing OS / App,"spatial, vr, ar, vision, os, immersive, mixed-reality",Spatial UI (VisionOS),"Glassmorphism, 3D & Hyperrealism",Immersive/Interactive Experience,Spatial Dashboard,Frosted Glass + System Colors + Depth,Gaze/Pinch interaction. Depth hierarchy. Environment awareness.
  97 +96,Sustainable Energy / Climate Tech,"climate, energy, sustainable, green, tech, carbon",Organic Biophilic + E-Ink / Paper,"Data-Dense, Swiss Modernism",Interactive Demo + Data,Energy/Utilities Dashboard,Earth Green + Sky Blue + Solar Yellow,Data transparency. Impact visualization. Low-carbon web design.
0 98 \ No newline at end of file
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/prompts.csv 0 → 100644
  1 +STT,Style Category,AI Prompt Keywords (Copy-Paste Ready),CSS/Technical Keywords,Implementation Checklist,Design System Variables
  2 +1,Minimalism & Swiss Style,"Design a minimalist landing page. Use: white space, geometric layouts, sans-serif fonts, high contrast, grid-based structure, essential elements only. Avoid shadows and gradients. Focus on clarity and functionality.","display: grid, gap: 2rem, font-family: sans-serif, color: #000 or #FFF, max-width: 1200px, clean borders, no box-shadow unless necessary","☐ Grid-based layout 12-16 columns, ☐ Typography hierarchy clear, ☐ No unnecessary decorations, ☐ WCAG AAA contrast verified, ☐ Mobile responsive grid","--spacing: 2rem, --border-radius: 0px, --font-weight: 400-700, --shadow: none, --accent-color: single primary only"
  3 +2,Neumorphism,"Create a neumorphic UI with soft 3D effects. Use light pastels, rounded corners (12-16px), subtle soft shadows (multiple layers), no hard lines, monochromatic color scheme with light/dark variations. Embossed/debossed effect on interactive elements.","border-radius: 12-16px, box-shadow: -5px -5px 15px rgba(0,0,0,0.1), 5px 5px 15px rgba(255,255,255,0.8), background: linear-gradient(145deg, color1, color2), transform: scale on press","☐ Rounded corners 12-16px consistent, ☐ Multiple shadow layers (2-3), ☐ Pastel color verified, ☐ Monochromatic palette checked, ☐ Press animation smooth 150ms","--border-radius: 14px, --shadow-soft-1: -5px -5px 15px, --shadow-soft-2: 5px 5px 15px, --color-light: #F5F5F5, --color-primary: single pastel"
  4 +3,Glassmorphism,"Design a glassmorphic interface with frosted glass effect. Use backdrop blur (10-20px), translucent overlays (rgba 10-30% opacity), vibrant background colors, subtle borders, light source reflection, layered depth. Perfect for modern overlays and cards.","backdrop-filter: blur(15px), background: rgba(255, 255, 255, 0.15), border: 1px solid rgba(255,255,255,0.2), -webkit-backdrop-filter: blur(15px), z-index layering for depth","☐ Backdrop-filter blur 10-20px, ☐ Translucent white 15-30% opacity, ☐ Subtle border 1px light, ☐ Vibrant background verified, ☐ Text contrast 4.5:1 checked","--blur-amount: 15px, --glass-opacity: 0.15, --border-color: rgba(255,255,255,0.2), --background: vibrant color, --text-color: light/dark based on BG"
  5 +4,Brutalism,"Create a brutalist design with raw, unpolished, stark aesthetic. Use pure primary colors (red, blue, yellow), black & white, no smooth transitions (instant), sharp corners, bold large typography, visible grid lines, default system fonts, intentional 'broken' design elements.","border-radius: 0px, transition: none or 0s, font-family: system-ui or monospace, font-weight: 700+, border: visible 2-4px, colors: #FF0000, #0000FF, #FFFF00, #000000, #FFFFFF","☐ No border-radius (0px), ☐ No transitions (instant), ☐ Bold typography (700+), ☐ Pure primary colors used, ☐ Visible grid/borders, ☐ Asymmetric layout intentional","--border-radius: 0px, --transition-duration: 0s, --font-weight: 700-900, --colors: primary only, --border-style: visible, --grid-visible: true"
  6 +5,3D & Hyperrealism,"Build an immersive 3D interface using realistic textures, 3D models (Three.js/Babylon.js), complex shadows, realistic lighting, parallax scrolling (3-5 layers), physics-based motion. Include skeuomorphic elements with tactile detail.","transform: translate3d, perspective: 1000px, WebGL canvas, Three.js/Babylon.js library, box-shadow: complex multi-layer, background: complex gradients, filter: drop-shadow()","☐ WebGL/Three.js integrated, ☐ 3D models loaded, ☐ Parallax 3-5 layers, ☐ Realistic lighting verified, ☐ Complex shadows rendered, ☐ Physics animation smooth 300-400ms","--perspective: 1000px, --parallax-layers: 5, --lighting-intensity: realistic, --shadow-depth: 20-40%, --animation-duration: 300-400ms"
  7 +6,Vibrant & Block-based,"Design an energetic, vibrant interface with bold block layouts, geometric shapes, high color contrast, large typography (32px+), animated background patterns, duotone effects. Perfect for startups and youth-focused apps. Use 4-6 contrasting colors from complementary/triadic schemes.","display: flex/grid with large gaps (48px+), font-size: 32px+, background: animated patterns (CSS), color: neon/vibrant colors, animation: continuous pattern movement","☐ Block layout with 48px+ gaps, ☐ Large typography 32px+, ☐ 4-6 vibrant colors max, ☐ Animated patterns active, ☐ Scroll-snap enabled, ☐ High contrast verified (7:1+)","--block-gap: 48px, --typography-size: 32px+, --color-palette: 4-6 vibrant colors, --animation: continuous pattern, --contrast-ratio: 7:1+"
  8 +7,Dark Mode (OLED),"Create an OLED-optimized dark interface with deep black (#000000), dark grey (#121212), midnight blue accents. Use minimal glow effects, vibrant neon accents (green, blue, gold, purple), high contrast text. Optimize for eye comfort and OLED power saving.","background: #000000 or #121212, color: #FFFFFF or #E0E0E0, text-shadow: 0 0 10px neon-color (sparingly), filter: brightness(0.8) if needed, color-scheme: dark","☐ Deep black #000000 or #121212, ☐ Vibrant neon accents used, ☐ Text contrast 7:1+, ☐ Minimal glow effects, ☐ OLED power optimization, ☐ No white (#FFFFFF) background","--bg-black: #000000, --bg-dark-grey: #121212, --text-primary: #FFFFFF, --accent-neon: neon colors, --glow-effect: minimal, --oled-optimized: true"
  9 +8,Accessible & Ethical,"Design with WCAG AAA compliance. Include: high contrast (7:1+), large text (16px+), keyboard navigation, screen reader compatibility, focus states visible (3-4px ring), semantic HTML, ARIA labels, skip links, reduced motion support (prefers-reduced-motion), 44x44px touch targets.","color-contrast: 7:1+, font-size: 16px+, outline: 3-4px on :focus-visible, aria-label, role attributes, @media (prefers-reduced-motion), touch-target: 44x44px, cursor: pointer","☐ WCAG AAA verified, ☐ 7:1+ contrast checked, ☐ Keyboard navigation tested, ☐ Screen reader tested, ☐ Focus visible 3-4px, ☐ Semantic HTML used, ☐ Touch targets 44x44px","--contrast-ratio: 7:1, --font-size-min: 16px, --focus-ring: 3-4px, --touch-target: 44x44px, --wcag-level: AAA, --keyboard-accessible: true, --sr-tested: true"
  10 +9,Claymorphism,"Design a playful, toy-like interface with soft 3D, chunky elements, bubbly aesthetic, rounded edges (16-24px), thick borders (3-4px), double shadows (inner + outer), pastel colors, smooth animations. Perfect for children's apps and creative tools.","border-radius: 16-24px, border: 3-4px solid, box-shadow: inset -2px -2px 8px, 4px 4px 8px, background: pastel-gradient, animation: soft bounce (cubic-bezier 0.34, 1.56)","☐ Border-radius 16-24px, ☐ Thick borders 3-4px, ☐ Double shadows (inner+outer), ☐ Pastel colors used, ☐ Soft bounce animations, ☐ Playful interactions","--border-radius: 20px, --border-width: 3-4px, --shadow-inner: inset -2px -2px 8px, --shadow-outer: 4px 4px 8px, --color-palette: pastels, --animation: bounce"
  11 +10,Aurora UI,"Create a vibrant gradient interface inspired by Northern Lights with mesh gradients, smooth color blends, flowing animations. Use complementary color pairs (blue-orange, purple-yellow), flowing background gradients, subtle continuous animations (8-12s loops), iridescent effects.","background: conic-gradient or radial-gradient with multiple stops, animation: @keyframes gradient (8-12s), background-size: 200% 200%, filter: saturate(1.2), blend-mode: screen or multiply","☐ Mesh/flowing gradients applied, ☐ 8-12s animation loop, ☐ Complementary colors used, ☐ Smooth color transitions, ☐ Iridescent effect subtle, ☐ Text contrast verified","--gradient-colors: complementary pairs, --animation-duration: 8-12s, --blend-mode: screen, --color-saturation: 1.2, --effect: iridescent, --loop-smooth: true"
  12 +11,Retro-Futurism,"Build a retro-futuristic (cyberpunk/vaporwave) interface with neon colors (blue, pink, cyan), deep black background, 80s aesthetic, CRT scanlines, glitch effects, neon glow text/borders, monospace fonts, geometric patterns. Use neon text-shadow and animated glitch effects.","color: neon colors (#0080FF, #FF006E, #00FFFF), text-shadow: 0 0 10px neon, background: #000 or #1A1A2E, font-family: monospace, animation: glitch (skew+offset), filter: hue-rotate","☐ Neon colors used, ☐ CRT scanlines effect, ☐ Glitch animations active, ☐ Monospace font, ☐ Deep black background, ☐ Glow effects applied, ☐ 80s patterns present","--neon-colors: #0080FF #FF006E #00FFFF, --background: #000000, --font-family: monospace, --effect: glitch+glow, --scanline-opacity: 0.3, --crt-effect: true"
  13 +12,Flat Design,"Create a flat, 2D interface with bold colors, no shadows/gradients, clean lines, simple geometric shapes, icon-heavy, typography-focused, minimal ornamentation. Use 4-6 solid, bright colors in a limited palette with high saturation.","box-shadow: none, background: solid color, border-radius: 0-4px, color: solid (no gradients), fill: solid, stroke: 1-2px, font: bold sans-serif, icons: simplified SVG","☐ No shadows/gradients, ☐ 4-6 solid colors max, ☐ Clean lines consistent, ☐ Simple shapes used, ☐ Icon-heavy layout, ☐ High saturation colors, ☐ Fast loading verified","--shadow: none, --color-palette: 4-6 solid, --border-radius: 2px, --gradient: none, --icons: simplified SVG, --animation: minimal 150-200ms"
  14 +13,Skeuomorphism,"Design a realistic, textured interface with 3D depth, real-world metaphors (leather, wood, metal), complex gradients (8-12 stops), realistic shadows, grain/texture overlays, tactile press animations. Perfect for premium/luxury products.","background: complex gradient (8-12 stops), box-shadow: realistic multi-layer, background-image: texture overlay (noise, grain), filter: drop-shadow, transform: scale on press (300-500ms)","☐ Realistic textures applied, ☐ Complex gradients 8-12 stops, ☐ Multi-layer shadows, ☐ Texture overlays present, ☐ Tactile animations smooth, ☐ Depth effect pronounced","--gradient-stops: 8-12, --texture-overlay: noise+grain, --shadow-layers: 3+, --animation-duration: 300-500ms, --depth-effect: pronounced, --tactile: true"
  15 +14,Liquid Glass,"Create a premium liquid glass effect with morphing shapes, flowing animations, chromatic aberration, iridescent gradients, smooth 400-600ms transitions. Use SVG morphing for shape changes, dynamic blur, smooth color transitions creating a fluid, premium feel.","animation: morphing SVG paths (400-600ms), backdrop-filter: blur + saturate, filter: hue-rotate + brightness, blend-mode: screen, background: iridescent gradient","☐ Morphing animations 400-600ms, ☐ Chromatic aberration applied, ☐ Dynamic blur active, ☐ Iridescent gradients, ☐ Smooth color transitions, ☐ Premium feel achieved","--morph-duration: 400-600ms, --blur-amount: 15px, --chromatic-aberration: true, --iridescent: true, --blend-mode: screen, --smooth-transitions: true"
  16 +15,Motion-Driven,"Build an animation-heavy interface with scroll-triggered animations, microinteractions, parallax scrolling (3-5 layers), smooth transitions (300-400ms), entrance animations, page transitions. Use Intersection Observer for scroll effects, transform for performance, GPU acceleration.","animation: @keyframes scroll-reveal, transform: translateY/X, Intersection Observer API, will-change: transform, scroll-behavior: smooth, animation-duration: 300-400ms","☐ Scroll animations active, ☐ Parallax 3-5 layers, ☐ Entrance animations smooth, ☐ Page transitions fluid, ☐ GPU accelerated, ☐ Prefers-reduced-motion respected","--animation-duration: 300-400ms, --parallax-layers: 5, --scroll-behavior: smooth, --gpu-accelerated: true, --entrance-animation: true, --page-transition: smooth"
  17 +16,Micro-interactions,"Design with delightful micro-interactions: small 50-100ms animations, gesture-based responses, tactile feedback, loading spinners, success/error states, subtle hover effects, haptic feedback triggers for mobile. Focus on responsive, contextual interactions.","animation: short 50-100ms, transition: hover states, @media (hover: hover) for desktop, :active for press, haptic-feedback CSS/API, loading animation smooth loop","☐ Micro-animations 50-100ms, ☐ Gesture-responsive, ☐ Tactile feedback visual/haptic, ☐ Loading spinners smooth, ☐ Success/error states clear, ☐ Hover effects subtle","--micro-animation-duration: 50-100ms, --gesture-responsive: true, --haptic-feedback: true, --loading-animation: smooth, --state-feedback: success+error"
  18 +17,Inclusive Design,"Design for universal accessibility: high contrast (7:1+), large text (16px+), keyboard-only navigation, screen reader optimization, WCAG AAA compliance, symbol-based color indicators (not color-only), haptic feedback, voice interaction support, reduced motion options.","aria-* attributes complete, role attributes semantic, focus-visible: 3-4px ring, color-contrast: 7:1+, @media (prefers-reduced-motion), alt text on all images, form labels properly associated","☐ WCAG AAA verified, ☐ 7:1+ contrast all text, ☐ Keyboard accessible (Tab/Enter), ☐ Screen reader tested, ☐ Focus visible 3-4px, ☐ No color-only indicators, ☐ Haptic fallback","--contrast-ratio: 7:1, --font-size: 16px+, --keyboard-accessible: true, --sr-compatible: true, --wcag-level: AAA, --color-symbols: true, --haptic: enabled"
  19 +18,Zero Interface,"Create a voice-first, gesture-based, AI-driven interface with minimal visible UI, progressive disclosure, voice recognition UI, gesture detection, AI predictions, smart suggestions, context-aware actions. Hide controls until needed.","voice-commands: Web Speech API, gesture-detection: touch events, AI-predictions: hidden by default (reveal on hover), progressive-disclosure: show on demand, minimal UI visible","☐ Voice commands responsive, ☐ Gesture detection active, ☐ AI predictions hidden/revealed, ☐ Progressive disclosure working, ☐ Minimal visible UI, ☐ Smart suggestions contextual","--voice-ui: enabled, --gesture-detection: active, --ai-predictions: smart, --progressive-disclosure: true, --visible-ui: minimal, --context-aware: true"
  20 +19,Soft UI Evolution,"Design evolved neumorphism with improved contrast (WCAG AA+), modern aesthetics, subtle depth, accessibility focus. Use soft shadows (softer than flat but clearer than pure neumorphism), better color hierarchy, improved focus states, modern 200-300ms animations.","box-shadow: softer multi-layer (0 2px 4px), background: improved contrast pastels, border-radius: 8-12px, animation: 200-300ms smooth, outline: 2-3px on focus, contrast: 4.5:1+","☐ Improved contrast AA/AAA, ☐ Soft shadows modern, ☐ Border-radius 8-12px, ☐ Animations 200-300ms, ☐ Focus states visible, ☐ Color hierarchy clear","--shadow-soft: modern blend, --border-radius: 10px, --animation-duration: 200-300ms, --contrast-ratio: 4.5:1+, --color-hierarchy: improved, --wcag-level: AA+"
  21 +20,Bento Grids,"Design a Bento Grid layout. Use: modular grid system, rounded corners (16-24px), different card sizes (1x1, 2x1, 2x2), card-based hierarchy, soft backgrounds (#F5F5F7), subtle borders, content-first, Apple-style aesthetic.","display: grid, grid-template-columns: repeat(auto-fit, minmax(...)), gap: 1rem, border-radius: 20px, background: #FFF, box-shadow: subtle","☐ Grid layout (CSS Grid), ☐ Rounded corners 16-24px, ☐ Varied card spans, ☐ Content fits card size, ☐ Responsive re-flow, ☐ Apple-like aesthetic","--grid-gap: 20px, --card-radius: 24px, --card-bg: #FFFFFF, --page-bg: #F5F5F7, --shadow: soft"
  22 +21,Neubrutalism,"Design a neubrutalist interface. Use: high contrast, hard black borders (3px+), bright pop colors, no blur, sharp or slightly rounded corners, bold typography, hard shadows (offset 4px 4px), raw aesthetic but functional.","border: 3px solid black, box-shadow: 5px 5px 0px black, colors: #FFDB58 #FF6B6B #4ECDC4, font-weight: 700, no gradients","☐ Hard borders (2-4px), ☐ Hard offset shadows, ☐ High saturation colors, ☐ Bold typography, ☐ No blurs/gradients, ☐ Distinctive 'ugly-cute' look","--border-width: 3px, --shadow-offset: 4px, --shadow-color: #000, --colors: high saturation, --font: bold sans"
  23 +22,HUD / Sci-Fi FUI,"Design a futuristic HUD (Heads Up Display) or FUI. Use: thin lines (1px), neon cyan/blue on black, technical markers, decorative brackets, data visualization, monospaced tech fonts, glowing elements, transparency.","border: 1px solid rgba(0,255,255,0.5), color: #00FFFF, background: transparent or rgba(0,0,0,0.8), font-family: monospace, text-shadow: 0 0 5px cyan","☐ Fine lines 1px, ☐ Neon glow text/borders, ☐ Monospaced font, ☐ Dark/Transparent BG, ☐ Decorative tech markers, ☐ Holographic feel","--hud-color: #00FFFF, --bg-color: rgba(0,10,20,0.9), --line-width: 1px, --glow: 0 0 5px, --font: monospace"
  24 +23,Pixel Art,"Design a pixel art inspired interface. Use: pixelated fonts, 8-bit or 16-bit aesthetic, sharp edges (image-rendering: pixelated), limited color palette, blocky UI elements, retro gaming feel.","font-family: 'Press Start 2P', image-rendering: pixelated, box-shadow: 4px 0 0 #000 (pixel border), no anti-aliasing","☐ Pixelated fonts loaded, ☐ Images sharp (no blur), ☐ CSS box-shadow for pixel borders, ☐ Retro palette, ☐ Blocky layout","--pixel-size: 4px, --font: pixel font, --border-style: pixel-shadow, --anti-alias: none"
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/stacks/flutter.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Widgets,Use StatelessWidget when possible,Immutable widgets are simpler,StatelessWidget for static UI,StatefulWidget for everything,class MyWidget extends StatelessWidget,class MyWidget extends StatefulWidget (static),Medium,https://api.flutter.dev/flutter/widgets/StatelessWidget-class.html
  3 +2,Widgets,Keep widgets small,Single responsibility principle,Extract widgets into smaller pieces,Large build methods,Column(children: [Header() Content()]),500+ line build method,Medium,
  4 +3,Widgets,Use const constructors,Compile-time constants for performance,const MyWidget() when possible,Non-const for static widgets,const Text('Hello'),Text('Hello') for literals,High,https://dart.dev/guides/language/language-tour#constant-constructors
  5 +4,Widgets,Prefer composition over inheritance,Combine widgets using children,Compose widgets,Extend widget classes,Container(child: MyContent()),class MyContainer extends Container,Medium,
  6 +5,State,Use setState correctly,Minimal state in StatefulWidget,setState for UI state changes,setState for business logic,setState(() { _counter++; }),Complex logic in setState,Medium,https://api.flutter.dev/flutter/widgets/State/setState.html
  7 +6,State,Avoid setState in build,Never call setState during build,setState in callbacks only,setState in build method,onPressed: () => setState(() {}),build() { setState(); },High,
  8 +7,State,Use state management for complex apps,Provider Riverpod BLoC,State management for shared state,setState for global state,Provider.of<MyState>(context),Global setState calls,Medium,
  9 +8,State,Prefer Riverpod or Provider,Recommended state solutions,Riverpod for new projects,InheritedWidget manually,ref.watch(myProvider),Custom InheritedWidget,Medium,https://riverpod.dev/
  10 +9,State,Dispose resources,Clean up controllers and subscriptions,dispose() for cleanup,Memory leaks from subscriptions,@override void dispose() { controller.dispose(); },No dispose implementation,High,
  11 +10,Layout,Use Column and Row,Basic layout widgets,Column Row for linear layouts,Stack for simple layouts,"Column(children: [Text(), Button()])",Stack for vertical list,Medium,https://api.flutter.dev/flutter/widgets/Column-class.html
  12 +11,Layout,Use Expanded and Flexible,Control flex behavior,Expanded to fill space,Fixed sizes in flex containers,Expanded(child: Container()),Container(width: 200) in Row,Medium,
  13 +12,Layout,Use SizedBox for spacing,Consistent spacing,SizedBox for gaps,Container for spacing only,SizedBox(height: 16),Container(height: 16),Low,
  14 +13,Layout,Use LayoutBuilder for responsive,Respond to constraints,LayoutBuilder for adaptive layouts,Fixed sizes for responsive,LayoutBuilder(builder: (context constraints) {}),Container(width: 375),Medium,https://api.flutter.dev/flutter/widgets/LayoutBuilder-class.html
  15 +14,Layout,Avoid deep nesting,Keep widget tree shallow,Extract deeply nested widgets,10+ levels of nesting,Extract widget to method or class,Column(Row(Column(Row(...)))),Medium,
  16 +15,Lists,Use ListView.builder,Lazy list building,ListView.builder for long lists,ListView with children for large lists,"ListView.builder(itemCount: 100, itemBuilder: ...)",ListView(children: items.map(...).toList()),High,https://api.flutter.dev/flutter/widgets/ListView-class.html
  17 +16,Lists,Provide itemExtent when known,Skip measurement,itemExtent for fixed height items,No itemExtent for uniform lists,ListView.builder(itemExtent: 50),ListView.builder without itemExtent,Medium,
  18 +17,Lists,Use keys for stateful items,Preserve widget state,Key for stateful list items,No key for dynamic lists,ListTile(key: ValueKey(item.id)),ListTile without key,High,
  19 +18,Lists,Use SliverList for custom scroll,Custom scroll effects,CustomScrollView with Slivers,Nested ListViews,CustomScrollView(slivers: [SliverList()]),ListView inside ListView,Medium,https://api.flutter.dev/flutter/widgets/SliverList-class.html
  20 +19,Navigation,Use Navigator 2.0 or GoRouter,Declarative routing,go_router for navigation,Navigator.push for complex apps,GoRouter(routes: [...]),Navigator.push everywhere,Medium,https://pub.dev/packages/go_router
  21 +20,Navigation,Use named routes,Organized navigation,Named routes for clarity,Anonymous routes,Navigator.pushNamed(context '/home'),Navigator.push(context MaterialPageRoute()),Low,
  22 +21,Navigation,Handle back button (PopScope),Android back behavior and predictive back (Android 14+),Use PopScope widget (WillPopScope is deprecated),Use WillPopScope,"PopScope(canPop: false, onPopInvoked: (didPop) => ...)",WillPopScope(onWillPop: ...),High,https://api.flutter.dev/flutter/widgets/PopScope-class.html
  23 +22,Navigation,Pass typed arguments,Type-safe route arguments,Typed route arguments,Dynamic arguments,MyRoute(id: '123'),arguments: {'id': '123'},Medium,
  24 +23,Async,Use FutureBuilder,Async UI building,FutureBuilder for async data,setState for async,FutureBuilder(future: fetchData()),fetchData().then((d) => setState()),Medium,https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
  25 +24,Async,Use StreamBuilder,Stream UI building,StreamBuilder for streams,Manual stream subscription,StreamBuilder(stream: myStream),stream.listen in initState,Medium,https://api.flutter.dev/flutter/widgets/StreamBuilder-class.html
  26 +25,Async,Handle loading and error states,Complete async UI states,ConnectionState checks,Only success state,if (snapshot.connectionState == ConnectionState.waiting),No loading indicator,High,
  27 +26,Async,Cancel subscriptions,Clean up stream subscriptions,Cancel in dispose,Memory leaks,subscription.cancel() in dispose,No subscription cleanup,High,
  28 +27,Theming,Use ThemeData,Consistent theming,ThemeData for app theme,Hardcoded colors,Theme.of(context).primaryColor,Color(0xFF123456) everywhere,Medium,https://api.flutter.dev/flutter/material/ThemeData-class.html
  29 +28,Theming,Use ColorScheme,Material 3 color system,ColorScheme for colors,Individual color properties,colorScheme: ColorScheme.fromSeed(),primaryColor: Colors.blue,Medium,
  30 +29,Theming,Access theme via context,Dynamic theme access,Theme.of(context),Static theme reference,Theme.of(context).textTheme.bodyLarge,TextStyle(fontSize: 16),Medium,
  31 +30,Theming,Support dark mode,Respect system theme,darkTheme in MaterialApp,Light theme only,"MaterialApp(theme: light, darkTheme: dark)",MaterialApp(theme: light),Medium,
  32 +31,Animation,Use implicit animations,Simple animations,AnimatedContainer AnimatedOpacity,Explicit for simple transitions,AnimatedContainer(duration: Duration()),AnimationController for fade,Low,https://api.flutter.dev/flutter/widgets/AnimatedContainer-class.html
  33 +32,Animation,Use AnimationController for complex,Fine-grained control,AnimationController with Ticker,Implicit for complex sequences,AnimationController(vsync: this),AnimatedContainer for staggered,Medium,
  34 +33,Animation,Dispose AnimationControllers,Clean up animation resources,dispose() for controllers,Memory leaks,controller.dispose() in dispose,No controller disposal,High,
  35 +34,Animation,Use Hero for transitions,Shared element transitions,Hero for navigation animations,Manual shared element,Hero(tag: 'image' child: Image()),Custom shared element animation,Low,https://api.flutter.dev/flutter/widgets/Hero-class.html
  36 +35,Forms,Use Form widget,Form validation,Form with GlobalKey,Individual validation,Form(key: _formKey child: ...),TextField without Form,Medium,https://api.flutter.dev/flutter/widgets/Form-class.html
  37 +36,Forms,Use TextEditingController,Control text input,Controller for text fields,onChanged for all text,final controller = TextEditingController(),onChanged: (v) => setState(),Medium,
  38 +37,Forms,Validate on submit,Form validation flow,_formKey.currentState!.validate(),Skip validation,if (_formKey.currentState!.validate()),Submit without validation,High,
  39 +38,Forms,Dispose controllers,Clean up text controllers,dispose() for controllers,Memory leaks,controller.dispose() in dispose,No controller disposal,High,
  40 +39,Performance,Use const widgets,Reduce rebuilds,const for static widgets,No const for literals,const Icon(Icons.add),Icon(Icons.add),High,
  41 +40,Performance,Avoid rebuilding entire tree,Minimal rebuild scope,Isolate changing widgets,setState on parent,Consumer only around changing widget,setState on root widget,High,
  42 +41,Performance,Use RepaintBoundary,Isolate repaints,RepaintBoundary for animations,Full screen repaints,RepaintBoundary(child: AnimatedWidget()),Animation without boundary,Medium,https://api.flutter.dev/flutter/widgets/RepaintBoundary-class.html
  43 +42,Performance,Profile with DevTools,Measure before optimizing,Flutter DevTools profiling,Guess at performance,DevTools performance tab,Optimize without measuring,Medium,https://docs.flutter.dev/tools/devtools
  44 +43,Accessibility,Use Semantics widget,Screen reader support,Semantics for accessibility,Missing accessibility info,Semantics(label: 'Submit button'),GestureDetector without semantics,High,https://api.flutter.dev/flutter/widgets/Semantics-class.html
  45 +44,Accessibility,Support large fonts,MediaQuery text scaling,MediaQuery.textScaleFactor,Fixed font sizes,style: Theme.of(context).textTheme,TextStyle(fontSize: 14),High,
  46 +45,Accessibility,Test with screen readers,TalkBack and VoiceOver,Test accessibility regularly,Skip accessibility testing,Regular TalkBack testing,No screen reader testing,High,
  47 +46,Testing,Use widget tests,Test widget behavior,WidgetTester for UI tests,Unit tests only,testWidgets('...' (tester) async {}),Only test() for UI,Medium,https://docs.flutter.dev/testing
  48 +47,Testing,Use integration tests,Full app testing,integration_test package,Manual testing only,IntegrationTestWidgetsFlutterBinding,Manual E2E testing,Medium,
  49 +48,Testing,Mock dependencies,Isolate tests,Mockito or mocktail,Real dependencies in tests,when(mock.method()).thenReturn(),Real API calls in tests,Medium,
  50 +49,Platform,Use Platform checks,Platform-specific code,Platform.isIOS Platform.isAndroid,Same code for all platforms,if (Platform.isIOS) {},Hardcoded iOS behavior,Medium,
  51 +50,Platform,Use kIsWeb for web,Web platform detection,kIsWeb for web checks,Platform for web,if (kIsWeb) {},Platform.isWeb (doesn't exist),Medium,
  52 +51,Packages,Use pub.dev packages,Community packages,Popular maintained packages,Custom implementations,cached_network_image,Custom image cache,Medium,https://pub.dev/
  53 +52,Packages,Check package quality,Quality before adding,Pub points and popularity,Any package without review,100+ pub points,Unmaintained packages,Medium,
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Animation,Use Tailwind animate utilities,Built-in animations are optimized and respect reduced-motion,Use animate-pulse animate-spin animate-ping,Custom @keyframes for simple effects,animate-pulse,@keyframes pulse {...},Medium,https://tailwindcss.com/docs/animation
  3 +2,Animation,Limit bounce animations,Continuous bounce is distracting and causes motion sickness,Use animate-bounce sparingly on CTAs only,Multiple bounce animations on page,Single CTA with animate-bounce,5+ elements with animate-bounce,High,
  4 +3,Animation,Transition duration,Use appropriate transition speeds for UI feedback,duration-150 to duration-300 for UI,duration-1000 or longer for UI elements,transition-all duration-200,transition-all duration-1000,Medium,https://tailwindcss.com/docs/transition-duration
  5 +4,Animation,Hover transitions,Add smooth transitions on hover state changes,Add transition class with hover states,Instant hover changes without transition,hover:bg-gray-100 transition-colors,hover:bg-gray-100 (no transition),Low,
  6 +5,Z-Index,Use Tailwind z-* scale,Consistent stacking context with predefined scale,z-0 z-10 z-20 z-30 z-40 z-50,Arbitrary z-index values,z-50 for modals,z-[9999],Medium,https://tailwindcss.com/docs/z-index
  7 +6,Z-Index,Fixed elements z-index,Fixed navigation and modals need explicit z-index,z-50 for nav z-40 for dropdowns,Relying on DOM order for stacking,fixed top-0 z-50,fixed top-0 (no z-index),High,
  8 +7,Z-Index,Negative z-index for backgrounds,Use negative z-index for decorative backgrounds,z-[-1] for background elements,Positive z-index for backgrounds,-z-10 for decorative,z-10 for background,Low,
  9 +8,Layout,Container max-width,Limit content width for readability,max-w-7xl mx-auto for main content,Full-width content on large screens,max-w-7xl mx-auto px-4,w-full (no max-width),Medium,https://tailwindcss.com/docs/container
  10 +9,Layout,Responsive padding,Adjust padding for different screen sizes,px-4 md:px-6 lg:px-8,Same padding all sizes,px-4 sm:px-6 lg:px-8,px-8 (same all sizes),Medium,
  11 +10,Layout,Grid gaps,Use consistent gap utilities for spacing,gap-4 gap-6 gap-8,Margins on individual items,grid gap-6,grid with mb-4 on each item,Medium,https://tailwindcss.com/docs/gap
  12 +11,Layout,Flexbox alignment,Use flex utilities for alignment,items-center justify-between,Multiple nested wrappers,flex items-center justify-between,Nested divs for alignment,Low,
  13 +12,Images,Aspect ratio,Maintain consistent image aspect ratios,aspect-video aspect-square,No aspect ratio on containers,aspect-video rounded-lg,No aspect control,Medium,https://tailwindcss.com/docs/aspect-ratio
  14 +13,Images,Object fit,Control image scaling within containers,object-cover object-contain,Stretched distorted images,object-cover w-full h-full,No object-fit,Medium,https://tailwindcss.com/docs/object-fit
  15 +14,Images,Lazy loading,Defer loading of off-screen images,loading='lazy' on images,All images eager load,<img loading='lazy'>,<img> without lazy,High,
  16 +15,Images,Responsive images,Serve appropriate image sizes,srcset and sizes attributes,Same large image all devices,srcset with multiple sizes,4000px image everywhere,High,
  17 +16,Typography,Prose plugin,Use @tailwindcss/typography for rich text,prose prose-lg for article content,Custom styles for markdown,prose prose-lg max-w-none,Custom text styling,Medium,https://tailwindcss.com/docs/typography-plugin
  18 +17,Typography,Line height,Use appropriate line height for readability,leading-relaxed for body text,Default tight line height,leading-relaxed (1.625),leading-none or leading-tight,Medium,https://tailwindcss.com/docs/line-height
  19 +18,Typography,Font size scale,Use consistent text size scale,text-sm text-base text-lg text-xl,Arbitrary font sizes,text-lg,text-[17px],Low,https://tailwindcss.com/docs/font-size
  20 +19,Typography,Text truncation,Handle long text gracefully,truncate or line-clamp-*,Overflow breaking layout,line-clamp-2,No overflow handling,Medium,https://tailwindcss.com/docs/text-overflow
  21 +20,Colors,Opacity utilities,Use color opacity utilities,bg-black/50 text-white/80,Separate opacity class,bg-black/50,bg-black opacity-50,Low,https://tailwindcss.com/docs/background-color
  22 +21,Colors,Dark mode,Support dark mode with dark: prefix,dark:bg-gray-900 dark:text-white,No dark mode support,dark:bg-gray-900,Only light theme,Medium,https://tailwindcss.com/docs/dark-mode
  23 +22,Colors,Semantic colors,Use semantic color naming in config,primary secondary danger success,Generic color names in components,bg-primary,bg-blue-500 everywhere,Medium,
  24 +23,Spacing,Consistent spacing scale,Use Tailwind spacing scale consistently,p-4 m-6 gap-8,Arbitrary pixel values,p-4 (1rem),p-[15px],Low,https://tailwindcss.com/docs/customizing-spacing
  25 +24,Spacing,Negative margins,Use sparingly for overlapping effects,-mt-4 for overlapping elements,Negative margins for layout fixing,-mt-8 for card overlap,-m-2 to fix spacing issues,Medium,
  26 +25,Spacing,Space between,Use space-y-* for vertical lists,space-y-4 on flex/grid column,Margin on each child,space-y-4,Each child has mb-4,Low,https://tailwindcss.com/docs/space
  27 +26,Forms,Focus states,Always show focus indicators,focus:ring-2 focus:ring-blue-500,Remove focus outline,focus:ring-2 focus:ring-offset-2,focus:outline-none (no replacement),High,
  28 +27,Forms,Input sizing,Consistent input dimensions,h-10 px-3 for inputs,Inconsistent input heights,h-10 w-full px-3,Various heights per input,Medium,
  29 +28,Forms,Disabled states,Clear disabled styling,disabled:opacity-50 disabled:cursor-not-allowed,No disabled indication,disabled:opacity-50,Same style as enabled,Medium,
  30 +29,Forms,Placeholder styling,Style placeholder text appropriately,placeholder:text-gray-400,Dark placeholder text,placeholder:text-gray-400,Default dark placeholder,Low,
  31 +30,Responsive,Mobile-first approach,Start with mobile styles and add breakpoints,Default mobile + md: lg: xl:,Desktop-first approach,text-sm md:text-base,text-base max-md:text-sm,Medium,https://tailwindcss.com/docs/responsive-design
  32 +31,Responsive,Breakpoint testing,Test at standard breakpoints,320 375 768 1024 1280 1536,Only test on development device,Test all breakpoints,Single device testing,High,
  33 +32,Responsive,Hidden/shown utilities,Control visibility per breakpoint,hidden md:block,Different content per breakpoint,hidden md:flex,Separate mobile/desktop components,Low,https://tailwindcss.com/docs/display
  34 +33,Buttons,Button sizing,Consistent button dimensions,px-4 py-2 or px-6 py-3,Inconsistent button sizes,px-4 py-2 text-sm,Various padding per button,Medium,
  35 +34,Buttons,Touch targets,Minimum 44px touch target on mobile,min-h-[44px] on mobile,Small buttons on mobile,min-h-[44px] min-w-[44px],h-8 w-8 on mobile,High,
  36 +35,Buttons,Loading states,Show loading feedback,disabled + spinner icon,Clickable during loading,<Button disabled><Spinner/></Button>,Button without loading state,High,
  37 +36,Buttons,Icon buttons,Accessible icon-only buttons,aria-label on icon buttons,Icon button without label,<button aria-label='Close'><XIcon/></button>,<button><XIcon/></button>,High,
  38 +37,Cards,Card structure,Consistent card styling,rounded-lg shadow-md p-6,Inconsistent card styles,rounded-2xl shadow-lg p-6,Mixed card styling,Low,
  39 +38,Cards,Card hover states,Interactive cards should have hover feedback,hover:shadow-lg transition-shadow,No hover on clickable cards,hover:shadow-xl transition-shadow,Static cards that are clickable,Medium,
  40 +39,Cards,Card spacing,Consistent internal card spacing,space-y-4 for card content,Inconsistent internal spacing,space-y-4 or p-6,Mixed mb-2 mb-4 mb-6,Low,
  41 +40,Accessibility,Screen reader text,Provide context for screen readers,sr-only for hidden labels,Missing context for icons,<span class='sr-only'>Close menu</span>,No label for icon button,High,https://tailwindcss.com/docs/screen-readers
  42 +41,Accessibility,Focus visible,Show focus only for keyboard users,focus-visible:ring-2,Focus on all interactions,focus-visible:ring-2,focus:ring-2 (shows on click too),Medium,
  43 +42,Accessibility,Reduced motion,Respect user motion preferences,motion-reduce:animate-none,Ignore motion preferences,motion-reduce:transition-none,No reduced motion support,High,https://tailwindcss.com/docs/hover-focus-and-other-states#prefers-reduced-motion
  44 +43,Performance,Configure content paths,Tailwind needs to know where classes are used,Use 'content' array in config,Use deprecated 'purge' option (v2),"content: ['./src/**/*.{js,ts,jsx,tsx}']",purge: [...],High,https://tailwindcss.com/docs/content-configuration
  45 +44,Performance,JIT mode,Use JIT for faster builds and smaller bundles,JIT enabled (default in v3),Full CSS in development,Tailwind v3 defaults,Tailwind v2 without JIT,Medium,
  46 +45,Performance,Avoid @apply bloat,Use @apply sparingly,Direct utilities in HTML,Heavy @apply usage,class='px-4 py-2 rounded',@apply px-4 py-2 rounded;,Low,https://tailwindcss.com/docs/reusing-styles
  47 +46,Plugins,Official plugins,Use official Tailwind plugins,@tailwindcss/forms typography aspect-ratio,Custom implementations,@tailwindcss/forms,Custom form reset CSS,Medium,https://tailwindcss.com/docs/plugins
  48 +47,Plugins,Custom utilities,Create utilities for repeated patterns,Custom utility in config,Repeated arbitrary values,Custom shadow utility,"shadow-[0_4px_20px_rgba(0,0,0,0.1)] everywhere",Medium,
  49 +48,Layout,Container Queries,Use @container for component-based responsiveness,Use @container and @lg: etc.,Media queries for component internals,@container @lg:grid-cols-2,@media (min-width: ...) inside component,Medium,https://github.com/tailwindlabs/tailwindcss-container-queries
  50 +49,Interactivity,Group and Peer,Style based on parent/sibling state,group-hover peer-checked,JS for simple state interactions,group-hover:text-blue-500,onMouseEnter={() => setHover(true)},Low,https://tailwindcss.com/docs/hover-focus-and-other-states#styling-based-on-parent-state
  51 +50,Customization,Arbitrary Values,Use [] for one-off values,w-[350px] for specific needs,Creating config for single use,top-[117px] (if strictly needed),style={{ top: '117px' }},Low,https://tailwindcss.com/docs/adding-custom-styles#using-arbitrary-values
  52 +51,Colors,Theme color variables,Define colors in Tailwind theme and use directly,bg-primary text-success border-cta,bg-[var(--color-primary)] text-[var(--color-success)],bg-primary,bg-[var(--color-primary)],Medium,https://tailwindcss.com/docs/customizing-colors
  53 +52,Colors,Use bg-linear-to-* for gradients,Tailwind v4 uses bg-linear-to-* syntax for gradients,bg-linear-to-r bg-linear-to-b,bg-gradient-to-* (deprecated in v4),bg-linear-to-r from-blue-500 to-purple-500,bg-gradient-to-r from-blue-500 to-purple-500,Medium,https://tailwindcss.com/docs/background-image
  54 +53,Layout,Use shrink-0 shorthand,Shorter class name for flex-shrink-0,shrink-0 shrink,flex-shrink-0 flex-shrink,shrink-0,flex-shrink-0,Low,https://tailwindcss.com/docs/flex-shrink
  55 +54,Layout,Use size-* for square dimensions,Single utility for equal width and height,size-4 size-8 size-12,Separate h-* w-* for squares,size-6,h-6 w-6,Low,https://tailwindcss.com/docs/size
  56 +55,Images,SVG explicit dimensions,Add width/height attributes to SVGs to prevent layout shift before CSS loads,<svg class='size-6' width='24' height='24'>,SVG without explicit dimensions,<svg class='size-6' width='24' height='24'>,<svg class='size-6'>,High,
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/stacks/nextjs.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Routing,Use App Router for new projects,App Router is the recommended approach in Next.js 14+,app/ directory with page.tsx,pages/ for new projects,app/dashboard/page.tsx,pages/dashboard.tsx,Medium,https://nextjs.org/docs/app
  3 +2,Routing,Use file-based routing,Create routes by adding files in app directory,page.tsx for routes layout.tsx for layouts,Manual route configuration,app/blog/[slug]/page.tsx,Custom router setup,Medium,https://nextjs.org/docs/app/building-your-application/routing
  4 +3,Routing,Colocate related files,Keep components styles tests with their routes,Component files alongside page.tsx,Separate components folder,app/dashboard/_components/,components/dashboard/,Low,
  5 +4,Routing,Use route groups for organization,Group routes without affecting URL,Parentheses for route groups,Nested folders affecting URL,(marketing)/about/page.tsx,marketing/about/page.tsx,Low,https://nextjs.org/docs/app/building-your-application/routing/route-groups
  6 +5,Routing,Handle loading states,Use loading.tsx for route loading UI,loading.tsx alongside page.tsx,Manual loading state management,app/dashboard/loading.tsx,useState for loading in page,Medium,https://nextjs.org/docs/app/building-your-application/routing/loading-ui-and-streaming
  7 +6,Routing,Handle errors with error.tsx,Catch errors at route level,error.tsx with reset function,try/catch in every component,app/dashboard/error.tsx,try/catch in page component,High,https://nextjs.org/docs/app/building-your-application/routing/error-handling
  8 +7,Rendering,Use Server Components by default,Server Components reduce client JS bundle,Keep components server by default,Add 'use client' unnecessarily,export default function Page(),('use client') for static content,High,https://nextjs.org/docs/app/building-your-application/rendering/server-components
  9 +8,Rendering,Mark Client Components explicitly,'use client' for interactive components,Add 'use client' only when needed,Server Component with hooks/events,('use client') for onClick useState,No directive with useState,High,https://nextjs.org/docs/app/building-your-application/rendering/client-components
  10 +9,Rendering,Push Client Components down,Keep Client Components as leaf nodes,Client wrapper for interactive parts only,Mark page as Client Component,<InteractiveButton/> in Server Page,('use client') on page.tsx,High,
  11 +10,Rendering,Use streaming for better UX,Stream content with Suspense boundaries,Suspense for slow data fetches,Wait for all data before render,<Suspense><SlowComponent/></Suspense>,await allData then render,Medium,https://nextjs.org/docs/app/building-your-application/routing/loading-ui-and-streaming
  12 +11,Rendering,Choose correct rendering strategy,SSG for static SSR for dynamic ISR for semi-static,generateStaticParams for known paths,SSR for static content,export const revalidate = 3600,fetch without cache config,Medium,
  13 +12,DataFetching,Fetch data in Server Components,Fetch directly in async Server Components,async function Page() { const data = await fetch() },useEffect for initial data,const data = await fetch(url),useEffect(() => fetch(url)),High,https://nextjs.org/docs/app/building-your-application/data-fetching
  14 +13,DataFetching,Configure caching explicitly (Next.js 15+),Next.js 15 changed defaults to uncached for fetch,Explicitly set cache: 'force-cache' for static data,Assume default is cached (it's not in Next.js 15),fetch(url { cache: 'force-cache' }),fetch(url) // Uncached in v15,High,https://nextjs.org/docs/app/building-your-application/upgrading/version-15
  15 +14,DataFetching,Deduplicate fetch requests,React and Next.js dedupe same requests,Same fetch call in multiple components,Manual request deduplication,Multiple components fetch same URL,Custom cache layer,Low,
  16 +15,DataFetching,Use Server Actions for mutations,Server Actions for form submissions,action={serverAction} in forms,API route for every mutation,<form action={createPost}>,<form onSubmit={callApiRoute}>,Medium,https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations
  17 +16,DataFetching,Revalidate data appropriately,Use revalidatePath/revalidateTag after mutations,Revalidate after Server Action,'use client' with manual refetch,revalidatePath('/posts'),router.refresh() everywhere,Medium,https://nextjs.org/docs/app/building-your-application/caching#revalidating
  18 +17,Images,Use next/image for optimization,Automatic image optimization and lazy loading,<Image> component for all images,<img> tags directly,<Image src={} alt={} width={} height={}>,<img src={}/>,High,https://nextjs.org/docs/app/building-your-application/optimizing/images
  19 +18,Images,Provide width and height,Prevent layout shift with dimensions,width and height props or fill,Missing dimensions,<Image width={400} height={300}/>,<Image src={url}/>,High,
  20 +19,Images,Use fill for responsive images,Fill container with object-fit,fill prop with relative parent,Fixed dimensions for responsive,"<Image fill className=""object-cover""/>",<Image width={window.width}/>,Medium,
  21 +20,Images,Configure remote image domains,Whitelist external image sources,remotePatterns in next.config.js,Allow all domains,remotePatterns: [{ hostname: 'cdn.example.com' }],domains: ['*'],High,https://nextjs.org/docs/app/api-reference/components/image#remotepatterns
  22 +21,Images,Use priority for LCP images,Mark above-fold images as priority,priority prop on hero images,All images with priority,<Image priority src={hero}/>,<Image priority/> on every image,Medium,
  23 +22,Fonts,Use next/font for fonts,Self-hosted fonts with zero layout shift,next/font/google or next/font/local,External font links,import { Inter } from 'next/font/google',"<link href=""fonts.googleapis.com""/>",Medium,https://nextjs.org/docs/app/building-your-application/optimizing/fonts
  24 +23,Fonts,Apply font to layout,Set font in root layout for consistency,className on body in layout.tsx,Font in individual pages,<body className={inter.className}>,Each page imports font,Low,
  25 +24,Fonts,Use variable fonts,Variable fonts reduce bundle size,Single variable font file,Multiple font weights as files,Inter({ subsets: ['latin'] }),Inter_400 Inter_500 Inter_700,Low,
  26 +25,Metadata,Use generateMetadata for dynamic,Generate metadata based on params,export async function generateMetadata(),Hardcoded metadata everywhere,generateMetadata({ params }),export const metadata = {},Medium,https://nextjs.org/docs/app/building-your-application/optimizing/metadata
  27 +26,Metadata,Include OpenGraph images,Add OG images for social sharing,opengraph-image.tsx or og property,Missing social preview images,opengraph: { images: ['/og.png'] },No OG configuration,Medium,
  28 +27,Metadata,Use metadata API,Export metadata object for static metadata,export const metadata = {},Manual head tags,export const metadata = { title: 'Page' },<head><title>Page</title></head>,Medium,
  29 +28,API,Use Route Handlers for APIs,app/api routes for API endpoints,app/api/users/route.ts,pages/api for new projects,export async function GET(request),export default function handler,Medium,https://nextjs.org/docs/app/building-your-application/routing/route-handlers
  30 +29,API,Return proper Response objects,Use NextResponse for API responses,NextResponse.json() for JSON,Plain objects or res.json(),return NextResponse.json({ data }),return { data },Medium,
  31 +30,API,Handle HTTP methods explicitly,Export named functions for methods,Export GET POST PUT DELETE,Single handler for all methods,export async function POST(),switch(req.method),Low,
  32 +31,API,Validate request body,Validate input before processing,Zod or similar for validation,Trust client input,const body = schema.parse(await req.json()),const body = await req.json(),High,
  33 +32,Middleware,Use middleware for auth,Protect routes with middleware.ts,middleware.ts at root,Auth check in every page,export function middleware(request),if (!session) redirect in page,Medium,https://nextjs.org/docs/app/building-your-application/routing/middleware
  34 +33,Middleware,Match specific paths,Configure middleware matcher,config.matcher for specific routes,Run middleware on all routes,matcher: ['/dashboard/:path*'],No matcher config,Medium,
  35 +34,Middleware,Keep middleware edge-compatible,Middleware runs on Edge runtime,Edge-compatible code only,Node.js APIs in middleware,Edge-compatible auth check,fs.readFile in middleware,High,
  36 +35,Environment,Use NEXT_PUBLIC prefix,Client-accessible env vars need prefix,NEXT_PUBLIC_ for client vars,Server vars exposed to client,NEXT_PUBLIC_API_URL,API_SECRET in client code,High,https://nextjs.org/docs/app/building-your-application/configuring/environment-variables
  37 +36,Environment,Validate env vars,Check required env vars exist,Validate on startup,Undefined env at runtime,if (!process.env.DATABASE_URL) throw,process.env.DATABASE_URL (might be undefined),High,
  38 +37,Environment,Use .env.local for secrets,Local env file for development secrets,.env.local gitignored,Secrets in .env committed,.env.local with secrets,.env with DATABASE_PASSWORD,High,
  39 +38,Performance,Analyze bundle size,Use @next/bundle-analyzer,Bundle analyzer in dev,Ship large bundles blindly,ANALYZE=true npm run build,No bundle analysis,Medium,https://nextjs.org/docs/app/building-your-application/optimizing/bundle-analyzer
  40 +39,Performance,Use dynamic imports,Code split with next/dynamic,dynamic() for heavy components,Import everything statically,const Chart = dynamic(() => import('./Chart')),import Chart from './Chart',Medium,https://nextjs.org/docs/app/building-your-application/optimizing/lazy-loading
  41 +40,Performance,Avoid layout shifts,Reserve space for dynamic content,Skeleton loaders aspect ratios,Content popping in,"<Skeleton className=""h-48""/>",No placeholder for async content,High,
  42 +41,Performance,Use Partial Prerendering,Combine static and dynamic in one route,Static shell with Suspense holes,Full dynamic or static pages,Static header + dynamic content,Entire page SSR,Low,https://nextjs.org/docs/app/building-your-application/rendering/partial-prerendering
  43 +42,Link,Use next/link for navigation,Client-side navigation with prefetching,"<Link href=""""> for internal links",<a> for internal navigation,"<Link href=""/about"">About</Link>","<a href=""/about"">About</a>",High,https://nextjs.org/docs/app/api-reference/components/link
  44 +43,Link,Prefetch strategically,Control prefetching behavior,prefetch={false} for low-priority,Prefetch all links,<Link prefetch={false}>,Default prefetch on every link,Low,
  45 +44,Link,Use scroll option appropriately,Control scroll behavior on navigation,scroll={false} for tabs pagination,Always scroll to top,<Link scroll={false}>,Manual scroll management,Low,
  46 +45,Config,Use next.config.js correctly,Configure Next.js behavior,Proper config options,Deprecated or wrong options,images: { remotePatterns: [] },images: { domains: [] },Medium,https://nextjs.org/docs/app/api-reference/next-config-js
  47 +46,Config,Enable strict mode,Catch potential issues early,reactStrictMode: true,Strict mode disabled,reactStrictMode: true,reactStrictMode: false,Medium,
  48 +47,Config,Configure redirects and rewrites,Use config for URL management,redirects() rewrites() in config,Manual redirect handling,redirects: async () => [...],res.redirect in pages,Medium,https://nextjs.org/docs/app/api-reference/next-config-js/redirects
  49 +48,Deployment,Use Vercel for easiest deploy,Vercel optimized for Next.js,Deploy to Vercel,Self-host without knowledge,vercel deploy,Complex Docker setup for simple app,Low,https://nextjs.org/docs/app/building-your-application/deploying
  50 +49,Deployment,Configure output for self-hosting,Set output option for deployment target,output: 'standalone' for Docker,Default output for containers,output: 'standalone',No output config for Docker,Medium,https://nextjs.org/docs/app/building-your-application/deploying#self-hosting
  51 +50,Security,Sanitize user input,Never trust user input,Escape sanitize validate all input,Direct interpolation of user data,DOMPurify.sanitize(userInput),dangerouslySetInnerHTML={{ __html: userInput }},High,
  52 +51,Security,Use CSP headers,Content Security Policy for XSS protection,Configure CSP in next.config.js,No security headers,headers() with CSP,No CSP configuration,High,https://nextjs.org/docs/app/building-your-application/configuring/content-security-policy
  53 +52,Security,Validate Server Action input,Server Actions are public endpoints,Validate and authorize in Server Action,Trust Server Action input,Auth check + validation in action,Direct database call without check,High,
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/stacks/react-native.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Components,Use functional components,Hooks-based components are standard,Functional components with hooks,Class components,const App = () => { },class App extends Component,Medium,https://reactnative.dev/docs/intro-react
  3 +2,Components,Keep components small,Single responsibility principle,Split into smaller components,Large monolithic components,<Header /><Content /><Footer />,500+ line component,Medium,
  4 +3,Components,Use TypeScript,Type safety for props and state,TypeScript for new projects,JavaScript without types,const Button: FC<Props> = () => { },const Button = (props) => { },Medium,
  5 +4,Components,Colocate component files,Keep related files together,Component folder with styles,Flat structure,components/Button/index.tsx styles.ts,components/Button.tsx styles/button.ts,Low,
  6 +5,Styling,Use StyleSheet.create,Optimized style objects,StyleSheet for all styles,Inline style objects,StyleSheet.create({ container: {} }),style={{ margin: 10 }},High,https://reactnative.dev/docs/stylesheet
  7 +6,Styling,Avoid inline styles,Prevent object recreation,Styles in StyleSheet,Inline style objects in render,style={styles.container},"style={{ margin: 10, padding: 5 }}",Medium,
  8 +7,Styling,Use flexbox for layout,React Native uses flexbox,flexDirection alignItems justifyContent,Absolute positioning everywhere,flexDirection: 'row',position: 'absolute' everywhere,Medium,https://reactnative.dev/docs/flexbox
  9 +8,Styling,Handle platform differences,Platform-specific styles,Platform.select or .ios/.android files,Same styles for both platforms,"Platform.select({ ios: {}, android: {} })",Hardcoded iOS values,Medium,https://reactnative.dev/docs/platform-specific-code
  10 +9,Styling,Use responsive dimensions,Scale for different screens,Dimensions or useWindowDimensions,Fixed pixel values,useWindowDimensions(),width: 375,Medium,
  11 +10,Navigation,Use React Navigation,Standard navigation library,React Navigation for routing,Manual navigation management,createStackNavigator(),Custom navigation state,Medium,https://reactnavigation.org/
  12 +11,Navigation,Type navigation params,Type-safe navigation,Typed navigation props,Untyped navigation,"navigation.navigate<RootStackParamList>('Home', { id })","navigation.navigate('Home', { id })",Medium,
  13 +12,Navigation,Use deep linking,Support URL-based navigation,Configure linking prop,No deep link support,linking: { prefixes: [] },No linking configuration,Medium,https://reactnavigation.org/docs/deep-linking/
  14 +13,Navigation,Handle back button,Android back button handling,useFocusEffect with BackHandler,Ignore back button,BackHandler.addEventListener,No back handler,High,
  15 +14,State,Use useState for local state,Simple component state,useState for UI state,Class component state,"const [count, setCount] = useState(0)",this.state = { count: 0 },Medium,
  16 +15,State,Use useReducer for complex state,Complex state logic,useReducer for related state,Multiple useState for related values,useReducer(reducer initialState),5+ useState calls,Medium,
  17 +16,State,Use context sparingly,Context for global state,Context for theme auth locale,Context for frequently changing data,ThemeContext for app theme,Context for list item data,Medium,
  18 +17,State,Consider Zustand or Redux,External state management,Zustand for simple Redux for complex,useState for global state,create((set) => ({ })),Prop drilling global state,Medium,
  19 +18,Lists,Use FlatList for long lists,Virtualized list rendering,FlatList for 50+ items,ScrollView with map,<FlatList data={items} />,<ScrollView>{items.map()}</ScrollView>,High,https://reactnative.dev/docs/flatlist
  20 +19,Lists,Provide keyExtractor,Unique keys for list items,keyExtractor with stable ID,Index as key,keyExtractor={(item) => item.id},"keyExtractor={(_, index) => index}",High,
  21 +20,Lists,Optimize renderItem,Memoize list item components,React.memo for list items,Inline render function,renderItem={({ item }) => <MemoizedItem item={item} />},renderItem={({ item }) => <View>...</View>},High,
  22 +21,Lists,Use getItemLayout for fixed height,Skip measurement for performance,getItemLayout when height known,Dynamic measurement for fixed items,"getItemLayout={(_, index) => ({ length: 50, offset: 50 * index, index })}",No getItemLayout for fixed height,Medium,
  23 +22,Lists,Implement windowSize,Control render window,Smaller windowSize for memory,Default windowSize for large lists,windowSize={5},windowSize={21} for huge lists,Medium,
  24 +23,Performance,Use React.memo,Prevent unnecessary re-renders,memo for pure components,No memoization,export default memo(MyComponent),export default MyComponent,Medium,
  25 +24,Performance,Use useCallback for handlers,Stable function references,useCallback for props,New function on every render,"useCallback(() => {}, [deps])",() => handlePress(),Medium,
  26 +25,Performance,Use useMemo for expensive ops,Cache expensive calculations,useMemo for heavy computations,Recalculate every render,"useMemo(() => expensive(), [deps])",const result = expensive(),Medium,
  27 +26,Performance,Avoid anonymous functions in JSX,Prevent re-renders,Named handlers or useCallback,Inline arrow functions,onPress={handlePress},onPress={() => doSomething()},Medium,
  28 +27,Performance,Use Hermes engine,Improved startup and memory,Enable Hermes in build,JavaScriptCore for new projects,hermes_enabled: true,hermes_enabled: false,Medium,https://reactnative.dev/docs/hermes
  29 +28,Images,Use expo-image,Modern performant image component for React Native,"Use expo-image for caching, blurring, and performance",Use default Image for heavy lists or unmaintained libraries,<Image source={url} cachePolicy='memory-disk' /> (expo-image),<FastImage source={url} />,Medium,https://docs.expo.dev/versions/latest/sdk/image/
  30 +29,Images,Specify image dimensions,Prevent layout shifts,width and height for remote images,No dimensions for network images,<Image style={{ width: 100 height: 100 }} />,<Image source={{ uri }} /> no size,High,
  31 +30,Images,Use resizeMode,Control image scaling,resizeMode cover contain,Stretch images,"resizeMode=""cover""",No resizeMode,Low,
  32 +31,Forms,Use controlled inputs,State-controlled form fields,value + onChangeText,Uncontrolled inputs,<TextInput value={text} onChangeText={setText} />,<TextInput defaultValue={text} />,Medium,
  33 +32,Forms,Handle keyboard,Manage keyboard visibility,KeyboardAvoidingView,Content hidden by keyboard,"<KeyboardAvoidingView behavior=""padding"">",No keyboard handling,High,https://reactnative.dev/docs/keyboardavoidingview
  34 +33,Forms,Use proper keyboard types,Appropriate keyboard for input,keyboardType for input type,Default keyboard for all,"keyboardType=""email-address""","keyboardType=""default"" for email",Low,
  35 +34,Touch,Use Pressable,Modern touch handling,Pressable for touch interactions,TouchableOpacity for new code,<Pressable onPress={} />,<TouchableOpacity onPress={} />,Low,https://reactnative.dev/docs/pressable
  36 +35,Touch,Provide touch feedback,Visual feedback on press,Ripple or opacity change,No feedback on press,android_ripple={{ color: 'gray' }},No press feedback,Medium,
  37 +36,Touch,Set hitSlop for small targets,Increase touch area,hitSlop for icons and small buttons,Tiny touch targets,hitSlop={{ top: 10 bottom: 10 }},44x44 with no hitSlop,Medium,
  38 +37,Animation,Use Reanimated,High-performance animations,react-native-reanimated,Animated API for complex,useSharedValue useAnimatedStyle,Animated.timing for gesture,Medium,https://docs.swmansion.com/react-native-reanimated/
  39 +38,Animation,Run on UI thread,worklets for smooth animation,Run animations on UI thread,JS thread animations,runOnUI(() => {}),Animated on JS thread,High,
  40 +39,Animation,Use gesture handler,Native gesture recognition,react-native-gesture-handler,JS-based gesture handling,<GestureDetector>,<View onTouchMove={} />,Medium,https://docs.swmansion.com/react-native-gesture-handler/
  41 +40,Async,Handle loading states,Show loading indicators,ActivityIndicator during load,Empty screen during load,{isLoading ? <ActivityIndicator /> : <Content />},No loading state,Medium,
  42 +41,Async,Handle errors gracefully,Error boundaries and fallbacks,Error UI for failed requests,Crash on error,{error ? <ErrorView /> : <Content />},No error handling,High,
  43 +42,Async,Cancel async operations,Cleanup on unmount,AbortController or cleanup,Memory leaks from async,useEffect cleanup,No cleanup for subscriptions,High,
  44 +43,Accessibility,Add accessibility labels,Describe UI elements,accessibilityLabel for all interactive,Missing labels,"accessibilityLabel=""Submit form""",<Pressable> without label,High,https://reactnative.dev/docs/accessibility
  45 +44,Accessibility,Use accessibility roles,Semantic meaning,accessibilityRole for elements,Wrong roles,"accessibilityRole=""button""",No role for button,Medium,
  46 +45,Accessibility,Support screen readers,Test with TalkBack/VoiceOver,Test with screen readers,Skip accessibility testing,Regular TalkBack testing,No screen reader testing,High,
  47 +46,Testing,Use React Native Testing Library,Component testing,render and fireEvent,Enzyme or manual testing,render(<Component />),shallow(<Component />),Medium,https://callstack.github.io/react-native-testing-library/
  48 +47,Testing,Test on real devices,Real device behavior,Test on iOS and Android devices,Simulator only,Device testing in CI,Simulator only testing,High,
  49 +48,Testing,Use Detox for E2E,End-to-end testing,Detox for critical flows,Manual E2E testing,detox test,Manual testing only,Medium,https://wix.github.io/Detox/
  50 +49,Native,Use native modules carefully,Bridge has overhead,Batch native calls,Frequent bridge crossing,Batch updates,Call native on every keystroke,High,
  51 +50,Native,Use Expo when possible,Simplified development,Expo for standard features,Bare RN for simple apps,expo install package,react-native link package,Low,https://docs.expo.dev/
  52 +51,Native,Handle permissions,Request permissions properly,Check and request permissions,Assume permissions granted,PermissionsAndroid.request(),Access without permission check,High,https://reactnative.dev/docs/permissionsandroid
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/stacks/react.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,State,Use useState for local state,Simple component state should use useState hook,useState for form inputs toggles counters,Class components this.state,"const [count, setCount] = useState(0)",this.state = { count: 0 },Medium,https://react.dev/reference/react/useState
  3 +2,State,Lift state up when needed,Share state between siblings by lifting to parent,Lift shared state to common ancestor,Prop drilling through many levels,Parent holds state passes down,Deep prop chains,Medium,https://react.dev/learn/sharing-state-between-components
  4 +3,State,Use useReducer for complex state,Complex state logic benefits from reducer pattern,useReducer for state with multiple sub-values,Multiple useState for related values,useReducer with action types,5+ useState calls that update together,Medium,https://react.dev/reference/react/useReducer
  5 +4,State,Avoid unnecessary state,Derive values from existing state when possible,Compute derived values in render,Store derivable values in state,const total = items.reduce(...),"const [total, setTotal] = useState(0)",High,https://react.dev/learn/choosing-the-state-structure
  6 +5,State,Initialize state lazily,Use function form for expensive initial state,useState(() => computeExpensive()),useState(computeExpensive()),useState(() => JSON.parse(data)),useState(JSON.parse(data)),Medium,https://react.dev/reference/react/useState#avoiding-recreating-the-initial-state
  7 +6,Effects,Clean up effects,Return cleanup function for subscriptions timers,Return cleanup function in useEffect,No cleanup for subscriptions,useEffect(() => { sub(); return unsub; }),useEffect(() => { subscribe(); }),High,https://react.dev/reference/react/useEffect#connecting-to-an-external-system
  8 +7,Effects,Specify dependencies correctly,Include all values used inside effect in deps array,All referenced values in dependency array,Empty deps with external references,[value] when using value in effect,[] when using props/state in effect,High,https://react.dev/reference/react/useEffect#specifying-reactive-dependencies
  9 +8,Effects,Avoid unnecessary effects,Don't use effects for transforming data or events,Transform data during render handle events directly,useEffect for derived state or event handling,const filtered = items.filter(...),useEffect(() => setFiltered(items.filter(...))),High,https://react.dev/learn/you-might-not-need-an-effect
  10 +9,Effects,Use refs for non-reactive values,Store values that don't trigger re-renders in refs,useRef for interval IDs DOM elements,useState for values that don't need render,const intervalRef = useRef(null),"const [intervalId, setIntervalId] = useState()",Medium,https://react.dev/reference/react/useRef
  11 +10,Rendering,Use keys properly,Stable unique keys for list items,Use stable IDs as keys,Array index as key for dynamic lists,key={item.id},key={index},High,https://react.dev/learn/rendering-lists#keeping-list-items-in-order-with-key
  12 +11,Rendering,Memoize expensive calculations,Use useMemo for costly computations,useMemo for expensive filtering/sorting,Recalculate every render,"useMemo(() => expensive(), [deps])",const result = expensiveCalc(),Medium,https://react.dev/reference/react/useMemo
  13 +12,Rendering,Memoize callbacks passed to children,Use useCallback for functions passed as props,useCallback for handlers passed to memoized children,New function reference every render,"useCallback(() => {}, [deps])",const handler = () => {},Medium,https://react.dev/reference/react/useCallback
  14 +13,Rendering,Use React.memo wisely,Wrap components that render often with same props,memo for pure components with stable props,memo everything or nothing,memo(ExpensiveList),memo(SimpleButton),Low,https://react.dev/reference/react/memo
  15 +14,Rendering,Avoid inline object/array creation in JSX,Create objects outside render or memoize,Define style objects outside component,Inline objects in props,<div style={styles.container}>,<div style={{ margin: 10 }}>,Medium,
  16 +15,Components,Keep components small and focused,Single responsibility for each component,One concern per component,Large multi-purpose components,<UserAvatar /><UserName />,<UserCard /> with 500 lines,Medium,
  17 +16,Components,Use composition over inheritance,Compose components using children and props,Use children prop for flexibility,Inheritance hierarchies,<Card>{content}</Card>,class SpecialCard extends Card,Medium,https://react.dev/learn/thinking-in-react
  18 +17,Components,Colocate related code,Keep related components and hooks together,Related files in same directory,Flat structure with many files,components/User/UserCard.tsx,components/UserCard.tsx + hooks/useUser.ts,Low,
  19 +18,Components,Use fragments to avoid extra DOM,Fragment or <> for multiple elements without wrapper,<> for grouping without DOM node,Extra div wrappers,<>{items.map(...)}</>,<div>{items.map(...)}</div>,Low,https://react.dev/reference/react/Fragment
  20 +19,Props,Destructure props,Destructure props for cleaner component code,Destructure in function signature,props.name props.value throughout,"function User({ name, age })",function User(props),Low,
  21 +20,Props,Provide default props values,Use default parameters or defaultProps,Default values in destructuring,Undefined checks throughout,function Button({ size = 'md' }),if (size === undefined) size = 'md',Low,
  22 +21,Props,Avoid prop drilling,Use context or composition for deeply nested data,Context for global data composition for UI,Passing props through 5+ levels,<UserContext.Provider>,<A user={u}><B user={u}><C user={u}>,Medium,https://react.dev/learn/passing-data-deeply-with-context
  23 +22,Props,Validate props with TypeScript,Use TypeScript interfaces for prop types,interface Props { name: string },PropTypes or no validation,interface ButtonProps { onClick: () => void },Button.propTypes = {},Medium,
  24 +23,Events,Use synthetic events correctly,React normalizes events across browsers,e.preventDefault() e.stopPropagation(),Access native event unnecessarily,onClick={(e) => e.preventDefault()},onClick={(e) => e.nativeEvent.preventDefault()},Low,https://react.dev/reference/react-dom/components/common#react-event-object
  25 +24,Events,Avoid binding in render,Use arrow functions in class or hooks,Arrow functions in functional components,bind in render or constructor,const handleClick = () => {},this.handleClick.bind(this),Medium,
  26 +25,Events,Pass event handlers not call results,Pass function reference not invocation,onClick={handleClick},onClick={handleClick()} causing immediate call,onClick={handleClick},onClick={handleClick()},High,
  27 +26,Forms,Controlled components for forms,Use state to control form inputs,value + onChange for inputs,Uncontrolled inputs with refs,<input value={val} onChange={setVal}>,<input ref={inputRef}>,Medium,https://react.dev/reference/react-dom/components/input#controlling-an-input-with-a-state-variable
  28 +27,Forms,Handle form submission properly,Prevent default and handle in submit handler,onSubmit with preventDefault,onClick on submit button only,<form onSubmit={handleSubmit}>,<button onClick={handleSubmit}>,Medium,
  29 +28,Forms,Debounce rapid input changes,Debounce search/filter inputs,useDeferredValue or debounce for search,Filter on every keystroke,useDeferredValue(searchTerm),useEffect filtering on every change,Medium,https://react.dev/reference/react/useDeferredValue
  30 +29,Hooks,Follow rules of hooks,Only call hooks at top level and in React functions,Hooks at component top level,Hooks in conditions loops or callbacks,"const [x, setX] = useState()","if (cond) { const [x, setX] = useState() }",High,https://react.dev/reference/rules/rules-of-hooks
  31 +30,Hooks,Custom hooks for reusable logic,Extract shared stateful logic to custom hooks,useCustomHook for reusable patterns,Duplicate hook logic across components,const { data } = useFetch(url),Duplicate useEffect/useState in components,Medium,https://react.dev/learn/reusing-logic-with-custom-hooks
  32 +31,Hooks,Name custom hooks with use prefix,Custom hooks must start with use,useFetch useForm useAuth,fetchData or getData for hook,function useFetch(url),function fetchData(url),High,
  33 +32,Context,Use context for global data,Context for theme auth locale,Context for app-wide state,Context for frequently changing data,<ThemeContext.Provider>,Context for form field values,Medium,https://react.dev/learn/passing-data-deeply-with-context
  34 +33,Context,Split contexts by concern,Separate contexts for different domains,ThemeContext + AuthContext,One giant AppContext,<ThemeProvider><AuthProvider>,<AppProvider value={{theme user...}}>,Medium,
  35 +34,Context,Memoize context values,Prevent unnecessary re-renders with useMemo,useMemo for context value object,New object reference every render,"value={useMemo(() => ({...}), [])}","value={{ user, theme }}",High,
  36 +35,Performance,Use React DevTools Profiler,Profile to identify performance bottlenecks,Profile before optimizing,Optimize without measuring,React DevTools Profiler,Guessing at bottlenecks,Medium,https://react.dev/learn/react-developer-tools
  37 +36,Performance,Lazy load components,Use React.lazy for code splitting,lazy() for routes and heavy components,Import everything upfront,const Page = lazy(() => import('./Page')),import Page from './Page',Medium,https://react.dev/reference/react/lazy
  38 +37,Performance,Virtualize long lists,Use windowing for lists over 100 items,react-window or react-virtual,Render thousands of DOM nodes,<VirtualizedList items={items}/>,{items.map(i => <Item />)},High,
  39 +38,Performance,Batch state updates,React 18 auto-batches but be aware,Let React batch related updates,Manual batching with flushSync,setA(1); setB(2); // batched,flushSync(() => setA(1)),Low,https://react.dev/learn/queueing-a-series-of-state-updates
  40 +39,ErrorHandling,Use error boundaries,Catch JavaScript errors in component tree,ErrorBoundary wrapping sections,Let errors crash entire app,<ErrorBoundary><App/></ErrorBoundary>,No error handling,High,https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary
  41 +40,ErrorHandling,Handle async errors,Catch errors in async operations,try/catch in async handlers,Unhandled promise rejections,try { await fetch() } catch(e) {},await fetch() // no catch,High,
  42 +41,Testing,Test behavior not implementation,Test what user sees and does,Test renders and interactions,Test internal state or methods,expect(screen.getByText('Hello')),expect(component.state.name),Medium,https://testing-library.com/docs/react-testing-library/intro/
  43 +42,Testing,Use testing-library queries,Use accessible queries,getByRole getByLabelText,getByTestId for everything,getByRole('button'),getByTestId('submit-btn'),Medium,https://testing-library.com/docs/queries/about#priority
  44 +43,Accessibility,Use semantic HTML,Proper HTML elements for their purpose,button for clicks nav for navigation,div with onClick for buttons,<button onClick={...}>,<div onClick={...}>,High,https://react.dev/reference/react-dom/components#all-html-components
  45 +44,Accessibility,Manage focus properly,Handle focus for modals dialogs,Focus trap in modals return focus on close,No focus management,useEffect to focus input,Modal without focus trap,High,
  46 +45,Accessibility,Announce dynamic content,Use ARIA live regions for updates,aria-live for dynamic updates,Silent updates to screen readers,"<div aria-live=""polite"">{msg}</div>",<div>{msg}</div>,Medium,
  47 +46,Accessibility,Label form controls,Associate labels with inputs,htmlFor matching input id,Placeholder as only label,"<label htmlFor=""email"">Email</label>","<input placeholder=""Email""/>",High,
  48 +47,TypeScript,Type component props,Define interfaces for all props,interface Props with all prop types,any or missing types,interface Props { name: string },function Component(props: any),High,
  49 +48,TypeScript,Type state properly,Provide types for useState,useState<Type>() for complex state,Inferred any types,useState<User | null>(null),useState(null),Medium,
  50 +49,TypeScript,Type event handlers,Use React event types,React.ChangeEvent<HTMLInputElement>,Generic Event type,onChange: React.ChangeEvent<HTMLInputElement>,onChange: Event,Medium,
  51 +50,TypeScript,Use generics for reusable components,Generic components for flexible typing,Generic props for list components,Union types for flexibility,<List<T> items={T[]}>,<List items={any[]}>,Medium,
  52 +51,Patterns,Container/Presentational split,Separate data logic from UI,Container fetches presentational renders,Mixed data and UI in one,<UserContainer><UserView/></UserContainer>,<User /> with fetch and render,Low,
  53 +52,Patterns,Render props for flexibility,Share code via render prop pattern,Render prop for customizable rendering,Duplicate logic across components,<DataFetcher render={data => ...}/>,Copy paste fetch logic,Low,https://react.dev/reference/react/cloneElement#passing-data-with-a-render-prop
  54 +53,Patterns,Compound components,Related components sharing state,Tab + TabPanel sharing context,Prop drilling between related,<Tabs><Tab/><TabPanel/></Tabs>,<Tabs tabs={[]} panels={[...]}/>,Low,
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/stacks/svelte.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Reactivity,Use $: for reactive statements,Automatic dependency tracking,$: for derived values,Manual recalculation,$: doubled = count * 2,let doubled; count && (doubled = count * 2),Medium,https://svelte.dev/docs/svelte-components#script-3-$-marks-a-statement-as-reactive
  3 +2,Reactivity,Trigger reactivity with assignment,Svelte tracks assignments not mutations,Reassign arrays/objects to trigger update,Mutate without reassignment,"items = [...items, newItem]",items.push(newItem),High,https://svelte.dev/docs/svelte-components#script-2-assignments-are-reactive
  4 +3,Reactivity,Use $state in Svelte 5,Runes for explicit reactivity,let count = $state(0),Implicit reactivity in Svelte 5,let count = $state(0),let count = 0 (Svelte 5),Medium,https://svelte.dev/blog/runes
  5 +4,Reactivity,Use $derived for computed values,$derived replaces $: in Svelte 5,let doubled = $derived(count * 2),$: in Svelte 5,let doubled = $derived(count * 2),$: doubled = count * 2 (Svelte 5),Medium,
  6 +5,Reactivity,Use $effect for side effects,$effect replaces $: side effects,Use $effect for subscriptions,$: for side effects in Svelte 5,$effect(() => console.log(count)),$: console.log(count) (Svelte 5),Medium,
  7 +6,Props,Export let for props,Declare props with export let,export let propName,Props without export,export let count = 0,let count = 0,High,https://svelte.dev/docs/svelte-components#script-1-export-creates-a-component-prop
  8 +7,Props,Use $props in Svelte 5,$props rune for prop access,let { name } = $props(),export let in Svelte 5,"let { name, age = 0 } = $props()",export let name; export let age = 0,Medium,
  9 +8,Props,Provide default values,Default props with assignment,export let count = 0,Required props without defaults,export let count = 0,export let count,Low,
  10 +9,Props,Use spread props,Pass through unknown props,{...$$restProps} on elements,Manual prop forwarding,<button {...$$restProps}>,<button class={$$props.class}>,Low,https://svelte.dev/docs/basic-markup#attributes-and-props
  11 +10,Bindings,Use bind: for two-way binding,Simplified input handling,bind:value for inputs,on:input with manual update,<input bind:value={name}>,<input value={name} on:input={e => name = e.target.value}>,Low,https://svelte.dev/docs/element-directives#bind-property
  12 +11,Bindings,Bind to DOM elements,Reference DOM nodes,bind:this for element reference,querySelector in onMount,<div bind:this={el}>,onMount(() => el = document.querySelector()),Medium,
  13 +12,Bindings,Use bind:group for radios/checkboxes,Simplified group handling,bind:group for radio/checkbox groups,Manual checked handling,"<input type=""radio"" bind:group={selected}>","<input type=""radio"" checked={selected === value}>",Low,
  14 +13,Events,Use on: for event handlers,Event directive syntax,on:click={handler},addEventListener in onMount,<button on:click={handleClick}>,onMount(() => btn.addEventListener()),Medium,https://svelte.dev/docs/element-directives#on-eventname
  15 +14,Events,Forward events with on:event,Pass events to parent,on:click without handler,createEventDispatcher for DOM events,<button on:click>,"dispatch('click', event)",Low,
  16 +15,Events,Use createEventDispatcher,Custom component events,dispatch for custom events,on:event for custom events,"dispatch('save', { data })",on:save without dispatch,Medium,https://svelte.dev/docs/svelte#createeventdispatcher
  17 +16,Lifecycle,Use onMount for initialization,Run code after component mounts,onMount for setup and data fetching,Code in script body for side effects,onMount(() => fetchData()),fetchData() in script body,High,https://svelte.dev/docs/svelte#onmount
  18 +17,Lifecycle,Return cleanup from onMount,Automatic cleanup on destroy,Return function from onMount,Separate onDestroy for paired cleanup,onMount(() => { sub(); return unsub }),onMount(sub); onDestroy(unsub),Medium,
  19 +18,Lifecycle,Use onDestroy sparingly,Only when onMount cleanup not possible,onDestroy for non-mount cleanup,onDestroy for mount-related cleanup,onDestroy for store unsubscribe,onDestroy(() => clearInterval(id)),Low,
  20 +19,Lifecycle,Avoid beforeUpdate/afterUpdate,Usually not needed,Reactive statements instead,beforeUpdate for derived state,$: if (x) doSomething(),beforeUpdate(() => doSomething()),Low,
  21 +20,Stores,Use writable for mutable state,Basic reactive store,writable for shared mutable state,Local variables for shared state,const count = writable(0),let count = 0 in module,Medium,https://svelte.dev/docs/svelte-store#writable
  22 +21,Stores,Use readable for read-only state,External data sources,readable for derived/external data,writable for read-only data,"readable(0, set => interval(set))",writable(0) for timer,Low,https://svelte.dev/docs/svelte-store#readable
  23 +22,Stores,Use derived for computed stores,Combine or transform stores,derived for computed values,Manual subscription for derived,"derived(count, $c => $c * 2)",count.subscribe(c => doubled = c * 2),Medium,https://svelte.dev/docs/svelte-store#derived
  24 +23,Stores,Use $ prefix for auto-subscription,Automatic subscribe/unsubscribe,$storeName in components,Manual subscription,{$count},count.subscribe(c => value = c),High,
  25 +24,Stores,Clean up custom subscriptions,Unsubscribe when component destroys,Return unsubscribe from onMount,Leave subscriptions open,onMount(() => store.subscribe(fn)),store.subscribe(fn) in script,High,
  26 +25,Slots,Use slots for composition,Content projection,<slot> for flexible content,Props for all content,<slot>Default</slot>,"<Component content=""text""/>",Medium,https://svelte.dev/docs/special-elements#slot
  27 +26,Slots,Name slots for multiple areas,Multiple content areas,"<slot name=""header"">",Single slot for complex layouts,"<slot name=""header""><slot name=""footer"">",<slot> with complex conditionals,Low,
  28 +27,Slots,Check slot content with $$slots,Conditional slot rendering,$$slots.name for conditional rendering,Always render slot wrapper,"{#if $$slots.footer}<slot name=""footer""/>{/if}","<div><slot name=""footer""/></div>",Low,
  29 +28,Styling,Use scoped styles by default,Styles scoped to component,<style> for component styles,Global styles for component,:global() only when needed,<style> all global,Medium,https://svelte.dev/docs/svelte-components#style
  30 +29,Styling,Use :global() sparingly,Escape scoping when needed,:global for third-party styling,Global for all styles,:global(.external-lib),<style> without scoping,Medium,
  31 +30,Styling,Use CSS variables for theming,Dynamic styling,CSS custom properties,Inline styles for themes,"style=""--color: {color}""","style=""color: {color}""",Low,
  32 +31,Transitions,Use built-in transitions,Svelte transition directives,transition:fade for simple effects,Manual CSS transitions,<div transition:fade>,<div class:fade={visible}>,Low,https://svelte.dev/docs/element-directives#transition-fn
  33 +32,Transitions,Use in: and out: separately,Different enter/exit animations,in:fly out:fade for asymmetric,Same transition for both,<div in:fly out:fade>,<div transition:fly>,Low,
  34 +33,Transitions,Add local modifier,Prevent ancestor trigger,transition:fade|local,Global transitions for lists,<div transition:slide|local>,<div transition:slide>,Medium,
  35 +34,Actions,Use actions for DOM behavior,Reusable DOM logic,use:action for DOM enhancements,onMount for each usage,<div use:clickOutside>,onMount(() => setupClickOutside(el)),Medium,https://svelte.dev/docs/element-directives#use-action
  36 +35,Actions,Return update and destroy,Lifecycle methods for actions,"Return { update, destroy }",Only initial setup,"return { update(params) {}, destroy() {} }",return destroy only,Medium,
  37 +36,Actions,Pass parameters to actions,Configure action behavior,use:action={params},Hardcoded action behavior,<div use:tooltip={options}>,<div use:tooltip>,Low,
  38 +37,Logic,Use {#if} for conditionals,Template conditionals,{#if} {:else if} {:else},Ternary in expressions,{#if cond}...{:else}...{/if},{cond ? a : b} for complex,Low,https://svelte.dev/docs/logic-blocks#if
  39 +38,Logic,Use {#each} for lists,List rendering,{#each} with key,Map in expression,{#each items as item (item.id)},{items.map(i => `<div>${i}</div>`)},Medium,
  40 +39,Logic,Always use keys in {#each},Proper list reconciliation,(item.id) for unique key,Index as key or no key,{#each items as item (item.id)},"{#each items as item, i (i)}",High,
  41 +40,Logic,Use {#await} for promises,Handle async states,{#await} for loading/error states,Manual promise handling,{#await promise}...{:then}...{:catch},{#if loading}...{#if error},Medium,https://svelte.dev/docs/logic-blocks#await
  42 +41,SvelteKit,Use +page.svelte for routes,File-based routing,+page.svelte for route components,Custom routing setup,routes/about/+page.svelte,routes/About.svelte,Medium,https://kit.svelte.dev/docs/routing
  43 +42,SvelteKit,Use +page.js for data loading,Load data before render,load function in +page.js,onMount for data fetching,export function load() {},onMount(() => fetchData()),High,https://kit.svelte.dev/docs/load
  44 +43,SvelteKit,Use +page.server.js for server-only,Server-side data loading,+page.server.js for sensitive data,+page.js for API keys,+page.server.js with DB access,+page.js with DB access,High,
  45 +44,SvelteKit,Use form actions,Server-side form handling,+page.server.js actions,API routes for forms,export const actions = { default },fetch('/api/submit'),Medium,https://kit.svelte.dev/docs/form-actions
  46 +45,SvelteKit,Use $app/stores for app state,$page $navigating $updated,$page for current page data,Manual URL parsing,import { page } from '$app/stores',window.location.pathname,Medium,https://kit.svelte.dev/docs/modules#$app-stores
  47 +46,Performance,Use {#key} for forced re-render,Reset component state,{#key id} for fresh instance,Manual destroy/create,{#key item.id}<Component/>{/key},on:change={() => component = null},Low,https://svelte.dev/docs/logic-blocks#key
  48 +47,Performance,Avoid unnecessary reactivity,Not everything needs $:,$: only for side effects,$: for simple assignments,$: if (x) console.log(x),$: y = x (when y = x works),Low,
  49 +48,Performance,Use immutable compiler option,Skip equality checks,immutable: true for large lists,Default for all components,<svelte:options immutable/>,Default without immutable,Low,
  50 +49,TypeScript,"Use lang=""ts"" in script",TypeScript support,"<script lang=""ts"">",JavaScript for typed projects,"<script lang=""ts"">",<script> with JSDoc,Medium,https://svelte.dev/docs/typescript
  51 +50,TypeScript,Type props with interface,Explicit prop types,interface $$Props for types,Untyped props,interface $$Props { name: string },export let name,Medium,
  52 +51,TypeScript,Type events with createEventDispatcher,Type-safe events,createEventDispatcher<Events>(),Untyped dispatch,createEventDispatcher<{ save: Data }>(),createEventDispatcher(),Medium,
  53 +52,Accessibility,Use semantic elements,Proper HTML in templates,button nav main appropriately,div for everything,<button on:click>,<div on:click>,High,
  54 +53,Accessibility,Add aria to dynamic content,Accessible state changes,aria-live for updates,Silent dynamic updates,"<div aria-live=""polite"">{message}</div>",<div>{message}</div>,Medium,
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/stacks/swiftui.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Views,Use struct for views,SwiftUI views are value types,struct MyView: View,class MyView: View,struct ContentView: View { var body: some View },class ContentView: View,High,https://developer.apple.com/documentation/swiftui/view
  3 +2,Views,Keep views small and focused,Single responsibility for each view,Extract subviews for complex layouts,Large monolithic views,Extract HeaderView FooterView,500+ line View struct,Medium,
  4 +3,Views,Use body computed property,body returns the view hierarchy,var body: some View { },func body() -> some View,"var body: some View { Text(""Hello"") }",func body() -> Text,High,
  5 +4,Views,Prefer composition over inheritance,Compose views using ViewBuilder,Combine smaller views,Inheritance hierarchies,VStack { Header() Content() },class SpecialView extends BaseView,Medium,
  6 +5,State,Use @State for local state,Simple value types owned by view,@State for view-local primitives,@State for shared data,@State private var count = 0,@State var sharedData: Model,High,https://developer.apple.com/documentation/swiftui/state
  7 +6,State,Use @Binding for two-way data,Pass mutable state to child views,@Binding for child input,@State in child for parent data,@Binding var isOn: Bool,$isOn to pass binding,Medium,https://developer.apple.com/documentation/swiftui/binding
  8 +7,State,Use @StateObject for reference types,ObservableObject owned by view,@StateObject for view-created objects,@ObservedObject for owned objects,@StateObject private var vm = ViewModel(),@ObservedObject var vm = ViewModel(),High,https://developer.apple.com/documentation/swiftui/stateobject
  9 +8,State,Use @ObservedObject for injected objects,Reference types passed from parent,@ObservedObject for injected dependencies,@StateObject for injected objects,@ObservedObject var vm: ViewModel,@StateObject var vm: ViewModel (injected),High,https://developer.apple.com/documentation/swiftui/observedobject
  10 +9,State,Use @EnvironmentObject for shared state,App-wide state injection,@EnvironmentObject for global state,Prop drilling through views,@EnvironmentObject var settings: Settings,Pass settings through 5 views,Medium,https://developer.apple.com/documentation/swiftui/environmentobject
  11 +10,State,Use @Published in ObservableObject,Automatically publish property changes,@Published for observed properties,Manual objectWillChange calls,@Published var items: [Item] = [],var items: [Item] { didSet { objectWillChange.send() } },Medium,
  12 +11,Observable,Use @Observable macro (iOS 17+),Modern observation without Combine,@Observable class for view models,ObservableObject for new projects,@Observable class ViewModel { },class ViewModel: ObservableObject,Medium,https://developer.apple.com/documentation/observation
  13 +12,Observable,Use @Bindable for @Observable,Create bindings from @Observable,@Bindable var vm for bindings,@Binding with @Observable,@Bindable var viewModel,$viewModel.name with @Observable,Medium,
  14 +13,Layout,Use VStack HStack ZStack,Standard stack-based layouts,Stacks for linear arrangements,GeometryReader for simple layouts,VStack { Text() Image() },GeometryReader for vertical list,Medium,https://developer.apple.com/documentation/swiftui/vstack
  15 +14,Layout,Use LazyVStack LazyHStack for lists,Lazy loading for performance,Lazy stacks for long lists,Regular stacks for 100+ items,LazyVStack { ForEach(items) },VStack { ForEach(largeArray) },High,https://developer.apple.com/documentation/swiftui/lazyvstack
  16 +15,Layout,Use GeometryReader sparingly,Only when needed for sizing,GeometryReader for responsive layouts,GeometryReader everywhere,GeometryReader for aspect ratio,GeometryReader wrapping everything,Medium,
  17 +16,Layout,Use spacing and padding consistently,Consistent spacing throughout app,Design system spacing values,Magic numbers for spacing,.padding(16) or .padding(),".padding(13), .padding(17)",Low,
  18 +17,Layout,Use frame modifiers correctly,Set explicit sizes when needed,.frame(maxWidth: .infinity),Fixed sizes for responsive content,.frame(maxWidth: .infinity),.frame(width: 375),Medium,
  19 +18,Modifiers,Order modifiers correctly,Modifier order affects rendering,Background before padding for full coverage,Wrong modifier order,.padding().background(Color.red),.background(Color.red).padding(),High,
  20 +19,Modifiers,Create custom ViewModifiers,Reusable modifier combinations,ViewModifier for repeated styling,Duplicate modifier chains,struct CardStyle: ViewModifier,.shadow().cornerRadius() everywhere,Medium,https://developer.apple.com/documentation/swiftui/viewmodifier
  21 +20,Modifiers,Use conditional modifiers carefully,Avoid changing view identity,if-else with same view type,Conditional that changes view identity,Text(title).foregroundColor(isActive ? .blue : .gray),if isActive { Text().bold() } else { Text() },Medium,
  22 +21,Navigation,Use NavigationStack (iOS 16+),Modern navigation with type-safe paths,NavigationStack with navigationDestination,NavigationView for new projects,NavigationStack { },NavigationView { } (deprecated),Medium,https://developer.apple.com/documentation/swiftui/navigationstack
  23 +22,Navigation,Use navigationDestination,Type-safe navigation destinations,.navigationDestination(for:),NavigationLink(destination:),.navigationDestination(for: Item.self),NavigationLink(destination: DetailView()),Medium,
  24 +23,Navigation,Use @Environment for dismiss,Programmatic navigation dismissal,@Environment(\.dismiss) var dismiss,presentationMode (deprecated),@Environment(\.dismiss) var dismiss,@Environment(\.presentationMode),Low,
  25 +24,Lists,Use List for scrollable content,Built-in scrolling and styling,List for standard scrollable content,ScrollView + VStack for simple lists,List { ForEach(items) { } },ScrollView { VStack { ForEach } },Low,https://developer.apple.com/documentation/swiftui/list
  26 +25,Lists,Provide stable identifiers,Use Identifiable or explicit id,Identifiable protocol or id parameter,Index as identifier,ForEach(items) where Item: Identifiable,"ForEach(items.indices, id: \.self)",High,
  27 +26,Lists,Use onDelete and onMove,Standard list editing,onDelete for swipe to delete,Custom delete implementation,.onDelete(perform: delete),.onTapGesture for delete,Low,
  28 +27,Forms,Use Form for settings,Grouped input controls,Form for settings screens,Manual grouping for forms,Form { Section { Toggle() } },VStack { Toggle() },Low,https://developer.apple.com/documentation/swiftui/form
  29 +28,Forms,Use @FocusState for keyboard,Manage keyboard focus,@FocusState for text field focus,Manual first responder handling,@FocusState private var isFocused: Bool,UIKit first responder,Medium,https://developer.apple.com/documentation/swiftui/focusstate
  30 +29,Forms,Validate input properly,Show validation feedback,Real-time validation feedback,Submit without validation,TextField with validation state,TextField without error handling,Medium,
  31 +30,Async,Use .task for async work,Automatic cancellation on view disappear,.task for view lifecycle async,onAppear with Task,.task { await loadData() },onAppear { Task { await loadData() } },Medium,https://developer.apple.com/documentation/swiftui/view/task(priority:_:)
  32 +31,Async,Handle loading states,Show progress during async operations,ProgressView during loading,Empty view during load,if isLoading { ProgressView() },No loading indicator,Medium,
  33 +32,Async,Use @MainActor for UI updates,Ensure UI updates on main thread,@MainActor on view models,Manual DispatchQueue.main,@MainActor class ViewModel,DispatchQueue.main.async,Medium,
  34 +33,Animation,Use withAnimation,Animate state changes,withAnimation for state transitions,No animation for state changes,withAnimation { isExpanded.toggle() },isExpanded.toggle(),Low,https://developer.apple.com/documentation/swiftui/withanimation(_:_:)
  35 +34,Animation,Use .animation modifier,Apply animations to views,.animation(.spring()) on view,Manual animation timing,.animation(.easeInOut),CABasicAnimation equivalent,Low,
  36 +35,Animation,Respect reduced motion,Check accessibility settings,Check accessibilityReduceMotion,Ignore motion preferences,@Environment(\.accessibilityReduceMotion),Always animate regardless,High,
  37 +36,Preview,Use #Preview macro (Xcode 15+),Modern preview syntax,#Preview for view previews,PreviewProvider protocol,#Preview { ContentView() },struct ContentView_Previews: PreviewProvider,Low,
  38 +37,Preview,Create multiple previews,Test different states and devices,Multiple previews for states,Single preview only,"#Preview(""Light"") { } #Preview(""Dark"") { }",Single preview configuration,Low,
  39 +38,Preview,Use preview data,Dedicated preview mock data,Static preview data,Production data in previews,Item.preview for preview,Fetch real data in preview,Low,
  40 +39,Performance,Avoid expensive body computations,Body should be fast to compute,Precompute in view model,Heavy computation in body,vm.computedValue in body,Complex calculation in body,High,
  41 +40,Performance,Use Equatable views,Skip unnecessary view updates,Equatable for complex views,Default equality for all views,struct MyView: View Equatable,No Equatable conformance,Medium,
  42 +41,Performance,Profile with Instruments,Measure before optimizing,Use SwiftUI Instruments,Guess at performance issues,Profile with Instruments,Optimize without measuring,Medium,
  43 +42,Accessibility,Add accessibility labels,Describe UI elements,.accessibilityLabel for context,Missing labels,".accessibilityLabel(""Close button"")",Button without label,High,https://developer.apple.com/documentation/swiftui/view/accessibilitylabel(_:)-1d7jv
  44 +43,Accessibility,Support Dynamic Type,Respect text size preferences,Scalable fonts and layouts,Fixed font sizes,.font(.body) with Dynamic Type,.font(.system(size: 16)),High,
  45 +44,Accessibility,Use semantic views,Proper accessibility traits,Correct accessibilityTraits,Wrong semantic meaning,Button for actions Image for display,Image that acts like button,Medium,
  46 +45,Testing,Use ViewInspector for testing,Third-party view testing,ViewInspector for unit tests,UI tests only,ViewInspector assertions,Only XCUITest,Medium,
  47 +46,Testing,Test view models,Unit test business logic,XCTest for view model,Skip view model testing,Test ViewModel methods,No unit tests,Medium,
  48 +47,Testing,Use preview as visual test,Previews catch visual regressions,Multiple preview configurations,No visual verification,Preview different states,Single preview only,Low,
  49 +48,Architecture,Use MVVM pattern,Separate view and logic,ViewModel for business logic,Logic in View,ObservableObject ViewModel,@State for complex logic,Medium,
  50 +49,Architecture,Keep views dumb,Views display view model state,View reads from ViewModel,Business logic in View,view.items from vm.items,Complex filtering in View,Medium,
  51 +50,Architecture,Use dependency injection,Inject dependencies for testing,Initialize with dependencies,Hard-coded dependencies,init(service: ServiceProtocol),let service = RealService(),Medium,
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/stacks/vue.csv 0 → 100644
  1 +No,Category,Guideline,Description,Do,Don't,Code Good,Code Bad,Severity,Docs URL
  2 +1,Composition,Use Composition API for new projects,Composition API offers better TypeScript support and logic reuse,<script setup> for components,Options API for new projects,<script setup>,export default { data() },Medium,https://vuejs.org/guide/extras/composition-api-faq.html
  3 +2,Composition,Use script setup syntax,Cleaner syntax with automatic exports,<script setup> with defineProps,setup() function manually,<script setup>,<script> setup() { return {} },Low,https://vuejs.org/api/sfc-script-setup.html
  4 +3,Reactivity,Use ref for primitives,ref() for primitive values that need reactivity,ref() for strings numbers booleans,reactive() for primitives,const count = ref(0),const count = reactive(0),Medium,https://vuejs.org/guide/essentials/reactivity-fundamentals.html
  5 +4,Reactivity,Use reactive for objects,reactive() for complex objects and arrays,reactive() for objects with multiple properties,ref() for complex objects,const state = reactive({ user: null }),const state = ref({ user: null }),Medium,
  6 +5,Reactivity,Access ref values with .value,Remember .value in script unwrap in template,Use .value in script,Forget .value in script,count.value++,count++ (in script),High,
  7 +6,Reactivity,Use computed for derived state,Computed properties cache and update automatically,computed() for derived values,Methods for derived values,const doubled = computed(() => count.value * 2),const doubled = () => count.value * 2,Medium,https://vuejs.org/guide/essentials/computed.html
  8 +7,Reactivity,Use shallowRef for large objects,Avoid deep reactivity for performance,shallowRef for large data structures,ref for large nested objects,const bigData = shallowRef(largeObject),const bigData = ref(largeObject),Medium,https://vuejs.org/api/reactivity-advanced.html#shallowref
  9 +8,Watchers,Use watchEffect for simple cases,Auto-tracks dependencies,watchEffect for simple reactive effects,watch with explicit deps when not needed,watchEffect(() => console.log(count.value)),"watch(count, (val) => console.log(val))",Low,https://vuejs.org/guide/essentials/watchers.html
  10 +9,Watchers,Use watch for specific sources,Explicit control over what to watch,watch with specific refs,watchEffect for complex conditional logic,"watch(userId, fetchUser)",watchEffect with conditionals,Medium,
  11 +10,Watchers,Clean up side effects,Return cleanup function in watchers,Return cleanup in watchEffect,Leave subscriptions open,watchEffect((onCleanup) => { onCleanup(unsub) }),watchEffect without cleanup,High,
  12 +11,Props,Define props with defineProps,Type-safe prop definitions,defineProps with TypeScript,Props without types,defineProps<{ msg: string }>(),defineProps(['msg']),Medium,https://vuejs.org/guide/typescript/composition-api.html#typing-component-props
  13 +12,Props,Use withDefaults for default values,Provide defaults for optional props,withDefaults with defineProps,Defaults in destructuring,"withDefaults(defineProps<Props>(), { count: 0 })",const { count = 0 } = defineProps(),Medium,
  14 +13,Props,Avoid mutating props,Props should be read-only,Emit events to parent for changes,Direct prop mutation,"emit('update:modelValue', newVal)",props.modelValue = newVal,High,
  15 +14,Emits,Define emits with defineEmits,Type-safe event emissions,defineEmits with types,Emit without definition,defineEmits<{ change: [id: number] }>(),"emit('change', id) without define",Medium,https://vuejs.org/guide/typescript/composition-api.html#typing-component-emits
  16 +15,Emits,Use v-model for two-way binding,Simplified parent-child data flow,v-model with modelValue prop,:value + @input manually,"<Child v-model=""value""/>","<Child :value=""value"" @input=""value = $event""/>",Low,https://vuejs.org/guide/components/v-model.html
  17 +16,Lifecycle,Use onMounted for DOM access,DOM is ready in onMounted,onMounted for DOM operations,Access DOM in setup directly,onMounted(() => el.value.focus()),el.value.focus() in setup,High,https://vuejs.org/api/composition-api-lifecycle.html
  18 +17,Lifecycle,Clean up in onUnmounted,Remove listeners and subscriptions,onUnmounted for cleanup,Leave listeners attached,onUnmounted(() => window.removeEventListener()),No cleanup on unmount,High,
  19 +18,Lifecycle,Avoid onBeforeMount for data,Use onMounted or setup for data fetching,Fetch in onMounted or setup,Fetch in onBeforeMount,onMounted(async () => await fetchData()),onBeforeMount(async () => await fetchData()),Low,
  20 +19,Components,Use single-file components,Keep template script style together,.vue files for components,Separate template/script files,Component.vue with all parts,Component.js + Component.html,Low,
  21 +20,Components,Use PascalCase for components,Consistent component naming,PascalCase in imports and templates,kebab-case in script,<MyComponent/>,<my-component/>,Low,https://vuejs.org/style-guide/rules-strongly-recommended.html
  22 +21,Components,Prefer composition over mixins,Composables replace mixins,Composables for shared logic,Mixins for code reuse,const { data } = useApi(),mixins: [apiMixin],Medium,
  23 +22,Composables,Name composables with use prefix,Convention for composable functions,useFetch useAuth useForm,getData or fetchApi,export function useFetch(),export function fetchData(),Medium,https://vuejs.org/guide/reusability/composables.html
  24 +23,Composables,Return refs from composables,Maintain reactivity when destructuring,Return ref values,Return reactive objects that lose reactivity,return { data: ref(null) },return reactive({ data: null }),Medium,
  25 +24,Composables,Accept ref or value params,Use toValue for flexible inputs,toValue() or unref() for params,Only accept ref or only value,const val = toValue(maybeRef),const val = maybeRef.value,Low,https://vuejs.org/api/reactivity-utilities.html#tovalue
  26 +25,Templates,Use v-bind shorthand,Cleaner template syntax,:prop instead of v-bind:prop,Full v-bind syntax,"<div :class=""cls"">","<div v-bind:class=""cls"">",Low,
  27 +26,Templates,Use v-on shorthand,Cleaner event binding,@event instead of v-on:event,Full v-on syntax,"<button @click=""handler"">","<button v-on:click=""handler"">",Low,
  28 +27,Templates,Avoid v-if with v-for,v-if has higher priority causes issues,Wrap in template or computed filter,v-if on same element as v-for,<template v-for><div v-if>,<div v-for v-if>,High,https://vuejs.org/style-guide/rules-essential.html#avoid-v-if-with-v-for
  29 +28,Templates,Use key with v-for,Proper list rendering and updates,Unique key for each item,Index as key for dynamic lists,"v-for=""item in items"" :key=""item.id""","v-for=""(item, i) in items"" :key=""i""",High,
  30 +29,State,Use Pinia for global state,Official state management for Vue 3,Pinia stores for shared state,Vuex for new projects,const store = useCounterStore(),Vuex with mutations,Medium,https://pinia.vuejs.org/
  31 +30,State,Define stores with defineStore,Composition API style stores,Setup stores with defineStore,Options stores for complex state,"defineStore('counter', () => {})","defineStore('counter', { state })",Low,
  32 +31,State,Use storeToRefs for destructuring,Maintain reactivity when destructuring,storeToRefs(store),Direct destructuring,const { count } = storeToRefs(store),const { count } = store,High,https://pinia.vuejs.org/core-concepts/#destructuring-from-a-store
  33 +32,Routing,Use useRouter and useRoute,Composition API router access,useRouter() useRoute() in setup,this.$router this.$route,const router = useRouter(),this.$router.push(),Medium,https://router.vuejs.org/guide/advanced/composition-api.html
  34 +33,Routing,Lazy load route components,Code splitting for routes,() => import() for components,Static imports for all routes,component: () => import('./Page.vue'),component: Page,Medium,https://router.vuejs.org/guide/advanced/lazy-loading.html
  35 +34,Routing,Use navigation guards,Protect routes and handle redirects,beforeEach for auth checks,Check auth in each component,router.beforeEach((to) => {}),Check auth in onMounted,Medium,
  36 +35,Performance,Use v-once for static content,Skip re-renders for static elements,v-once on never-changing content,v-once on dynamic content,<div v-once>{{ staticText }}</div>,<div v-once>{{ dynamicText }}</div>,Low,https://vuejs.org/api/built-in-directives.html#v-once
  37 +36,Performance,Use v-memo for expensive lists,Memoize list items,v-memo with dependency array,Re-render entire list always,"<div v-for v-memo=""[item.id]"">",<div v-for> without memo,Medium,https://vuejs.org/api/built-in-directives.html#v-memo
  38 +37,Performance,Use shallowReactive for flat objects,Avoid deep reactivity overhead,shallowReactive for flat state,reactive for simple objects,shallowReactive({ count: 0 }),reactive({ count: 0 }),Low,
  39 +38,Performance,Use defineAsyncComponent,Lazy load heavy components,defineAsyncComponent for modals dialogs,Import all components eagerly,defineAsyncComponent(() => import()),import HeavyComponent from,Medium,https://vuejs.org/guide/components/async.html
  40 +39,TypeScript,Use generic components,Type-safe reusable components,Generic with defineComponent,Any types in components,"<script setup lang=""ts"" generic=""T"">",<script setup> without types,Medium,https://vuejs.org/guide/typescript/composition-api.html
  41 +40,TypeScript,Type template refs,Proper typing for DOM refs,ref<HTMLInputElement>(null),ref(null) without type,const input = ref<HTMLInputElement>(null),const input = ref(null),Medium,
  42 +41,TypeScript,Use PropType for complex props,Type complex prop types,PropType<User> for object props,Object without type,type: Object as PropType<User>,type: Object,Medium,
  43 +42,Testing,Use Vue Test Utils,Official testing library,mount shallowMount for components,Manual DOM testing,import { mount } from '@vue/test-utils',document.createElement,Medium,https://test-utils.vuejs.org/
  44 +43,Testing,Test component behavior,Focus on inputs and outputs,Test props emit and rendered output,Test internal implementation,expect(wrapper.text()).toContain(),expect(wrapper.vm.internalState),Medium,
  45 +44,Forms,Use v-model modifiers,Built-in input handling,.lazy .number .trim modifiers,Manual input parsing,"<input v-model.number=""age"">","<input v-model=""age""> then parse",Low,https://vuejs.org/guide/essentials/forms.html#modifiers
  46 +45,Forms,Use VeeValidate or FormKit,Form validation libraries,VeeValidate for complex forms,Manual validation logic,useField useForm from vee-validate,Custom validation in each input,Medium,
  47 +46,Accessibility,Use semantic elements,Proper HTML elements in templates,button nav main for purpose,div for everything,<button @click>,<div @click>,High,
  48 +47,Accessibility,Bind aria attributes dynamically,Keep ARIA in sync with state,":aria-expanded=""isOpen""",Static ARIA values,":aria-expanded=""menuOpen""","aria-expanded=""true""",Medium,
  49 +48,SSR,Use Nuxt for SSR,Full-featured SSR framework,Nuxt 3 for SSR apps,Manual SSR setup,npx nuxi init my-app,Custom SSR configuration,Medium,https://nuxt.com/
  50 +49,SSR,Handle hydration mismatches,Client/server content must match,ClientOnly for browser-only content,Different content server/client,<ClientOnly><BrowserWidget/></ClientOnly>,<div>{{ Date.now() }}</div>,High,
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/styles.csv 0 → 100644
  1 +STT,Style Category,Type,Keywords,Primary Colors,Secondary Colors,Effects & Animation,Best For,Do Not Use For,Light Mode ✓,Dark Mode ✓,Performance,Accessibility,Mobile-Friendly,Conversion-Focused,Framework Compatibility,Era/Origin,Complexity
  2 +1,Minimalism & Swiss Style,General,"Clean, simple, spacious, functional, white space, high contrast, geometric, sans-serif, grid-based, essential","Monochromatic, Black #000000, White #FFFFFF","Neutral (Beige #F5F1E8, Grey #808080, Taupe #B38B6D), Primary accent","Subtle hover (200-250ms), smooth transitions, sharp shadows if any, clear type hierarchy, fast loading","Enterprise apps, dashboards, documentation sites, SaaS platforms, professional tools","Creative portfolios, entertainment, playful brands, artistic experiments",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,◐ Medium,"Tailwind 10/10, Bootstrap 9/10, MUI 9/10",1950s Swiss,Low
  3 +2,Neumorphism,General,"Soft UI, embossed, debossed, convex, concave, light source, subtle depth, rounded (12-16px), monochromatic","Light pastels: Soft Blue #C8E0F4, Soft Pink #F5E0E8, Soft Grey #E8E8E8","Tints/shades (±30%), gradient subtlety, color harmony","Soft box-shadow (multiple: -5px -5px 15px, 5px 5px 15px), smooth press (150ms), inner subtle shadow","Health/wellness apps, meditation platforms, fitness trackers, minimal interaction UIs","Complex apps, critical accessibility, data-heavy dashboards, high-contrast required",✓ Full,◐ Partial,⚡ Good,⚠ Low contrast,✓ Good,◐ Medium,"Tailwind 8/10, CSS-in-JS 9/10",2020s Modern,Medium
  4 +3,Glassmorphism,General,"Frosted glass, transparent, blurred background, layered, vibrant background, light source, depth, multi-layer","Translucent white: rgba(255,255,255,0.1-0.3)","Vibrant: Electric Blue #0080FF, Neon Purple #8B00FF, Vivid Pink #FF1493, Teal #20B2AA","Backdrop blur (10-20px), subtle border (1px solid rgba white 0.2), light reflection, Z-depth","Modern SaaS, financial dashboards, high-end corporate, lifestyle apps, modal overlays, navigation","Low-contrast backgrounds, critical accessibility, performance-limited, dark text on dark",✓ Full,✓ Full,⚠ Good,⚠ Ensure 4.5:1,✓ Good,✓ High,"Tailwind 9/10, MUI 8/10, Chakra 8/10",2020s Modern,Medium
  5 +4,Brutalism,General,"Raw, unpolished, stark, high contrast, plain text, default fonts, visible borders, asymmetric, anti-design","Primary: Red #FF0000, Blue #0000FF, Yellow #FFFF00, Black #000000, White #FFFFFF","Limited: Neon Green #00FF00, Hot Pink #FF00FF, minimal secondary","No smooth transitions (instant), sharp corners (0px), bold typography (700+), visible grid, large blocks","Design portfolios, artistic projects, counter-culture brands, editorial/media sites, tech blogs","Corporate environments, conservative industries, critical accessibility, customer-facing professional",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,◐ Medium,✗ Low,"Tailwind 10/10, Bootstrap 7/10",1950s Brutalist,Low
  6 +5,3D & Hyperrealism,General,"Depth, realistic textures, 3D models, spatial navigation, tactile, skeuomorphic elements, rich detail, immersive","Deep Navy #001F3F, Forest Green #228B22, Burgundy #800020, Gold #FFD700, Silver #C0C0C0","Complex gradients (5-10 stops), realistic lighting, shadow variations (20-40% darker)","WebGL/Three.js 3D, realistic shadows (layers), physics lighting, parallax (3-5 layers), smooth 3D (300-400ms)","Gaming, product showcase, immersive experiences, high-end e-commerce, architectural viz, VR/AR","Low-end mobile, performance-limited, critical accessibility, data tables/forms",◐ Partial,◐ Partial,❌ Poor,⚠ Not accessible,✗ Low,◐ Medium,"Three.js 10/10, R3F 10/10, Babylon.js 10/10",2020s Modern,High
  7 +6,Vibrant & Block-based,General,"Bold, energetic, playful, block layout, geometric shapes, high color contrast, duotone, modern, energetic","Neon Green #39FF14, Electric Purple #BF00FF, Vivid Pink #FF1493, Bright Cyan #00FFFF, Sunburst #FFAA00","Complementary: Orange #FF7F00, Shocking Pink #FF006E, Lime #CCFF00, triadic schemes","Large sections (48px+ gaps), animated patterns, bold hover (color shift), scroll-snap, large type (32px+), 200-300ms","Startups, creative agencies, gaming, social media, youth-focused, entertainment, consumer","Financial institutions, healthcare, formal business, government, conservative, elderly",✓ Full,✓ Full,⚡ Good,◐ Ensure WCAG,✓ High,✓ High,"Tailwind 10/10, Chakra 9/10, Styled 9/10",2020s Modern,Medium
  8 +7,Dark Mode (OLED),General,"Dark theme, low light, high contrast, deep black, midnight blue, eye-friendly, OLED, night mode, power efficient","Deep Black #000000, Dark Grey #121212, Midnight Blue #0A0E27","Vibrant accents: Neon Green #39FF14, Electric Blue #0080FF, Gold #FFD700, Plasma Purple #BF00FF","Minimal glow (text-shadow: 0 0 10px), dark-to-light transitions, low white emission, high readability, visible focus","Night-mode apps, coding platforms, entertainment, eye-strain prevention, OLED devices, low-light","Print-first content, high-brightness outdoor, color-accuracy-critical",✗ No,✓ Only,⚡ Excellent,✓ WCAG AAA,✓ High,◐ Low,"Tailwind 10/10, MUI 10/10, Chakra 10/10",2020s Modern,Low
  9 +8,Accessible & Ethical,General,"High contrast, large text (16px+), keyboard navigation, screen reader friendly, WCAG compliant, focus state, semantic","WCAG AA/AAA (4.5:1 min), simple primary, clear secondary, high luminosity (7:1+)","Symbol-based colors (not color-only), supporting patterns, inclusive combinations","Clear focus rings (3-4px), ARIA labels, skip links, responsive design, reduced motion, 44x44px touch targets","Government, healthcare, education, inclusive products, large audience, legal compliance, public",None - accessibility universal,✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"All frameworks 10/10",Universal,Low
  10 +9,Claymorphism,General,"Soft 3D, chunky, playful, toy-like, bubbly, thick borders (3-4px), double shadows, rounded (16-24px)","Pastel: Soft Peach #FDBCB4, Baby Blue #ADD8E6, Mint #98FF98, Lilac #E6E6FA, light BG","Soft gradients (pastel-to-pastel), light/dark variations (20-30%), gradient subtle","Inner+outer shadows (subtle, no hard lines), soft press (200ms ease-out), fluffy elements, smooth transitions","Educational apps, children's apps, SaaS platforms, creative tools, fun-focused, onboarding, casual games","Formal corporate, professional services, data-critical, serious/medical, legal apps, finance",✓ Full,◐ Partial,⚡ Good,⚠ Ensure 4.5:1,✓ High,✓ High,"Tailwind 9/10, CSS-in-JS 9/10",2020s Modern,Medium
  11 +10,Aurora UI,General,"Vibrant gradients, smooth blend, Northern Lights effect, mesh gradient, luminous, atmospheric, abstract","Complementary: Blue-Orange, Purple-Yellow, Electric Blue #0080FF, Magenta #FF1493, Cyan #00FFFF","Smooth transitions (Blue→Purple→Pink→Teal), iridescent effects, blend modes (screen, multiply)","Large flowing CSS/SVG gradients, subtle 8-12s animations, depth via color layering, smooth morph","Modern SaaS, creative agencies, branding, music platforms, lifestyle, premium products, hero sections","Data-heavy dashboards, critical accessibility, content-heavy where distraction issues",✓ Full,✓ Full,⚠ Good,⚠ Text contrast,✓ Good,✓ High,"Tailwind 9/10, CSS-in-JS 10/10",2020s Modern,Medium
  12 +11,Retro-Futurism,General,"Vintage sci-fi, 80s aesthetic, neon glow, geometric patterns, CRT scanlines, pixel art, cyberpunk, synthwave","Neon Blue #0080FF, Hot Pink #FF006E, Cyan #00FFFF, Deep Black #1A1A2E, Purple #5D34D0","Metallic Silver #C0C0C0, Gold #FFD700, duotone, 80s Pink #FF10F0, neon accents","CRT scanlines (::before overlay), neon glow (text-shadow+box-shadow), glitch effects (skew/offset keyframes)","Gaming, entertainment, music platforms, tech brands, artistic projects, nostalgic, cyberpunk","Conservative industries, critical accessibility, professional/corporate, elderly, legal/finance",✓ Full,✓ Dark focused,⚠ Moderate,⚠ High contrast/strain,◐ Medium,◐ Medium,"Tailwind 8/10, CSS-in-JS 9/10",1980s Retro,Medium
  13 +12,Flat Design,General,"2D, minimalist, bold colors, no shadows, clean lines, simple shapes, typography-focused, modern, icon-heavy","Solid bright: Red, Orange, Blue, Green, limited palette (4-6 max)","Complementary colors, muted secondaries, high saturation, clean accents","No gradients/shadows, simple hover (color/opacity shift), fast loading, clean transitions (150-200ms ease), minimal icons","Web apps, mobile apps, cross-platform, startup MVPs, user-friendly, SaaS, dashboards, corporate","Complex 3D, premium/luxury, artistic portfolios, immersive experiences, high-detail",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"Tailwind 10/10, Bootstrap 10/10, MUI 9/10",2010s Modern,Low
  14 +13,Skeuomorphism,General,"Realistic, texture, depth, 3D appearance, real-world metaphors, shadows, gradients, tactile, detailed, material","Rich realistic: wood, leather, metal colors, detailed gradients (8-12 stops), metallic effects","Realistic lighting gradients, shadow variations (30-50% darker), texture overlays, material colors","Realistic shadows (layers), depth (perspective), texture details (noise, grain), realistic animations (300-500ms)","Legacy apps, gaming, immersive storytelling, premium products, luxury, realistic simulations, education","Modern enterprise, critical accessibility, low-performance, web (use Flat/Modern)",◐ Partial,◐ Partial,❌ Poor,⚠ Textures reduce readability,✗ Low,◐ Medium,"CSS-in-JS 7/10, Custom 8/10",2007-2012 iOS,High
  15 +14,Liquid Glass,General,"Flowing glass, morphing, smooth transitions, fluid effects, translucent, animated blur, iridescent, chromatic aberration","Vibrant iridescent (rainbow spectrum), translucent base with opacity shifts, gradient fluidity","Chromatic aberration (Red-Cyan), iridescent oil-spill, fluid gradient blends, holographic effects","Morphing elements (SVG/CSS), fluid animations (400-600ms curves), dynamic blur (backdrop-filter), color transitions","Premium SaaS, high-end e-commerce, creative platforms, branding experiences, luxury portfolios","Performance-limited, critical accessibility, complex data, budget projects",✓ Full,✓ Full,⚠ Moderate-Poor,⚠ Text contrast,◐ Medium,✓ High,"Framer Motion 10/10, GSAP 10/10",2020s Modern,High
  16 +15,Motion-Driven,General,"Animation-heavy, microinteractions, smooth transitions, scroll effects, parallax, entrance anim, page transitions","Bold colors emphasize movement, high contrast animated, dynamic gradients, accent action colors","Transitional states, success (Green #22C55E), error (Red #EF4444), neutral feedback","Scroll anim (Intersection Observer), hover (300-400ms), entrance, parallax (3-5 layers), page transitions","Portfolio sites, storytelling platforms, interactive experiences, entertainment apps, creative, SaaS","Data dashboards, critical accessibility, low-power devices, content-heavy, motion-sensitive",✓ Full,✓ Full,⚠ Good,⚠ Prefers-reduced-motion,✓ Good,✓ High,"GSAP 10/10, Framer Motion 10/10",2020s Modern,High
  17 +16,Micro-interactions,General,"Small animations, gesture-based, tactile feedback, subtle animations, contextual interactions, responsive","Subtle color shifts (10-20%), feedback: Green #22C55E, Red #EF4444, Amber #F59E0B","Accent feedback, neutral supporting, clear action indicators","Small hover (50-100ms), loading spinners, success/error state anim, gesture-triggered (swipe/pinch), haptic","Mobile apps, touchscreen UIs, productivity tools, user-friendly, consumer apps, interactive components","Desktop-only, critical performance, accessibility-first (alternatives needed)",✓ Full,✓ Full,⚡ Excellent,✓ Good,✓ High,✓ High,"Framer Motion 10/10, React Spring 9/10",2020s Modern,Medium
  18 +17,Inclusive Design,General,"Accessible, color-blind friendly, high contrast, haptic feedback, voice interaction, screen reader, WCAG AAA, universal","WCAG AAA (7:1+ contrast), avoid red-green only, symbol-based indicators, high contrast primary","Supporting patterns (stripes, dots, hatch), symbols, combinations, clear non-color indicators","Haptic feedback (vibration), voice guidance, focus indicators (4px+ ring), motion options, alt content, semantic","Public services, education, healthcare, finance, government, accessible consumer, inclusive",None - accessibility universal,✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"All frameworks 10/10",Universal,Low
  19 +18,Zero Interface,General,"Minimal visible UI, voice-first, gesture-based, AI-driven, invisible controls, predictive, context-aware, ambient","Neutral backgrounds: Soft white #FAFAFA, light grey #F0F0F0, warm off-white #F5F1E8","Subtle feedback: light green, light red, minimal UI elements, soft accents","Voice recognition UI, gesture detection, AI predictions (smooth reveal), progressive disclosure, smart suggestions","Voice assistants, AI platforms, future-forward UX, smart home, contextual computing, ambient experiences","Complex workflows, data-entry heavy, traditional systems, legacy support, explicit control",✓ Full,✓ Full,⚡ Excellent,✓ Excellent,✓ High,✓ High,"Tailwind 10/10, Custom 10/10",2020s AI-Era,Low
  20 +19,Soft UI Evolution,General,"Evolved soft UI, better contrast, modern aesthetics, subtle depth, accessibility-focused, improved shadows, hybrid","Improved contrast pastels: Soft Blue #87CEEB, Soft Pink #FFB6C1, Soft Green #90EE90, better hierarchy","Better combinations, accessible secondary, supporting with improved contrast, modern accents","Improved shadows (softer than flat, clearer than neumorphism), modern (200-300ms), focus visible, WCAG AA/AAA","Modern enterprise apps, SaaS platforms, health/wellness, modern business tools, professional, hybrid","Extreme minimalism, critical performance, systems without modern OS",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA+,✓ High,✓ High,"Tailwind 9/10, MUI 9/10, Chakra 9/10",2020s Modern,Medium
  21 +20,Hero-Centric Design,Landing Page,"Large hero section, compelling headline, high-contrast CTA, product showcase, value proposition, hero image/video, dramatic visual","Brand primary color, white/light backgrounds for contrast, accent color for CTA","Supporting colors for secondary CTAs, accent highlights, trust elements (testimonials, logos)","Smooth scroll reveal, fade-in animations on hero, subtle background parallax, CTA glow/pulse effect","SaaS landing pages, product launches, service landing pages, B2B platforms, tech companies","Complex navigation, multi-page experiences, data-heavy applications",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,✓ Full,✓ Very High,"Tailwind 10/10, Bootstrap 9/10",2020s Modern,Medium
  22 +21,Conversion-Optimized,Landing Page,"Form-focused, minimalist design, single CTA focus, high contrast, urgency elements, trust signals, social proof, clear value","Primary brand color, high-contrast white/light backgrounds, warning/urgency colors for time-limited offers","Secondary CTA color (muted), trust element colors (testimonial highlights), accent for key benefits","Hover states on CTA (color shift, slight scale), form field focus animations, loading spinner, success feedback","E-commerce product pages, free trial signups, lead generation, SaaS pricing pages, limited-time offers","Complex feature explanations, multi-product showcases, technical documentation",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ Full (mobile-optimized),✓ Very High
  23 +22,Feature-Rich Showcase,Landing Page,"Multiple feature sections, grid layout, benefit cards, visual feature demonstrations, interactive elements, problem-solution pairs","Primary brand, bright secondary colors for feature cards, contrasting accent for CTAs","Supporting colors for: benefits (green), problems (red/orange), features (blue/purple), social proof (neutral)","Card hover effects (lift/scale), icon animations on scroll, feature toggle animations, smooth section transitions","Enterprise SaaS, software tools landing pages, platform services, complex product explanations, B2B products","Simple product pages, early-stage startups with few features, entertainment landing pages",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,✓ Good,✓ High
  24 +23,Minimal & Direct,Landing Page,"Minimal text, white space heavy, single column layout, direct messaging, clean typography, visual-centric, fast-loading","Monochromatic primary, white background, single accent color for CTA, black/dark grey text","Minimal secondary colors, reserved for critical CTAs only, neutral supporting elements","Very subtle hover effects, minimal animations, fast page load (no heavy animations), smooth scroll","Simple service landing pages, indie products, consulting services, micro SaaS, freelancer portfolios","Feature-heavy products, complex explanations, multi-product showcases",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ Full,✓ High
  25 +24,Social Proof-Focused,Landing Page,"Testimonials prominent, client logos displayed, case studies sections, reviews/ratings, user avatars, success metrics, credibility markers","Primary brand, trust colors (blue), success/growth colors (green), neutral backgrounds","Testimonial highlight colors, logo grid backgrounds (light grey), badge/achievement colors","Testimonial carousel animations, logo grid fade-in, stat counter animations (number count-up), review star ratings","B2B SaaS, professional services, premium products, e-commerce conversion pages, established brands","Startup MVPs, products without users, niche/experimental products",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,✓ Full,✓ High
  26 +25,Interactive Product Demo,Landing Page,"Embedded product mockup/video, interactive elements, product walkthrough, step-by-step guides, hover-to-reveal features, embedded demos","Primary brand, interface colors matching product, demo highlight colors for interactive elements","Product UI colors, tutorial step colors (numbered progression), hover state indicators","Product animation playback, step progression animations, hover reveal effects, smooth zoom on interaction","SaaS platforms, tool/software products, productivity apps landing pages, developer tools, productivity software","Simple services, consulting, non-digital products, complexity-averse audiences",✓ Full,✓ Full,⚠ Good (video/interactive),✓ WCAG AA,✓ Good,✓ Very High
  27 +26,Trust & Authority,Landing Page,"Certificates/badges displayed, expert credentials, case studies with metrics, before/after comparisons, industry recognition, security badges","Professional colors (blue/grey), trust colors, certification badge colors (gold/silver accents)","Certificate highlight colors, metric showcase colors, comparison highlight (success green)","Badge hover effects, metric pulse animations, certificate carousel, smooth stat reveal","Healthcare/medical landing pages, financial services, enterprise software, premium/luxury products, legal services","Casual products, entertainment, viral/social-first products",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ Full,✓ High
  28 +27,Storytelling-Driven,Landing Page,"Narrative flow, visual story progression, section transitions, consistent character/brand voice, emotional messaging, journey visualization","Brand primary, warm/emotional colors, varied accent colors per story section, high visual variety","Story section color coding, emotional state colors (calm, excitement, success), transitional gradients","Section-to-section animations, scroll-triggered reveals, character/icon animations, morphing transitions, parallax narrative","Brand/startup stories, mission-driven products, premium/lifestyle brands, documentary-style products, educational","Technical/complex products (unless narrative-driven), traditional enterprise software",✓ Full,✓ Full,⚠ Moderate (animations),✓ WCAG AA,✓ Good,✓ High
  29 +28,Data-Dense Dashboard,BI/Analytics,"Multiple charts/widgets, data tables, KPI cards, minimal padding, grid layout, space-efficient, maximum data visibility","Neutral primary (light grey/white #F5F5F5), data colors (blue/green/red), dark text #333333","Chart colors: success (green #22C55E), warning (amber #F59E0B), alert (red #EF4444), neutral (grey)","Hover tooltips, chart zoom on click, row highlighting on hover, smooth filter animations, data loading spinners","Business intelligence dashboards, financial analytics, enterprise reporting, operational dashboards, data warehousing","Marketing dashboards, consumer-facing analytics, simple reporting",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,◐ Medium,✗ Not applicable
  30 +29,Heat Map & Heatmap Style,BI/Analytics,"Color-coded grid/matrix, data intensity visualization, geographical heat maps, correlation matrices, cell-based representation, gradient coloring","Gradient scale: Cool (blue #0080FF) to hot (red #FF0000), neutral middle (white/yellow)","Support gradients: Light (cool blue) to dark (warm red), divergent for positive/negative data, monochromatic options","Color gradient transitions on data change, cell highlighting on hover, tooltip reveal on click, smooth color animation","Geographical analysis, performance matrices, correlation analysis, user behavior heatmaps, temperature/intensity data","Linear data representation, categorical comparisons (use bar charts), small datasets",✓ Full,✓ Full (with adjustments),⚡ Excellent,⚠ Colorblind considerations,◐ Medium,✗ Not applicable
  31 +30,Executive Dashboard,BI/Analytics,"High-level KPIs, large key metrics, minimal detail, summary view, trend indicators, at-a-glance insights, executive summary","Brand colors, professional palette (blue/grey/white), accent for KPIs, red for alerts/concerns","KPI highlight colors: positive (green), negative (red), neutral (grey), trend arrow colors","KPI value animations (count-up), trend arrow direction animations, metric card hover lift, alert pulse effect","C-suite dashboards, business summary reports, decision-maker dashboards, strategic planning views","Detailed analyst dashboards, technical deep-dives, operational monitoring",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✗ Low (not mobile-optimized),✗ Not applicable
  32 +31,Real-Time Monitoring,BI/Analytics,"Live data updates, status indicators, alert notifications, streaming data visualization, active monitoring, streaming charts","Alert colors: critical (red #FF0000), warning (orange #FFA500), normal (green #22C55E), updating (blue animation)","Status indicator colors, chart line colors varying by metric, streaming data highlight colors","Real-time chart animations, alert pulse/glow, status indicator blink animation, smooth data stream updates, loading effect","System monitoring dashboards, DevOps dashboards, real-time analytics, stock market dashboards, live event tracking","Historical analysis, long-term trend reports, archived data dashboards",✓ Full,✓ Full,⚡ Good (real-time load),✓ WCAG AA,◐ Medium,✗ Not applicable
  33 +32,Drill-Down Analytics,BI/Analytics,"Hierarchical data exploration, expandable sections, interactive drill-down paths, summary-to-detail flow, context preservation","Primary brand, breadcrumb colors, drill-level indicator colors, hierarchy depth colors","Drill-down path indicator colors, level-specific colors, highlight colors for selected level, transition colors","Drill-down expand animations, breadcrumb click transitions, smooth detail reveal, level change smooth, data reload animation","Sales analytics, product analytics, funnel analysis, multi-dimensional data exploration, business intelligence","Simple linear data, single-metric dashboards, streaming real-time dashboards",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,◐ Medium,✗ Not applicable
  34 +33,Comparative Analysis Dashboard,BI/Analytics,"Side-by-side comparisons, period-over-period metrics, A/B test results, regional comparisons, performance benchmarks","Comparison colors: primary (blue), comparison (orange/purple), delta indicator (green/red)","Winning metric color (green), losing metric color (red), neutral comparison (grey), benchmark colors","Comparison bar animations (grow to value), delta indicator animations (direction arrows), highlight on compare","Period-over-period reporting, A/B test dashboards, market comparison, competitive analysis, regional performance","Single metric dashboards, future projections (use forecasting), real-time only (no historical)",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,◐ Medium,✗ Not applicable
  35 +34,Predictive Analytics,BI/Analytics,"Forecast lines, confidence intervals, trend projections, scenario modeling, AI-driven insights, anomaly detection visualization","Forecast line color (distinct from actual), confidence interval shading, anomaly highlight (red alert), trend colors","High confidence (dark color), low confidence (light color), anomaly colors (red/orange), normal trend (green/blue)","Forecast line animation on draw, confidence band fade-in, anomaly pulse alert, smoothing function animations","Forecasting dashboards, anomaly detection systems, trend prediction dashboards, AI-powered analytics, budget planning","Historical-only dashboards, simple reporting, real-time operational dashboards",✓ Full,✓ Full,⚠ Good (computation),✓ WCAG AA,◐ Medium,✗ Not applicable
  36 +35,User Behavior Analytics,BI/Analytics,"Funnel visualization, user flow diagrams, conversion tracking, engagement metrics, user journey mapping, cohort analysis","Funnel stage colors: high engagement (green), drop-off (red), conversion (blue), user flow arrows (grey)","Stage completion colors (success), abandonment colors (warning), engagement levels (gradient), cohort colors","Funnel animation (fill-down), flow diagram animations (connection draw), conversion pulse, engagement bar fill","Conversion funnel analysis, user journey tracking, engagement analytics, cohort analysis, retention tracking","Real-time operational metrics, technical system monitoring, financial transactions",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,✓ Good,✗ Not applicable
  37 +36,Financial Dashboard,BI/Analytics,"Revenue metrics, profit/loss visualization, budget tracking, financial ratios, portfolio performance, cash flow, audit trail","Financial colors: profit (green #22C55E), loss (red #EF4444), neutral (grey), trust (dark blue #003366)","Revenue highlight (green), expenses (red), budget variance (orange/red), balance (grey), accuracy (blue)","Number animations (count-up), trend direction indicators, percentage change animations, profit/loss color transitions","Financial reporting, accounting dashboards, portfolio tracking, budget monitoring, banking analytics","Simple business dashboards, entertainment/social metrics, non-financial data",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✗ Low,✗ Not applicable
  38 +37,Sales Intelligence Dashboard,BI/Analytics,"Deal pipeline, sales metrics, territory performance, sales rep leaderboard, win-loss analysis, quota tracking, forecast accuracy","Sales colors: won (green), lost (red), in-progress (blue), blocked (orange), quota met (gold), quota missed (grey)","Pipeline stage colors, rep performance colors, quota achievement colors, forecast accuracy colors","Deal movement animations, metric updates, leaderboard ranking changes, gauge needle movements, status change highlights","CRM dashboards, sales management, opportunity tracking, performance management, quota planning","Marketing analytics, customer support metrics, HR dashboards",✓ Full,✓ Full,⚡ Good,✓ WCAG AA,◐ Medium,✗ Not applicable,"Recharts 9/10, Chart.js 9/10",2020s Modern,Medium
  39 +38,Neubrutalism,General,"Bold borders, black outlines, primary colors, thick shadows, no gradients, flat colors, 45° shadows, playful, Gen Z","#FFEB3B (Yellow), #FF5252 (Red), #2196F3 (Blue), #000000 (Black borders)","Limited accent colors, high contrast combinations, no gradients allowed","box-shadow: 4px 4px 0 #000, border: 3px solid #000, no gradients, sharp corners (0px), bold typography","Gen Z brands, startups, creative agencies, Figma-style apps, Notion-style interfaces, tech blogs","Luxury brands, finance, healthcare, conservative industries (too playful)",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"Tailwind 10/10, Bootstrap 8/10",2020s Modern,Low
  40 +39,Bento Box Grid,General,"Modular cards, asymmetric grid, varied sizes, Apple-style, dashboard tiles, negative space, clean hierarchy, cards","Neutral base + brand accent, #FFFFFF, #F5F5F5, brand primary","Subtle gradients, shadow variations, accent highlights for interactive cards","grid-template with varied spans, rounded-xl (16px), subtle shadows, hover scale (1.02), smooth transitions","Dashboards, product pages, portfolios, Apple-style marketing, feature showcases, SaaS","Dense data tables, text-heavy content, real-time monitoring",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"Tailwind 10/10, CSS Grid 10/10",2020s Apple,Low
  41 +40,Y2K Aesthetic,General,"Neon pink, chrome, metallic, bubblegum, iridescent, glossy, retro-futurism, 2000s, futuristic nostalgia","#FF69B4 (Hot Pink), #00FFFF (Cyan), #C0C0C0 (Silver), #9400D3 (Purple)","Metallic gradients, glossy overlays, iridescent effects, chrome textures","linear-gradient metallic, glossy buttons, 3D chrome effects, glow animations, bubble shapes","Fashion brands, music platforms, Gen Z brands, nostalgia marketing, entertainment, youth-focused","B2B enterprise, healthcare, finance, conservative industries, elderly users",✓ Full,◐ Partial,⚠ Good,⚠ Check contrast,✓ Good,✓ High,"Tailwind 8/10, CSS-in-JS 9/10",Y2K 2000s,Medium
  42 +41,Cyberpunk UI,General,"Neon, dark mode, terminal, HUD, sci-fi, glitch, dystopian, futuristic, matrix, tech noir","#00FF00 (Matrix Green), #FF00FF (Magenta), #00FFFF (Cyan), #0D0D0D (Dark)","Neon gradients, scanline overlays, glitch colors, terminal green accents","Neon glow (text-shadow), glitch animations (skew/offset), scanlines (::before overlay), terminal fonts","Gaming platforms, tech products, crypto apps, sci-fi applications, developer tools, entertainment","Corporate enterprise, healthcare, family apps, conservative brands, elderly users",✗ No,✓ Only,⚠ Moderate,⚠ Limited (dark+neon),◐ Medium,◐ Medium,"Tailwind 8/10, Custom CSS 10/10",2020s Cyberpunk,Medium
  43 +42,Organic Biophilic,General,"Nature, organic shapes, green, sustainable, rounded, flowing, wellness, earthy, natural textures","#228B22 (Forest Green), #8B4513 (Earth Brown), #87CEEB (Sky Blue), #F5F5DC (Beige)","Natural gradients, earth tones, sky blues, organic textures, wood/stone colors","Rounded corners (16-24px), organic curves (border-radius variations), natural shadows, flowing SVG shapes","Wellness apps, sustainability brands, eco products, health apps, meditation, organic food brands","Tech-focused products, gaming, industrial, urban brands",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"Tailwind 10/10, CSS 10/10",2020s Sustainable,Low
  44 +43,AI-Native UI,General,"Chatbot, conversational, voice, assistant, agentic, ambient, minimal chrome, streaming text, AI interactions","Neutral + single accent, #6366F1 (AI Purple), #10B981 (Success), #F5F5F5 (Background)","Status indicators, streaming highlights, context card colors, subtle accent variations","Typing indicators (3-dot pulse), streaming text animations, pulse animations, context cards, smooth reveals","AI products, chatbots, voice assistants, copilots, AI-powered tools, conversational interfaces","Traditional forms, data-heavy dashboards, print-first content",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"Tailwind 10/10, React 10/10",2020s AI-Era,Low
  45 +44,Memphis Design,General,"80s, geometric, playful, postmodern, shapes, patterns, squiggles, triangles, neon, abstract, bold","#FF71CE (Hot Pink), #FFCE5C (Yellow), #86CCCA (Teal), #6A7BB4 (Blue Purple)","Complementary geometric colors, pattern fills, contrasting accent shapes","transform: rotate(), clip-path: polygon(), mix-blend-mode, repeating patterns, bold shapes","Creative agencies, music sites, youth brands, event promotion, artistic portfolios, entertainment","Corporate finance, healthcare, legal, elderly users, conservative brands",✓ Full,✓ Full,⚡ Excellent,⚠ Check contrast,✓ Good,◐ Medium,"Tailwind 9/10, CSS 10/10",1980s Postmodern,Medium
  46 +45,Vaporwave,General,"Synthwave, retro-futuristic, 80s-90s, neon, glitch, nostalgic, sunset gradient, dreamy, aesthetic","#FF71CE (Pink), #01CDFE (Cyan), #05FFA1 (Mint), #B967FF (Purple)","Sunset gradients, glitch overlays, VHS effects, neon accents, pastel variations","text-shadow glow, linear-gradient, filter: hue-rotate(), glitch animations, retro scan lines","Music platforms, gaming, creative portfolios, tech startups, entertainment, artistic projects","Business apps, e-commerce, education, healthcare, enterprise software",✓ Full,✓ Dark focused,⚠ Moderate,⚠ Poor (motion),◐ Medium,◐ Medium,"Tailwind 8/10, CSS-in-JS 9/10",1980s-90s Retro,Medium
  47 +46,Dimensional Layering,General,"Depth, overlapping, z-index, layers, 3D, shadows, elevation, floating, cards, spatial hierarchy","Neutral base (#FFFFFF, #F5F5F5, #E0E0E0) + brand accent for elevated elements","Shadow variations (sm/md/lg/xl), elevation colors, highlight colors for top layers","z-index stacking, box-shadow elevation (4 levels), transform: translateZ(), backdrop-filter, parallax","Dashboards, card layouts, modals, navigation, product showcases, SaaS interfaces","Print-style layouts, simple blogs, low-end devices, flat design requirements",✓ Full,✓ Full,⚠ Good,⚠ Moderate (SR issues),✓ Good,✓ High,"Tailwind 10/10, MUI 10/10, Chakra 10/10",2020s Modern,Medium
  48 +47,Exaggerated Minimalism,General,"Bold minimalism, oversized typography, high contrast, negative space, loud minimal, statement design","#000000 (Black), #FFFFFF (White), single vibrant accent only","Minimal - single accent color, no secondary colors, extreme restraint","font-size: clamp(3rem 10vw 12rem), font-weight: 900, letter-spacing: -0.05em, massive whitespace","Fashion, architecture, portfolios, agency landing pages, luxury brands, editorial","E-commerce catalogs, dashboards, forms, data-heavy, elderly users, complex apps",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"Tailwind 10/10, Typography.js 10/10",2020s Modern,Low
  49 +48,Kinetic Typography,General,"Motion text, animated type, moving letters, dynamic, typing effect, morphing, scroll-triggered text","Flexible - high contrast recommended, bold colors for emphasis, animation-friendly palette","Accent colors for emphasis, transition colors, gradient text fills","@keyframes text animation, typing effect, background-clip: text, GSAP ScrollTrigger, split text","Hero sections, marketing sites, video platforms, storytelling, creative portfolios, landing pages","Long-form content, accessibility-critical, data interfaces, forms, elderly users",✓ Full,✓ Full,⚠ Moderate,❌ Poor (motion),✓ Good,✓ Very High,"GSAP 10/10, Framer Motion 10/10",2020s Modern,High
  50 +49,Parallax Storytelling,General,"Scroll-driven, narrative, layered scrolling, immersive, progressive disclosure, cinematic, scroll-triggered","Story-dependent, often gradients and natural colors, section-specific palettes","Section transition colors, depth layer colors, narrative mood colors","transform: translateY(scroll), position: fixed/sticky, perspective: 1px, scroll-triggered animations","Brand storytelling, product launches, case studies, portfolios, annual reports, marketing campaigns","E-commerce, dashboards, mobile-first, SEO-critical, accessibility-required",✓ Full,✓ Full,❌ Poor,❌ Poor (motion),✗ Low,✓ High,"GSAP ScrollTrigger 10/10, Locomotive Scroll 10/10",2020s Modern,High
  51 +50,Swiss Modernism 2.0,General,"Grid system, Helvetica, modular, asymmetric, international style, rational, clean, mathematical spacing","#000000, #FFFFFF, #F5F5F5, single vibrant accent only","Minimal secondary, accent for emphasis only, no gradients","display: grid, grid-template-columns: repeat(12 1fr), gap: 1rem, mathematical ratios, clear hierarchy","Corporate sites, architecture, editorial, SaaS, museums, professional services, documentation","Playful brands, children's sites, entertainment, gaming, emotional storytelling",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"Tailwind 10/10, Bootstrap 9/10, Foundation 10/10",1950s Swiss + 2020s,Low
  52 +51,HUD / Sci-Fi FUI,General,"Futuristic, technical, wireframe, neon, data, transparency, iron man, sci-fi, interface","Neon Cyan #00FFFF, Holographic Blue #0080FF, Alert Red #FF0000","Transparent Black, Grid Lines #333333","Glow effects, scanning animations, ticker text, blinking markers, fine line drawing","Sci-fi games, space tech, cybersecurity, movie props, immersive dashboards","Standard corporate, reading heavy content, accessible public services",✓ Low,✓ Full,⚠ Moderate (renders),⚠ Poor (thin lines),◐ Medium,✗ Low,"React 9/10, Canvas 10/10",2010s Sci-Fi,High
  53 +52,Pixel Art,General,"Retro, 8-bit, 16-bit, gaming, blocky, nostalgic, pixelated, arcade","Primary colors (NES Palette), brights, limited palette","Black outlines, shading via dithering or block colors","Frame-by-frame sprite animation, blinking cursor, instant transitions, marquee text","Indie games, retro tools, creative portfolios, nostalgia marketing, Web3/NFT","Professional corporate, modern SaaS, high-res photography sites",✓ Full,✓ Full,⚡ Excellent,✓ Good (if contrast ok),✓ High,◐ Medium,"CSS (box-shadow) 8/10, Canvas 10/10",1980s Arcade,Medium
  54 +53,Bento Grids,General,"Apple-style, modular, cards, organized, clean, hierarchy, grid, rounded, soft","Off-white #F5F5F7, Clean White #FFFFFF, Text #1D1D1F","Subtle accents, soft shadows, blurred backdrops","Hover scale (1.02), soft shadow expansion, smooth layout shifts, content reveal","Product features, dashboards, personal sites, marketing summaries, galleries","Long-form reading, data tables, complex forms",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AA,✓ High,✓ High,"CSS Grid 10/10, Tailwind 10/10",2020s Apple/Linear,Low
  55 +54,Neubrutalism,General,"Bold, ugly-cute, raw, high contrast, flat, hard shadows, distinct, playful, loud","Pop Yellow #FFDE59, Bright Red #FF5757, Black #000000","Lavender #CBA6F7, Mint #76E0C2","Hard hover shifts (4px), marquee scrolling, jitter animations, bold borders","Design tools, creative agencies, Gen Z brands, personal blogs, gumroad-style","Banking, legal, healthcare, serious enterprise, elderly users",✓ Full,✓ Full,⚡ Excellent,✓ WCAG AAA,✓ High,✓ High,"Tailwind 10/10, Plain CSS 10/10",2020s Modern Retro,Low
  56 +55,Spatial UI (VisionOS),General,"Glass, depth, immersion, spatial, translucent, gaze, gesture, apple, vision-pro","Frosted Glass #FFFFFF (15-30% opacity), System White","Vibrant system colors for active states, deep shadows for depth","Parallax depth, dynamic lighting response, gaze-hover effects, smooth scale on focus","Spatial computing apps, VR/AR interfaces, immersive media, futuristic dashboards","Text-heavy documents, high-contrast requirements, non-3D capable devices",✓ Full,✓ Full,⚠ Moderate (blur cost),⚠ Contrast risks,✓ High (if adapted),✓ High,"SwiftUI, React (Three.js/Fiber)",2024 Spatial Era,High
  57 +56,E-Ink / Paper,General,"Paper-like, matte, high contrast, texture, reading, calm, slow tech, monochrome","Off-White #FDFBF7, Paper White #F5F5F5, Ink Black #1A1A1A","Pencil Grey #4A4A4A, Highlighter Yellow #FFFF00 (accent)","No motion blur, distinct page turns, grain/noise texture, sharp transitions (no fade)","Reading apps, digital newspapers, minimal journals, distraction-free writing, slow-living brands","Gaming, video platforms, high-energy marketing, dark mode dependent apps",✓ Full,✗ Low (inverted only),⚡ Excellent,✓ WCAG AAA,✓ High,✓ Medium,"Tailwind 10/10, CSS 10/10",2020s Digital Well-being,Low
  58 +57,Gen Z Chaos / Maximalism,General,"Chaos, clutter, stickers, raw, collage, mixed media, loud, internet culture, ironic","Clashing Brights: #FF00FF, #00FF00, #FFFF00, #0000FF","Gradients, rainbow, glitch, noise, heavily saturated mix","Marquee scrolls, jitter, sticker layering, GIF overload, random placement, drag-and-drop","Gen Z lifestyle brands, music artists, creative portfolios, viral marketing, fashion","Corporate, government, healthcare, banking, serious tools",✓ Full,✓ Full,⚠ Poor (heavy assets),❌ Poor,◐ Medium,✓ High (Viral),CSS-in-JS 8/10,2023+ Internet Core,High
  59 +58,Biomimetic / Organic 2.0,General,"Nature-inspired, cellular, fluid, breathing, generative, algorithms, life-like","Cellular Pink #FF9999, Chlorophyll Green #00FF41, Bioluminescent Blue","Deep Ocean #001E3C, Coral #FF7F50, Organic gradients","Breathing animations, fluid morphing, generative growth, physics-based movement","Sustainability tech, biotech, advanced health, meditation, generative art platforms","Standard SaaS, data grids, strict corporate, accounting",✓ Full,✓ Full,⚠ Moderate,✓ Good,✓ Good,✓ High,"Canvas 10/10, WebGL 10/10",2024+ Generative,High
0 60 \ No newline at end of file
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/typography.csv 0 → 100644
  1 +STT,Font Pairing Name,Category,Heading Font,Body Font,Mood/Style Keywords,Best For,Google Fonts URL,CSS Import,Tailwind Config,Notes
  2 +1,Classic Elegant,"Serif + Sans",Playfair Display,Inter,"elegant, luxury, sophisticated, timeless, premium, editorial","Luxury brands, fashion, spa, beauty, editorial, magazines, high-end e-commerce","https://fonts.google.com/share?selection.family=Inter:wght@300;400;500;600;700|Playfair+Display:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=Playfair+Display:wght@400;500;600;700&display=swap');","fontFamily: { serif: ['Playfair Display', 'serif'], sans: ['Inter', 'sans-serif'] }","High contrast between elegant heading and clean body. Perfect for luxury/premium."
  3 +2,Modern Professional,"Sans + Sans",Poppins,Open Sans,"modern, professional, clean, corporate, friendly, approachable","SaaS, corporate sites, business apps, startups, professional services","https://fonts.google.com/share?selection.family=Open+Sans:wght@300;400;500;600;700|Poppins:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;500;600;700&family=Poppins:wght@400;500;600;700&display=swap');","fontFamily: { heading: ['Poppins', 'sans-serif'], body: ['Open Sans', 'sans-serif'] }","Geometric Poppins for headings, humanist Open Sans for readability."
  4 +3,Tech Startup,"Sans + Sans",Space Grotesk,DM Sans,"tech, startup, modern, innovative, bold, futuristic","Tech companies, startups, SaaS, developer tools, AI products","https://fonts.google.com/share?selection.family=DM+Sans:wght@400;500;700|Space+Grotesk:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Space+Grotesk:wght@400;500;600;700&display=swap');","fontFamily: { heading: ['Space Grotesk', 'sans-serif'], body: ['DM Sans', 'sans-serif'] }","Space Grotesk has unique character, DM Sans is highly readable."
  5 +4,Editorial Classic,"Serif + Serif",Cormorant Garamond,Libre Baskerville,"editorial, classic, literary, traditional, refined, bookish","Publishing, blogs, news sites, literary magazines, book covers","https://fonts.google.com/share?selection.family=Cormorant+Garamond:wght@400;500;600;700|Libre+Baskerville:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600;700&family=Libre+Baskerville:wght@400;700&display=swap');","fontFamily: { heading: ['Cormorant Garamond', 'serif'], body: ['Libre Baskerville', 'serif'] }","All-serif pairing for traditional editorial feel."
  6 +5,Minimal Swiss,"Sans + Sans",Inter,Inter,"minimal, clean, swiss, functional, neutral, professional","Dashboards, admin panels, documentation, enterprise apps, design systems","https://fonts.google.com/share?selection.family=Inter:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');","fontFamily: { sans: ['Inter', 'sans-serif'] }","Single font family with weight variations. Ultimate simplicity."
  7 +6,Playful Creative,"Display + Sans",Fredoka,Nunito,"playful, friendly, fun, creative, warm, approachable","Children's apps, educational, gaming, creative tools, entertainment","https://fonts.google.com/share?selection.family=Fredoka:wght@400;500;600;700|Nunito:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Fredoka:wght@400;500;600;700&family=Nunito:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Fredoka', 'sans-serif'], body: ['Nunito', 'sans-serif'] }","Rounded, friendly fonts perfect for playful UIs."
  8 +7,Bold Statement,"Display + Sans",Bebas Neue,Source Sans 3,"bold, impactful, strong, dramatic, modern, headlines","Marketing sites, portfolios, agencies, event pages, sports","https://fonts.google.com/share?selection.family=Bebas+Neue|Source+Sans+3:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Source+Sans+3:wght@300;400;500;600;700&display=swap');","fontFamily: { display: ['Bebas Neue', 'sans-serif'], body: ['Source Sans 3', 'sans-serif'] }","Bebas Neue for large headlines only. All-caps display font."
  9 +8,Wellness Calm,"Serif + Sans",Lora,Raleway,"calm, wellness, health, relaxing, natural, organic","Health apps, wellness, spa, meditation, yoga, organic brands","https://fonts.google.com/share?selection.family=Lora:wght@400;500;600;700|Raleway:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Lora:wght@400;500;600;700&family=Raleway:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Lora', 'serif'], sans: ['Raleway', 'sans-serif'] }","Lora's organic curves with Raleway's elegant simplicity."
  10 +9,Developer Mono,"Mono + Sans",JetBrains Mono,IBM Plex Sans,"code, developer, technical, precise, functional, hacker","Developer tools, documentation, code editors, tech blogs, CLI apps","https://fonts.google.com/share?selection.family=IBM+Plex+Sans:wght@300;400;500;600;700|JetBrains+Mono:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap');","fontFamily: { mono: ['JetBrains Mono', 'monospace'], sans: ['IBM Plex Sans', 'sans-serif'] }","JetBrains for code, IBM Plex for UI. Developer-focused."
  11 +10,Retro Vintage,"Display + Serif",Abril Fatface,Merriweather,"retro, vintage, nostalgic, dramatic, decorative, bold","Vintage brands, breweries, restaurants, creative portfolios, posters","https://fonts.google.com/share?selection.family=Abril+Fatface|Merriweather:wght@300;400;700","@import url('https://fonts.googleapis.com/css2?family=Abril+Fatface&family=Merriweather:wght@300;400;700&display=swap');","fontFamily: { display: ['Abril Fatface', 'serif'], body: ['Merriweather', 'serif'] }","Abril Fatface for hero headlines only. High-impact vintage feel."
  12 +11,Geometric Modern,"Sans + Sans",Outfit,Work Sans,"geometric, modern, clean, balanced, contemporary, versatile","General purpose, portfolios, agencies, modern brands, landing pages","https://fonts.google.com/share?selection.family=Outfit:wght@300;400;500;600;700|Work+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&family=Work+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Outfit', 'sans-serif'], body: ['Work Sans', 'sans-serif'] }","Both geometric but Outfit more distinctive for headings."
  13 +12,Luxury Serif,"Serif + Sans",Cormorant,Montserrat,"luxury, high-end, fashion, elegant, refined, premium","Fashion brands, luxury e-commerce, jewelry, high-end services","https://fonts.google.com/share?selection.family=Cormorant:wght@400;500;600;700|Montserrat:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Cormorant:wght@400;500;600;700&family=Montserrat:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Cormorant', 'serif'], sans: ['Montserrat', 'sans-serif'] }","Cormorant's elegance with Montserrat's geometric precision."
  14 +13,Friendly SaaS,"Sans + Sans",Plus Jakarta Sans,Plus Jakarta Sans,"friendly, modern, saas, clean, approachable, professional","SaaS products, web apps, dashboards, B2B, productivity tools","https://fonts.google.com/share?selection.family=Plus+Jakarta+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { sans: ['Plus Jakarta Sans', 'sans-serif'] }","Single versatile font. Modern alternative to Inter."
  15 +14,News Editorial,"Serif + Sans",Newsreader,Roboto,"news, editorial, journalism, trustworthy, readable, informative","News sites, blogs, magazines, journalism, content-heavy sites","https://fonts.google.com/share?selection.family=Newsreader:wght@400;500;600;700|Roboto:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Newsreader:wght@400;500;600;700&family=Roboto:wght@300;400;500;700&display=swap');","fontFamily: { serif: ['Newsreader', 'serif'], sans: ['Roboto', 'sans-serif'] }","Newsreader designed for long-form reading. Roboto for UI."
  16 +15,Handwritten Charm,"Script + Sans",Caveat,Quicksand,"handwritten, personal, friendly, casual, warm, charming","Personal blogs, invitations, creative portfolios, lifestyle brands","https://fonts.google.com/share?selection.family=Caveat:wght@400;500;600;700|Quicksand:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Caveat:wght@400;500;600;700&family=Quicksand:wght@300;400;500;600;700&display=swap');","fontFamily: { script: ['Caveat', 'cursive'], sans: ['Quicksand', 'sans-serif'] }","Use Caveat sparingly for accents. Quicksand for body."
  17 +16,Corporate Trust,"Sans + Sans",Lexend,Source Sans 3,"corporate, trustworthy, accessible, readable, professional, clean","Enterprise, government, healthcare, finance, accessibility-focused","https://fonts.google.com/share?selection.family=Lexend:wght@300;400;500;600;700|Source+Sans+3:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Lexend:wght@300;400;500;600;700&family=Source+Sans+3:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Lexend', 'sans-serif'], body: ['Source Sans 3', 'sans-serif'] }","Lexend designed for readability. Excellent accessibility."
  18 +17,Brutalist Raw,"Mono + Mono",Space Mono,Space Mono,"brutalist, raw, technical, monospace, minimal, stark","Brutalist designs, developer portfolios, experimental, tech art","https://fonts.google.com/share?selection.family=Space+Mono:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&display=swap');","fontFamily: { mono: ['Space Mono', 'monospace'] }","All-mono for raw brutalist aesthetic. Limited weights."
  19 +18,Fashion Forward,"Sans + Sans",Syne,Manrope,"fashion, avant-garde, creative, bold, artistic, edgy","Fashion brands, creative agencies, art galleries, design studios","https://fonts.google.com/share?selection.family=Manrope:wght@300;400;500;600;700|Syne:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@300;400;500;600;700&family=Syne:wght@400;500;600;700&display=swap');","fontFamily: { heading: ['Syne', 'sans-serif'], body: ['Manrope', 'sans-serif'] }","Syne's unique character for headlines. Manrope for readability."
  20 +19,Soft Rounded,"Sans + Sans",Varela Round,Nunito Sans,"soft, rounded, friendly, approachable, warm, gentle","Children's products, pet apps, friendly brands, wellness, soft UI","https://fonts.google.com/share?selection.family=Nunito+Sans:wght@300;400;500;600;700|Varela+Round","@import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@300;400;500;600;700&family=Varela+Round&display=swap');","fontFamily: { heading: ['Varela Round', 'sans-serif'], body: ['Nunito Sans', 'sans-serif'] }","Both rounded and friendly. Perfect for soft UI designs."
  21 +20,Premium Sans,"Sans + Sans",Satoshi,General Sans,"premium, modern, clean, sophisticated, versatile, balanced","Premium brands, modern agencies, SaaS, portfolios, startups","https://fonts.google.com/share?selection.family=DM+Sans:wght@400;500;700","@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&display=swap');","fontFamily: { sans: ['DM Sans', 'sans-serif'] }","Note: Satoshi/General Sans on Fontshare. DM Sans as Google alternative."
  22 +21,Vietnamese Friendly,"Sans + Sans",Be Vietnam Pro,Noto Sans,"vietnamese, international, readable, clean, multilingual, accessible","Vietnamese sites, multilingual apps, international products","https://fonts.google.com/share?selection.family=Be+Vietnam+Pro:wght@300;400;500;600;700|Noto+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:wght@300;400;500;600;700&family=Noto+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { sans: ['Be Vietnam Pro', 'Noto Sans', 'sans-serif'] }","Be Vietnam Pro excellent Vietnamese support. Noto as fallback."
  23 +22,Japanese Elegant,"Serif + Sans",Noto Serif JP,Noto Sans JP,"japanese, elegant, traditional, modern, multilingual, readable","Japanese sites, Japanese restaurants, cultural sites, anime/manga","https://fonts.google.com/share?selection.family=Noto+Sans+JP:wght@300;400;500;700|Noto+Serif+JP:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@300;400;500;700&family=Noto+Serif+JP:wght@400;500;600;700&display=swap');","fontFamily: { serif: ['Noto Serif JP', 'serif'], sans: ['Noto Sans JP', 'sans-serif'] }","Noto fonts excellent Japanese support. Traditional + modern feel."
  24 +23,Korean Modern,"Sans + Sans",Noto Sans KR,Noto Sans KR,"korean, modern, clean, professional, multilingual, readable","Korean sites, K-beauty, K-pop, Korean businesses, multilingual","https://fonts.google.com/share?selection.family=Noto+Sans+KR:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Noto Sans KR', 'sans-serif'] }","Clean Korean typography. Single font with weight variations."
  25 +24,Chinese Traditional,"Serif + Sans",Noto Serif TC,Noto Sans TC,"chinese, traditional, elegant, cultural, multilingual, readable","Traditional Chinese sites, cultural content, Taiwan/Hong Kong markets","https://fonts.google.com/share?selection.family=Noto+Sans+TC:wght@300;400;500;700|Noto+Serif+TC:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@300;400;500;700&family=Noto+Serif+TC:wght@400;500;600;700&display=swap');","fontFamily: { serif: ['Noto Serif TC', 'serif'], sans: ['Noto Sans TC', 'sans-serif'] }","Traditional Chinese character support. Elegant pairing."
  26 +25,Chinese Simplified,"Sans + Sans",Noto Sans SC,Noto Sans SC,"chinese, simplified, modern, professional, multilingual, readable","Simplified Chinese sites, mainland China market, business apps","https://fonts.google.com/share?selection.family=Noto+Sans+SC:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Noto Sans SC', 'sans-serif'] }","Simplified Chinese support. Clean modern look."
  27 +26,Arabic Elegant,"Serif + Sans",Noto Naskh Arabic,Noto Sans Arabic,"arabic, elegant, traditional, cultural, RTL, readable","Arabic sites, Middle East market, Islamic content, bilingual sites","https://fonts.google.com/share?selection.family=Noto+Naskh+Arabic:wght@400;500;600;700|Noto+Sans+Arabic:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Naskh+Arabic:wght@400;500;600;700&family=Noto+Sans+Arabic:wght@300;400;500;700&display=swap');","fontFamily: { serif: ['Noto Naskh Arabic', 'serif'], sans: ['Noto Sans Arabic', 'sans-serif'] }","RTL support. Naskh for traditional, Sans for modern Arabic."
  28 +27,Thai Modern,"Sans + Sans",Noto Sans Thai,Noto Sans Thai,"thai, modern, readable, clean, multilingual, accessible","Thai sites, Southeast Asia, tourism, Thai restaurants","https://fonts.google.com/share?selection.family=Noto+Sans+Thai:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Thai:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Noto Sans Thai', 'sans-serif'] }","Clean Thai typography. Excellent readability."
  29 +28,Hebrew Modern,"Sans + Sans",Noto Sans Hebrew,Noto Sans Hebrew,"hebrew, modern, RTL, clean, professional, readable","Hebrew sites, Israeli market, Jewish content, bilingual sites","https://fonts.google.com/share?selection.family=Noto+Sans+Hebrew:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+Hebrew:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Noto Sans Hebrew', 'sans-serif'] }","RTL support. Clean modern Hebrew typography."
  30 +29,Legal Professional,"Serif + Sans",EB Garamond,Lato,"legal, professional, traditional, trustworthy, formal, authoritative","Law firms, legal services, contracts, formal documents, government","https://fonts.google.com/share?selection.family=EB+Garamond:wght@400;500;600;700|Lato:wght@300;400;700","@import url('https://fonts.googleapis.com/css2?family=EB+Garamond:wght@400;500;600;700&family=Lato:wght@300;400;700&display=swap');","fontFamily: { serif: ['EB Garamond', 'serif'], sans: ['Lato', 'sans-serif'] }","EB Garamond for authority. Lato for clean body text."
  31 +30,Medical Clean,"Sans + Sans",Figtree,Noto Sans,"medical, clean, accessible, professional, healthcare, trustworthy","Healthcare, medical clinics, pharma, health apps, accessibility","https://fonts.google.com/share?selection.family=Figtree:wght@300;400;500;600;700|Noto+Sans:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Figtree:wght@300;400;500;600;700&family=Noto+Sans:wght@300;400;500;700&display=swap');","fontFamily: { heading: ['Figtree', 'sans-serif'], body: ['Noto Sans', 'sans-serif'] }","Clean, accessible fonts for medical contexts."
  32 +31,Financial Trust,"Sans + Sans",IBM Plex Sans,IBM Plex Sans,"financial, trustworthy, professional, corporate, banking, serious","Banks, finance, insurance, investment, fintech, enterprise","https://fonts.google.com/share?selection.family=IBM+Plex+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { sans: ['IBM Plex Sans', 'sans-serif'] }","IBM Plex conveys trust and professionalism. Excellent for data."
  33 +32,Real Estate Luxury,"Serif + Sans",Cinzel,Josefin Sans,"real estate, luxury, elegant, sophisticated, property, premium","Real estate, luxury properties, architecture, interior design","https://fonts.google.com/share?selection.family=Cinzel:wght@400;500;600;700|Josefin+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;500;600;700&family=Josefin+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Cinzel', 'serif'], sans: ['Josefin Sans', 'sans-serif'] }","Cinzel's elegance for headlines. Josefin for modern body."
  34 +33,Restaurant Menu,"Serif + Sans",Playfair Display SC,Karla,"restaurant, menu, culinary, elegant, foodie, hospitality","Restaurants, cafes, food blogs, culinary, hospitality","https://fonts.google.com/share?selection.family=Karla:wght@300;400;500;600;700|Playfair+Display+SC:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Karla:wght@300;400;500;600;700&family=Playfair+Display+SC:wght@400;700&display=swap');","fontFamily: { display: ['Playfair Display SC', 'serif'], sans: ['Karla', 'sans-serif'] }","Small caps Playfair for menu headers. Karla for descriptions."
  35 +34,Art Deco,"Display + Sans",Poiret One,Didact Gothic,"art deco, vintage, 1920s, elegant, decorative, gatsby","Vintage events, art deco themes, luxury hotels, classic cocktails","https://fonts.google.com/share?selection.family=Didact+Gothic|Poiret+One","@import url('https://fonts.googleapis.com/css2?family=Didact+Gothic&family=Poiret+One&display=swap');","fontFamily: { display: ['Poiret One', 'sans-serif'], sans: ['Didact Gothic', 'sans-serif'] }","Poiret One for art deco headlines only. Didact for body."
  36 +35,Magazine Style,"Serif + Sans",Libre Bodoni,Public Sans,"magazine, editorial, publishing, refined, journalism, print","Magazines, online publications, editorial content, journalism","https://fonts.google.com/share?selection.family=Libre+Bodoni:wght@400;500;600;700|Public+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Libre+Bodoni:wght@400;500;600;700&family=Public+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Libre Bodoni', 'serif'], sans: ['Public Sans', 'sans-serif'] }","Bodoni's editorial elegance. Public Sans for clean UI."
  37 +36,Crypto/Web3,"Sans + Sans",Orbitron,Exo 2,"crypto, web3, futuristic, tech, blockchain, digital","Crypto platforms, NFT, blockchain, web3, futuristic tech","https://fonts.google.com/share?selection.family=Exo+2:wght@300;400;500;600;700|Orbitron:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Exo+2:wght@300;400;500;600;700&family=Orbitron:wght@400;500;600;700&display=swap');","fontFamily: { display: ['Orbitron', 'sans-serif'], body: ['Exo 2', 'sans-serif'] }","Orbitron for futuristic headers. Exo 2 for readable body."
  38 +37,Gaming Bold,"Display + Sans",Russo One,Chakra Petch,"gaming, bold, action, esports, competitive, energetic","Gaming, esports, action games, competitive sports, entertainment","https://fonts.google.com/share?selection.family=Chakra+Petch:wght@300;400;500;600;700|Russo+One","@import url('https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@300;400;500;600;700&family=Russo+One&display=swap');","fontFamily: { display: ['Russo One', 'sans-serif'], body: ['Chakra Petch', 'sans-serif'] }","Russo One for impact. Chakra Petch for techy body text."
  39 +38,Indie/Craft,"Display + Sans",Amatic SC,Cabin,"indie, craft, handmade, artisan, organic, creative","Craft brands, indie products, artisan, handmade, organic products","https://fonts.google.com/share?selection.family=Amatic+SC:wght@400;700|Cabin:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Amatic+SC:wght@400;700&family=Cabin:wght@400;500;600;700&display=swap');","fontFamily: { display: ['Amatic SC', 'sans-serif'], sans: ['Cabin', 'sans-serif'] }","Amatic for handwritten feel. Cabin for readable body."
  40 +39,Startup Bold,"Sans + Sans",Clash Display,Satoshi,"startup, bold, modern, innovative, confident, dynamic","Startups, pitch decks, product launches, bold brands","https://fonts.google.com/share?selection.family=Outfit:wght@400;500;600;700|Rubik:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&family=Rubik:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Outfit', 'sans-serif'], body: ['Rubik', 'sans-serif'] }","Note: Clash Display on Fontshare. Outfit as Google alternative."
  41 +40,E-commerce Clean,"Sans + Sans",Rubik,Nunito Sans,"ecommerce, clean, shopping, product, retail, conversion","E-commerce, online stores, product pages, retail, shopping","https://fonts.google.com/share?selection.family=Nunito+Sans:wght@300;400;500;600;700|Rubik:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Nunito+Sans:wght@300;400;500;600;700&family=Rubik:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Rubik', 'sans-serif'], body: ['Nunito Sans', 'sans-serif'] }","Clean readable fonts perfect for product descriptions."
  42 +41,Academic/Research,"Serif + Sans",Crimson Pro,Atkinson Hyperlegible,"academic, research, scholarly, accessible, readable, educational","Universities, research papers, academic journals, educational","https://fonts.google.com/share?selection.family=Atkinson+Hyperlegible:wght@400;700|Crimson+Pro:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&family=Crimson+Pro:wght@400;500;600;700&display=swap');","fontFamily: { serif: ['Crimson Pro', 'serif'], sans: ['Atkinson Hyperlegible', 'sans-serif'] }","Crimson for scholarly headlines. Atkinson for accessibility."
  43 +42,Dashboard Data,"Mono + Sans",Fira Code,Fira Sans,"dashboard, data, analytics, code, technical, precise","Dashboards, analytics, data visualization, admin panels","https://fonts.google.com/share?selection.family=Fira+Code:wght@400;500;600;700|Fira+Sans:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Fira+Sans:wght@300;400;500;600;700&display=swap');","fontFamily: { mono: ['Fira Code', 'monospace'], sans: ['Fira Sans', 'sans-serif'] }","Fira family cohesion. Code for data, Sans for labels."
  44 +43,Music/Entertainment,"Display + Sans",Righteous,Poppins,"music, entertainment, fun, energetic, bold, performance","Music platforms, entertainment, events, festivals, performers","https://fonts.google.com/share?selection.family=Poppins:wght@300;400;500;600;700|Righteous","@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&family=Righteous&display=swap');","fontFamily: { display: ['Righteous', 'sans-serif'], sans: ['Poppins', 'sans-serif'] }","Righteous for bold entertainment headers. Poppins for body."
  45 +44,Minimalist Portfolio,"Sans + Sans",Archivo,Space Grotesk,"minimal, portfolio, designer, creative, clean, artistic","Design portfolios, creative professionals, minimalist brands","https://fonts.google.com/share?selection.family=Archivo:wght@300;400;500;600;700|Space+Grotesk:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Archivo:wght@300;400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&display=swap');","fontFamily: { heading: ['Space Grotesk', 'sans-serif'], body: ['Archivo', 'sans-serif'] }","Space Grotesk for distinctive headers. Archivo for clean body."
  46 +45,Kids/Education,"Display + Sans",Baloo 2,Comic Neue,"kids, education, playful, friendly, colorful, learning","Children's apps, educational games, kid-friendly content","https://fonts.google.com/share?selection.family=Baloo+2:wght@400;500;600;700|Comic+Neue:wght@300;400;700","@import url('https://fonts.googleapis.com/css2?family=Baloo+2:wght@400;500;600;700&family=Comic+Neue:wght@300;400;700&display=swap');","fontFamily: { display: ['Baloo 2', 'sans-serif'], sans: ['Comic Neue', 'sans-serif'] }","Fun, playful fonts for children. Comic Neue is readable comic style."
  47 +46,Wedding/Romance,"Script + Serif",Great Vibes,Cormorant Infant,"wedding, romance, elegant, script, invitation, feminine","Wedding sites, invitations, romantic brands, bridal","https://fonts.google.com/share?selection.family=Cormorant+Infant:wght@300;400;500;600;700|Great+Vibes","@import url('https://fonts.googleapis.com/css2?family=Cormorant+Infant:wght@300;400;500;600;700&family=Great+Vibes&display=swap');","fontFamily: { script: ['Great Vibes', 'cursive'], serif: ['Cormorant Infant', 'serif'] }","Great Vibes for elegant accents. Cormorant for readable text."
  48 +47,Science/Tech,"Sans + Sans",Exo,Roboto Mono,"science, technology, research, data, futuristic, precise","Science, research, tech documentation, data-heavy sites","https://fonts.google.com/share?selection.family=Exo:wght@300;400;500;600;700|Roboto+Mono:wght@300;400;500;700","@import url('https://fonts.googleapis.com/css2?family=Exo:wght@300;400;500;600;700&family=Roboto+Mono:wght@300;400;500;700&display=swap');","fontFamily: { sans: ['Exo', 'sans-serif'], mono: ['Roboto Mono', 'monospace'] }","Exo for modern tech feel. Roboto Mono for code/data."
  49 +48,Accessibility First,"Sans + Sans",Atkinson Hyperlegible,Atkinson Hyperlegible,"accessible, readable, inclusive, WCAG, dyslexia-friendly, clear","Accessibility-critical sites, government, healthcare, inclusive design","https://fonts.google.com/share?selection.family=Atkinson+Hyperlegible:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&display=swap');","fontFamily: { sans: ['Atkinson Hyperlegible', 'sans-serif'] }","Designed for maximum legibility. Excellent for accessibility."
  50 +49,Sports/Fitness,"Sans + Sans",Barlow Condensed,Barlow,"sports, fitness, athletic, energetic, condensed, action","Sports, fitness, gyms, athletic brands, competition","https://fonts.google.com/share?selection.family=Barlow+Condensed:wght@400;500;600;700|Barlow:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Barlow+Condensed:wght@400;500;600;700&family=Barlow:wght@300;400;500;600;700&display=swap');","fontFamily: { display: ['Barlow Condensed', 'sans-serif'], body: ['Barlow', 'sans-serif'] }","Condensed for impact headlines. Regular Barlow for body."
  51 +50,Luxury Minimalist,"Serif + Sans",Bodoni Moda,Jost,"luxury, minimalist, high-end, sophisticated, refined, premium","Luxury minimalist brands, high-end fashion, premium products","https://fonts.google.com/share?selection.family=Bodoni+Moda:wght@400;500;600;700|Jost:wght@300;400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Bodoni+Moda:wght@400;500;600;700&family=Jost:wght@300;400;500;600;700&display=swap');","fontFamily: { serif: ['Bodoni Moda', 'serif'], sans: ['Jost', 'sans-serif'] }","Bodoni's high contrast elegance. Jost for geometric body."
  52 +51,Tech/HUD Mono,"Mono + Mono",Share Tech Mono,Fira Code,"tech, futuristic, hud, sci-fi, data, monospaced, precise","Sci-fi interfaces, developer tools, cybersecurity, dashboards","https://fonts.google.com/share?selection.family=Fira+Code:wght@300;400;500;600;700|Share+Tech+Mono","@import url('https://fonts.googleapis.com/css2?family=Fira+Code:wght@300;400;500;600;700&family=Share+Tech+Mono&display=swap');","fontFamily: { hud: ['Share Tech Mono', 'monospace'], code: ['Fira Code', 'monospace'] }","Share Tech Mono has that classic sci-fi look."
  53 +52,Pixel Retro,"Display + Sans",Press Start 2P,VT323,"pixel, retro, gaming, 8-bit, nostalgic, arcade","Pixel art games, retro websites, creative portfolios","https://fonts.google.com/share?selection.family=Press+Start+2P|VT323","@import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&family=VT323&display=swap');","fontFamily: { pixel: ['Press Start 2P', 'cursive'], terminal: ['VT323', 'monospace'] }","Press Start 2P is very wide/large. VT323 is better for body text."
  54 +53,Neubrutalist Bold,"Display + Sans",Lexend Mega,Public Sans,"bold, neubrutalist, loud, strong, geometric, quirky","Neubrutalist designs, Gen Z brands, bold marketing","https://fonts.google.com/share?selection.family=Lexend+Mega:wght@100..900|Public+Sans:wght@100..900","@import url('https://fonts.googleapis.com/css2?family=Lexend+Mega:wght@100..900&family=Public+Sans:wght@100..900&display=swap');","fontFamily: { mega: ['Lexend Mega', 'sans-serif'], body: ['Public Sans', 'sans-serif'] }","Lexend Mega has distinct character and variable weight."
  55 +54,Academic/Archival,"Serif + Serif",EB Garamond,Crimson Text,"academic, old-school, university, research, serious, traditional","University sites, archives, research papers, history","https://fonts.google.com/share?selection.family=Crimson+Text:wght@400;600;700|EB+Garamond:wght@400;500;600;700;800","@import url('https://fonts.googleapis.com/css2?family=Crimson+Text:wght@400;600;700&family=EB+Garamond:wght@400;500;600;700;800&display=swap');","fontFamily: { classic: ['EB Garamond', 'serif'], text: ['Crimson Text', 'serif'] }","Classic academic aesthetic. Very legible."
  56 +55,Spatial Clear,"Sans + Sans",Inter,Inter,"spatial, legible, glass, system, clean, neutral","Spatial computing, AR/VR, glassmorphism interfaces","https://fonts.google.com/share?selection.family=Inter:wght@300;400;500;600","@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600&display=swap');","fontFamily: { sans: ['Inter', 'sans-serif'] }","Optimized for readability on dynamic backgrounds."
  57 +56,Kinetic Motion,"Display + Mono",Syncopate,Space Mono,"kinetic, motion, futuristic, speed, wide, tech","Music festivals, automotive, high-energy brands","https://fonts.google.com/share?selection.family=Space+Mono:wght@400;700|Syncopate:wght@400;700","@import url('https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&family=Syncopate:wght@400;700&display=swap');","fontFamily: { display: ['Syncopate', 'sans-serif'], mono: ['Space Mono', 'monospace'] }","Syncopate's wide stance works well with motion effects."
  58 +57,Gen Z Brutal,"Display + Sans",Anton,Epilogue,"brutal, loud, shouty, meme, internet, bold","Gen Z marketing, streetwear, viral campaigns","https://fonts.google.com/share?selection.family=Anton|Epilogue:wght@400;500;600;700","@import url('https://fonts.googleapis.com/css2?family=Anton&family=Epilogue:wght@400;500;600;700&display=swap');","fontFamily: { display: ['Anton', 'sans-serif'], body: ['Epilogue', 'sans-serif'] }","Anton is impactful and condensed. Good for stickers/badges."
0 59 \ No newline at end of file
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/data/ux-guidelines.csv 0 → 100644
  1 +No,Category,Issue,Platform,Description,Do,Don't,Code Example Good,Code Example Bad,Severity
  2 +1,Navigation,Smooth Scroll,Web,Anchor links should scroll smoothly to target section,Use scroll-behavior: smooth on html element,Jump directly without transition,html { scroll-behavior: smooth; },<a href='#section'> without CSS,High
  3 +2,Navigation,Sticky Navigation,Web,Fixed nav should not obscure content,Add padding-top to body equal to nav height,Let nav overlap first section content,pt-20 (if nav is h-20),No padding compensation,Medium
  4 +3,Navigation,Active State,All,Current page/section should be visually indicated,Highlight active nav item with color/underline,No visual feedback on current location,text-primary border-b-2,All links same style,Medium
  5 +4,Navigation,Back Button,Mobile,Users expect back to work predictably,Preserve navigation history properly,Break browser/app back button behavior,history.pushState(),location.replace(),High
  6 +5,Navigation,Deep Linking,All,URLs should reflect current state for sharing,Update URL on state/view changes,Static URLs for dynamic content,Use query params or hash,Single URL for all states,Medium
  7 +6,Navigation,Breadcrumbs,Web,Show user location in site hierarchy,Use for sites with 3+ levels of depth,Use for flat single-level sites,Home > Category > Product,Only on deep nested pages,Low
  8 +7,Animation,Excessive Motion,All,Too many animations cause distraction and motion sickness,Animate 1-2 key elements per view maximum,Animate everything that moves,Single hero animation,animate-bounce on 5+ elements,High
  9 +8,Animation,Duration Timing,All,Animations should feel responsive not sluggish,Use 150-300ms for micro-interactions,Use animations longer than 500ms for UI,transition-all duration-200,duration-1000,Medium
  10 +9,Animation,Reduced Motion,All,Respect user's motion preferences,Check prefers-reduced-motion media query,Ignore accessibility motion settings,@media (prefers-reduced-motion: reduce),No motion query check,High
  11 +10,Animation,Loading States,All,Show feedback during async operations,Use skeleton screens or spinners,Leave UI frozen with no feedback,animate-pulse skeleton,Blank screen while loading,High
  12 +11,Animation,Hover vs Tap,All,Hover effects don't work on touch devices,Use click/tap for primary interactions,Rely only on hover for important actions,onClick handler,onMouseEnter only,High
  13 +12,Animation,Continuous Animation,All,Infinite animations are distracting,Use for loading indicators only,Use for decorative elements,animate-spin on loader,animate-bounce on icons,Medium
  14 +13,Animation,Transform Performance,Web,Some CSS properties trigger expensive repaints,Use transform and opacity for animations,Animate width/height/top/left properties,transform: translateY(),top: 10px animation,Medium
  15 +14,Animation,Easing Functions,All,Linear motion feels robotic,Use ease-out for entering ease-in for exiting,Use linear for UI transitions,ease-out,linear,Low
  16 +15,Layout,Z-Index Management,Web,Stacking context conflicts cause hidden elements,Define z-index scale system (10 20 30 50),Use arbitrary large z-index values,z-10 z-20 z-50,z-[9999],High
  17 +16,Layout,Overflow Hidden,Web,Hidden overflow can clip important content,Test all content fits within containers,Blindly apply overflow-hidden,overflow-auto with scroll,overflow-hidden truncating content,Medium
  18 +17,Layout,Fixed Positioning,Web,Fixed elements can overlap or be inaccessible,Account for safe areas and other fixed elements,Stack multiple fixed elements carelessly,Fixed nav + fixed bottom with gap,Multiple overlapping fixed elements,Medium
  19 +18,Layout,Stacking Context,Web,New stacking contexts reset z-index,Understand what creates new stacking context,Expect z-index to work across contexts,Parent with z-index isolates children,z-index: 9999 not working,Medium
  20 +19,Layout,Content Jumping,Web,Layout shift when content loads is jarring,Reserve space for async content,Let images/content push layout around,aspect-ratio or fixed height,No dimensions on images,High
  21 +20,Layout,Viewport Units,Web,100vh can be problematic on mobile browsers,Use dvh or account for mobile browser chrome,Use 100vh for full-screen mobile layouts,min-h-dvh or min-h-screen,h-screen on mobile,Medium
  22 +21,Layout,Container Width,Web,Content too wide is hard to read,Limit max-width for text content (65-75ch),Let text span full viewport width,max-w-prose or max-w-3xl,Full width paragraphs,Medium
  23 +22,Touch,Touch Target Size,Mobile,Small buttons are hard to tap accurately,Minimum 44x44px touch targets,Tiny clickable areas,min-h-[44px] min-w-[44px],w-6 h-6 buttons,High
  24 +23,Touch,Touch Spacing,Mobile,Adjacent touch targets need adequate spacing,Minimum 8px gap between touch targets,Tightly packed clickable elements,gap-2 between buttons,gap-0 or gap-1,Medium
  25 +24,Touch,Gesture Conflicts,Mobile,Custom gestures can conflict with system,Avoid horizontal swipe on main content,Override system gestures,Vertical scroll primary,Horizontal swipe carousel only,Medium
  26 +25,Touch,Tap Delay,Mobile,300ms tap delay feels laggy,Use touch-action CSS or fastclick,Default mobile tap handling,touch-action: manipulation,No touch optimization,Medium
  27 +26,Touch,Pull to Refresh,Mobile,Accidental refresh is frustrating,Disable where not needed,Enable by default everywhere,overscroll-behavior: contain,Default overscroll,Low
  28 +27,Touch,Haptic Feedback,Mobile,Tactile feedback improves interaction feel,Use for confirmations and important actions,Overuse vibration feedback,navigator.vibrate(10),Vibrate on every tap,Low
  29 +28,Interaction,Focus States,All,Keyboard users need visible focus indicators,Use visible focus rings on interactive elements,Remove focus outline without replacement,focus:ring-2 focus:ring-blue-500,outline-none without alternative,High
  30 +29,Interaction,Hover States,Web,Visual feedback on interactive elements,Change cursor and add subtle visual change,No hover feedback on clickable elements,hover:bg-gray-100 cursor-pointer,No hover style,Medium
  31 +30,Interaction,Active States,All,Show immediate feedback on press/click,Add pressed/active state visual change,No feedback during interaction,active:scale-95,No active state,Medium
  32 +31,Interaction,Disabled States,All,Clearly indicate non-interactive elements,Reduce opacity and change cursor,Confuse disabled with normal state,opacity-50 cursor-not-allowed,Same style as enabled,Medium
  33 +32,Interaction,Loading Buttons,All,Prevent double submission during async actions,Disable button and show loading state,Allow multiple clicks during processing,disabled={loading} spinner,Button clickable while loading,High
  34 +33,Interaction,Error Feedback,All,Users need to know when something fails,Show clear error messages near problem,Silent failures with no feedback,Red border + error message,No indication of error,High
  35 +34,Interaction,Success Feedback,All,Confirm successful actions to users,Show success message or visual change,No confirmation of completed action,Toast notification or checkmark,Action completes silently,Medium
  36 +35,Interaction,Confirmation Dialogs,All,Prevent accidental destructive actions,Confirm before delete/irreversible actions,Delete without confirmation,Are you sure modal,Direct delete on click,High
  37 +36,Accessibility,Color Contrast,All,Text must be readable against background,Minimum 4.5:1 ratio for normal text,Low contrast text,#333 on white (7:1),#999 on white (2.8:1),High
  38 +37,Accessibility,Color Only,All,Don't convey information by color alone,Use icons/text in addition to color,Red/green only for error/success,Red text + error icon,Red border only for error,High
  39 +38,Accessibility,Alt Text,All,Images need text alternatives,Descriptive alt text for meaningful images,Empty or missing alt attributes,alt='Dog playing in park',alt='' for content images,High
  40 +39,Accessibility,Heading Hierarchy,Web,Screen readers use headings for navigation,Use sequential heading levels h1-h6,Skip heading levels or misuse for styling,h1 then h2 then h3,h1 then h4,Medium
  41 +40,Accessibility,ARIA Labels,All,Interactive elements need accessible names,Add aria-label for icon-only buttons,Icon buttons without labels,aria-label='Close menu',<button><Icon/></button>,High
  42 +41,Accessibility,Keyboard Navigation,Web,All functionality accessible via keyboard,Tab order matches visual order,Keyboard traps or illogical tab order,tabIndex for custom order,Unreachable elements,High
  43 +42,Accessibility,Screen Reader,All,Content should make sense when read aloud,Use semantic HTML and ARIA properly,Div soup with no semantics,<nav> <main> <article>,<div> for everything,Medium
  44 +43,Accessibility,Form Labels,All,Inputs must have associated labels,Use label with for attribute or wrap input,Placeholder-only inputs,<label for='email'>,placeholder='Email' only,High
  45 +44,Accessibility,Error Messages,All,Error messages must be announced,Use aria-live or role=alert for errors,Visual-only error indication,role='alert',Red border only,High
  46 +45,Accessibility,Skip Links,Web,Allow keyboard users to skip navigation,Provide skip to main content link,No skip link on nav-heavy pages,Skip to main content link,100 tabs to reach content,Medium
  47 +46,Performance,Image Optimization,All,Large images slow page load,Use appropriate size and format (WebP),Unoptimized full-size images,srcset with multiple sizes,4000px image for 400px display,High
  48 +47,Performance,Lazy Loading,All,Load content as needed,Lazy load below-fold images and content,Load everything upfront,loading='lazy',All images eager load,Medium
  49 +48,Performance,Code Splitting,Web,Large bundles slow initial load,Split code by route/feature,Single large bundle,dynamic import(),All code in main bundle,Medium
  50 +49,Performance,Caching,Web,Repeat visits should be fast,Set appropriate cache headers,No caching strategy,Cache-Control headers,Every request hits server,Medium
  51 +50,Performance,Font Loading,Web,Web fonts can block rendering,Use font-display swap or optional,Invisible text during font load,font-display: swap,FOIT (Flash of Invisible Text),Medium
  52 +51,Performance,Third Party Scripts,Web,External scripts can block rendering,Load non-critical scripts async/defer,Synchronous third-party scripts,async or defer attribute,<script src='...'> in head,Medium
  53 +52,Performance,Bundle Size,Web,Large JavaScript slows interaction,Monitor and minimize bundle size,Ignore bundle size growth,Bundle analyzer,No size monitoring,Medium
  54 +53,Performance,Render Blocking,Web,CSS/JS can block first paint,Inline critical CSS defer non-critical,Large blocking CSS files,Critical CSS inline,All CSS in head,Medium
  55 +54,Forms,Input Labels,All,Every input needs a visible label,Always show label above or beside input,Placeholder as only label,<label>Email</label><input>,placeholder='Email' only,High
  56 +55,Forms,Error Placement,All,Errors should appear near the problem,Show error below related input,Single error message at top of form,Error under each field,All errors at form top,Medium
  57 +56,Forms,Inline Validation,All,Validate as user types or on blur,Validate on blur for most fields,Validate only on submit,onBlur validation,Submit-only validation,Medium
  58 +57,Forms,Input Types,All,Use appropriate input types,Use email tel number url etc,Text input for everything,type='email',type='text' for email,Medium
  59 +58,Forms,Autofill Support,Web,Help browsers autofill correctly,Use autocomplete attribute properly,Block or ignore autofill,autocomplete='email',autocomplete='off' everywhere,Medium
  60 +59,Forms,Required Indicators,All,Mark required fields clearly,Use asterisk or (required) text,No indication of required fields,* required indicator,Guess which are required,Medium
  61 +60,Forms,Password Visibility,All,Let users see password while typing,Toggle to show/hide password,No visibility toggle,Show/hide password button,Password always hidden,Medium
  62 +61,Forms,Submit Feedback,All,Confirm form submission status,Show loading then success/error state,No feedback after submit,Loading -> Success message,Button click with no response,High
  63 +62,Forms,Input Affordance,All,Inputs should look interactive,Use distinct input styling,Inputs that look like plain text,Border/background on inputs,Borderless inputs,Medium
  64 +63,Forms,Mobile Keyboards,Mobile,Show appropriate keyboard for input type,Use inputmode attribute,Default keyboard for all inputs,inputmode='numeric',Text keyboard for numbers,Medium
  65 +64,Responsive,Mobile First,Web,Design for mobile then enhance for larger,Start with mobile styles then add breakpoints,Desktop-first causing mobile issues,Default mobile + md: lg: xl:,Desktop default + max-width queries,Medium
  66 +65,Responsive,Breakpoint Testing,Web,Test at all common screen sizes,Test at 320 375 414 768 1024 1440,Only test on your device,Multiple device testing,Single device development,Medium
  67 +66,Responsive,Touch Friendly,Web,Mobile layouts need touch-sized targets,Increase touch targets on mobile,Same tiny buttons on mobile,Larger buttons on mobile,Desktop-sized targets on mobile,High
  68 +67,Responsive,Readable Font Size,All,Text must be readable on all devices,Minimum 16px body text on mobile,Tiny text on mobile,text-base or larger,text-xs for body text,High
  69 +68,Responsive,Viewport Meta,Web,Set viewport for mobile devices,Use width=device-width initial-scale=1,Missing or incorrect viewport,<meta name='viewport'...>,No viewport meta tag,High
  70 +69,Responsive,Horizontal Scroll,Web,Avoid horizontal scrolling,Ensure content fits viewport width,Content wider than viewport,max-w-full overflow-x-hidden,Horizontal scrollbar on mobile,High
  71 +70,Responsive,Image Scaling,Web,Images should scale with container,Use max-width: 100% on images,Fixed width images overflow,max-w-full h-auto,width='800' fixed,Medium
  72 +71,Responsive,Table Handling,Web,Tables can overflow on mobile,Use horizontal scroll or card layout,Wide tables breaking layout,overflow-x-auto wrapper,Table overflows viewport,Medium
  73 +72,Typography,Line Height,All,Adequate line height improves readability,Use 1.5-1.75 for body text,Cramped or excessive line height,leading-relaxed (1.625),leading-none (1),Medium
  74 +73,Typography,Line Length,Web,Long lines are hard to read,Limit to 65-75 characters per line,Full-width text on large screens,max-w-prose,Full viewport width text,Medium
  75 +74,Typography,Font Size Scale,All,Consistent type hierarchy aids scanning,Use consistent modular scale,Random font sizes,Type scale (12 14 16 18 24 32),Arbitrary sizes,Medium
  76 +75,Typography,Font Loading,Web,Fonts should load without layout shift,Reserve space with fallback font,Layout shift when fonts load,font-display: swap + similar fallback,No fallback font,Medium
  77 +76,Typography,Contrast Readability,All,Body text needs good contrast,Use darker text on light backgrounds,Gray text on gray background,text-gray-900 on white,text-gray-400 on gray-100,High
  78 +77,Typography,Heading Clarity,All,Headings should stand out from body,Clear size/weight difference,Headings similar to body text,Bold + larger size,Same size as body,Medium
  79 +78,Feedback,Loading Indicators,All,Show system status during waits,Show spinner/skeleton for operations > 300ms,No feedback during loading,Skeleton or spinner,Frozen UI,High
  80 +79,Feedback,Empty States,All,Guide users when no content exists,Show helpful message and action,Blank empty screens,No items yet. Create one!,Empty white space,Medium
  81 +80,Feedback,Error Recovery,All,Help users recover from errors,Provide clear next steps,Error without recovery path,Try again button + help link,Error message only,Medium
  82 +81,Feedback,Progress Indicators,All,Show progress for multi-step processes,Step indicators or progress bar,No indication of progress,Step 2 of 4 indicator,No step information,Medium
  83 +82,Feedback,Toast Notifications,All,Transient messages for non-critical info,Auto-dismiss after 3-5 seconds,Toasts that never disappear,Auto-dismiss toast,Persistent toast,Medium
  84 +83,Feedback,Confirmation Messages,All,Confirm successful actions,Brief success message,Silent success,Saved successfully toast,No confirmation,Medium
  85 +84,Content,Truncation,All,Handle long content gracefully,Truncate with ellipsis and expand option,Overflow or broken layout,line-clamp-2 with expand,Overflow or cut off,Medium
  86 +85,Content,Date Formatting,All,Use locale-appropriate date formats,Use relative or locale-aware dates,Ambiguous date formats,2 hours ago or locale format,01/02/03,Low
  87 +86,Content,Number Formatting,All,Format large numbers for readability,Use thousand separators or abbreviations,Long unformatted numbers,"1.2K or 1,234",1234567,Low
  88 +87,Content,Placeholder Content,All,Show realistic placeholders during dev,Use realistic sample data,Lorem ipsum everywhere,Real sample content,Lorem ipsum,Low
  89 +88,Onboarding,User Freedom,All,Users should be able to skip tutorials,Provide Skip and Back buttons,Force linear unskippable tour,Skip Tutorial button,Locked overlay until finished,Medium
  90 +89,Search,Autocomplete,Web,Help users find results faster,Show predictions as user types,Require full type and enter,Debounced fetch + dropdown,No suggestions,Medium
  91 +90,Search,No Results,Web,Dead ends frustrate users,Show 'No results' with suggestions,Blank screen or '0 results',Try searching for X instead,No results found.,Medium
  92 +91,Data Entry,Bulk Actions,Web,Editing one by one is tedious,Allow multi-select and bulk edit,Single row actions only,Checkbox column + Action bar,Repeated actions per row,Low
  93 +92,AI Interaction,Disclaimer,All,Users need to know they talk to AI,Clearly label AI generated content,Present AI as human,AI Assistant label,Fake human name without label,High
  94 +93,AI Interaction,Streaming,All,Waiting for full text is slow,Stream text response token by token,Show loading spinner for 10s+,Typewriter effect,Spinner until 100% complete,Medium
  95 +94,Spatial UI,Gaze Hover,VisionOS,Elements should respond to eye tracking before pinch,Scale/highlight element on look,Static element until pinch,hoverEffect(),onTap only,High
  96 +95,Spatial UI,Depth Layering,VisionOS,UI needs Z-depth to separate content from environment,Use glass material and z-offset,Flat opaque panels blocking view,.glassBackgroundEffect(),bg-white,Medium
  97 +96,Sustainability,Auto-Play Video,Web,Video consumes massive data and energy,Click-to-play or pause when off-screen,Auto-play high-res video loops,playsInline muted preload='none',autoplay loop,Medium
  98 +97,Sustainability,Asset Weight,Web,Heavy 3D/Image assets increase carbon footprint,Compress and lazy load 3D models,Load 50MB textures,Draco compression,Raw .obj files,Medium
  99 +98,AI Interaction,Feedback Loop,All,AI needs user feedback to improve,Thumps up/down or 'Regenerate',Static output only,Feedback component,Read-only text,Low
  100 +99,Accessibility,Motion Sensitivity,All,Parallax/Scroll-jacking causes nausea,Respect prefers-reduced-motion,Force scroll effects,@media (prefers-reduced-motion),ScrollTrigger.create(),High
0 101 \ No newline at end of file
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/scripts/core.py 0 → 100644
  1 +#!/usr/bin/env python3
  2 +# -*- coding: utf-8 -*-
  3 +"""
  4 +UI/UX Pro Max Core - BM25 search engine for UI/UX style guides
  5 +"""
  6 +
  7 +import csv
  8 +import re
  9 +from pathlib import Path
  10 +from math import log
  11 +from collections import defaultdict
  12 +
  13 +# ============ CONFIGURATION ============
  14 +DATA_DIR = Path(__file__).parent.parent / "data"
  15 +MAX_RESULTS = 3
  16 +
  17 +CSV_CONFIG = {
  18 + "style": {
  19 + "file": "styles.csv",
  20 + "search_cols": ["Style Category", "Keywords", "Best For", "Type"],
  21 + "output_cols": ["Style Category", "Type", "Keywords", "Primary Colors", "Effects & Animation", "Best For", "Performance", "Accessibility", "Framework Compatibility", "Complexity"]
  22 + },
  23 + "prompt": {
  24 + "file": "prompts.csv",
  25 + "search_cols": ["Style Category", "AI Prompt Keywords (Copy-Paste Ready)", "CSS/Technical Keywords"],
  26 + "output_cols": ["Style Category", "AI Prompt Keywords (Copy-Paste Ready)", "CSS/Technical Keywords", "Implementation Checklist"]
  27 + },
  28 + "color": {
  29 + "file": "colors.csv",
  30 + "search_cols": ["Product Type", "Keywords", "Notes"],
  31 + "output_cols": ["Product Type", "Keywords", "Primary (Hex)", "Secondary (Hex)", "CTA (Hex)", "Background (Hex)", "Text (Hex)", "Border (Hex)", "Notes"]
  32 + },
  33 + "chart": {
  34 + "file": "charts.csv",
  35 + "search_cols": ["Data Type", "Keywords", "Best Chart Type", "Accessibility Notes"],
  36 + "output_cols": ["Data Type", "Keywords", "Best Chart Type", "Secondary Options", "Color Guidance", "Accessibility Notes", "Library Recommendation", "Interactive Level"]
  37 + },
  38 + "landing": {
  39 + "file": "landing.csv",
  40 + "search_cols": ["Pattern Name", "Keywords", "Conversion Optimization", "Section Order"],
  41 + "output_cols": ["Pattern Name", "Keywords", "Section Order", "Primary CTA Placement", "Color Strategy", "Conversion Optimization"]
  42 + },
  43 + "product": {
  44 + "file": "products.csv",
  45 + "search_cols": ["Product Type", "Keywords", "Primary Style Recommendation", "Key Considerations"],
  46 + "output_cols": ["Product Type", "Keywords", "Primary Style Recommendation", "Secondary Styles", "Landing Page Pattern", "Dashboard Style (if applicable)", "Color Palette Focus"]
  47 + },
  48 + "ux": {
  49 + "file": "ux-guidelines.csv",
  50 + "search_cols": ["Category", "Issue", "Description", "Platform"],
  51 + "output_cols": ["Category", "Issue", "Platform", "Description", "Do", "Don't", "Code Example Good", "Code Example Bad", "Severity"]
  52 + },
  53 + "typography": {
  54 + "file": "typography.csv",
  55 + "search_cols": ["Font Pairing Name", "Category", "Mood/Style Keywords", "Best For", "Heading Font", "Body Font"],
  56 + "output_cols": ["Font Pairing Name", "Category", "Heading Font", "Body Font", "Mood/Style Keywords", "Best For", "Google Fonts URL", "CSS Import", "Tailwind Config", "Notes"]
  57 + }
  58 +}
  59 +
  60 +STACK_CONFIG = {
  61 + "html-tailwind": {"file": "stacks/html-tailwind.csv"},
  62 + "react": {"file": "stacks/react.csv"},
  63 + "nextjs": {"file": "stacks/nextjs.csv"},
  64 + "vue": {"file": "stacks/vue.csv"},
  65 + "svelte": {"file": "stacks/svelte.csv"},
  66 + "swiftui": {"file": "stacks/swiftui.csv"},
  67 + "react-native": {"file": "stacks/react-native.csv"},
  68 + "flutter": {"file": "stacks/flutter.csv"}
  69 +}
  70 +
  71 +# Common columns for all stacks
  72 +_STACK_COLS = {
  73 + "search_cols": ["Category", "Guideline", "Description", "Do", "Don't"],
  74 + "output_cols": ["Category", "Guideline", "Description", "Do", "Don't", "Code Good", "Code Bad", "Severity", "Docs URL"]
  75 +}
  76 +
  77 +AVAILABLE_STACKS = list(STACK_CONFIG.keys())
  78 +
  79 +
  80 +# ============ BM25 IMPLEMENTATION ============
  81 +class BM25:
  82 + """BM25 ranking algorithm for text search"""
  83 +
  84 + def __init__(self, k1=1.5, b=0.75):
  85 + self.k1 = k1
  86 + self.b = b
  87 + self.corpus = []
  88 + self.doc_lengths = []
  89 + self.avgdl = 0
  90 + self.idf = {}
  91 + self.doc_freqs = defaultdict(int)
  92 + self.N = 0
  93 +
  94 + def tokenize(self, text):
  95 + """Lowercase, split, remove punctuation, filter short words"""
  96 + text = re.sub(r'[^\w\s]', ' ', str(text).lower())
  97 + return [w for w in text.split() if len(w) > 2]
  98 +
  99 + def fit(self, documents):
  100 + """Build BM25 index from documents"""
  101 + self.corpus = [self.tokenize(doc) for doc in documents]
  102 + self.N = len(self.corpus)
  103 + if self.N == 0:
  104 + return
  105 + self.doc_lengths = [len(doc) for doc in self.corpus]
  106 + self.avgdl = sum(self.doc_lengths) / self.N
  107 +
  108 + for doc in self.corpus:
  109 + seen = set()
  110 + for word in doc:
  111 + if word not in seen:
  112 + self.doc_freqs[word] += 1
  113 + seen.add(word)
  114 +
  115 + for word, freq in self.doc_freqs.items():
  116 + self.idf[word] = log((self.N - freq + 0.5) / (freq + 0.5) + 1)
  117 +
  118 + def score(self, query):
  119 + """Score all documents against query"""
  120 + query_tokens = self.tokenize(query)
  121 + scores = []
  122 +
  123 + for idx, doc in enumerate(self.corpus):
  124 + score = 0
  125 + doc_len = self.doc_lengths[idx]
  126 + term_freqs = defaultdict(int)
  127 + for word in doc:
  128 + term_freqs[word] += 1
  129 +
  130 + for token in query_tokens:
  131 + if token in self.idf:
  132 + tf = term_freqs[token]
  133 + idf = self.idf[token]
  134 + numerator = tf * (self.k1 + 1)
  135 + denominator = tf + self.k1 * (1 - self.b + self.b * doc_len / self.avgdl)
  136 + score += idf * numerator / denominator
  137 +
  138 + scores.append((idx, score))
  139 +
  140 + return sorted(scores, key=lambda x: x[1], reverse=True)
  141 +
  142 +
  143 +# ============ SEARCH FUNCTIONS ============
  144 +def _load_csv(filepath):
  145 + """Load CSV and return list of dicts"""
  146 + with open(filepath, 'r', encoding='utf-8') as f:
  147 + return list(csv.DictReader(f))
  148 +
  149 +
  150 +def _search_csv(filepath, search_cols, output_cols, query, max_results):
  151 + """Core search function using BM25"""
  152 + if not filepath.exists():
  153 + return []
  154 +
  155 + data = _load_csv(filepath)
  156 +
  157 + # Build documents from search columns
  158 + documents = [" ".join(str(row.get(col, "")) for col in search_cols) for row in data]
  159 +
  160 + # BM25 search
  161 + bm25 = BM25()
  162 + bm25.fit(documents)
  163 + ranked = bm25.score(query)
  164 +
  165 + # Get top results with score > 0
  166 + results = []
  167 + for idx, score in ranked[:max_results]:
  168 + if score > 0:
  169 + row = data[idx]
  170 + results.append({col: row.get(col, "") for col in output_cols if col in row})
  171 +
  172 + return results
  173 +
  174 +
  175 +def detect_domain(query):
  176 + """Auto-detect the most relevant domain from query"""
  177 + query_lower = query.lower()
  178 +
  179 + domain_keywords = {
  180 + "color": ["color", "palette", "hex", "#", "rgb"],
  181 + "chart": ["chart", "graph", "visualization", "trend", "bar", "pie", "scatter", "heatmap", "funnel"],
  182 + "landing": ["landing", "page", "cta", "conversion", "hero", "testimonial", "pricing", "section"],
  183 + "product": ["saas", "ecommerce", "e-commerce", "fintech", "healthcare", "gaming", "portfolio", "crypto", "dashboard"],
  184 + "prompt": ["prompt", "css", "implementation", "variable", "checklist", "tailwind"],
  185 + "style": ["style", "design", "ui", "minimalism", "glassmorphism", "neumorphism", "brutalism", "dark mode", "flat", "aurora"],
  186 + "ux": ["ux", "usability", "accessibility", "wcag", "touch", "scroll", "animation", "keyboard", "navigation", "mobile"],
  187 + "typography": ["font", "typography", "heading", "serif", "sans"]
  188 + }
  189 +
  190 + scores = {domain: sum(1 for kw in keywords if kw in query_lower) for domain, keywords in domain_keywords.items()}
  191 + best = max(scores, key=scores.get)
  192 + return best if scores[best] > 0 else "style"
  193 +
  194 +
  195 +def search(query, domain=None, max_results=MAX_RESULTS):
  196 + """Main search function with auto-domain detection"""
  197 + if domain is None:
  198 + domain = detect_domain(query)
  199 +
  200 + config = CSV_CONFIG.get(domain, CSV_CONFIG["style"])
  201 + filepath = DATA_DIR / config["file"]
  202 +
  203 + if not filepath.exists():
  204 + return {"error": f"File not found: {filepath}", "domain": domain}
  205 +
  206 + results = _search_csv(filepath, config["search_cols"], config["output_cols"], query, max_results)
  207 +
  208 + return {
  209 + "domain": domain,
  210 + "query": query,
  211 + "file": config["file"],
  212 + "count": len(results),
  213 + "results": results
  214 + }
  215 +
  216 +
  217 +def search_stack(query, stack, max_results=MAX_RESULTS):
  218 + """Search stack-specific guidelines"""
  219 + if stack not in STACK_CONFIG:
  220 + return {"error": f"Unknown stack: {stack}. Available: {', '.join(AVAILABLE_STACKS)}"}
  221 +
  222 + filepath = DATA_DIR / STACK_CONFIG[stack]["file"]
  223 +
  224 + if not filepath.exists():
  225 + return {"error": f"Stack file not found: {filepath}", "stack": stack}
  226 +
  227 + results = _search_csv(filepath, _STACK_COLS["search_cols"], _STACK_COLS["output_cols"], query, max_results)
  228 +
  229 + return {
  230 + "domain": "stack",
  231 + "stack": stack,
  232 + "query": query,
  233 + "file": STACK_CONFIG[stack]["file"],
  234 + "count": len(results),
  235 + "results": results
  236 + }
... ...
antis-ncc-admin/.shared/ui-ux-pro-max/scripts/search.py 0 → 100644
  1 +#!/usr/bin/env python3
  2 +# -*- coding: utf-8 -*-
  3 +"""
  4 +UI/UX Pro Max Search - BM25 search engine for UI/UX style guides
  5 +Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--max-results 3]
  6 +
  7 +Domains: style, prompt, color, chart, landing, product, ux, typography
  8 +Stacks: html-tailwind, react, nextjs
  9 +"""
  10 +
  11 +import argparse
  12 +from core import CSV_CONFIG, AVAILABLE_STACKS, MAX_RESULTS, search, search_stack
  13 +
  14 +
  15 +def format_output(result):
  16 + """Format results for Claude consumption (token-optimized)"""
  17 + if "error" in result:
  18 + return f"Error: {result['error']}"
  19 +
  20 + output = []
  21 + if result.get("stack"):
  22 + output.append(f"## UI Pro Max Stack Guidelines")
  23 + output.append(f"**Stack:** {result['stack']} | **Query:** {result['query']}")
  24 + else:
  25 + output.append(f"## UI Pro Max Search Results")
  26 + output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")
  27 + output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")
  28 +
  29 + for i, row in enumerate(result['results'], 1):
  30 + output.append(f"### Result {i}")
  31 + for key, value in row.items():
  32 + value_str = str(value)
  33 + if len(value_str) > 300:
  34 + value_str = value_str[:300] + "..."
  35 + output.append(f"- **{key}:** {value_str}")
  36 + output.append("")
  37 +
  38 + return "\n".join(output)
  39 +
  40 +
  41 +if __name__ == "__main__":
  42 + parser = argparse.ArgumentParser(description="UI Pro Max Search")
  43 + parser.add_argument("query", help="Search query")
  44 + parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")
  45 + parser.add_argument("--stack", "-s", choices=AVAILABLE_STACKS, help="Stack-specific search (html-tailwind, react, nextjs)")
  46 + parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")
  47 + parser.add_argument("--json", action="store_true", help="Output as JSON")
  48 +
  49 + args = parser.parse_args()
  50 +
  51 + # Stack search takes priority
  52 + if args.stack:
  53 + result = search_stack(args.query, args.stack, args.max_results)
  54 + else:
  55 + result = search(args.query, args.domain, args.max_results)
  56 +
  57 + if args.json:
  58 + import json
  59 + print(json.dumps(result, indent=2, ensure_ascii=False))
  60 + else:
  61 + print(format_output(result))
... ...
antis-ncc-admin/src/views/statisticsList/form7.vue
... ... @@ -89,9 +89,9 @@
89 89  
90 90 <!-- 统计卡片 -->
91 91 <div class="statistics-cards" v-if="summaryData">
92   - <el-row :gutter="16">
93   - <el-col :span="6">
94   - <div class="statistics-card">
  92 + <el-row :gutter="12">
  93 + <el-col :span="4">
  94 + <div class="statistics-card invite-card">
95 95 <div class="card-icon">
96 96 <i class="el-icon-user-solid"></i>
97 97 </div>
... ... @@ -101,8 +101,8 @@
101 101 </div>
102 102 </div>
103 103 </el-col>
104   - <el-col :span="6">
105   - <div class="statistics-card">
  104 + <el-col :span="4">
  105 + <div class="statistics-card appointment-card">
106 106 <div class="card-icon">
107 107 <i class="el-icon-date"></i>
108 108 </div>
... ... @@ -112,8 +112,8 @@
112 112 </div>
113 113 </div>
114 114 </el-col>
115   - <el-col :span="6">
116   - <div class="statistics-card">
  115 + <el-col :span="4">
  116 + <div class="statistics-card visit-card">
117 117 <div class="card-icon">
118 118 <i class="el-icon-location"></i>
119 119 </div>
... ... @@ -123,8 +123,8 @@
123 123 </div>
124 124 </div>
125 125 </el-col>
126   - <el-col :span="6">
127   - <div class="statistics-card">
  126 + <el-col :span="4">
  127 + <div class="statistics-card billing-card">
128 128 <div class="card-icon">
129 129 <i class="el-icon-document"></i>
130 130 </div>
... ... @@ -134,10 +134,8 @@
134 134 </div>
135 135 </div>
136 136 </el-col>
137   - </el-row>
138   - <el-row :gutter="16" style="margin-top: 16px;">
139   - <el-col :span="6">
140   - <div class="statistics-card">
  137 + <el-col :span="4">
  138 + <div class="statistics-card billing-amount-card">
141 139 <div class="card-icon">
142 140 <i class="el-icon-money"></i>
143 141 </div>
... ... @@ -147,8 +145,8 @@
147 145 </div>
148 146 </div>
149 147 </el-col>
150   - <el-col :span="6">
151   - <div class="statistics-card">
  148 + <el-col :span="4">
  149 + <div class="statistics-card consume-card">
152 150 <div class="card-icon">
153 151 <i class="el-icon-success"></i>
154 152 </div>
... ... @@ -158,8 +156,10 @@
158 156 </div>
159 157 </div>
160 158 </el-col>
161   - <el-col :span="6">
162   - <div class="statistics-card">
  159 + </el-row>
  160 + <el-row :gutter="12" style="margin-top: 12px;">
  161 + <el-col :span="4">
  162 + <div class="statistics-card refund-card">
163 163 <div class="card-icon">
164 164 <i class="el-icon-warning"></i>
165 165 </div>
... ... @@ -169,8 +169,8 @@
169 169 </div>
170 170 </div>
171 171 </el-col>
172   - <el-col :span="6">
173   - <div class="statistics-card">
  172 + <el-col :span="4">
  173 + <div class="statistics-card performance-card">
174 174 <div class="card-icon">
175 175 <i class="el-icon-star-on"></i>
176 176 </div>
... ... @@ -180,10 +180,8 @@
180 180 </div>
181 181 </div>
182 182 </el-col>
183   - </el-row>
184   - <el-row :gutter="16" style="margin-top: 16px;">
185   - <el-col :span="6">
186   - <div class="statistics-card">
  183 + <el-col :span="4">
  184 + <div class="statistics-card headcount-card">
187 185 <div class="card-icon">
188 186 <i class="el-icon-user"></i>
189 187 </div>
... ... @@ -193,8 +191,8 @@
193 191 </div>
194 192 </div>
195 193 </el-col>
196   - <el-col :span="6">
197   - <div class="statistics-card">
  194 + <el-col :span="4">
  195 + <div class="statistics-card personcount-card">
198 196 <div class="card-icon">
199 197 <i class="el-icon-s-custom"></i>
200 198 </div>
... ... @@ -204,8 +202,8 @@
204 202 </div>
205 203 </div>
206 204 </el-col>
207   - <el-col :span="6">
208   - <div class="statistics-card">
  205 + <el-col :span="4">
  206 + <div class="statistics-card project-card">
209 207 <div class="card-icon">
210 208 <i class="el-icon-goods"></i>
211 209 </div>
... ... @@ -215,8 +213,8 @@
215 213 </div>
216 214 </div>
217 215 </el-col>
218   - <el-col :span="6">
219   - <div class="statistics-card">
  216 + <el-col :span="4">
  217 + <div class="statistics-card labor-card">
220 218 <div class="card-icon">
221 219 <i class="el-icon-coin"></i>
222 220 </div>
... ... @@ -929,47 +927,126 @@ export default {
929 927  
930 928 <style lang="scss" scoped>
931 929 .statistics-cards {
932   - margin-bottom: 20px;
  930 + margin-bottom: 16px;
933 931 }
934 932  
935 933 .statistics-card {
936   - height: 100px;
937   - padding: 12px;
938   - border-radius: 12px;
  934 + height: 72px;
  935 + padding: 10px;
  936 + border-radius: 8px;
939 937 background: #fff;
940   - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  938 + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
941 939 display: flex;
942 940 align-items: center;
  941 + transition: all 0.2s ease;
  942 + cursor: default;
  943 +
  944 + &:hover {
  945 + transform: translateY(-1px);
  946 + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
  947 + }
943 948  
944 949 .card-icon {
945   - width: 60px;
946   - height: 60px;
947   - border-radius: 8px;
948   - background: linear-gradient(135deg, #409EFF, #67C23A);
  950 + width: 44px;
  951 + height: 44px;
  952 + border-radius: 6px;
949 953 display: flex;
950 954 align-items: center;
951 955 justify-content: center;
952   - margin-right: 16px;
  956 + margin-right: 10px;
  957 + flex-shrink: 0;
953 958  
954 959 i {
955   - font-size: 24px;
  960 + font-size: 20px;
956 961 color: #fff;
957 962 }
958 963 }
959 964  
  965 + // 不同卡片的图标颜色
  966 + &.invite-card .card-icon {
  967 + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  968 + }
  969 +
  970 + &.appointment-card .card-icon {
  971 + background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
  972 + }
  973 +
  974 + &.visit-card .card-icon {
  975 + background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
  976 + }
  977 +
  978 + &.billing-card .card-icon {
  979 + background: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);
  980 + }
  981 +
  982 + &.billing-amount-card .card-icon {
  983 + background: linear-gradient(135deg, #409EFF 0%, #66B1FF 100%);
  984 + }
  985 +
  986 + &.consume-card .card-icon {
  987 + background: linear-gradient(135deg, #67C23A 0%, #85ce61 100%);
  988 + }
  989 +
  990 + &.refund-card .card-icon {
  991 + background: linear-gradient(135deg, #F56C6C 0%, #f78989 100%);
  992 + }
  993 +
  994 + &.performance-card .card-icon {
  995 + background: linear-gradient(135deg, #E6A23C 0%, #ebb563 100%);
  996 + }
  997 +
  998 + &.headcount-card .card-icon {
  999 + background: linear-gradient(135deg, #909399 0%, #a6a9ad 100%);
  1000 + }
  1001 +
  1002 + &.personcount-card .card-icon {
  1003 + background: linear-gradient(135deg, #606266 0%, #787c82 100%);
  1004 + }
  1005 +
  1006 + &.project-card .card-icon {
  1007 + background: linear-gradient(135deg, #409EFF 0%, #66B1FF 100%);
  1008 + }
  1009 +
  1010 + &.labor-card .card-icon {
  1011 + background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);
  1012 + }
  1013 +
960 1014 .card-content {
961 1015 flex: 1;
  1016 + min-width: 0;
962 1017  
963 1018 .card-title {
964   - font-size: 14px;
  1019 + font-size: 12px;
965 1020 color: #909399;
966   - margin-bottom: 8px;
  1021 + margin-bottom: 4px;
  1022 + line-height: 1.2;
967 1023 }
968 1024  
969 1025 .card-value {
970   - font-size: 24px;
  1026 + font-size: 18px;
971 1027 font-weight: bold;
972 1028 color: #303133;
  1029 + line-height: 1.2;
  1030 + word-break: break-all;
  1031 + }
  1032 + }
  1033 +}
  1034 +
  1035 +// 表格区域样式
  1036 +.NCC-common-layout-main {
  1037 + ::v-deep .el-table {
  1038 + .el-table__header {
  1039 + th {
  1040 + background-color: #f5f7fa;
  1041 + color: #606266;
  1042 + font-weight: 600;
  1043 + }
  1044 + }
  1045 +
  1046 + .el-table__body {
  1047 + tr:hover > td {
  1048 + background-color: #f5f7fa;
  1049 + }
973 1050 }
974 1051 }
975 1052 }
... ... @@ -988,7 +1065,7 @@ export default {
988 1065 color: #409EFF;
989 1066 cursor: pointer;
990 1067 text-decoration: none;
991   - transition: all 0.3s;
  1068 + transition: color 0.2s ease;
992 1069  
993 1070 &:hover {
994 1071 color: #66b1ff;
... ... @@ -1000,6 +1077,26 @@ export default {
1000 1077 }
1001 1078 }
1002 1079  
  1080 +// 搜索框区域样式
  1081 +.NCC-common-search-box {
  1082 + .el-form-item {
  1083 + margin-bottom: 18px;
  1084 +
  1085 + .el-form-item__label {
  1086 + font-weight: 500;
  1087 + color: #606266;
  1088 + }
  1089 + }
  1090 +
  1091 + .el-button {
  1092 + transition: all 0.2s ease;
  1093 +
  1094 + &:hover {
  1095 + transform: translateY(-1px);
  1096 + }
  1097 + }
  1098 +}
  1099 +
1003 1100 // 响应式设计
1004 1101 @media (max-width: 768px) {
1005 1102 .statistics-cards {
... ...
antis-ncc-admin/src/views/statisticsList/form9.vue
... ... @@ -12,34 +12,19 @@
12 12 style="width: 150px;" @change="handleMonthChange" />
13 13 </el-form-item>
14 14 <el-form-item label="组织类型">
15   - <el-select
16   - v-model="query.organizationType"
17   - placeholder="请选择组织类型"
18   - filterable
19   - clearable
20   - @change="handleOrganizationTypeChange"
21   - size="mini"
22   - style="width: 150px;">
  15 + <el-select v-model="query.organizationType" placeholder="请选择组织类型" filterable clearable
  16 + @change="handleOrganizationTypeChange" size="mini" style="width: 150px;">
23 17 <el-option label="事业部" value="事业部"></el-option>
24   - <el-option label="科技部" value="科技部"></el-option>
25   - <el-option label="教育部" value="教育部"></el-option>
26   - <el-option label="大项目部" value="大项目部"></el-option>
  18 + <el-option label="科技部" value="科技部" v-if="false"></el-option>
  19 + <el-option label="教育部" value="教育部" v-if="false"></el-option>
  20 + <el-option label="大项目部" value="大项目部" v-if="false"></el-option>
27 21 </el-select>
28 22 </el-form-item>
29 23 <el-form-item label="部门">
30   - <el-select
31   - v-model="query.departmentId"
32   - placeholder="请选择部门"
33   - filterable
34   - clearable
35   - @change="handleDepartmentChange"
36   - size="mini"
37   - style="width: 150px;">
38   - <el-option
39   - v-for="dept in departmentOptions"
40   - :key="dept.Id || dept.id"
41   - :label="dept.FullName || dept.fullName"
42   - :value="dept.Id || dept.id">
  24 + <el-select v-model="query.departmentId" placeholder="请选择部门" filterable clearable
  25 + @change="handleDepartmentChange" size="mini" style="width: 150px;">
  26 + <el-option v-for="dept in departmentOptions" :key="dept.Id || dept.id"
  27 + :label="dept.FullName || dept.fullName" :value="dept.Id || dept.id">
43 28 </el-option>
44 29 </el-select>
45 30 </el-form-item>
... ... @@ -71,7 +56,7 @@
71 56 <div class="kpi-info">
72 57 <el-tooltip v-if="kpi.tooltip" class="item" effect="dark" :content="kpi.tooltip" placement="right-start">
73 58 <div class="kpi-label">{{ kpi.label }}</div>
74   - </el-tooltip>
  59 + </el-tooltip>
75 60 <div v-else class="kpi-label">{{ kpi.label }}</div>
76 61 <div class="kpi-value">
77 62 <span class="unit" v-if="kpi.isMoney">¥</span>
... ... @@ -103,7 +88,7 @@
103 88 <div class="stat-content">
104 89 <el-tooltip class="item" effect="dark" content="消费金额>500" placement="right-start">
105 90 <div class="stat-label">总会员数</div>
106   - </el-tooltip>
  91 + </el-tooltip>
107 92 <div class="stat-value">{{ formatNumber(memberStatistics.totalMembers) }}</div>
108 93 </div>
109 94 </div>
... ... @@ -181,7 +166,9 @@
181 166 <div class="stat-content">
182 167 <div class="stat-label">剩余权益总金额</div>
183 168 <div class="stat-value">
184   - <span style="font-size: 13px;font-weight: 500;">¥</span>{{ formatMoney(memberStatistics.totalRemainingAmount) }}</div>
  169 + <span style="font-size: 13px;font-weight: 500;">¥</span>{{
  170 + formatMoney(memberStatistics.totalRemainingAmount) }}
  171 + </div>
185 172 </div>
186 173 </div>
187 174 <div class="stat-tags">
... ... @@ -474,8 +461,8 @@
474 461 <member-portrait-dialog :visible.sync="memberPortraitDialog.visible" :member-id="memberPortraitDialog.memberId" />
475 462  
476 463 <!-- 门店数据结构分析弹窗 -->
477   - <store-data-analysis-dialog :visible.sync="storeDataAnalysisDialog.visible" :store-id="storeDataAnalysisDialog.storeId"
478   - :statistics-month="storeDataAnalysisDialog.statisticsMonth" />
  464 + <store-data-analysis-dialog :visible.sync="storeDataAnalysisDialog.visible"
  465 + :store-id="storeDataAnalysisDialog.storeId" :statistics-month="storeDataAnalysisDialog.statisticsMonth" />
479 466  
480 467 <!-- 科技感弹窗预览 -->
481 468 <el-dialog :visible.sync="showTechModal" :title="techModalTitle" :width="techModalWidth" custom-class="tech-dialog"
... ... @@ -522,13 +509,9 @@
522 509 </div>
523 510 </div>
524 511 </el-dialog>
525   - <VisitFrequencyMemberListDialog
526   - :visible.sync="visitFrequencyMemberDialogVisible"
527   - :visit-count="visitFrequencyMemberVisitCount"
528   - :start-time="getStartTime()"
529   - :end-time="getEndTime()"
530   - :store-ids="query.storeIds || []"
531   - />
  512 + <VisitFrequencyMemberListDialog :visible.sync="visitFrequencyMemberDialogVisible"
  513 + :visit-count="visitFrequencyMemberVisitCount" :start-time="getStartTime()" :end-time="getEndTime()"
  514 + :store-ids="query.storeIds || []" />
532 515 </div>
533 516 </template>
534 517  
... ... @@ -1296,7 +1279,7 @@ export default {
1296 1279 fontWeight: 'normal'
1297 1280 },
1298 1281 itemGap: 10,
1299   - formatter: function(name) {
  1282 + formatter: function (name) {
1300 1283 // 如果名称太长,截断并显示省略号
1301 1284 if (name.length > 6) {
1302 1285 return name.substring(0, 6) + '...'
... ... @@ -1674,8 +1657,8 @@ export default {
1674 1657 data: data.map(i => (i.VisitCount || 0) + '次'),
1675 1658 axisLine: { show: true, lineStyle: { color: '#E4E7ED' } },
1676 1659 axisTick: { show: false },
1677   - axisLabel: {
1678   - color: '#606266',
  1660 + axisLabel: {
  1661 + color: '#606266',
1679 1662 fontSize: 12,
1680 1663 // 让 x 轴标签可点击
1681 1664 triggerEvent: true
... ... @@ -1698,7 +1681,7 @@ export default {
1698 1681 { offset: 1, color: '#67C23A' }
1699 1682 ]),
1700 1683 barWidth: '50%',
1701   - itemStyle: {
  1684 + itemStyle: {
1702 1685 borderRadius: [4, 4, 0, 0],
1703 1686 // 增加悬停时的视觉反馈
1704 1687 emphasis: {
... ... @@ -1719,7 +1702,7 @@ export default {
1719 1702 // 保存数据引用,确保闭包中能访问到最新的数据
1720 1703 const chartData = data
1721 1704 const self = this
1722   -
  1705 +
1723 1706 // 自定义点击区域检测:监听整个图表容器的点击,扩大点击区域
1724 1707 // 这样可以点击整个柱子区域(包括很小的柱子)和 x 轴标签区域
1725 1708 const handleContainerClick = (event) => {
... ... @@ -1727,25 +1710,25 @@ export default {
1727 1710 const rect = dom.getBoundingClientRect()
1728 1711 const clickX = event.clientX - rect.left
1729 1712 const clickY = event.clientY - rect.top
1730   -
  1713 +
1731 1714 try {
1732 1715 // 使用 ECharts 的 convertFromPixel 方法将像素坐标转换为数据坐标
1733 1716 const pointInPixel = [clickX, clickY]
1734 1717 const pointInGrid = chart.convertFromPixel('grid', pointInPixel)
1735   -
  1718 +
1736 1719 if (pointInGrid && pointInGrid.length >= 1) {
1737 1720 const categoryIndex = pointInGrid[0]
1738   -
  1721 +
1739 1722 // 判断点击是否在图表数据区域内
1740 1723 // categoryIndex 对应 x 轴的数据索引(可能是小数)
1741 1724 if (categoryIndex !== null && categoryIndex !== undefined && !isNaN(categoryIndex)) {
1742 1725 // 四舍五入到最近的整数索引
1743 1726 const dataIndex = Math.round(categoryIndex)
1744   -
  1727 +
1745 1728 if (dataIndex >= 0 && dataIndex < chartData.length) {
1746 1729 const clickedData = chartData[dataIndex]
1747 1730 const visitCount = clickedData ? (clickedData.VisitCount || 0) : 0
1748   -
  1731 +
1749 1732 if (visitCount > 0) {
1750 1733 event.stopPropagation() // 阻止事件冒泡
1751 1734 self.$nextTick(() => {
... ... @@ -1761,28 +1744,28 @@ export default {
1761 1744 console.debug('Convert pixel failed:', e)
1762 1745 }
1763 1746 }
1764   -
  1747 +
1765 1748 // 移除之前的事件监听
1766 1749 if (this._visitChartContainerClickHandler) {
1767 1750 dom.removeEventListener('click', this._visitChartContainerClickHandler)
1768 1751 }
1769   -
  1752 +
1770 1753 // 绑定容器点击事件(扩大点击区域,包括小柱子和 x 轴标签区域)
1771 1754 dom.addEventListener('click', handleContainerClick)
1772 1755 this._visitChartContainerClickHandler = handleContainerClick
1773   -
  1756 +
1774 1757 // 同时保留 ECharts 原生的点击事件作为备选(用于点击柱子本身)
1775 1758 chart.off('click')
1776 1759 chart.on('click', (params) => {
1777 1760 // 检查是否是柱状图点击,或者点击了坐标轴标签区域
1778   - if ((params.componentType === 'series' && params.seriesType === 'bar') ||
1779   - (params.componentType === 'xAxis' && params.dataIndex !== undefined)) {
  1761 + if ((params.componentType === 'series' && params.seriesType === 'bar') ||
  1762 + (params.componentType === 'xAxis' && params.dataIndex !== undefined)) {
1780 1763 const dataIndex = params.dataIndex
1781   -
  1764 +
1782 1765 if (dataIndex !== undefined && dataIndex !== null && dataIndex >= 0 && dataIndex < chartData.length) {
1783 1766 const clickedData = chartData[dataIndex]
1784 1767 const visitCount = clickedData ? (clickedData.VisitCount || 0) : 0
1785   -
  1768 +
1786 1769 if (visitCount > 0) {
1787 1770 self.$nextTick(() => {
1788 1771 self.openVisitFrequencyMemberDialog(visitCount)
... ... @@ -1791,7 +1774,7 @@ export default {
1791 1774 }
1792 1775 }
1793 1776 })
1794   -
  1777 +
1795 1778 // 确保图表可以响应点击
1796 1779 this.$nextTick(() => {
1797 1780 chart.resize()
... ... @@ -1803,18 +1786,18 @@ export default {
1803 1786 console.log('visitCount:', visitCount)
1804 1787 console.log('Current dialog visible:', this.visitFrequencyMemberDialogVisible)
1805 1788 console.log('Current visit count:', this.visitFrequencyMemberVisitCount)
1806   -
  1789 +
1807 1790 if (!visitCount || visitCount <= 0) {
1808 1791 console.error('Invalid visitCount:', visitCount)
1809 1792 this.$message.warning('到店次数无效')
1810 1793 return
1811 1794 }
1812   -
  1795 +
1813 1796 // 使用 $nextTick 确保状态更新在下一个事件循环
1814 1797 this.$nextTick(() => {
1815 1798 this.visitFrequencyMemberVisitCount = visitCount
1816 1799 this.visitFrequencyMemberDialogVisible = true
1817   -
  1800 +
1818 1801 console.log('Dialog visible set to:', this.visitFrequencyMemberDialogVisible)
1819 1802 console.log('Visit count set to:', this.visitFrequencyMemberVisitCount)
1820 1803 })
... ... @@ -1860,7 +1843,7 @@ export default {
1860 1843 this.departmentOptions = []
1861 1844 return
1862 1845 }
1863   -
  1846 +
1864 1847 try {
1865 1848 const res = await request({
1866 1849 url: '/api/Extend/Organize/GetByName',
... ...
docs/科技部驾驶舱接口测试报告.md 0 → 100644
  1 +# 科技部驾驶舱接口测试报告
  2 +
  3 +**测试时间**:2026-01-05 08:19:41
  4 +**测试月份**:202512
  5 +
  6 +---
  7 +
  8 +## 接口测试结果
  9 +
  10 +### GetStatistics
  11 +
  12 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetStatistics`
  13 +
  14 +**接口说明**:GetStatistics
  15 +
  16 +**接口请求参数**:
  17 +```json
  18 +{
  19 + "techDepartmentId": "734725579919590661",
  20 + "statisticsMonth": "202512"
  21 +}
  22 +```
  23 +
  24 +**接口返回结果**:一致
  25 +
  26 +**接口是否报错**:否
  27 +
  28 +
  29 +### GetShareStatistics
  30 +
  31 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetShareStatistics`
  32 +
  33 +**接口说明**:GetShareStatistics
  34 +
  35 +**接口请求参数**:
  36 +```json
  37 +{
  38 + "techDepartmentId": "734725579919590661",
  39 + "statisticsMonth": "202512"
  40 +}
  41 +```
  42 +
  43 +**接口返回结果**:一致
  44 +
  45 +**接口是否报错**:否
  46 +
  47 +
  48 +### GetPerformanceTrend
  49 +
  50 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetPerformanceTrend`
  51 +
  52 +**接口说明**:GetPerformanceTrend
  53 +
  54 +**接口请求参数**:
  55 +```json
  56 +{
  57 + "techDepartmentId": "734725579919590661",
  58 + "statisticsMonth": "202512",
  59 + "monthCount": 12
  60 +}
  61 +```
  62 +
  63 +**接口返回结果**:一致
  64 +
  65 +**接口是否报错**:否
  66 +
  67 +
  68 +### GetShareTrend
  69 +
  70 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetShareTrend`
  71 +
  72 +**接口说明**:GetShareTrend
  73 +
  74 +**接口请求参数**:
  75 +```json
  76 +{
  77 + "techDepartmentId": "734725579919590661",
  78 + "statisticsMonth": "202512",
  79 + "monthCount": 12
  80 +}
  81 +```
  82 +
  83 +**接口返回结果**:一致
  84 +
  85 +**接口是否报错**:否
  86 +
  87 +
  88 +### GetStoreRanking
  89 +
  90 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetStoreRanking`
  91 +
  92 +**接口说明**:GetStoreRanking
  93 +
  94 +**接口请求参数**:
  95 +```json
  96 +{
  97 + "techDepartmentId": "734725579919590661",
  98 + "statisticsMonth": "202512"
  99 +}
  100 +```
  101 +
  102 +**接口返回结果**:失败
  103 +
  104 +**接口是否报错**:是
  105 +
  106 +
  107 +### GetStoreDistribution
  108 +
  109 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetStoreDistribution`
  110 +
  111 +**接口说明**:GetStoreDistribution
  112 +
  113 +**接口请求参数**:
  114 +```json
  115 +{
  116 + "techDepartmentId": "734725579919590661",
  117 + "statisticsMonth": "202512"
  118 +}
  119 +```
  120 +
  121 +**接口返回结果**:失败
  122 +
  123 +**接口是否报错**:是
  124 +
  125 +
  126 +### GetTeacherRanking
  127 +
  128 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetTeacherRanking`
  129 +
  130 +**接口说明**:GetTeacherRanking
  131 +
  132 +**接口请求参数**:
  133 +```json
  134 +{
  135 + "techDepartmentId": "734725579919590661",
  136 + "statisticsMonth": "202512"
  137 +}
  138 +```
  139 +
  140 +**接口返回结果**:一致
  141 +
  142 +**接口是否报错**:否
  143 +
  144 +
  145 +### GetOperationStatistics
  146 +
  147 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetOperationStatistics`
  148 +
  149 +**接口说明**:GetOperationStatistics
  150 +
  151 +**接口请求参数**:
  152 +```json
  153 +{
  154 + "techDepartmentId": "734725579919590661",
  155 + "statisticsMonth": "202512"
  156 +}
  157 +```
  158 +
  159 +**接口返回结果**:失败
  160 +
  161 +**接口是否报错**:是
  162 +
  163 +
  164 +### GetComparisonAnalysis
  165 +
  166 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetComparisonAnalysis`
  167 +
  168 +**接口说明**:GetComparisonAnalysis
  169 +
  170 +**接口请求参数**:
  171 +```json
  172 +{
  173 + "techDepartmentId": "734725579919590661",
  174 + "statisticsMonth": "202512"
  175 +}
  176 +```
  177 +
  178 +**接口返回结果**:一致
  179 +
  180 +**接口是否报错**:否
  181 +
  182 +
  183 +### GetStoreDetailList
  184 +
  185 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetStoreDetailList`
  186 +
  187 +**接口说明**:GetStoreDetailList
  188 +
  189 +**接口请求参数**:
  190 +```json
  191 +{
  192 + "techDepartmentId": "734725579919590661",
  193 + "statisticsMonth": "202512",
  194 + "currentPage": 1,
  195 + "pageSize": 10
  196 +}
  197 +```
  198 +
  199 +**接口返回结果**:失败
  200 +
  201 +**接口是否报错**:是
  202 +
  203 +
  204 +### GetTeacherDetailList
  205 +
  206 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetTeacherDetailList`
  207 +
  208 +**接口说明**:GetTeacherDetailList
  209 +
  210 +**接口请求参数**:
  211 +```json
  212 +{
  213 + "techDepartmentId": "734725579919590661",
  214 + "statisticsMonth": "202512",
  215 + "currentPage": 1,
  216 + "pageSize": 10
  217 +}
  218 +```
  219 +
  220 +**接口返回结果**:一致
  221 +
  222 +**接口是否报错**:否
  223 +
  224 +
  225 +### GetBillingDetailList
  226 +
  227 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetBillingDetailList`
  228 +
  229 +**接口说明**:GetBillingDetailList
  230 +
  231 +**接口请求参数**:
  232 +```json
  233 +{
  234 + "techDepartmentId": "734725579919590661",
  235 + "statisticsMonth": "202512",
  236 + "currentPage": 1,
  237 + "pageSize": 10
  238 +}
  239 +```
  240 +
  241 +**接口返回结果**:一致
  242 +
  243 +**接口是否报错**:否
  244 +
  245 +
  246 +### GetConsumeDetailList
  247 +
  248 +**接口**:`POST /api/Extend/LqTechDepartmentDashboard/GetConsumeDetailList`
  249 +
  250 +**接口说明**:GetConsumeDetailList
  251 +
  252 +**接口请求参数**:
  253 +```json
  254 +{
  255 + "techDepartmentId": "734725579919590661",
  256 + "statisticsMonth": "202512",
  257 + "currentPage": 1,
  258 + "pageSize": 10
  259 +}
  260 +```
  261 +
  262 +**接口返回结果**:一致
  263 +
  264 +**接口是否报错**:否
  265 +
... ...
docs/科技部驾驶舱接口清单.md 0 → 100644
  1 +# 科技部驾驶舱接口清单
  2 +
  3 +根据 `科技部驾驶舱数据分析梳理.md` 文档,需要实现的接口清单:
  4 +
  5 +## 一、核心业务指标接口
  6 +
  7 +### ✅ 1. GetStatistics(已完成)
  8 +- 整体业绩指标:溯源金额、Cell金额、科美总收入、管理的门店数、活跃门店数
  9 +
  10 +### ⏳ 2. GetShareStatistics(待实现)
  11 +- 股份相关指标:收入、成本-报销、成本-人工(各项明细)、利润
  12 +
  13 +## 二、趋势分析接口
  14 +
  15 +### ⏳ 3. GetPerformanceTrend(待实现)
  16 +- 业绩趋势:溯源金额趋势、Cell金额趋势、科美总收入趋势、溯源与Cell对比趋势
  17 +- 时间维度:近12个月、近6个月、近3个月、当月
  18 +
  19 +### ⏳ 4. GetShareTrend(待实现)
  20 +- 股份趋势:收入趋势、成本趋势、利润趋势
  21 +- 时间维度:近12个月、近6个月、近3个月、当月
  22 +
  23 +## 三、门店分析接口
  24 +
  25 +### ⏳ 5. GetStoreRanking(待实现)
  26 +- 门店业绩排行:门店溯源金额排行、门店Cell金额排行、门店科美总收入排行
  27 +
  28 +### ⏳ 6. GetStoreDistribution(待实现)
  29 +- 门店业绩分布:门店业绩分布、门店业绩对比
  30 +
  31 +## 四、人员分析接口
  32 +
  33 +### ⏳ 7. GetTeacherRanking(待实现)
  34 +- 老师业绩排行:科技部老师业绩排行
  35 +
  36 +### ⏳ 8. GetTeacherDistribution(待实现)
  37 +- 老师业绩分布
  38 +
  39 +### ⏳ 9. GetTeacherTrend(待实现)
  40 +- 老师业绩趋势:指定老师的近12个月业绩趋势
  41 +
  42 +## 五、运营分析接口
  43 +
  44 +### ⏳ 10. GetOperationStatistics(待实现)
  45 +- 开单分析:开单次数、平均开单金额、开单门店分布
  46 +- 消耗分析:消耗次数、消耗金额、消耗率
  47 +- 退卡分析:退卡次数、退卡金额、退卡率
  48 +
  49 +## 六、对比分析接口
  50 +
  51 +### ⏳ 11. GetComparisonAnalysis(待实现)
  52 +- 时间对比:环比对比、同比对比
  53 +- 部门对比:科技一部 vs 科技二部
  54 +- 门店类型对比:按门店类型分组统计
  55 +
  56 +## 七、明细数据列表接口
  57 +
  58 +### ⏳ 12. GetStoreDetailList(待实现)
  59 +- 管理的门店列表(支持分页、排序、筛选)
  60 +
  61 +### ⏳ 13. GetTeacherDetailList(待实现)
  62 +- 科技部老师列表(支持分页、排序、筛选)
  63 +
  64 +### ⏳ 14. GetBillingDetailList(待实现)
  65 +- 科美开单明细列表(支持分页、排序、筛选)
  66 +
  67 +### ⏳ 15. GetConsumeDetailList(待实现)
  68 +- 科美消耗明细列表(支持分页、排序、筛选)
  69 +
  70 +---
  71 +
  72 +## 接口实现优先级
  73 +
  74 +**第一批(核心接口)**:
  75 +1. ✅ GetStatistics(已完成)
  76 +2. ⏳ GetShareStatistics(股份指标)
  77 +3. ⏳ GetPerformanceTrend(业绩趋势)
  78 +4. ⏳ GetStoreRanking(门店排行)
  79 +
  80 +**第二批(分析接口)**:
  81 +5. ⏳ GetOperationStatistics(运营分析)
  82 +6. ⏳ GetTeacherRanking(老师排行)
  83 +7. ⏳ GetComparisonAnalysis(对比分析)
  84 +
  85 +**第三批(明细接口)**:
  86 +8. ⏳ GetStoreDetailList(门店明细)
  87 +9. ⏳ GetTeacherDetailList(老师明细)
  88 +10. ⏳ GetBillingDetailList(开单明细)
  89 +11. ⏳ GetConsumeDetailList(消耗明细)
  90 +
  91 +---
  92 +
  93 +## 接口参数规范
  94 +
  95 +所有接口都使用 `TechDepartmentDashboardStatisticsInput` 作为基础输入参数:
  96 +- `techDepartmentId`(可选):科技部ID(BASE_ORGANIZE表的组织ID)
  97 +- `storeIds`(可选):门店ID列表
  98 +- `statisticsMonth`(必填):统计月份(YYYYMM格式)
  99 +
  100 +**两者必填其一**:techDepartmentId 或 storeIds
  101 +
... ...
docs/科技部驾驶舱数据分析梳理.md 0 → 100644
  1 +# 科技部驾驶舱数据分析梳理
  2 +
  3 +## 📋 概述
  4 +
  5 +本文档梳理科技部驾驶舱可以统计分析的数据维度。科技部分为**科技一部**和**科技二部**,主要关注科美项目(溯源和Cell)的业绩数据。
  6 +
  7 +**重要说明**:这是**科技部维度**的驾驶舱,数据统计按照科技部(一部/二部)进行,不涉及总经理维度。
  8 +
  9 +### ⚠️ 重要说明:月份维度
  10 +
  11 +**所有统计数据都必须按月份统计,且不同月份科技部管理的门店可能不一致。**
  12 +
  13 +1. **月份是核心维度**:所有指标、排行、趋势、对比等数据都必须按月份统计,不能跨月汇总(除非明确说明是累计数据)
  14 +2. **门店归属按月变化**:门店的科技部归属关系存储在 `lq_md_target` 表中,通过 `F_TechDepartment` 字段(BASE_ORGANIZE表的组织ID)和 `F_Month` 字段(YYYYMM格式)区分不同月份
  15 +3. **数据筛选规则**:
  16 + - 查询指定月份的统计数据时,必须先从 `lq_md_target` 表获取该月份、该科技部归属的门店列表(`F_TechDepartment = @科技部ID`(BASE_ORGANIZE表的组织ID),`F_Month = @统计月份`)
  17 + - 然后使用该门店列表筛选业绩数据,确保只统计该月份归属该科技部的门店
  18 + - 业绩数据的时间过滤使用业绩时间字段(`yjsj`、`hksj`、`tksj`)按月份过滤
  19 +4. **趋势分析**:虽然趋势图展示多个月份,但每个月份的数据都是独立计算的,使用该月份的门店归属关系
  20 +
  21 +---
  22 +
  23 +## 🎯 一、核心业务指标(关键指标卡片)
  24 +
  25 +### 1.1 整体业绩指标
  26 +
  27 +#### 1.1.1 溯源金额
  28 +- **说明**:管理的所有门店中,品项的 `F_BeautyType` 为 "溯源系统" 或 "溯源" 的健康师业绩总和
  29 +- **计算方式**:开单溯源金额 - 退卡溯源金额
  30 +- **数据来源**:
  31 + - 开单:`lq_kd_jksyj` 表(`F_BeautyType` = '溯源系统' 或 '溯源')
  32 + - 退卡:`lq_hytk_jksyj` 表(`F_BeautyType` = '溯源系统' 或 '溯源')
  33 +- **时间维度**:**必须按月份统计**(YYYYMM格式)
  34 +- **门店筛选**:使用 `lq_md_target` 表获取指定月份(`F_Month`)、指定科技部(`F_TechDepartment`)归属的门店列表
  35 +- **时间过滤**:使用业绩时间字段(`yjsj`、`tksj`)按月份过滤
  36 +- **对比维度**:环比(与上月对比)、同比(与去年同月对比)
  37 +
  38 +#### 1.1.2 Cell金额
  39 +- **说明**:管理的所有门店中,品项的 `F_BeautyType` 为 "cell" 或 "Cell" 的健康师业绩总和
  40 +- **计算方式**:开单Cell金额 - 退卡Cell金额
  41 +- **数据来源**:
  42 + - 开单:`lq_kd_jksyj` 表(`F_BeautyType` = 'cell' 或 'Cell')
  43 + - 退卡:`lq_hytk_jksyj` 表(`F_BeautyType` = 'cell' 或 'Cell')
  44 +- **时间维度**:**必须按月份统计**(YYYYMM格式)
  45 +- **门店筛选**:使用 `lq_md_target` 表获取指定月份(`F_Month`)、指定科技部(`F_TechDepartment`)归属的门店列表
  46 +- **时间过滤**:使用业绩时间字段(`yjsj`、`tksj`)按月份过滤
  47 +- **对比维度**:环比(与上月对比)、同比(与去年同月对比)
  48 +
  49 +#### 1.1.3 科美总收入(溯源 + Cell)
  50 +- **说明**:管理的所有门店的科美项目总收入
  51 +- **计算方式**:溯源金额 + Cell金额
  52 +- **用途**:用于股份统计中的收入计算(收入的30%)
  53 +
  54 +#### 1.1.4 管理的门店数
  55 +- **说明**:指定月份归属该科技部的门店总数
  56 +- **数据来源**:`lq_md_target` 表
  57 +- **计算方式**:
  58 + ```sql
  59 + SELECT COUNT(DISTINCT F_StoreId)
  60 + FROM lq_md_target
  61 + WHERE F_TechDepartment = @科技部ID -- BASE_ORGANIZE表的组织ID(F_Id)
  62 + AND F_Month = @统计月份
  63 + ```
  64 +- **重要说明**:**必须按月份统计**,不同月份管理的门店数量可能不同
  65 +
  66 +#### 1.1.5 活跃门店数
  67 +- **说明**:指定月份归属该科技部的门店中,有科美开单或消耗的门店数量
  68 +- **计算方式**:
  69 + 1. 先从 `lq_md_target` 表获取指定月份、指定科技部归属的门店列表
  70 + 2. 统计这些门店中,在指定月份有科美开单或消耗的门店数量(去重)
  71 +- **时间维度**:**必须按月份统计**
  72 +
  73 +---
  74 +
  75 +### 1.2 股份相关指标(基于股份统计表)
  76 +
  77 +#### 1.2.1 收入
  78 +- **说明**:管理的门店科美开单的30%(需减去退款)
  79 +- **计算公式**:(科美开单金额 - 科美退卡金额) × 30%
  80 +- **数据来源**:
  81 + - 开单:`lq_kd_pxmx` 表(`F_BeautyType` = 科美)关联 `lq_kd_kdjlb`
  82 + - 退卡:`lq_hytk_jksyj` 或 `lq_hytk_hytk` 表
  83 +- **时间维度**:**必须按月份统计**
  84 +- **门店筛选**:使用 `lq_md_target` 表获取指定月份、指定科技部归属的门店列表
  85 +
  86 +#### 1.2.2 成本-报销
  87 +- **说明**:报销费用里面的"科技部报销"
  88 +- **数据来源**:`lq_reimbursement_application`、`lq_reimbursement_category` 表
  89 +- **筛选条件**:
  90 + - 一级分类为"科技部报销"
  91 + - 根据申请门店的归属区分一部/二部
  92 + - **必须按月份统计**,根据报销申请时间或审批时间按月份过滤
  93 +
  94 +#### 1.2.3 成本-人工
  95 +- **科技部老师底薪**:`lq_tech_teacher_salary_statistics` 表的 `F_ActualBaseSalary`(**按 `F_StatisticsMonth` 字段过滤**)
  96 +- **科技部老师手工费**:`lq_xh_kjbsyj` 表的 `F_LaborCost`(`F_BeautyType` = 科美,**按消耗时间 `hksj` 按月份过滤**)
  97 +- **科技部老师开单提成**:`lq_tech_teacher_salary_statistics` 表的开单提成字段(**按 `F_StatisticsMonth` 字段过滤**)
  98 +- **科技部老师消耗提成**:`lq_tech_teacher_salary_statistics` 表的消耗提成字段(**按 `F_StatisticsMonth` 字段过滤**)
  99 +- **科技部总经理底薪**:`lq_tech_general_manager_salary_statistics` 表的 `F_BaseSalary`(固定4000元,**按 `F_StatisticsMonth` 字段过滤**,需要汇总该科技部所有总经理的底薪)
  100 +- **科技部总经理提成**:`lq_tech_general_manager_salary_statistics` 表的提成字段(溯源提成 + Cell提成,**按 `F_StatisticsMonth` 字段过滤**,需要汇总该科技部所有总经理的提成)
  101 +- **重要说明**:
  102 + - 所有人工成本数据都**必须按月份统计**,使用工资统计表的 `F_StatisticsMonth` 字段或消耗表的消耗时间字段进行过滤
  103 + - 总经理相关的成本需要汇总该科技部所有总经理的数据(可通过岗位字段 `F_GW` 关联 `BASE_USER` 表识别科技部总经理)
  104 +
  105 +#### 1.2.4 利润
  106 +- **计算公式**:利润 = 收入 - 成本报销 - 成本人工(所有人工成本项)
  107 +- **数据来源**:`lq_share_statistics_tech_dept` 表
  108 +
  109 +---
  110 +
  111 +## 📊 二、趋势分析数据
  112 +
  113 +### 2.1 业绩趋势
  114 +
  115 +#### 2.1.1 溯源金额趋势
  116 +- **时间维度**:近12个月、近6个月、近3个月、当月
  117 +- **图表类型**:折线图
  118 +- **指标**:月度溯源金额、累计溯源金额
  119 +- **对比**:支持环比、同比对比
  120 +
  121 +#### 2.1.2 Cell金额趋势
  122 +- **时间维度**:近12个月、近6个月、近3个月、当月
  123 +- **图表类型**:折线图
  124 +- **指标**:月度Cell金额、累计Cell金额
  125 +- **对比**:支持环比、同比对比
  126 +
  127 +#### 2.1.3 科美总收入趋势
  128 +- **时间维度**:近12个月、近6个月、近3个月、当月
  129 +- **图表类型**:折线图
  130 +- **指标**:月度总收入、累计总收入
  131 +
  132 +#### 2.1.4 溯源与Cell对比趋势
  133 +- **图表类型**:双折线图
  134 +- **指标**:溯源金额 vs Cell金额
  135 +- **用途**:分析两种类型的业绩占比变化
  136 +
  137 +### 2.2 股份趋势
  138 +
  139 +#### 2.2.1 收入趋势
  140 +- **时间维度**:近12个月、近6个月、近3个月、当月
  141 +- **图表类型**:折线图
  142 +- **指标**:月度收入、累计收入
  143 +
  144 +#### 2.2.2 成本趋势
  145 +- **时间维度**:近12个月、近6个月、近3个月、当月
  146 +- **图表类型**:堆叠柱状图
  147 +- **指标**:
  148 + - 成本-报销
  149 + - 成本-人工-老师底薪
  150 + - 成本-人工-老师手工费
  151 + - 成本-人工-老师开单提成
  152 + - 成本-人工-老师消耗提成
  153 + - 成本-人工-总经理底薪
  154 + - 成本-人工-总经理提成
  155 +
  156 +#### 2.2.3 利润趋势
  157 +- **时间维度**:近12个月、近6个月、近3个月、当月
  158 +- **图表类型**:折线图或面积图
  159 +- **指标**:月度利润、累计利润、利润率
  160 +
  161 +---
  162 +
  163 +## 🏪 三、门店分析数据
  164 +
  165 +### 3.1 门店业绩排行
  166 +
  167 +#### 3.1.1 门店溯源金额排行
  168 +- **排序方式**:按溯源金额降序
  169 +- **展示字段**:门店名称、溯源金额、占比、排名
  170 +- **图表类型**:条形图、表格
  171 +- **筛选条件**:支持按月份筛选
  172 +
  173 +#### 3.1.2 门店Cell金额排行
  174 +- **排序方式**:按Cell金额降序
  175 +- **展示字段**:门店名称、Cell金额、占比、排名
  176 +- **图表类型**:条形图、表格
  177 +- **筛选条件**:支持按月份筛选
  178 +
  179 +#### 3.1.3 门店科美总收入排行
  180 +- **排序方式**:按科美总收入降序
  181 +- **展示字段**:门店名称、科美总收入、占比、排名
  182 +- **图表类型**:条形图、表格
  183 +- **筛选条件**:支持按月份筛选
  184 +
  185 +### 3.2 门店业绩明细
  186 +
  187 +#### 3.2.1 门店业绩分布
  188 +- **图表类型**:饼图或环形图
  189 +- **展示内容**:各门店的溯源金额、Cell金额占比
  190 +- **用途**:了解门店业绩贡献度分布
  191 +
  192 +#### 3.2.2 门店业绩对比
  193 +- **图表类型**:柱状图或折线图
  194 +- **展示内容**:多个门店的溯源金额、Cell金额对比
  195 +- **支持功能**:多门店选择对比
  196 +
  197 +---
  198 +
  199 +## 👥 四、人员分析数据
  200 +
  201 +**说明**:科技部驾驶舱是科技部维度,不涉及总经理维度的统计。人员分析主要关注科技部老师的业绩情况。总经理相关的数据只在成本统计中作为人工成本的一部分进行汇总。
  202 +
  203 +**注意**:虽然科技部有总经理,但驾驶舱数据统计是按科技部维度,不按总经理维度。总经理的成本数据会汇总到人工成本中,但不单独展示总经理业绩。
  204 +
  205 +### 4.1 科技部老师业绩
  206 +
  207 +#### 4.1.1 老师业绩排行
  208 +- **排序方式**:按总业绩或消耗业绩降序
  209 +- **展示字段**:
  210 + - 老师姓名、所属门店
  211 + - 开单业绩、消耗业绩、退卡业绩
  212 + - 总业绩、项目数
  213 + - 底薪、业绩提成、消耗提成
  214 + - 应发工资
  215 +- **数据来源**:`lq_tech_teacher_salary_statistics` 表
  216 +- **筛选条件**:支持按月份、门店筛选
  217 +
  218 +#### 4.1.2 老师业绩分布
  219 +- **图表类型**:饼图或环形图
  220 +- **展示内容**:各老师的业绩占比
  221 +- **用途**:了解老师业绩贡献度分布
  222 +
  223 +#### 4.1.3 老师业绩趋势
  224 +- **图表类型**:折线图
  225 +- **展示内容**:指定老师的近12个月业绩趋势
  226 +- **支持功能**:多老师选择对比
  227 +
  228 +---
  229 +
  230 +## 📈 五、运营分析数据
  231 +
  232 +### 5.1 开单分析
  233 +
  234 +#### 5.1.1 开单次数
  235 +- **说明**:管理的门店科美项目开单总次数
  236 +- **数据来源**:`lq_kd_kdjlb` 表关联 `lq_kd_pxmx` 表(`F_BeautyType` = 科美)
  237 +- **时间维度**:按月统计
  238 +- **对比维度**:环比、同比
  239 +
  240 +#### 5.1.2 平均开单金额
  241 +- **计算公式**:科美总收入 / 开单次数
  242 +- **时间维度**:按月统计
  243 +
  244 +#### 5.1.3 开单门店分布
  245 +- **图表类型**:饼图
  246 +- **展示内容**:各门店的开单次数占比
  247 +
  248 +### 5.2 消耗分析
  249 +
  250 +#### 5.2.1 消耗次数
  251 +- **说明**:管理的门店科美项目消耗总次数
  252 +- **数据来源**:`lq_xh_hyhk` 表关联 `lq_xh_pxmx` 表(`F_BeautyType` = 科美)
  253 +- **时间维度**:按月统计
  254 +
  255 +#### 5.2.2 消耗金额
  256 +- **说明**:管理的门店科美项目消耗总金额
  257 +- **数据来源**:`lq_xh_hyhk` 表关联 `lq_xh_pxmx` 表
  258 +- **时间维度**:按月统计
  259 +
  260 +#### 5.2.3 消耗率
  261 +- **计算公式**:消耗金额 / 开单金额 × 100%
  262 +- **用途**:分析业绩转化情况
  263 +
  264 +### 5.3 退卡分析
  265 +
  266 +#### 5.3.1 退卡次数
  267 +- **说明**:管理的门店科美项目退卡总次数
  268 +- **数据来源**:`lq_hytk_hytk` 表关联退卡明细(科美项目)
  269 +- **时间维度**:按月统计
  270 +
  271 +#### 5.3.2 退卡金额
  272 +- **说明**:管理的门店科美项目退卡总金额
  273 +- **数据来源**:`lq_hytk_hytk` 表关联退卡明细(科美项目)
  274 +- **时间维度**:按月统计
  275 +
  276 +#### 5.3.3 退卡率
  277 +- **计算公式**:退卡金额 / 开单金额 × 100%
  278 +- **用途**:分析退卡情况,评估风险
  279 +
  280 +---
  281 +
  282 +## 🔍 六、对比分析数据
  283 +
  284 +### 6.1 时间对比
  285 +
  286 +#### 6.1.1 环比对比
  287 +- **对比指标**:溯源金额、Cell金额、科美总收入、收入、成本、利润
  288 +- **计算方式**:(当月 - 上月) / 上月 × 100%
  289 +- **展示方式**:数值 + 百分比 + 箭头(上升/下降)
  290 +
  291 +#### 6.1.2 同比对比
  292 +- **对比指标**:溯源金额、Cell金额、科美总收入、收入、成本、利润
  293 +- **计算方式**:(当月 - 去年同月) / 去年同月 × 100%
  294 +- **展示方式**:数值 + 百分比 + 箭头(上升/下降)
  295 +
  296 +### 6.2 部门对比
  297 +
  298 +#### 6.2.1 科技一部 vs 科技二部
  299 +- **对比指标**:
  300 + - 溯源金额、Cell金额、科美总收入
  301 + - 管理的门店数、活跃门店数
  302 + - 收入、成本、利润
  303 + - 总经理数量、老师数量
  304 +- **图表类型**:柱状图、折线图
  305 +- **用途**:了解两个部门的业绩对比
  306 +
  307 +### 6.3 门店类型对比
  308 +
  309 +#### 6.3.1 按门店类型分组统计
  310 +- **分组维度**:门店类型(200平/旗舰店)、门店类别(A/B/C类)
  311 +- **统计指标**:溯源金额、Cell金额、科美总收入
  312 +- **图表类型**:柱状图、饼图
  313 +- **用途**:分析不同门店类型的业绩表现
  314 +
  315 +---
  316 +
  317 +## 📋 七、明细数据列表
  318 +
  319 +### 7.1 门店明细列表
  320 +
  321 +#### 7.1.1 管理的门店列表
  322 +- **展示字段**:
  323 + - 门店名称、门店类型、门店类别
  324 + - 归属月份
  325 + - 溯源金额(开单、退卡、净额)
  326 + - Cell金额(开单、退卡、净额)
  327 + - 科美总收入
  328 + - 开单次数、消耗次数、退卡次数
  329 +- **功能**:支持排序、筛选、导出
  330 +
  331 +### 7.2 老师明细列表
  332 +
  333 +#### 7.2.1 科技部老师列表
  334 +- **展示字段**:
  335 + - 老师姓名、所属门店、老师账号
  336 + - 开单业绩、消耗业绩、退卡业绩
  337 + - 总业绩、项目数
  338 + - 底薪、业绩提成、消耗提成、应发工资
  339 +- **功能**:支持排序、筛选、导出
  340 +- **数据来源**:`lq_tech_teacher_salary_statistics` 表
  341 +
  342 +### 7.3 开单明细列表
  343 +
  344 +#### 7.3.1 科美开单明细
  345 +- **展示字段**:
  346 + - 开单日期、门店名称、会员姓名
  347 + - 品项名称、科美类型(溯源/Cell)
  348 + - 开单金额、实付金额
  349 + - 健康师、科技部老师
  350 +- **功能**:支持排序、筛选、导出、分页
  351 +- **数据来源**:`lq_kd_kdjlb` 表关联 `lq_kd_pxmx` 表
  352 +
  353 +### 7.4 消耗明细列表
  354 +
  355 +#### 7.4.1 科美消耗明细
  356 +- **展示字段**:
  357 + - 消耗日期、门店名称、会员姓名
  358 + - 品项名称、科美类型(溯源/Cell)
  359 + - 消耗金额、消耗次数
  360 + - 健康师、科技部老师
  361 +- **功能**:支持排序、筛选、导出、分页
  362 +- **数据来源**:`lq_xh_hyhk` 表关联 `lq_xh_pxmx` 表
  363 +
  364 +---
  365 +
  366 +## 🎨 八、数据可视化建议
  367 +
  368 +### 8.1 核心指标卡片(顶部)
  369 +- 溯源金额(当月、环比、同比)
  370 +- Cell金额(当月、环比、同比)
  371 +- 科美总收入(当月、环比、同比)
  372 +- 管理的门店数
  373 +- 活跃门店数
  374 +- 收入(当月、环比、同比)
  375 +- 成本(当月、环比、同比)
  376 +- 利润(当月、环比、同比、利润率)
  377 +
  378 +### 8.2 趋势图表区域
  379 +- 业绩趋势(溯源、Cell、总收入)- 折线图
  380 +- 股份趋势(收入、成本、利润)- 折线图/堆叠柱状图
  381 +- 溯源与Cell对比趋势 - 双折线图
  382 +
  383 +### 8.3 排行图表区域
  384 +- 门店业绩排行(溯源、Cell、总收入)- 条形图
  385 +- 老师业绩排行 - 条形图或表格
  386 +
  387 +### 8.4 分布图表区域
  388 +- 门店业绩分布 - 饼图/环形图
  389 +- 老师业绩分布 - 饼图/环形图
  390 +- 成本结构分布 - 饼图/堆叠柱状图
  391 +
  392 +### 8.5 对比图表区域
  393 +- 科技一部 vs 科技二部对比 - 柱状图
  394 +- 门店类型对比 - 柱状图
  395 +
  396 +### 8.6 明细列表区域
  397 +- 门店明细列表
  398 +- 老师明细列表
  399 +- 开单明细列表(可选)
  400 +- 消耗明细列表(可选)
  401 +
  402 +---
  403 +
  404 +## 📝 九、数据来源总结
  405 +
  406 +### 9.1 核心数据表
  407 +
  408 +| 数据表 | 用途 | 关键字段 |
  409 +|--------|------|---------|
  410 +| `lq_md_target` | 门店目标表(包含门店归属科技部信息) | F_StoreId, F_Month, F_TechDepartment |
  411 +| `lq_kd_jksyj` | 开单健康师业绩(溯源/Cell) | jksyj, F_BeautyType, F_StoreId, yjsj |
  412 +| `lq_hytk_jksyj` | 退卡健康师业绩(溯源/Cell) | jksyj, F_BeautyType, F_StoreId, tksj |
  413 +| `lq_kd_kdjlb` | 开单记录 | sfyj, kdrq, djmd |
  414 +| `lq_kd_pxmx` | 开单品项明细 | F_ActualPrice, F_BeautyType |
  415 +| `lq_xh_hyhk` | 消耗记录 | xfje, hksj, md |
  416 +| `lq_xh_pxmx` | 消耗品项明细 | F_BeautyType |
  417 +| `lq_hytk_hytk` | 退卡记录 | tkje, tksj, md |
  418 +| `lq_tech_general_manager_salary_statistics` | 科技部总经理工资统计 | F_TraceabilityAmount, F_CellAmount, F_BaseSalary, F_TraceabilityCommissionAmount, F_CellCommissionAmount |
  419 +| `lq_tech_teacher_salary_statistics` | 科技部老师工资统计 | F_OrderAchievement, F_ConsumeAchievement, F_TotalPerformance |
  420 +| `lq_share_statistics_tech_dept` | 科技部股份统计 | F_Income, F_CostReimbursement, F_CostTeacherBase, F_CostTeacherManual, F_CostTeacherBillingComm, F_CostTeacherConsumeComm, F_CostGMBase, F_CostGMComm, F_Profit |
  421 +| `BASE_USER` | 用户信息(科技部总经理、老师) | F_Id, F_REALNAME, F_GW, F_MDID |
  422 +
  423 +### 9.2 数据关联关系
  424 +
  425 +- **科技部识别**:通过 `BASE_ORGANIZE` 表的组织ID(`F_Id`)识别,而不是使用中文名称
  426 +- **管理的门店(按月获取)**:
  427 + ```sql
  428 + SELECT DISTINCT F_StoreId
  429 + FROM lq_md_target
  430 + WHERE F_TechDepartment = @科技部ID -- BASE_ORGANIZE表的组织ID(F_Id)
  431 + AND F_Month = @统计月份 -- ⚠️ 必须按月份匹配,格式:YYYYMM
  432 + ```
  433 +- **业绩统计**:
  434 + - 通过 `F_StoreId` 关联门店(使用上面获取的门店列表)
  435 + - 通过 `F_BeautyType` 区分溯源和Cell
  436 + - **时间过滤**:通过业绩时间字段(`yjsj`、`hksj`、`tksj`)按月份过滤
  437 +- **重要规则**:
  438 + 1. **必须先获取指定月份的门店归属关系**,从 `lq_md_target` 表按 `F_TechDepartment` 和 `F_Month` 获取,再使用该门店列表筛选业绩数据
  439 + 2. **不能跨月汇总**:每个月份的数据必须独立计算,使用该月份的门店归属关系
  440 + 3. **趋势分析**:虽然展示多个月份,但每个月份的数据都是独立计算的
  441 +
  442 +---
  443 +
  444 +## 🔧 十、接口设计说明
  445 +
  446 +### 10.1 接口参数设计
  447 +
  448 +**科技部驾驶舱接口参数设计:兼容两种方式,既可以传入科技部ID(组织ID),也可以传入门店ID列表。**
  449 +
  450 +#### 接口输入参数
  451 +
  452 +```csharp
  453 +public class TechDepartmentDashboardStatisticsInput
  454 +{
  455 + /// <summary>
  456 + /// 科技部ID(可选):BASE_ORGANIZE表的组织ID(F_Id)
  457 + /// 如果传入科技部ID,则从lq_md_target表查询该月份、该科技部归属的门店列表
  458 + /// 如果传入门店ID列表,则直接使用门店ID列表
  459 + /// 两者必填其一
  460 + /// </summary>
  461 + public string TechDepartmentId { get; set; }
  462 +
  463 + /// <summary>
  464 + /// 门店ID列表(可选)
  465 + /// 如果传入科技部ID,则此字段忽略,使用科技部ID查询门店列表
  466 + /// 如果传入门店ID列表,则直接使用此列表
  467 + /// 两者必填其一
  468 + /// </summary>
  469 + public List<string> StoreIds { get; set; }
  470 +
  471 + /// <summary>
  472 + /// 统计月份(必填):YYYYMM格式,如:202501
  473 + /// </summary>
  474 + [Required(ErrorMessage = "统计月份不能为空")]
  475 + [StringLength(6, MinimumLength = 6, ErrorMessage = "统计月份格式必须为YYYYMM")]
  476 + public string StatisticsMonth { get; set; }
  477 +}
  478 +```
  479 +
  480 +#### 设计理由
  481 +
  482 +**兼容两种使用场景:**
  483 +
  484 +1. **科技部维度(推荐使用)**:
  485 + - 传入科技部ID(BASE_ORGANIZE表的组织ID)+ 统计月份
  486 + - 适用于科技部驾驶舱页面,用户选择科技部查看数据
  487 + - 后端根据统计月份从 `lq_md_target` 表查询该科技部归属的门店列表
  488 + - 优势:数据准确性高,门店归属变化时自动适应,使用ID而非名称,避免名称变更影响
  489 +
  490 +2. **门店列表维度(灵活使用)**:
  491 + - 传入门店ID列表 + 统计月份
  492 + - 适用于其他场景,如自定义门店组合、门店对比等
  493 + - 后端直接使用传入的门店ID列表
  494 + - 优势:灵活性高,可以跨科技部组合门店
  495 +
  496 +#### 参数验证逻辑
  497 +
  498 +```csharp
  499 +// 参数验证
  500 +if (string.IsNullOrWhiteSpace(input.TechDepartmentId) &&
  501 + (input.StoreIds == null || !input.StoreIds.Any()))
  502 +{
  503 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  504 +}
  505 +
  506 +if (!string.IsNullOrWhiteSpace(input.TechDepartmentId) &&
  507 + input.StoreIds != null && input.StoreIds.Any())
  508 +{
  509 + // 如果同时传入,优先使用科技部ID,门店ID列表将被忽略
  510 + // 或者抛出异常,要求只能传入一个
  511 + throw NCCException.Oh("科技部ID和门店ID列表不能同时传入,请只传入其中一个");
  512 +}
  513 +```
  514 +
  515 +#### 后端处理流程
  516 +
  517 +**方式1:传入科技部ID**
  518 +1. 接收参数:科技部ID(BASE_ORGANIZE表的组织ID)+ 统计月份
  519 +2. 查询门店列表:从 `lq_md_target` 表查询该月份、该科技部归属的门店ID列表
  520 + ```sql
  521 + SELECT DISTINCT F_StoreId
  522 + FROM lq_md_target
  523 + WHERE F_TechDepartment = @科技部ID
  524 + AND F_Month = @统计月份
  525 + ```
  526 + **说明**:`F_TechDepartment` 字段存储的是 `BASE_ORGANIZE` 表的组织ID(`F_Id`),而不是组织名称
  527 +3. 统计业绩数据:使用查询到的门店ID列表筛选业绩数据
  528 +4. 返回统计结果
  529 +
  530 +**方式2:传入门店ID列表**
  531 +1. 接收参数:门店ID列表 + 统计月份
  532 +2. 直接使用门店ID列表(无需查询门店归属关系)
  533 +3. 统计业绩数据:使用传入的门店ID列表筛选业绩数据
  534 +4. 返回统计结果
  535 +
  536 +#### 示例请求
  537 +
  538 +**示例1:传入科技部ID(推荐)**
  539 +```json
  540 +{
  541 + "techDepartmentId": "1649328471923847169",
  542 + "statisticsMonth": "202501"
  543 +}
  544 +```
  545 +**说明**:`techDepartmentId` 是 `BASE_ORGANIZE` 表中科技一部或科技二部的组织ID(`F_Id`),不是中文名称。使用ID而非名称,避免中文名称变更影响接口调用。
  546 +
  547 +**示例2:传入门店ID列表**
  548 +```json
  549 +{
  550 + "storeIds": ["1649328471923847169", "1649328471923847170", "1649328471923847171"],
  551 + "statisticsMonth": "202501"
  552 +}
  553 +```
  554 +
  555 +#### 使用建议
  556 +
  557 +- **科技部驾驶舱页面**:使用方式1(传入科技部ID),更符合业务逻辑,数据准确性高,使用ID而非名称,避免名称变更影响
  558 +- **其他场景**:使用方式2(传入门店ID列表),灵活性高,可以自定义门店组合
  559 +
  560 +#### 科技部ID获取方式
  561 +
  562 +科技部ID从 `BASE_ORGANIZE` 表获取,通过组织名称查询:
  563 +```sql
  564 +SELECT F_Id, F_FullName
  565 +FROM BASE_ORGANIZE
  566 +WHERE F_FullName LIKE '%科技一部%' OR F_FullName LIKE '%科技二部%'
  567 + AND F_DeleteMark IS NULL
  568 + AND F_EnabledMark = 1
  569 +```
  570 +
  571 +前端可以通过组织选择器或下拉列表获取科技部ID列表,供用户选择。
  572 +
  573 +---
  574 +
  575 +## 🔧 十一、数据查询流程(重要)
  576 +
  577 +### 11.1 标准查询流程
  578 +
  579 +**所有科技部驾驶舱数据查询都必须遵循以下流程:**
  580 +
  581 +#### 步骤1:确定门店列表(两种方式)
  582 +
  583 +**方式1:传入科技部ID**
  584 +- 从接口参数获取科技部ID(BASE_ORGANIZE表的组织ID)和统计月份
  585 +- 从 `lq_md_target` 表查询该月份、该科技部归属的门店列表
  586 + ```sql
  587 + SELECT DISTINCT F_StoreId
  588 + FROM lq_md_target
  589 + WHERE F_TechDepartment = @科技部ID -- BASE_ORGANIZE表的组织ID(F_Id)
  590 + AND F_Month = @统计月份 -- ⚠️ 必须按月份匹配,格式:YYYYMM
  591 + ```
  592 +- **重要说明**:
  593 + - `F_Month` 字段格式为 YYYYMM(如:202501)
  594 + - `F_TechDepartment` 字段存储的是 `BASE_ORGANIZE` 表的组织ID(`F_Id`),而不是组织名称
  595 + - 不同月份,管理的门店列表可能不同
  596 + - 如果该月份没有归属该科技部的门店,返回空列表,所有业绩数据为0
  597 +
  598 +**方式2:传入门店ID列表**
  599 +- 直接使用接口参数中的门店ID列表
  600 +- 无需查询门店归属关系,直接使用传入的门店列表
  601 +
  602 +#### 步骤2:使用门店列表统计业绩数据
  603 +```sql
  604 +-- 示例:统计指定月份的溯源金额
  605 +SELECT COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as TraceabilityAmount
  606 +FROM lq_kd_jksyj
  607 +WHERE F_IsEffective = 1
  608 + AND F_StoreId IN (@门店ID列表) -- ⚠️ 使用步骤1获取或传入的门店列表
  609 + AND (F_BeautyType = '溯源系统' OR F_BeautyType = '溯源')
  610 + AND DATE_FORMAT(yjsj, '%Y%m') = @统计月份 -- ⚠️ 按月份过滤业绩时间
  611 +```
  612 +
  613 +### 11.2 趋势分析查询流程
  614 +
  615 +**趋势分析虽然展示多个月份,但每个月份的数据都是独立计算的:**
  616 +
  617 +```sql
  618 +-- 示例:获取近12个月的溯源金额趋势
  619 +-- 需要循环12个月,每个月都执行以下步骤:
  620 +FOR EACH 月份 IN (近12个月列表) DO
  621 + 1. 获取该月份、该科技部归属的门店列表(步骤2)
  622 + 2. 使用该门店列表统计该月份的溯源金额(步骤3)
  623 + 3. 将结果添加到趋势数据中
  624 +END FOR
  625 +```
  626 +
  627 +**重要规则**:
  628 +- 每个月份使用该月份的门店归属关系
  629 +- 不能跨月汇总,必须按月独立计算
  630 +- 如果某个月份没有管理的门店,该月份的数据为0
  631 +
  632 +### 11.3 数据查询注意事项
  633 +
  634 +1. **月份格式统一**:所有月份参数统一使用 YYYYMM 格式(如:202501)
  635 +2. **门店归属必须按月获取**:不能使用当前月份的门店列表去查询历史月份的数据
  636 +3. **业绩时间过滤**:使用业绩时间字段(`yjsj`、`hksj`、`tksj`)按月份过滤,格式:`DATE_FORMAT(时间字段, '%Y%m') = @统计月份`
  637 +4. **工资统计表**:使用 `F_StatisticsMonth` 字段过滤,格式:`F_StatisticsMonth = @统计月份`
  638 +5. **股份统计表**:使用 `F_StatisticsMonth` 字段过滤,格式:`F_StatisticsMonth = @统计月份`
  639 +
  640 +---
  641 +
  642 +## 🔧 十二、技术实现建议
  643 +
  644 +### 12.1 数据聚合策略
  645 +
  646 +1. **实时查询**:核心指标使用实时查询,确保数据准确性
  647 +2. **缓存优化**:对于历史月份数据,可以考虑缓存优化
  648 +3. **分页查询**:明细列表必须支持分页,避免大数据量查询
  649 +
  650 +### 12.2 性能优化
  651 +
  652 +1. **索引优化**:在关键查询字段上建立索引(`F_StoreId`、`F_BeautyType`、时间字段等)
  653 +2. **SQL优化**:使用聚合查询,避免在应用层进行大量数据计算
  654 +3. **数据预聚合**:可以考虑创建统计视图或物化视图
  655 +
  656 +### 12.3 数据一致性
  657 +
  658 +1. **统一数据源**:业绩数据统一使用健康师业绩表,确保数据一致性
  659 +2. **时间范围**:统一使用业绩时间(`yjsj`、`hksj`、`tksj`)进行时间过滤,**必须按月份过滤**
  660 +3. **归属关系(关键)**:
  661 + - **必须按月获取门店归属**:查询指定月份的统计数据时,必须先从 `lq_md_target` 表获取该月份(`F_Month`)、该科技部(`F_TechDepartment`)归属的门店列表
  662 + - **不能跨月汇总**:每个月份的数据必须独立计算,使用该月份的门店归属关系
  663 + - **趋势分析**:虽然趋势图展示多个月份,但每个月份的数据都是独立计算的,每个月份使用该月份的门店归属关系
  664 +4. **月份匹配规则**:
  665 + - 门店归属:`lq_md_target.F_Month = @统计月份 AND lq_md_target.F_TechDepartment = @科技部ID`(BASE_ORGANIZE表的组织ID)
  666 + - 业绩时间:`DATE_FORMAT(yjsj, '%Y%m') = @统计月份` 或 `DATE_FORMAT(hksj, '%Y%m') = @统计月份` 等
  667 + - 工资统计:`lq_tech_*_salary_statistics.F_StatisticsMonth = @统计月份`
  668 + - 股份统计:`lq_share_statistics_tech_dept.F_StatisticsMonth = @统计月份`
  669 +
  670 +---
  671 +
  672 +## ✅ 总结
  673 +
  674 +科技部驾驶舱主要关注以下核心数据:
  675 +
  676 +1. **业绩指标**:溯源金额、Cell金额、科美总收入
  677 +2. **股份指标**:收入、成本、利润
  678 +3. **门店分析**:管理的门店业绩排行、分布、对比
  679 +4. **人员分析**:科技部老师业绩排行(总经理成本数据汇总在人工成本中)
  680 +5. **趋势分析**:近12个月的业绩趋势、股份趋势
  681 +6. **对比分析**:环比、同比、部门对比、门店类型对比
  682 +7. **明细数据**:门店明细、老师明细、开单明细、消耗明细
  683 +
  684 +### ⚠️ 核心规则
  685 +
  686 +1. **所有数据必须按月份统计**:每个指标、排行、趋势、对比等数据都必须按月份(YYYYMM格式)统计
  687 +2. **门店归属按月变化**:不同月份科技部管理的门店可能不一致,必须从 `lq_md_target` 表按月获取门店归属关系(通过 `F_TechDepartment` 和 `F_Month` 字段)
  688 +3. **数据筛选流程**:
  689 + - 步骤1:从 `lq_md_target` 表获取指定月份(`F_Month`)、指定科技部(`F_TechDepartment`)归属的门店列表
  690 + - 步骤2:使用该门店列表筛选业绩数据
  691 + - 步骤3:使用业绩时间字段(`yjsj`、`hksj`、`tksj`)按月份过滤
  692 +4. **不能跨月汇总**:每个月份的数据必须独立计算,使用该月份的门店归属关系
  693 +5. **趋势分析**:虽然趋势图展示多个月份,但每个月份的数据都是独立计算的
  694 +6. **部门区分**:所有数据都需要按照科技部(一部/二部)进行区分
  695 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardBillingDetailListInput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +using NCC.Common.Filter;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  5 +{
  6 + /// <summary>
  7 + /// 科技部驾驶舱开单明细列表查询输入
  8 + /// </summary>
  9 + public class TechDepartmentDashboardBillingDetailListInput : PageInputBase
  10 + {
  11 + /// <summary>
  12 + /// 科技部ID(可选)
  13 + /// </summary>
  14 + public string TechDepartmentId { get; set; }
  15 +
  16 + /// <summary>
  17 + /// 门店ID列表(可选)
  18 + /// </summary>
  19 + public List<string> StoreIds { get; set; }
  20 +
  21 + /// <summary>
  22 + /// 统计月份(必填):YYYYMM格式,如:202501
  23 + /// </summary>
  24 + [System.ComponentModel.DataAnnotations.Required(ErrorMessage = "统计月份不能为空")]
  25 + [System.ComponentModel.DataAnnotations.StringLength(6, MinimumLength = 6, ErrorMessage = "统计月份格式必须为YYYYMM")]
  26 + public string StatisticsMonth { get; set; }
  27 +
  28 + /// <summary>
  29 + /// 门店ID(可选,进一步筛选)
  30 + /// </summary>
  31 + public string StoreId { get; set; }
  32 +
  33 + /// <summary>
  34 + /// 会员姓名(模糊查询)
  35 + /// </summary>
  36 + public string MemberName { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 科美类型(溯源/Cell,可选)
  40 + /// </summary>
  41 + public string BeautyType { get; set; }
  42 + }
  43 +}
  44 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardBillingDetailListOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  4 +{
  5 + /// <summary>
  6 + /// 科技部驾驶舱开单明细列表项
  7 + /// </summary>
  8 + public class TechDepartmentDashboardBillingDetailListOutput
  9 + {
  10 + /// <summary>
  11 + /// 开单ID
  12 + /// </summary>
  13 + public string BillingId { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 开单日期
  17 + /// </summary>
  18 + public DateTime? BillingDate { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 门店ID
  22 + /// </summary>
  23 + public string StoreId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 门店名称
  27 + /// </summary>
  28 + public string StoreName { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 会员ID
  32 + /// </summary>
  33 + public string MemberId { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 会员姓名
  37 + /// </summary>
  38 + public string MemberName { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 品项ID
  42 + /// </summary>
  43 + public string ItemId { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 品项名称
  47 + /// </summary>
  48 + public string ItemName { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 科美类型(溯源/Cell)
  52 + /// </summary>
  53 + public string BeautyType { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 开单金额
  57 + /// </summary>
  58 + public decimal BillingAmount { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 实付金额
  62 + /// </summary>
  63 + public decimal ActualAmount { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 健康师姓名
  67 + /// </summary>
  68 + public string HealthCoachName { get; set; }
  69 +
  70 + /// <summary>
  71 + /// 科技部老师姓名
  72 + /// </summary>
  73 + public string TechTeacherName { get; set; }
  74 + }
  75 +}
  76 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardComparisonAnalysisOutput.cs 0 → 100644
  1 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  2 +{
  3 + /// <summary>
  4 + /// 科技部驾驶舱对比分析数据输出
  5 + /// </summary>
  6 + public class TechDepartmentDashboardComparisonAnalysisOutput
  7 + {
  8 + /// <summary>
  9 + /// 时间对比(环比、同比)
  10 + /// </summary>
  11 + public TimeComparison TimeComparison { get; set; } = new TimeComparison();
  12 + }
  13 +
  14 + /// <summary>
  15 + /// 时间对比
  16 + /// </summary>
  17 + public class TimeComparison
  18 + {
  19 + /// <summary>
  20 + /// 环比对比(与上月对比)
  21 + /// </summary>
  22 + public ComparisonData MonthOverMonth { get; set; } = new ComparisonData();
  23 +
  24 + /// <summary>
  25 + /// 同比对比(与去年同月对比)
  26 + /// </summary>
  27 + public ComparisonData YearOverYear { get; set; } = new ComparisonData();
  28 + }
  29 +
  30 + /// <summary>
  31 + /// 对比数据
  32 + /// </summary>
  33 + public class ComparisonData
  34 + {
  35 + /// <summary>
  36 + /// 溯源金额变化率(百分比)
  37 + /// </summary>
  38 + public decimal TraceabilityAmountChangeRate { get; set; }
  39 +
  40 + /// <summary>
  41 + /// Cell金额变化率(百分比)
  42 + /// </summary>
  43 + public decimal CellAmountChangeRate { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 科美总收入变化率(百分比)
  47 + /// </summary>
  48 + public decimal TotalKemeiIncomeChangeRate { get; set; }
  49 + }
  50 +}
  51 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardConsumeDetailListInput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +using NCC.Common.Filter;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  5 +{
  6 + /// <summary>
  7 + /// 科技部驾驶舱消耗明细列表查询输入
  8 + /// </summary>
  9 + public class TechDepartmentDashboardConsumeDetailListInput : PageInputBase
  10 + {
  11 + /// <summary>
  12 + /// 科技部ID(可选)
  13 + /// </summary>
  14 + public string TechDepartmentId { get; set; }
  15 +
  16 + /// <summary>
  17 + /// 门店ID列表(可选)
  18 + /// </summary>
  19 + public List<string> StoreIds { get; set; }
  20 +
  21 + /// <summary>
  22 + /// 统计月份(必填):YYYYMM格式,如:202501
  23 + /// </summary>
  24 + [System.ComponentModel.DataAnnotations.Required(ErrorMessage = "统计月份不能为空")]
  25 + [System.ComponentModel.DataAnnotations.StringLength(6, MinimumLength = 6, ErrorMessage = "统计月份格式必须为YYYYMM")]
  26 + public string StatisticsMonth { get; set; }
  27 +
  28 + /// <summary>
  29 + /// 门店ID(可选,进一步筛选)
  30 + /// </summary>
  31 + public string StoreId { get; set; }
  32 +
  33 + /// <summary>
  34 + /// 会员姓名(模糊查询)
  35 + /// </summary>
  36 + public string MemberName { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 科美类型(溯源/Cell,可选)
  40 + /// </summary>
  41 + public string BeautyType { get; set; }
  42 + }
  43 +}
  44 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardConsumeDetailListOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  4 +{
  5 + /// <summary>
  6 + /// 科技部驾驶舱消耗明细列表项
  7 + /// </summary>
  8 + public class TechDepartmentDashboardConsumeDetailListOutput
  9 + {
  10 + /// <summary>
  11 + /// 消耗ID
  12 + /// </summary>
  13 + public string ConsumeId { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 消耗日期
  17 + /// </summary>
  18 + public DateTime? ConsumeDate { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 门店ID
  22 + /// </summary>
  23 + public string StoreId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 门店名称
  27 + /// </summary>
  28 + public string StoreName { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 会员ID
  32 + /// </summary>
  33 + public string MemberId { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 会员姓名
  37 + /// </summary>
  38 + public string MemberName { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 品项ID
  42 + /// </summary>
  43 + public string ItemId { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 品项名称
  47 + /// </summary>
  48 + public string ItemName { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 科美类型(溯源/Cell)
  52 + /// </summary>
  53 + public string BeautyType { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 消耗金额
  57 + /// </summary>
  58 + public decimal ConsumeAmount { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 消耗次数
  62 + /// </summary>
  63 + public decimal ConsumeCount { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 健康师姓名
  67 + /// </summary>
  68 + public string HealthCoachName { get; set; }
  69 +
  70 + /// <summary>
  71 + /// 科技部老师姓名
  72 + /// </summary>
  73 + public string TechTeacherName { get; set; }
  74 + }
  75 +}
  76 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardOperationStatisticsOutput.cs 0 → 100644
  1 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  2 +{
  3 + /// <summary>
  4 + /// 科技部驾驶舱运营统计数据输出
  5 + /// </summary>
  6 + public class TechDepartmentDashboardOperationStatisticsOutput
  7 + {
  8 + /// <summary>
  9 + /// 开单分析
  10 + /// </summary>
  11 + public BillingAnalysis BillingAnalysis { get; set; } = new BillingAnalysis();
  12 +
  13 + /// <summary>
  14 + /// 消耗分析
  15 + /// </summary>
  16 + public ConsumeAnalysis ConsumeAnalysis { get; set; } = new ConsumeAnalysis();
  17 +
  18 + /// <summary>
  19 + /// 退卡分析
  20 + /// </summary>
  21 + public RefundAnalysis RefundAnalysis { get; set; } = new RefundAnalysis();
  22 + }
  23 +
  24 + /// <summary>
  25 + /// 开单分析
  26 + /// </summary>
  27 + public class BillingAnalysis
  28 + {
  29 + /// <summary>
  30 + /// 开单次数
  31 + /// </summary>
  32 + public int BillingCount { get; set; }
  33 +
  34 + /// <summary>
  35 + /// 平均开单金额
  36 + /// </summary>
  37 + public decimal AverageBillingAmount { get; set; }
  38 + }
  39 +
  40 + /// <summary>
  41 + /// 消耗分析
  42 + /// </summary>
  43 + public class ConsumeAnalysis
  44 + {
  45 + /// <summary>
  46 + /// 消耗次数
  47 + /// </summary>
  48 + public int ConsumeCount { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 消耗金额
  52 + /// </summary>
  53 + public decimal ConsumeAmount { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 消耗率(百分比)
  57 + /// </summary>
  58 + public decimal ConsumeRate { get; set; }
  59 + }
  60 +
  61 + /// <summary>
  62 + /// 退卡分析
  63 + /// </summary>
  64 + public class RefundAnalysis
  65 + {
  66 + /// <summary>
  67 + /// 退卡次数
  68 + /// </summary>
  69 + public int RefundCount { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 退卡金额
  73 + /// </summary>
  74 + public decimal RefundAmount { get; set; }
  75 +
  76 + /// <summary>
  77 + /// 退卡率(百分比)
  78 + /// </summary>
  79 + public decimal RefundRate { get; set; }
  80 + }
  81 +}
  82 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardPerformanceTrendInput.cs 0 → 100644
  1 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  2 +{
  3 + /// <summary>
  4 + /// 科技部驾驶舱业绩趋势查询输入
  5 + /// </summary>
  6 + public class TechDepartmentDashboardPerformanceTrendInput : TechDepartmentDashboardStatisticsInput
  7 + {
  8 + /// <summary>
  9 + /// 月份数量(可选,默认12,支持:3、6、12)
  10 + /// </summary>
  11 + public int MonthCount { get; set; } = 12;
  12 + }
  13 +}
  14 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardPerformanceTrendOutput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  4 +{
  5 + /// <summary>
  6 + /// 科技部驾驶舱业绩趋势数据输出
  7 + /// </summary>
  8 + public class TechDepartmentDashboardPerformanceTrendOutput
  9 + {
  10 + /// <summary>
  11 + /// 业绩趋势数据列表
  12 + /// </summary>
  13 + public List<PerformanceTrendPoint> TrendData { get; set; } = new List<PerformanceTrendPoint>();
  14 + }
  15 +
  16 + /// <summary>
  17 + /// 业绩趋势点
  18 + /// </summary>
  19 + public class PerformanceTrendPoint
  20 + {
  21 + /// <summary>
  22 + /// 月份(YYYYMM格式)
  23 + /// </summary>
  24 + public string Month { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 溯源金额
  28 + /// </summary>
  29 + public decimal TraceabilityAmount { get; set; }
  30 +
  31 + /// <summary>
  32 + /// Cell金额
  33 + /// </summary>
  34 + public decimal CellAmount { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 科美总收入
  38 + /// </summary>
  39 + public decimal TotalKemeiIncome { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 累计溯源金额
  43 + /// </summary>
  44 + public decimal CumulativeTraceabilityAmount { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 累计Cell金额
  48 + /// </summary>
  49 + public decimal CumulativeCellAmount { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 累计科美总收入
  53 + /// </summary>
  54 + public decimal CumulativeTotalKemeiIncome { get; set; }
  55 + }
  56 +}
  57 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardShareStatisticsOutput.cs 0 → 100644
  1 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  2 +{
  3 + /// <summary>
  4 + /// 科技部驾驶舱股份统计数据输出
  5 + /// </summary>
  6 + public class TechDepartmentDashboardShareStatisticsOutput
  7 + {
  8 + /// <summary>
  9 + /// 收入(科美开单30%)
  10 + /// </summary>
  11 + public decimal Income { get; set; }
  12 +
  13 + /// <summary>
  14 + /// 成本-报销
  15 + /// </summary>
  16 + public decimal CostReimbursement { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 成本-人工-老师底薪
  20 + /// </summary>
  21 + public decimal CostTeacherBase { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 成本-人工-老师手工费
  25 + /// </summary>
  26 + public decimal CostTeacherManual { get; set; }
  27 +
  28 + /// <summary>
  29 + /// 成本-人工-老师开单提成
  30 + /// </summary>
  31 + public decimal CostTeacherBillingComm { get; set; }
  32 +
  33 + /// <summary>
  34 + /// 成本-人工-老师消耗提成
  35 + /// </summary>
  36 + public decimal CostTeacherConsumeComm { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 成本-人工-总经理底薪
  40 + /// </summary>
  41 + public decimal CostGMBase { get; set; }
  42 +
  43 + /// <summary>
  44 + /// 成本-人工-总经理提成
  45 + /// </summary>
  46 + public decimal CostGMComm { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 利润
  50 + /// </summary>
  51 + public decimal Profit { get; set; }
  52 + }
  53 +}
  54 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardShareTrendInput.cs 0 → 100644
  1 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  2 +{
  3 + /// <summary>
  4 + /// 科技部驾驶舱股份趋势查询输入
  5 + /// </summary>
  6 + public class TechDepartmentDashboardShareTrendInput : TechDepartmentDashboardStatisticsInput
  7 + {
  8 + /// <summary>
  9 + /// 月份数量(可选,默认12,支持:3、6、12)
  10 + /// </summary>
  11 + public int MonthCount { get; set; } = 12;
  12 + }
  13 +}
  14 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardShareTrendOutput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  4 +{
  5 + /// <summary>
  6 + /// 科技部驾驶舱股份趋势数据输出
  7 + /// </summary>
  8 + public class TechDepartmentDashboardShareTrendOutput
  9 + {
  10 + /// <summary>
  11 + /// 股份趋势数据列表
  12 + /// </summary>
  13 + public List<ShareTrendPoint> TrendData { get; set; } = new List<ShareTrendPoint>();
  14 + }
  15 +
  16 + /// <summary>
  17 + /// 股份趋势点
  18 + /// </summary>
  19 + public class ShareTrendPoint
  20 + {
  21 + /// <summary>
  22 + /// 月份(YYYYMM格式)
  23 + /// </summary>
  24 + public string Month { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 收入
  28 + /// </summary>
  29 + public decimal Income { get; set; }
  30 +
  31 + /// <summary>
  32 + /// 成本-报销
  33 + /// </summary>
  34 + public decimal CostReimbursement { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 成本-人工-老师底薪
  38 + /// </summary>
  39 + public decimal CostTeacherBase { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 成本-人工-老师手工费
  43 + /// </summary>
  44 + public decimal CostTeacherManual { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 成本-人工-老师开单提成
  48 + /// </summary>
  49 + public decimal CostTeacherBillingComm { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 成本-人工-老师消耗提成
  53 + /// </summary>
  54 + public decimal CostTeacherConsumeComm { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 成本-人工-总经理底薪
  58 + /// </summary>
  59 + public decimal CostGMBase { get; set; }
  60 +
  61 + /// <summary>
  62 + /// 成本-人工-总经理提成
  63 + /// </summary>
  64 + public decimal CostGMComm { get; set; }
  65 +
  66 + /// <summary>
  67 + /// 利润
  68 + /// </summary>
  69 + public decimal Profit { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 累计收入
  73 + /// </summary>
  74 + public decimal CumulativeIncome { get; set; }
  75 +
  76 + /// <summary>
  77 + /// 累计成本
  78 + /// </summary>
  79 + public decimal CumulativeCost { get; set; }
  80 +
  81 + /// <summary>
  82 + /// 累计利润
  83 + /// </summary>
  84 + public decimal CumulativeProfit { get; set; }
  85 +
  86 + /// <summary>
  87 + /// 利润率(百分比)
  88 + /// </summary>
  89 + public decimal ProfitRate { get; set; }
  90 + }
  91 +}
  92 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardStatisticsInput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  5 +{
  6 + /// <summary>
  7 + /// 科技部驾驶舱统计数据输入
  8 + /// </summary>
  9 + public class TechDepartmentDashboardStatisticsInput
  10 + {
  11 + /// <summary>
  12 + /// 科技部ID(可选):BASE_ORGANIZE表的组织ID(F_Id)
  13 + /// 如果传入科技部ID,则从lq_md_target表查询该月份、该科技部归属的门店列表
  14 + /// 如果传入门店ID列表,则直接使用门店ID列表
  15 + /// 两者必填其一
  16 + /// </summary>
  17 + public string TechDepartmentId { get; set; }
  18 +
  19 + /// <summary>
  20 + /// 门店ID列表(可选)
  21 + /// 如果传入科技部ID,则此字段忽略,使用科技部ID查询门店列表
  22 + /// 如果传入门店ID列表,则直接使用此列表
  23 + /// 两者必填其一
  24 + /// </summary>
  25 + public List<string> StoreIds { get; set; }
  26 +
  27 + /// <summary>
  28 + /// 统计月份(必填):YYYYMM格式,如:202512
  29 + /// </summary>
  30 + [Required(ErrorMessage = "统计月份不能为空")]
  31 + [StringLength(6, MinimumLength = 6, ErrorMessage = "统计月份格式必须为YYYYMM")]
  32 + public string StatisticsMonth { get; set; }
  33 + }
  34 +}
  35 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardStatisticsOutput.cs 0 → 100644
  1 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  2 +{
  3 + /// <summary>
  4 + /// 科技部驾驶舱统计数据输出
  5 + /// </summary>
  6 + public class TechDepartmentDashboardStatisticsOutput
  7 + {
  8 + /// <summary>
  9 + /// 溯源金额(开单溯源金额 - 退卡溯源金额)
  10 + /// </summary>
  11 + public decimal TraceabilityAmount { get; set; }
  12 +
  13 + /// <summary>
  14 + /// Cell金额(开单Cell金额 - 退卡Cell金额)
  15 + /// </summary>
  16 + public decimal CellAmount { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 科美总收入(溯源金额 + Cell金额)
  20 + /// </summary>
  21 + public decimal TotalKemeiIncome { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 管理的门店数
  25 + /// </summary>
  26 + public int ManagedStoreCount { get; set; }
  27 +
  28 + /// <summary>
  29 + /// 活跃门店数(有科美开单或消耗的门店数量)
  30 + /// </summary>
  31 + public int ActiveStoreCount { get; set; }
  32 +
  33 + /// <summary>
  34 + /// 开单溯源金额
  35 + /// </summary>
  36 + public decimal BillingTraceabilityAmount { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 退卡溯源金额
  40 + /// </summary>
  41 + public decimal RefundTraceabilityAmount { get; set; }
  42 +
  43 + /// <summary>
  44 + /// 开单Cell金额
  45 + /// </summary>
  46 + public decimal BillingCellAmount { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 退卡Cell金额
  50 + /// </summary>
  51 + public decimal RefundCellAmount { get; set; }
  52 + }
  53 +}
  54 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardStoreDetailListInput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +using NCC.Common.Filter;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  5 +{
  6 + /// <summary>
  7 + /// 科技部驾驶舱门店明细列表查询输入
  8 + /// </summary>
  9 + public class TechDepartmentDashboardStoreDetailListInput : PageInputBase
  10 + {
  11 + /// <summary>
  12 + /// 科技部ID(可选)
  13 + /// </summary>
  14 + public string TechDepartmentId { get; set; }
  15 +
  16 + /// <summary>
  17 + /// 门店ID列表(可选)
  18 + /// </summary>
  19 + public List<string> StoreIds { get; set; }
  20 +
  21 + /// <summary>
  22 + /// 统计月份(必填):YYYYMM格式,如:202501
  23 + /// </summary>
  24 + [System.ComponentModel.DataAnnotations.Required(ErrorMessage = "统计月份不能为空")]
  25 + [System.ComponentModel.DataAnnotations.StringLength(6, MinimumLength = 6, ErrorMessage = "统计月份格式必须为YYYYMM")]
  26 + public string StatisticsMonth { get; set; }
  27 +
  28 + /// <summary>
  29 + /// 门店名称(模糊查询)
  30 + /// </summary>
  31 + public string StoreName { get; set; }
  32 + }
  33 +}
  34 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardStoreDetailListOutput.cs 0 → 100644
  1 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  2 +{
  3 + /// <summary>
  4 + /// 科技部驾驶舱门店明细列表项
  5 + /// </summary>
  6 + public class TechDepartmentDashboardStoreDetailListOutput
  7 + {
  8 + /// <summary>
  9 + /// 门店ID
  10 + /// </summary>
  11 + public string StoreId { get; set; }
  12 +
  13 + /// <summary>
  14 + /// 门店名称
  15 + /// </summary>
  16 + public string StoreName { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 门店类型
  20 + /// </summary>
  21 + public int? StoreType { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 门店类别
  25 + /// </summary>
  26 + public int? StoreCategory { get; set; }
  27 +
  28 + /// <summary>
  29 + /// 归属月份
  30 + /// </summary>
  31 + public string Month { get; set; }
  32 +
  33 + /// <summary>
  34 + /// 开单溯源金额
  35 + /// </summary>
  36 + public decimal BillingTraceabilityAmount { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 退卡溯源金额
  40 + /// </summary>
  41 + public decimal RefundTraceabilityAmount { get; set; }
  42 +
  43 + /// <summary>
  44 + /// 净溯源金额
  45 + /// </summary>
  46 + public decimal TraceabilityAmount { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 开单Cell金额
  50 + /// </summary>
  51 + public decimal BillingCellAmount { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 退卡Cell金额
  55 + /// </summary>
  56 + public decimal RefundCellAmount { get; set; }
  57 +
  58 + /// <summary>
  59 + /// 净Cell金额
  60 + /// </summary>
  61 + public decimal CellAmount { get; set; }
  62 +
  63 + /// <summary>
  64 + /// 科美总收入
  65 + /// </summary>
  66 + public decimal TotalKemeiIncome { get; set; }
  67 +
  68 + /// <summary>
  69 + /// 开单次数
  70 + /// </summary>
  71 + public int BillingCount { get; set; }
  72 +
  73 + /// <summary>
  74 + /// 消耗次数
  75 + /// </summary>
  76 + public int ConsumeCount { get; set; }
  77 +
  78 + /// <summary>
  79 + /// 退卡次数
  80 + /// </summary>
  81 + public int RefundCount { get; set; }
  82 + }
  83 +}
  84 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardStoreDistributionOutput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  4 +{
  5 + /// <summary>
  6 + /// 科技部驾驶舱门店分布数据输出
  7 + /// </summary>
  8 + public class TechDepartmentDashboardStoreDistributionOutput
  9 + {
  10 + /// <summary>
  11 + /// 门店分布数据列表(用于饼图)
  12 + /// </summary>
  13 + public List<StoreDistributionItem> DistributionData { get; set; } = new List<StoreDistributionItem>();
  14 + }
  15 +
  16 + /// <summary>
  17 + /// 门店分布项
  18 + /// </summary>
  19 + public class StoreDistributionItem
  20 + {
  21 + /// <summary>
  22 + /// 门店ID
  23 + /// </summary>
  24 + public string StoreId { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 门店名称
  28 + /// </summary>
  29 + public string StoreName { get; set; }
  30 +
  31 + /// <summary>
  32 + /// 溯源金额
  33 + /// </summary>
  34 + public decimal TraceabilityAmount { get; set; }
  35 +
  36 + /// <summary>
  37 + /// Cell金额
  38 + /// </summary>
  39 + public decimal CellAmount { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 科美总收入
  43 + /// </summary>
  44 + public decimal TotalKemeiIncome { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 占比(百分比)
  48 + /// </summary>
  49 + public decimal Percentage { get; set; }
  50 + }
  51 +}
  52 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardStoreRankingOutput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  4 +{
  5 + /// <summary>
  6 + /// 科技部驾驶舱门店排行数据输出
  7 + /// </summary>
  8 + public class TechDepartmentDashboardStoreRankingOutput
  9 + {
  10 + /// <summary>
  11 + /// 门店排行数据列表
  12 + /// </summary>
  13 + public List<StoreRankingItem> RankingData { get; set; } = new List<StoreRankingItem>();
  14 + }
  15 +
  16 + /// <summary>
  17 + /// 门店排行项
  18 + /// </summary>
  19 + public class StoreRankingItem
  20 + {
  21 + /// <summary>
  22 + /// 排名
  23 + /// </summary>
  24 + public int Ranking { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 门店ID
  28 + /// </summary>
  29 + public string StoreId { get; set; }
  30 +
  31 + /// <summary>
  32 + /// 门店名称
  33 + /// </summary>
  34 + public string StoreName { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 溯源金额
  38 + /// </summary>
  39 + public decimal TraceabilityAmount { get; set; }
  40 +
  41 + /// <summary>
  42 + /// Cell金额
  43 + /// </summary>
  44 + public decimal CellAmount { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 科美总收入
  48 + /// </summary>
  49 + public decimal TotalKemeiIncome { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 占比(百分比)
  53 + /// </summary>
  54 + public decimal Percentage { get; set; }
  55 + }
  56 +}
  57 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardTeacherDetailListInput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +using NCC.Common.Filter;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  5 +{
  6 + /// <summary>
  7 + /// 科技部驾驶舱老师明细列表查询输入
  8 + /// </summary>
  9 + public class TechDepartmentDashboardTeacherDetailListInput : PageInputBase
  10 + {
  11 + /// <summary>
  12 + /// 科技部ID(可选)
  13 + /// </summary>
  14 + public string TechDepartmentId { get; set; }
  15 +
  16 + /// <summary>
  17 + /// 门店ID列表(可选)
  18 + /// </summary>
  19 + public List<string> StoreIds { get; set; }
  20 +
  21 + /// <summary>
  22 + /// 统计月份(必填):YYYYMM格式,如:202501
  23 + /// </summary>
  24 + [System.ComponentModel.DataAnnotations.Required(ErrorMessage = "统计月份不能为空")]
  25 + [System.ComponentModel.DataAnnotations.StringLength(6, MinimumLength = 6, ErrorMessage = "统计月份格式必须为YYYYMM")]
  26 + public string StatisticsMonth { get; set; }
  27 +
  28 + /// <summary>
  29 + /// 老师姓名(模糊查询)
  30 + /// </summary>
  31 + public string TeacherName { get; set; }
  32 +
  33 + /// <summary>
  34 + /// 门店ID(可选,进一步筛选)
  35 + /// </summary>
  36 + public string StoreId { get; set; }
  37 + }
  38 +}
  39 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardTeacherDetailListOutput.cs 0 → 100644
  1 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  2 +{
  3 + /// <summary>
  4 + /// 科技部驾驶舱老师明细列表项
  5 + /// </summary>
  6 + public class TechDepartmentDashboardTeacherDetailListOutput
  7 + {
  8 + /// <summary>
  9 + /// 员工ID
  10 + /// </summary>
  11 + public string EmployeeId { get; set; }
  12 +
  13 + /// <summary>
  14 + /// 员工姓名
  15 + /// </summary>
  16 + public string EmployeeName { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 员工账号
  20 + /// </summary>
  21 + public string EmployeeAccount { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 门店ID
  25 + /// </summary>
  26 + public string StoreId { get; set; }
  27 +
  28 + /// <summary>
  29 + /// 门店名称
  30 + /// </summary>
  31 + public string StoreName { get; set; }
  32 +
  33 + /// <summary>
  34 + /// 开单业绩
  35 + /// </summary>
  36 + public decimal OrderAchievement { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 消耗业绩
  40 + /// </summary>
  41 + public decimal ConsumeAchievement { get; set; }
  42 +
  43 + /// <summary>
  44 + /// 退卡业绩
  45 + /// </summary>
  46 + public decimal RefundAchievement { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 总业绩
  50 + /// </summary>
  51 + public decimal TotalPerformance { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 项目数
  55 + /// </summary>
  56 + public decimal ProjectCount { get; set; }
  57 +
  58 + /// <summary>
  59 + /// 底薪
  60 + /// </summary>
  61 + public decimal BaseSalary { get; set; }
  62 +
  63 + /// <summary>
  64 + /// 业绩提成
  65 + /// </summary>
  66 + public decimal PerformanceCommissionAmount { get; set; }
  67 +
  68 + /// <summary>
  69 + /// 消耗提成
  70 + /// </summary>
  71 + public decimal ConsumeCommissionAmount { get; set; }
  72 +
  73 + /// <summary>
  74 + /// 应发工资
  75 + /// </summary>
  76 + public decimal FinalGrossSalary { get; set; }
  77 + }
  78 +}
  79 +
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechDepartmentDashboard/TechDepartmentDashboardTeacherRankingOutput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard
  4 +{
  5 + /// <summary>
  6 + /// 科技部驾驶舱老师排行数据输出
  7 + /// </summary>
  8 + public class TechDepartmentDashboardTeacherRankingOutput
  9 + {
  10 + /// <summary>
  11 + /// 老师排行数据列表
  12 + /// </summary>
  13 + public List<TeacherRankingItem> RankingData { get; set; } = new List<TeacherRankingItem>();
  14 + }
  15 +
  16 + /// <summary>
  17 + /// 老师排行项
  18 + /// </summary>
  19 + public class TeacherRankingItem
  20 + {
  21 + /// <summary>
  22 + /// 排名
  23 + /// </summary>
  24 + public int Ranking { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 员工ID
  28 + /// </summary>
  29 + public string EmployeeId { get; set; }
  30 +
  31 + /// <summary>
  32 + /// 员工姓名
  33 + /// </summary>
  34 + public string EmployeeName { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 员工账号
  38 + /// </summary>
  39 + public string EmployeeAccount { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 门店ID
  43 + /// </summary>
  44 + public string StoreId { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 门店名称
  48 + /// </summary>
  49 + public string StoreName { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 开单业绩
  53 + /// </summary>
  54 + public decimal OrderAchievement { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 消耗业绩
  58 + /// </summary>
  59 + public decimal ConsumeAchievement { get; set; }
  60 +
  61 + /// <summary>
  62 + /// 退卡业绩
  63 + /// </summary>
  64 + public decimal RefundAchievement { get; set; }
  65 +
  66 + /// <summary>
  67 + /// 总业绩
  68 + /// </summary>
  69 + public decimal TotalPerformance { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 项目数
  73 + /// </summary>
  74 + public decimal ProjectCount { get; set; }
  75 +
  76 + /// <summary>
  77 + /// 底薪
  78 + /// </summary>
  79 + public decimal BaseSalary { get; set; }
  80 +
  81 + /// <summary>
  82 + /// 业绩提成
  83 + /// </summary>
  84 + public decimal PerformanceCommissionAmount { get; set; }
  85 +
  86 + /// <summary>
  87 + /// 消耗提成
  88 + /// </summary>
  89 + public decimal ConsumeCommissionAmount { get; set; }
  90 +
  91 + /// <summary>
  92 + /// 应发工资
  93 + /// </summary>
  94 + public decimal FinalGrossSalary { get; set; }
  95 + }
  96 +}
  97 +
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
... ... @@ -3346,7 +3346,7 @@ namespace NCC.Extend.LqKdKdjlb
3346 3346 u.F_REALNAME as EmployeeName,
3347 3347 u.F_MDID as StoreId,
3348 3348 md.dm as StoreName,
3349   - md.syb as DepartmentId,
  3349 + COALESCE(target.F_BusinessUnit, md.syb) as DepartmentId,
3350 3350 dept.F_FullName as DepartmentName,
3351 3351  
3352 3352 -- 邀约人数
... ... @@ -3390,7 +3390,8 @@ namespace NCC.Extend.LqKdKdjlb
3390 3390  
3391 3391 FROM BASE_USER u
3392 3392 LEFT JOIN lq_mdxx md ON u.F_MDID = md.F_Id
3393   - LEFT JOIN base_organize dept ON md.syb = dept.F_Id
  3393 + LEFT JOIN lq_md_target target ON md.F_Id = target.F_StoreId AND target.F_Month = @statisticsMonth
  3394 + LEFT JOIN base_organize dept ON COALESCE(target.F_BusinessUnit, md.syb) = dept.F_Id
3394 3395  
3395 3396 -- 金三角信息子查询(获取健康师所在的金三角名称)
3396 3397 LEFT JOIN (
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
... ... @@ -5533,92 +5533,97 @@ namespace NCC.Extend.LqStatistics
5533 5533 {(string.IsNullOrEmpty(whereClause) ? "" : whereClause)}
5534 5534 GROUP BY tk.F_StoreId
5535 5535 ) tk_stats ON tk_stats.StoreId = stores.StoreId
5536   - -- 邀约数统计(如果有活动筛选,通过拓客记录关联;否则直接统计
  5536 + -- 邀约数统计(基于拓客会员数:统计有邀约的拓客会员数,按会员ID去重
5537 5537 LEFT JOIN (
5538   - {(hasEventFilter ? @"
  5538 + {(hasEventFilter ? $@"
5539 5539 SELECT
5540 5540 tk.F_StoreId as StoreId,
5541   - COUNT(DISTINCT yaoy.F_Id) as InviteCount
5542   - FROM lq_yaoyjl yaoy
5543   - INNER JOIN lq_tkjlb tk ON tk.F_Id = yaoy.tkbh
  5541 + COUNT(DISTINCT tk.F_MemberId) as InviteCount
  5542 + FROM lq_tkjlb tk
  5543 + INNER JOIN lq_yaoyjl yaoy ON (yaoy.tkbh = tk.F_Id OR yaoy.yykh = tk.F_MemberId)
5544 5544 WHERE tk.F_StoreId IS NOT NULL
5545 5545 AND tk.F_EventId = @EventId
5546   - GROUP BY tk.F_StoreId" : @"
  5546 + GROUP BY tk.F_StoreId" : $@"
5547 5547 SELECT
5548   - yaoy.F_StoreId as StoreId,
5549   - COUNT(DISTINCT yaoy.F_Id) as InviteCount
5550   - FROM lq_yaoyjl yaoy
5551   - WHERE yaoy.F_StoreId IS NOT NULL
5552   - GROUP BY yaoy.F_StoreId")}
  5548 + tk.F_StoreId as StoreId,
  5549 + COUNT(DISTINCT tk.F_MemberId) as InviteCount
  5550 + FROM lq_tkjlb tk
  5551 + INNER JOIN lq_yaoyjl yaoy ON (yaoy.tkbh = tk.F_Id OR yaoy.yykh = tk.F_MemberId)
  5552 + {(string.IsNullOrEmpty(whereClause) ? "" : whereClause)}
  5553 + GROUP BY tk.F_StoreId")}
5553 5554 ) yaoy_stats ON yaoy_stats.StoreId = stores.StoreId
5554   - -- 预约数统计(如果有活动筛选,通过邀约->拓客链路关联;否则直接统计
  5555 + -- 预约数统计(基于拓客会员数:统计有预约的拓客会员数,按会员ID去重,且通过邀约产生
5555 5556 LEFT JOIN (
5556   - {(hasEventFilter ? @"
  5557 + {(hasEventFilter ? $@"
5557 5558 SELECT
5558 5559 tk.F_StoreId as StoreId,
5559   - COUNT(DISTINCT yy.F_Id) as AppointmentCount
5560   - FROM lq_yyjl yy
5561   - INNER JOIN lq_yaoyjl yaoy ON yaoy.F_Id = yy.F_InviteId
5562   - INNER JOIN lq_tkjlb tk ON tk.F_Id = yaoy.tkbh
  5560 + COUNT(DISTINCT tk.F_MemberId) as AppointmentCount
  5561 + FROM lq_tkjlb tk
  5562 + INNER JOIN lq_yaoyjl yaoy ON (yaoy.tkbh = tk.F_Id OR yaoy.yykh = tk.F_MemberId)
  5563 + INNER JOIN lq_yyjl yy ON yy.F_InviteId = yaoy.F_Id AND yy.gk = tk.F_MemberId
5563 5564 WHERE tk.F_StoreId IS NOT NULL
5564 5565 AND tk.F_EventId = @EventId
5565   - GROUP BY tk.F_StoreId" : @"
  5566 + GROUP BY tk.F_StoreId" : $@"
5566 5567 SELECT
5567   - yy.djmd as StoreId,
5568   - COUNT(DISTINCT yy.F_Id) as AppointmentCount
5569   - FROM lq_yyjl yy
5570   - WHERE yy.djmd IS NOT NULL
5571   - GROUP BY yy.djmd")}
  5568 + tk.F_StoreId as StoreId,
  5569 + COUNT(DISTINCT tk.F_MemberId) as AppointmentCount
  5570 + FROM lq_tkjlb tk
  5571 + INNER JOIN lq_yaoyjl yaoy ON (yaoy.tkbh = tk.F_Id OR yaoy.yykh = tk.F_MemberId)
  5572 + INNER JOIN lq_yyjl yy ON yy.F_InviteId = yaoy.F_Id AND yy.gk = tk.F_MemberId
  5573 + {(string.IsNullOrEmpty(whereClause) ? "" : whereClause)}
  5574 + GROUP BY tk.F_StoreId")}
5572 5575 ) yy_stats ON yy_stats.StoreId = stores.StoreId
5573   - -- 耗卡数统计(如果有活动筛选,通过预约->邀约->拓客链路关联;否则直接统计
  5576 + -- 耗卡数统计(基于拓客会员数:统计有耗卡的拓客会员数,按会员ID去重,通过预约->邀约->拓客链路关联
5574 5577 LEFT JOIN (
5575   - {(hasEventFilter ? @"
  5578 + {(hasEventFilter ? $@"
5576 5579 SELECT
5577 5580 tk.F_StoreId as StoreId,
5578   - COUNT(DISTINCT xh.F_Id) as ConsumeCount
5579   - FROM lq_yyjl yy
  5581 + COUNT(DISTINCT tk.F_MemberId) as ConsumeCount
  5582 + FROM lq_tkjlb tk
  5583 + INNER JOIN lq_yaoyjl yaoy ON (yaoy.tkbh = tk.F_Id OR yaoy.yykh = tk.F_MemberId)
  5584 + INNER JOIN lq_yyjl yy ON yy.F_InviteId = yaoy.F_Id AND yy.gk = tk.F_MemberId
5580 5585 INNER JOIN lq_xh_hyhk xh ON xh.F_AppointmentId = yy.F_Id AND xh.F_IsEffective = 1
5581   - INNER JOIN lq_yaoyjl yaoy ON yaoy.F_Id = yy.F_InviteId
5582   - INNER JOIN lq_tkjlb tk ON tk.F_Id = yaoy.tkbh
5583 5586 WHERE tk.F_StoreId IS NOT NULL
5584 5587 AND tk.F_EventId = @EventId
5585   - GROUP BY tk.F_StoreId" : @"
  5588 + GROUP BY tk.F_StoreId" : $@"
5586 5589 SELECT
5587   - yy.djmd as StoreId,
5588   - COUNT(DISTINCT xh.F_Id) as ConsumeCount
5589   - FROM lq_yyjl yy
  5590 + tk.F_StoreId as StoreId,
  5591 + COUNT(DISTINCT tk.F_MemberId) as ConsumeCount
  5592 + FROM lq_tkjlb tk
  5593 + INNER JOIN lq_yaoyjl yaoy ON (yaoy.tkbh = tk.F_Id OR yaoy.yykh = tk.F_MemberId)
  5594 + INNER JOIN lq_yyjl yy ON yy.F_InviteId = yaoy.F_Id AND yy.gk = tk.F_MemberId
5590 5595 INNER JOIN lq_xh_hyhk xh ON xh.F_AppointmentId = yy.F_Id AND xh.F_IsEffective = 1
5591   - WHERE yy.djmd IS NOT NULL
5592   - GROUP BY yy.djmd")}
  5596 + {(string.IsNullOrEmpty(whereClause) ? "" : whereClause)}
  5597 + GROUP BY tk.F_StoreId")}
5593 5598 ) xh_stats ON xh_stats.StoreId = stores.StoreId
5594   - -- 开单数和开单金额统计(如果有活动筛选,通过预约->邀约->拓客链路关联;否则直接统计
  5599 + -- 开单数统计(基于拓客会员数:统计有开单的拓客会员数,按会员ID去重,通过预约->邀约->拓客链路关联
5595 5600 LEFT JOIN (
5596   - {(hasEventFilter ? @"
  5601 + {(hasEventFilter ? $@"
5597 5602 SELECT
5598 5603 tk.F_StoreId as StoreId,
5599   - COUNT(DISTINCT kd.F_Id) as BillingCount,
  5604 + COUNT(DISTINCT tk.F_MemberId) as BillingCount,
5600 5605 SUM(kd.zdyj) as BillingAmount
5601   - FROM lq_kd_kdjlb kd
5602   - INNER JOIN lq_yyjl yy ON yy.F_Id = kd.F_AppointmentId
5603   - INNER JOIN lq_yaoyjl yaoy ON yaoy.F_Id = yy.F_InviteId
5604   - INNER JOIN lq_tkjlb tk ON tk.F_Id = yaoy.tkbh
5605   - WHERE kd.F_IsEffective = 1
5606   - AND kd.F_AppointmentId IS NOT NULL
  5606 + FROM lq_tkjlb tk
  5607 + INNER JOIN lq_yaoyjl yaoy ON (yaoy.tkbh = tk.F_Id OR yaoy.yykh = tk.F_MemberId)
  5608 + INNER JOIN lq_yyjl yy ON yy.F_InviteId = yaoy.F_Id AND yy.gk = tk.F_MemberId
  5609 + INNER JOIN lq_kd_kdjlb kd ON kd.F_AppointmentId = yy.F_Id AND kd.kdhy = tk.F_MemberId AND kd.F_IsEffective = 1
  5610 + WHERE kd.F_AppointmentId IS NOT NULL
5607 5611 AND kd.F_AppointmentId != ''
5608 5612 AND tk.F_StoreId IS NOT NULL
5609 5613 AND tk.F_EventId = @EventId
5610   - GROUP BY tk.F_StoreId" : @"
  5614 + GROUP BY tk.F_StoreId" : $@"
5611 5615 SELECT
5612   - kd.djmd as StoreId,
5613   - COUNT(DISTINCT kd.F_Id) as BillingCount,
  5616 + tk.F_StoreId as StoreId,
  5617 + COUNT(DISTINCT tk.F_MemberId) as BillingCount,
5614 5618 SUM(kd.zdyj) as BillingAmount
5615   - FROM lq_kd_kdjlb kd
5616   - INNER JOIN lq_yyjl yy ON yy.F_Id = kd.F_AppointmentId
5617   - WHERE kd.F_IsEffective = 1
5618   - AND kd.F_AppointmentId IS NOT NULL
  5619 + FROM lq_tkjlb tk
  5620 + INNER JOIN lq_yaoyjl yaoy ON (yaoy.tkbh = tk.F_Id OR yaoy.yykh = tk.F_MemberId)
  5621 + INNER JOIN lq_yyjl yy ON yy.F_InviteId = yaoy.F_Id AND yy.gk = tk.F_MemberId
  5622 + INNER JOIN lq_kd_kdjlb kd ON kd.F_AppointmentId = yy.F_Id AND kd.kdhy = tk.F_MemberId AND kd.F_IsEffective = 1
  5623 + WHERE kd.F_AppointmentId IS NOT NULL
5619 5624 AND kd.F_AppointmentId != ''
5620   - AND kd.djmd IS NOT NULL
5621   - GROUP BY kd.djmd")}
  5625 + {(string.IsNullOrEmpty(whereClause) ? "" : " AND " + whereClause.Replace("WHERE ", ""))}
  5626 + GROUP BY tk.F_StoreId")}
5622 5627 ) kd_stats ON kd_stats.StoreId = stores.StoreId
5623 5628 WHERE stores.StoreId IS NOT NULL
5624 5629 ORDER BY stores.StoreId";
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqTechDepartmentDashboardService.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.Linq;
  4 +using System.Threading.Tasks;
  5 +using Microsoft.AspNetCore.Mvc;
  6 +using Microsoft.Extensions.Logging;
  7 +using NCC.Dependency;
  8 +using NCC.DynamicApiController;
  9 +using NCC.FriendlyException;
  10 +using NCC.Extend.Entitys.Dto.LqTechDepartmentDashboard;
  11 +using NCC.Extend.Entitys.lq_kd_jksyj;
  12 +using NCC.Extend.Entitys.lq_hytk_jksyj;
  13 +using NCC.Extend.Entitys.lq_md_target;
  14 +using NCC.Extend.Entitys.lq_xh_hyhk;
  15 +using NCC.Extend.Entitys.lq_xh_pxmx;
  16 +using NCC.Extend.Entitys.lq_kd_kdjlb;
  17 +using NCC.Extend.Entitys.lq_kd_pxmx;
  18 +using NCC.Extend.Entitys.lq_mdxx;
  19 +using NCC.Extend.Entitys.lq_tech_teacher_salary_statistics;
  20 +using NCC.Extend.Entitys.lq_tech_general_manager_salary_statistics;
  21 +using NCC.Extend.Entitys.lq_xh_kjbsyj;
  22 +using NCC.Extend.Entitys.lq_xmzl;
  23 +using NCC.Extend.Entitys.lq_hytk_hytk;
  24 +using NCC.Extend.Entitys.lq_khxx;
  25 +using NCC.Extend.Entitys;
  26 +using NCC.Common.Filter;
  27 +using NCC.System.Entitys.Permission;
  28 +using SqlSugar;
  29 +
  30 +namespace NCC.Extend
  31 +{
  32 + /// <summary>
  33 + /// 科技部驾驶舱服务
  34 + /// </summary>
  35 + [ApiDescriptionSettings(Tag = "科技部驾驶舱服务", Name = "LqTechDepartmentDashboard", Order = 202)]
  36 + [Route("api/Extend/[controller]")]
  37 + public class LqTechDepartmentDashboardService : IDynamicApiController, ITransient
  38 + {
  39 + private readonly ISqlSugarClient _db;
  40 + private readonly ILogger<LqTechDepartmentDashboardService> _logger;
  41 +
  42 + /// <summary>
  43 + /// 初始化科技部驾驶舱服务
  44 + /// </summary>
  45 + public LqTechDepartmentDashboardService(ISqlSugarClient db, ILogger<LqTechDepartmentDashboardService> logger)
  46 + {
  47 + _db = db;
  48 + _logger = logger;
  49 + }
  50 +
  51 + // 辅助方法:获取门店列表
  52 + private async Task<List<string>> GetStoreIdsAsync(string techDepartmentId, List<string> storeIds, string statisticsMonth)
  53 + {
  54 + if (!string.IsNullOrWhiteSpace(techDepartmentId))
  55 + {
  56 + return await _db.Queryable<LqMdTargetEntity>()
  57 + .Where(x => x.TechDepartment == techDepartmentId && x.Month == statisticsMonth)
  58 + .Select(x => x.StoreId)
  59 + .Distinct()
  60 + .ToListAsync();
  61 + }
  62 + return storeIds ?? new List<string>();
  63 + }
  64 +
  65 + // 辅助方法:获取门店列表(重载)
  66 + private async Task<List<string>> GetStoreIdsAsync(TechDepartmentDashboardStatisticsInput input)
  67 + {
  68 + return await GetStoreIdsAsync(input.TechDepartmentId, input.StoreIds, input.StatisticsMonth);
  69 + }
  70 +
  71 + // 辅助方法:获取指定月份的门店列表
  72 + private async Task<List<string>> GetStoreIdsForMonthAsync(string techDepartmentId, List<string> storeIds, string month)
  73 + {
  74 + if (!string.IsNullOrWhiteSpace(techDepartmentId))
  75 + {
  76 + return await _db.Queryable<LqMdTargetEntity>()
  77 + .Where(x => x.TechDepartment == techDepartmentId && x.Month == month)
  78 + .Select(x => x.StoreId)
  79 + .Distinct()
  80 + .ToListAsync();
  81 + }
  82 + return storeIds ?? new List<string>();
  83 + }
  84 +
  85 + // 辅助方法:计算单月业绩指标
  86 + private async Task<(decimal traceabilityAmount, decimal cellAmount, decimal totalKemeiIncome)> CalculateMonthlyPerformance(List<string> storeIds, string month)
  87 + {
  88 + if (!storeIds.Any()) return (0, 0, 0);
  89 +
  90 + var year = int.Parse(month.Substring(0, 4));
  91 + var monthNum = int.Parse(month.Substring(4, 2));
  92 + var startDate = new DateTime(year, monthNum, 1);
  93 + var endDate = startDate.AddMonths(1).AddDays(-1);
  94 + var endDateTime = month == DateTime.Now.ToString("yyyyMM")
  95 + ? DateTime.Now
  96 + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  97 +
  98 + var storeIdsStr = string.Join("','", storeIds);
  99 +
  100 + // 溯源金额
  101 + var billingTraceabilitySql = $@"
  102 + SELECT COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as Amount
  103 + FROM lq_kd_jksyj
  104 + WHERE F_IsEffective = 1
  105 + AND F_StoreId IN ('{storeIdsStr}')
  106 + AND (F_BeautyType = '溯源系统' OR F_BeautyType = '溯源')
  107 + AND yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  108 + AND yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'";
  109 + var billingTraceabilityResult = await _db.Ado.SqlQueryAsync<dynamic>(billingTraceabilitySql);
  110 + var billingTraceabilityAmount = billingTraceabilityResult?.FirstOrDefault() != null
  111 + ? Convert.ToDecimal(billingTraceabilityResult.FirstOrDefault().Amount ?? 0)
  112 + : 0m;
  113 +
  114 + var refundTraceabilityAmount = await _db.Queryable<LqHytkJksyjEntity>()
  115 + .Where(x => x.IsEffective == 1)
  116 + .Where(x => storeIds.Contains(x.StoreId))
  117 + .Where(x => (x.BeautyType == "溯源系统" || x.BeautyType == "溯源"))
  118 + .Where(x => x.Tksj.HasValue && x.Tksj.Value.Date >= startDate.Date && x.Tksj.Value.Date <= endDate.Date)
  119 + .SumAsync(x => (decimal?)(x.Jksyj ?? 0)) ?? 0m;
  120 +
  121 + var traceabilityAmount = billingTraceabilityAmount - refundTraceabilityAmount;
  122 +
  123 + // Cell金额
  124 + var billingCellSql = $@"
  125 + SELECT COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as Amount
  126 + FROM lq_kd_jksyj
  127 + WHERE F_IsEffective = 1
  128 + AND F_StoreId IN ('{storeIdsStr}')
  129 + AND (F_BeautyType = 'cell' OR F_BeautyType = 'Cell')
  130 + AND yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  131 + AND yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'";
  132 + var billingCellResult = await _db.Ado.SqlQueryAsync<dynamic>(billingCellSql);
  133 + var billingCellAmount = billingCellResult?.FirstOrDefault() != null
  134 + ? Convert.ToDecimal(billingCellResult.FirstOrDefault().Amount ?? 0)
  135 + : 0m;
  136 +
  137 + var refundCellAmount = await _db.Queryable<LqHytkJksyjEntity>()
  138 + .Where(x => x.IsEffective == 1)
  139 + .Where(x => storeIds.Contains(x.StoreId))
  140 + .Where(x => (x.BeautyType == "cell" || x.BeautyType == "Cell"))
  141 + .Where(x => x.Tksj.HasValue && x.Tksj.Value.Date >= startDate.Date && x.Tksj.Value.Date <= endDate.Date)
  142 + .SumAsync(x => (decimal?)(x.Jksyj ?? 0)) ?? 0m;
  143 +
  144 + var cellAmount = billingCellAmount - refundCellAmount;
  145 + var totalKemeiIncome = traceabilityAmount + cellAmount;
  146 +
  147 + return (traceabilityAmount, cellAmount, totalKemeiIncome);
  148 + }
  149 +
  150 + /// <summary>
  151 + /// 获取科技部驾驶舱统计数据
  152 + /// </summary>
  153 + /// <remarks>
  154 + /// 获取指定科技部在指定月份的核心指标:溯源金额、Cell金额、科美总收入、管理的门店数、活跃门店数
  155 + ///
  156 + /// 示例请求:
  157 + /// ```json
  158 + /// {
  159 + /// "techDepartmentId": "1649328471923847169",
  160 + /// "statisticsMonth": "202512"
  161 + /// }
  162 + /// ```
  163 + ///
  164 + /// 或者:
  165 + /// ```json
  166 + /// {
  167 + /// "storeIds": ["1649328471923847169", "1649328471923847170"],
  168 + /// "statisticsMonth": "202512"
  169 + /// }
  170 + /// ```
  171 + ///
  172 + /// 参数说明:
  173 + /// - techDepartmentId: 科技部ID(BASE_ORGANIZE表的组织ID),与storeIds两者必填其一
  174 + /// - storeIds: 门店ID列表,与techDepartmentId两者必填其一
  175 + /// - statisticsMonth: 统计月份,格式为YYYYMM(必填)
  176 + ///
  177 + /// 返回数据说明:
  178 + /// - TraceabilityAmount: 溯源金额(开单溯源金额 - 退卡溯源金额)
  179 + /// - CellAmount: Cell金额(开单Cell金额 - 退卡Cell金额)
  180 + /// - TotalKemeiIncome: 科美总收入(溯源金额 + Cell金额)
  181 + /// - ManagedStoreCount: 管理的门店数
  182 + /// - ActiveStoreCount: 活跃门店数(有科美开单或消耗的门店数量)
  183 + /// </remarks>
  184 + /// <param name="input">查询参数</param>
  185 + /// <returns>科技部驾驶舱统计数据</returns>
  186 + /// <response code="200">成功返回统计数据</response>
  187 + /// <response code="400">参数错误</response>
  188 + /// <response code="500">服务器错误</response>
  189 + [HttpPost("GetStatistics")]
  190 + public async Task<TechDepartmentDashboardStatisticsOutput> GetStatistics([FromBody] TechDepartmentDashboardStatisticsInput input)
  191 + {
  192 + try
  193 + {
  194 + if (input == null)
  195 + {
  196 + throw NCCException.Oh("请求参数不能为空");
  197 + }
  198 +
  199 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  200 + {
  201 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  202 + }
  203 +
  204 + // 参数验证:科技部ID和门店ID列表两者必填其一
  205 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) &&
  206 + (input.StoreIds == null || !input.StoreIds.Any()))
  207 + {
  208 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  209 + }
  210 +
  211 + if (!string.IsNullOrWhiteSpace(input.TechDepartmentId) &&
  212 + input.StoreIds != null && input.StoreIds.Any())
  213 + {
  214 + throw NCCException.Oh("科技部ID和门店ID列表不能同时传入,请只传入其中一个");
  215 + }
  216 +
  217 + _logger.LogInformation("开始查询科技部驾驶舱统计数据,科技部ID:{TechDepartmentId},门店ID列表:{StoreIds},统计月份:{StatisticsMonth}",
  218 + input.TechDepartmentId, input.StoreIds != null ? string.Join(",", input.StoreIds) : "", input.StatisticsMonth);
  219 +
  220 + // 解析月份获取时间范围
  221 + var year = int.Parse(input.StatisticsMonth.Substring(0, 4));
  222 + var month = int.Parse(input.StatisticsMonth.Substring(4, 2));
  223 + var startDate = new DateTime(year, month, 1);
  224 + var endDate = startDate.AddMonths(1).AddDays(-1);
  225 + var endDateTime = input.StatisticsMonth == DateTime.Now.ToString("yyyyMM")
  226 + ? DateTime.Now
  227 + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  228 +
  229 + // 获取门店列表
  230 + List<string> storeIds;
  231 + if (!string.IsNullOrWhiteSpace(input.TechDepartmentId))
  232 + {
  233 + // 方式1:从lq_md_target表查询该月份、该科技部归属的门店列表
  234 + storeIds = await _db.Queryable<LqMdTargetEntity>()
  235 + .Where(x => x.TechDepartment == input.TechDepartmentId && x.Month == input.StatisticsMonth)
  236 + .Select(x => x.StoreId)
  237 + .Distinct()
  238 + .ToListAsync();
  239 +
  240 + if (!storeIds.Any())
  241 + {
  242 + _logger.LogWarning("科技部ID:{TechDepartmentId} 在 {StatisticsMonth} 月份没有管理的门店", input.TechDepartmentId, input.StatisticsMonth);
  243 + // 返回空数据
  244 + return new TechDepartmentDashboardStatisticsOutput();
  245 + }
  246 + }
  247 + else
  248 + {
  249 + // 方式2:直接使用传入的门店ID列表
  250 + storeIds = input.StoreIds;
  251 + }
  252 +
  253 + // 1. 统计开单溯源金额(使用SQL查询,因为jksyj字段是字符串类型)
  254 + var billingTraceabilitySql = $@"
  255 + SELECT COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as Amount
  256 + FROM lq_kd_jksyj
  257 + WHERE F_IsEffective = 1
  258 + AND F_StoreId IN ('{string.Join("','", storeIds)}')
  259 + AND (F_BeautyType = '溯源系统' OR F_BeautyType = '溯源')
  260 + AND yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  261 + AND yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'";
  262 + var billingTraceabilityResult = await _db.Ado.SqlQueryAsync<dynamic>(billingTraceabilitySql);
  263 + var billingTraceabilityAmount = billingTraceabilityResult?.FirstOrDefault() != null
  264 + ? Convert.ToDecimal(billingTraceabilityResult.FirstOrDefault().Amount ?? 0)
  265 + : 0m;
  266 +
  267 + // 2. 统计退卡溯源金额
  268 + var refundTraceabilityAmount = await _db.Queryable<LqHytkJksyjEntity>()
  269 + .Where(x => x.IsEffective == 1)
  270 + .Where(x => storeIds.Contains(x.StoreId))
  271 + .Where(x => (x.BeautyType == "溯源系统" || x.BeautyType == "溯源"))
  272 + .Where(x => x.Tksj.HasValue && x.Tksj.Value.Date >= startDate.Date && x.Tksj.Value.Date <= endDate.Date)
  273 + .SumAsync(x => (decimal?)(x.Jksyj ?? 0)) ?? 0m;
  274 +
  275 + // 3. 计算净溯源金额
  276 + var traceabilityAmount = billingTraceabilityAmount - refundTraceabilityAmount;
  277 +
  278 + // 4. 统计开单Cell金额(使用SQL查询,因为jksyj字段是字符串类型)
  279 + var billingCellSql = $@"
  280 + SELECT COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as Amount
  281 + FROM lq_kd_jksyj
  282 + WHERE F_IsEffective = 1
  283 + AND F_StoreId IN ('{string.Join("','", storeIds)}')
  284 + AND (F_BeautyType = 'cell' OR F_BeautyType = 'Cell')
  285 + AND yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  286 + AND yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'";
  287 + var billingCellResult = await _db.Ado.SqlQueryAsync<dynamic>(billingCellSql);
  288 + var billingCellAmount = billingCellResult?.FirstOrDefault() != null
  289 + ? Convert.ToDecimal(billingCellResult.FirstOrDefault().Amount ?? 0)
  290 + : 0m;
  291 +
  292 + // 5. 统计退卡Cell金额
  293 + var refundCellAmount = await _db.Queryable<LqHytkJksyjEntity>()
  294 + .Where(x => x.IsEffective == 1)
  295 + .Where(x => storeIds.Contains(x.StoreId))
  296 + .Where(x => (x.BeautyType == "cell" || x.BeautyType == "Cell"))
  297 + .Where(x => x.Tksj.HasValue && x.Tksj.Value.Date >= startDate.Date && x.Tksj.Value.Date <= endDate.Date)
  298 + .SumAsync(x => (decimal?)(x.Jksyj ?? 0)) ?? 0m;
  299 +
  300 + // 6. 计算净Cell金额
  301 + var cellAmount = billingCellAmount - refundCellAmount;
  302 +
  303 + // 7. 计算科美总收入
  304 + var totalKemeiIncome = traceabilityAmount + cellAmount;
  305 +
  306 + // 8. 管理的门店数
  307 + var managedStoreCount = storeIds.Count;
  308 +
  309 + // 9. 统计活跃门店数(有科美开单或消耗的门店数量)
  310 + // 先获取有科美开单的门店
  311 + var storesWithBilling = await _db.Queryable<LqKdJksyjEntity>()
  312 + .Where(x => x.IsEffective == 1)
  313 + .Where(x => storeIds.Contains(x.StoreId))
  314 + .Where(x => (x.BeautyType == "溯源系统" || x.BeautyType == "溯源" || x.BeautyType == "cell" || x.BeautyType == "Cell"))
  315 + .Where(x => x.Yjsj.HasValue && x.Yjsj.Value >= startDate && x.Yjsj.Value <= endDateTime)
  316 + .Select(x => x.StoreId)
  317 + .Distinct()
  318 + .ToListAsync();
  319 +
  320 + // 获取有科美消耗的门店(通过关联lq_xh_pxmx表,筛选科美类型)
  321 + var storesWithConsumeSql = $@"
  322 + SELECT DISTINCT xh.Md as StoreId
  323 + FROM lq_xh_hyhk xh
  324 + INNER JOIN lq_xh_pxmx px ON px.F_ConsumeInfoId = xh.F_Id
  325 + INNER JOIN lq_xmzl xm ON px.px = xm.F_Id
  326 + WHERE xh.F_IsEffective = 1
  327 + AND px.F_IsEffective = 1
  328 + AND xh.Md IN ('{string.Join("','", storeIds)}')
  329 + AND xm.qt2 = '科美'
  330 + AND xh.Hksj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  331 + AND xh.Hksj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'";
  332 +
  333 + var storesWithConsumeData = await _db.Ado.SqlQueryAsync<dynamic>(storesWithConsumeSql);
  334 + var storesWithConsume = new List<string>();
  335 + if (storesWithConsumeData != null)
  336 + {
  337 + foreach (var row in storesWithConsumeData)
  338 + {
  339 + var storeId = row?.StoreId?.ToString();
  340 + if (!string.IsNullOrEmpty(storeId) && !storesWithConsume.Contains(storeId))
  341 + {
  342 + storesWithConsume.Add(storeId);
  343 + }
  344 + }
  345 + }
  346 +
  347 + // 合并并去重
  348 + var allActiveStoreIds = storesWithBilling.Union(storesWithConsume).Distinct().ToList();
  349 + var activeStoreCount = allActiveStoreIds.Count;
  350 +
  351 + var result = new TechDepartmentDashboardStatisticsOutput
  352 + {
  353 + TraceabilityAmount = traceabilityAmount,
  354 + CellAmount = cellAmount,
  355 + TotalKemeiIncome = totalKemeiIncome,
  356 + ManagedStoreCount = managedStoreCount,
  357 + ActiveStoreCount = activeStoreCount,
  358 + BillingTraceabilityAmount = billingTraceabilityAmount,
  359 + RefundTraceabilityAmount = refundTraceabilityAmount,
  360 + BillingCellAmount = billingCellAmount,
  361 + RefundCellAmount = refundCellAmount
  362 + };
  363 +
  364 + _logger.LogInformation($"科技部驾驶舱统计数据查询完成,统计月份:{input.StatisticsMonth},管理的门店数:{managedStoreCount},活跃门店数:{activeStoreCount},溯源金额:{traceabilityAmount:F2},Cell金额:{cellAmount:F2},科美总收入:{totalKemeiIncome:F2}");
  365 +
  366 + return result;
  367 + }
  368 + catch (Exception ex)
  369 + {
  370 + _logger.LogError(ex, "查询科技部驾驶舱统计数据失败,科技部ID:{TechDepartmentId},统计月份:{StatisticsMonth}", input?.TechDepartmentId, input?.StatisticsMonth);
  371 + throw NCCException.Oh($"查询科技部驾驶舱统计数据失败:{ex.Message}");
  372 + }
  373 + }
  374 +
  375 + /// <summary>
  376 + /// 获取科技部驾驶舱股份统计数据
  377 + /// </summary>
  378 + /// <remarks>
  379 + /// 获取指定科技部在指定月份的股份相关指标:收入、成本(报销、人工各项明细)、利润
  380 + ///
  381 + /// 示例请求:
  382 + /// ```json
  383 + /// {
  384 + /// "techDepartmentId": "1649328471923847169",
  385 + /// "statisticsMonth": "202512"
  386 + /// }
  387 + /// ```
  388 + ///
  389 + /// 参数说明:
  390 + /// - techDepartmentId: 科技部ID(BASE_ORGANIZE表的组织ID),与storeIds两者必填其一
  391 + /// - storeIds: 门店ID列表,与techDepartmentId两者必填其一
  392 + /// - statisticsMonth: 统计月份,格式为YYYYMM(必填)
  393 + ///
  394 + /// 返回数据说明:
  395 + /// - Income: 收入(科美开单30%,需减去退款)
  396 + /// - CostReimbursement: 成本-报销
  397 + /// - CostTeacherBase: 成本-人工-老师底薪
  398 + /// - CostTeacherManual: 成本-人工-老师手工费
  399 + /// - CostTeacherBillingComm: 成本-人工-老师开单提成
  400 + /// - CostTeacherConsumeComm: 成本-人工-老师消耗提成
  401 + /// - CostGMBase: 成本-人工-总经理底薪
  402 + /// - CostGMComm: 成本-人工-总经理提成
  403 + /// - Profit: 利润(收入 - 所有成本)
  404 + /// </remarks>
  405 + /// <param name="input">查询参数</param>
  406 + /// <returns>科技部驾驶舱股份统计数据</returns>
  407 + /// <response code="200">成功返回统计数据</response>
  408 + /// <response code="400">参数错误</response>
  409 + /// <response code="500">服务器错误</response>
  410 + [HttpPost("GetShareStatistics")]
  411 + public async Task<TechDepartmentDashboardShareStatisticsOutput> GetShareStatistics([FromBody] TechDepartmentDashboardStatisticsInput input)
  412 + {
  413 + try
  414 + {
  415 + if (input == null)
  416 + {
  417 + throw NCCException.Oh("请求参数不能为空");
  418 + }
  419 +
  420 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  421 + {
  422 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  423 + }
  424 +
  425 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) &&
  426 + (input.StoreIds == null || !input.StoreIds.Any()))
  427 + {
  428 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  429 + }
  430 +
  431 + _logger.LogInformation("开始查询科技部驾驶舱股份统计数据,科技部ID:{TechDepartmentId},门店ID列表:{StoreIds},统计月份:{StatisticsMonth}",
  432 + input.TechDepartmentId, input.StoreIds != null ? string.Join(",", input.StoreIds) : "", input.StatisticsMonth);
  433 +
  434 + // 解析月份获取时间范围
  435 + var year = int.Parse(input.StatisticsMonth.Substring(0, 4));
  436 + var month = int.Parse(input.StatisticsMonth.Substring(4, 2));
  437 + var startDate = new DateTime(year, month, 1);
  438 + var endDate = startDate.AddMonths(1).AddDays(-1);
  439 + var endDateTime = input.StatisticsMonth == DateTime.Now.ToString("yyyyMM")
  440 + ? DateTime.Now
  441 + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  442 +
  443 + // 获取门店列表
  444 + List<string> storeIds;
  445 + string deptName = null;
  446 +
  447 + if (!string.IsNullOrWhiteSpace(input.TechDepartmentId))
  448 + {
  449 + // 从lq_md_target表查询该月份、该科技部归属的门店列表
  450 + storeIds = await _db.Queryable<LqMdTargetEntity>()
  451 + .Where(x => x.TechDepartment == input.TechDepartmentId && x.Month == input.StatisticsMonth)
  452 + .Select(x => x.StoreId)
  453 + .Distinct()
  454 + .ToListAsync();
  455 +
  456 + if (!storeIds.Any())
  457 + {
  458 + _logger.LogWarning("科技部ID:{TechDepartmentId} 在 {StatisticsMonth} 月份没有管理的门店", input.TechDepartmentId, input.StatisticsMonth);
  459 + return new TechDepartmentDashboardShareStatisticsOutput();
  460 + }
  461 +
  462 + // 获取组织名称(用于查询总经理工资)
  463 + var organize = await _db.Queryable<OrganizeEntity>()
  464 + .Where(x => x.Id == input.TechDepartmentId && x.DeleteMark == null && x.EnabledMark == 1)
  465 + .Select(x => x.FullName)
  466 + .FirstAsync();
  467 + deptName = organize;
  468 + }
  469 + else
  470 + {
  471 + storeIds = input.StoreIds;
  472 + }
  473 +
  474 + // 1. 计算收入:科美开单30%(需减去退款)
  475 + decimal kemeiIncome = 0;
  476 + if (storeIds.Any())
  477 + {
  478 + var storeIdsStr = string.Join("','", storeIds);
  479 + var kemeiIncomeSql = $@"
  480 + SELECT COALESCE(SUM(px.F_TotalPrice), 0) as Total
  481 + FROM lq_kd_pxmx px
  482 + INNER JOIN lq_kd_kdjlb kd ON px.glkdbh = kd.F_Id
  483 + WHERE kd.djmd IN ('{storeIdsStr}')
  484 + AND px.yjsj >= '{startDate:yyyy-MM-dd} 00:00:00'
  485 + AND px.yjsj < '{endDate:yyyy-MM-dd} 23:59:59'
  486 + AND px.F_IsEffective = 1
  487 + AND px.F_ItemCategory = '科美'";
  488 + var kemeiIncomeResult = await _db.Ado.SqlQueryAsync<dynamic>(kemeiIncomeSql);
  489 + if (kemeiIncomeResult != null && kemeiIncomeResult.Any())
  490 + {
  491 + var first = kemeiIncomeResult.FirstOrDefault();
  492 + if (first != null)
  493 + {
  494 + kemeiIncome = Convert.ToDecimal(first.Total ?? 0);
  495 + }
  496 + }
  497 + }
  498 +
  499 + // 减去对应的科美项目实退金额
  500 + decimal kemeiRefund = 0;
  501 + if (storeIds.Any())
  502 + {
  503 + var storeIdsStr = string.Join("','", storeIds);
  504 + var kemeiRefundSql = $@"
  505 + SELECT COALESCE(SUM(jksyj), 0) as Total
  506 + FROM lq_hytk_jksyj
  507 + WHERE F_StoreId IN ('{storeIdsStr}')
  508 + AND tksj >= '{startDate:yyyy-MM-dd} 00:00:00'
  509 + AND tksj < '{endDate:yyyy-MM-dd} 23:59:59'
  510 + AND F_IsEffective = 1
  511 + AND F_ItemCategory = '科美'";
  512 + var kemeiRefundResult = await _db.Ado.SqlQueryAsync<dynamic>(kemeiRefundSql);
  513 + if (kemeiRefundResult != null && kemeiRefundResult.Any())
  514 + {
  515 + var first = kemeiRefundResult.FirstOrDefault();
  516 + if (first != null)
  517 + {
  518 + kemeiRefund = Convert.ToDecimal(first.Total ?? 0);
  519 + }
  520 + }
  521 + }
  522 +
  523 + // 收入 = (科美开单 - 科美退卡) * 30%
  524 + var income = (kemeiIncome - kemeiRefund) * 0.3m;
  525 +
  526 + // 2. 成本-报销:筛选一级分类为"科技部费用"的申请
  527 + var reimbursementAmount = 0m;
  528 + if (storeIds.Any())
  529 + {
  530 + reimbursementAmount = await _db.Queryable<LqReimbursementApplicationEntity, LqPurchaseRecordsEntity, LqReimbursementCategoryEntity>(
  531 + (app, purchase, category) => app.PurchaseRecordsId == purchase.Id && purchase.ReimbursementCategoryId == category.Id)
  532 + .Where((app, purchase, category) =>
  533 + category.Level1Name == "科技部费用"
  534 + && app.ApprovalStatus == "已通过"
  535 + && storeIds.Contains(app.ApplicationStoreId)
  536 + && app.ApplicationTime >= startDate
  537 + && app.ApplicationTime <= endDateTime)
  538 + .SumAsync((app, purchase, category) => purchase.Amount);
  539 + }
  540 +
  541 + // 3. 成本-人工-科技部老师底薪
  542 + var teacherBaseSalary = await _db.Queryable<LqTechTeacherSalaryStatisticsEntity>()
  543 + .Where(x => x.StatisticsMonth == input.StatisticsMonth
  544 + && storeIds.Contains(x.StoreId))
  545 + .SumAsync(x => x.BaseSalary);
  546 +
  547 + // 4. 成本-人工-科技部手工费
  548 + var teacherManualFee = await _db.Queryable<LqXhKjbsyjEntity>()
  549 + .Where(x => x.ItemCategory == "科美"
  550 + && storeIds.Contains(x.StoreId)
  551 + && x.Yjsj >= startDate
  552 + && x.Yjsj <= endDateTime
  553 + && x.IsEffective == 1)
  554 + .SumAsync(x => x.LaborCost ?? 0);
  555 +
  556 + // 5. 成本-人工-科技部开单提成
  557 + var teacherBillingComm = await _db.Queryable<LqTechTeacherSalaryStatisticsEntity>()
  558 + .Where(x => x.StatisticsMonth == input.StatisticsMonth
  559 + && storeIds.Contains(x.StoreId))
  560 + .SumAsync(x => x.PerformanceCommissionAmount);
  561 +
  562 + // 6. 成本-人工-科技部消耗提成
  563 + var teacherConsumeComm = await _db.Queryable<LqTechTeacherSalaryStatisticsEntity>()
  564 + .Where(x => x.StatisticsMonth == input.StatisticsMonth
  565 + && storeIds.Contains(x.StoreId))
  566 + .SumAsync(x => x.ConsumeCommissionAmount);
  567 +
  568 + // 7. 成本-人工-科技部总经理底薪和提成(需要组织名称)
  569 + var gmBaseSalary = 0m;
  570 + var gmComm = 0m;
  571 + if (!string.IsNullOrWhiteSpace(deptName))
  572 + {
  573 + gmBaseSalary = await _db.Queryable<LqTechGeneralManagerSalaryStatisticsEntity>()
  574 + .Where(x => x.StatisticsMonth == input.StatisticsMonth
  575 + && x.Position == deptName)
  576 + .SumAsync(x => x.BaseSalary);
  577 +
  578 + gmComm = await _db.Queryable<LqTechGeneralManagerSalaryStatisticsEntity>()
  579 + .Where(x => x.StatisticsMonth == input.StatisticsMonth
  580 + && x.Position == deptName)
  581 + .SumAsync(x => x.TotalCommission);
  582 + }
  583 +
  584 + // 8. 计算利润
  585 + var totalCost = reimbursementAmount + teacherBaseSalary + teacherManualFee +
  586 + teacherBillingComm + teacherConsumeComm + gmBaseSalary + gmComm;
  587 + var profit = income - totalCost;
  588 +
  589 + var result = new TechDepartmentDashboardShareStatisticsOutput
  590 + {
  591 + Income = income,
  592 + CostReimbursement = reimbursementAmount,
  593 + CostTeacherBase = teacherBaseSalary,
  594 + CostTeacherManual = teacherManualFee,
  595 + CostTeacherBillingComm = teacherBillingComm,
  596 + CostTeacherConsumeComm = teacherConsumeComm,
  597 + CostGMBase = gmBaseSalary,
  598 + CostGMComm = gmComm,
  599 + Profit = profit
  600 + };
  601 +
  602 + _logger.LogInformation($"科技部驾驶舱股份统计数据查询完成,统计月份:{input.StatisticsMonth},收入:{income:F2},成本:{totalCost:F2},利润:{profit:F2}");
  603 +
  604 + return result;
  605 + }
  606 + catch (Exception ex)
  607 + {
  608 + _logger.LogError(ex, "查询科技部驾驶舱股份统计数据失败,科技部ID:{TechDepartmentId},统计月份:{StatisticsMonth}", input?.TechDepartmentId, input?.StatisticsMonth);
  609 + throw NCCException.Oh($"查询科技部驾驶舱股份统计数据失败:{ex.Message}");
  610 + }
  611 + }
  612 +
  613 + /// <summary>
  614 + /// 获取科技部驾驶舱业绩趋势数据
  615 + /// </summary>
  616 + /// <remarks>
  617 + /// 获取指定科技部在指定时间范围内的业绩趋势:溯源金额趋势、Cell金额趋势、科美总收入趋势
  618 + /// </remarks>
  619 + /// <param name="input">查询参数</param>
  620 + /// <returns>业绩趋势数据</returns>
  621 + [HttpPost("GetPerformanceTrend")]
  622 + public async Task<TechDepartmentDashboardPerformanceTrendOutput> GetPerformanceTrend([FromBody] TechDepartmentDashboardPerformanceTrendInput input)
  623 + {
  624 + try
  625 + {
  626 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  627 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  628 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  629 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  630 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  631 +
  632 + var monthCount = input.MonthCount;
  633 + if (monthCount != 3 && monthCount != 6 && monthCount != 12)
  634 + monthCount = 12;
  635 +
  636 + var baseMonth = DateTime.ParseExact(input.StatisticsMonth, "yyyyMM", null);
  637 + var result = new TechDepartmentDashboardPerformanceTrendOutput();
  638 +
  639 + decimal cumulativeTraceability = 0m;
  640 + decimal cumulativeCell = 0m;
  641 + decimal cumulativeTotal = 0m;
  642 +
  643 + for (int i = monthCount - 1; i >= 0; i--)
  644 + {
  645 + var trendMonth = baseMonth.AddMonths(-i);
  646 + var trendMonthStr = trendMonth.ToString("yyyyMM");
  647 +
  648 + List<string> storeIds;
  649 + if (!string.IsNullOrWhiteSpace(input.TechDepartmentId))
  650 + {
  651 + storeIds = await GetStoreIdsForMonthAsync(input.TechDepartmentId, null, trendMonthStr);
  652 + }
  653 + else
  654 + {
  655 + storeIds = input.StoreIds;
  656 + }
  657 +
  658 + var (traceabilityAmount, cellAmount, totalKemeiIncome) = await CalculateMonthlyPerformance(storeIds, trendMonthStr);
  659 +
  660 + cumulativeTraceability += traceabilityAmount;
  661 + cumulativeCell += cellAmount;
  662 + cumulativeTotal += totalKemeiIncome;
  663 +
  664 + result.TrendData.Add(new PerformanceTrendPoint
  665 + {
  666 + Month = trendMonthStr,
  667 + TraceabilityAmount = traceabilityAmount,
  668 + CellAmount = cellAmount,
  669 + TotalKemeiIncome = totalKemeiIncome,
  670 + CumulativeTraceabilityAmount = cumulativeTraceability,
  671 + CumulativeCellAmount = cumulativeCell,
  672 + CumulativeTotalKemeiIncome = cumulativeTotal
  673 + });
  674 + }
  675 +
  676 + return result;
  677 + }
  678 + catch (Exception ex)
  679 + {
  680 + _logger.LogError(ex, "查询科技部驾驶舱业绩趋势数据失败");
  681 + throw NCCException.Oh($"查询失败:{ex.Message}");
  682 + }
  683 + }
  684 +
  685 + /// <summary>
  686 + /// 获取科技部驾驶舱股份趋势数据
  687 + /// </summary>
  688 + /// <remarks>
  689 + /// 获取指定科技部在指定时间范围内的股份趋势:收入趋势、成本趋势、利润趋势
  690 + /// </remarks>
  691 + /// <param name="input">查询参数</param>
  692 + /// <returns>股份趋势数据</returns>
  693 + [HttpPost("GetShareTrend")]
  694 + public async Task<TechDepartmentDashboardShareTrendOutput> GetShareTrend([FromBody] TechDepartmentDashboardShareTrendInput input)
  695 + {
  696 + try
  697 + {
  698 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  699 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  700 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  701 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  702 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  703 +
  704 + var monthCount = input.MonthCount;
  705 + if (monthCount != 3 && monthCount != 6 && monthCount != 12)
  706 + monthCount = 12;
  707 +
  708 + var baseMonth = DateTime.ParseExact(input.StatisticsMonth, "yyyyMM", null);
  709 + var result = new TechDepartmentDashboardShareTrendOutput();
  710 +
  711 + string deptName = null;
  712 + if (!string.IsNullOrWhiteSpace(input.TechDepartmentId))
  713 + {
  714 + var organize = await _db.Queryable<OrganizeEntity>()
  715 + .Where(x => x.Id == input.TechDepartmentId && x.DeleteMark == null && x.EnabledMark == 1)
  716 + .Select(x => x.FullName)
  717 + .FirstAsync();
  718 + deptName = organize;
  719 + }
  720 +
  721 + decimal cumulativeIncome = 0m;
  722 + decimal cumulativeCost = 0m;
  723 + decimal cumulativeProfit = 0m;
  724 +
  725 + for (int i = monthCount - 1; i >= 0; i--)
  726 + {
  727 + var trendMonth = baseMonth.AddMonths(-i);
  728 + var trendMonthStr = trendMonth.ToString("yyyyMM");
  729 +
  730 + var year = trendMonth.Year;
  731 + var month = trendMonth.Month;
  732 + var startDate = new DateTime(year, month, 1);
  733 + var endDate = startDate.AddMonths(1).AddDays(-1);
  734 + var endDateTime = trendMonthStr == DateTime.Now.ToString("yyyyMM")
  735 + ? DateTime.Now
  736 + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  737 +
  738 + List<string> storeIds;
  739 + if (!string.IsNullOrWhiteSpace(input.TechDepartmentId))
  740 + {
  741 + storeIds = await GetStoreIdsForMonthAsync(input.TechDepartmentId, null, trendMonthStr);
  742 + }
  743 + else
  744 + {
  745 + storeIds = input.StoreIds;
  746 + }
  747 +
  748 + if (!storeIds.Any())
  749 + {
  750 + result.TrendData.Add(new ShareTrendPoint { Month = trendMonthStr });
  751 + continue;
  752 + }
  753 +
  754 + // 计算收入
  755 + decimal kemeiIncome = 0;
  756 + decimal kemeiRefund = 0;
  757 + if (storeIds.Any())
  758 + {
  759 + var storeIdsStr = string.Join("','", storeIds);
  760 + var kemeiIncomeSql = $@"
  761 + SELECT COALESCE(SUM(px.F_TotalPrice), 0) as Total
  762 + FROM lq_kd_pxmx px
  763 + INNER JOIN lq_kd_kdjlb kd ON px.glkdbh = kd.F_Id
  764 + WHERE kd.djmd IN ('{storeIdsStr}')
  765 + AND px.yjsj >= '{startDate:yyyy-MM-dd} 00:00:00'
  766 + AND px.yjsj < '{endDate:yyyy-MM-dd} 23:59:59'
  767 + AND px.F_IsEffective = 1
  768 + AND px.F_ItemCategory = '科美'";
  769 + var kemeiIncomeResult = await _db.Ado.SqlQueryAsync<dynamic>(kemeiIncomeSql);
  770 + if (kemeiIncomeResult?.Any() == true)
  771 + kemeiIncome = Convert.ToDecimal(kemeiIncomeResult.FirstOrDefault().Total ?? 0);
  772 +
  773 + var kemeiRefundSql = $@"
  774 + SELECT COALESCE(SUM(jksyj), 0) as Total
  775 + FROM lq_hytk_jksyj
  776 + WHERE F_StoreId IN ('{storeIdsStr}')
  777 + AND tksj >= '{startDate:yyyy-MM-dd} 00:00:00'
  778 + AND tksj < '{endDate:yyyy-MM-dd} 23:59:59'
  779 + AND F_IsEffective = 1
  780 + AND F_ItemCategory = '科美'";
  781 + var kemeiRefundResult = await _db.Ado.SqlQueryAsync<dynamic>(kemeiRefundSql);
  782 + if (kemeiRefundResult?.Any() == true)
  783 + kemeiRefund = Convert.ToDecimal(kemeiRefundResult.FirstOrDefault().Total ?? 0);
  784 + }
  785 +
  786 + var income = (kemeiIncome - kemeiRefund) * 0.3m;
  787 +
  788 + // 计算成本
  789 + var reimbursementAmount = await _db.Queryable<LqReimbursementApplicationEntity, LqPurchaseRecordsEntity, LqReimbursementCategoryEntity>(
  790 + (app, purchase, category) => app.PurchaseRecordsId == purchase.Id && purchase.ReimbursementCategoryId == category.Id)
  791 + .Where((app, purchase, category) =>
  792 + category.Level1Name == "科技部费用"
  793 + && app.ApprovalStatus == "已通过"
  794 + && storeIds.Contains(app.ApplicationStoreId)
  795 + && app.ApplicationTime >= startDate
  796 + && app.ApplicationTime <= endDateTime)
  797 + .SumAsync((app, purchase, category) => purchase.Amount);
  798 +
  799 + var teacherBaseSalary = await _db.Queryable<LqTechTeacherSalaryStatisticsEntity>()
  800 + .Where(x => x.StatisticsMonth == trendMonthStr && storeIds.Contains(x.StoreId))
  801 + .SumAsync(x => x.BaseSalary);
  802 +
  803 + var teacherManualFee = await _db.Queryable<LqXhKjbsyjEntity>()
  804 + .Where(x => x.ItemCategory == "科美" && storeIds.Contains(x.StoreId) && x.Yjsj >= startDate && x.Yjsj <= endDateTime && x.IsEffective == 1)
  805 + .SumAsync(x => x.LaborCost ?? 0);
  806 +
  807 + var teacherBillingComm = await _db.Queryable<LqTechTeacherSalaryStatisticsEntity>()
  808 + .Where(x => x.StatisticsMonth == trendMonthStr && storeIds.Contains(x.StoreId))
  809 + .SumAsync(x => x.PerformanceCommissionAmount);
  810 +
  811 + var teacherConsumeComm = await _db.Queryable<LqTechTeacherSalaryStatisticsEntity>()
  812 + .Where(x => x.StatisticsMonth == trendMonthStr && storeIds.Contains(x.StoreId))
  813 + .SumAsync(x => x.ConsumeCommissionAmount);
  814 +
  815 + var gmBaseSalary = 0m;
  816 + var gmComm = 0m;
  817 + if (!string.IsNullOrWhiteSpace(deptName))
  818 + {
  819 + gmBaseSalary = await _db.Queryable<LqTechGeneralManagerSalaryStatisticsEntity>()
  820 + .Where(x => x.StatisticsMonth == trendMonthStr && x.Position == deptName)
  821 + .SumAsync(x => x.BaseSalary);
  822 + gmComm = await _db.Queryable<LqTechGeneralManagerSalaryStatisticsEntity>()
  823 + .Where(x => x.StatisticsMonth == trendMonthStr && x.Position == deptName)
  824 + .SumAsync(x => x.TotalCommission);
  825 + }
  826 +
  827 + var totalCost = reimbursementAmount + teacherBaseSalary + teacherManualFee + teacherBillingComm + teacherConsumeComm + gmBaseSalary + gmComm;
  828 + var profit = income - totalCost;
  829 +
  830 + cumulativeIncome += income;
  831 + cumulativeCost += totalCost;
  832 + cumulativeProfit += profit;
  833 +
  834 + result.TrendData.Add(new ShareTrendPoint
  835 + {
  836 + Month = trendMonthStr,
  837 + Income = income,
  838 + CostReimbursement = reimbursementAmount,
  839 + CostTeacherBase = teacherBaseSalary,
  840 + CostTeacherManual = teacherManualFee,
  841 + CostTeacherBillingComm = teacherBillingComm,
  842 + CostTeacherConsumeComm = teacherConsumeComm,
  843 + CostGMBase = gmBaseSalary,
  844 + CostGMComm = gmComm,
  845 + Profit = profit,
  846 + CumulativeIncome = cumulativeIncome,
  847 + CumulativeCost = cumulativeCost,
  848 + CumulativeProfit = cumulativeProfit,
  849 + ProfitRate = income > 0 ? (profit / income) * 100 : 0
  850 + });
  851 + }
  852 +
  853 + return result;
  854 + }
  855 + catch (Exception ex)
  856 + {
  857 + _logger.LogError(ex, "查询科技部驾驶舱股份趋势数据失败");
  858 + throw NCCException.Oh($"查询失败:{ex.Message}");
  859 + }
  860 + }
  861 +
  862 + /// <summary>
  863 + /// 获取科技部驾驶舱门店业绩排行
  864 + /// </summary>
  865 + /// <remarks>
  866 + /// 获取指定科技部在指定月份的门店业绩排行:门店溯源金额排行、门店Cell金额排行、门店科美总收入排行
  867 + /// </remarks>
  868 + /// <param name="input">查询参数</param>
  869 + /// <returns>门店业绩排行数据</returns>
  870 + [HttpPost("GetStoreRanking")]
  871 + public async Task<TechDepartmentDashboardStoreRankingOutput> GetStoreRanking([FromBody] TechDepartmentDashboardStatisticsInput input)
  872 + {
  873 + try
  874 + {
  875 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  876 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  877 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  878 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  879 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  880 +
  881 + var year = int.Parse(input.StatisticsMonth.Substring(0, 4));
  882 + var month = int.Parse(input.StatisticsMonth.Substring(4, 2));
  883 + var startDate = new DateTime(year, month, 1);
  884 + var endDate = startDate.AddMonths(1).AddDays(-1);
  885 + var endDateTime = input.StatisticsMonth == DateTime.Now.ToString("yyyyMM")
  886 + ? DateTime.Now
  887 + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  888 +
  889 + var storeIds = await GetStoreIdsAsync(input);
  890 + if (!storeIds.Any())
  891 + {
  892 + return new TechDepartmentDashboardStoreRankingOutput();
  893 + }
  894 +
  895 + var storeIdsStr = string.Join("','", storeIds);
  896 +
  897 + // 统计各门店的业绩
  898 + var storePerformanceSql = $@"
  899 + SELECT * FROM (
  900 + SELECT
  901 + md.F_Id as StoreId,
  902 + md.dm as StoreName,
  903 + COALESCE(SUM(CASE WHEN jksyj.F_BeautyType IN ('溯源系统', '溯源') THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END), 0)
  904 + - COALESCE(refund_trace.RefundAmount, 0) as TraceabilityAmount,
  905 + COALESCE(SUM(CASE WHEN jksyj.F_BeautyType IN ('cell', 'Cell') THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END), 0)
  906 + - COALESCE(refund_cell.RefundAmount, 0) as CellAmount
  907 + FROM lq_mdxx md
  908 + LEFT JOIN lq_kd_jksyj jksyj ON md.F_Id = jksyj.F_StoreId
  909 + AND jksyj.F_IsEffective = 1
  910 + AND jksyj.yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  911 + AND jksyj.yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'
  912 + LEFT JOIN (
  913 + SELECT F_StoreId, COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as RefundAmount
  914 + FROM lq_hytk_jksyj
  915 + WHERE F_IsEffective = 1
  916 + AND F_BeautyType IN ('溯源系统', '溯源')
  917 + AND tksj >= '{startDate:yyyy-MM-dd} 00:00:00'
  918 + AND tksj <= '{endDate:yyyy-MM-dd} 23:59:59'
  919 + GROUP BY F_StoreId
  920 + ) refund_trace ON md.F_Id = refund_trace.F_StoreId
  921 + LEFT JOIN (
  922 + SELECT F_StoreId, COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as RefundAmount
  923 + FROM lq_hytk_jksyj
  924 + WHERE F_IsEffective = 1
  925 + AND F_BeautyType IN ('cell', 'Cell')
  926 + AND tksj >= '{startDate:yyyy-MM-dd} 00:00:00'
  927 + AND tksj <= '{endDate:yyyy-MM-dd} 23:59:59'
  928 + GROUP BY F_StoreId
  929 + ) refund_cell ON md.F_Id = refund_cell.F_StoreId
  930 + WHERE md.F_Id IN ('{storeIdsStr}')
  931 + GROUP BY md.F_Id, md.dm, refund_trace.RefundAmount, refund_cell.RefundAmount
  932 + ) t
  933 + WHERE TraceabilityAmount > 0 OR CellAmount > 0
  934 + ORDER BY (TraceabilityAmount + CellAmount) DESC";
  935 +
  936 + var storePerformanceData = await _db.Ado.SqlQueryAsync<dynamic>(storePerformanceSql);
  937 + var storePerformanceList = storePerformanceData?.ToList() ?? new List<dynamic>();
  938 +
  939 + decimal totalKemeiIncome = storePerformanceList.Sum(x =>
  940 + {
  941 + decimal trace = 0;
  942 + decimal cell = 0;
  943 + trace = Convert.ToDecimal(x.TraceabilityAmount);
  944 + cell = Convert.ToDecimal(x.CellAmount);
  945 +
  946 + return trace + cell;
  947 + });
  948 + var result = new TechDepartmentDashboardStoreRankingOutput();
  949 + int rankingIndex = 1;
  950 + foreach (var item in storePerformanceList)
  951 + {
  952 + var rankingItem = new StoreRankingItem
  953 + {
  954 + Ranking = rankingIndex,
  955 + StoreId = item.StoreId?.ToString() ?? "",
  956 + StoreName = item.StoreName?.ToString() ?? "未知门店",
  957 + TraceabilityAmount = item.TraceabilityAmount,
  958 + CellAmount = item.CellAmount,
  959 + TotalKemeiIncome = Convert.ToDecimal(item.TraceabilityAmount ?? 0) + Convert.ToDecimal(item.CellAmount ?? 0),
  960 + Percentage = totalKemeiIncome > 0 ? ((Convert.ToDecimal(item.TraceabilityAmount ?? 0) + Convert.ToDecimal(item.CellAmount ?? 0)) / totalKemeiIncome) * 100 : 0
  961 + };
  962 + result.RankingData.Add(rankingItem);
  963 + rankingIndex++;
  964 + }
  965 +
  966 + return result;
  967 + }
  968 + catch (Exception ex)
  969 + {
  970 + _logger.LogError(ex, "查询科技部驾驶舱门店业绩排行失败");
  971 + throw NCCException.Oh($"查询失败:{ex.Message}");
  972 + }
  973 + }
  974 +
  975 + /// <summary>
  976 + /// 获取科技部驾驶舱门店业绩分布
  977 + /// </summary>
  978 + /// <remarks>
  979 + /// 获取指定科技部在指定月份的门店业绩分布数据(用于饼图展示)
  980 + /// </remarks>
  981 + /// <param name="input">查询参数</param>
  982 + /// <returns>门店业绩分布数据</returns>
  983 + [HttpPost("GetStoreDistribution")]
  984 + public async Task<TechDepartmentDashboardStoreDistributionOutput> GetStoreDistribution([FromBody] TechDepartmentDashboardStatisticsInput input)
  985 + {
  986 + try
  987 + {
  988 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  989 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  990 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  991 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  992 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  993 +
  994 + var year = int.Parse(input.StatisticsMonth.Substring(0, 4));
  995 + var month = int.Parse(input.StatisticsMonth.Substring(4, 2));
  996 + var startDate = new DateTime(year, month, 1);
  997 + var endDate = startDate.AddMonths(1).AddDays(-1);
  998 + var endDateTime = input.StatisticsMonth == DateTime.Now.ToString("yyyyMM")
  999 + ? DateTime.Now
  1000 + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  1001 +
  1002 + var storeIds = await GetStoreIdsAsync(input);
  1003 + if (!storeIds.Any())
  1004 + {
  1005 + return new TechDepartmentDashboardStoreDistributionOutput();
  1006 + }
  1007 +
  1008 + var storeIdsStr = string.Join("','", storeIds);
  1009 +
  1010 + // 统计各门店的业绩(与GetStoreRanking逻辑相同)
  1011 + var storePerformanceSql = $@"
  1012 + SELECT
  1013 + md.F_Id as StoreId,
  1014 + md.dm as StoreName,
  1015 + COALESCE(SUM(CASE WHEN jksyj.F_BeautyType IN ('溯源系统', '溯源') THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END), 0)
  1016 + - COALESCE(refund_trace.RefundAmount, 0) as TraceabilityAmount,
  1017 + COALESCE(SUM(CASE WHEN jksyj.F_BeautyType IN ('cell', 'Cell') THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END), 0)
  1018 + - COALESCE(refund_cell.RefundAmount, 0) as CellAmount
  1019 + FROM lq_mdxx md
  1020 + LEFT JOIN lq_kd_jksyj jksyj ON md.F_Id = jksyj.F_StoreId
  1021 + AND jksyj.F_IsEffective = 1
  1022 + AND jksyj.yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  1023 + AND jksyj.yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'
  1024 + LEFT JOIN (
  1025 + SELECT F_StoreId, COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as RefundAmount
  1026 + FROM lq_hytk_jksyj
  1027 + WHERE F_IsEffective = 1
  1028 + AND F_BeautyType IN ('溯源系统', '溯源')
  1029 + AND tksj >= '{startDate:yyyy-MM-dd}'
  1030 + AND tksj <= '{endDate:yyyy-MM-dd}'
  1031 + GROUP BY F_StoreId
  1032 + ) refund_trace ON md.F_Id = refund_trace.F_StoreId
  1033 + LEFT JOIN (
  1034 + SELECT F_StoreId, COALESCE(SUM(CAST(jksyj AS DECIMAL(18,2))), 0) as RefundAmount
  1035 + FROM lq_hytk_jksyj
  1036 + WHERE F_IsEffective = 1
  1037 + AND F_BeautyType IN ('cell', 'Cell')
  1038 + AND tksj >= '{startDate:yyyy-MM-dd}'
  1039 + AND tksj <= '{endDate:yyyy-MM-dd}'
  1040 + GROUP BY F_StoreId
  1041 + ) refund_cell ON md.F_Id = refund_cell.F_StoreId
  1042 + WHERE md.F_Id IN ('{storeIdsStr}')
  1043 + GROUP BY md.F_Id, md.dm, refund_trace.RefundAmount, refund_cell.RefundAmount";
  1044 +
  1045 + var storePerformanceData = await _db.Ado.SqlQueryAsync<dynamic>(storePerformanceSql);
  1046 + var storePerformanceList = storePerformanceData?.ToList() ?? new List<dynamic>();
  1047 +
  1048 + decimal totalKemeiIncome = storePerformanceList.Sum(x =>
  1049 + {
  1050 + decimal trace = 0;
  1051 + decimal cell = 0;
  1052 + trace = Convert.ToDecimal(x.TraceabilityAmount);
  1053 + cell = Convert.ToDecimal(x.CellAmount);
  1054 +
  1055 + return trace + cell;
  1056 + });
  1057 +
  1058 + var result = new TechDepartmentDashboardStoreDistributionOutput();
  1059 +
  1060 + foreach (var item in storePerformanceList)
  1061 + {
  1062 + result.DistributionData.Add(new StoreDistributionItem
  1063 + {
  1064 + StoreId = item.StoreId?.ToString() ?? "",
  1065 + StoreName = item.StoreName?.ToString() ?? "未知门店",
  1066 + TraceabilityAmount = item.TraceabilityAmount,
  1067 + CellAmount = item.CellAmount,
  1068 + TotalKemeiIncome = Convert.ToDecimal(item.TraceabilityAmount ?? 0) + Convert.ToDecimal(item.CellAmount ?? 0),
  1069 + Percentage = totalKemeiIncome > 0 ? ((Convert.ToDecimal(item.TraceabilityAmount ?? 0) + Convert.ToDecimal(item.CellAmount ?? 0)) / totalKemeiIncome) * 100 : 0
  1070 + });
  1071 + }
  1072 +
  1073 + return result;
  1074 + }
  1075 + catch (Exception ex)
  1076 + {
  1077 + _logger.LogError(ex, "查询科技部驾驶舱门店业绩分布失败");
  1078 + throw NCCException.Oh($"查询失败:{ex.Message}");
  1079 + }
  1080 + }
  1081 +
  1082 + /// <summary>
  1083 + /// 获取科技部驾驶舱老师业绩排行
  1084 + /// </summary>
  1085 + /// <remarks>
  1086 + /// 获取指定科技部在指定月份的科技部老师业绩排行
  1087 + /// </remarks>
  1088 + /// <param name="input">查询参数</param>
  1089 + /// <returns>老师业绩排行数据</returns>
  1090 + [HttpPost("GetTeacherRanking")]
  1091 + public async Task<TechDepartmentDashboardTeacherRankingOutput> GetTeacherRanking([FromBody] TechDepartmentDashboardStatisticsInput input)
  1092 + {
  1093 + try
  1094 + {
  1095 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  1096 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  1097 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  1098 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  1099 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  1100 +
  1101 + var storeIds = await GetStoreIdsAsync(input);
  1102 + if (!storeIds.Any())
  1103 + {
  1104 + return new TechDepartmentDashboardTeacherRankingOutput();
  1105 + }
  1106 +
  1107 + // 从科技部老师工资统计表获取数据
  1108 + var teacherStats = await _db.Queryable<LqTechTeacherSalaryStatisticsEntity>()
  1109 + .Where(x => x.StatisticsMonth == input.StatisticsMonth && storeIds.Contains(x.StoreId))
  1110 + .OrderBy(x => x.TotalPerformance, OrderByType.Desc)
  1111 + .ToListAsync();
  1112 +
  1113 + var result = new TechDepartmentDashboardTeacherRankingOutput();
  1114 + int ranking = 1;
  1115 +
  1116 + foreach (var teacher in teacherStats)
  1117 + {
  1118 + result.RankingData.Add(new TeacherRankingItem
  1119 + {
  1120 + Ranking = ranking++,
  1121 + EmployeeId = teacher.EmployeeId ?? "",
  1122 + EmployeeName = teacher.EmployeeName ?? "",
  1123 + EmployeeAccount = teacher.EmployeeAccount ?? "",
  1124 + StoreId = teacher.StoreId ?? "",
  1125 + StoreName = teacher.StoreName ?? "",
  1126 + OrderAchievement = teacher.OrderAchievement,
  1127 + ConsumeAchievement = teacher.ConsumeAchievement,
  1128 + RefundAchievement = teacher.RefundAchievement,
  1129 + TotalPerformance = teacher.TotalPerformance,
  1130 + ProjectCount = teacher.ProjectCount,
  1131 + BaseSalary = teacher.BaseSalary,
  1132 + PerformanceCommissionAmount = teacher.PerformanceCommissionAmount,
  1133 + ConsumeCommissionAmount = teacher.ConsumeCommissionAmount,
  1134 + FinalGrossSalary = teacher.FinalGrossSalary
  1135 + });
  1136 + }
  1137 +
  1138 + return result;
  1139 + }
  1140 + catch (Exception ex)
  1141 + {
  1142 + _logger.LogError(ex, "查询科技部驾驶舱老师业绩排行失败");
  1143 + throw NCCException.Oh($"查询失败:{ex.Message}");
  1144 + }
  1145 + }
  1146 +
  1147 + /// <summary>
  1148 + /// 获取科技部驾驶舱运营统计数据
  1149 + /// </summary>
  1150 + /// <remarks>
  1151 + /// 获取指定科技部在指定月份的运营分析:开单分析、消耗分析、退卡分析
  1152 + /// </remarks>
  1153 + /// <param name="input">查询参数</param>
  1154 + /// <returns>运营统计数据</returns>
  1155 + [HttpPost("GetOperationStatistics")]
  1156 + public async Task<TechDepartmentDashboardOperationStatisticsOutput> GetOperationStatistics([FromBody] TechDepartmentDashboardStatisticsInput input)
  1157 + {
  1158 + try
  1159 + {
  1160 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  1161 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  1162 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  1163 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  1164 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  1165 +
  1166 + var year = int.Parse(input.StatisticsMonth.Substring(0, 4));
  1167 + var month = int.Parse(input.StatisticsMonth.Substring(4, 2));
  1168 + var startDate = new DateTime(year, month, 1);
  1169 + var endDate = startDate.AddMonths(1).AddDays(-1);
  1170 + var endDateTime = input.StatisticsMonth == DateTime.Now.ToString("yyyyMM")
  1171 + ? DateTime.Now
  1172 + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  1173 +
  1174 + var storeIds = await GetStoreIdsAsync(input);
  1175 + if (!storeIds.Any())
  1176 + {
  1177 + return new TechDepartmentDashboardOperationStatisticsOutput();
  1178 + }
  1179 +
  1180 + var storeIdsStr = string.Join("','", storeIds);
  1181 +
  1182 + // 开单分析:开单次数、平均开单金额
  1183 + var billingStatsSql = $@"
  1184 + SELECT
  1185 + COUNT(DISTINCT kd.F_Id) as BillingCount,
  1186 + COALESCE(SUM(CASE WHEN jksyj.F_BeautyType IN ('溯源系统', '溯源', 'cell', 'Cell') THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END), 0) as BillingAmount
  1187 + FROM lq_kd_kdjlb kd
  1188 + INNER JOIN lq_kd_jksyj jksyj ON kd.F_Id = jksyj.Glkdbh
  1189 + AND jksyj.F_IsEffective = 1
  1190 + AND jksyj.F_BeautyType IN ('溯源系统', '溯源', 'cell', 'Cell')
  1191 + AND jksyj.yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  1192 + AND jksyj.yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'
  1193 + WHERE kd.F_IsEffective = 1
  1194 + AND kd.djmd IN ('{storeIdsStr}')
  1195 + AND kd.kdrq >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  1196 + AND kd.kdrq <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'";
  1197 +
  1198 + var billingStatsResult = await _db.Ado.SqlQueryAsync<dynamic>(billingStatsSql);
  1199 + var billingCount = billingStatsResult?.FirstOrDefault() != null
  1200 + ? Convert.ToInt32(billingStatsResult.FirstOrDefault().BillingCount ?? 0)
  1201 + : 0;
  1202 + var billingAmount = billingStatsResult?.FirstOrDefault() != null
  1203 + ? Convert.ToDecimal(billingStatsResult.FirstOrDefault().BillingAmount ?? 0)
  1204 + : 0m;
  1205 +
  1206 + // 消耗分析:消耗次数、消耗金额
  1207 + var consumeStatsSql = $@"
  1208 + SELECT
  1209 + COUNT(DISTINCT xh.F_Id) as ConsumeCount,
  1210 + COALESCE(SUM(CASE WHEN xmzl.qt2 = '科美' THEN CAST(COALESCE(xhpx.F_TotalPrice, xhpx.pxjg * xhpx.F_ProjectNumber, 0) AS DECIMAL(18,2)) ELSE 0 END), 0) as ConsumeAmount
  1211 + FROM lq_xh_hyhk xh
  1212 + INNER JOIN lq_xh_pxmx xhpx ON xh.F_Id = xhpx.F_ConsumeInfoId
  1213 + INNER JOIN lq_xmzl xmzl ON xhpx.px = xmzl.F_Id
  1214 + WHERE xh.F_IsEffective = 1
  1215 + AND xhpx.F_IsEffective = 1
  1216 + AND xh.Md IN ('{storeIdsStr}')
  1217 + AND xmzl.qt2 = '科美'
  1218 + AND xh.Hksj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  1219 + AND xh.Hksj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'";
  1220 +
  1221 + var consumeStatsResult = await _db.Ado.SqlQueryAsync<dynamic>(consumeStatsSql);
  1222 + var consumeCount = consumeStatsResult?.FirstOrDefault() != null
  1223 + ? Convert.ToInt32(consumeStatsResult.FirstOrDefault().ConsumeCount ?? 0)
  1224 + : 0;
  1225 + var consumeAmount = consumeStatsResult?.FirstOrDefault() != null
  1226 + ? Convert.ToDecimal(consumeStatsResult.FirstOrDefault().ConsumeAmount ?? 0)
  1227 + : 0m;
  1228 +
  1229 + // 退卡分析:退卡次数、退卡金额
  1230 + var refundStatsSql = $@"
  1231 + SELECT
  1232 + COUNT(DISTINCT hytk.F_Id) as RefundCount,
  1233 + COALESCE(SUM(CASE WHEN jksyj.F_ItemCategory = '科美' THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END), 0) as RefundAmount
  1234 + FROM lq_hytk_hytk hytk
  1235 + INNER JOIN lq_hytk_jksyj jksyj ON hytk.F_Id = jksyj.Gltkbh
  1236 + AND jksyj.F_IsEffective = 1
  1237 + AND jksyj.F_ItemCategory = '科美'
  1238 + AND jksyj.tksj >= '{startDate:yyyy-MM-dd} 00:00:00'
  1239 + AND jksyj.tksj <= '{endDate:yyyy-MM-dd} 23:59:59'
  1240 + WHERE hytk.F_IsEffective = 1
  1241 + AND hytk.md IN ('{storeIdsStr}')
  1242 + AND hytk.tksj >= '{startDate:yyyy-MM-dd} 00:00:00'
  1243 + AND hytk.tksj <= '{endDate:yyyy-MM-dd} 23:59:59'";
  1244 +
  1245 + var refundStatsResult = await _db.Ado.SqlQueryAsync<dynamic>(refundStatsSql);
  1246 + var refundCount = refundStatsResult?.FirstOrDefault() != null
  1247 + ? Convert.ToInt32(refundStatsResult.FirstOrDefault().RefundCount ?? 0)
  1248 + : 0;
  1249 + var refundAmount = refundStatsResult?.FirstOrDefault() != null
  1250 + ? Convert.ToDecimal(refundStatsResult.FirstOrDefault().RefundAmount ?? 0)
  1251 + : 0m;
  1252 +
  1253 + // 计算消耗率和退卡率
  1254 + var consumeRate = billingAmount > 0 ? (consumeAmount / billingAmount) * 100 : 0;
  1255 + var refundRate = billingAmount > 0 ? (refundAmount / billingAmount) * 100 : 0;
  1256 +
  1257 + var result = new TechDepartmentDashboardOperationStatisticsOutput
  1258 + {
  1259 + BillingAnalysis = new BillingAnalysis
  1260 + {
  1261 + BillingCount = billingCount,
  1262 + AverageBillingAmount = billingCount > 0 ? billingAmount / billingCount : 0
  1263 + },
  1264 + ConsumeAnalysis = new ConsumeAnalysis
  1265 + {
  1266 + ConsumeCount = consumeCount,
  1267 + ConsumeAmount = consumeAmount,
  1268 + ConsumeRate = consumeRate
  1269 + },
  1270 + RefundAnalysis = new RefundAnalysis
  1271 + {
  1272 + RefundCount = refundCount,
  1273 + RefundAmount = refundAmount,
  1274 + RefundRate = refundRate
  1275 + }
  1276 + };
  1277 +
  1278 + return result;
  1279 + }
  1280 + catch (Exception ex)
  1281 + {
  1282 + _logger.LogError(ex, "查询科技部驾驶舱运营统计数据失败");
  1283 + throw NCCException.Oh($"查询失败:{ex.Message}");
  1284 + }
  1285 + }
  1286 +
  1287 + /// <summary>
  1288 + /// 获取科技部驾驶舱对比分析数据
  1289 + /// </summary>
  1290 + /// <remarks>
  1291 + /// 获取指定科技部在指定月份的时间对比分析:环比对比(与上月对比)、同比对比(与去年同月对比)
  1292 + /// </remarks>
  1293 + /// <param name="input">查询参数</param>
  1294 + /// <returns>对比分析数据</returns>
  1295 + [HttpPost("GetComparisonAnalysis")]
  1296 + public async Task<TechDepartmentDashboardComparisonAnalysisOutput> GetComparisonAnalysis([FromBody] TechDepartmentDashboardStatisticsInput input)
  1297 + {
  1298 + try
  1299 + {
  1300 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  1301 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  1302 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  1303 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  1304 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  1305 +
  1306 + var currentMonth = DateTime.ParseExact(input.StatisticsMonth, "yyyyMM", null);
  1307 + var lastMonth = currentMonth.AddMonths(-1);
  1308 + var lastMonthStr = lastMonth.ToString("yyyyMM");
  1309 + var lastYearMonth = currentMonth.AddYears(-1);
  1310 + var lastYearMonthStr = lastYearMonth.ToString("yyyyMM");
  1311 +
  1312 + // 计算当月业绩
  1313 + List<string> currentStoreIds = await GetStoreIdsAsync(input);
  1314 + var (currentTraceability, currentCell, currentTotal) = await CalculateMonthlyPerformance(currentStoreIds, input.StatisticsMonth);
  1315 +
  1316 + // 计算上月业绩(环比)
  1317 + List<string> lastMonthStoreIds;
  1318 + if (!string.IsNullOrWhiteSpace(input.TechDepartmentId))
  1319 + {
  1320 + lastMonthStoreIds = await GetStoreIdsForMonthAsync(input.TechDepartmentId, null, lastMonthStr);
  1321 + }
  1322 + else
  1323 + {
  1324 + lastMonthStoreIds = input.StoreIds;
  1325 + }
  1326 + var (lastTraceability, lastCell, lastTotal) = await CalculateMonthlyPerformance(lastMonthStoreIds, lastMonthStr);
  1327 +
  1328 + // 计算去年同月业绩(同比)
  1329 + List<string> lastYearStoreIds;
  1330 + if (!string.IsNullOrWhiteSpace(input.TechDepartmentId))
  1331 + {
  1332 + lastYearStoreIds = await GetStoreIdsForMonthAsync(input.TechDepartmentId, null, lastYearMonthStr);
  1333 + }
  1334 + else
  1335 + {
  1336 + lastYearStoreIds = input.StoreIds;
  1337 + }
  1338 + var (lastYearTraceability, lastYearCell, lastYearTotal) = await CalculateMonthlyPerformance(lastYearStoreIds, lastYearMonthStr);
  1339 +
  1340 + // 计算环比变化率
  1341 + var momTraceabilityRate = lastTraceability > 0 ? ((currentTraceability - lastTraceability) / lastTraceability) * 100 : 0;
  1342 + var momCellRate = lastCell > 0 ? ((currentCell - lastCell) / lastCell) * 100 : 0;
  1343 + var momTotalRate = lastTotal > 0 ? ((currentTotal - lastTotal) / lastTotal) * 100 : 0;
  1344 +
  1345 + // 计算同比变化率
  1346 + var yoyTraceabilityRate = lastYearTraceability > 0 ? ((currentTraceability - lastYearTraceability) / lastYearTraceability) * 100 : 0;
  1347 + var yoyCellRate = lastYearCell > 0 ? ((currentCell - lastYearCell) / lastYearCell) * 100 : 0;
  1348 + var yoyTotalRate = lastYearTotal > 0 ? ((currentTotal - lastYearTotal) / lastYearTotal) * 100 : 0;
  1349 +
  1350 + var result = new TechDepartmentDashboardComparisonAnalysisOutput
  1351 + {
  1352 + TimeComparison = new TimeComparison
  1353 + {
  1354 + MonthOverMonth = new ComparisonData
  1355 + {
  1356 + TraceabilityAmountChangeRate = momTraceabilityRate,
  1357 + CellAmountChangeRate = momCellRate,
  1358 + TotalKemeiIncomeChangeRate = momTotalRate
  1359 + },
  1360 + YearOverYear = new ComparisonData
  1361 + {
  1362 + TraceabilityAmountChangeRate = yoyTraceabilityRate,
  1363 + CellAmountChangeRate = yoyCellRate,
  1364 + TotalKemeiIncomeChangeRate = yoyTotalRate
  1365 + }
  1366 + }
  1367 + };
  1368 +
  1369 + return result;
  1370 + }
  1371 + catch (Exception ex)
  1372 + {
  1373 + _logger.LogError(ex, "查询科技部驾驶舱对比分析数据失败");
  1374 + throw NCCException.Oh($"查询失败:{ex.Message}");
  1375 + }
  1376 + }
  1377 +
  1378 + /// <summary>
  1379 + /// 获取科技部驾驶舱门店明细列表
  1380 + /// </summary>
  1381 + /// <remarks>
  1382 + /// 获取指定科技部在指定月份的门店明细列表(支持分页、排序、筛选)
  1383 + /// </remarks>
  1384 + /// <param name="input">查询参数</param>
  1385 + /// <returns>门店明细列表</returns>
  1386 + [HttpPost("GetStoreDetailList")]
  1387 + public async Task<dynamic> GetStoreDetailList(
  1388 + [FromBody] TechDepartmentDashboardStoreDetailListInput input)
  1389 + {
  1390 + try
  1391 + {
  1392 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  1393 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  1394 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  1395 +
  1396 + var year = int.Parse(input.StatisticsMonth.Substring(0, 4));
  1397 + var month = int.Parse(input.StatisticsMonth.Substring(4, 2));
  1398 + var startDate = new DateTime(year, month, 1);
  1399 + var endDate = startDate.AddMonths(1).AddDays(-1);
  1400 + var endDateTime = input.StatisticsMonth == DateTime.Now.ToString("yyyyMM")
  1401 + ? DateTime.Now
  1402 + : startDate.AddMonths(1).AddSeconds(-1);
  1403 +
  1404 + var storeIds = await GetStoreIdsAsync(
  1405 + input.TechDepartmentId, input.StoreIds, input.StatisticsMonth);
  1406 +
  1407 + if (!storeIds.Any())
  1408 + {
  1409 + return PageResult<TechDepartmentDashboardStoreDetailListOutput>
  1410 + .SqlSugarPageResult(new SqlSugarPagedList<TechDepartmentDashboardStoreDetailListOutput>
  1411 + {
  1412 + list = new List<TechDepartmentDashboardStoreDetailListOutput>(),
  1413 + pagination = new SqlSugar.PagedModel
  1414 + {
  1415 + PageIndex = input.currentPage,
  1416 + PageSize = input.pageSize,
  1417 + Total = 0
  1418 + }
  1419 + });
  1420 + }
  1421 +
  1422 + var pageIndex = input.currentPage <= 0 ? 1 : input.currentPage;
  1423 + var pageSize = input.pageSize <= 0 ? 20 : input.pageSize;
  1424 +
  1425 + /* ==============================
  1426 + * ① 只查【门店分页】
  1427 + * ============================== */
  1428 + var storeQuery = _db.Queryable<LqMdxxEntity>()
  1429 + .Where(md => storeIds.Contains(md.Id));
  1430 +
  1431 + if (!string.IsNullOrWhiteSpace(input.StoreName))
  1432 + {
  1433 + storeQuery = storeQuery.Where(md => md.Dm.Contains(input.StoreName));
  1434 + }
  1435 +
  1436 + var total = await storeQuery.CountAsync();
  1437 +
  1438 + var pageStores = await storeQuery
  1439 + .OrderBy(md => md.Dm)
  1440 + .ToPageListAsync(pageIndex, pageSize);
  1441 +
  1442 + var pageStoreIds = pageStores.Select(x => x.Id).ToList();
  1443 +
  1444 + if (!pageStoreIds.Any())
  1445 + return PageResult<TechDepartmentDashboardStoreDetailListOutput>.SqlSugarPageResult(new SqlSugarPagedList<TechDepartmentDashboardStoreDetailListOutput>
  1446 + {
  1447 + list = new List<TechDepartmentDashboardStoreDetailListOutput>(),
  1448 + pagination = new SqlSugar.PagedModel { PageIndex = pageIndex, PageSize = pageSize, Total = 0 }
  1449 + });
  1450 +
  1451 + /* ==============================
  1452 + * ② 只对【当前页门店】做统计 - 开单数据
  1453 + * ============================== */
  1454 + var storeIdsStr = string.Join(",", pageStoreIds.Select(x => $"'{x}'"));
  1455 + var billingSql = $@"
  1456 + SELECT
  1457 + jksyj.F_StoreId AS StoreId,
  1458 + SUM(CASE WHEN jksyj.F_BeautyType IN ('溯源系统','溯源')
  1459 + THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END) AS BillingTraceabilityAmount,
  1460 + SUM(CASE WHEN jksyj.F_BeautyType IN ('cell','Cell')
  1461 + THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END) AS BillingCellAmount,
  1462 + COUNT(DISTINCT jksyj.Glkdbh) AS BillingCount
  1463 + FROM lq_kd_jksyj jksyj
  1464 + WHERE jksyj.F_IsEffective = 1
  1465 + AND jksyj.F_StoreId IN ({storeIdsStr})
  1466 + AND jksyj.yjsj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  1467 + AND jksyj.yjsj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'
  1468 + GROUP BY jksyj.F_StoreId";
  1469 +
  1470 + var billingStatList = await _db.Ado.SqlQueryAsync<StoreStatDto>(billingSql);
  1471 + var billingStatDict = billingStatList.ToDictionary(x => x.StoreId);
  1472 +
  1473 + /* ==============================
  1474 + * ③ 查询退卡数据
  1475 + * ============================== */
  1476 + var refundSql = $@"
  1477 + SELECT
  1478 + jksyj.F_StoreId AS StoreId,
  1479 + SUM(CASE WHEN jksyj.F_BeautyType IN ('溯源系统','溯源')
  1480 + THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END) AS RefundTraceabilityAmount,
  1481 + SUM(CASE WHEN jksyj.F_BeautyType IN ('cell','Cell')
  1482 + THEN CAST(jksyj.jksyj AS DECIMAL(18,2)) ELSE 0 END) AS RefundCellAmount
  1483 + FROM lq_hytk_jksyj jksyj
  1484 + WHERE jksyj.F_IsEffective = 1
  1485 + AND jksyj.F_StoreId IN ({storeIdsStr})
  1486 + AND jksyj.tksj >= '{startDate:yyyy-MM-dd 00:00:00}'
  1487 + AND jksyj.tksj <= '{endDate:yyyy-MM-dd 23:59:59}'
  1488 + GROUP BY jksyj.F_StoreId";
  1489 +
  1490 + var refundStatList = await _db.Ado.SqlQueryAsync<StoreRefundStatDto>(refundSql);
  1491 + var refundStatDict = refundStatList.ToDictionary(x => x.StoreId);
  1492 +
  1493 + /* ==============================
  1494 + * ④ 查询消耗次数和退卡次数
  1495 + * ============================== */
  1496 + var consumeSql = $@"
  1497 + SELECT
  1498 + hyhk.md AS StoreId,
  1499 + COUNT(DISTINCT hyhk.F_Id) AS ConsumeCount
  1500 + FROM lq_xh_hyhk hyhk
  1501 + WHERE hyhk.F_IsEffective = 1
  1502 + AND hyhk.md IN ({storeIdsStr})
  1503 + AND hyhk.Hksj >= '{startDate:yyyy-MM-dd HH:mm:ss}'
  1504 + AND hyhk.Hksj <= '{endDateTime:yyyy-MM-dd HH:mm:ss}'
  1505 + GROUP BY hyhk.md";
  1506 +
  1507 + var consumeStatList = await _db.Ado.SqlQueryAsync<StoreConsumeRefundCountDto>(consumeSql);
  1508 + var consumeStatDict = consumeStatList.ToDictionary(x => x.StoreId);
  1509 +
  1510 + var refundCountSql = $@"
  1511 + SELECT
  1512 + hytk.md AS StoreId,
  1513 + COUNT(DISTINCT hytk.F_Id) AS RefundCount
  1514 + FROM lq_hytk_hytk hytk
  1515 + WHERE hytk.F_IsEffective = 1
  1516 + AND hytk.md IN ({storeIdsStr})
  1517 + AND hytk.tksj >= '{startDate:yyyy-MM-dd 00:00:00}'
  1518 + AND hytk.tksj <= '{endDate:yyyy-MM-dd 23:59:59}'
  1519 + GROUP BY hytk.md";
  1520 +
  1521 + var refundCountStatList = await _db.Ado.SqlQueryAsync<StoreConsumeRefundCountDto>(refundCountSql);
  1522 + var refundCountStatDict = refundCountStatList.ToDictionary(x => x.StoreId);
  1523 +
  1524 + /* ==============================
  1525 + * ⑤ 内存合并 + 计算
  1526 + * ============================== */
  1527 + var resultList = pageStores.Select(md =>
  1528 + {
  1529 + billingStatDict.TryGetValue(md.Id, out var billingStat);
  1530 + refundStatDict.TryGetValue(md.Id, out var refundStat);
  1531 + consumeStatDict.TryGetValue(md.Id, out var consumeStat);
  1532 + refundCountStatDict.TryGetValue(md.Id, out var refundCountStat);
  1533 +
  1534 + var billingTrace = billingStat?.BillingTraceabilityAmount ?? 0m;
  1535 + var refundTrace = refundStat?.RefundTraceabilityAmount ?? 0m;
  1536 + var trace = billingTrace - refundTrace;
  1537 +
  1538 + var billingCell = billingStat?.BillingCellAmount ?? 0m;
  1539 + var refundCell = refundStat?.RefundCellAmount ?? 0m;
  1540 + var cell = billingCell - refundCell;
  1541 +
  1542 + return new TechDepartmentDashboardStoreDetailListOutput
  1543 + {
  1544 + StoreId = md.Id,
  1545 + StoreName = md.Dm,
  1546 + StoreType = md.StoreType,
  1547 + StoreCategory = md.StoreCategory,
  1548 + Month = input.StatisticsMonth,
  1549 + BillingTraceabilityAmount = billingTrace,
  1550 + RefundTraceabilityAmount = refundTrace,
  1551 + TraceabilityAmount = trace,
  1552 + BillingCellAmount = billingCell,
  1553 + RefundCellAmount = refundCell,
  1554 + CellAmount = cell,
  1555 + TotalKemeiIncome = trace + cell,
  1556 + BillingCount = billingStat?.BillingCount ?? 0,
  1557 + ConsumeCount = consumeStat?.ConsumeCount ?? 0,
  1558 + RefundCount = refundCountStat?.RefundCount ?? 0
  1559 + };
  1560 + }).ToList();
  1561 +
  1562 + return PageResult<TechDepartmentDashboardStoreDetailListOutput>
  1563 + .SqlSugarPageResult(new SqlSugarPagedList<TechDepartmentDashboardStoreDetailListOutput>
  1564 + {
  1565 + list = resultList,
  1566 + pagination = new SqlSugar.PagedModel
  1567 + {
  1568 + PageIndex = pageIndex,
  1569 + PageSize = pageSize,
  1570 + Total = total
  1571 + }
  1572 + });
  1573 + }
  1574 + catch (Exception ex)
  1575 + {
  1576 + _logger.LogError(ex, "查询科技部驾驶舱门店明细列表失败");
  1577 + throw NCCException.Oh($"查询失败:{ex.Message}");
  1578 + }
  1579 + }
  1580 +
  1581 + /// <summary>
  1582 + /// 获取科技部驾驶舱老师明细列表
  1583 + /// </summary>
  1584 + /// <remarks>
  1585 + /// 获取指定科技部在指定月份的科技部老师明细列表(支持分页、排序、筛选)
  1586 + /// </remarks>
  1587 + /// <param name="input">查询参数</param>
  1588 + /// <returns>老师明细列表</returns>
  1589 + [HttpPost("GetTeacherDetailList")]
  1590 + public async Task<dynamic> GetTeacherDetailList([FromBody] TechDepartmentDashboardTeacherDetailListInput input)
  1591 + {
  1592 + try
  1593 + {
  1594 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  1595 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  1596 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  1597 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  1598 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  1599 +
  1600 + var storeIds = await GetStoreIdsAsync(input.TechDepartmentId, input.StoreIds, input.StatisticsMonth);
  1601 + if (!storeIds.Any())
  1602 + {
  1603 + var emptyPagination = new SqlSugarPagedList<TechDepartmentDashboardTeacherDetailListOutput>
  1604 + {
  1605 + list = new List<TechDepartmentDashboardTeacherDetailListOutput>(),
  1606 + pagination = new SqlSugar.PagedModel { PageIndex = input.currentPage, PageSize = input.pageSize, Total = 0 }
  1607 + };
  1608 + return PageResult<TechDepartmentDashboardTeacherDetailListOutput>.SqlSugarPageResult(emptyPagination);
  1609 + }
  1610 +
  1611 + var query = _db.Queryable<LqTechTeacherSalaryStatisticsEntity>()
  1612 + .Where(x => x.StatisticsMonth == input.StatisticsMonth && storeIds.Contains(x.StoreId))
  1613 + .WhereIF(!string.IsNullOrWhiteSpace(input.TeacherName), x => x.EmployeeName.Contains(input.TeacherName))
  1614 + .WhereIF(!string.IsNullOrWhiteSpace(input.StoreId), x => x.StoreId == input.StoreId)
  1615 + .OrderBy(x => x.TotalPerformance, OrderByType.Desc);
  1616 +
  1617 + var result = await query.ToPagedListAsync(input.currentPage, input.pageSize);
  1618 + var outputList = result.list.Select(x => new TechDepartmentDashboardTeacherDetailListOutput
  1619 + {
  1620 + EmployeeId = x.EmployeeId ?? "",
  1621 + EmployeeName = x.EmployeeName ?? "",
  1622 + EmployeeAccount = x.EmployeeAccount ?? "",
  1623 + StoreId = x.StoreId ?? "",
  1624 + StoreName = x.StoreName ?? "",
  1625 + OrderAchievement = x.OrderAchievement,
  1626 + ConsumeAchievement = x.ConsumeAchievement,
  1627 + RefundAchievement = x.RefundAchievement,
  1628 + TotalPerformance = x.TotalPerformance,
  1629 + ProjectCount = x.ProjectCount,
  1630 + BaseSalary = x.BaseSalary,
  1631 + PerformanceCommissionAmount = x.PerformanceCommissionAmount,
  1632 + ConsumeCommissionAmount = x.ConsumeCommissionAmount,
  1633 + FinalGrossSalary = x.FinalGrossSalary
  1634 + }).ToList();
  1635 +
  1636 + return PageResult<TechDepartmentDashboardTeacherDetailListOutput>.SqlSugarPageResult(
  1637 + new SqlSugarPagedList<TechDepartmentDashboardTeacherDetailListOutput>
  1638 + {
  1639 + list = outputList,
  1640 + pagination = result.pagination
  1641 + });
  1642 + }
  1643 + catch (Exception ex)
  1644 + {
  1645 + _logger.LogError(ex, "查询科技部驾驶舱老师明细列表失败");
  1646 + throw NCCException.Oh($"查询失败:{ex.Message}");
  1647 + }
  1648 + }
  1649 +
  1650 + /// <summary>
  1651 + /// 获取科技部驾驶舱开单明细列表
  1652 + /// </summary>
  1653 + /// <remarks>
  1654 + /// 获取指定科技部在指定月份的科美开单明细列表(支持分页、排序、筛选)
  1655 + /// </remarks>
  1656 + /// <param name="input">查询参数</param>
  1657 + /// <returns>开单明细列表</returns>
  1658 + [HttpPost("GetBillingDetailList")]
  1659 + public async Task<dynamic> GetBillingDetailList([FromBody] TechDepartmentDashboardBillingDetailListInput input)
  1660 + {
  1661 + try
  1662 + {
  1663 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  1664 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  1665 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  1666 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  1667 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  1668 +
  1669 + var year = int.Parse(input.StatisticsMonth.Substring(0, 4));
  1670 + var month = int.Parse(input.StatisticsMonth.Substring(4, 2));
  1671 + var startDate = new DateTime(year, month, 1);
  1672 + var endDate = startDate.AddMonths(1).AddDays(-1);
  1673 + var endDateTime = input.StatisticsMonth == DateTime.Now.ToString("yyyyMM")
  1674 + ? DateTime.Now
  1675 + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  1676 +
  1677 + var storeIds = await GetStoreIdsAsync(input.TechDepartmentId, input.StoreIds, input.StatisticsMonth);
  1678 + if (!storeIds.Any())
  1679 + {
  1680 + var emptyPagination = new SqlSugarPagedList<TechDepartmentDashboardBillingDetailListOutput>
  1681 + {
  1682 + list = new List<TechDepartmentDashboardBillingDetailListOutput>(),
  1683 + pagination = new SqlSugar.PagedModel { PageIndex = input.currentPage, PageSize = input.pageSize, Total = 0 }
  1684 + };
  1685 + return PageResult<TechDepartmentDashboardBillingDetailListOutput>.SqlSugarPageResult(emptyPagination);
  1686 + }
  1687 +
  1688 + var query = _db.Queryable<LqKdJksyjEntity, LqKdKdjlbEntity, LqKhxxEntity, LqMdxxEntity>(
  1689 + (jksyj, kd, kh, md) => jksyj.Glkdbh == kd.Id && kd.Kdhy == kh.Id && jksyj.StoreId == md.Id)
  1690 + .Where((jksyj, kd, kh, md) => jksyj.IsEffective == 1 && kd.IsEffective == 1)
  1691 + .Where((jksyj, kd, kh, md) => storeIds.Contains(jksyj.StoreId))
  1692 + .Where((jksyj, kd, kh, md) => (jksyj.BeautyType == "溯源系统" || jksyj.BeautyType == "溯源" || jksyj.BeautyType == "cell" || jksyj.BeautyType == "Cell"))
  1693 + .Where((jksyj, kd, kh, md) => jksyj.Yjsj >= startDate && jksyj.Yjsj <= endDateTime)
  1694 + .WhereIF(!string.IsNullOrWhiteSpace(input.StoreId), (jksyj, kd, kh, md) => jksyj.StoreId == input.StoreId)
  1695 + .WhereIF(!string.IsNullOrWhiteSpace(input.MemberName), (jksyj, kd, kh, md) => kh.Khmc.Contains(input.MemberName))
  1696 + .WhereIF(!string.IsNullOrWhiteSpace(input.BeautyType), (jksyj, kd, kh, md) => jksyj.BeautyType.Contains(input.BeautyType))
  1697 + .OrderBy((jksyj, kd, kh, md) => jksyj.Yjsj, OrderByType.Desc);
  1698 +
  1699 + var result = await query.Select((jksyj, kd, kh, md) => new TechDepartmentDashboardBillingDetailListOutput
  1700 + {
  1701 + BillingId = kd.Id ?? "",
  1702 + StoreId = jksyj.StoreId ?? "",
  1703 + StoreName = md.Dm ?? "",
  1704 + MemberId = kd.Kdhy ?? "",
  1705 + MemberName = kh.Khmc ?? "",
  1706 + BeautyType = jksyj.BeautyType ?? "",
  1707 + BillingAmount = SqlFunc.ToDecimal(jksyj.Jksyj),
  1708 + ActualAmount = SqlFunc.ToDecimal(jksyj.Jksyj),
  1709 + BillingDate = jksyj.Yjsj,
  1710 + HealthCoachName = "",
  1711 + TechTeacherName = ""
  1712 + }).ToPagedListAsync(input.currentPage, input.pageSize);
  1713 +
  1714 + return PageResult<TechDepartmentDashboardBillingDetailListOutput>.SqlSugarPageResult(result);
  1715 + }
  1716 + catch (Exception ex)
  1717 + {
  1718 + _logger.LogError(ex, "查询科技部驾驶舱开单明细列表失败");
  1719 + throw NCCException.Oh($"查询失败:{ex.Message}");
  1720 + }
  1721 + }
  1722 +
  1723 + /// <summary>
  1724 + /// 获取科技部驾驶舱消耗明细列表
  1725 + /// </summary>
  1726 + /// <remarks>
  1727 + /// 获取指定科技部在指定月份的科美消耗明细列表(支持分页、排序、筛选)
  1728 + /// </remarks>
  1729 + /// <param name="input">查询参数</param>
  1730 + /// <returns>消耗明细列表</returns>
  1731 + [HttpPost("GetConsumeDetailList")]
  1732 + public async Task<dynamic> GetConsumeDetailList([FromBody] TechDepartmentDashboardConsumeDetailListInput input)
  1733 + {
  1734 + try
  1735 + {
  1736 + if (input == null) throw NCCException.Oh("请求参数不能为空");
  1737 + if (string.IsNullOrWhiteSpace(input.StatisticsMonth) || input.StatisticsMonth.Length != 6)
  1738 + throw NCCException.Oh("统计月份格式错误,必须为YYYYMM格式");
  1739 + if (string.IsNullOrWhiteSpace(input.TechDepartmentId) && (input.StoreIds == null || !input.StoreIds.Any()))
  1740 + throw NCCException.Oh("科技部ID和门店ID列表不能同时为空,必须传入其中一个");
  1741 +
  1742 + var year = int.Parse(input.StatisticsMonth.Substring(0, 4));
  1743 + var month = int.Parse(input.StatisticsMonth.Substring(4, 2));
  1744 + var startDate = new DateTime(year, month, 1);
  1745 + var endDate = startDate.AddMonths(1).AddDays(-1);
  1746 + var endDateTime = input.StatisticsMonth == DateTime.Now.ToString("yyyyMM")
  1747 + ? DateTime.Now
  1748 + : endDate.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
  1749 +
  1750 + var storeIds = await GetStoreIdsAsync(input.TechDepartmentId, input.StoreIds, input.StatisticsMonth);
  1751 + if (!storeIds.Any())
  1752 + {
  1753 + var emptyPagination = new SqlSugarPagedList<TechDepartmentDashboardConsumeDetailListOutput>
  1754 + {
  1755 + list = new List<TechDepartmentDashboardConsumeDetailListOutput>(),
  1756 + pagination = new SqlSugar.PagedModel { PageIndex = input.currentPage, PageSize = input.pageSize, Total = 0 }
  1757 + };
  1758 + return PageResult<TechDepartmentDashboardConsumeDetailListOutput>.SqlSugarPageResult(emptyPagination);
  1759 + }
  1760 +
  1761 + var query = _db.Queryable<LqXhHyhkEntity, LqXhPxmxEntity, LqXmzlEntity, LqKhxxEntity, LqMdxxEntity>(
  1762 + (xh, pxmx, xm, kh, md) => xh.Id == pxmx.ConsumeInfoId && pxmx.Px == xm.Id && xh.Hy == kh.Id && xh.Md == md.Id)
  1763 + .Where((xh, pxmx, xm, kh, md) => xh.IsEffective == 1 && pxmx.IsEffective == 1 && xm.Qt2 == "科美")
  1764 + .Where((xh, pxmx, xm, kh, md) => storeIds.Contains(xh.Md))
  1765 + .Where((xh, pxmx, xm, kh, md) => xh.Hksj >= startDate && xh.Hksj <= endDateTime)
  1766 + .WhereIF(!string.IsNullOrWhiteSpace(input.StoreId), (xh, pxmx, xm, kh, md) => xh.Md == input.StoreId)
  1767 + .WhereIF(!string.IsNullOrWhiteSpace(input.MemberName), (xh, pxmx, xm, kh, md) => kh.Khmc.Contains(input.MemberName))
  1768 + .OrderBy((xh, pxmx, xm, kh, md) => xh.Hksj, OrderByType.Desc);
  1769 +
  1770 + var result = await query.Select((xh, pxmx, xm, kh, md) => new TechDepartmentDashboardConsumeDetailListOutput
  1771 + {
  1772 + ConsumeId = xh.Id ?? "",
  1773 + StoreId = xh.Md ?? "",
  1774 + StoreName = md.Dm ?? "",
  1775 + MemberId = xh.Hy ?? "",
  1776 + MemberName = kh.Khmc ?? "",
  1777 + ItemId = xm.Id ?? "",
  1778 + ItemName = xm.Xmmc ?? "",
  1779 + BeautyType = xm.Qt2 ?? "",
  1780 + ConsumeAmount = pxmx.TotalPrice > 0 ? pxmx.TotalPrice : (pxmx.Pxjg * pxmx.ProjectNumber),
  1781 + ConsumeCount = pxmx.ProjectNumber,
  1782 + ConsumeDate = xh.Hksj,
  1783 + HealthCoachName = "",
  1784 + TechTeacherName = ""
  1785 + }).ToPagedListAsync(input.currentPage, input.pageSize);
  1786 +
  1787 + return PageResult<TechDepartmentDashboardConsumeDetailListOutput>.SqlSugarPageResult(result);
  1788 + }
  1789 + catch (Exception ex)
  1790 + {
  1791 + _logger.LogError(ex, "查询科技部驾驶舱消耗明细列表失败");
  1792 + throw NCCException.Oh($"查询失败:{ex.Message}");
  1793 + }
  1794 + }
  1795 + }
  1796 + public class StoreBaseDto
  1797 + {
  1798 + public string StoreId { get; set; }
  1799 + public string StoreName { get; set; }
  1800 + public int? StoreType { get; set; }
  1801 + public int? StoreCategory { get; set; }
  1802 + }
  1803 +
  1804 + public class StoreStatDto
  1805 + {
  1806 + public string StoreId { get; set; }
  1807 + public decimal BillingTraceabilityAmount { get; set; }
  1808 + public decimal BillingCellAmount { get; set; }
  1809 + public int BillingCount { get; set; }
  1810 + }
  1811 +
  1812 + public class StoreRefundStatDto
  1813 + {
  1814 + public string StoreId { get; set; }
  1815 + public decimal RefundTraceabilityAmount { get; set; }
  1816 + public decimal RefundCellAmount { get; set; }
  1817 + }
  1818 +
  1819 + public class StoreConsumeRefundCountDto
  1820 + {
  1821 + public string StoreId { get; set; }
  1822 + public int ConsumeCount { get; set; }
  1823 + public int RefundCount { get; set; }
  1824 + }
  1825 +}
  1826 +
... ...
sql/门店驾驶舱菜单配置.sql
... ... @@ -20,3 +20,5 @@ VALUES
20 20  
21 21  
22 22  
  23 +
  24 +
... ...
test_tech_dashboard_apis.py 0 → 100755
  1 +#!/usr/bin/env python3
  2 +# -*- coding: utf-8 -*-
  3 +"""
  4 +科技部驾驶舱接口测试脚本
  5 +测试所有13个接口,使用2025年12月的数据
  6 +"""
  7 +
  8 +import subprocess
  9 +import json
  10 +import sys
  11 +from datetime import datetime
  12 +
  13 +# 配置
  14 +BASE_URL = "http://localhost:2011"
  15 +API_BASE = f"{BASE_URL}/api/Extend/LqTechDepartmentDashboard"
  16 +TECH_DEPT_ID = "734725579919590661" # 科技一部ID
  17 +STATISTICS_MONTH = "202512" # 2025年12月
  18 +
  19 +# 测试结果
  20 +test_results = []
  21 +
  22 +def get_token():
  23 + """获取登录token"""
  24 + cmd = [
  25 + 'curl', '-s', '-X', 'POST', f'{BASE_URL}/api/oauth/Login',
  26 + '-H', 'Content-Type: application/x-www-form-urlencoded',
  27 + '-d', 'account=admin&password=e10adc3949ba59abbe56e057f20f883e'
  28 + ]
  29 + try:
  30 + result = subprocess.run(cmd, capture_output=True, text=True, timeout=10)
  31 + if result.returncode == 0:
  32 + data = json.loads(result.stdout)
  33 + if data.get('code') == 200:
  34 + token = data.get('data', {}).get('token', '')
  35 + return token
  36 + return None
  37 + except Exception as e:
  38 + print(f"获取Token失败: {e}")
  39 + return None
  40 +
  41 +def test_api(name, endpoint, method="POST", data=None):
  42 + """测试API接口"""
  43 + token = get_token()
  44 + if not token:
  45 + return {"name": name, "endpoint": endpoint, "success": False, "error": "Token获取失败"}
  46 +
  47 + headers = [
  48 + 'Authorization: ' + token,
  49 + 'Content-Type: application/json'
  50 + ]
  51 +
  52 + cmd = ['curl', '-s', '-X', method]
  53 + for h in headers:
  54 + cmd.extend(['-H', h])
  55 +
  56 + if data:
  57 + cmd.extend(['-d', json.dumps(data)])
  58 +
  59 + cmd.append(f"{API_BASE}/{endpoint}")
  60 +
  61 + try:
  62 + result = subprocess.run(cmd, capture_output=True, text=True, timeout=30)
  63 + if result.returncode == 0:
  64 + try:
  65 + response = json.loads(result.stdout)
  66 + success = response.get('code') == 200 or 'list' in response or 'TrendData' in response or 'RankingData' in response or 'DistributionData' in response
  67 + return {
  68 + "name": name,
  69 + "endpoint": endpoint,
  70 + "success": success,
  71 + "status_code": response.get('code', 'N/A'),
  72 + "has_data": 'data' in response or 'list' in response,
  73 + "error": None if success else response.get('msg', '未知错误')
  74 + }
  75 + except json.JSONDecodeError:
  76 + return {
  77 + "name": name,
  78 + "endpoint": endpoint,
  79 + "success": False,
  80 + "error": f"JSON解析失败: {result.stdout[:100]}"
  81 + }
  82 + else:
  83 + return {
  84 + "name": name,
  85 + "endpoint": endpoint,
  86 + "success": False,
  87 + "error": f"请求失败: {result.stderr}"
  88 + }
  89 + except subprocess.TimeoutExpired:
  90 + return {
  91 + "name": name,
  92 + "endpoint": endpoint,
  93 + "success": False,
  94 + "error": "请求超时"
  95 + }
  96 + except Exception as e:
  97 + return {
  98 + "name": name,
  99 + "endpoint": endpoint,
  100 + "success": False,
  101 + "error": str(e)
  102 + }
  103 +
  104 +def main():
  105 + """主测试函数"""
  106 + print("=" * 70)
  107 + print("科技部驾驶舱接口测试")
  108 + print("=" * 70)
  109 + print(f"测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
  110 + print(f"测试月份: {STATISTICS_MONTH}")
  111 + print(f"科技部ID: {TECH_DEPT_ID}")
  112 + print("=" * 70)
  113 + print()
  114 +
  115 + # 基础请求参数
  116 + base_input = {
  117 + "techDepartmentId": TECH_DEPT_ID,
  118 + "statisticsMonth": STATISTICS_MONTH
  119 + }
  120 +
  121 + # 定义所有接口
  122 + apis = [
  123 + ("GetStatistics", "GetStatistics", "POST", base_input),
  124 + ("GetShareStatistics", "GetShareStatistics", "POST", base_input),
  125 + ("GetPerformanceTrend", "GetPerformanceTrend", "POST", {**base_input, "monthCount": 12}),
  126 + ("GetShareTrend", "GetShareTrend", "POST", {**base_input, "monthCount": 12}),
  127 + ("GetStoreRanking", "GetStoreRanking", "POST", base_input),
  128 + ("GetStoreDistribution", "GetStoreDistribution", "POST", base_input),
  129 + ("GetTeacherRanking", "GetTeacherRanking", "POST", base_input),
  130 + ("GetOperationStatistics", "GetOperationStatistics", "POST", base_input),
  131 + ("GetComparisonAnalysis", "GetComparisonAnalysis", "POST", base_input),
  132 + ("GetStoreDetailList", "GetStoreDetailList", "POST", {**base_input, "currentPage": 1, "pageSize": 10}),
  133 + ("GetTeacherDetailList", "GetTeacherDetailList", "POST", {**base_input, "currentPage": 1, "pageSize": 10}),
  134 + ("GetBillingDetailList", "GetBillingDetailList", "POST", {**base_input, "currentPage": 1, "pageSize": 10}),
  135 + ("GetConsumeDetailList", "GetConsumeDetailList", "POST", {**base_input, "currentPage": 1, "pageSize": 10}),
  136 + ]
  137 +
  138 + # 测试每个接口
  139 + print("开始测试接口...")
  140 + print()
  141 +
  142 + for name, endpoint, method, data in apis:
  143 + print(f"测试 {name}...", end=" ", flush=True)
  144 + result = test_api(name, endpoint, method, data)
  145 + test_results.append(result)
  146 +
  147 + if result['success']:
  148 + print("✅ 成功")
  149 + else:
  150 + print(f"❌ 失败: {result.get('error', '未知错误')}")
  151 +
  152 + # 输出测试报告
  153 + print()
  154 + print("=" * 70)
  155 + print("测试结果汇总")
  156 + print("=" * 70)
  157 +
  158 + success_count = sum(1 for r in test_results if r['success'])
  159 + total_count = len(test_results)
  160 +
  161 + print(f"总计: {total_count} 个接口")
  162 + print(f"成功: {success_count} 个")
  163 + print(f"失败: {total_count - success_count} 个")
  164 + print()
  165 +
  166 + # 详细结果
  167 + print("详细结果:")
  168 + for result in test_results:
  169 + status = "✅" if result['success'] else "❌"
  170 + print(f"{status} {result['name']}: {result['endpoint']}")
  171 + if not result['success']:
  172 + print(f" 错误: {result.get('error', '未知错误')}")
  173 +
  174 + print()
  175 + print("=" * 70)
  176 +
  177 + # 生成测试报告文件
  178 + report_lines = [
  179 + "# 科技部驾驶舱接口测试报告",
  180 + "",
  181 + f"**测试时间**:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}",
  182 + f"**测试月份**:{STATISTICS_MONTH}",
  183 + "",
  184 + "---",
  185 + "",
  186 + "## 接口测试结果",
  187 + ""
  188 + ]
  189 +
  190 + for result in test_results:
  191 + report_lines.extend([
  192 + f"### {result['name']}",
  193 + "",
  194 + f"**接口**:`POST /api/Extend/LqTechDepartmentDashboard/{result['endpoint']}`",
  195 + "",
  196 + f"**接口说明**:{result['name']}",
  197 + "",
  198 + f"**接口请求参数**:",
  199 + "```json",
  200 + json.dumps(apis[[a[0] for a in apis].index(result['name'])][3], ensure_ascii=False, indent=2),
  201 + "```",
  202 + "",
  203 + f"**接口返回结果**:{'一致' if result['success'] else '失败'}",
  204 + "",
  205 + f"**接口是否报错**:{'否' if result['success'] else '是'}",
  206 + "",
  207 + ""
  208 + ])
  209 +
  210 + report_content = "\n".join(report_lines)
  211 +
  212 + with open('docs/科技部驾驶舱接口测试报告.md', 'w', encoding='utf-8') as f:
  213 + f.write(report_content)
  214 +
  215 + print(f"测试报告已保存到: docs/科技部驾驶舱接口测试报告.md")
  216 +
  217 + return 0 if success_count == total_count else 1
  218 +
  219 +if __name__ == '__main__':
  220 + sys.exit(main())
  221 +
... ...