logo.svgblame
View source
b69ab311<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none" id="grove-svg" class="grove-interactive">
3e3af552 <defs>
b69ab313 <style>
b69ab314 .grove-interactive {
b69ab315 cursor: pointer;
b69ab316 transition: transform 0.5s cubic-bezier(0.25, 1, 0.5, 1);
b69ab317 }
b69ab318 .grove-interactive:hover {
b69ab319 transform: translateY(-2px);
b69ab3110 }
b69ab3111 .bg-circle {
b69ab3112 transition: fill 0.6s ease;
b69ab3113 }
b69ab3114 .grove-interactive:hover .bg-circle {
b69ab3115 fill: #467d6d;
b69ab3116 }
b69ab3117 #tree-group {
b69ab3118 transform-origin: 30px 52px;
b69ab3119 transform: rotate(var(--sway, 0deg));
b69ab3120 transition: transform 0.15s ease-out;
b69ab3121 }
b69ab3122 .grove-interactive:not(:hover) #tree-group {
b69ab3123 transition: transform 0.8s cubic-bezier(0.34, 1.56, 0.64, 1);
b69ab3124 }
b69ab3125 .branch {
b69ab3126 transition: stroke-width 0.5s cubic-bezier(0.25, 1, 0.5, 1);
b69ab3127 }
b69ab3128 .grove-interactive:hover .b-main { stroke-width: 4.5; transition-delay: 0s; }
b69ab3129 .grove-interactive:hover .b-left1 { stroke-width: 3; transition-delay: 0.05s; }
b69ab3130 .grove-interactive:hover .b-right { stroke-width: 3.5; transition-delay: 0.1s; }
b69ab3131 .grove-interactive:hover .b-left2 { stroke-width: 2.5; transition-delay: 0.15s; }
b69ab3132 .node {
b69ab3133 transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
b69ab3134 }
b69ab3135 .n-root { transform-origin: 30px 52px; }
b69ab3136 .n-top { transform-origin: 34px 8px; }
b69ab3137 .n-right { transform-origin: 48px 23px; }
b69ab3138 .n-left1 { transform-origin: 14px 33px; }
b69ab3139 .n-left2 { transform-origin: 19px 11px; }
b69ab3140 .grove-interactive:hover .node {
b69ab3141 transform: scale(1.25);
b69ab3142 }
b69ab3143 .grove-interactive:hover .n-root { transition-delay: 0s; }
b69ab3144 .grove-interactive:hover .n-left1 { transition-delay: 0.05s; }
b69ab3145 .grove-interactive:hover .n-right { transition-delay: 0.1s; }
b69ab3146 .grove-interactive:hover .n-left2 { transition-delay: 0.15s; }
b69ab3147 .grove-interactive:hover .n-top { transition-delay: 0.2s; }
b69ab3148 </style>
3e3af5549 </defs>
3e3af5550
b69ab3151 <circle cx="32" cy="32" r="32" fill="#4d8a78" class="bg-circle"/>
3e3af5552
b69ab3153 <g id="tree-group">
b69ab3154 <path class="branch b-main" d="M30,52 C29,44 33,37 31,30 C29,23 32,16 34,8" stroke="white" stroke-width="4" fill="none" stroke-linecap="round"/>
b69ab3155 <path class="branch b-right" d="M32,31 C37,28 42,26 48,23" stroke="white" stroke-width="3" fill="none" stroke-linecap="round"/>
b69ab3156 <path class="branch b-left1" d="M30,40 C25,37 20,35 14,33" stroke="white" stroke-width="2.5" fill="none" stroke-linecap="round"/>
b69ab3157 <path class="branch b-left2" d="M33,18 C29,15 24,13 19,11" stroke="white" stroke-width="2" fill="none" stroke-linecap="round"/>
3e3af5558
b69ab3159 <circle class="node n-root" cx="30" cy="52" r="4" fill="white"/>
b69ab3160 <circle class="node n-top" cx="34" cy="8" r="3.5" fill="white"/>
b69ab3161 <circle class="node n-right" cx="48" cy="23" r="3.5" fill="white"/>
b69ab3162 <circle class="node n-left1" cx="14" cy="33" r="3" fill="white"/>
b69ab3163 <circle class="node n-left2" cx="19" cy="11" r="2.5" fill="white"/>
b69ab3164 </g>
b69ab3165
b69ab3166 <script type="text/javascript">
b69ab3167 <![CDATA[
b69ab3168 (function() {
b69ab3169 var svg = document.getElementById('grove-svg');
b69ab3170 var MAX_SWAY = 6;
b69ab3171
b69ab3172 svg.addEventListener('mousemove', function(e) {
b69ab3173 var rect = svg.getBoundingClientRect();
b69ab3174 var relX = ((e.clientX - rect.left) / rect.width - 0.5) * 2;
b69ab3175 var angle = relX * MAX_SWAY;
b69ab3176 svg.style.setProperty('--sway', angle + 'deg');
b69ab3177 });
b69ab3178
b69ab3179 svg.addEventListener('mouseleave', function() {
b69ab3180 svg.style.setProperty('--sway', '0deg');
b69ab3181 });
b69ab3182 })();
b69ab3183 ]]>
b69ab3184 </script>
b69ab3185</svg>