/* Skills Section Styles - Interactive Circular Progress */ .skills { position: relative; overflow: hidden; padding: 6rem 0; } .skills::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-image: url('/static/image/image.png'); background-size: cover; background-position: center; background-repeat: no-repeat; opacity: 0.08; z-index: 0; } .tech-stack-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(400px, 1fr)); gap: 4rem; position: relative; z-index: 1; } .tech-category { background: var(--dark-light); padding: 3rem 2rem; border-radius: 20px; border: 1px solid var(--border); transition: all 0.3s ease; box-shadow: 0 10px 30px var(--shadow); } .tech-category:hover { transform: translateY(-10px); box-shadow: 0 20px 50px rgba(99, 102, 241, 0.2); } .tech-category h3 { margin-bottom: 3rem; color: var(--white); font-size: 1.5rem; font-weight: 600; display: flex; align-items: center; gap: 1rem; text-align: center; justify-content: center; } .tech-category h3 i { color: var(--primary); font-size: 1.8rem; } .tech-icons { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 2.5rem; justify-items: center; padding: 1rem 0; } .tech-icon { position: relative; cursor: pointer; transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1); padding: 1.5rem; border-radius: 20px; background: rgba(255, 255, 255, 0.03); border: 1px solid rgba(99, 102, 241, 0.1); min-height: 120px; display: flex; flex-direction: column; align-items: center; justify-content: center; } .tech-icon:hover { transform: translateY(-10px) scale(1.05); background: rgba(255, 255, 255, 0.08); border-color: rgba(99, 102, 241, 0.3); box-shadow: 0 20px 40px rgba(99, 102, 241, 0.15); } .icon-container { display: flex; flex-direction: column; align-items: center; margin-bottom: 1rem; transition: all 0.3s ease; } .icon-container i, .icon-container [class*="devicon-"], .icon-container .custom-tech-icon { font-size: 3.5rem !important; margin-bottom: 0.8rem; transition: all 0.3s ease; filter: drop-shadow(0 0 15px rgba(0, 0, 0, 0.2)); display: inline-block; line-height: 1; } /* Custom icon styling */ .icon-container .custom-tech-icon { width: 3.5rem; height: 3.5rem; object-fit: contain; border-radius: 8px; } .tech-icon:hover .icon-container i { filter: brightness(1.2) drop-shadow(0 0 20px currentColor); transform: scale(1.1); } .tech-icon:hover .icon-container [class*="devicon-"] { filter: brightness(1.1) drop-shadow(0 0 15px rgba(0,0,0,0.3)); transform: scale(1.1); } .tech-icon:hover .icon-container .custom-tech-icon { filter: brightness(1.1) drop-shadow(0 0 15px rgba(0,0,0,0.4)); transform: scale(1.1); } .tech-name { color: var(--light); font-size: 0.95rem; font-weight: 600; text-align: center; margin-top: 0.5rem; transition: all 0.3s ease; } .tech-icon:hover .tech-name { color: var(--white); transform: translateY(-2px); } .skill-circle { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); display: flex; align-items: center; justify-content: center; width: 100px; height: 100px; opacity: 0; transition: opacity 0.4s ease; } .tech-icon:hover .skill-circle { opacity: 1; } .progress-ring { position: absolute; top: 0; left: 0; transform: rotate(-90deg); width: 100px; height: 100px; } .progress-ring-circle { stroke: rgba(99, 102, 241, 0.2); stroke-width: 6; fill: transparent; stroke-dasharray: 188.5; stroke-dashoffset: 188.5; transition: stroke-dashoffset 2s cubic-bezier(0.4, 0, 0.2, 1); stroke-linecap: round; } .tech-icon:hover .progress-ring-circle { stroke: var(--primary); stroke-width: 8; filter: drop-shadow(0 0 10px rgba(99, 102, 241, 0.6)); } .percentage { position: absolute; font-size: 0.8rem; font-weight: 600; color: var(--white); opacity: 0; transition: opacity 0.3s ease; } .tech-icon:hover .percentage { opacity: 1; } /* Animation keyframes */ @keyframes fillCircle { from { stroke-dashoffset: 188.5; } to { stroke-dashoffset: var(--target-offset); } } /* Tech Stack Icons - Clean approach */ /* Reset any inherited colors and let icons use their natural colors */ .tech-icon .icon-container i, .tech-icon .icon-container [class*="devicon-"] { color: initial !important; } /* Brand colors for specific technologies */ .tech-icon .icon-container .devicon-python-plain.colored { background: linear-gradient(45deg, #306998, #FFD43B); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; } .tech-icon .icon-container .devicon-javascript-plain.colored { color: #f7df1e !important; text-shadow: 0 0 10px rgba(247, 223, 30, 0.5); } .tech-icon .icon-container .devicon-html5-plain.colored { color: #e34c26 !important; text-shadow: 0 0 10px rgba(227, 76, 38, 0.5); } .tech-icon .icon-container .devicon-postgresql-plain.colored { color: #336791 !important; text-shadow: 0 0 10px rgba(51, 103, 145, 0.5); } .tech-icon .icon-container .devicon-redis-plain.colored { color: #dc382d !important; text-shadow: 0 0 10px rgba(220, 56, 45, 0.5); } .tech-icon .icon-container .devicon-mongodb-plain.colored { color: #47a248 !important; text-shadow: 0 0 10px rgba(71, 162, 72, 0.5); } .tech-icon .icon-container .devicon-docker-plain.colored { color: #0db7ed !important; text-shadow: 0 0 10px rgba(13, 183, 237, 0.5); } .tech-icon .icon-container .devicon-tensorflow-original.colored { color: #ff6f00 !important; text-shadow: 0 0 10px rgba(255, 111, 0, 0.5); } .tech-icon .icon-container .devicon-pytorch-original.colored { color: #ee4c2c !important; text-shadow: 0 0 10px rgba(238, 76, 44, 0.5); } .tech-icon .icon-container .devicon-kubernetes-plain.colored { color: #326ce5 !important; text-shadow: 0 0 10px rgba(50, 108, 229, 0.5); } .tech-icon .icon-container .devicon-fastapi-plain.colored { color: #009688 !important; text-shadow: 0 0 10px rgba(0, 150, 136, 0.5); } .tech-icon .icon-container .devicon-django-plain.colored { color: #092e20 !important; text-shadow: 0 0 10px rgba(9, 46, 32, 0.5); } .tech-icon .icon-container .devicon-flask-original.colored { color: #ffffff !important; text-shadow: 0 0 10px rgba(0, 0, 0, 0.8); } .tech-icon .icon-container .devicon-grafana-plain.colored { color: #ff6600 !important; text-shadow: 0 0 10px rgba(255, 102, 0, 0.5); } .tech-icon .icon-container .devicon-sqldeveloper-plain.colored { color: #f29111 !important; text-shadow: 0 0 10px rgba(242, 145, 17, 0.5); } /* FontAwesome fallback icons - custom colors */ .tech-icon .icon-container i.fas.fa-robot { color: #ff9500; /* Hugging Face orange */ } .tech-icon .icon-container i.fas.fa-brain { color: #00d4aa; /* OpenAI teal */ } .tech-icon .icon-container i.fas.fa-link { color: #1c1c1c; /* Langchain dark */ } .tech-icon .icon-container i.fas.fa-table { color: #f29111; /* SQL orange */ } .tech-icon .icon-container i.fas.fa-database { color: #c72e2e; /* MinIO red */ } .tech-icon .icon-container i.fas.fa-fire { color: #e6522c; /* Prometheus orange */ } .tech-icon .icon-container i.fas.fa-search { color: #f4b942; /* Loki yellow */ } /* Hover effects to maintain visibility */ .tech-icon:hover .icon-container i { filter: brightness(1.2) drop-shadow(0 0 20px currentColor); } .tech-icon:hover .icon-container [class*="devicon-"] { filter: brightness(1.1) drop-shadow(0 0 15px rgba(0,0,0,0.3)); } .tech-icon:hover .icon-container .custom-tech-icon { filter: brightness(1.1) drop-shadow(0 0 15px rgba(0,0,0,0.4)); }