<script type="text/paperscript" canvas="myCanvas">
    
    var fillColor = '#FA565F';
    
    var values = {
        friction: 5.8,
        timeStep: 0.03,
        amount: 17,
        mass: 9,
        count: 0
    };
    
    values.invMass = 1 / values.mass;

    var path, springs;
    var size = view.size * [1.2, 1];

    var Spring = function(a, b, strength, restLength) {
        this.a = a;
        this.b = b;
        this.restLength = restLength || 80;
        this.strength = strength ? strength : 0.55;
        this.mamb = values.invMass * values.invMass;
    };

    Spring.prototype.update = function() {
        var delta = this.b - this.a;
        var dist = delta.length;
        var normDistStrength = (dist - this.restLength) /
                (dist * this.mamb) * this.strength;
        delta.y *= normDistStrength * values.invMass * 0.2;
        if (!this.a.fixed)
            this.a.y += delta.y;
        if (!this.b.fixed)
            this.b.y -= delta.y;
    };


    function createPath(strength) {
        var path = new Path({
            fillColor: fillColor
        });
        springs = [];
        for (var i = 0; i <= values.amount; i++) {
            var segment = path.add(new Point(i / values.amount, 0.5) * size);
            var point = segment.point;
            if (i == 0 || i == values.amount)
                point.y += size.height;
            point.px = point.x;
            point.py = point.y;
            // The first two and last two points are fixed:
            point.fixed = i < 2 || i > values.amount - 2;
            if (i > 0) {
                var spring = new Spring(segment.previous.point, point, strength);
                springs.push(spring);
            }
        }
        path.position.x -= size.width / 4;
        return path;
    }

    function onResize() {
        if (path)
            path.remove();
        size = view.bounds.size * [2, 1];
        path = createPath(0.1);
    }

    function onMouseMove(event) {
        var location = path.getNearestLocation(event.point);
        var segment = location.segment;
        var point = segment.point;

        if (!point.fixed && location.distance < size.height / 4) {
            var y = event.point.y;
            point.y += (y - point.y) / 6;
            if (segment.previous && !segment.previous.fixed) {
                var previous = segment.previous.point;
                previous.y += (y - previous.y) / 24;
            }
            if (segment.next && !segment.next.fixed) {
                var next = segment.next.point;
                next.y += (y - next.y) / 24;
            }
        }
    }

    function onFrame(event) {
        updateWave(path);
    }

    function updateWave(path) {
        var force = 1 - values.friction * values.timeStep * values.timeStep;
        for (var i = 0, l = path.segments.length; i < l; i++) {
            var point = path.segments[i].point;
            var dy = (point.y - point.py) * force;
            point.py = point.y;
            point.y = Math.max(point.y + dy, 0);
        }

        for (var j = 0, l = springs.length; j < l; j++) {
            springs[j].update();
        }
        path.smooth();
    }

    function onKeyDown(event) {
        if (event.key == 'space') {
            path.fullySelected = !path.fullySelected;
            path.fillColor = path.fullySelected ? null : 'black';
        }
    }
</script>
    
<canvas resize="true" id="myCanvas"></canvas>
    
<h1>AWESOME</h1>
    
    
    
    
<!-- Link to my website -->
<a id="ajerez" href="http://www.ajerez.es/en/" target="_blank"><img src="https://i.imgur.com/MzfXtni.png"/></a>
@import url(https://fonts.googleapis.com/css?family=Open+Sans:800);

$color1: #05A9A0;

*, *:before, *:after {
  box-sizing: border-box;
}

html {
    background-color: $color1;
    height: 100%;
}

h1 {
    cursor: move;
    color: white;
    width: 100%;
    position: absolute;
    top: 5px;
    text-align: center;
    line-height: 40px;    
    font-size: 13em;
    font-family: 'Open Sans', sans-serif;
    mix-blend-mode: difference;
}
canvas {
    height: 300px;
    width: 90%;
    margin: 5px 5%;
    position: relative;
    border-radius: 50px;
    border: 5px solid #FA565F;
}
View Compiled
/* 
 * Paper.js and CSS mix-blend-mode
 * A pen by Alberto Jerez
 * www.ajerez.es
 */

// http://paperjs.org/examples/future-splash/
// https://developer.mozilla.org/es/docs/Web/CSS/mix-blend-mode

External CSS

  1. https://codepen.io/ajerez/pen/PqbdWK.scss

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.9.22/paper-full.min.js