@keyframes fadeIn{from{opacity:0}to{opacity:1}}@keyframes fadeInUp{from{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInDown{from{opacity:0;transform:translateY(-30px)}to{opacity:1;transform:translateY(0)}}@keyframes fadeInLeft{from{opacity:0;transform:translateX(-30px)}to{opacity:1;transform:translateX(0)}}@keyframes fadeInRight{from{opacity:0;transform:translateX(30px)}to{opacity:1;transform:translateX(0)}}@keyframes slideUp{from{transform:translateY(50px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes slideDown{from{transform:translateY(-50px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes scaleIn{from{transform:scale(0.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes scaleInCenter{from{transform:scale(0.5);opacity:0}to{transform:scale(1);opacity:1}}@keyframes zoomIn{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes bounceIn{0%{transform:scale(0.3);opacity:0}50%{transform:scale(1.05);opacity:1}70%{transform:scale(0.9)}100%{transform:scale(1)}}@keyframes rotateIn{from{transform:rotate(-180deg) scale(0.5);opacity:0}to{transform:rotate(0) scale(1);opacity:1}}@keyframes flipInX{from{transform:perspective(400px) rotateX(90deg);opacity:0}to{transform:perspective(400px) rotateX(0);opacity:1}}@keyframes flipInY{from{transform:perspective(400px) rotateY(90deg);opacity:0}to{transform:perspective(400px) rotateY(0);opacity:1}}@keyframes pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}@keyframes shake{0%,100%{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-10px)}20%,40%,60%,80%{transform:translateX(10px)}}@keyframes swing{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}100%{transform:rotate(0deg)}}@keyframes glow{0%,100%{box-shadow:0 0 5px rgba(100,255,218,0.3)}50%{box-shadow:0 0 20px rgba(100,255,218,0.6),0 0 30px rgba(100,255,218,0.4)}}@keyframes gradientShift{0%{background-position:0% 50%}50%{background-position:100% 50%}100%{background-position:0% 50%}}@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-20px)}}.fade-in{animation:fadeIn 0.6s ease-out forwards}.fade-in-up{animation:fadeInUp 0.6s ease-out forwards}.fade-in-down{animation:fadeInDown 0.6s ease-out forwards}.fade-in-left{animation:fadeInLeft 0.6s ease-out forwards}.fade-in-right{animation:fadeInRight 0.6s ease-out forwards}.slide-up{animation:slideUp 0.6s ease-out forwards}.slide-down{animation:slideDown 0.6s ease-out forwards}.scale-in{animation:scaleIn 0.4s ease-out forwards}.scale-in-center{animation:scaleInCenter 0.5s ease-out forwards}.zoom-in{animation:zoomIn 0.5s ease-out forwards}.bounce-in{animation:bounceIn 0.8s ease-out forwards}.rotate-in{animation:rotateIn 0.6s ease-out forwards}.flip-in-x{animation:flipInX 0.6s ease-out forwards}.flip-in-y{animation:flipInY 0.6s ease-out forwards}.pulse{animation:pulse 2s ease-in-out infinite}.shake{animation:shake 0.5s ease-in-out}.swing{animation:swing 1s ease-in-out}.glow{animation:glow 2s ease-in-out infinite}.float{animation:float 3s ease-in-out infinite}.stagger-1{animation-delay:0.1s}.stagger-2{animation-delay:0.2s}.stagger-3{animation-delay:0.3s}.stagger-4{animation-delay:0.4s}.stagger-5{animation-delay:0.5s}.stagger-6{animation-delay:0.6s}.stagger-7{animation-delay:0.7s}.stagger-8{animation-delay:0.8s}.stagger-9{animation-delay:0.9s}.stagger-10{animation-delay:1s}.duration-fast{animation-duration:0.3s}.duration-normal{animation-duration:0.6s}.duration-slow{animation-duration:1s}.duration-slower{animation-duration:1.5s}.ease-in{animation-timing-function:ease-in}.ease-out{animation-timing-function:ease-out}.ease-in-out{animation-timing-function:ease-in-out}.linear{animation-timing-function:linear}.scroll-reveal{opacity:0;transition:opacity 0.6s ease-out,transform 0.6s ease-out}.scroll-reveal.revealed{opacity:1}.scroll-reveal-up{opacity:0;transform:translateY(50px)}.scroll-reveal-up.revealed{opacity:1;transform:translateY(0)}.scroll-reveal-down{opacity:0;transform:translateY(-50px)}.scroll-reveal-down.revealed{opacity:1;transform:translateY(0)}.scroll-reveal-left{opacity:0;transform:translateX(-50px)}.scroll-reveal-left.revealed{opacity:1;transform:translateX(0)}.scroll-reveal-right{opacity:0;transform:translateX(50px)}.scroll-reveal-right.revealed{opacity:1;transform:translateX(0)}.scroll-reveal-scale{opacity:0;transform:scale(0.8)}.scroll-reveal-scale.revealed{opacity:1;transform:scale(1)}.hover-lift{transition:transform 0.3s ease,box-shadow 0.3s ease}.hover-lift:hover{transform:translateY(-8px);box-shadow:0 15px 30px rgba(0,0,0,0.3)}.hover-grow{transition:transform 0.3s ease}.hover-grow:hover{transform:scale(1.05)}.hover-shrink{transition:transform 0.3s ease}.hover-shrink:hover{transform:scale(0.95)}.hover-rotate{transition:transform 0.3s ease}.hover-rotate:hover{transform:rotate(5deg)}.hover-glow{transition:box-shadow 0.3s ease}.hover-glow:hover{box-shadow:0 0 20px rgba(100,255,218,0.6),0 0 40px rgba(100,255,218,0.3)}.spinner{border:3px solid rgba(100,255,218,0.1);border-top:3px solid var(--primary-color,#64ffda);border-radius:50%;width:40px;height:40px;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.dots-loading{display:inline-flex;gap:8px}.dots-loading span{width:8px;height:8px;border-radius:50%;background-color:var(--primary-color,#64ffda);animation:dotPulse 1.4s ease-in-out infinite}.dots-loading span:nth-child(2){animation-delay:0.2s}.dots-loading span:nth-child(3){animation-delay:0.4s}@keyframes dotPulse{0%,80%,100%{opacity:0.3;transform:scale(0.8)}40%{opacity:1;transform:scale(1)}}.ripple{position:relative;overflow:hidden}.ripple::after{content:'';position:absolute;top:50%;left:50%;width:0;height:0;border-radius:50%;background:rgba(255,255,255,0.5);transform:translate(-50%,-50%);transition:width 0.6s,height 0.6s}.ripple:active::after{width:300px;height:300px}@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important;scroll-behavior:auto !important}.scroll-reveal,.scroll-reveal-up,.scroll-reveal-down,.scroll-reveal-left,.scroll-reveal-right,.scroll-reveal-scale{opacity:1;transform:none}.pulse,.float,.glow,.blob{animation:none !important}}.paused{animation-play-state:paused}.running{animation-play-state:running}.infinite{animation-iteration-count:infinite}.once{animation-iteration-count:1}.forwards{animation-fill-mode:forwards}.backwards{animation-fill-mode:backwards}.both{animation-fill-mode:both}.ripple-effect{position:absolute;border-radius:50%;background:rgba(255,255,255,0.6);transform:scale(0);animation:ripple-animation 0.6s ease-out;pointer-events:none}@keyframes ripple-animation{to{transform:scale(4);opacity:0}}.card-elevated{transform:translateY(-8px);box-shadow:0 15px 30px rgba(0,0,0,0.3);transition:transform 0.3s ease,box-shadow 0.3s ease}.btn.loading{position:relative;color:transparent;pointer-events:none}.btn.loading .spinner{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);display:inline-block}.scroll-indicator{position:fixed;top:0;left:0;height:3px;background:linear-gradient(90deg,var(--primary-color,#64ffda),var(--secondary-color,#7b5cff));z-index:9999;transition:width 0.1s ease-out}*:focus-visible{outline:2px solid var(--primary-color,#64ffda);outline-offset:2px;border-radius:4px}.btn:active{transform:scale(0.98)}a:not(.btn){position:relative}a:not(.btn)::after{content:'';position:absolute;bottom:-2px;left:0;width:0;height:2px;background:var(--primary-color,#64ffda);transition:width 0.3s ease}a:not(.btn):hover::after{width:100%}.image-zoom{overflow:hidden}.image-zoom img{transition:transform 0.5s ease}.image-zoom:hover img{transform:scale(1.1)}.tooltip{position:relative}.tooltip::before{content:attr(data-tooltip);position:absolute;bottom:100%;left:50%;transform:translateX(-50%) translateY(-8px);padding:8px 12px;background:rgba(0,0,0,0.9);color:white;border-radius:4px;font-size:14px;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 0.3s ease,transform 0.3s ease}.tooltip:hover::before{opacity:1;transform:translateX(-50%) translateY(-4px)}.progress-bar{position:relative;height:8px;background:rgba(100,255,218,0.1);border-radius:4px;overflow:hidden}.progress-bar-fill{height:100%;background:linear-gradient(90deg,var(--primary-color,#64ffda),var(--secondary-color,#7b5cff));border-radius:4px;transition:width 1s ease-out}.skeleton{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0 50%,#f0f0f0 75%);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite}@keyframes skeleton-loading{0%{background-position:200% 0}100%{background-position:-200% 0}}.notification{position:fixed;top:20px;right:20px;padding:16px 24px;background:white;border-radius:8px;box-shadow:0 4px 12px rgba(0,0,0,0.15);transform:translateX(400px);transition:transform 0.3s ease;z-index:10000}.notification.show{transform:translateX(0)}.notification.success{border-left:4px solid #4caf50}.notification.error{border-left:4px solid #f44336}.notification.info{border-left:4px solid #2196f3}.fade-out{animation:fadeOut 0.5s ease-out forwards}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.slide-out-up{animation:slideOutUp 0.5s ease-out forwards}@keyframes slideOutUp{from{transform:translateY(0);opacity:1}to{transform:translateY(-50px);opacity:0}}.slide-out-down{animation:slideOutDown 0.5s ease-out forwards}@keyframes slideOutDown{from{transform:translateY(0);opacity:1}to{transform:translateY(50px);opacity:0}}.attention-shake{animation:attentionShake 0.5s ease-in-out}@keyframes attentionShake{0%,100%{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-5px)}20%,40%,60%,80%{transform:translateX(5px)}}.attention-pulse{animation:attentionPulse 1s ease-in-out}@keyframes attentionPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}.scroll-progress{position:fixed;top:0;left:0;width:0%;height:3px;background:linear-gradient(90deg,var(--primary-color,#64ffda),var(--secondary-color,#7b5cff));z-index:9999;transition:width 0.1s ease-out}.project-card.filtering-out{animation:projectFilterOut 0.4s cubic-bezier(0.4,0,0.6,1) forwards}.project-card.filtering-in{animation:projectFilterIn 0.5s cubic-bezier(0.34,1.56,0.64,1) forwards}@keyframes projectFilterOut{0%{opacity:1;transform:scale(1) translateY(0)}50%{opacity:0.5;transform:scale(0.95) translateY(-10px)}100%{opacity:0;transform:scale(0.85) translateY(-20px);pointer-events:none}}@keyframes projectFilterIn{0%{opacity:0;transform:scale(0.85) translateY(20px)}60%{opacity:0.8;transform:scale(1.02) translateY(-5px)}100%{opacity:1;transform:scale(1) translateY(0)}}.projects-grid.reflowing{transition:all 0.4s cubic-bezier(0.4,0,0.2,1)}.project-card.filtering-in:nth-child(1){animation-delay:0.05s}.project-card.filtering-in:nth-child(2){animation-delay:0.1s}.project-card.filtering-in:nth-child(3){animation-delay:0.15s}.project-card.filtering-in:nth-child(4){animation-delay:0.2s}.project-card.filtering-in:nth-child(5){animation-delay:0.25s}.project-card.filtering-in:nth-child(6){animation-delay:0.3s}.project-skeleton{background:rgba(17,34,64,0.7);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1px solid rgba(100,255,218,0.1);border-radius:var(--border-radius-md,8px);overflow:hidden;height:100%;display:flex;flex-direction:column;animation:skeletonPulse 1.5s ease-in-out infinite}@keyframes skeletonPulse{0%,100%{opacity:1}50%{opacity:0.6}}.project-skeleton-image{width:100%;height:200px;background:linear-gradient(90deg,rgba(100,255,218,0.05) 0%,rgba(100,255,218,0.15) 50%,rgba(100,255,218,0.05) 100%);background-size:200% 100%;animation:skeletonShimmer 2s ease-in-out infinite}.project-skeleton-content{padding:1.5rem;flex:1;display:flex;flex-direction:column;gap:1rem}.project-skeleton-tags{display:flex;gap:0.5rem}.project-skeleton-tag{width:60px;height:24px;background:rgba(100,255,218,0.1);border-radius:4px;animation:skeletonShimmer 2s ease-in-out infinite}.project-skeleton-tag:nth-child(2){width:70px;animation-delay:0.2s}.project-skeleton-tag:nth-child(3){width:80px;animation-delay:0.4s}.project-skeleton-title{width:80%;height:28px;background:rgba(100,255,218,0.1);border-radius:4px;animation:skeletonShimmer 2s ease-in-out infinite;animation-delay:0.1s}.project-skeleton-description{width:100%;height:60px;background:rgba(100,255,218,0.05);border-radius:4px;animation:skeletonShimmer 2s ease-in-out infinite;animation-delay:0.2s}.project-skeleton-links{display:flex;gap:0.5rem;margin-top:auto}.project-skeleton-link{width:80px;height:36px;background:rgba(100,255,218,0.1);border-radius:4px;animation:skeletonShimmer 2s ease-in-out infinite}.project-skeleton-link:nth-child(2){animation-delay:0.3s}@keyframes skeletonShimmer{0%{background-position:-200% 0}100%{background-position:200% 0}}.filter-btn.activating{animation:filterBtnActivate 0.3s cubic-bezier(0.34,1.56,0.64,1)}@keyframes filterBtnActivate{0%{transform:scale(1)}50%{transform:scale(1.1)}100%{transform:scale(1)}}.projects-empty-state{text-align:center;padding:4rem 2rem;opacity:0;animation:fadeInUp 0.6s ease-out 0.3s forwards}.projects-empty-state i{font-size:4rem;color:var(--primary-color,#64ffda);opacity:0.3;margin-bottom:1rem;display:block}.projects-empty-state h3{font-size:1.5rem;color:var(--text-color,#e6f1ff);margin-bottom:0.5rem}.projects-empty-state p{color:var(--text-color-light,#8892b0)}.projects-grid{transition:grid-template-columns 0.3s ease,gap 0.3s ease}.project-card.filtered-out{display:none}.project-card.filtered-in{display:flex}@media (prefers-reduced-motion:reduce){.project-card.filtering-out,.project-card.filtering-in{animation:none !important;transition:opacity 0.01ms !important}.project-skeleton{animation:none !important}.project-skeleton-image,.project-skeleton-tag,.project-skeleton-title,.project-skeleton-description,.project-skeleton-link{animation:none !important}.filter-btn.activating{animation:none !important}}img.lazy-loading{background:linear-gradient(90deg,var(--surface-color,#112240) 0%,rgba(100,255,218,0.1) 50%,var(--surface-color,#112240) 100%);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;min-height:200px;border-radius:var(--border-radius-sm,4px)}img.lazy-loaded{animation:fadeIn 0.4s ease-out}img.lazy-error{opacity:0.3;filter:grayscale(100%);background:rgba(244,67,54,0.1)}.lazy-bg{background-size:cover;background-position:center;background-repeat:no-repeat;position:relative}.lazy-bg::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(90deg,var(--surface-color,#112240) 0%,rgba(100,255,218,0.1) 50%,var(--surface-color,#112240) 100%);background-size:200% 100%;animation:skeleton-loading 1.5s ease-in-out infinite;z-index:1}.lazy-bg.loaded::before{animation:fadeOut 0.4s ease-out forwards}@media (prefers-reduced-motion:reduce){img.lazy-loading{animation:none;background:var(--surface-color,#112240)}img.lazy-loaded{animation:none}.lazy-bg::before{animation:none}}