@layer utilities{.text-balance{text-wrap:balance}.text-shadow{text-shadow:0 2px 4px rgba(0,0,0,.1)}.transition-transform-opacity{transition-property:transform,opacity}.grid-masonry{grid-template-rows:masonry}.backdrop-blur{backdrop-filter:blur(8px)}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.3)}html{scroll-behavior:smooth}.lazy-image{opacity:0;transition:opacity .5s ease-in-out}.lazy-image.loaded{opacity:1}.project-card{transition:transform .3s,box-shadow .3s;cursor:pointer}.project-card:hover{transform:translateY(-5px);box-shadow:0 10px 25px -5px rgba(0,0,0,.1)}.project-modal-wrapper{width:100%;height:100%}.project-modal-container{margin:auto}@media (max-width:768px){.project-modal-container{max-height:95vh;max-width:95vw}.project-modal-content{-webkit-overflow-scrolling:touch}}@media (min-width:769px){.project-modal-container{width:100%!important;height:100%!important;max-width:100%!important;max-height:100%!important;overflow:hidden!important}.project-modal-left{height:100%;overflow:hidden}.project-modal-right{height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch}.project-modal-left .relative.w-full,.project-modal-left .video-frame-wrapper{max-height:100vh}}.navbar-fixed{backdrop-filter:blur(10px);background-color:rgba(255,255,255,.8);box-shadow:0 1px 3px rgba(0,0,0,.1)}.navbar-mobile{transform:translateX(-100%);transition:transform .3s ease-in-out}.navbar-mobile.open{transform:translateX(0)}.lang-switch{position:relative;overflow:hidden}.lang-switch span{display:inline-block}.lang-switch span.hidden{display:none!important}.fade-in{opacity:0;transform:translateY(20px);transition:opacity .6s,transform .6s}.fade-in.visible{opacity:1;transform:translateY(0)}.parallax{background-attachment:fixed;background-position:center;background-repeat:no-repeat;background-size:cover}.loader{width:48px;height:48px;border:3px solid rgba(0,0,0,.1);border-radius:50%;border-top-color:#000;animation:1s ease-in-out infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.ripple{position:relative;overflow:hidden}.ripple:after{content:"";display:block;position:absolute;width:100%;height:100%;top:0;left:0;pointer-events:none;background-image:radial-gradient(circle,#000 10%,transparent 10.01%);background-repeat:no-repeat;background-position:50%;transform:scale(10,10);opacity:0;transition:transform .5s,opacity .3s}.ripple:active:after{transform:scale(0,0);opacity:.3;transition:none}