diff --git a/README.md b/README.md index 70c8865..7338d58 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Other Peeps' Open Source Code I Used: - [minpubsub](https://github.com/daniellmb/MinPubSub) - [balloon.css](https://kazzkiq.github.io/balloon.css/) - [simple sharing buttons](https://simplesharingbuttons.com/) +- [icons][https://css.gg/) Check out these [user-made LOOPY's!](http://ncase.me/loopy/v1.1/pages/examples) diff --git a/v1.2/css/balloon.css b/v1.2/css/balloon.css new file mode 100755 index 0000000..3677a2b --- /dev/null +++ b/v1.2/css/balloon.css @@ -0,0 +1,174 @@ +button[data-balloon] { + overflow: visible; + } + [data-balloon] { + position: relative; + } + [data-balloon]:before, + [data-balloon]:after { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + -khtml-opacity: 0; + -moz-opacity: 0; + opacity: 0; + pointer-events: none; + -webkit-transition: all 0.1s ease-out 0.1s; + transition: all 0.1s ease-out 0.1s; + bottom: 100%; + left: 50%; + position: absolute; + z-index: 10; + -webkit-transform: translate(-50%, 10px); + -ms-transform: translate(-50%, 10px); + transform: translate(-50%, 10px); + -webkit-transform-origin: top; + -ms-transform-origin: top; + transform-origin: top; + } + [data-balloon]:after { + background: rgba(17, 17, 17, 0.9); + border-radius: 4px; + color: #fff; + content: attr(data-balloon); + font-size: 18px; + padding: .5em 1em; + white-space: nowrap; + margin-bottom: 11px; + } + [data-balloon]:before { + background: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%280%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat; + background-size: 100% auto; + height: 6px; + width: 18px; + content: ""; + margin-bottom: 5px; + } + [data-balloon]:hover:before, + [data-balloon][data-balloon-visible]:before, + [data-balloon]:hover:after, + [data-balloon][data-balloon-visible]:after { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + filter: alpha(opacity=100); + -khtml-opacity: 1; + -moz-opacity: 1; + opacity: 1; + pointer-events: auto; + -webkit-transform: translate(-50%, 0); + -ms-transform: translate(-50%, 0); + transform: translate(-50%, 0); + } + [data-balloon].font-awesome:after { + font-family: FontAwesome; + } + [data-balloon][data-balloon-break]:after { + white-space: pre; + } + [data-balloon-pos="down"]:before, + [data-balloon-pos="down"]:after { + bottom: auto; + left: 50%; + top: 100%; + -webkit-transform: translate(-50%, -10px); + -ms-transform: translate(-50%, -10px); + transform: translate(-50%, -10px); + } + [data-balloon-pos="down"]:after { + margin-top: 11px; + } + [data-balloon-pos="down"]:before { + background: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%28180%2018%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat; + background-size: 100% auto; + height: 6px; + width: 18px; + margin-top: 5px; + margin-bottom: 0; + } + [data-balloon-pos="down"]:hover:before, + [data-balloon-pos="down"][data-balloon-visible]:before, + [data-balloon-pos="down"]:hover:after, + [data-balloon-pos="down"][data-balloon-visible]:after { + -webkit-transform: translate(-50%, 0); + -ms-transform: translate(-50%, 0); + transform: translate(-50%, 0); + } + [data-balloon-pos="left"]:before, + [data-balloon-pos="left"]:after { + bottom: auto; + left: auto; + right: 100%; + top: 50%; + -webkit-transform: translate(10px, -50%); + -ms-transform: translate(10px, -50%); + transform: translate(10px, -50%); + } + [data-balloon-pos="left"]:after { + margin-right: 11px; + } + [data-balloon-pos="left"]:before { + background: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%28-90%2018%2018%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat; + background-size: 100% auto; + height: 18px; + width: 6px; + margin-right: 5px; + margin-bottom: 0; + } + [data-balloon-pos="left"]:hover:before, + [data-balloon-pos="left"][data-balloon-visible]:before, + [data-balloon-pos="left"]:hover:after, + [data-balloon-pos="left"][data-balloon-visible]:after { + -webkit-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); + } + [data-balloon-pos="right"]:before, + [data-balloon-pos="right"]:after { + bottom: auto; + left: 100%; + top: 50%; + -webkit-transform: translate(-10px, -50%); + -ms-transform: translate(-10px, -50%); + transform: translate(-10px, -50%); + } + [data-balloon-pos="right"]:after { + margin-left: 11px; + } + [data-balloon-pos="right"]:before { + background: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba%2817,%2017,%2017,%200.9%29%22%20transform%3D%22rotate%2890%206%206%29%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E') no-repeat; + background-size: 100% auto; + height: 18px; + width: 6px; + margin-bottom: 0; + margin-left: 5px; + } + [data-balloon-pos="right"]:hover:before, + [data-balloon-pos="right"][data-balloon-visible]:before, + [data-balloon-pos="right"]:hover:after, + [data-balloon-pos="right"][data-balloon-visible]:after { + -webkit-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); + } + [data-balloon-length]:after { + white-space: normal; + } + [data-balloon-length="small"]:after { + width: 80px; + } + [data-balloon-length="medium"]:after { + width: 150px; + } + [data-balloon-length="large"]:after { + width: 260px; + } + [data-balloon-length="xlarge"]:after { + width: 90vw; + } + @media screen and (min-width: 768px) { + [data-balloon-length="xlarge"]:after { + width: 380px; + } + } + [data-balloon-length="fit"]:after { + width: 100%; + } + \ No newline at end of file diff --git a/v1.2/css/gg.css b/v1.2/css/gg.css new file mode 100644 index 0000000..76903d1 --- /dev/null +++ b/v1.2/css/gg.css @@ -0,0 +1 @@ +.gg-abstract{box-sizing:border-box;position:relative;display:block;width:14px;height:14px;transform:scale(var(--ggs,1));border-right:3px solid;border-top:3px solid}.gg-abstract::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;left:0;bottom:0;border:3px solid;border-radius:12px}.gg-add-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-add-r::after,.gg-add-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:5px;top:8px;left:4px}.gg-add-r::after{width:2px;height:10px;top:4px;left:8px}.gg-add{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:22px}.gg-add::after,.gg-add::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:5px;top:8px;left:4px}.gg-add::after{width:2px;height:10px;top:4px;left:8px}.gg-adidas{position:relative;box-sizing:border-box;display:block;width:23px;height:15px;transform:scale(var(--ggs,1));overflow:hidden}.gg-adidas::before{content:"";position:absolute;box-sizing:border-box;display:block;width:5px;height:18px;background:currentColor;transform:rotate(-30deg);left:4px;bottom:-14px;box-shadow:7px -2px,14px -4px}.gg-airplane{box-sizing:border-box;position:relative;display:block;width:18px;height:18px;transform:scale(var(--ggs,1));background:linear-gradient(to left,currentColor 22px,transparent 0) no-repeat center/16px 2px,radial-gradient(circle,currentColor 60%,transparent 40%) no-repeat right center/2px 2px}.gg-airplane::after,.gg-airplane::before{content:"";display:block;position:absolute;box-sizing:border-box;width:10px;height:8px;border-right:4px solid}.gg-airplane::before{border-top-right-radius:2px;top:0;transform:perspective(10px)rotateX(10deg)skewX(30deg);box-shadow:-4px 3px 0 -2px}.gg-airplane::after{border-bottom-right-radius:2px;bottom:0;transform:perspective(10px)rotateX(-10deg)skewX(-30deg);box-shadow:-4px -3px 0 -2px}.gg-alarm{background:linear-gradient( to left,currentColor 5px,transparent 0)no-repeat 4.5px 6px/5px 2px,linear-gradient( to left,currentColor 7px,transparent 0)no-repeat 4.5px 2px/2px 6px;box-sizing:border-box;position:relative;display:block;width:16px;height:16px;border-radius:100%;border:2px solid transparent;transform:scale(var(--ggs,1));box-shadow:0 0 0 2px}.gg-alarm::after,.gg-alarm::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:2px;background:currentColor;top:-4px}.gg-alarm::before{left:-5px;transform:rotate(-42deg)}.gg-alarm::after{transform:rotate(42deg);right:-5px}.gg-album{box-sizing:border-box;position:relative;display:block;width:18px;height:18px;transform:scale(var(--ggs,1));border-left:7px solid transparent;border-right:3px solid transparent;border-bottom:8px solid transparent;box-shadow:0 0 0 2px,inset 6px 4px 0 -4px,inset -6px 4px 0 -4px;border-radius:3px}.gg-album::after,.gg-album::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:5px;background:currentColor;transform:rotate(46deg);top:5px;right:4px}.gg-album::after{transform:rotate(-46deg);right:2px}.gg-align-bottom{box-sizing:border-box;position:relative;display:block;height:12px;width:12px;border-bottom:2px solid;transform:scale(var(--ggs,1));margin-top:4px}.gg-align-bottom::after,.gg-align-bottom::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;background:currentColor;bottom:2px}.gg-align-bottom::before{left:1px;height:12px}.gg-align-bottom::after{height:6px;right:1px;opacity:.5}.gg-align-center{box-sizing:border-box;position:relative;display:block;height:12px;width:12px;border-top:2px solid transparent;transform:scale(var(--ggs,1));margin-left:-4px}.gg-align-center::after,.gg-align-center::before{content:"";display:block;box-sizing:border-box;position:absolute;height:4px;background:currentColor}.gg-align-center::before{left:2px;width:12px;top:-2px}.gg-align-center::after{width:6px;right:1px;top:4px;opacity:.5}.gg-align-left{box-sizing:border-box;position:relative;display:block;height:12px;width:12px;border-left:2px solid;transform:scale(var(--ggs,1));margin-left:-4px}.gg-align-left::after,.gg-align-left::before{content:"";display:block;box-sizing:border-box;position:absolute;height:4px;width:12px;background:currentColor;left:2px;top:1px}.gg-align-left::after{width:6px;top:7px;opacity:.5}.gg-align-middle{box-sizing:border-box;position:relative;display:block;height:12px;width:12px;transform:scale(var(--ggs,1));border-top:2px solid transparent;margin-top:-8px}.gg-align-middle::after,.gg-align-middle::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;background:currentColor}.gg-align-middle::before{left:1px;height:12px;top:2px}.gg-align-middle::after{height:6px;right:1px;top:5px;opacity:.5}.gg-align-right{box-sizing:border-box;position:relative;display:block;height:12px;width:12px;border-right:2px solid;transform:scale(var(--ggs,1));margin-right:-4px}.gg-align-right::after,.gg-align-right::before{content:"";display:block;box-sizing:border-box;position:absolute;height:4px;width:12px;background:currentColor;right:2px;top:1px}.gg-align-right::after{width:6px;top:7px;opacity:.5}.gg-align-top{box-sizing:border-box;position:relative;display:block;height:12px;width:12px;border-top:2px solid;transform:scale(var(--ggs,1));margin-top:-4px}.gg-align-top::after,.gg-align-top::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;background:currentColor;top:2px}.gg-align-top::before{left:1px;height:12px}.gg-align-top::after{height:6px;right:1px;opacity:.5}.gg-anchor{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:14px;background:currentColor;border-radius:8px}.gg-anchor::after,.gg-anchor::before{content:"";display:block;box-sizing:border-box;position:absolute;height:6px;border:2px solid}.gg-anchor::after{width:12px;border-bottom-left-radius:20px;border-bottom-right-radius:20px;border-top-color:transparent;left:-5px;bottom:2px}.gg-anchor::before{width:6px;border-radius:8px;top:-4px;left:-2px}.gg-apple-watch{background:linear-gradient( to left,currentColor 5px,transparent 0)no-repeat 13px 4px/2px 4px;box-sizing:border-box;position:relative;display:block;width:24px;height:24px;border:5px solid transparent;transform:scale(var(--ggs,1));border-radius:9px;box-shadow:inset 0 0 0 2px}.gg-apple-watch::after,.gg-apple-watch::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:10px;height:5px;border:2px solid;border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0;left:2px}.gg-apple-watch::after{top:-3px}.gg-apple-watch::before{transform:scaleY(-1);top:12px}.gg-arrange-back{box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));display:block;width:18px;height:18px}.gg-arrange-back::after,.gg-arrange-back::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrange-back::after{width:10px;height:10px;border:2px solid;left:4px;top:4px}.gg-arrange-back::before{width:8px;height:8px;background:currentColor;box-shadow:10px 10px 0}.gg-arrange-front{box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));display:block;width:18px;height:18px}.gg-arrange-front::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;border:2px solid;left:4px;top:4px;box-shadow:-5px -5px 0 -1px,5px 5px 0 -1px}.gg-arrow-align-h{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:10px;background:linear-gradient(to left,currentColor 15px,transparent 0)no-repeat 2px 4px/6px 2px,linear-gradient(to left,currentColor 15px,transparent 0)no-repeat 12px 4px/6px 2px,linear-gradient(to left,currentColor 15px,transparent 0)no-repeat center/2px 10px}.gg-arrow-align-h::after,.gg-arrow-align-h::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);top:2px}.gg-arrow-align-h::after{border-bottom:2px solid;border-left:2px solid;left:1px}.gg-arrow-align-h::before{border-top:2px solid;border-right:2px solid;right:1px}.gg-arrow-align-v{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:20px;background:linear-gradient(to left,currentColor 15px,transparent 0)no-repeat 4px 2px/2px 6px,linear-gradient(to left,currentColor 15px,transparent 0)no-repeat 4px 12px/2px 6px,linear-gradient(to left,currentColor 15px,transparent 0)no-repeat center/10px 2px}.gg-arrow-align-v::after,.gg-arrow-align-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(-45deg);left:2px}.gg-arrow-align-v::after{border-bottom:2px solid;border-left:2px solid;bottom:1px}.gg-arrow-align-v::before{border-top:2px solid;border-right:2px solid;top:1px}.gg-arrow-bottom-left-o{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:20px}.gg-arrow-bottom-left-o::after,.gg-arrow-bottom-left-o::before{content:"";display:block;box-sizing:border-box;position:absolute;left:4px}.gg-arrow-bottom-left-o::after{width:10px;height:2px;background:currentColor;transform:rotate(-45deg);bottom:8px}.gg-arrow-bottom-left-o::before{width:6px;height:6px;bottom:4px;border-bottom:2px solid;border-left:2px solid}.gg-arrow-bottom-left-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-arrow-bottom-left-r::after,.gg-arrow-bottom-left-r::before{content:"";display:block;box-sizing:border-box;position:absolute;left:4px}.gg-arrow-bottom-left-r::after{width:10px;height:2px;background:currentColor;transform:rotate(-45deg);bottom:8px}.gg-arrow-bottom-left-r::before{width:6px;height:6px;bottom:4px;border-bottom:2px solid;border-left:2px solid}.gg-arrow-bottom-left{box-sizing:border-box;position:relative;display:block;width:8px;height:8px;border-bottom:2px solid;transform:scale(var(--ggs,1));border-left:2px solid}.gg-arrow-bottom-left::after{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:2px;background:currentColor;transform:rotate(-45deg);bottom:3px;left:-3px}.gg-arrow-bottom-right-o{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:20px}.gg-arrow-bottom-right-o::after,.gg-arrow-bottom-right-o::before{content:"";display:block;box-sizing:border-box;position:absolute;right:4px}.gg-arrow-bottom-right-o::after{width:10px;height:2px;background:currentColor;transform:rotate(45deg);bottom:8px}.gg-arrow-bottom-right-o::before{width:6px;height:6px;bottom:4px;border-bottom:2px solid;border-right:2px solid}.gg-arrow-bottom-right-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-arrow-bottom-right-r::after,.gg-arrow-bottom-right-r::before{content:"";display:block;box-sizing:border-box;position:absolute;right:4px}.gg-arrow-bottom-right-r::after{width:10px;height:2px;background:currentColor;transform:rotate(45deg);bottom:8px}.gg-arrow-bottom-right-r::before{width:6px;height:6px;bottom:4px;border-bottom:2px solid;border-right:2px solid}.gg-arrow-bottom-right{box-sizing:border-box;position:relative;display:block;width:8px;height:8px;border-bottom:2px solid;transform:scale(var(--ggs,1));border-right:2px solid}.gg-arrow-bottom-right::after{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:2px;background:currentColor;transform:rotate(45deg);bottom:3px;right:-3px}.gg-arrow-down-o{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:20px}.gg-arrow-down-o::after,.gg-arrow-down-o::before{content:"";display:block;box-sizing:border-box;position:absolute;bottom:4px}.gg-arrow-down-o::after{width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(-45deg);left:6px}.gg-arrow-down-o::before{width:2px;height:10px;left:8px;background:currentColor}.gg-arrow-down-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-arrow-down-r::after,.gg-arrow-down-r::before{content:"";display:block;box-sizing:border-box;position:absolute;bottom:4px}.gg-arrow-down-r::after{width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(-45deg);left:6px}.gg-arrow-down-r::before{width:2px;height:10px;left:8px;background:currentColor}.gg-arrow-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-arrow-down::after,.gg-arrow-down::before{content:"";display:block;box-sizing:border-box;position:absolute;bottom:4px}.gg-arrow-down::after{width:8px;height:8px;border-bottom:2px solid;border-left:2px solid;transform:rotate(-45deg);left:7px}.gg-arrow-down::before{width:2px;height:16px;left:10px;background:currentColor}.gg-arrow-left-o{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:22px}.gg-arrow-left-o::after,.gg-arrow-left-o::before{content:"";display:block;box-sizing:border-box;position:absolute;left:4px}.gg-arrow-left-o::after{width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);bottom:6px}.gg-arrow-left-o::before{width:10px;height:2px;bottom:8px;background:currentColor}.gg-arrow-left-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-arrow-left-r::after,.gg-arrow-left-r::before{content:"";display:block;box-sizing:border-box;position:absolute;left:4px}.gg-arrow-left-r::after{width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);bottom:6px}.gg-arrow-left-r::before{width:10px;height:2px;bottom:8px;background:currentColor}.gg-arrow-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-arrow-left::after,.gg-arrow-left::before{content:"";display:block;box-sizing:border-box;position:absolute;left:3px}.gg-arrow-left::after{width:8px;height:8px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);bottom:7px}.gg-arrow-left::before{width:16px;height:2px;bottom:10px;background:currentColor}.gg-arrow-long-down-c{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;border-top:4px solid transparent;box-shadow:inset 0 0 0 2px;height:24px;width:6px}.gg-arrow-long-down-c::after,.gg-arrow-long-down-c::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-down-c::after{width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);bottom:0;left:-2px}.gg-arrow-long-down-c::before{width:6px;height:6px;border:2px solid;border-radius:8px;top:-4px;left:-2px}.gg-arrow-long-down-e{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;border-top:4px solid transparent;box-shadow:inset 0 0 0 2px;height:24px;width:6px}.gg-arrow-long-down-e::after,.gg-arrow-long-down-e::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-down-e::after{width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);bottom:0;left:-2px}.gg-arrow-long-down-e::before{width:6px;height:6px;border:2px solid;top:-5px;left:-2px}.gg-arrow-long-down-l{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;box-shadow:inset 0 0 0 2px;height:24px;width:6px}.gg-arrow-long-down-l::after,.gg-arrow-long-down-l::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-down-l::after{width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);bottom:0;left:-2px}.gg-arrow-long-down-l::before{width:6px;height:2px;background:currentColor;top:-1px;left:-2px}.gg-arrow-long-down-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;border-top:4px solid transparent;box-shadow:inset 0 0 0 2px;height:24px;width:6px}.gg-arrow-long-down-r::after,.gg-arrow-long-down-r::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-down-r::after{width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);bottom:0;left:-2px}.gg-arrow-long-down-r::before{width:6px;height:6px;border:2px solid;transform:rotate(45deg);top:-5px;left:-2px}.gg-arrow-long-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;box-shadow:inset 0 0 0 2px;height:24px;width:6px}.gg-arrow-long-down::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);bottom:0;left:-2px}.gg-arrow-long-left-c{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;border-right:4px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-left-c::after,.gg-arrow-long-left-c::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-left-c::after{width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);left:0;bottom:-2px}.gg-arrow-long-left-c::before{width:6px;height:6px;border:2px solid;border-radius:8px;right:-4px;bottom:-2px}.gg-arrow-long-left-e{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;border-right:4px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-left-e::after,.gg-arrow-long-left-e::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-left-e::after{width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);left:0;bottom:-2px}.gg-arrow-long-left-e::before{width:6px;height:6px;border:2px solid;right:-4px;bottom:-2px}.gg-arrow-long-left-l{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-left-l::after,.gg-arrow-long-left-l::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-left-l::after{width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);left:0;bottom:-2px}.gg-arrow-long-left-l::before{width:2px;height:6px;background:currentColor;right:-1px;bottom:-2px}.gg-arrow-long-left-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;border-right:4px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-left-r::after,.gg-arrow-long-left-r::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-left-r::after{width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);left:0;bottom:-2px}.gg-arrow-long-left-r::before{width:6px;height:6px;border:2px solid;transform:rotate(45deg);right:-5px;bottom:-2px}.gg-arrow-long-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-left::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);left:0;bottom:-2px}.gg-arrow-long-right-c{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;border-left:4px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-right-c::after,.gg-arrow-long-right-c::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-right-c::after{width:6px;height:6px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);right:0;bottom:-2px}.gg-arrow-long-right-c::before{width:6px;height:6px;border:2px solid;border-radius:8px;left:-4px;bottom:-2px}.gg-arrow-long-right-e{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;border-left:4px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-right-e::after,.gg-arrow-long-right-e::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-right-e::after{width:6px;height:6px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);right:0;bottom:-2px}.gg-arrow-long-right-e::before{width:6px;height:6px;border:2px solid;left:-4px;bottom:-2px}.gg-arrow-long-right-l{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-right-l::after,.gg-arrow-long-right-l::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-right-l::after{width:6px;height:6px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);right:0;bottom:-2px}.gg-arrow-long-right-l::before{width:2px;height:6px;background:currentColor;left:-1px;bottom:-2px}.gg-arrow-long-right-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;border-left:4px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-right-r::after,.gg-arrow-long-right-r::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-right-r::after{width:6px;height:6px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);right:0;bottom:-2px}.gg-arrow-long-right-r::before{width:6px;height:6px;border:2px solid;transform:rotate(45deg);left:-5px;bottom:-2px}.gg-arrow-long-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-top:2px solid transparent;border-bottom:2px solid transparent;box-shadow:inset 0 0 0 2px;width:24px;height:6px}.gg-arrow-long-right::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);right:0;bottom:-2px}.gg-arrow-long-up-c{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;border-bottom:4px solid transparent;box-shadow:inset 0 0 0 2px;height:24px;width:6px}.gg-arrow-long-up-c::after,.gg-arrow-long-up-c::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-up-c::after{width:6px;height:6px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);top:0;left:-2px}.gg-arrow-long-up-c::before{width:6px;height:6px;border:2px solid;border-radius:8px;bottom:-4px;left:-2px}.gg-arrow-long-up-e{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;border-bottom:4px solid transparent;box-shadow:inset 0 0 0 2px;height:24px;width:6px}.gg-arrow-long-up-e::after,.gg-arrow-long-up-e::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-up-e::after{width:6px;height:6px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);top:0;left:-2px}.gg-arrow-long-up-e::before{width:6px;height:6px;border:2px solid;bottom:-5px;left:-2px}.gg-arrow-long-up-l{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;box-shadow:inset 0 0 0 2px;height:24px;width:6px}.gg-arrow-long-up-l::after,.gg-arrow-long-up-l::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-up-l::after{width:6px;height:6px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);top:0;left:-2px}.gg-arrow-long-up-l::before{width:6px;height:2px;background:currentColor;bottom:-1px;left:-2px}.gg-arrow-long-up-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;border-bottom:4px solid transparent;box-shadow:inset 0 0 0 2px;height:24px;width:6px}.gg-arrow-long-up-r::after,.gg-arrow-long-up-r::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-long-up-r::after{width:6px;height:6px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);top:0;left:-2px}.gg-arrow-long-up-r::before{width:6px;height:6px;border:2px solid;transform:rotate(45deg);bottom:-5px;left:-2px}.gg-arrow-long-up,.gg-arrow-long-up::after{display:block;box-sizing:border-box;width:6px}.gg-arrow-long-up{position:relative;transform:scale(var(--ggs,1));border-right:2px solid transparent;border-left:2px solid transparent;box-shadow:inset 0 0 0 2px;height:24px}.gg-arrow-long-up::after{content:"";position:absolute;height:6px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);top:0;left:-2px}.gg-arrow-right-o{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:20px}.gg-arrow-right-o::after,.gg-arrow-right-o::before{content:"";display:block;box-sizing:border-box;position:absolute;right:4px}.gg-arrow-right-o::after{width:6px;height:6px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);bottom:6px}.gg-arrow-right-o::before{width:10px;height:2px;bottom:8px;background:currentColor}.gg-arrow-right-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-arrow-right-r::after,.gg-arrow-right-r::before{content:"";display:block;box-sizing:border-box;position:absolute;right:4px}.gg-arrow-right-r::after{width:6px;height:6px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);bottom:6px}.gg-arrow-right-r::before{width:10px;height:2px;bottom:8px;background:currentColor}.gg-arrow-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-arrow-right::after,.gg-arrow-right::before{content:"";display:block;box-sizing:border-box;position:absolute;right:3px}.gg-arrow-right::after{width:8px;height:8px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);bottom:7px}.gg-arrow-right::before{width:16px;height:2px;bottom:10px;background:currentColor}.gg-arrow-top-left-o{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:20px}.gg-arrow-top-left-o::after,.gg-arrow-top-left-o::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-arrow-top-left-o::after{width:10px;height:2px;background:currentColor;transform:rotate(45deg);bottom:8px;right:4px}.gg-arrow-top-left-o::before{width:6px;height:6px;left:4px;top:4px;border-top:2px solid;border-left:2px solid}.gg-arrow-top-left-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-arrow-top-left-r::after,.gg-arrow-top-left-r::before{content:"";display:block;box-sizing:border-box;position:absolute;left:4px}.gg-arrow-top-left-r::after{width:10px;height:2px;background:currentColor;transform:rotate(45deg);bottom:8px}.gg-arrow-top-left-r::before{width:6px;height:6px;top:4px;border-top:2px solid;border-left:2px solid}.gg-arrow-top-left{box-sizing:border-box;position:relative;display:block;width:8px;height:8px;transform:scale(var(--ggs,1));border-top:2px solid;border-left:2px solid}.gg-arrow-top-left::after{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:2px;background:currentColor;transform:rotate(45deg);top:3px;left:-3px}.gg-arrow-top-right-o{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:20px}.gg-arrow-top-right-o::after,.gg-arrow-top-right-o::before{content:"";display:block;box-sizing:border-box;position:absolute;right:4px}.gg-arrow-top-right-o::after{width:10px;height:2px;background:currentColor;transform:rotate(-45deg);bottom:8px}.gg-arrow-top-right-o::before{width:6px;height:6px;top:4px;border-top:2px solid;border-right:2px solid}.gg-arrow-top-right-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-arrow-top-right-r::after,.gg-arrow-top-right-r::before{content:"";display:block;box-sizing:border-box;position:absolute;right:4px}.gg-arrow-top-right-r::after{width:10px;height:2px;background:currentColor;transform:rotate(-45deg);bottom:8px}.gg-arrow-top-right-r::before{width:6px;height:6px;top:4px;border-top:2px solid;border-right:2px solid}.gg-arrow-top-right{box-sizing:border-box;position:relative;display:block;width:8px;height:8px;border-top:2px solid;transform:scale(var(--ggs,1));border-right:2px solid}.gg-arrow-top-right::after{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:2px;background:currentColor;transform:rotate(-45deg);top:3px;right:-3px}.gg-arrow-up-o{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:20px}.gg-arrow-up-o::after,.gg-arrow-up-o::before{content:"";display:block;box-sizing:border-box;position:absolute;top:4px}.gg-arrow-up-o::after{width:6px;height:6px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);left:6px}.gg-arrow-up-o::before{width:2px;height:10px;left:8px;background:currentColor}.gg-arrow-up-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-arrow-up-r::after,.gg-arrow-up-r::before{content:"";display:block;box-sizing:border-box;position:absolute;top:4px}.gg-arrow-up-r::after{width:6px;height:6px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);left:6px}.gg-arrow-up-r::before{width:2px;height:10px;left:8px;background:currentColor}.gg-arrow-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-arrow-up::after,.gg-arrow-up::before{content:"";display:block;box-sizing:border-box;position:absolute;top:4px}.gg-arrow-up::after{width:8px;height:8px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);left:7px}.gg-arrow-up::before{width:2px;height:16px;left:10px;background:currentColor}.gg-arrows-breake-h{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:10px;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center left/8px 2px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center right/8px 2px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 7px center/2px 10px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 11px center/2px 10px}.gg-arrows-breake-h::after,.gg-arrows-breake-h::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);top:2px}.gg-arrows-breake-h::after{border-left:2px solid;border-bottom:2px solid}.gg-arrows-breake-h::before{border-right:2px solid;border-top:2px solid;right:0}.gg-arrows-breake-v{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:20px;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center top/2px 8px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center bottom/2px 8px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center 7px/10px 2px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center 11px/10px 2px}.gg-arrows-breake-v::after,.gg-arrows-breake-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);left:2px}.gg-arrows-breake-v::after{border-left:2px solid;border-top:2px solid}.gg-arrows-breake-v::before{border-right:2px solid;border-bottom:2px solid;bottom:0}.gg-arrows-exchange-alt-v{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:16px}.gg-arrows-exchange-alt-v::after,.gg-arrows-exchange-alt-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;background:currentColor;border-radius:4px}.gg-arrows-exchange-alt-v::before{height:6px;transform:rotate(-45deg);box-shadow:13px -2px 0;top:10px;left:2px}.gg-arrows-exchange-alt-v::after{height:12px;box-shadow:-4px 4px 0;right:4px}.gg-arrows-exchange-alt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:14px}.gg-arrows-exchange-alt::after,.gg-arrows-exchange-alt::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;background:currentColor;border-radius:4px}.gg-arrows-exchange-alt::before{width:6px;transform:rotate(-45deg);box-shadow:-2px -13px 0;right:0;top:10px}.gg-arrows-exchange-alt::after{width:12px;box-shadow:4px 4px 0;top:4px}.gg-arrows-exchange-v{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:16px}.gg-arrows-exchange-v::after,.gg-arrows-exchange-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;background:currentColor;border-radius:4px}.gg-arrows-exchange-v::before{height:6px;transform:rotate(45deg);box-shadow:7px -4px 0;top:4px;left:2px}.gg-arrows-exchange-v::after{height:12px;box-shadow:-4px 4px 0;right:4px;bottom:4px}.gg-arrows-exchange{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:14px}.gg-arrows-exchange::after,.gg-arrows-exchange::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;background:currentColor;border-radius:4px}.gg-arrows-exchange::before{width:6px;transform:rotate(45deg);box-shadow:2px -13px 0;top:10px}.gg-arrows-exchange::after{width:12px;box-shadow:-4px 4px 0;left:4px;top:4px}.gg-arrows-expand-down-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;box-shadow:-6px 6px 0 -4px}.gg-arrows-expand-down-left::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border:2px solid;border-radius:1px;right:0}.gg-arrows-expand-down-left::after{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;width:2px;height:10px;transform:rotate(45deg);top:8px;left:2px;border-radius:4px}.gg-arrows-expand-down-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;box-shadow:6px 6px 0 -4px}.gg-arrows-expand-down-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border:2px solid;border-radius:1px;left:0}.gg-arrows-expand-down-right::after{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;width:2px;height:10px;transform:rotate(-45deg);top:8px;right:2px;border-radius:4px}.gg-arrows-expand-left-alt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;margin:2px;box-shadow:6px 6px 0 -4px,-6px -6px 0 -4px}.gg-arrows-expand-left-alt::after,.gg-arrows-expand-left-alt::before{content:"";display:block;box-sizing:border-box;position:absolute;transform:rotate(-45deg)}.gg-arrows-expand-left-alt::before{width:2px;height:22px;top:-4px;left:6px;border-top:9px solid;border-bottom:9px solid}.gg-arrows-expand-left-alt::after{width:8px;height:2px;background:currentColor;top:6px;left:3px}.gg-arrows-expand-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;box-shadow:6px 6px 0 -4px,-6px -6px 0 -4px}.gg-arrows-expand-left::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:22px;top:-4px;left:6px;transform:rotate(-45deg);border-top:9px solid;border-bottom:9px solid}.gg-arrows-expand-right-alt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;margin:2px;box-shadow:-6px 6px 0 -4px,6px -6px 0 -4px}.gg-arrows-expand-right-alt::after,.gg-arrows-expand-right-alt::before{content:"";display:block;box-sizing:border-box;position:absolute;transform:rotate(45deg)}.gg-arrows-expand-right-alt::before{width:2px;height:22px;top:-4px;left:6px;border-top:9px solid;border-bottom:9px solid}.gg-arrows-expand-right-alt::after{width:8px;height:2px;background:currentColor;top:6px;left:3px}.gg-arrows-expand-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;margin:2px;box-shadow:-6px 6px 0 -4px,6px -6px 0 -4px}.gg-arrows-expand-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:22px;top:-4px;left:6px;transform:rotate(45deg);border-top:9px solid;border-bottom:9px solid}.gg-arrows-expand-up-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;box-shadow:-6px -6px 0 -4px}.gg-arrows-expand-up-left::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border:2px solid;border-radius:1px;right:0;bottom:0}.gg-arrows-expand-up-left::after{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;width:2px;height:10px;transform:rotate(-45deg);bottom:8px;left:2px;border-radius:4px}.gg-arrows-expand-up-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;box-shadow:6px -6px 0 -4px}.gg-arrows-expand-up-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border:2px solid;border-radius:1px;left:0;bottom:0}.gg-arrows-expand-up-right::after{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;width:2px;height:10px;transform:rotate(45deg);bottom:8px;right:2px;border-radius:4px}.gg-arrows-h-alt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:10px;background:linear-gradient(to left,currentColor 18px,transparent 0)no-repeat 2px 4px/16px 2px}.gg-arrows-h-alt::after,.gg-arrows-h-alt::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);top:2px}.gg-arrows-h-alt::after{border-bottom:2px solid;border-left:2px solid;left:1px}.gg-arrows-h-alt::before{border-top:2px solid;border-right:2px solid;right:1px}.gg-arrows-h{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:10px;background:linear-gradient(to left,currentColor 15px,transparent 0)no-repeat 2px 4px/6px 2px,linear-gradient(to left,currentColor 15px,transparent 0)no-repeat 12px 4px/6px 2px}.gg-arrows-h::after,.gg-arrows-h::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);top:2px}.gg-arrows-h::after{border-bottom:2px solid;border-left:2px solid;left:1px}.gg-arrows-h::before{border-top:2px solid;border-right:2px solid;right:1px}.gg-arrows-merge-alt-h{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:12px;background:linear-gradient(to left,currentColor 12px,transparent 0)no-repeat center left/8px 2px,linear-gradient(to left,currentColor 12px,transparent 0)no-repeat center right/8px 2px,linear-gradient(to left,currentColor 12px,transparent 0)no-repeat 20px center/2px 12px,linear-gradient(to left,currentColor 12px,transparent 0)no-repeat 0 center/2px 12px}.gg-arrows-merge-alt-h::after,.gg-arrows-merge-alt-h::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);top:3px}.gg-arrows-merge-alt-h::after{border-left:2px solid;border-bottom:2px solid;right:3px;}.gg-arrows-merge-alt-h::before{border-right:2px solid;border-top:2px solid;left:3px}.gg-arrows-merge-alt-v{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:22px;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center top/2px 8px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center bottom/2px 8px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center 20px/10px 2px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center 0/10px 2px}.gg-arrows-merge-alt-v::after,.gg-arrows-merge-alt-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);left:3px}.gg-arrows-merge-alt-v::after{border-left:2px solid;border-top:2px solid;bottom:3px;}.gg-arrows-merge-alt-v::before{border-right:2px solid;border-bottom:2px solid;top:3px}.gg-arrows-scroll-h{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:6px}.gg-arrows-scroll-h::after,.gg-arrows-scroll-h::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg)}.gg-arrows-scroll-h::after{border-bottom:2px solid;border-left:2px solid;right:0}.gg-arrows-scroll-h::before{border-top:2px solid;border-right:2px solid;left:0}.gg-arrows-scroll-v{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:6px;height:16px}.gg-arrows-scroll-v::after,.gg-arrows-scroll-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(-45deg)}.gg-arrows-scroll-v::after{border-bottom:2px solid;border-left:2px solid}.gg-arrows-scroll-v::before{border-top:2px solid;border-right:2px solid;bottom:0}.gg-arrows-shrink-h{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:10px;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center center/10px 2px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 18px center/2px 10px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 0px center/2px 10px}.gg-arrows-shrink-h::after,.gg-arrows-shrink-h::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);top:2px}.gg-arrows-shrink-h::after{border-left:2px solid;border-bottom:2px solid;left:4px;}.gg-arrows-shrink-h::before{border-right:2px solid;border-top:2px solid;right:4px}.gg-arrows-shrink-v{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:20px;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center center/2px 10px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center 18px/10px 2px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center 0/10px 2px}.gg-arrows-shrink-v::after,.gg-arrows-shrink-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);left:2px}.gg-arrows-shrink-v::after{border-left:2px solid;border-top:2px solid;top:4px;}.gg-arrows-shrink-v::before{border-right:2px solid;border-bottom:2px solid;bottom:4px}.gg-arrows-v-alt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:20px;background:linear-gradient(to left,currentColor 16px,transparent 0)no-repeat 4px 2px/2px 16px}.gg-arrows-v-alt::after,.gg-arrows-v-alt::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(-45deg);left:2px}.gg-arrows-v-alt::after{border-bottom:2px solid;border-left:2px solid;bottom:1px}.gg-arrows-v-alt::before{border-top:2px solid;border-right:2px solid;top:1px}.gg-arrows-v{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:20px;background:linear-gradient(to left,currentColor 15px,transparent 0)no-repeat 4px 2px/2px 6px,linear-gradient(to left,currentColor 15px,transparent 0)no-repeat 4px 12px/2px 6px}.gg-arrows-v::after,.gg-arrows-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(-45deg);left:2px}.gg-arrows-v::after{border-bottom:2px solid;border-left:2px solid;bottom:1px}.gg-arrows-v::before{border-top:2px solid;border-right:2px solid;top:1px}.gg-assign{box-sizing:border-box;position:relative;display:block;width:6px;height:6px;background:currentColor;transform:scale(var(--ggs,1));border-radius:100px}.gg-assign::before{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:12px;box-shadow:-5px -5px 0 -3px,5px 5px 0 -3px,5px -5px 0 -3px,-5px 5px 0 -3px;left:-3px;top:-3px}.gg-asterisk{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:12px;border-left:5px solid transparent;border-right:5px solid transparent;box-shadow:inset 0 0 0 2px}.gg-asterisk::after,.gg-asterisk::before{content:"";display:block;position:absolute;box-sizing:border-box;width:2px;height:12px;background:currentColor;transform:rotate(55deg)}.gg-asterisk::after{transform:rotate(-55deg)}.gg-atlasian{position:relative;box-sizing:border-box;display:block;width:22px;height:18px;transform:scale(var(--ggs,1));overflow:hidden}.gg-atlasian::after,.gg-atlasian::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;background:currentColor;border-radius:4px}.gg-atlasian::before{height:12px;border-top-right-radius:10px;bottom:-4px;left:3px;transform:rotate(30deg) skewY(35deg);opacity:.8}.gg-atlasian::after{height:24px;border-top-left-radius:10px;bottom:-8px;right:3px;transform:rotate(-30deg) skewY(-35deg)}.gg-attachment{box-sizing:border-box;position:relative;display:block;width:14px;height:14px;border:2px solid;border-top:0;border-bottom-left-radius:100px;border-bottom-right-radius:100px;transform:scale(var(--ggs,1));margin-top:11px}.gg-attachment::after,.gg-attachment::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;border:2px solid}.gg-attachment::after{border-bottom:0;border-top-left-radius:100px;border-top-right-radius:100px;right:-2px;width:10px;height:14px;bottom:8px}.gg-attachment::before{width:6px;height:12px;border-top:0;border-bottom-left-radius:100px;border-bottom-right-radius:100px;left:2px;bottom:4px}.gg-attribution{display:block;box-sizing:border-box;transform:scale(var(--ggs,1));width:16px;height:18px;background:linear-gradient(to left,currentColor 14px,transparent 0) no-repeat 1px 2px/8px 2px,linear-gradient(to left,currentColor 14px,transparent 0) no-repeat 6px 14px/6px 2px,radial-gradient(circle,currentColor 60%,transparent 40%) no-repeat 10px 12px/6px 6px,radial-gradient(circle,currentColor 60%,transparent 40%) no-repeat 0 0/6px 6px}.gg-attribution::after,.gg-attribution::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border:2px solid}.gg-attribution::before{border-right:0;border-top-left-radius:10px;border-bottom-left-radius:10px;top:8px;left:2px}.gg-attribution::after{border-left:0;border-top-right-radius:10px;border-bottom-right-radius:10px;right:2px;top:2px}.gg-awards{display:block;position:relative;transform:scale(var(--ggs,1));box-sizing:border-box;width:16px;height:20px;border:4px solid transparent;border-top:12px solid transparent;border-bottom:0;box-shadow:inset 4px 0 0 -2px,inset -4px 0 0 -2px}.gg-awards::after,.gg-awards::before{content:"";box-sizing:border-box;position:absolute;display:block;border:2px solid}.gg-awards::before{width:14px;height:14px;border-radius:22px;top:-12px;left:-3px}.gg-awards::after{width:6px;height:6px;border-right-color:transparent;border-bottom-color:transparent;border-bottom-left-radius:1px;border-top-right-radius:1px;transform:rotate(45deg);bottom:-3px;left:1px}.gg-backspace{box-sizing:border-box;position:relative;display:block;width:14px;height:14px;transform:scale(var(--ggs,1));border:2px solid;border-left:0;border-top-right-radius:2px;border-bottom-right-radius:2px}.gg-backspace::after,.gg-backspace::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-backspace::before{background:linear-gradient( to left,currentColor 18px,transparent 0)no-repeat center center/10px 2px;border-right:3px solid transparent;box-shadow:inset 0 0 0 2px;right:2px;bottom:1px;width:8px;height:8px;border-left:3px solid transparent;transform:rotate(45deg)}.gg-backspace::after{width:10px;height:10px;border-top:2px solid;border-left:2px solid;border-top-left-radius:1px;transform:rotate(-45deg);top:0;left:-5px}.gg-band-aid{box-sizing:border-box;position:relative;display:block;transform:rotate(-25deg)scale(var(--ggs,1));width:24px;height:12px;border:2px solid;border-radius:22px}.gg-band-aid::after,.gg-band-aid::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-band-aid::before{width:12px;height:10px;top:-2px;left:4px;border-left:2px solid;border-right:2px solid}.gg-band-aid::after{width:2px;height:2px;background:currentColor;box-shadow:0 4px 0,4px 0 0,4px 4px 0;border-radius:22px;left:7px;top:1px}.gg-battery-empty{box-sizing:border-box;position:relative;display:block;width:20px;height:12px;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;margin-left:-3px}.gg-battery-empty::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:4px;height:6px;right:-4px;top:1px;background:currentColor}.gg-battery-full{box-sizing:border-box;position:relative;display:block;width:20px;height:12px;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;margin-left:-3px}.gg-battery-full::after,.gg-battery-full::before{content:"";display:block;box-sizing:border-box;position:absolute;height:6px;background:currentColor;top:1px}.gg-battery-full::before{right:-4px;border-radius:3px;width:4px}.gg-battery-full::after{width:14px;left:1px}.gg-battery{box-sizing:border-box;position:relative;display:block;width:20px;height:12px;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;margin-left:-3px}.gg-battery::after,.gg-battery::before{content:"";display:block;box-sizing:border-box;position:absolute;height:6px;background:currentColor;top:1px}.gg-battery::before{right:-4px;border-radius:3px;width:4px}.gg-battery::after{width:8px;left:1px}.gg-bee,.gg-bee::after,.gg-bee::before{display:block;box-sizing:border-box;border:2px solid}.gg-bee{position:relative;width:12px;height:20px;transform:scale(var(--ggs,1));border-radius:22px;background:linear-gradient(to left,currentColor 12px,transparent 0) no-repeat center 6px/12px 2px,linear-gradient(to left,currentColor 12px,transparent 0) no-repeat center 10px/12px 2px;box-shadow:0 4px 0 -2px,0 7px 0 -4px}.gg-bee::after,.gg-bee::before{content:"";position:absolute;width:6px;height:10px;border-top:0;border-bottom-left-radius:22px;border-bottom-right-radius:22px;top:4px}.gg-bee::before{left:-6px;transform:rotate(40deg)}.gg-bee::after{right:-6px;transform:rotate(-40deg)}.gg-bell,.gg-bell::before{border-top-left-radius:100px;border-top-right-radius:100px}.gg-bell{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-bottom:0;width:14px;height:14px}.gg-bell::after,.gg-bell::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-bell::before{background:currentColor;width:4px;height:4px;top:-4px;left:3px}.gg-bell::after{border-radius:3px;width:16px;height:10px;border:6px solid transparent;border-top:1px solid transparent;box-shadow:inset 0 0 0 4px,0 -2px 0 0;top:14px;left:-3px;border-bottom-left-radius:100px;border-bottom-right-radius:100px}.gg-bitbucket{position:relative;box-sizing:border-box;display:block;width:15px;height:15px;transform:scale(var(--ggs,1));border-top:5px solid;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center bottom/10px 5px}.gg-bitbucket::after,.gg-bitbucket::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;width:5px;height:15px;top:-5px;transform:skew(10deg);border-radius:1px}.gg-bitbucket::after{right:0;transform:skew(-10deg)}.gg-block{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:100%}.gg-block::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:5px;transform:rotate(-45deg);top:5px;left:1px}.gg-bmw{position:relative;box-sizing:border-box;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:18px}.gg-bmw::before{content:"";position:absolute;box-sizing:border-box;display:block;border:9px solid;border-top-color:transparent;border-bottom-color:transparent;border-radius:18px;transform:rotate(45deg);left:-2px;top:-2px}.gg-board{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:16px;height:12px;border-left:4px solid transparent;border-right:4px solid transparent;box-shadow:0 0 0 2px,inset 2px 0 0,inset -2px 0 0;border-radius:2px}.gg-bolt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:6px;height:21px}.gg-bolt::after,.gg-bolt::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;transform:rotate(30deg)}.gg-bolt::before{border-bottom:12px solid;left:0;top:0}.gg-bolt::after{border-top:12px solid;right:0;bottom:0}.gg-bookmark,.gg-bookmark::after{display:block;box-sizing:border-box;border-top-right-radius:3px}.gg-bookmark{border:2px solid;border-bottom:0;border-top-left-radius:3px;overflow:hidden;position:relative;transform:scale(var(--ggs,1));width:14px;height:16px}.gg-bookmark::after{content:"";position:absolute;width:12px;height:12px;border-top:2px solid;border-right:2px solid;transform:rotate(-45deg);top:9px;left:-1px}.gg-border-all{transform:scale(var(--ggs,1));}.gg-border-all,.gg-border-all::before{box-sizing:border-box;position:relative;display:block;width:14px;height:14px}.gg-border-all::before{content:"";position:absolute;border:3px solid;bottom:0;left:0}.gg-border-bottom{transform:scale(var(--ggs,1));}.gg-border-bottom,.gg-border-bottom::before{box-sizing:border-box;position:relative;display:block;width:14px;height:14px;border-bottom:3px solid}.gg-border-bottom::before{content:"";position:absolute;height:10px;border:3px solid;border-bottom:0;bottom:2px;left:0;opacity:.3}.gg-border-left{transform:scale(var(--ggs,1));}.gg-border-left,.gg-border-left::before{box-sizing:border-box;position:relative;display:block;width:14px;height:14px;border-left:3px solid}.gg-border-left::before{content:"";position:absolute;width:10px;border:3px solid;border-left:0;bottom:0;left:2px;opacity:.3}.gg-border-right{transform:scale(var(--ggs,1));}.gg-border-right,.gg-border-right::before{box-sizing:border-box;position:relative;display:block;width:14px;height:14px;border-right:3px solid}.gg-border-right::before{content:"";position:absolute;width:10px;border:3px solid;border-right:0;bottom:0;right:2px;opacity:.3}.gg-border-style-dashed{transform:scale(var(--ggs,1));}.gg-border-style-dashed,.gg-border-style-dashed::before{box-sizing:border-box;position:relative;display:block;width:26px;height:17px}.gg-border-style-dashed::before{content:"";position:absolute;height:2px;top:7px;border-top:2px dashed}.gg-border-style-dotted{transform:scale(var(--ggs,1));}.gg-border-style-dotted,.gg-border-style-dotted::before{box-sizing:border-box;position:relative;display:block;width:26px;height:17px}.gg-border-style-dotted::before{content:"";position:absolute;height:2px;top:7px;border-top:2px dotted}.gg-border-style-solid{transform:scale(var(--ggs,1));}.gg-border-style-solid,.gg-border-style-solid::before{box-sizing:border-box;position:relative;display:block;width:26px;height:17px}.gg-border-style-solid::before{content:"";position:absolute;height:2px;top:7px;border-top:2px solid}.gg-border-top{transform:scale(var(--ggs,1));}.gg-border-top,.gg-border-top::before{box-sizing:border-box;position:relative;display:block;width:14px;height:14px;border-top:3px solid}.gg-border-top::before{content:"";position:absolute;height:10px;border:3px solid;border-top:0;top:2px;left:0;opacity:.3}.gg-bot{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:21px;height:10px;border-right:8px solid transparent;border-left:8px solid transparent;border-bottom:1px solid transparent;border-radius:12px;box-shadow:0 0 0 2px,-4px 0 0 -1px,4px 0 0 -1px,inset 0 -4px 0 -2px}.gg-bot::after,.gg-bot::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:2px;box-shadow:0 0 0 2px;top:3px}.gg-bot::before{left:-4px;border-radius:3px}.gg-bot::after{border-radius:100px;right:-4px}.gg-bowl{display:block;position:relative;transform:scale(var(--ggs,1));box-sizing:border-box;width:20px;height:18px}.gg-bowl::after,.gg-bowl::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-bowl::before{width:20px;height:12px;border:2px solid;border-bottom-left-radius:10px;border-bottom-right-radius:10px;bottom:0}.gg-bowl::after{background:currentColor;width:2px;height:10px;border-radius:4px;transform:rotate(45deg);right:4px;top:-1px}.gg-box{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:20px;border:2px solid;border-radius:3px}.gg-box::after,.gg-box::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;height:2px;background:currentColor}.gg-box::before{left:6px;width:6px;top:8px}.gg-box::after{width:22px;left:-2px;top:4px}.gg-boy,.gg-boy::after,.gg-boy::before{display:block;box-sizing:border-box;border-radius:42px}.gg-boy{position:relative;width:20px;height:20px;transform:scale(var(--ggs,1));overflow:hidden;box-shadow:inset 0 0 0 2px}.gg-boy::after,.gg-boy::before{content:"";position:absolute;width:2px;height:2px;background:currentColor;box-shadow:6px 0 0;left:6px;top:10px}.gg-boy::after{width:20px;height:20px;top:-13px;right:-12px;}.gg-brackets{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:3px}.gg-brackets::after,.gg-brackets::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid;width:4px;height:10px;top:2px}.gg-brackets::before{border-right:0;left:2px}.gg-brackets::after{border-left:0;right:2px}.gg-briefcase{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:16px;border:2px solid;border-radius:2px;margin-top:1px}.gg-briefcase::after,.gg-briefcase::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-briefcase::before{border:2px solid;border-top-left-radius:1px;border-top-right-radius:1px;left:4px;width:10px;height:4px;border-bottom:0;top:-5px}.gg-briefcase::after{width:18px;height:3px;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:1px solid transparent;box-shadow:0 2px 0,inset 16px 74px 0;top:4px}.gg-browse{display:block;position:relative;transform:scale(var(--ggs,1));box-sizing:border-box;width:16px;height:22px;border:2px solid;border-radius:3px;background:linear-gradient(to left,currentcolor 10px,transparent 0) no-repeat center 2px/8px 2px,linear-gradient(to left,currentcolor 10px,transparent 0) no-repeat center 6px/8px 2px}.gg-browse::after,.gg-browse::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:22px}.gg-browse::before{width:6px;height:6px;border:2px solid;left:3px;top:9px}.gg-browse::after{width:2px;height:4px;background:currentColor;bottom:1px;right:2px;transform:rotate(-45deg)}.gg-browser{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:18px;border:2px solid;border-radius:3px}.gg-browser::after,.gg-browser::before{content:"";display:block;box-sizing:border-box;position:absolute;width:22px;height:2px;background:currentColor;top:4px}.gg-browser::after{border-radius:3px;width:2px;box-shadow:3px 0 0,6px 0 0;top:1px;left:1px}.gg-brush{display:block;position:relative;transform:scale(var(--ggs,1));box-sizing:border-box;width:14px;height:18px;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat 4px bottom/2px 5px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat 8px bottom/2px 5px}.gg-brush::after,.gg-brush::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid}.gg-brush::before{width:6px;height:8px;border-top-left-radius:6px;border-top-right-radius:6px;border-bottom:0;left:4px;top:0}.gg-brush::after{width:14px;height:10px;border-top:0;border-radius:3px;border-top-left-radius:1px;border-top-right-radius:1px;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat left top/4px 2px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat right top/4px 2px;bottom:0}.gg-bulb{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-bottom-color:transparent;border-radius:100px}.gg-bulb::after,.gg-bulb::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-bulb::before{border-top:0;border-bottom-left-radius:18px;border-bottom-right-radius:18px;top:10px;border-bottom:2px solid transparent;box-shadow:0 5px 0 -2px,inset 2px 0 0 0,inset -2px 0 0 0,inset 0 -4px 0 -2px;width:8px;height:8px;left:2px}.gg-bulb::after{width:12px;height:2px;border-left:3px solid;border-right:3px solid;border-radius:2px;bottom:0;left:0}.gg-c-plus-plus{position:relative;display:block;width:16px;height:16px;transform:scale(var(--ggs,1));border:3px solid currentColor;box-sizing:border-box;border-radius:100px;border-right-color:transparent}.gg-c-plus-plus::after,.gg-c-plus-plus::before{content:"";position:absolute;box-sizing:border-box;display:block;width:9px;height:6px;border-left:2px solid;border-right:2px solid;right:-9px;top:2px}.gg-c-plus-plus::after{width:13px;height:2px;border-left:6px solid;border-right:6px solid;right:-11px;top:4px}.gg-calculator{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:22px;border:2px solid;border-radius:2px}.gg-calculator::after,.gg-calculator::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;top:2px;left:2px}.gg-calculator::after{width:2px;box-shadow:4px 0 0,8px 0 0,0 4px 0,4px 4px 0,8px 4px 0,0 8px 0,4px 8px 0,8px 8px 0,8px 6px 0;top:6px}.gg-calendar-dates{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:3px}.gg-calendar-dates::after,.gg-calendar-dates::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;height:2px;left:2px}.gg-calendar-dates::before{background:currentColor;width:2px;box-shadow:4px 0 0,8px 0 0,0 4px 0,4px 4px 0,8px 4px 0;top:6px}.gg-calendar-dates::after{width:10px;top:-4px;box-shadow:0 6px 0 0}.gg-calendar-due{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:3px}.gg-calendar-due::after,.gg-calendar-due::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:6px;background:currentColor}.gg-calendar-due::before{top:2px;width:10px;height:2px;left:2px}.gg-calendar-due::after{width:4px;height:4px;bottom:3px;left:5px}.gg-calendar-next{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;border:2px solid transparent;border-bottom:4px solid transparent;border-right:4px solid transparent;border-left:3px solid transparent;box-shadow:0 0 0 2px,inset 0 -2px 0;border-radius:1px}.gg-calendar-next::after,.gg-calendar-next::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-calendar-next::before{background:currentColor;border-radius:2px;top:0;left:-1px;width:10px;height:2px}.gg-calendar-next::after{width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:5px solid;bottom:-2px;right:-2px}.gg-calendar-today{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-top:4px solid;border-radius:3px}.gg-calendar-today::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;height:4px;width:4px;border-radius:2px;right:2px;bottom:2px}.gg-calendar-two{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:3px}.gg-calendar-two::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:3px;top:2px;left:2px}.gg-calendar,.gg-calendar::before{display:block;box-sizing:border-box}.gg-calendar{position:relative;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-top:4px solid;border-radius:3px}.gg-calendar::before{content:"";position:absolute;width:10px;border-radius:3px;left:2px;background:currentColor;height:2px;top:2px}.gg-calibrate{display:block;box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));width:18px;height:18px;overflow:hidden}.gg-calibrate::after,.gg-calibrate::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:22px}.gg-calibrate::before{width:6px;height:6px;background:currentColor;top:10px;left:6px}.gg-calibrate::after{width:22px;height:22px;border:6px solid transparent;border-top:6px solid;left:-2px;top:1px}.gg-camera{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:18px;height:12px;perspective:24px}.gg-camera::after,.gg-camera::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-camera::before{border:2px solid;border-left-color:transparent;transform:rotateY(-70deg);width:8px;height:8px;right:-7px;top:0}.gg-camera::after{width:10px;height:5px;border-top:2px solid;border-right:2px solid;top:-5px;right:2px;border-top-right-radius:2px}.gg-cap{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:12px;border:2px solid;border-bottom-color:transparent;border-top-left-radius:100px;border-top-right-radius:100px}.gg-cap::after,.gg-cap::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-cap::after{border-top:2px solid transparent;border-bottom:2px solid transparent;border-left:4px solid transparent;border-right:4px solid transparent;box-shadow:0 0 0 2px,inset 12px 0 0 0;bottom:-8px;width:18px;height:6px;border-radius:1px;left:-2px}.gg-cap::before{width:4px;height:4px;background:currentColor;border-radius:2px;left:5px;top:-4px}.gg-captions{border-radius:1px;transform:scale(var(--ggs,1))}.gg-captions,.gg-captions::after,.gg-captions::before{box-sizing:border-box;position:relative;display:block;width:20px;height:16px;border:2px solid}.gg-captions::after,.gg-captions::before{content:"";position:absolute;width:5px;height:8px;border-right:transparent;top:2px;left:2px}.gg-captions::before{left:9px}.gg-card-clubs{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:22px;border:2px solid;border-radius:3px}.gg-card-clubs::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;border-radius:4px;width:4px;height:4px;left:5px;top:4px;box-shadow:-2.5px 4px 0,2.5px 4px 0}.gg-card-diamonds{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:22px;border:2px solid;border-radius:3px}.gg-card-diamonds::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;background:currentColor;transform:rotate(45deg);top:6px;left:4px}.gg-card-hearts{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:22px;border:2px solid;border-radius:3px}.gg-card-hearts::after,.gg-card-hearts::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;height:6px;background:currentColor;border-top-left-radius:16px;border-top-right-radius:16px;transform:rotate(45deg);left:6px;top:6px}.gg-card-hearts::after{transform:rotate(-45deg);left:4px}.gg-card-spades{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:22px;border:2px solid;border-radius:3px}.gg-card-spades::after,.gg-card-spades::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;height:6px;background:currentColor;border-bottom-left-radius:16px;border-bottom-right-radius:16px;transform:rotate(-45deg);left:6px;top:6px}.gg-card-spades::after{transform:rotate(45deg);left:4px}.gg-carousel{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:18px}.gg-carousel::after,.gg-carousel::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px}.gg-carousel::before{width:22px;height:10px;border:2px solid}.gg-carousel::after{width:10px;height:2px;background:currentColor;top:16px;left:6px;box-shadow:-3px -4px 0,3px -4px 0}.gg-cast{background:linear-gradient( to left,currentColor 5px,transparent 0)no-repeat bottom right/6px 2px,linear-gradient( to left,currentColor 5px,transparent 0)no-repeat top left/2px 2px;box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:16px;border-top:2px solid;border-right:2px solid;border-radius:2px;border-left:0}.gg-cast::after,.gg-cast::before{content:"";display:block;box-sizing:border-box;position:absolute;width:20px;height:20px;border:6px double;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;border-radius:50%;transform:rotate(-45deg);bottom:-10px;left:-10px}.gg-cast::after{width:4px;height:4px;border:2px solid;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;bottom:-2px;left:-2px}.gg-chanel{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:21px;height:18px}.gg-chanel::after,.gg-chanel::before{content:"";display:block;position:absolute;box-sizing:border-box;border:3px solid;width:18px;height:18px;border-radius:22px}.gg-chanel::before{border-left-color:transparent;left:-3px}.gg-chanel::after{border-right-color:transparent;right:-3px}.gg-chart{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:10px;border-bottom:2px solid;border-left:2px solid}.gg-chart::after,.gg-chart::before{content:"";display:block;position:absolute;border:2px solid;box-sizing:border-box}.gg-chart::before{border-top-right-radius:100px;right:-2px;top:-2px;width:8px;height:8px}.gg-chart::after{width:18px;height:18px;border-radius:100px;border-right-color:transparent;left:-10px;transform:rotate(-45deg)}.gg-check-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-check-o::after{content:"";display:block;box-sizing:border-box;position:absolute;left:3px;top:-1px;width:6px;height:10px;border-color:currentColor;border-width:0 2px 2px 0;border-style:solid;transform-origin:bottom left;transform:rotate(45deg)}.gg-check-r{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;border:2px solid;transform:scale(var(--ggs,1));border-radius:4px}.gg-check-r::after{content:"";display:block;box-sizing:border-box;position:absolute;left:3px;top:-1px;width:6px;height:10px;border-width:0 2px 2px 0;border-style:solid;transform-origin:bottom left;transform:rotate(45deg)}.gg-check{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-check::after{content:"";display:block;box-sizing:border-box;position:absolute;left:3px;top:-1px;width:6px;height:10px;border-width:0 2px 2px 0;border-style:solid;transform-origin:bottom left;transform:rotate(45deg)}.gg-chevron-double-down-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:40px;width:22px;height:22px}.gg-chevron-double-down-o::after,.gg-chevron-double-down-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);left:6px;top:3px}.gg-chevron-double-down-o::after{top:7px}.gg-chevron-double-down-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:4px;width:22px;height:22px}.gg-chevron-double-down-r::after,.gg-chevron-double-down-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);left:6px;top:3px}.gg-chevron-double-down-r::after{top:7px}.gg-chevron-double-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-chevron-double-down::after,.gg-chevron-double-down::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);left:7px;top:3px}.gg-chevron-double-down::after{top:8px}.gg-chevron-double-left-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:40px;width:22px;height:22px}.gg-chevron-double-left-o::after,.gg-chevron-double-left-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-left:2px solid;border-bottom:2px solid;transform:rotate(45deg);top:6px;left:5px}.gg-chevron-double-left-o::after{left:9px}.gg-chevron-double-left-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:4px;width:22px;height:22px}.gg-chevron-double-left-r::after,.gg-chevron-double-left-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-left:2px solid;border-bottom:2px solid;transform:rotate(45deg);top:6px;left:5px}.gg-chevron-double-left-r::after{left:9px}.gg-chevron-double-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-chevron-double-left::after,.gg-chevron-double-left::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border-left:2px solid;border-bottom:2px solid;transform:rotate(45deg);top:7px;left:6px}.gg-chevron-double-left::after{left:11px}.gg-chevron-double-right-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:40px;width:22px;height:22px}.gg-chevron-double-right-o::after,.gg-chevron-double-right-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-right:2px solid;border-top:2px solid;transform:rotate(45deg);top:6px;right:5px}.gg-chevron-double-right-o::after{right:9px}.gg-chevron-double-right-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:4px;width:22px;height:22px}.gg-chevron-double-right-r::after,.gg-chevron-double-right-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-right:2px solid;border-top:2px solid;transform:rotate(45deg);top:6px;right:5px}.gg-chevron-double-right-r::after{right:9px}.gg-chevron-double-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-chevron-double-right::after,.gg-chevron-double-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border-right:2px solid;border-top:2px solid;transform:rotate(45deg);top:7px;right:6px}.gg-chevron-double-right::after{right:11px}.gg-chevron-double-up-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:40px;width:22px;height:22px}.gg-chevron-double-up-o::after,.gg-chevron-double-up-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);left:6px;bottom:3px}.gg-chevron-double-up-o::after{bottom:7px}.gg-chevron-double-up-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:4px;width:22px;height:22px}.gg-chevron-double-up-r::after,.gg-chevron-double-up-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);left:6px;bottom:3px}.gg-chevron-double-up-r::after{bottom:7px}.gg-chevron-double-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-chevron-double-up::after,.gg-chevron-double-up::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);left:7px;bottom:3px}.gg-chevron-double-up::after{bottom:8px}.gg-chevron-down-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-chevron-down-o::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);left:6px;top:5px}.gg-chevron-down-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-chevron-down-r::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);left:6px;top:5px}.gg-chevron-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-chevron-down::after{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);left:4px;top:2px}.gg-chevron-left-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-chevron-left-o::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);left:7px;top:6px}.gg-chevron-left-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-chevron-left-r::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);left:7px;top:6px}.gg-chevron-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-chevron-left::after{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);left:6px;top:4px}.gg-chevron-right-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-chevron-right-o::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(-45deg);left:5px;top:6px}.gg-chevron-right-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-chevron-right-r::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;border-right:2px solid;transform:rotate(-45deg);left:5px;top:6px}.gg-chevron-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-chevron-right::after{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;border-bottom:2px solid;border-right:2px solid;transform:rotate(-45deg);right:6px;top:4px}.gg-chevron-up-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-chevron-up-o::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;border-right:2px solid;transform:rotate(-45deg);left:6px;bottom:5px}.gg-chevron-up-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-chevron-up-r::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;border-right:2px solid;transform:rotate(-45deg);left:6px;bottom:5px}.gg-chevron-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-chevron-up::after{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;border-top:2px solid;border-right:2px solid;transform:rotate(-45deg);left:4px;bottom:2px}.gg-circleci,.gg-circleci::before{display:block;box-sizing:border-box;border-radius:18px}.gg-circleci{position:relative;transform:scale(var(--ggs,1));width:24px;height:24px;border:4px solid;background:linear-gradient( to left,currentColor 8px,transparent 0)no-repeat -2px center/8px 3px}.gg-circleci::before{content:"";position:absolute;width:10px;height:10px;border:3px solid;top:3px;right:3px}.gg-clapper-board{display:block;position:relative;transform:scale(var(--ggs,1));box-sizing:border-box;width:22px;height:18px;border:2px solid;border-radius:3px}.gg-clapper-board::after,.gg-clapper-board::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-clapper-board::before{width:10px;height:8px;border-left:2px solid;border-right:2px solid;left:4px;top:-2px;transform:skewX(-40deg)}.gg-clapper-board::after{width:22px;height:2px;background:currentColor;top:4px;left:-2px}.gg-clipboard{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:2px}.gg-clipboard::after,.gg-clipboard::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:2px;width:10px;left:2px}.gg-clipboard::before{border:2px solid;border-bottom-left-radius:3px;border-bottom-right-radius:3px;top:-2px;height:6px}.gg-clipboard::after{height:2px;background:currentColor;box-shadow:0 -4px 0 0;bottom:2px}.gg-close-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:40px}.gg-close-o::after,.gg-close-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:2px;background:currentColor;transform:rotate(45deg);border-radius:5px;top:8px;left:3px}.gg-close-o::after{transform:rotate(-45deg)}.gg-close-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-close-r::after,.gg-close-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:2px;background:currentColor;transform:rotate(45deg);border-radius:5px;top:8px;left:3px}.gg-close-r::after{transform:rotate(-45deg)}.gg-close{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:40px}.gg-close::after,.gg-close::before{content:"";display:block;box-sizing:border-box;position:absolute;width:16px;height:2px;background:currentColor;transform:rotate(45deg);border-radius:5px;top:8px;left:1px}.gg-close::after{transform:rotate(-45deg)}.gg-cloud{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:2px;background:currentColor;margin-bottom:-20px}.gg-cloud::after,.gg-cloud::before{content:"";display:block;position:absolute;border:2px solid;box-sizing:border-box;bottom:0}.gg-cloud::before{border-top-left-radius:100px;border-bottom-left-radius:100px;border-right:0;left:-6px;width:7px;height:12px}.gg-cloud::after{width:16px;height:16px;border-radius:100px;border-left-color:transparent;right:-8px;transform:rotate(-45deg)}.gg-code-climate{display:block;box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));width:24px;height:16px}.gg-code-climate::after,.gg-code-climate::before{content:"";display:block;position:absolute;box-sizing:border-box;width:12px;border-left:4px solid;border-top:4px solid;transform:rotate(45deg)}.gg-code-climate::before{height:12px;left:2px;bottom:-2px}.gg-code-climate::after{height:6px;right:0;bottom:6px}.gg-code-slash{display:block;position:relative;box-sizing:border-box;transform:rotate(15deg) scale(var(--ggs,1));width:2px;height:16px;background:currentColor}.gg-code-slash::after,.gg-code-slash::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;transform:rotate(-60deg)}.gg-code-slash::before{border-left:2px solid;border-top:2px solid;left:-8px;top:5px}.gg-code-slash::after{border-right:2px solid;border-bottom:2px solid;right:-8px;top:3px}.gg-code{transform:scale(var(--ggs,1))}.gg-code,.gg-code::after,.gg-code::before{box-sizing:border-box;position:relative;display:block;width:8px;height:20px}.gg-code::after,.gg-code::before{content:"";position:absolute;height:8px;border-left:2px solid;border-bottom:2px solid;transform:rotate(45deg) scaleY(1);left:-4px;top:6px}.gg-code::after{transform:rotate(-45deg) scaleX(-1);left:4px}.gg-coffee{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:14px;border:2px solid;border-radius:6px;border-top-left-radius:0;border-top-right-radius:0;margin-left:-4px;margin-top:3px}.gg-coffee::after,.gg-coffee::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-coffee::before{left:2px;background:currentColor;box-shadow:4px 0 0,8px 0 0;border-radius:3px;width:2px;height:4px;top:-7px}.gg-coffee::after{width:6px;height:8px;border:2px solid;border-radius:100px;border-top-left-radius:0;border-bottom-left-radius:0;right:-6px;top:-1px}.gg-collage{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:20px;border:2px solid;border-radius:3px}.gg-collage::after,.gg-collage::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:20px;background:currentColor;left:5px;top:-2px}.gg-collage::after{width:9px;height:2px;left:-2px;top:4px;box-shadow:7px 5px 0 0}.gg-color-bucket{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:6px;height:10px;border:2px solid;border-bottom:0;border-top-left-radius:100px;border-top-right-radius:100px;margin-top:-18px}.gg-color-bucket::after,.gg-color-bucket::before{content:"";display:block;box-sizing:border-box;position:absolute;transform:rotate(45deg)}.gg-color-bucket::before{border:2px solid;border-bottom-left-radius:4px;border-bottom-right-radius:4px;top:4px;left:-4px;width:14px;height:16px}.gg-color-bucket::after{width:6px;height:6px;border-radius:0 100% 100% 100%;background:currentColor;right:-15px;bottom:-12px}.gg-color-picker{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:18px;height:10px;border-left:0;border-top-left-radius:100px;border-bottom-left-radius:100px;border-top:2px solid transparent;border-bottom:2px solid transparent;border-right:2px solid transparent;box-shadow:inset 0 0 0 2px}.gg-color-picker::after,.gg-color-picker::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor}.gg-color-picker::before{top:-2px;border-radius:3px;width:2px;height:10px;right:-3px}.gg-color-picker::after{width:8px;height:6px;right:-9px;box-shadow:-21px 0 0 -2px;border-top-right-radius:100px;border-bottom-right-radius:100px}.gg-comedy-central,.gg-comedy-central::before{box-sizing:border-box;display:block;border:3px solid;border-radius:100px}.gg-comedy-central{position:relative;border-left-color:transparent;transform:scale(var(--ggs,1));width:20px;height:20px}.gg-comedy-central::before{content:"";position:absolute;border-right-color:transparent;width:10px;height:10px;bottom:2px;right:2px}.gg-comment{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:16px;border:2px solid;border-bottom:0;box-shadow:-6px 8px 0 -6px,6px 8px 0 -6px}.gg-comment::after,.gg-comment::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px}.gg-comment::before{border:2px solid;border-top-color:transparent;border-bottom-left-radius:20px;right:4px;bottom:-6px;height:6px}.gg-comment::after{height:2px;background:currentColor;box-shadow:0 4px 0 0;left:4px;top:4px}.gg-community{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:21px;height:14px}.gg-community::after,.gg-community::before{content:"";display:block;position:absolute;border:2px solid;width:10px;height:10px;border-radius:22px}.gg-community::after{right:0}.gg-components{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg)scale(var(--ggs,1));width:14px;height:14px;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 0 0/2px 6px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 4px 0/2px 6px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 8px 0/2px 6px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 12px 0/2px 6px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 0 8px/2px 6px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 4px 8px/2px 6px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 8px 8px/2px 6px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 12px 8px/2px 6px}.gg-components::after,.gg-components::before{content:"";display:block;position:absolute;width:6px;height:2px;border-top:6px double;border-bottom:6px double}.gg-components::after{right:0}.gg-compress-left{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:2px;height:26px;border-top:10px solid;border-bottom:10px solid}.gg-compress-left::after,.gg-compress-left::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);left:-2px}.gg-compress-left::after{border-bottom:2px solid;border-right:2px solid;top:-5px}.gg-compress-left::before{border-top:2px solid;border-left:2px solid;bottom:-5px}.gg-compress-right{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:2px;height:26px;border-top:10px solid;border-bottom:10px solid}.gg-compress-right::after,.gg-compress-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);left:-2px}.gg-compress-right::after{border-bottom:2px solid;border-right:2px solid;top:-5px}.gg-compress-right::before{border-top:2px solid;border-left:2px solid;bottom:-5px}.gg-compress-v{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:26px;border-top:10px solid;border-bottom:10px solid}.gg-compress-v::after,.gg-compress-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(45deg);left:-2px}.gg-compress-v::after{border-bottom:2px solid;border-right:2px solid;top:-5px}.gg-compress-v::before{border-top:2px solid;border-left:2px solid;bottom:-5px}.gg-compress{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:26px;height:2px;border-left:10px solid;border-right:10px solid}.gg-compress::after,.gg-compress::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;top:-2px}.gg-compress::before{border-right:2px solid;left:-5px;transform:rotate(45deg)}.gg-compress::after{border-left:2px solid;right:-5px;transform:rotate(-45deg)}.gg-controller{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:8px;border:2px solid;border-radius:100px}.gg-controller::before{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:14px;box-shadow:-6px -6px 0 -4px,6px 6px 0 -4px,6px -6px 0 -4px,-6px 6px 0 -4px;left:-5px;top:-5px;transform:rotate(45deg)}.gg-copy{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:18px;border:2px solid;margin-left:-5px;margin-top:-4px}.gg-copy::after,.gg-copy::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-copy::before{background:linear-gradient( to left,currentColor 5px,transparent 0)no-repeat right top/5px 2px,linear-gradient( to left,currentColor 5px,transparent 0)no-repeat left bottom/ 2px 5px;box-shadow:inset -4px -4px 0 -2px;bottom:-6px;right:-6px;width:14px;height:18px}.gg-copy::after{width:6px;height:2px;background:currentColor;left:2px;top:2px;box-shadow:0 4px 0,0 8px 0}.gg-copyright,.gg-copyright::after{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:40px}.gg-copyright::after{content:"";position:absolute;border-right-color:transparent;width:8px;height:8px;top:3px;left:3px;transform:none}.gg-corner-double-down-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:12px;border-bottom-right-radius:4px;border-bottom:2px solid;border-right:2px solid}.gg-corner-double-down-left::after,.gg-corner-double-down-left::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-left:2px solid;transform:rotate(45deg)}.gg-corner-double-down-left::after{border-bottom:2px solid;bottom:-4px}.gg-corner-double-down-left::before{border-top:2px solid;right:-4px}.gg-corner-double-down-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:12px;border-bottom-left-radius:4px;border-bottom:2px solid;border-left:2px solid}.gg-corner-double-down-right::after,.gg-corner-double-down-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;transform:rotate(45deg)}.gg-corner-double-down-right::after{border-right:2px solid;bottom:-4px;right:0}.gg-corner-double-down-right::before{border-left:2px solid;left:-4px}.gg-corner-double-left-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:12px;border-top-left-radius:4px;border-top:2px solid;border-left:2px solid}.gg-corner-double-left-down::after,.gg-corner-double-left-down::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-right:2px solid;transform:rotate(45deg)}.gg-corner-double-left-down::after{border-top:2px solid;top:-4px;right:0}.gg-corner-double-left-down::before{border-bottom:2px solid;left:-4px;bottom:0}.gg-corner-double-left-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:10px;border-bottom-left-radius:4px;border-bottom:2px solid;border-left:2px solid}.gg-corner-double-left-up::after,.gg-corner-double-left-up::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;left:-4px;transform:rotate(45deg)}.gg-corner-double-left-up::after{border-left:2px solid;top:-4px}.gg-corner-double-left-up::before{border-left:2px solid;top:0}.gg-corner-double-right-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:12px;border-top-right-radius:4px;border-top:2px solid;border-right:2px solid}.gg-corner-double-right-down::after,.gg-corner-double-right-down::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;transform:rotate(45deg)}.gg-corner-double-right-down::after{border-left:2px solid;top:-4px;left:0}.gg-corner-double-right-down::before{border-right:2px solid;right:-4px;bottom:0}.gg-corner-double-right-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:10px;border-bottom-right-radius:4px;border-bottom:2px solid;border-right:2px solid}.gg-corner-double-right-up::after,.gg-corner-double-right-up::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-left:2px solid;right:-4px;transform:rotate(45deg)}.gg-corner-double-right-up::after{border-top:2px solid;top:-4px}.gg-corner-double-right-up::before{border-top:2px solid;top:0}.gg-corner-double-up-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:8px;border-top-right-radius:4px;border-top:2px solid;border-right:2px solid}.gg-corner-double-up-left::after,.gg-corner-double-up-left::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;top:-4px;transform:rotate(45deg)}.gg-corner-double-up-left::after{border-left:2px solid}.gg-corner-double-up-left::before{border-left:2px solid;left:-4px}.gg-corner-double-up-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:8px;border-top-left-radius:4px;border-top:2px solid;border-left:2px solid}.gg-corner-double-up-right::after,.gg-corner-double-up-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-right:2px solid;top:-4px;transform:rotate(45deg)}.gg-corner-double-up-right::after{border-top:2px solid;right:0}.gg-corner-double-up-right::before{border-top:2px solid;right:-4px}.gg-corner-down-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-corner-down-left::after,.gg-corner-down-left::before{content:"";display:block;box-sizing:border-box;position:absolute;left:3px}.gg-corner-down-left::after{width:8px;height:8px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);bottom:3px}.gg-corner-down-left::before{width:16px;height:12px;border-bottom-right-radius:4px;border-bottom:2px solid;border-right:2px solid;bottom:6px}.gg-corner-down-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-corner-down-right::after,.gg-corner-down-right::before{content:"";display:block;box-sizing:border-box;position:absolute;right:3px}.gg-corner-down-right::after{width:8px;height:8px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);bottom:3px}.gg-corner-down-right::before{width:16px;height:12px;border-bottom-left-radius:4px;border-bottom:2px solid;border-left:2px solid;bottom:6px}.gg-corner-left-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-corner-left-down::after,.gg-corner-left-down::before{content:"";display:block;box-sizing:border-box;position:absolute;bottom:3px}.gg-corner-left-down::after{width:8px;height:8px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);left:3px}.gg-corner-left-down::before{width:12px;height:16px;border-top-left-radius:4px;border-top:2px solid;border-left:2px solid;left:6px}.gg-corner-left-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-corner-left-up::after,.gg-corner-left-up::before{content:"";display:block;box-sizing:border-box;position:absolute;top:3px}.gg-corner-left-up::after{width:8px;height:8px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);left:3px}.gg-corner-left-up::before{width:12px;height:16px;border-bottom-left-radius:4px;border-bottom:2px solid;border-left:2px solid;left:6px}.gg-corner-right-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-corner-right-down::after,.gg-corner-right-down::before{content:"";display:block;box-sizing:border-box;position:absolute;bottom:3px}.gg-corner-right-down::after{width:8px;height:8px;border-bottom:2px solid;border-right:2px solid;transform:rotate(45deg);right:3px}.gg-corner-right-down::before{width:12px;height:16px;border-top-right-radius:4px;border-top:2px solid;border-right:2px solid;right:6px}.gg-corner-right-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-corner-right-up::after,.gg-corner-right-up::before{content:"";display:block;box-sizing:border-box;position:absolute;top:3px}.gg-corner-right-up::after{width:8px;height:8px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);right:3px}.gg-corner-right-up::before{width:12px;height:16px;border-bottom-right-radius:4px;border-bottom:2px solid;border-right:2px solid;right:6px}.gg-corner-up-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-corner-up-left::after,.gg-corner-up-left::before{content:"";display:block;box-sizing:border-box;position:absolute;left:3px}.gg-corner-up-left::after{width:8px;height:8px;border-bottom:2px solid;border-left:2px solid;transform:rotate(45deg);top:3px}.gg-corner-up-left::before{width:16px;height:12px;border-top-right-radius:4px;border-top:2px solid;border-right:2px solid;top:6px}.gg-corner-up-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-corner-up-right::after,.gg-corner-up-right::before{content:"";display:block;box-sizing:border-box;position:absolute;right:3px}.gg-corner-up-right::after{width:8px;height:8px;border-top:2px solid;border-right:2px solid;transform:rotate(45deg);top:3px}.gg-corner-up-right::before{width:16px;height:12px;border-top-left-radius:4px;border-top:2px solid;border-left:2px solid;top:6px}.gg-credit-card{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:18px;border:2px solid;border-radius:4px}.gg-credit-card::after,.gg-credit-card::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:24px;left:-2px;height:2px;background:currentColor;top:9px}.gg-credit-card::before{width:6px;left:2px;top:3px}.gg-crop{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px}.gg-crop::after,.gg-crop::before{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:14px}.gg-crop::before{border-right:2px solid;border-top:2px solid;left:1px;top:5px}.gg-crop::after{border-left:2px solid;border-bottom:2px solid;top:1px;right:1px}.gg-cross{transform:scale(var(--ggs,1))}.gg-cross,.gg-cross::after{box-sizing:border-box;position:relative;display:block;width:10px;height:2px;border-radius:3px;background:currentColor}.gg-cross::after{content:"";position:absolute;width:2px;height:12px;top:-4px;left:4px}.gg-crowdfire{display:block;box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));width:20px;height:20px}.gg-crowdfire::after,.gg-crowdfire::before{content:"";display:block;position:absolute;box-sizing:border-box}.gg-crowdfire::before{width:20px;height:20px;border:4px solid;border-radius:100px;border-right-color:transparent;transform:rotate(-45deg)}.gg-crowdfire::after{width:8px;height:8px;border-top:4px solid;border-right:4px solid;right:2px;top:2px}.gg-crown{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:19px;height:12px;border:2px solid;border-top-color:transparent;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding-top:4px}.gg-crown::after,.gg-crown::before{content:"";display:block;position:absolute;box-sizing:border-box;width:8px;height:8px;border-bottom:2px solid;border-left:2px solid;transform:rotate(-45deg);top:-4px}.gg-crown::before{border-top-left-radius:2px;left:-1px}.gg-crown::after{border-bottom-right-radius:2px;right:-1px}.gg-danger{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:40px}.gg-danger::after,.gg-danger::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;background:currentColor;left:7px}.gg-danger::after{top:2px;height:8px}.gg-danger::before{height:2px;bottom:2px}.gg-dark-mode{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:100px;width:20px;height:20px}.gg-dark-mode::after,.gg-dark-mode::before{content:"";box-sizing:border-box;position:absolute;display:block}.gg-dark-mode::before{border:5px solid;border-top-left-radius:100px;border-bottom-left-radius:100px;border-right:0;width:9px;height:18px;top:-1px;left:-1px}.gg-dark-mode::after{border:4px solid;border-top-right-radius:100px;border-bottom-right-radius:100px;border-left:0;width:4px;height:8px;right:4px;top:4px}.gg-data{transform:scale(var(--ggs,1))}.gg-data,.gg-data::after,.gg-data::before{box-sizing:border-box;position:relative;display:block;border:2px solid;border-radius:50%;width:14px;height:14px}.gg-data::after,.gg-data::before{content:"";position:absolute;width:6px;height:6px;top:2px;left:2px}.gg-data::after{background:linear-gradient( to left,currentColor 8px,transparent 0)no-repeat bottom center/2px 8px;width:22px;height:22px;top:-6px;left:-6px}.gg-data,.gg-data::after{border-top-color:transparent;border-bottom-color:transparent}.gg-database{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:14px;border:2px solid transparent;border-top:2px solid transparent;border-bottom:2px solid transparent;border-left:6px solid transparent;box-shadow:0 0 0 2px,inset 0 2px 0 0,inset 0 -2px 0 0;border-radius:1px}.gg-database::after,.gg-database::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-database::before{background:currentColor;width:20px;height:2px;top:4px;left:-8px}.gg-database::after{width:2px;height:10px;border-bottom:2px solid;border-top:2px solid;top:0;left:-4px}.gg-debug{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:18px;border:2px solid;border-radius:22px}.gg-debug::after,.gg-debug::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-debug::before{width:8px;height:4px;border:2px solid;top:-4px;border-bottom-left-radius:10px;border-bottom-right-radius:10px;border-top:0}.gg-debug::after{background:currentColor;width:4px;height:2px;border-radius:5px;top:4px;left:2px;box-shadow:0 4px 0,-6px -2px 0,-6px 2px 0,-6px 6px 0,6px -2px 0,6px 2px 0,6px 6px 0}.gg-designmodo{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:20px;height:16px;background:linear-gradient( to left,currentColor 5px,transparent 0)no-repeat right 3px/8px 3px}.gg-designmodo::after,.gg-designmodo::before{content:"";display:block;position:absolute;box-sizing:border-box;width:10px;height:10px;border:3px solid;border-radius:10px}.gg-designmodo::after{width:14px;height:14px;border:3px solid transparent;border-bottom:3px solid;left:3px;bottom:0}.gg-desktop{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:22px;height:18px;border:2px solid;border-radius:3px;overflow:hidden;}.gg-desktop::before{content:"";display:block;position:absolute;box-sizing:border-box;width:22px;height:2px;background:currentColor;top:2px;left:-2px;}.gg-desktop::after{content:"";display:block;position:absolute;box-sizing:border-box;background:currentColor;width:2px;height:2px;border-radius:4px;bottom:2px;left:4px;box-shadow:4px 0 0,8px 0 0 ;}.gg-details-less{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:14px;border:2px solid transparent}.gg-details-less::after,.gg-details-less::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;border-radius:3px;background:currentColor}.gg-details-less::before{top:2px;width:16px}.gg-details-less::after{width:10px;bottom:2px}.gg-details-more{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:14px;border:2px solid transparent}.gg-details-more::after,.gg-details-more::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;border-radius:3px;background:currentColor}.gg-details-more::before{box-shadow:0 4px 0 0;top:0;width:16px}.gg-details-more::after{width:10px;bottom:0}.gg-dialpad{transform:scale(var(--ggs,1));}.gg-dialpad,.gg-dialpad::before{box-shadow:-5px 0 0,5px 0 0}.gg-dialpad,.gg-dialpad::after,.gg-dialpad::before{box-sizing:border-box;position:relative;display:block;width:3px;height:3px;background:currentColor}.gg-dialpad::after,.gg-dialpad::before{content:"";position:absolute;left:0;}.gg-dialpad::before{bottom:5px}.gg-dialpad::after{box-shadow:-5px 0 0,5px 0 0,0 5px 0;top:5px}.gg-dice-1{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:22px;height:22px;border:2px solid;border-radius:3px}.gg-dice-1::before{content:"";display:block;box-sizing:border-box;background:currentColor;position:absolute;width:4px;height:4px;border-radius:4px;left:7px;top:7px}.gg-dice-2{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:22px;height:22px;border:2px solid;border-radius:3px}.gg-dice-2::before{content:"";display:block;box-sizing:border-box;background:currentColor;position:absolute;width:4px;height:4px;border-radius:4px;left:2px;top:2px;box-shadow:10px 10px 0}.gg-dice-3{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:22px;height:22px;border:2px solid;border-radius:3px}.gg-dice-3::before{content:"";display:block;box-sizing:border-box;background:currentColor;position:absolute;width:4px;height:4px;border-radius:4px;left:2px;top:2px;box-shadow:5px 5px 0,10px 10px 0}.gg-dice-4{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:22px;height:22px;border:2px solid;border-radius:3px}.gg-dice-4::before{content:"";display:block;box-sizing:border-box;background:currentColor;position:absolute;width:4px;height:4px;border-radius:4px;left:2px;top:2px;box-shadow:0 10px 0,10px 0 0,10px 10px 0}.gg-dice-5{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:22px;height:22px;border:2px solid;border-radius:3px;}.gg-dice-5::before{content:"";display:block;box-sizing:border-box;background:currentColor;position:absolute;width:4px;height:4px;border-radius:4px;left:2px;top:2px;box-shadow:0 10px 0,10px 0 0,10px 10px 0,5px 5px 0;}.gg-dice-6{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:22px;height:22px;border:2px solid;border-radius:3px;}.gg-dice-6::before{content:"";display:block;box-sizing:border-box;background:currentColor;position:absolute;width:4px;height:4px;border-radius:4px;left:2px;top:2px;box-shadow:0 5px 0,0 10px 0,10px 0 0,10px 5px 0,10px 10px 0;}.gg-digitalocean{position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;background:linear-gradient(to left,currentColor 4px,transparent 0 ) no-repeat 1px 14px/2px 2px,linear-gradient(to left,currentColor 4px,transparent 0 ) no-repeat 3px 16px/3px 3px}.gg-digitalocean::after,.gg-digitalocean::before{content:"";display:block;position:absolute;box-sizing:border-box}.gg-digitalocean::after{width:4px;height:4px;background:currentColor;bottom:4px;left:6px}.gg-digitalocean::before{width:20px;height:20px;border:4px solid;transform:rotate(-45deg);border-radius:100px;border-left-color:transparent}.gg-disc,.gg-disc::after,.gg-disc::before{display:block;box-sizing:border-box;border:2px solid;border-radius:50%}.gg-disc{border-top-color:transparent;border-bottom-color:transparent;transform:rotate(45deg) scale(var(--ggs,1));position:relative;width:14px;height:14px}.gg-disc::after,.gg-disc::before{content:"";position:absolute;width:6px;height:6px;top:2px;left:2px}.gg-disc::after{width:22px;height:22px;border-radius:100%;top:-6px;left:-6px}.gg-display-flex{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));height:14px;width:16px;border:2px solid transparent;box-shadow:0 0 0 2px,inset -2px 0 0 0,inset 2px 0 0 0}.gg-display-fullwidth{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));height:14px;width:16px;box-shadow:inset 0 0 0 2px,0 2px 0 0,0 -2px 0 0;border-top:2px solid transparent;border-bottom:2px solid transparent}.gg-display-grid{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));height:14px;width:14px;border:2px solid transparent;box-shadow:0 0 0 2px}.gg-display-grid::after,.gg-display-grid::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:4px;border-right:4px solid;border-left:4px solid;top:0;left:0}.gg-display-grid::before{top:6px}.gg-display-spacing{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));height:14px;width:14px;box-shadow:inset 0 0 0 2px,2px 0 0 0,-2px 0 0 0;border-left:2px solid transparent;border-right:2px solid transparent}.gg-distribute-horizontal{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));height:14px;width:14px;border-left:2px solid;border-right:2px solid}.gg-distribute-horizontal::after{content:"";display:block;box-sizing:border-box;position:absolute;height:8px;width:4px;background:currentColor;right:3px;top:3px;opacity:.5}.gg-distribute-vertical{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));height:14px;width:14px;border-top:2px solid;border-bottom:2px solid}.gg-distribute-vertical::after{content:"";display:block;box-sizing:border-box;position:absolute;height:4px;width:8px;background:currentColor;right:3px;top:3px;opacity:.5}.gg-dock-bottom{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:20px;height:16px;border:2px solid;border-bottom-width:6px}.gg-dock-left{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:20px;height:16px;border:2px solid;border-left-width:6px}.gg-dock-right{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:20px;height:16px;border:2px solid;border-right-width:6px}.gg-dock-window{display:block;transform:scale(var(--ggs,1));position:relative;box-sizing:border-box;width:20px;height:16px;border:2px solid;border-left-width:4px;border-bottom-width:4px}.gg-dolby,.gg-dolby::after,.gg-dolby::before{display:block;box-sizing:border-box;height:16px;border:4px solid}.gg-dolby{position:relative;transform:scale(var(--ggs,1));width:24px}.gg-dolby::after,.gg-dolby::before{content:"";position:absolute;width:14px;top:-4px}.gg-dolby::before{border-top-right-radius:10px;border-bottom-right-radius:10px;left:-4px}.gg-dolby::after{border-top-left-radius:10px;border-bottom-left-radius:10px;right:-4px}.gg-dollar{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:20px;background:currentColor}.gg-dollar::after,.gg-dollar::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:8px;border:2px solid}.gg-dollar::before{border-right:0;border-top-left-radius:100px;border-bottom-left-radius:100px;top:3px;left:-6px;box-shadow:4px -2px 0 -2px}.gg-dollar::after{border-left:0;border-top-right-radius:100px;border-bottom-right-radius:100px;bottom:3px;right:-6px;box-shadow:-4px 2px 0 -2px}.gg-dribbble{background:radial-gradient(circle at 50%,transparent 0,transparent 9px,currentColor 9.2px,currentColor 11px,transparent 11.2px)no-repeat -8px center;box-sizing:border-box;position:relative;display:block;transform:rotate(-25deg)scale(var(--ggs,1));width:22px;height:22px;box-shadow:inset 0 0 0 2px;border-radius:50%;overflow:hidden}.gg-dribbble::after,.gg-dribbble::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:50%;border:2px solid;height:26px}.gg-dribbble::before{width:36px;left:-6px;top:-15px}.gg-dribbble::after{top:13px;left:-7px;width:31px}.gg-drive{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:26px;height:10px;border:2px solid;border-radius:2px}.gg-drive::after,.gg-drive::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:2px;border-radius:10px;background:currentColor;top:2px;right:2px}.gg-drive::before{right:6px}.gg-drop-invert{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:16px;height:16px;border-radius:0 100% 100% 100%;box-shadow:inset 0 0 0 2px;overflow:hidden}.gg-drop-invert::before{content:"";display:block;position:absolute;box-sizing:border-box;width:24px;height:24px;background:currentColor;transform:rotate(-45deg);right:-15px;top:-10px;}.gg-drop-opacity{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:16px;height:16px;border-radius:0 100% 100% 100%;box-shadow:inset 0 0 0 2px;overflow:hidden}.gg-drop-opacity::before{content:"";display:block;position:absolute;box-sizing:border-box;width:24px;height:24px;background:currentColor;transform:rotate(-45deg);right:-10px;bottom:-16px;}.gg-drop{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:16px;height:16px;border-radius:0 100% 100% 100%;box-shadow:inset 0 0 0 2px}.gg-duplicate{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:10px;border:2px solid transparent;border-bottom:4px solid transparent;box-shadow:0 0 0 2px,inset 0 -2px 0 0;margin-left:-4px;margin-top:4px}.gg-duplicate::after,.gg-duplicate::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-duplicate::before{background:currentColor;left:2px;bottom:-2px;width:2px;height:6px}.gg-duplicate::after{width:14px;height:14px;border-right:2px solid;border-top:2px solid;right:-8px;top:-8px}.gg-edit-black-point{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid transparent;box-shadow:0 0 0 2px;border-radius:100px;overflow:hidden}.gg-edit-black-point::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border:3px solid;border-radius:6px;left:2px;top:2px;}.gg-edit-contrast{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid transparent;box-shadow:0 0 0 2px;border-radius:100px;overflow:hidden}.gg-edit-contrast::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:12px;background:currentColor}.gg-edit-exposure{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid transparent;box-shadow:0 0 0 2px;border-radius:100px;overflow:hidden}.gg-edit-exposure::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:8px;border-top:2px solid;border-bottom:2px solid;left:3px;top:3px;}.gg-edit-exposure::after{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:6px;background:currentColor;left:5px;top:1px;}.gg-edit-fade{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid transparent;box-shadow:0 0 0 2px;border-radius:100px;overflow:hidden}.gg-edit-fade::after,.gg-edit-fade::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:20px;left:-2px;background:currentColor;opacity:.6}.gg-edit-fade::before{left:6px;opacity:.1}.gg-edit-flip-h{box-sizing:border-box;position:relative;display:block;width:18px;height:18px;transform:scale(var(--ggs,1));background:linear-gradient( to left,currentColor 22px,transparent 0) no-repeat center/2px 22px}.gg-edit-flip-h::after,.gg-edit-flip-h::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:14px;border:2px solid;top:2px}.gg-edit-flip-h::before{border-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.gg-edit-flip-h::after{opacity:.5;border-left:0;border-top-right-radius:3px;border-bottom-right-radius:3px;right:0}.gg-edit-flip-v{box-sizing:border-box;position:relative;display:block;width:18px;height:18px;transform:scale(var(--ggs,1));background:linear-gradient( to left,currentColor 22px,transparent 0) no-repeat center/22px 2px}.gg-edit-flip-v::after,.gg-edit-flip-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:6px;border:2px solid;left:2px}.gg-edit-flip-v::before{border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px}.gg-edit-flip-v::after{opacity:.5;border-top:0;border-bottom-left-radius:3px;border-bottom-right-radius:3px;bottom:0}.gg-edit-highlight{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid transparent;box-shadow:0 0 0 2px;border-radius:100px;overflow:hidden}.gg-edit-highlight::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:14px;top:-1px;background:repeating-linear-gradient( to bottom,currentColor,currentColor 2px,transparent 0px,transparent 3px)}.gg-edit-highlight::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:14px;right:0;background:currentColor}.gg-edit-markup{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:22px;overflow:hidden;perspective:20px}.gg-edit-markup::after,.gg-edit-markup::before{content:"";display:block;position:absolute;box-sizing:border-box}.gg-edit-markup::before{width:0;height:6px;border-bottom:6px solid;border-left:3px solid transparent;border-right:3px solid transparent;bottom:9px;left:6px}.gg-edit-markup::after{width:10px;height:12px;border:2px solid;border-top:4px solid;border-bottom:0;bottom:0;left:4px;transform:rotateX(60deg)}.gg-edit-mask,.gg-edit-mask::after{display:block;box-sizing:border-box;border-radius:22px}.gg-edit-mask{position:relative;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;overflow:hidden}.gg-edit-mask::after{content:"";position:absolute;width:4px;height:4px;background:currentColor;top:6px;left:6px;box-shadow:0 7px 0 1px,0 -7px 0 1px,-7px 0 0 1px,7px 0 0 1px}.gg-edit-noise{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid transparent;box-shadow:0 0 0 2px;border-radius:100px;overflow:hidden}.gg-edit-noise::before{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:12px;background-image:radial-gradient(circle,currentColor 25%,transparent 25%),radial-gradient(circle,currentColor 25%,transparent 25%);background-position:4px 4px,2px 2px;background-size:4px 4px;}.gg-edit-shadows{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid transparent;box-shadow:0 0 0 2px;border-radius:100px;overflow:hidden}.gg-edit-shadows::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:14px;right:0;top:-1px;background:repeating-linear-gradient( to bottom,currentColor,currentColor 2px,transparent 0px,transparent 3px)}.gg-edit-shadows::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:14px;left:0;background:currentColor}.gg-edit-straight{box-sizing:border-box;position:relative;display:block;width:22px;height:16px;transform:scale(var(--ggs,1));background:linear-gradient( to left,currentColor 22px,transparent 0) no-repeat left center/4px 2px,linear-gradient( to left,currentColor 22px,transparent 0) no-repeat right center/4px 2px}.gg-edit-straight::after,.gg-edit-straight::before{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:7px;background:currentColor;left:4px}.gg-edit-straight::before{border-top-left-radius:10px;border-top-right-radius:10px}.gg-edit-straight::after{border-bottom-left-radius:10px;border-bottom-right-radius:10px;bottom:0}.gg-edit-unmask,.gg-edit-unmask::after{display:block;box-sizing:border-box;border-radius:22px}.gg-edit-unmask{position:relative;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid transparent}.gg-edit-unmask::after{content:"";position:absolute;width:4px;height:4px;background:currentColor;top:6px;left:6px;box-shadow:0 7px 0 1px,0 -7px 0 1px,-7px 0 0 1px,7px 0 0 1px}.gg-eject{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-eject::after,.gg-eject::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-eject::before{border-bottom:2px solid;width:12px;height:2px;bottom:0;left:3px}.gg-eject::after{width:8px;height:8px;border-top:2px solid;border-left:2px solid;transform:rotate(45deg);left:5px;bottom:1px}.gg-enter{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:18px;border:2px solid;border-left:0;box-shadow:-8px -6px 0 -6px,-8px 6px 0 -6px}.gg-enter::after,.gg-enter::before{content:"";display:block;box-sizing:border-box;position:absolute;right:4px}.gg-enter::before{background:currentColor;width:16px;height:2px;top:6px}.gg-enter::after{width:6px;height:6px;border-right:2px solid;border-top:2px solid;top:4px;transform:rotate(45deg)}.gg-erase{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:18px}.gg-erase::after,.gg-erase::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-erase::before{width:6px;height:14px;border-bottom:4px solid transparent;border-radius:1px;box-shadow:0 0 0 2px,inset 0 -2px 0 0;left:7px;top:2px;transform:rotate(45deg)}.gg-erase::after{background:currentColor;width:22px;height:2px;bottom:0;border-radius:20px}.gg-ereader{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:18px;border:2px solid;border-radius:3px}.gg-ereader::after,.gg-ereader::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:18px;right:9px;top:-2px;background:currentColor}.gg-ereader::after{width:5px;height:2px;box-shadow:0 4px 0,0 8px 0;top:2px;right:2px}.gg-ericsson,.gg-ericsson::before{display:block;box-sizing:border-box}.gg-ericsson{position:relative;transform:scale(var(--ggs,1));width:14px;height:16px}.gg-ericsson::before{content:"";position:absolute;background:currentColor;transform:rotate(-25deg);width:16px;height:4px;border-radius:4px;box-shadow:3px -6px 0,-3px 6px 0;top:7px;left:2px}.gg-ethernet{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:20px;border:2px solid;box-shadow:0 10px 0 -7px}.gg-ethernet::after,.gg-ethernet::before{content:"";display:block;box-sizing:border-box;position:absolute;top:6px}.gg-ethernet::before{width:8px;height:8px;border:2px solid;border-top:0;left:2px}.gg-ethernet::after{width:16px;height:2px;border-left:6px solid;border-right:6px solid;left:-2px}.gg-euro{position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;border:2px solid;box-sizing:border-box;border-radius:100px;border-right-color:transparent}.gg-euro::after{content:"";display:block;box-sizing:border-box;position:absolute;width:9px;height:5px;border-top:2px solid;border-bottom:2px solid;transform:skewX(-20deg);left:-4px;top:3px}.gg-eventbrite{display:block;position:relative;box-sizing:border-box;transform:rotate(-25deg) scale(var(--ggs,1));width:20px;height:20px;}.gg-eventbrite::before{content:"";display:block;box-sizing:border-box;position:absolute;width:18px;height:11px;border:4px solid;border-top-right-radius:20px;border-top-left-radius:20px;}.gg-eventbrite::after{content:"";display:block;box-sizing:border-box;position:absolute;width:18px;height:18px;border:4px solid;border-top-color:transparent;border-right-color:transparent;border-radius:20px;}.gg-expand{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:6px;height:6px;border-bottom:2px solid;border-left:2px solid}.gg-expand::after,.gg-expand::before{content:"";display:block;box-sizing:border-box;position:absolute;}.gg-expand::after{background:currentColor;bottom:4px;transform:rotate(-44deg);width:14px;height:2px;left:-2px}.gg-expand::before{width:6px;height:6px;border-top:2px solid;border-right:2px solid;left:5px;top:-7px}.gg-export{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:14px;border:2px solid;border-top:0;box-shadow:-6px -8px 0 -6px,6px -8px 0 -6px}.gg-export::after,.gg-export::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-export::before{background:currentColor;width:2px;height:14px;right:6px;bottom:5px}.gg-export::after{width:6px;height:6px;border-left:2px solid;border-top:2px solid;right:4px;bottom:14px;transform:rotate(45deg)}.gg-extension-add{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 10px 2px/6px 2px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 12px 0/2px 6px;width:16px;height:16px}.gg-extension-add::after,.gg-extension-add::before{content:"";display:block;position:absolute;box-sizing:border-box;width:8px;height:14px;border:2px solid;bottom:0}.gg-extension-add::after{width:14px;height:8px}.gg-extension-alt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-extension-alt::after,.gg-extension-alt::before{content:"";display:block;position:absolute;box-sizing:border-box;width:8px;height:14px;border:2px solid}.gg-extension-alt::after{width:14px;height:8px}.gg-extension-remove{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 10px 4px/6px 2px;width:16px;height:16px}.gg-extension-remove::after,.gg-extension-remove::before{content:"";display:block;position:absolute;box-sizing:border-box;width:8px;height:14px;border:2px solid;bottom:0}.gg-extension-remove::after{width:14px;height:8px}.gg-extension,.gg-extension::after,.gg-extension::before{box-sizing:border-box;display:block;border:2px solid}.gg-extension{position:relative;transform:translateX(-10px) scale(var(--ggs,1));width:8px;height:14px}.gg-extension::after,.gg-extension::before{content:"";position:absolute;height:8px}.gg-extension::before{bottom:-2px;left:-2px;width:14px}.gg-extension::after{top:-6px;right:-12px;width:8px}.gg-external{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:12px;box-shadow:-2px 2px 0 0,-4px -4px 0 -2px,4px 4px 0 -2px;margin-left:-2px;margin-top:1px}.gg-external::after,.gg-external::before{content:"";display:block;box-sizing:border-box;position:absolute;right:-4px}.gg-external::before{background:currentColor;transform:rotate(-45deg);width:12px;height:2px;top:1px}.gg-external::after{width:8px;height:8px;border-right:2px solid;border-top:2px solid;top:-4px}.gg-eye-alt{position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:18px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.gg-eye-alt::after,.gg-eye-alt::before{content:"";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.gg-eye-alt::after{top:2px;box-shadow:inset 0 -8px 0 2px,inset 0 0 0 2px;width:24px;height:24px}.gg-eye-alt::before{width:8px;height:8px;border:2px solid transparent;box-shadow:inset 0 0 0 6px,0 0 0 4px,6px 0 0 0,-6px 0 0 0 ;bottom:4px;left:8px}.gg-eye{position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:18px;border-bottom-right-radius:100px;border-bottom-left-radius:100px;overflow:hidden;box-sizing:border-box}.gg-eye::after,.gg-eye::before{content:"";display:block;border-radius:100px;position:absolute;box-sizing:border-box}.gg-eye::after{top:2px;box-shadow:inset 0 -8px 0 2px,inset 0 0 0 2px;width:24px;height:24px}.gg-eye::before{width:8px;height:8px;border:2px solid;bottom:4px;left:8px}.gg-facebook{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px}.gg-facebook::after,.gg-facebook::before{content:"";display:block;position:absolute;box-sizing:border-box}.gg-facebook::before{width:8px;height:20px;border-left:4px solid;border-top:4px solid;border-top-left-radius:5px;left:6px}.gg-facebook::after{width:10px;height:4px;background:currentColor;top:7px;left:4px;transform:skew(-5deg)}.gg-feed,.gg-feed::after,.gg-feed::before{display:block;box-sizing:border-box;background:currentColor;box-shadow:0 10px 0 0}.gg-feed{margin-left:-8px;margin-top:-8px;position:relative;transform:scale(var(--ggs,1));width:7px;height:7px;border-radius:1px}.gg-feed::after,.gg-feed::before{content:"";position:absolute;border-radius:3px;width:12px;height:2px;top:1px;left:9px;opacity:.8}.gg-feed::after{width:8px;top:4px;opacity:.5}.gg-figma{box-sizing:border-box;position:relative;display:block;width:14px;height:20px;transform:scale(var(--ggs,1));background:linear-gradient(to left,currentColor 3px,transparent 0) no-repeat 3px 7px/3px 6px,linear-gradient(to left,currentColor 3px,transparent 0) no-repeat 3px 14px/3px 3px}.gg-figma::after,.gg-figma::before{content:"";display:block;box-sizing:border-box;position:absolute;width:13px;height:6px;background:currentColor;border-radius:22px}.gg-figma::after{width:6px;top:7px;box-shadow:7px 0 0,0 7px 0}.gg-file-add{background:linear-gradient(to bottom,currentColor 5px,transparent 0)no-repeat 2px 9px/6px 2px;box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:16px;border:2px solid transparent;border-right:0;border-top:0;box-shadow:0 0 0 2px;border-radius:1px;border-top-right-radius:4px;overflow:hidden}.gg-file-add::after,.gg-file-add::before{content:"";display:block;box-sizing:border-box;position:absolute;height:6px}.gg-file-add::before{background:currentColor;left:4px;width:2px;top:7px}.gg-file-add::after{width:6px;border-left:2px solid;border-bottom:2px solid;right:-1px;top:-1px}.gg-file-document{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:16px;border:2px solid transparent;border-right:0;border-top:0;box-shadow:0 0 0 2px;border-radius:1px;border-top-right-radius:4px;overflow:hidden}.gg-file-document::after,.gg-file-document::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-file-document::before{background:currentColor;box-shadow:0 4px 0,-6px -4px 0;left:0;width:10px;height:2px;top:8px}.gg-file-document::after{width:6px;height:6px;border-left:2px solid;border-bottom:2px solid;right:-1px;top:-1px}.gg-file-remove{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:16px;border:2px solid transparent;border-right:0;border-top:0;box-shadow:0 0 0 2px;border-radius:1px;border-top-right-radius:4px;overflow:hidden}.gg-file-remove::after,.gg-file-remove::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px}.gg-file-remove::before{background:currentColor;left:2px;height:2px;top:9px}.gg-file-remove::after{height:6px;border-left:2px solid;border-bottom:2px solid;right:-1px;top:-1px}.gg-file{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:16px;border:2px solid transparent;border-right:0;border-top:0;box-shadow:0 0 0 2px;border-radius:1px;border-top-right-radius:4px;overflow:hidden}.gg-file::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-left:2px solid;border-bottom:2px solid;right:-1px;top:-1px}.gg-film,.gg-film::after{display:block;box-sizing:border-box;border-radius:3px}.gg-film{border:2px solid;position:relative;transform:scale(var(--ggs,1));width:22px;height:18px}.gg-film::after{content:"";position:absolute;width:2px;height:2px;background:currentColor;left:2px;top:2px;box-shadow:0 4px 0,0 8px 0,12px 0 0,12px 4px 0,12px 8px 0}.gg-filters{display:block;box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));width:19px;height:19px;background:radial-gradient(circle,currentColor 26%,transparent 26%)}.gg-filters::after,.gg-filters::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid;border-radius:100%;width:14px;height:14px}.gg-filters::after{bottom:0;right:0}.gg-flag-alt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:20px;border-left:2px solid}.gg-flag-alt::after,.gg-flag-alt::before{content:"";display:block;box-sizing:border-box;position:absolute;border-bottom:2px solid}.gg-flag-alt::before{width:12px;height:10px;border-top:2px solid;border-right:2px solid transparent}.gg-flag-alt::after{width:8px;height:8px;border-left:2px solid;border-top-left-radius:2px;border-bottom-right-radius:2px;transform:rotate(45deg);top:1px;left:6px}.gg-flag{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:18px;border-left:2px solid}.gg-flag::after,.gg-flag::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px}.gg-flag::before{border-top:2px solid;border-bottom:2px solid}.gg-flag::after{border:2px solid;border-left:0;top:2px;left:7px}.gg-folder-add{background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat center center/2px 6px;box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:16px;border:2px solid;border-radius:3px}.gg-folder-add::after,.gg-folder-add::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-folder-add::before{background:currentColor;left:6px;width:6px;height:2px;top:5px}.gg-folder-add::after{width:10px;height:4px;border:2px solid;border-bottom:0;border-top-left-radius:2px;border-top-right-radius:4px;border-bottom-left-radius:0;border-bottom-right-radius:0;top:-5px}.gg-folder-remove{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:16px;border:2px solid;border-radius:3px}.gg-folder-remove::after,.gg-folder-remove::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px}.gg-folder-remove::before{background:currentColor;left:5px;width:8px;height:2px;top:5px}.gg-folder-remove::after{width:10px;height:4px;border:2px solid;border-bottom:0;border-top-left-radius:2px;border-top-right-radius:4px;border-bottom-left-radius:0;border-bottom-right-radius:0;top:-5px}.gg-folder{transform:scale(var(--ggs,1))}.gg-folder,.gg-folder::after{box-sizing:border-box;position:relative;display:block;width:22px;height:16px;border:2px solid;border-radius:3px}.gg-folder::after{content:"";position:absolute;width:10px;height:4px;border-bottom:0;border-top-left-radius:2px;border-top-right-radius:4px;border-bottom-left-radius:0;border-bottom-right-radius:0;top:-5px}.gg-font-height{box-sizing:border-box;position:relative;display:block;width:18px;height:18px;transform:scale(var(--ggs,1));border-top:2px solid;border-bottom:2px solid;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat center 8px/6px 2px}.gg-font-height::after,.gg-font-height::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:10px;background:currentColor;top:2px}.gg-font-height::before{transform:rotate(25deg);left:6px}.gg-font-height::after{transform:rotate(-25deg);right:6px}.gg-font-spacing{box-sizing:border-box;position:relative;display:block;width:18px;height:16px;transform:scale(var(--ggs,1));border-left:2px solid;border-right:2px solid;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat center 8px/6px 2px}.gg-font-spacing::after,.gg-font-spacing::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:10px;background:currentColor;top:2px}.gg-font-spacing::before{transform:rotate(25deg);left:4px}.gg-font-spacing::after{transform:rotate(-25deg);right:4px}.gg-format-bold{transform:scale(var(--ggs,1))}.gg-format-bold,.gg-format-bold::after{box-sizing:border-box;position:relative;display:block;width:8px;height:8px;border:2px solid;border-top-right-radius:100px;border-bottom-right-radius:100px}.gg-format-bold::after{content:"";position:absolute;width:10px;left:-2px;top:4px}.gg-format-center,.gg-format-center::before{display:block;box-sizing:border-box;height:2px;background:currentColor;border-radius:3px;box-shadow:0 8px 0}.gg-format-center{margin-top:-12px;position:relative;transform:scale(var(--ggs,1));width:16px}.gg-format-center::before{content:"";position:absolute;width:10px;top:4px;left:3px}.gg-format-color{box-sizing:border-box;position:relative;display:block;width:9px;height:2px;background:currentColor;transform:scale(var(--ggs,1));border-radius:3px;box-shadow:-2px 8px 0 0,2px 8px 0 0}.gg-format-color::after,.gg-format-color::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:14px;background:currentColor;top:-8px}.gg-format-color::before{transform:rotate(25deg);left:1px}.gg-format-color::after{transform:rotate(-25deg);right:1px}.gg-format-heading{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:14px;border-left:2px solid;border-right:2px solid}.gg-format-heading::after{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:2px;background:currentColor;top:6px;left:-2px}.gg-format-indent-decrease{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:14px;border-top:2px solid;border-bottom:2px solid}.gg-format-indent-decrease::after,.gg-format-indent-decrease::before{content:"";display:block;box-sizing:border-box;position:absolute;top:2px}.gg-format-indent-decrease::before{border-right:4px solid;left:1px;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent}.gg-format-indent-decrease::after{width:8px;height:6px;border-top:2px solid;border-bottom:2px solid;right:0}.gg-format-indent-increase{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:14px;border-top:2px solid;border-bottom:2px solid}.gg-format-indent-increase::after,.gg-format-indent-increase::before{content:"";display:block;box-sizing:border-box;position:absolute;top:2px}.gg-format-indent-increase::before{border-left:4px solid;left:1px;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent}.gg-format-indent-increase::after{width:8px;height:6px;border-top:2px solid;border-bottom:2px solid;right:0}.gg-format-italic{box-sizing:border-box;position:relative;display:block;transform:skewX(-20deg) scale(var(--ggs,1));width:6px;height:12px;border-top:2px solid;border-bottom:2px solid}.gg-format-italic::before{content:"";display:block;box-sizing:border-box;position:absolute;height:10px;width:2px;background:currentColor;left:2px;top:-2px}.gg-format-justify,.gg-format-justify::before{display:block;box-sizing:border-box;width:16px;height:2px;border-radius:3px;background:currentColor;box-shadow:0 8px 0}.gg-format-justify{margin-top:-11px;transform:scale(var(--ggs,1));position:relative}.gg-format-justify::before{content:"";position:absolute;top:4px;left:0}.gg-format-left,.gg-format-left::before{display:block;box-sizing:border-box;height:2px;background:currentColor;border-radius:3px;box-shadow:0 8px 0}.gg-format-left{margin-top:-11px;position:relative;transform:scale(var(--ggs,1));width:16px}.gg-format-left::before{content:"";position:absolute;width:10px;top:4px;left:0}.gg-format-line-height{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:10px;border-top:2px solid transparent;border-bottom:2px solid transparent;border-left:4px solid transparent;box-shadow:-2px 0 0 0,2px -4px 0 -2px,2px 4px 0 -2px,inset 0 2px 0 0,inset 0 -2px 0 0}.gg-format-line-height::after,.gg-format-line-height::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:0;border-right:3px solid transparent;border-left:3px solid transparent;left:-8px}.gg-format-line-height::before{border-top:4px solid;bottom:-5px}.gg-format-line-height::after{border-bottom:4px solid;top:-5px}.gg-format-right,.gg-format-right::before{display:block;box-sizing:border-box;height:2px;background:currentColor;border-radius:3px;box-shadow:0 8px 0}.gg-format-right{margin-top:-11px;position:relative;transform:scale(var(--ggs,1));width:16px}.gg-format-right::before{content:"";position:absolute;width:10px;top:4px;left:6px}.gg-format-separator{transform:scale(var(--ggs,1))}.gg-format-separator,.gg-format-separator::after{box-sizing:border-box;position:relative;display:block;width:18px;height:2px;border-radius:3px;background:currentColor}.gg-format-separator::after{content:"";position:absolute;top:-12px;left:3px;opacity:.5;width:12px;box-shadow:0 4px 0 0,0 8px 0 0,0 16px 0 0}.gg-format-slash{box-sizing:border-box;position:relative;display:block;transform:rotate(25deg) scale(var(--ggs,1));width:2px;height:14px;background:currentColor;border-radius:3px}.gg-format-strike{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:3px;border-left:4px solid transparent;border-right:4px solid transparent;box-shadow:0 -2px 0 0,inset 0 0 0 2px}.gg-format-strike::after,.gg-format-strike::before{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:2px;background:currentColor;left:-6px;top:4px}.gg-format-strike::after{width:2px;height:4px;left:0;top:7px}.gg-format-text{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:8px;border-left:4px solid transparent;border-right:4px solid transparent;box-shadow:0 -2px 0 0,inset 0 0 0 2px}.gg-format-text::after{content:"";display:block;box-sizing:border-box;position:absolute;width:18px;height:18px;border:1px dashed;top:-6px;left:-8px}.gg-format-underline{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:12px;border:2px solid;border-top:0;border-bottom-left-radius:100px;border-bottom-right-radius:100px}.gg-format-underline::after{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:12px;height:2px;background:currentColor;left:-2px;bottom:-6px}.gg-format-uppercase{transform:scale(var(--ggs,1))}.gg-format-uppercase,.gg-format-uppercase::after{box-sizing:border-box;position:relative;display:block;width:8px;height:8px;border-left:3px solid transparent;border-right:3px solid transparent;box-shadow:0 -2px 0 0,inset 0 0 0 2px}.gg-format-uppercase::after{content:"";position:absolute;width:6px;height:4px;border-left:2px solid transparent;border-right:2px solid transparent;bottom:0;right:-8px}.gg-framer{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:20px;overflow:hidden}.gg-framer::after,.gg-framer::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor}.gg-framer::before{width:20px;height:6px;transform:skewX(45deg);top:6px;left:-11px;box-shadow:20px -6px 0}.gg-framer::after{width:6px;height:8px;transform:skewY(45deg);bottom:4px;border-top-left-radius:4px;opacity:.5}.gg-games{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:12px;border:3px solid transparent;border-left:6px solid transparent;box-shadow:0 0 0 2px,inset 2px 0 0;border-radius:40px}.gg-games::after,.gg-games::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;background:currentColor}.gg-games::before{left:-2px;width:6px;top:2px}.gg-games::after{border-radius:3px;width:2px;box-shadow:0 4px 0,-2px 2px 0,2px 2px 0;top:0;right:2px}.gg-gender-female{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:10px;border:2px solid;border-radius:100%;margin-top:-4px}.gg-gender-female::after,.gg-gender-female::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:2px;background:currentColor;bottom:-6px;left:-1px}.gg-gender-female::before{width:2px;height:9px;bottom:-9px;left:2px}.gg-gender-male{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:10px;border:2px solid;border-radius:100%;margin-left:-4px;margin-top:4px}.gg-gender-male::after,.gg-gender-male::before{content:"";display:block;box-sizing:border-box;position:absolute;height:8px;top:-6px}.gg-gender-male::after{border-right:2px solid;border-top:2px solid;width:7px;height:7px;left:5px}.gg-gender-male::before{width:2px;background:currentColor;left:7px;transform:rotate(45deg)}.gg-ghost-character{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:18px;border:2px solid;border-bottom:0;border-top-left-radius:22px;border-top-right-radius:22px;overflow:hidden;background:radial-gradient(circle,currentColor 60%,transparent 40%)no-repeat 2px 4px/2px 2px,radial-gradient(circle,currentColor 60%,transparent 40%)no-repeat 6px 4px/2px 2px}.gg-ghost-character::after,.gg-ghost-character::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;border-right:2px solid;bottom:-3px;transform:rotate(-45deg)}.gg-ghost-character::before{left:-1px}.gg-ghost-character::after{right:-1px}.gg-ghost{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:16px;background:linear-gradient(to left,currentColor 40px,transparent 0)no-repeat -6px center/40px 4px;overflow:hidden}.gg-ghost::after,.gg-ghost::before{content:"";background:currentColor;box-sizing:border-box;position:absolute;display:block;height:4px;width:12px;box-shadow:14px 0 0}.gg-ghost::after{width:20px;left:-12px;box-shadow:22px 0 0;bottom:0}.gg-gift{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:14px;margin-top:8px;border:2px solid transparent;box-shadow:inset 2px 0 0,inset -2px 0 0,0 -2px 0,inset 0 2px 0,inset 0 -2px 0;background:linear-gradient(to left,currentColor 10px,transparent 0),linear-gradient(to left,currentColor 10px,transparent 0),linear-gradient(to left,currentColor 10px,transparent 0);background-repeat:no-repeat;background-size:2px 10px,2px 10px,2px 10px;background-position:8px 0,18px -8px,-2px -8px}.gg-gift::after,.gg-gift::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:6px;height:8px;border:2px solid;top:-10px}.gg-gift::after{left:3px;transform:rotate(-45deg)}.gg-gift::before{right:3px;transform:rotate(45deg)}.gg-girl,.gg-girl::after,.gg-girl::before{display:block;box-sizing:border-box;border-radius:42px}.gg-girl{position:relative;transform:scale(var(--ggs,1));width:20px;height:20px;overflow:hidden;box-shadow:inset 0 0 0 2px}.gg-girl::after,.gg-girl::before{content:"";position:absolute;width:2px;height:2px;background:currentColor;box-shadow:6px 0 0;left:6px;top:10px}.gg-girl::after{width:20px;height:20px;top:-11px;left:-12px;box-shadow:17px -4px 0 3px}.gg-git-branch{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:14px;background:currentColor}.gg-git-branch::after,.gg-git-branch::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-git-branch::before{border-right:2px solid;border-bottom:2px solid;border-bottom-right-radius:4px;bottom:0;width:8px;height:6px;left:0}.gg-git-branch::after{width:4px;height:4px;background:currentColor;box-shadow:0 12px 0 0,6px 6px 0 0;border-radius:100%;left:-1px;top:-1px}.gg-git-commit{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:16px;border-radius:3px;border-top:6px solid;border-bottom:6px solid}.gg-git-commit::after{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:2px;box-shadow:0 0 0 2px;border-radius:100%;left:0;top:1px}.gg-git-fork{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:14px;background:currentColor}.gg-git-fork::after,.gg-git-fork::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-git-fork::before{border-right:2px solid;border-bottom:2px solid;border-bottom-right-radius:4px;bottom:4px;width:8px;height:6px;left:0}.gg-git-fork::after{width:4px;height:4px;background:currentColor;box-shadow:0 12px 0 0,6px 2px 0 0;border-radius:100%;left:-1px;top:-1px}.gg-git-pull{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:14px;background:currentColor}.gg-git-pull::after,.gg-git-pull::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-git-pull::before{border-right:2px solid;border-top:2px solid;border-top-right-radius:4px;width:8px;height:6px;left:0;top:2px}.gg-git-pull::after{width:4px;height:4px;background:currentColor;box-shadow:0 12px 0 0,6px 8px 0 0;border-radius:100%;left:-1px;top:-1px}.gg-gitter{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:18px;border-left:4px solid transparent;border-right:4px solid transparent;box-shadow:inset 2px 0 0,inset -2px 0 0}.gg-gitter::after,.gg-gitter::before{content:"";position:absolute;box-sizing:border-box;display:block;width:2px;background:currentColor}.gg-gitter::before{height:13px;top:-3px;left:-4px}.gg-gitter::after{height:10px;left:8px}.gg-glass-alt,.gg-glass-alt::before{display:block;box-sizing:border-box;height:20px}.gg-glass-alt{position:relative;transform:scale(var(--ggs,1));width:14px}.gg-glass-alt::before{content:"";position:absolute;width:10px;border:2px solid;border-bottom:3px solid;transform:perspective(20px)rotateX(-20deg);top:2px;left:2px;border-bottom-left-radius:4px;border-bottom-right-radius:4px;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat center 2px/6px 2px}.gg-glass{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:6px;height:13px;border-top:8px solid transparent;border-left:2px solid transparent;border-right:2px solid transparent;box-shadow:inset 0 0 0 2px,0 2px 0 0}.gg-glass::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;border:2px solid;border-bottom-left-radius:100px;border-bottom-right-radius:100px;left:-4px;bottom:3px}.gg-globe-alt,.gg-globe-alt::after,.gg-globe-alt::before{display:block;box-sizing:border-box;height:18px;border:2px solid}.gg-globe-alt{position:relative;transform:scale(var(--ggs,1));width:18px;border-radius:22px}.gg-globe-alt::after,.gg-globe-alt::before{content:"";position:absolute;width:8px;border-radius:100%;top:-2px;left:3px}.gg-globe-alt::after{width:24px;height:20px;border:2px solid transparent;border-bottom:2px solid;top:-11px;left:-5px}.gg-globe{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:10px;border:2px solid;border-radius:100px;margin-left:-3px;margin-top:-7px}.gg-globe::after,.gg-globe::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-globe::before{top:11px;border-right:2px solid transparent;box-shadow:0 2px 0,inset -2px 0 0;left:1px;width:6px;height:2px}.gg-globe::after{width:16px;height:10px;border-radius:50px;border-top-left-radius:0;border-top-right-radius:0;border:2px solid;border-top-color:transparent;right:-7px;bottom:-5px;transform:rotate(-35deg)}.gg-google-tasks{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px}.gg-google-tasks::after,.gg-google-tasks::before{content:"";position:absolute;display:block;background:currentColor}.gg-google-tasks::before{width:6px;height:6px;border-radius:10px;bottom:6px;left:2px}.gg-google-tasks::after{height:18px;width:4px;border-radius:20px;transform:rotate(40deg);right:2px;bottom:0}.gg-google,.gg-google::before{box-sizing:border-box;display:block}.gg-google{position:relative;transform:scale(var(--ggs,1));width:20px;height:20px;border:4px solid;border-right-color:transparent;border-radius:22px}.gg-google::before{content:"";position:absolute;border-top:4px solid;border-right:4px solid;border-bottom:4px solid;border-radius:0 0 10px 0;width:10px;height:12px;right:-4px;bottom:-4px}.gg-gym{box-sizing:border-box;position:relative;display:block;transform:rotate(-35deg) scale(var(--ggs,1));width:8px;height:20px;border-top:9px solid transparent;border-bottom:9px solid transparent;box-shadow:inset 0 0 0 2px}.gg-gym::after,.gg-gym::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-gym::before{box-shadow:-3px 0 0 -1px,3px 0 0 -1px,inset 2px 0 0 0,inset -2px 0 0 0;width:14px;height:8px;border-left:1px solid transparent;border-right:1px solid transparent;top:-3px;left:-3px}.gg-gym::after{width:22px;height:2px;border-left:2px solid;border-right:2px solid;top:0;left:-7px}.gg-hashtag{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:16px;border-left:2px solid;border-right:2px solid}.gg-hashtag::before{content:"";display:block;box-sizing:border-box;position:absolute;width:16px;height:8px;border-top:2px solid;border-bottom:2px solid;left:-6px;top:4px}.gg-headset{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border-top-left-radius:120px;border-top-right-radius:120px;border:2px solid;border-bottom:0}.gg-headset::after,.gg-headset::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid;width:6px;height:8px;top:8px}.gg-headset::before{border-top-right-radius:2px;border-bottom-right-radius:2px;left:-2px}.gg-headset::after{border-top-left-radius:2px;border-bottom-left-radius:2px;left:10px}.gg-heart,.gg-heart::after{border:2px solid;border-top-left-radius:100px;border-top-right-radius:100px;width:10px;height:8px;border-bottom:0}.gg-heart{box-sizing:border-box;position:relative;transform:translate(calc(-10px / 2 * var(--ggs,1)),calc(-6px / 2 * var(--ggs,1)))rotate(-45deg)scale(var(--ggs,1));display:block}.gg-heart::after,.gg-heart::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-heart::after{right:-9px;transform:rotate(90deg);top:5px}.gg-heart::before{width:11px;height:11px;border-left:2px solid;border-bottom:2px solid;left:-2px;top:3px}.gg-hello{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));overflow:hidden;width:20px;height:20px;border-radius:6px;border-bottom-left-radius:0}.gg-hello::after,.gg-hello::before{content:"";display:block;position:absolute;box-sizing:border-box}.gg-hello::before{width:30px;height:30px;border:8px solid;left:-5px;top:-5px;border-radius:30px}.gg-hello::after{width:10px;height:5px;background:currentColor;border-bottom-left-radius:30px;border-bottom-right-radius:30px;bottom:5px;left:5px}.gg-home-alt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:14px;border:2px solid;border-top:0;border-radius:2px;border-bottom-left-radius:3px;border-bottom-right-radius:3px;margin-bottom:-2px}.gg-home-alt::after,.gg-home-alt::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-home-alt::before{border-top:2px solid;border-left:2px solid;border-top-left-radius:4px;transform:rotate(45deg);top:-5px;border-radius:3px;width:14px;height:14px;left:0}.gg-home-alt::after{width:6px;height:10px;background:currentColor;border-top-left-radius:100px;border-top-right-radius:100px;left:4px;bottom:-2px}.gg-home-screen{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:22px;border-radius:3px;border:2px solid}.gg-home-screen::after,.gg-home-screen::before{content:"";display:block;position:absolute;box-sizing:border-box;border-radius:2px;width:2px;height:2px;left:1px;background:currentColor}.gg-home-screen::after{top:1px;box-shadow:3px 0,6px 0,0 3px,3px 3px,6px 3px,0 6px}.gg-home-screen::before{bottom:1px;box-shadow:3px 0 0,6px 0 0}.gg-home{background:linear-gradient(to left,currentColor 5px,transparent 0)no-repeat 0 bottom/4px 2px,linear-gradient(to left,currentColor 5px,transparent 0)no-repeat right bottom/4px 2px;box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:14px;border:2px solid;border-top:0;border-bottom:0;border-top-right-radius:3px;border-top-left-radius:3px;border-bottom-right-radius:0;border-bottom-left-radius:0;margin-bottom:-2px}.gg-home::after,.gg-home::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-home::before{border-top:2px solid;border-left:2px solid;border-top-left-radius:4px;transform:rotate(45deg);top:-5px;border-radius:3px;width:14px;height:14px;left:0}.gg-home::after{width:8px;height:10px;border:2px solid;border-radius:100px;border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:0;left:3px;bottom:0}.gg-icecream{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:16px;border:2px solid;border-top-left-radius:12px;border-top-right-radius:12px;margin-top:-8px;border-bottom:0}.gg-icecream::after,.gg-icecream::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-icecream::before{border-left:4px solid;border-right:4px solid;width:12px;height:2px;bottom:0;left:-2px}.gg-icecream::after{width:6px;height:8px;border:2px solid;bottom:-6px;left:2px;border-bottom-left-radius:100px;border-bottom-right-radius:100px;border-top:0}.gg-if-design{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;background:linear-gradient(to left,currentColor 18px,transparent 0)no-repeat center center/4px 18px,linear-gradient(to left,currentColor 5px,transparent 0)no-repeat 10px top/4px 4px,linear-gradient(to left,currentColor 5px,transparent 0)no-repeat 10px 5px/4px 4px,linear-gradient(to left,currentColor 14px,transparent 0)no-repeat 0 5px/4px 14px}.gg-if-design::before{content:"";display:block;position:absolute;width:4px;height:4px;border-radius:10px;background-color:currentColor}.gg-image{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:16px;overflow:hidden;box-shadow:0 0 0 2px;border-radius:2px}.gg-image::after,.gg-image::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid}.gg-image::after{transform:rotate(45deg);border-radius:3px;width:16px;height:16px;top:9px;left:6px}.gg-image::before{width:6px;height:6px;border-radius:100%;top:2px;left:2px}.gg-import{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:14px;border:2px solid;border-top:0;box-shadow:-6px -8px 0 -6px,6px -8px 0 -6px}.gg-import::after,.gg-import::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-import::before{background:currentColor;width:2px;height:14px;right:6px;bottom:5px}.gg-import::after{width:6px;height:6px;border-right:2px solid;border-bottom:2px solid;right:4px;bottom:4px;transform:rotate(45deg)}.gg-inbox{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;box-shadow:inset 0 -2px 0 0;border-radius:3px}.gg-inbox::after,.gg-inbox::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;height:7px;width:7px;border-radius:2px;bottom:-2px}.gg-inbox::before{left:-2px}.gg-inbox::after{right:-2px}.gg-indie-hackers{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:12px}.gg-indie-hackers::after,.gg-indie-hackers::before{content:"";position:absolute;box-sizing:border-box;display:block;height:12px}.gg-indie-hackers::before{width:3px;background:currentColor}.gg-indie-hackers::after{width:10px;right:0;border-left:3px solid;border-right:3px solid;background:linear-gradient(to left,currentColor 14px,transparent 0)no-repeat 0 center/14px 3px}.gg-infinity{background:linear-gradient(to left,currentColor 5px,transparent 0)no-repeat -4px 4px/2px 2px,linear-gradient(to left,currentColor 5px,transparent 0)no-repeat 4px 4px/2px 2px;box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:10px;height:18px;border:4px solid transparent;box-shadow:inset 0 0 0 2px}.gg-infinity::after,.gg-infinity::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;border:2px solid;border-radius:200px;transform:rotate(45deg)}.gg-infinity::after{border-right-color:transparent;left:-8px;top:-4px}.gg-infinity::before{border-left-color:transparent;right:-8px;top:4px}.gg-info{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:40px}.gg-info::after,.gg-info::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;background:currentColor;left:7px}.gg-info::after{bottom:2px;height:8px}.gg-info::before{height:2px;top:2px}.gg-inpicture{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:16px;border:2px solid;border-radius:2px}.gg-inpicture::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:5px;background:currentColor;right:2px;bottom:2px}.gg-insert-after-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:20px}.gg-insert-after-o::before{box-shadow:-2px 12px 0,2px 12px 0;}.gg-insert-after-o::after,.gg-insert-after-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:2px;background:currentColor;border-radius:5px;top:5px;left:2px}.gg-insert-after-o::after{width:2px;height:8px;top:2px;left:5px}.gg-insert-after-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:4px}.gg-insert-after-r::before{box-shadow:-2px 12px 0,2px 12px 0;}.gg-insert-after-r::after,.gg-insert-after-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:2px;background:currentColor;border-radius:5px;top:5px;left:2px}.gg-insert-after-r::after{width:2px;height:8px;top:2px;left:5px}.gg-insert-after{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px}.gg-insert-after::before{box-shadow:-2px 10px 0,2px 10px 0;}.gg-insert-after::after,.gg-insert-after::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:5px;top:8px;left:4px}.gg-insert-after::after{width:2px;height:10px;top:4px;left:8px}.gg-insert-before-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:20px}.gg-insert-before-o::before{box-shadow:-2px -12px 0,2px -12px 0;}.gg-insert-before-o::after,.gg-insert-before-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:2px;background:currentColor;border-radius:5px;top:5px;left:2px}.gg-insert-before-o::after{width:2px;height:8px;top:2px;left:5px}.gg-insert-before-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:4px}.gg-insert-before-r::before{box-shadow:-2px -12px 0,2px -12px 0;}.gg-insert-before-r::after,.gg-insert-before-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:2px;background:currentColor;border-radius:5px;top:5px;left:2px}.gg-insert-before-r::after{width:2px;height:8px;top:2px;left:5px}.gg-insert-before{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px}.gg-insert-before::before{box-shadow:-2px -10px 0,2px -10px 0;}.gg-insert-before::after,.gg-insert-before::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:5px;top:8px;left:4px}.gg-insert-before::after{width:2px;height:10px;top:4px;left:8px}.gg-insights{box-sizing:border-box;position:relative;display:block;width:14px;height:16px;transform:scale(var(--ggs,1));border-left:8px solid transparent;border-top:4px solid transparent;box-shadow:inset 0 0 0 2px}.gg-insights::after,.gg-insights::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:16px;border:2px solid;right:4px;bottom:0}.gg-insights::before{height:8px;right:8px}.gg-instagram{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid transparent;box-shadow:0 0 0 2px;border-radius:4px;width:20px;height:20px}.gg-instagram::after,.gg-instagram::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-instagram::after{border:2px solid;left:3px;width:10px;height:10px;border-radius:100%;top:3px}.gg-instagram::before{border-radius:3px;width:2px;height:2px;background:currentColor;right:1px;top:1px}.gg-internal{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:12px;box-shadow:-2px 2px 0 0,-4px -4px 0 -2px,4px 4px 0 -2px;margin-left:-2px;margin-top:1px}.gg-internal::after,.gg-internal::before{content:"";display:block;box-sizing:border-box;position:absolute;left:2px}.gg-internal::before{background:currentColor;transform:rotate(-45deg);width:14px;height:2px;bottom:8px}.gg-internal::after{width:7px;height:7px;border-left:2px solid;border-bottom:2px solid;bottom:2px}.gg-key{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:6px;height:8px;border:2px solid;border-radius:100px;margin-left:-12px}.gg-key::after,.gg-key::before{content:"";display:block;box-sizing:border-box;position:absolute;right:-12px}.gg-key::before{background:currentColor;width:12px;height:2px;top:1px}.gg-key::after{width:5px;height:3px;top:2px;border-left:2px solid;border-right:2px solid}.gg-keyboard{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:3px}.gg-keyboard::after,.gg-keyboard::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;border-radius:4px;background:currentColor}.gg-keyboard::before{top:2px;box-shadow:4px 0 0,8px 0 0,0 4px 0,4px 4px 0,8px 4px 0 ;width:2px;left:2px}.gg-keyboard::after{width:8px;bottom:2px;left:3px}.gg-keyhole,.gg-keyhole::after,.gg-keyhole::before{display:block;box-sizing:border-box;border-radius:20px}.gg-keyhole{position:relative;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid}.gg-keyhole::after,.gg-keyhole::before{content:"";position:absolute}.gg-keyhole::before{width:6px;height:6px;border:2px solid;left:5px;top:3px}.gg-keyhole::after{background:currentColor;width:2px;height:5px;left:7px;bottom:3px}.gg-laptop{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:12px;border:2px solid;border-radius:2px}.gg-laptop::after{content:"";display:block;box-sizing:border-box;position:absolute;width:22px;height:2px;background:currentColor;left:-4px;bottom:-5px;border-radius:100px}.gg-lastpass{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:12px}.gg-lastpass::after,.gg-lastpass::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;border-radius:22px}.gg-lastpass::before{width:4px;height:4px;box-shadow:6px 0 0,12px 0 0;top:4px}.gg-lastpass::after{width:2px;height:12px;right:0}.gg-layout-grid-small{transform:scale(var(--ggs,1))}.gg-layout-grid-small,.gg-layout-grid-small::after,.gg-layout-grid-small::before{box-sizing:border-box;position:relative;display:block;width:10px;height:2px;border-left:6px double;border-right:2px solid}.gg-layout-grid-small::after,.gg-layout-grid-small::before{content:"";position:absolute;left:-6px}.gg-layout-grid-small::after{bottom:4px}.gg-layout-grid-small::before{top:4px}.gg-layout-grid{transform:scale(var(--ggs,1))}.gg-layout-grid,.gg-layout-grid::after,.gg-layout-grid::before{box-sizing:border-box;position:relative;display:block;width:10px;height:10px}.gg-layout-grid::after,.gg-layout-grid::before{content:"";position:absolute;height:4px;border-left:4px solid;border-right:4px solid}.gg-layout-grid::before{top:0}.gg-layout-grid::after{bottom:0}.gg-layout-list{transform:scale(var(--ggs,1))}.gg-layout-list,.gg-layout-list::after,.gg-layout-list::before{box-sizing:border-box;position:relative;display:block;width:10px;height:2px;border-left:6px double;border-right:4px solid}.gg-layout-list::after,.gg-layout-list::before{content:"";position:absolute;left:-6px}.gg-layout-list::after{bottom:4px}.gg-layout-list::before{top:4px}.gg-layout-pin{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:3px}.gg-layout-pin::after{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-radius:4px;top:3px;left:3px;box-shadow:-7px 0 0,7px 0 0,0 -7px 0,0 7px 0}.gg-linear{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:18px;height:18px;overflow:hidden;border-radius:100px}.gg-linear::after,.gg-linear::before{content:"";display:block;box-sizing:border-box;position:absolute;width:25px;height:25px;transform:rotate(-45deg);background:currentColor;top:-14px;left:4px}.gg-linear::after{width:2px;box-shadow:-3px 4px 0 0,-6px -2px 0 0;top:-3px;left:6px}.gg-link{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:8px;height:2px;background:currentColor;border-radius:4px}.gg-link::after,.gg-link::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:8px;height:10px;border:2px solid;top:-4px}.gg-link::before{border-right:0;border-top-left-radius:40px;border-bottom-left-radius:40px;left:-6px}.gg-link::after{border-left:0;border-top-right-radius:40px;border-bottom-right-radius:40px;right:-6px}.gg-list-tree{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;transform:scale(var(--ggs,1));background:linear-gradient(to left,currentcolor 8px,transparent 0) no-repeat left top/8px 8px,linear-gradient(to left,currentcolor 8px,transparent 0) no-repeat center 3px/8px 2px,linear-gradient(to left,currentcolor 8px,transparent 0) no-repeat 10px 17px/6px 2px,linear-gradient(to left,currentcolor 8px,transparent 0) no-repeat 10px 3px/2px 16px}.gg-list-tree::after,.gg-list-tree::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border:2px solid;right:0}.gg-list-tree::after{bottom:0}.gg-list{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:20px;border:2px solid;border-radius:3px}.gg-list::after,.gg-list::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:2px;background:currentColor;top:3px;left:3px;box-shadow:0 4px 0,0 8px 0}.gg-list::after{border-radius:3px;width:8px;left:7px}.gg-live-photo{transform:scale(var(--ggs,1))}.gg-live-photo,.gg-live-photo::after{box-sizing:border-box;position:relative;display:block;width:20px;height:20px;border-radius:100px;border:2px dotted currentColor}.gg-live-photo::after{content:"";position:absolute;width:8px;height:8px;border:1px solid transparent;top:4px;left:4px;box-shadow:0 0 0 2px,inset 0 0 0 2px currentColor}@keyframes loadbaralt{0%,to{left:0;right:80%}25%,75%{left:0;right:0}50%{left:80%;right:0}}.gg-loadbar-alt,.gg-loadbar-alt::before,.gg-loadbar-alt::after{display:block;box-sizing:border-box;height:4px;border-radius:4px}.gg-loadbar-alt{position:relative;transform:scale(var(--ggs,1));width:18px}.gg-loadbar-alt::after,.gg-loadbar-alt::before{background:currentColor;content:"";position:absolute}.gg-loadbar-alt::before{animation:loadbaralt 2s cubic-bezier(0,0,.58,1) infinite}.gg-loadbar-alt::after{width:18px;opacity:.3}@keyframes gg-doc{0%{left:-16px}60%,to{left:0}}.gg-loadbar-doc{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));border:2px solid transparent;box-shadow:0 0 0 2px;border-radius:1px;width:12px;height:14px;overflow:hidden}.gg-loadbar-doc::after,.gg-loadbar-doc::before{content:"";display:block;position:absolute;box-sizing:border-box;height:2px;background:currentColor;animation:gg-doc 1s linear infinite alternate}.gg-loadbar-doc::before{width:14px;box-shadow:-4px 4px 0}.gg-loadbar-doc::after{width:5px;top:8px}@keyframes gg-bar{10%{box-shadow:inset 0 -4px 0}30%{box-shadow:inset 0 -10px 0}60%{box-shadow:inset 0 -6px 0}80%{box-shadow:inset 0 -8px 0}to{box-shadow:inset 0 -2px 0}}.gg-loadbar-sound,.gg-loadbar-sound::after,.gg-loadbar-sound::before{display:block;box-sizing:border-box;width:2px;height:12px;box-shadow:inset 0 -12px 0;animation:gg-bar 1.3s ease infinite alternate}.gg-loadbar-sound{position:relative;transform:scale(var(--ggs,1))}.gg-loadbar-sound::after,.gg-loadbar-sound::before{content:"";position:absolute;bottom:0}.gg-loadbar-sound::before{left:-4px;animation-delay:-2.4s}.gg-loadbar-sound::after{right:-4px;animation-delay:-3.7s}@keyframes loadbar{0%,to{left:0;right:80%}25%,75%{left:0;right:0}50%{left:80%;right:0}}.gg-loadbar,.gg-loadbar::before{display:block;box-sizing:border-box;height:4px}.gg-loadbar{position:relative;transform:scale(var(--ggs,1));width:18px}.gg-loadbar::before{content:"";position:absolute;border-radius:4px;background:currentColor;animation:loadbar 2s cubic-bezier(0,0,.58,1) infinite}.gg-lock-unlock{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:6px;border:2px solid;border-top-right-radius:100px;border-top-left-radius:100px;border-bottom:transparent;margin-top:-18px;margin-left:-2px}.gg-lock-unlock::after,.gg-lock-unlock::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-lock-unlock::after{border:2px solid transparent;box-shadow:0 0 0 2px;width:16px;height:10px;border-radius:2px;left:-4px;top:10px}.gg-lock-unlock::before{width:2px;height:6px;background:currentColor;left:-2px;top:4px;}.gg-lock{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:11px;border:2px solid;border-top-right-radius:50%;border-top-left-radius:50%;border-bottom:transparent;margin-top:-12px}.gg-lock::after{content:"";display:block;box-sizing:border-box;position:absolute;width:16px;height:10px;border-radius:2px;border:2px solid transparent;box-shadow:0 0 0 2px;left:-4px;top:9px}.gg-log-in{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:6px;height:16px;border:2px solid;border-left:0;border-top-right-radius:2px;border-bottom-right-radius:2px;margin-right:-10px}.gg-log-in::after,.gg-log-in::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-log-in::after{border-top:2px solid;border-right:2px solid;transform:rotate(45deg);width:8px;height:8px;left:-8px;bottom:2px}.gg-log-in::before{border-radius:3px;width:10px;height:2px;background:currentColor;left:-11px;bottom:5px}.gg-log-off{box-sizing:border-box;position:relative;display:block;border-radius:16px;border:2px solid;transform:scale(var(--ggs,1));width:16px;height:16px;border-top:2px solid transparent}.gg-log-off::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;height:8px;width:2px;background:currentColor;left:5px;bottom:6px}.gg-log-out{box-sizing:border-box;position:relative;display:block;width:6px;height:16px;border:2px solid;transform:scale(var(--ggs,1));border-right:0;border-top-left-radius:2px;border-bottom-left-radius:2px;margin-left:-10px}.gg-log-out::after,.gg-log-out::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-log-out::after{border-top:2px solid;border-left:2px solid;transform:rotate(-45deg);width:8px;height:8px;left:4px;bottom:2px}.gg-log-out::before{border-radius:3px;width:10px;height:2px;background:currentColor;left:5px;bottom:5px}.gg-loupe,.gg-loupe::after{display:block;box-sizing:border-box}.gg-loupe{position:relative;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:22px;border-bottom-right-radius:6px;overflow:hidden;background:linear-gradient(to left,currentColor 8px,transparent 0) no-repeat center/8px 2px,linear-gradient(to left,currentColor 8px,transparent 0) no-repeat center/2px 8px}.gg-loupe::after{content:"";position:absolute;width:14px;height:14px;border-radius:100%;box-shadow:0 0 0 6px}.gg-magnet,.gg-magnet::before{display:block;box-sizing:border-box;width:14px}.gg-magnet{border:4px solid;transform:scale(var(--ggs,1));border-bottom-left-radius:100px;border-bottom-right-radius:100px;border-top:0;position:relative;height:12px}.gg-magnet::before{content:"";position:absolute;height:3px;border-left:4px solid;border-right:4px solid;top:-5px;left:-4px;opacity:.5}.gg-mail-forward,.gg-mail-forward::before{display:block;box-sizing:border-box;height:6px;border-top:2px solid}.gg-mail-forward{border-left:2px solid;transform:scale(var(--ggs,1));border-top-left-radius:4px;position:relative;width:14px}.gg-mail-forward::before{content:"";position:absolute;width:6px;border-right:2px solid;top:-4px;right:-1px;transform:rotate(45deg)}.gg-mail-open,.gg-mail-open::after{display:block;box-sizing:border-box;height:14px;border:2px solid}.gg-mail-open{border-top:0;transform:scale(var(--ggs,1));position:relative;width:18px;border-radius:2px}.gg-mail-open::after{content:"";position:absolute;border-radius:3px;width:14px;transform:rotate(-45deg);bottom:3px;left:0}.gg-mail-reply,.gg-mail-reply::before{display:block;box-sizing:border-box;height:6px;border-top:2px solid}.gg-mail-reply{border-right:2px solid;transform:scale(var(--ggs,1));border-top-right-radius:4px;position:relative;width:14px}.gg-mail-reply::before{content:"";position:absolute;width:6px;border-left:2px solid;top:-4px;left:-1px;transform:rotate(-45deg)}.gg-mail,.gg-mail::after{display:block;box-sizing:border-box;height:14px;border:2px solid}.gg-mail{overflow:hidden;transform:scale(var(--ggs,1));position:relative;width:18px;border-radius:2px}.gg-mail::after{content:"";position:absolute;border-radius:3px;width:14px;transform:rotate(-45deg);bottom:3px;left:0}.gg-math-divide{transform:scale(var(--ggs,1))}.gg-math-divide,.gg-math-divide::after,.gg-math-divide::before{box-sizing:border-box;position:relative;display:block;width:16px;height:2px;background:currentColor;border-radius:20px}.gg-math-divide::after,.gg-math-divide::before{content:"";position:absolute;width:4px;height:4px;top:-6px;left:6px}.gg-math-divide::after{top:4px}.gg-math-equal{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:2px;background:currentColor;border-radius:10px;margin-top:-6px;box-shadow:0 6px 0}.gg-math-minus{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:2px;background:currentColor;border-radius:10px}.gg-math-percent{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:16px;height:2px;background:currentColor;border-radius:20px}.gg-math-percent::after,.gg-math-percent::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;height:4px;background:currentColor;border-radius:20px;top:-7px;left:6px}.gg-math-percent::after{top:5px}.gg-math-plus,.gg-math-plus::after{display:block;box-sizing:border-box;background:currentColor;border-radius:10px}.gg-math-plus{margin-top:-2px;position:relative;transform:scale(var(--ggs,1));width:16px;height:2px}.gg-math-plus::after{content:"";position:absolute;width:2px;height:16px;top:-7px;left:7px}.gg-maximize-alt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;box-shadow:-6px -6px 0 -4px,6px 6px 0 -4px,6px -6px 0 -4px,-6px 6px 0 -4px}.gg-maximize-alt::after,.gg-maximize-alt::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:22px;height:2px;border-left:8px solid;border-right:8px solid;transform:rotate(-45deg);bottom:6px;left:-4px}.gg-maximize-alt::before{transform:rotate(45deg)}.gg-maximize{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;box-shadow:-6px -6px 0 -4px,6px 6px 0 -4px,6px -6px 0 -4px,-6px 6px 0 -4px}.gg-maze{display:block;box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));width:24px;height:14px}.gg-maze::after,.gg-maze::before{content:"";display:block;position:absolute;box-sizing:border-box;height:12px;transform:rotate(45deg)}.gg-maze::before{width:12px;right:2px;bottom:-2px;border-left:4px solid;border-top:4px solid}.gg-maze::after{width:4px;background:currentColor;left:3px;bottom:1px}.gg-media-live{transform:scale(var(--ggs,1))}.gg-media-live,.gg-media-live::after{border-top-color:transparent;border-bottom-color:transparent}.gg-media-live,.gg-media-live::after,.gg-media-live::before{box-sizing:border-box;position:relative;display:block;border:2px solid;border-radius:50%;width:14px;height:14px}.gg-media-live::after,.gg-media-live::before{content:"";position:absolute;width:6px;height:6px;top:2px;left:2px}.gg-media-live::after{width:22px;height:22px;top:-6px;left:-6px}.gg-media-podcast{transform:scale(var(--ggs,1))}.gg-media-podcast,.gg-media-podcast::after,.gg-media-podcast::before{box-sizing:border-box;position:relative;display:block;width:14px;height:14px;border:2px solid;border-bottom-color:transparent;border-radius:50%}.gg-media-podcast::after,.gg-media-podcast::before{content:"";position:absolute;width:6px;height:6px;top:2px;left:2px}.gg-media-podcast::after{width:22px;height:22px;top:-6px;left:-6px}.gg-menu-boxed{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border-radius:3px;border:2px solid;}.gg-menu-boxed::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:3px;top:2px;left:2px;box-shadow:0 4px 0,0 8px 0}.gg-menu-cake{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:18px}.gg-menu-cake::after,.gg-menu-cake::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;background:currentColor;border-radius:22px}.gg-menu-cake::before{width:18px;box-shadow:0 -4px 0,0 -8px 0;left:1px;bottom:2px}.gg-menu-cake::after{width:4px;height:4px;left:8px}.gg-menu-cheese{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:10px}.gg-menu-cheese::after,.gg-menu-cheese::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px}.gg-menu-cheese::before{width:18px;background:currentColor;border-radius:22px;box-shadow:0 -6px 0,0 -12px 0;bottom:0}.gg-menu-cheese::after{width:2px;left:2px;bottom:3px;border-top:3px solid;border-left:4px solid transparent;border-right:4px solid transparent}.gg-menu-grid-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;}.gg-menu-grid-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;height:4px;background:currentColor;box-shadow:0 6px 0,6px 6px 0,12px 6px 0,6px 12px 0,12px 12px 0,6px 0 0,12px 0 0,0 12px 0 ;border-radius:22px;}.gg-menu-grid-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;}.gg-menu-grid-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;height:4px;background:currentColor;box-shadow:0 6px 0,6px 6px 0,12px 6px 0,6px 12px 0,12px 12px 0,6px 0 0,12px 0 0,0 12px 0 ;}.gg-menu-hotdog{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:12px;border-top:3px solid;border-bottom:3px solid;border-radius:3px}.gg-menu-hotdog::before{content:"";display:block;box-sizing:border-box;position:absolute;width:20px;height:2px;background:currentColor;border-radius:4px;top:2px;left:-2px}.gg-menu-left-alt{box-sizing:border-box;position:relative;display:block;width:16px;height:14px;transform:scale(var(--ggs,1))}.gg-menu-left-alt::after,.gg-menu-left-alt::before{content:"";position:absolute;box-sizing:border-box;display:block;height:2px;border-radius:4px;background:currentColor}.gg-menu-left-alt::before{width:16px;box-shadow:0 12px 0}.gg-menu-left-alt::after{width:10px;top:6px}.gg-menu-left{transform:scale(var(--ggs,1))}.gg-menu-left,.gg-menu-left::after,.gg-menu-left::before{box-sizing:border-box;position:relative;display:block;width:20px;height:2px;border-radius:3px;background:currentColor}.gg-menu-left::after,.gg-menu-left::before{content:"";position:absolute;top:-6px;width:10px}.gg-menu-left::after{top:6px;width:14px}.gg-menu-motion{box-sizing:border-box;position:relative;display:block;width:18px;height:14px;transform:scale(var(--ggs,1))}.gg-menu-motion::before{content:"";position:absolute;box-sizing:border-box;display:block;width:10px;height:2px;bottom:0;box-shadow:4px -6px 0,8px -12px 0;border-radius:4px;background:currentColor}.gg-menu-oreos{box-sizing:border-box;position:relative;display:block;width:16px;height:18px;transform:scale(var(--ggs,1))}.gg-menu-oreos::after,.gg-menu-oreos::before{content:"";position:absolute;box-sizing:border-box;display:block;width:16px;height:8px;border-top:3px solid;border-bottom:3px solid;border-radius:3px}.gg-menu-oreos::after{bottom:0}.gg-menu-right-alt{box-sizing:border-box;position:relative;display:block;width:16px;height:14px;transform:scale(var(--ggs,1))}.gg-menu-right-alt::after,.gg-menu-right-alt::before{content:"";position:absolute;box-sizing:border-box;display:block;height:2px;border-radius:4px;background:currentColor}.gg-menu-right-alt::before{width:16px;box-shadow:0 12px 0}.gg-menu-right-alt::after{width:10px;right:0;top:6px}.gg-menu-right{transform:scale(var(--ggs,1))}.gg-menu-right,.gg-menu-right::after,.gg-menu-right::before{box-sizing:border-box;position:relative;display:block;width:20px;height:2px;border-radius:3px;background:currentColor}.gg-menu-right::after,.gg-menu-right::before{content:"";position:absolute;top:-6px;right:0;width:10px}.gg-menu-right::after{top:6px;width:14px}.gg-menu-round{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border-radius:24px;border:2px solid;}.gg-menu-round::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:3px;top:4px;left:4px;box-shadow:0 4px 0,0 8px 0}.gg-menu{transform:scale(var(--ggs,1))}.gg-menu,.gg-menu::after,.gg-menu::before{box-sizing:border-box;position:relative;display:block;width:20px;height:2px;border-radius:3px;background:currentColor}.gg-menu::after,.gg-menu::before{content:"";position:absolute;top:-6px}.gg-menu::after{top:6px}.gg-merge-horizontal{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:2px;border-radius:3px;background:currentColor}.gg-merge-horizontal::after,.gg-merge-horizontal::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;transform:rotate(-45deg)}.gg-merge-horizontal::after{border-bottom:2px solid;border-left:2px solid;left:4px;bottom:5px}.gg-merge-horizontal::before{border-top:2px solid;border-right:2px solid;right:4px;top:5px}.gg-merge-vertical{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:14px;border-radius:3px;background:currentColor}.gg-merge-vertical::after,.gg-merge-vertical::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-bottom:2px solid;top:4px}.gg-merge-vertical::after{border-left:2px solid;left:5px;transform:rotate(45deg)}.gg-merge-vertical::before{border-right:2px solid;transform:rotate(-45deg);right:5px}.gg-mic{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:12px;border-bottom-left-radius:120px;border-bottom-right-radius:120px;border:2px solid;border-top:0;margin-top:3px}.gg-mic::after,.gg-mic::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-mic::after{border:2px solid;width:8px;height:18px;left:2px;top:-10px;border-radius:4px}.gg-mic::before{width:10px;height:4px;top:12px;left:1px;border-right:4px solid transparent;box-shadow:0 2px 0,inset -2px 0 0}.gg-microbit,.gg-microbit::before{display:block;box-sizing:border-box;border-radius:20px}.gg-microbit{position:relative;transform:scale(var(--ggs,1));width:24px;height:14px;border:3px solid}.gg-microbit::before{content:"";position:absolute;width:4px;height:4px;background:currentColor;top:2px;left:2px;box-shadow:10px 0 0 0}.gg-microsoft{transform:scale(var(--ggs,1))}.gg-microsoft,.gg-microsoft::after,.gg-microsoft::before{box-sizing:border-box;position:relative;display:block;width:18px;height:18px}.gg-microsoft::after,.gg-microsoft::before{content:"";position:absolute;width:8px;border-top:8px solid;border-bottom:8px solid}.gg-microsoft::after{right:0}.gg-mini-player{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:3px}.gg-mini-player::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;background:currentColor;border-top-left-radius:3px;border-bottom-right-radius:3px;bottom:-1px;right:-1px}.gg-minimize-alt{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:26px;height:2px;border-left:10px solid;border-right:10px solid}.gg-minimize-alt::after,.gg-minimize-alt::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;top:-2px}.gg-minimize-alt::before{border-right:2px solid;left:-5px;transform:rotate(45deg)}.gg-minimize-alt::after{border-left:2px solid;right:-5px;transform:rotate(-45deg)}.gg-minimize{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:4px;height:4px;box-shadow:-8px -4px 0 -1px,-6px -4px 0 -1px,8px 4px 0 -1px,6px 4px 0 -1px,8px -4px 0 -1px,6px -4px 0 -1px,-8px 4px 0 -1px,-6px 4px 0 -1px}.gg-minimize::after,.gg-minimize::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:18px;border-top:6px solid;border-bottom:6px solid;box-shadow:18px 0 0 -2px;top:-7px}.gg-minimize::after{left:-3px}.gg-minimize::before{right:-3px}.gg-modem{position:relative;display:block;box-sizing:border-box;transform:scale(var(--ggs,1));width:20px;height:20px;border-radius:4px;border-top:12px solid transparent;box-shadow:inset 0 0 0 2px}.gg-modem::after,.gg-modem::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor;right:4px;bottom:3px;width:2px;height:2px;border-radius:22px}.gg-modem::after{right:-1px;bottom:11px;width:20px;transform:rotate(30deg)}.gg-monday{display:block;box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));width:21px;height:16px}.gg-monday::after,.gg-monday::before{background:currentColor;content:"";display:block;box-sizing:border-box;position:absolute;width:6px;border-radius:22px}.gg-monday::before{height:16px;transform:rotate(35deg);box-shadow:7px -5px 0 0}.gg-monday::after{height:6px;bottom:1px;right:0}.gg-moon,.gg-moon::after{display:block;box-sizing:border-box;border-radius:50%}.gg-moon{overflow:hidden;position:relative;transform:rotate(-135deg) scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-bottom-color:transparent}.gg-moon::after{content:"";position:absolute;width:12px;height:18px;border:2px solid transparent;box-shadow:0 0 0 2px;top:8px;left:2px}.gg-more-alt{transform:scale(var(--ggs,1))}.gg-more-alt,.gg-more-alt::after,.gg-more-alt::before{box-sizing:border-box;position:relative;display:block;width:4px;height:4px;background:currentColor;border-radius:100%}.gg-more-alt::after,.gg-more-alt::before{content:"";position:absolute;top:0}.gg-more-alt::after{left:-6px}.gg-more-alt::before{right:-6px}.gg-more-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:24px;border:2px solid;border-radius:24px}.gg-more-o::before{content:"";position:absolute;box-sizing:border-box;display:block;width:4px;height:4px;background-color:currentColor;border-radius:20px;top:8px;left:8px;box-shadow:-5px 0 0,5px 0 0}.gg-more-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:20px;border:2px solid;border-radius:3px;}.gg-more-r::before{content:"";position:absolute;box-sizing:border-box;display:block;width:4px;height:4px;background-color:currentColor;border-radius:20px;top:6px;left:8px;box-shadow:-5px 0 0,5px 0 0;}.gg-more-vertical-alt{transform:scale(var(--ggs,1))}.gg-more-vertical-alt,.gg-more-vertical-alt::after,.gg-more-vertical-alt::before{box-sizing:border-box;position:relative;display:block;width:4px;height:4px;background:currentColor;border-radius:100%}.gg-more-vertical-alt::after,.gg-more-vertical-alt::before{content:"";position:absolute}.gg-more-vertical-alt::after{left:0;top:6px}.gg-more-vertical-alt::before{top:-6px;right:0}.gg-more-vertical-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:24px;border:2px solid;border-radius:24px}.gg-more-vertical-o::before{content:"";position:absolute;box-sizing:border-box;display:block;width:4px;height:4px;background-color:currentColor;border-radius:20px;top:8px;left:8px;box-shadow:0 -5px 0,0 5px 0}.gg-more-vertical-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:24px;border:2px solid;border-radius:3px}.gg-more-vertical-r::before{content:"";position:absolute;box-sizing:border-box;display:block;width:4px;height:4px;background-color:currentColor;border-radius:20px;top:8px;left:6px;box-shadow:0 -5px 0,0 5px 0}.gg-more-vertical{transform:scale(var(--ggs,1))}.gg-more-vertical,.gg-more-vertical::after,.gg-more-vertical::before{box-sizing:border-box;position:relative;display:block;width:6px;height:6px;border:2px solid;border-radius:100%}.gg-more-vertical::after,.gg-more-vertical::before{content:"";position:absolute;top:6px;left:-2px}.gg-more-vertical::before{top:-10px}.gg-more{transform:scale(var(--ggs,1))}.gg-more,.gg-more::after,.gg-more::before{box-sizing:border-box;position:relative;display:block;width:6px;height:6px;border:2px solid;border-radius:100%}.gg-more::after,.gg-more::before{content:"";position:absolute;top:-2px}.gg-more::after{left:-9px}.gg-more::before{right:-9px}.gg-mouse{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:24px;border:2px solid;border-radius:10px}.gg-mouse::after{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:6px;background:currentColor;top:3px;left:5px}.gg-move-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:8px;border-left:2px solid;border-right:2px solid}.gg-move-down::after,.gg-move-down::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-move-down::before{background:currentColor;left:2px;top:0;width:2px;height:12px}.gg-move-down::after{width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:5px solid;bottom:-7px}.gg-move-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:10px;border-top:2px solid;border-bottom:2px solid}.gg-move-left::after,.gg-move-left::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-move-left::before{background:currentColor;right:0;top:2px;width:12px;height:2px}.gg-move-left::after{width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent;border-right:5px solid;left:-7px}.gg-move-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:10px;border-top:2px solid;border-bottom:2px solid}.gg-move-right::after,.gg-move-right::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-move-right::before{background:currentColor;left:0;top:2px;width:12px;height:2px}.gg-move-right::after{width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:5px solid;right:-7px}.gg-move-task{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:10px;border-top:2px solid;border-bottom:2px solid}.gg-move-task::after,.gg-move-task::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-move-task::before{background:currentColor;top:2px;width:8px;height:2px;left:0}.gg-move-task::after{width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:5px solid;left:-6px}.gg-move-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:8px;border-left:2px solid;border-right:2px solid}.gg-move-up::after,.gg-move-up::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-move-up::before{background:currentColor;left:2px;bottom:0;width:2px;height:12px}.gg-move-up::after{width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:5px solid;top:-7px}.gg-music-note{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:14px;background:currentColor}.gg-music-note::after,.gg-music-note::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid}.gg-music-note::before{bottom:-4px;width:8px;height:8px;left:-6px;border-radius:10px}.gg-music-note::after{width:10px;height:6px;top:-4px;left:0;border-radius:2px;transform:skewY(-15deg)}.gg-music-speaker{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:22px;border:2px solid;border-radius:3px}.gg-music-speaker::after,.gg-music-speaker::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid;border-radius:100px}.gg-music-speaker::before{bottom:2px;width:8px;height:8px;left:2px}.gg-music-speaker::after{width:4px;height:4px;left:4px;top:2px}.gg-music,.gg-music::after,.gg-music::before{display:block;box-sizing:border-box;border:2px solid}.gg-music{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom:0;margin-top:-4px;position:relative;transform:skewY(-15deg) scale(var(--ggs,1));width:14px;height:16px}.gg-music::after,.gg-music::before{content:"";position:absolute;width:7px;height:7px;top:9px;left:-7px;transform:skewY(15deg);border-radius:10px}.gg-music::after{left:5px}.gg-nametag{box-sizing:border-box;position:relative;display:block;width:6px;height:6px;border:2px solid;transform:scale(var(--ggs,1))}.gg-nametag::before{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:12px;box-shadow:-5px -5px 0 -3px,5px 5px 0 -3px,5px -5px 0 -3px,-5px 5px 0 -3px;left:-5px;top:-5px}.gg-notes{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:22px;border:2px solid;border-radius:3px}.gg-notes::after,.gg-notes::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;height:2px;background:currentColor;left:2px}.gg-notes::before{box-shadow:0 4px 0,0 8px 0;width:12px;top:2px}.gg-notes::after{width:6px;top:14px}.gg-notifications{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat right bottom/2px 8px,linear-gradient(to left,currentColor 10px,transparent 0)no-repeat left top/8px 2px}.gg-notifications::after,.gg-notifications::before{content:"";position:absolute;display:block;box-sizing:border-box}.gg-notifications::before{width:14px;height:14px;border-left:2px solid;border-bottom:2px solid}.gg-notifications::after{width:6px;height:6px;border-radius:4px;background:currentColor;top:-2px;right:-2px}.gg-npm,.gg-npm::before{box-sizing:border-box;display:block}.gg-npm{position:relative;width:18px;height:18px;transform:scale(var(--ggs,1));border:3px solid;border-radius:2px}.gg-npm::before{content:"";position:absolute;width:3px;height:12px;background:currentColor;bottom:-3px;right:3px}.gg-oculus{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:20px;height:12px;border:4px solid;border-radius:22px;}.gg-open-collective,.gg-open-collective::before{display:block;box-sizing:border-box;border-radius:22px}.gg-open-collective{position:relative;transform:scale(var(--ggs,1));width:18px;height:18px;border:3px solid;border-right-color:transparent}.gg-open-collective::before{content:"";position:absolute;width:14px;height:14px;border:3px solid transparent;border-right:3px solid;top:-1px;right:-3px;opacity:.5}.gg-options{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:2px;box-shadow:-3px 4px 0 0,3px -4px 0 0}.gg-options::after,.gg-options::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border:2px solid;border-radius:100%}.gg-options::before{top:-7px;left:-4px}.gg-options::after{bottom:-7px;right:-4px}.gg-organisation{background:linear-gradient(to bottom,currentColor 5px,transparent 0)no-repeat center 2px/12px 2px,linear-gradient(to bottom,currentColor 5px,transparent 0)no-repeat center 6px/12px 2px,linear-gradient(to bottom,currentColor 5px,transparent 0)no-repeat center 10px/12px 2px,linear-gradient(to bottom,currentColor 18px,transparent 0)no-repeat center/2px 18px;box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:18px;border:2px solid}.gg-organisation::after,.gg-organisation::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-organisation::before{background:currentColor;right:-8px;top:6px;box-shadow:0 4px 0,-4px 4px 0,-4px 0 0;width:2px;height:2px}.gg-organisation::after{width:12px;height:14px;border:2px solid;left:8px;bottom:-2px}.gg-overflow{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border-radius:20px;border-bottom:8px solid}.gg-overflow::after,.gg-overflow::before{content:"";box-sizing:border-box;position:absolute;display:block;border-radius:20px}.gg-overflow::before{width:20px;height:20px;border-bottom:10px solid;opacity:.6;left:-2px;top:-2px}.gg-overflow::after{width:16px;height:16px;border-top:8px solid;opacity:.2;left:0;top:0}.gg-pacman{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:10px;height:10px;border-bottom:2px solid;border-left:2px solid}.gg-pacman::after,.gg-pacman::before{content:"";display:block;position:absolute;box-sizing:border-box}.gg-pacman::before{background:currentColor;top:5px;border-radius:3px;width:2px;height:2px;left:-5px}.gg-pacman::after{width:18px;height:18px;border:2px solid;border-radius:100px;border-right-color:transparent;left:-10px;transform:rotate(-45deg)}.gg-password{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:30px;height:12px;border:2px solid;border-radius:3px}.gg-password::after,.gg-password::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;background:currentColor}.gg-password::before{left:2px;top:2px;box-shadow:6px 0 0,12px 0 0;height:4px;border-radius:100%}.gg-password::after{height:2px;right:2px;bottom:2px}.gg-path-back{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-path-back::after,.gg-path-back::before{content:"";position:absolute;display:block;box-sizing:border-box;width:10px;height:10px}.gg-path-back::after{border:2px solid}.gg-path-back::before{border-right:5px solid;border-bottom:5px solid;bottom:0;right:0}.gg-path-crop{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-path-crop::after,.gg-path-crop::before{content:"";position:absolute;display:block;box-sizing:border-box;border:2px solid;width:10px;height:10px}.gg-path-crop::after{opacity:.5}.gg-path-crop::before{background:linear-gradient(to left,currentColor 4px,transparent 0)no-repeat top left/4px 4px;bottom:0;right:0}.gg-path-divide{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-path-divide::after,.gg-path-divide::before{content:"";position:absolute;display:block;box-sizing:border-box;width:10px;height:10px}.gg-path-divide::after{border-top:4px solid;border-left:4px solid}.gg-path-divide::before{background:linear-gradient(to left,currentColor 4px,transparent 0)no-repeat 1px 1px/4px 4px;border-right:4px solid;border-bottom:4px solid;bottom:0;right:0}.gg-path-exclude{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-path-exclude::after,.gg-path-exclude::before{content:"";position:absolute;display:block;box-sizing:border-box;width:10px;height:10px}.gg-path-exclude::after{border-top:4px solid;border-left:4px solid}.gg-path-exclude::before{border-right:4px solid;border-bottom:4px solid;bottom:0;right:0}.gg-path-front{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-path-front::after,.gg-path-front::before{content:"";position:absolute;display:block;box-sizing:border-box;width:10px;height:10px}.gg-path-front::after{border-left:5px solid;border-top:5px solid}.gg-path-front::before{border:2px solid;bottom:0;right:0}.gg-path-intersect{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-path-intersect::after,.gg-path-intersect::before{content:"";position:absolute;display:block;box-sizing:border-box;border:2px solid;width:10px;height:10px}.gg-path-intersect::before{background:linear-gradient(to left,currentColor 4px,transparent 0)no-repeat top left/4px 4px;bottom:0;right:0}.gg-path-outline{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-path-outline::after,.gg-path-outline::before{content:"";position:absolute;display:block;box-sizing:border-box;border:2px solid;width:10px;height:10px}.gg-path-outline::before{bottom:0;right:0}.gg-path-trim{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-path-trim::after,.gg-path-trim::before{content:"";position:absolute;display:block;box-sizing:border-box;width:10px;height:10px}.gg-path-trim::after{border-left:3px solid;border-top:3px solid}.gg-path-trim::before{background:currentColor;bottom:0;right:0}.gg-path-unite{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:14px}.gg-path-unite::after,.gg-path-unite::before{content:"";position:absolute;display:block;box-sizing:border-box;background:currentColor;width:10px;height:10px}.gg-path-unite::before{bottom:0;right:0}.gg-patreon{transform:scale(var(--ggs,1))}.gg-patreon,.gg-patreon::after{box-sizing:border-box;position:relative;display:block;width:4px;height:16px;background:currentColor;left:-6px}.gg-patreon::after{content:"";position:absolute;width:12px;height:12px;opacity:.5;border-radius:100px;left:6px}.gg-paypal{position:relative;box-sizing:border-box;display:block;width:16px;height:18px;transform:skew(-10deg)scale(var(--ggs,1));background:linear-gradient(to left,currentColor 20px,transparent 0)no-repeat 3px bottom/4px 2px,linear-gradient(to left,currentColor 20px,transparent 0)no-repeat 5px bottom/3px 10px}.gg-paypal::after,.gg-paypal::before{content:"";box-sizing:border-box;display:block;position:absolute;border:2px solid}.gg-paypal::before{width:8px;height:10px;border-top-right-radius:10px;border-bottom-right-radius:10px;border-left:0;left:5px;box-shadow:2px 2px 0}.gg-paypal::after{width:6px;height:16px;border-right:0}.gg-pen{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:14px;height:4px;border-right:2px solid transparent;box-shadow:0 0 0 2px,inset -2px 0 0;border-top-right-radius:1px;border-bottom-right-radius:1px;margin-right:-2px}.gg-pen::after,.gg-pen::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-pen::before{background:currentColor;border-left:0;right:-6px;width:3px;height:4px;border-radius:1px;top:0}.gg-pen::after{width:8px;height:7px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:7px solid;left:-11px;top:-2px}.gg-pentagon-bottom-left{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:10px;height:10px}.gg-pentagon-bottom-left:before{width:51%}.gg-pentagon-bottom-left:after,.gg-pentagon-bottom-left:before{content:' ';position:absolute;top:0;height:100%}.gg-pentagon-bottom-left:before{left:-2px;border-top:2px solid;border-left:2px solid;border-bottom:2px solid;transform:skew(0deg,30deg)}.gg-pentagon-bottom-left:after{right:-2px;width:50%;border-right:2px solid;border-bottom:2px solid;border-top:2px solid;transform:skew(0deg,-30deg)}.gg-pentagon-bottom-right{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:10px;height:10px}.gg-pentagon-bottom-right:before{width:51%}.gg-pentagon-bottom-right:after,.gg-pentagon-bottom-right:before{content:' ';position:absolute;top:0;height:100%}.gg-pentagon-bottom-right:before{left:-2px;border-top:2px solid;border-left:2px solid;border-bottom:2px solid;transform:skew(0deg,30deg)}.gg-pentagon-bottom-right:after{right:-2px;width:50%;border-right:2px solid;border-bottom:2px solid;border-top:2px solid;transform:skew(0deg,-30deg)}.gg-pentagon-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:10px}.gg-pentagon-down:before{width:51%}.gg-pentagon-down:after,.gg-pentagon-down:before{content:' ';position:absolute;top:0;height:100%}.gg-pentagon-down:before{left:-2px;border-top:2px solid;border-left:2px solid;border-bottom:2px solid;transform:skew(0deg,30deg)}.gg-pentagon-down:after{right:-2px;width:50%;border-right:2px solid;border-bottom:2px solid;border-top:2px solid;transform:skew(0deg,-30deg)}.gg-pentagon-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:8px}.gg-pentagon-left:before{height:51%}.gg-pentagon-left:after,.gg-pentagon-left:before{content:' ';position:absolute;left:0;width:100%}.gg-pentagon-left:before{top:-2px;border-top:2px solid;border-right:2px solid;border-left:2px solid;transform:skewX(-30deg)}.gg-pentagon-left:after{bottom:-2px;height:50%;border-right:2px solid;border-bottom:2px solid;border-left:2px solid;transform:skewX(30deg)}.gg-pentagon-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:8px}.gg-pentagon-right:before{height:51%}.gg-pentagon-right:after,.gg-pentagon-right:before{content:' ';position:absolute;left:0;width:100%}.gg-pentagon-right:before{top:-2px;border-top:2px solid;border-right:2px solid;border-left:2px solid;transform:skewX(30deg)}.gg-pentagon-right:after{bottom:-2px;height:50%;border-right:2px solid;border-bottom:2px solid;border-left:2px solid;transform:skewX(-30deg)}.gg-pentagon-top-left{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:10px;height:8px}.gg-pentagon-top-left:before{height:51%}.gg-pentagon-top-left:after,.gg-pentagon-top-left:before{content:' ';position:absolute;left:0;width:100%}.gg-pentagon-top-left:before{top:-2px;border-top:2px solid;border-right:2px solid;border-left:2px solid;transform:skewX(-30deg)}.gg-pentagon-top-left:after{bottom:-2px;height:50%;border-right:2px solid;border-bottom:2px solid;border-left:2px solid;transform:skewX(30deg)}.gg-pentagon-top-right{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:10px;height:8px}.gg-pentagon-top-right:before{height:51%}.gg-pentagon-top-right:after,.gg-pentagon-top-right:before{content:' ';position:absolute;left:0;width:100%}.gg-pentagon-top-right:before{top:-2px;border-top:2px solid;border-right:2px solid;border-left:2px solid;transform:skewX(30deg)}.gg-pentagon-top-right:after{bottom:-2px;height:50%;border-right:2px solid;border-bottom:2px solid;border-left:2px solid;transform:skewX(-30deg)}.gg-pentagon-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:10px}.gg-pentagon-up:before{width:51%}.gg-pentagon-up:after,.gg-pentagon-up:before{content:' ';position:absolute;top:0;height:100%}.gg-pentagon-up:before{left:-2px;border-top:2px solid;border-left:2px solid;border-bottom:2px solid;transform:skew(0deg,-30deg)}.gg-pentagon-up:after{right:-2px;width:50%;border-right:2px solid;border-bottom:2px solid;border-top:2px solid;transform:skew(0deg,30deg)}.gg-performance{background:linear-gradient(to left,currentColor 8px,transparent 0)no-repeat center/2px 6px;box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-performance::after,.gg-performance::before{content:"";display:block;position:absolute;border:2px solid}.gg-performance::before{bottom:2px;width:2px;height:2px;box-sizing:content-box;border-radius:100px;left:6px}.gg-performance::after{box-sizing:border-box;border-radius:3px;width:14px;height:8px;border-top-left-radius:100px;border-top-right-radius:100px;border-bottom:0;top:2px;left:2px}.gg-pexels{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:6px;height:14px;border:2px solid;border-right:0}.gg-pexels::after,.gg-pexels::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-pexels::before{width:5px;height:10px;border:2px solid;border-top-right-radius:100px;border-bottom-right-radius:100px;border-left:0;right:-5px;top:-2px}.gg-pexels::after{background:currentColor;width:2px;height:6px;bottom:-2px;right:-1px}.gg-phone{box-sizing:border-box;position:relative;display:block;width:22px;height:22px;transform:scale(var(--ggs,1))}.gg-phone::after,.gg-phone::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-phone::after{width:18px;height:18px;border-top-left-radius:1px;border-bottom-right-radius:1px;border-bottom-left-radius:12px;border-left:4px solid;border-bottom:4px solid;left:2px;bottom:2px;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat right 11px/6px 4px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat -1px 0/4px 6px}.gg-phone::before{width:20px;height:20px;border:6px double;border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;border-radius:50%;transform:rotate(-45deg);bottom:2px;left:2px}.gg-photoscan{box-sizing:border-box;display:block;position:relative;transform:scale(var(--ggs,1));border-radius:2px;width:14px;height:18px;border:2px solid;border-bottom:4px solid}.gg-photoscan::before{content:"";position:absolute;box-sizing:border-box;display:block;width:4px;height:4px;border-radius:20px;box-shadow:0 0 0 2px,inset 0 0 0 2px;border:1px solid transparent}.gg-piano{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:23px;height:18px;border:2px solid;border-radius:2px}.gg-piano::after,.gg-piano::before{content:"";display:block;box-sizing:border-box;position:absolute;height:10px;background:currentColor;box-shadow:5px 0 0,10px 0 0}.gg-piano::before{top:-2px;width:3px;left:3px}.gg-piano::after{width:1px;bottom:-2px;left:4px}.gg-pill,.gg-pill::after{display:block;box-sizing:border-box;width:12px}.gg-pill{border-top-left-radius:140px;border-top-right-radius:140px;border:2px solid;transform:rotate(45deg) scale(var(--ggs,1));position:relative;height:14px}.gg-pill::after{content:"";position:absolute;height:12px;background:currentColor;left:-2px;bottom:-12px;border-bottom-left-radius:140px;border-bottom-right-radius:140px}.gg-pin-alt{box-sizing:border-box;position:relative;display:block;width:2px;height:8px;border-radius:3px;transform:scale(var(--ggs,1));background:currentColor}.gg-pin-alt::after{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:12px;border:6px double;border-radius:100px;top:-10px;left:-5px}.gg-pin-bottom{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:8px;background:currentColor}.gg-pin-bottom::after,.gg-pin-bottom::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-pin-bottom::after{background:currentColor;bottom:-2px;border-radius:3px;width:10px;height:2px;left:-4px}.gg-pin-bottom::before{width:8px;height:8px;border:6px double;border-radius:100px;top:-10px;left:-5px}.gg-pin-top{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:8px;background:currentColor;margin-top:-8px}.gg-pin-top::after,.gg-pin-top::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-pin-top::after{background:currentColor;top:-2px;border-radius:3px;width:10px;height:2px;left:-4px}.gg-pin-top::before{width:8px;height:8px;border:6px double;border-radius:100px;bottom:-10px;left:-5px}.gg-pin{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:18px;height:18px;border-radius:100% 100% 0 100%;border:2px solid;margin-top:-4px}.gg-pin::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border:2px solid;top:3px;left:3px;border-radius:40px}.gg-play-backwards{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:3px;height:10px;background:currentColor}.gg-play-backwards::after,.gg-play-backwards::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:10px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:6px solid;right:-7px}.gg-play-backwards::before{right:-14px}.gg-play-button-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:20px}.gg-play-button-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:10px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:6px solid;top:4px;left:7px}.gg-play-button-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-play-button-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:10px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:6px solid;top:4px;left:7px}.gg-play-button{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-play-button::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:10px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:6px solid;top:6px;left:9px}.gg-play-forwards{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:3px;height:10px;background:currentColor}.gg-play-forwards::after,.gg-play-forwards::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:10px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:6px solid;left:-7px}.gg-play-forwards::before{left:-14px}.gg-play-list-add{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:6px;border-top:0 solid transparent;border-bottom:2px solid transparent;box-shadow:inset 0 -2px 0,-2px 4px 0 -2px,0 -2px 0 0}.gg-play-list-add::after,.gg-play-list-add::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;top:6px;right:-8px}.gg-play-list-add::before{width:2px;height:10px;top:2px;right:-4px}.gg-play-list-check{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:6px;border-top:0 solid transparent;border-bottom:2px solid transparent;box-shadow:inset 0 -2px 0,-2px 4px 0 -2px,0 -2px 0 0}.gg-play-list-check::after{content:"";display:block;box-sizing:border-box;position:absolute;width:5px;height:8px;border-right:2px solid;border-bottom:2px solid;transform:rotate(45deg);top:2px;right:-4px}.gg-play-list-remove{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:6px;border-top:0 solid transparent;border-bottom:2px solid transparent;box-shadow:inset 0 -2px 0,-2px 4px 0 -2px,0 -2px 0 0}.gg-play-list-remove::after,.gg-play-list-remove::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:2px;background:currentColor;transform:rotate(-45deg);top:8px;right:-4px}.gg-play-list-remove::before{width:2px;height:8px;top:5px;right:-1px}.gg-play-list-search{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:6px;border-top:0 solid transparent;border-bottom:2px solid transparent;box-shadow:inset 0 -2px 0,-2px 4px 0 -2px,0 -2px 0 0}.gg-play-list-search::after,.gg-play-list-search::before{content:"";display:block;box-sizing:border-box;position:absolute;bottom:-7px}.gg-play-list-search::after{width:3px;height:2px;background:currentColor;transform:rotate(45deg);right:-4px}.gg-play-list-search::before{width:6px;height:6px;border-radius:4px;border:2px solid;right:-3px}.gg-play-list{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:6px;border-top:0 solid transparent;border-bottom:2px solid transparent;box-shadow:inset 0 -2px 0,-2px 4px 0 -2px,0 -2px 0 0}.gg-play-list::after{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent;border-left:5px solid;top:6px;right:-3px}.gg-play-pause-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:22px}.gg-play-pause-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;left:6px;top:6px;border-left:2px solid;border-right:2px solid}.gg-play-pause-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-play-pause-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;left:6px;top:6px;border-left:2px solid;border-right:2px solid}.gg-play-pause{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:10px;border-left:3px solid;border-right:3px solid}.gg-play-stop-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:20px}.gg-play-stop-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;top:6px;left:6px;background:currentColor}.gg-play-stop-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-play-stop-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;top:6px;left:6px;background:currentColor}.gg-play-stop{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:10px;background:currentColor}.gg-play-track-next-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:20px}.gg-play-track-next-o::after,.gg-play-track-next-o::before{content:"";display:block;box-sizing:border-box;position:absolute;height:8px;top:5px}.gg-play-track-next-o::before{width:2px;border-radius:2px;left:11px;background:currentColor}.gg-play-track-next-o::after{width:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:5px solid;left:5px}.gg-play-track-next-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-play-track-next-r::after,.gg-play-track-next-r::before{content:"";display:block;box-sizing:border-box;position:absolute;height:8px;top:5px}.gg-play-track-next-r::before{width:2px;border-radius:2px;left:11px;background:currentColor}.gg-play-track-next-r::after{width:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:5px solid;left:5px}.gg-play-track-next{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:3px;height:10px;background:currentColor}.gg-play-track-next::after{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:10px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:6px solid;left:-7px}.gg-play-track-prev-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:20px}.gg-play-track-prev-o::after,.gg-play-track-prev-o::before{content:"";display:block;box-sizing:border-box;position:absolute;height:8px;top:5px}.gg-play-track-prev-o::before{width:2px;border-radius:2px;right:11px;background:currentColor}.gg-play-track-prev-o::after{width:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:5px solid;right:5px}.gg-play-track-prev-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-play-track-prev-r::after,.gg-play-track-prev-r::before{content:"";display:block;box-sizing:border-box;position:absolute;height:8px;top:5px}.gg-play-track-prev-r::before{width:2px;border-radius:2px;right:11px;background:currentColor}.gg-play-track-prev-r::after{width:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-right:5px solid;right:5px}.gg-play-track-prev{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:3px;height:10px;background:currentColor}.gg-play-track-prev::after{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:10px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:6px solid;right:-7px}.gg-plug{position:relative;display:block;box-sizing:border-box;transform:scale(var(--ggs,1));width:12px;height:20px}.gg-plug::after,.gg-plug::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-plug::before{width:12px;height:10px;border:2px solid;border-bottom-left-radius:8px;border-bottom-right-radius:8px;top:5px}.gg-plug::after{width:2px;height:4px;background:currentColor;left:2px;border-radius:22px;box-shadow:6px 0 0,3px 14px 0,3px 16px 0}.gg-pocket{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:20px;border:2px solid;border-radius:6px;border-bottom-left-radius:22px;border-bottom-right-radius:22px}.gg-pocket::after,.gg-pocket::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:22px;width:8px;height:2px;background:currentColor;bottom:7px}.gg-pocket::before{transform:rotate(-48deg);right:3px}.gg-pocket::after{transform:rotate(48deg);left:3px}.gg-pokemon{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:5px solid transparent;box-shadow:0 0 0 2px,inset 0 0 0 2px;border-radius:100%}.gg-pokemon::before{content:"";display:block;box-sizing:border-box;position:absolute;width:20px;height:2px;border-left:8px solid;border-right:8px solid;left:-6px;top:3px}.gg-polaroid{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:20px;border:2px solid;border-radius:2px;box-shadow:inset 0 -5px 0}.gg-poll{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:3px solid transparent;border-top:6px solid transparent;box-shadow:0 0 0 2px,inset 2px 0 0;border-radius:1px}.gg-poll::after,.gg-poll::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:10px;background:currentColor;top:-3px;left:4px}.gg-poll::after{height:4px;top:3px;left:8px}.gg-presentation{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:22px}.gg-presentation::after,.gg-presentation::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-presentation::before{width:12px;height:6px;border:2px solid;border-top-left-radius:100px;border-top-right-radius:100px;top:2px;left:2px;border-bottom:0}.gg-presentation::after{width:18px;height:2px;background:currentColor;left:-1px;top:8px}.gg-printer{background:linear-gradient(to left,currentColor 5px,transparent 0)no-repeat 0 10px/6px 2px,linear-gradient(to left,currentColor 5px,transparent 0)no-repeat 14px 10px/6px 2px,linear-gradient(to left,currentColor 5px,transparent 0)no-repeat 4px 4px/2px 2px;box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:14px;border:2px solid transparent;border-bottom:0;box-shadow:inset 0 2px 0,inset 2px 2px 0,inset -2px 2px 0,inset -2px 2px 0}.gg-printer::after,.gg-printer::before{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;border:2px solid;left:4px}.gg-printer::before{height:6px;top:-4px}.gg-printer::after{height:8px;top:8px}.gg-product-hunt{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:100px}.gg-product-hunt::after,.gg-product-hunt::before{content:"";display:block;box-sizing:border-box;position:absolute;top:3px}.gg-product-hunt::before{border:2px solid;border-left:0;border-top-right-radius:40px;border-bottom-right-radius:40px;width:6px;height:6px;left:5px}.gg-product-hunt::after{width:2px;height:8px;background:currentColor;left:4px}.gg-profile,.gg-profile::after,.gg-profile::before{display:block;box-sizing:border-box;border:2px solid;border-radius:100px}.gg-profile{overflow:hidden;transform:scale(var(--ggs,1));width:22px;height:22px;position:relative}.gg-profile::after,.gg-profile::before{content:"";position:absolute;top:2px;left:5px;width:8px;height:8px}.gg-profile::after{border-radius:200px;top:11px;left:0px;width:18px;height:18px}.gg-pull-clear{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:12px;border:2px solid;border-top:0;border-bottom-left-radius:2px;border-bottom-right-radius:2px}.gg-pull-clear::after{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:2px;bottom:2px;left:2px;background:currentColor;box-shadow:0 -4px 0 0}.gg-push-chevron-down-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-push-chevron-down-o::after,.gg-push-chevron-down-o::before{content:"";display:block;box-sizing:border-box;position:absolute;border-bottom:2px solid}.gg-push-chevron-down-o::before{bottom:5px;width:8px;height:2px;left:5px}.gg-push-chevron-down-o::after{width:6px;height:6px;border-right:2px solid;transform:rotate(45deg);left:6px;top:3px}.gg-push-chevron-down-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-push-chevron-down-r::after,.gg-push-chevron-down-r::before{content:"";display:block;box-sizing:border-box;position:absolute;border-bottom:2px solid}.gg-push-chevron-down-r::before{bottom:5px;width:8px;height:2px;left:5px}.gg-push-chevron-down-r::after{width:6px;height:6px;border-right:2px solid;transform:rotate(45deg);left:6px;top:3px}.gg-push-chevron-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-push-chevron-down::after,.gg-push-chevron-down::before{content:"";display:block;box-sizing:border-box;position:absolute;border-bottom:2px solid}.gg-push-chevron-down::before{bottom:0;width:14px;height:2px;left:2px}.gg-push-chevron-down::after{width:10px;height:10px;border-right:2px solid;transform:rotate(45deg);left:4px;top:2px}.gg-push-chevron-left-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-push-chevron-left-o::after,.gg-push-chevron-left-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:8px;border-left:2px solid;top:5px;left:5px}.gg-push-chevron-left-o::after{width:6px;height:6px;border-bottom:2px solid;transform:rotate(45deg);left:9px;top:6px}.gg-push-chevron-left-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-push-chevron-left-r::after,.gg-push-chevron-left-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:8px;border-left:2px solid;top:5px;left:5px}.gg-push-chevron-left-r::after{width:6px;height:6px;border-bottom:2px solid;transform:rotate(45deg);left:9px;top:6px}.gg-push-chevron-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-push-chevron-left::after,.gg-push-chevron-left::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:14px;border-left:2px solid;top:2px;left:0}.gg-push-chevron-left::after{width:10px;height:10px;border-bottom:2px solid;transform:rotate(45deg);left:6px;top:4px}.gg-push-chevron-right-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-push-chevron-right-o::after,.gg-push-chevron-right-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:8px;border-right:2px solid;top:5px;right:5px}.gg-push-chevron-right-o::after{width:6px;height:6px;border-bottom:2px solid;transform:rotate(-45deg);right:9px;top:6px}.gg-push-chevron-right-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-push-chevron-right-r::after,.gg-push-chevron-right-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:8px;border-right:2px solid;top:5px;right:5px}.gg-push-chevron-right-r::after{width:6px;height:6px;border-bottom:2px solid;transform:rotate(-45deg);right:9px;top:6px}.gg-push-chevron-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-push-chevron-right::after,.gg-push-chevron-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:14px;border-right:2px solid;top:2px;right:0}.gg-push-chevron-right::after{width:10px;height:10px;border-bottom:2px solid;transform:rotate(-45deg);right:6px;top:4px}.gg-push-chevron-up-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:100px}.gg-push-chevron-up-o::after,.gg-push-chevron-up-o::before{content:"";display:block;box-sizing:border-box;position:absolute;border-top:2px solid}.gg-push-chevron-up-o::before{top:5px;width:8px;height:2px;left:5px}.gg-push-chevron-up-o::after{width:6px;height:6px;border-right:2px solid;transform:rotate(-45deg);left:6px;bottom:3px}.gg-push-chevron-up-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-push-chevron-up-r::after,.gg-push-chevron-up-r::before{content:"";display:block;box-sizing:border-box;position:absolute;border-top:2px solid}.gg-push-chevron-up-r::before{top:5px;width:8px;height:2px;left:5px}.gg-push-chevron-up-r::after{width:6px;height:6px;border-right:2px solid;transform:rotate(-45deg);left:6px;bottom:3px}.gg-push-chevron-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid transparent;border-radius:100px}.gg-push-chevron-up::after,.gg-push-chevron-up::before{content:"";display:block;box-sizing:border-box;position:absolute;border-top:2px solid}.gg-push-chevron-up::before{top:0;width:14px;height:2px;left:2px}.gg-push-chevron-up::after{width:10px;height:10px;border-right:2px solid;transform:rotate(-45deg);left:4px;bottom:2px}.gg-push-down{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:16px;background:currentColor;}.gg-push-down::after,.gg-push-down::before{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:2px;border-bottom:2px solid;bottom:-5px;left:-5px}.gg-push-down::after{width:8px;height:8px;border-right:2px solid;transform:rotate(45deg);left:-3px;bottom:0}.gg-push-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:2px;background:currentColor;}.gg-push-left::after,.gg-push-left::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:12px;border-left:2px solid;left:-5px;top:-5px}.gg-push-left::after{width:8px;height:8px;border-bottom:2px solid;transform:rotate(45deg);top:-3px;left:0}.gg-push-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:2px;background:currentColor;}.gg-push-right::after,.gg-push-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:12px;border-right:2px solid;right:-5px;top:-5px}.gg-push-right::after{width:8px;height:8px;border-top:2px solid;transform:rotate(45deg);top:-3px;right:0}.gg-push-up{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:2px;height:16px;background:currentColor;}.gg-push-up::after,.gg-push-up::before{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:2px;border-top:2px solid;top:-5px;left:-5px}.gg-push-up::after{width:8px;height:8px;border-left:2px solid;transform:rotate(45deg);left:-3px;top:0}.gg-qr{transform:scale(var(--ggs,1))}.gg-qr,.gg-qr::after{box-sizing:border-box;position:relative;display:block;width:14px;height:14px;box-shadow:-6px -6px 0 -4px,6px 6px 0 -4px,6px -6px 0 -4px,-6px 6px 0 -4px}.gg-qr::after{content:"";position:absolute;width:4px;height:4px;background:currentColor;box-shadow:0 6px 0,6px 6px 0,6px 0 0;top:2px;left:2px}.gg-quote-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:18px;border:2px solid;border-radius:2px}.gg-quote-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:6px;border-left:3px solid;border-right:3px solid;left:4px;top:4px;transform:skewX(-20deg)}.gg-quote{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:18px;border:2px solid transparent;border-radius:2px}.gg-quote::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:6px;border-left:3px solid;border-right:3px solid;left:4px;top:4px;transform:skewX(-20deg)}.gg-radio-check{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:100px}.gg-radio-checked,.gg-radio-checked::after{display:block;box-sizing:border-box;border-radius:100px}.gg-radio-checked{border:2px solid;position:relative;transform:scale(var(--ggs,1));width:20px;height:20px}.gg-radio-checked::after{content:"";position:absolute;width:8px;height:8px;background:currentColor;top:4px;left:4px}.gg-ratio{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:20px;border:2px solid;border-radius:4px}.gg-ratio::after,.gg-ratio::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px}.gg-ratio::before{border-bottom:2px solid;border-right:2px solid;top:8px;left:12px}.gg-ratio::after{border-top:2px solid;border-left:2px solid;top:2px;left:2px}.gg-read,.gg-read::after,.gg-read::before{display:block;box-sizing:border-box;border:2px solid}.gg-read{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom-color:transparent;margin-left:-1px;position:relative;transform:scale(var(--ggs,1));width:6px;height:5px;border-radius:50px}.gg-read::after,.gg-read::before{content:"";position:absolute;width:10px;height:10px;border-radius:10px;left:-10px;top:-5px;box-shadow:-6px 0 0 -4px currentColor}.gg-read::after{left:2px;box-shadow:6px 0 0 -4px currentColor}.gg-readme{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:2px;height:17px;border-bottom:4px solid;border-radius:4px}.gg-readme::after,.gg-readme::before{content:"";display:block;position:absolute;box-sizing:border-box;width:8px;height:12px;box-shadow:0 0 0 2px;border-radius:1px;bottom:-1px;background:linear-gradient(to left,currentColor 4px,transparent 0)no-repeat center 5px/4px 2px,linear-gradient(to left,currentColor 4px,transparent 0)no-repeat center 2px/4px 2px,linear-gradient(to left,currentColor 4px,transparent 0)no-repeat center 8px/4px 2px}.gg-readme::before{border-top-right-radius:3px;left:-8px}.gg-readme::after{border-top-left-radius:3px;right:-8px}.gg-record{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:6px solid transparent;box-shadow:0 0 0 2px,inset 0 0 0 10px;border-radius:100px}.gg-redo{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;border:2px solid;border-right-color:transparent;border-radius:100px}.gg-redo::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;border-right:2px solid;top:-3px;right:-1px;transform:rotate(68deg)}.gg-remote{transform:scale(var(--ggs,1))}.gg-remote,.gg-remote::after,.gg-remote::before{box-sizing:border-box;position:relative;display:block;width:8px;height:8px}.gg-remote::after,.gg-remote::before{content:"";position:absolute;border-left:2px solid;border-bottom:2px solid;transform:rotate(45deg) scaleY(1)}.gg-remote::before{left:5px;top:-2px}.gg-remote::after{transform:rotate(-45deg) scaleX(-1);left:-5px;top:2px}.gg-remove-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px}.gg-remove-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:5px;top:8px;left:4px}.gg-remove{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:22px}.gg-remove::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:2px;background:currentColor;border-radius:5px;top:8px;left:4px}.gg-rename{box-sizing:border-box;position:relative;display:block;width:20px;height:16px;transform:scale(var(--ggs,1));background:linear-gradient( to left,currentColor 22px,transparent 0) no-repeat 6px center/2px 22px}.gg-rename::after,.gg-rename::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:12px;border:2px solid;top:2px}.gg-rename::before{border-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.gg-rename::after{width:10px;border-left:0;border-top-right-radius:3px;border-bottom-right-radius:3px;right:0}.gg-reorder{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:2px;border-radius:3px;background:currentColor}.gg-reorder::after,.gg-reorder::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px}.gg-reorder::before{border:2px solid;width:6px;height:6px;left:12px;top:-2px}.gg-reorder::after{top:-4px;left:0;width:10px;height:2px;opacity:.5;background:currentColor;box-shadow:0 8px 0 0,0 12px 0 0,0 16px 0 0}.gg-repeat{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));box-shadow:-2px -2px 0 0,2px 2px 0 0;width:14px;height:6px}.gg-repeat::after,.gg-repeat::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent}.gg-repeat::before{border-left:5px solid;top:-4px;right:0}.gg-repeat::after{border-right:5px solid;bottom:-4px;left:0}.gg-ring{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px}.gg-ring::after,.gg-ring::before{content:"";display:block;position:absolute;border:2px solid;box-sizing:border-box}.gg-ring::before{border-top-right-radius:100px;transform:rotate(-45deg);width:8px;height:8px;left:6px;top:-1px}.gg-ring::after{width:18px;height:18px;border-radius:100px;border-top-color:transparent;left:1px;top:2px}.gg-row-first{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:10px}.gg-row-first::after,.gg-row-first::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;height:2px;background:currentColor}.gg-row-first::before{width:10px;top:4px;opacity:.5;box-shadow:0 4px 0}.gg-row-first::after{width:14px}.gg-row-last{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:10px}.gg-row-last::after,.gg-row-last::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;height:2px;background:currentColor}.gg-row-last::before{width:10px;opacity:.5;box-shadow:0 4px 0}.gg-row-last::after{width:14px;bottom:0}.gg-ruler{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:13px;border:2px solid;border-radius:3px}.gg-ruler::after,.gg-ruler::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:5px;background:currentColor;left:7px;top:-1px;box-shadow:8px 0 0}.gg-ruler::before{height:7px;left:3px}.gg-sand-clock{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:20px;border-top:2px solid;border-bottom:2px solid}.gg-sand-clock::after,.gg-sand-clock::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-sand-clock::before{border-top-left-radius:14px;border-top-right-radius:14px;bottom:-2px;width:10px;height:10px;border:2px solid;left:1px}.gg-sand-clock::after{width:6px;height:6px;border:2px solid transparent;border-bottom-left-radius:14px;border-bottom-right-radius:14px;top:0;left:3px;box-shadow:0 0 0 2px,inset 2px 0 0}.gg-scan{box-sizing:border-box;position:relative;display:block;width:18px;height:18px;transform:scale(var(--ggs,1));background:linear-gradient(to left,currentColor 22px,transparent 0)no-repeat center/2px 22px}.gg-scan::after,.gg-scan::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:14px;border:2px solid;top:2px}.gg-scan::before{border-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.gg-scan::after{border-left:0;border-top-right-radius:3px;border-bottom-right-radius:3px;right:0}.gg-screen-mirror{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:10px;border:2px solid;border-bottom:0}.gg-screen-mirror::after,.gg-screen-mirror::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-screen-mirror::after{border-bottom:5px solid;width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;bottom:-2px;left:3px}.gg-screen-mirror::before{width:18px;height:2px;left:-2px;bottom:0;border-left:5px solid;border-right:5px solid}.gg-screen-shot{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:20px;border:2px solid;border-radius:1px}.gg-screen-shot::after,.gg-screen-shot::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;height:4px}.gg-screen-shot::before{border-bottom:2px solid;border-right:2px solid;bottom:2px;right:2px}.gg-screen-shot::after{border-top:2px solid;border-left:2px solid;top:2px;left:2px}.gg-screen-wide{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:11px;border:2px solid;border-radius:3px;margin-top:-4px}.gg-screen-wide::after,.gg-screen-wide::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:8px;height:2px;background:currentColor;top:10px;left:6px}.gg-screen-wide::before{width:2px;height:4px;top:8px;left:9px}.gg-screen{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:14px;border:2px solid;border-radius:3px;margin-top:-4px}.gg-screen::after,.gg-screen::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:10px;height:2px;background:currentColor;top:14px;left:4px}.gg-screen::before{width:2px;height:6px;top:10px;left:8px}.gg-scroll-h,.gg-scroll-h::after,.gg-scroll-h::before{display:block;box-sizing:border-box;width:6px;height:6px}.gg-scroll-h{position:relative;transform:scale(var(--ggs,1));border:2px solid;border-radius:10px}.gg-scroll-h::after,.gg-scroll-h::before{content:"";position:absolute;transform:rotate(45deg);top:-2px}.gg-scroll-h::after{border-top:2px solid;border-right:2px solid;right:-8px}.gg-scroll-h::before{border-bottom:2px solid;border-left:2px solid;left:-8px}.gg-scroll-v,.gg-scroll-v::after,.gg-scroll-v::before{display:block;box-sizing:border-box;width:6px;height:6px}.gg-scroll-v{position:relative;transform:scale(var(--ggs,1));border:2px solid;border-radius:10px}.gg-scroll-v::after,.gg-scroll-v::before{content:"";position:absolute;transform:rotate(-45deg);left:-2px}.gg-scroll-v::after{border-bottom:2px solid;border-left:2px solid;bottom:-8px}.gg-scroll-v::before{border-top:2px solid;border-right:2px solid;top:-8px}.gg-search-found{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:100%;margin-left:-4px;margin-top:-4px}.gg-search-found::after,.gg-search-found::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-search-found::after{border-radius:3px;width:2px;height:8px;background:currentColor;transform:rotate(-45deg);top:10px;left:12px}.gg-search-found::before{width:6px;height:4px;border-left:2px solid;border-bottom:2px solid;transform:rotate(-40deg);top:3px;left:3px}.gg-search-loading{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:100%;margin-left:-4px;margin-top:-4px}.gg-search-loading::after,.gg-search-loading::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;background:currentColor}.gg-search-loading::after{border-radius:3px;height:8px;transform:rotate(-45deg);top:10px;left:12px}.gg-search-loading::before{height:2px;border-radius:100%;top:5px;left:5px;box-shadow:-3px 0 0,3px 0 0}.gg-search{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:100%;margin-left:-4px;margin-top:-4px}.gg-search::after{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:8px;background:currentColor;transform:rotate(-45deg);top:10px;left:12px}.gg-select-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:20px;}.gg-select-o::after,.gg-select-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;left:6px;transform:rotate(-45deg)}.gg-select-o::before{border-left:2px solid;border-bottom:2px solid;bottom:4px}.gg-select-o::after{border-right:2px solid;border-top:2px solid;top:4px}.gg-select-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;border:2px solid;border-radius:4px;}.gg-select-r::after,.gg-select-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;left:6px;transform:rotate(-45deg)}.gg-select-r::before{border-left:2px solid;border-bottom:2px solid;bottom:4px}.gg-select-r::after{border-right:2px solid;border-top:2px solid;top:4px}.gg-select{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-select::after,.gg-select::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;left:7px;transform:rotate(-45deg)}.gg-select::before{border-left:2px solid;border-bottom:2px solid;bottom:4px}.gg-select::after{border-right:2px solid;border-top:2px solid;top:4px}.gg-server{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:20px;border:2px solid;border-radius:3px}.gg-server::after,.gg-server::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;background:currentColor}.gg-server::before{top:2px;box-shadow:0 4px 0;border-radius:3px;width:8px;left:2px}.gg-server::after{width:2px;border-radius:10px;left:5px;bottom:2px}.gg-serverless{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:15px;height:13px;overflow:hidden}.gg-serverless::after,.gg-serverless::before{background:currentColor;content:"";box-sizing:border-box;position:absolute;display:block;height:3px;box-shadow:0 5px 0,0 10px 0;transform:skew(-20deg)}.gg-serverless::before{width:8px;left:-2px}.gg-serverless::after{width:12px;right:-5px}.gg-shape-circle{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:3px solid;border-radius:100px}.gg-shape-half-circle{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:16px;border:3px solid;border-top-left-radius:100px;border-bottom-left-radius:100px;border-right:0}.gg-shape-hexagon,.gg-shape-hexagon::after,.gg-shape-hexagon::before{display:block;box-sizing:border-box;width:18px;height:10px;border-left:3px solid currentColor;border-right:3px solid currentColor}.gg-shape-hexagon{position:relative;transform:scale(var(--ggs,1))}.gg-shape-hexagon::after,.gg-shape-hexagon::before{content:"";position:absolute;left:-3px}.gg-shape-hexagon::before{transform:rotate(60deg)}.gg-shape-hexagon::after{transform:rotate(-60deg)}.gg-shape-rhombus{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:14px;height:14px;border:3px solid}.gg-shape-square{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:3px solid}.gg-shape-triangle{position:relative;transform:scale(var(--ggs,1));width:22px;height:17px;border-left:3px solid transparent;border-bottom:3px solid}.gg-shape-triangle,.gg-shape-triangle::before{display:block;box-sizing:border-box;border-right:3px solid transparent}.gg-shape-triangle::before{content:"";position:absolute;width:20px;height:20px;border-left:3px solid;border-top:3px solid;border-bottom:3px solid transparent;transform:rotate(45deg) skew(10deg,10deg);left:-2px;bottom:-13px}.gg-shape-zigzag,.gg-shape-zigzag::after,.gg-shape-zigzag::before{display:block;box-sizing:border-box;width:5px;height:7px;border-left:2px solid;border-bottom:2px solid}.gg-shape-zigzag{margin-left:-18px;transform:rotate(-49deg) scale(var(--ggs,1));position:relative}.gg-shape-zigzag::after,.gg-shape-zigzag::before{content:"";position:absolute;left:2px;top:5px}.gg-shape-zigzag::before{left:7px;top:10px}.gg-share{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:6px;height:6px;background:currentColor;border-radius:100px;box-shadow:10px -6px 0,10px 6px 0}.gg-share::after,.gg-share::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:10px;height:2px;background:currentColor;left:2px}.gg-share::before{top:0;transform:rotate(-35deg)}.gg-share::after{bottom:0;transform:rotate(35deg)}.gg-shield{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:4px;background:currentColor;border-radius:100px;margin-top:-6px}.gg-shield::after,.gg-shield::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:8px;height:16px;border:2px solid}.gg-shield::before{border-bottom-left-radius:40px;border-right:0;left:0}.gg-shield::after{border-bottom-right-radius:40px;border-left:0;right:0}.gg-shopping-bag{transform:scale(var(--ggs,1))}.gg-shopping-bag,.gg-shopping-bag::after{box-sizing:border-box;position:relative;display:block;width:20px;height:20px;border:2px solid;border-radius:3px}.gg-shopping-bag::after{content:"";position:absolute;width:10px;height:6px;border-bottom-left-radius:120px;border-bottom-right-radius:120px;border-top:0;top:2px;left:3px}.gg-shopping-cart{display:block;box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));width:20px;height:21px;background:linear-gradient(to left,currentColor 12px,transparent 0)no-repeat -1px 6px/18px 2px,linear-gradient(to left,currentColor 12px,transparent 0)no-repeat 6px 14px/11px 2px,linear-gradient(to left,currentColor 12px,transparent 0)no-repeat 0 2px/4px 2px,radial-gradient(circle,currentColor 60%,transparent 40%)no-repeat 12px 17px/4px 4px,radial-gradient(circle,currentColor 60%,transparent 40%)no-repeat 6px 17px/4px 4px}.gg-shopping-cart::after,.gg-shopping-cart::before{content:"";display:block;position:absolute;box-sizing:border-box;width:2px;height:14px;background:currentColor;top:2px;left:4px;transform:skew(12deg)}.gg-shopping-cart::after{height:10px;top:6px;left:16px;transform:skew(-12deg)}.gg-shortcut,.gg-shortcut::after{display:block;box-sizing:border-box;border-radius:3px}.gg-shortcut{border:2px solid;position:relative;transform:scale(var(--ggs,1));width:18px;height:18px}.gg-shortcut::after{content:"";position:absolute;width:2px;height:12px;background:currentColor;left:6px;top:1px;transform:rotate(45deg)}.gg-shutterstock{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:3px}.gg-shutterstock::after,.gg-shutterstock::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-radius:1px}.gg-shutterstock::before{border-bottom:2px solid;border-right:2px solid;bottom:2px;right:2px}.gg-shutterstock::after{border-top:2px solid;border-left:2px solid;top:2px;left:2px}.gg-sidebar-open{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:16px;border:2px solid}.gg-sidebar-open::before{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;height:12px;background:currentColor;top:0;left:0}.gg-sidebar-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:16px;border-right:2px solid}.gg-sidebar-right::before{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;height:16px;border:2px solid;top:0;right:2px}.gg-sidebar,.gg-sidebar::before{display:block;box-sizing:border-box;height:16px}.gg-sidebar{border-left:2px solid;position:relative;transform:scale(var(--ggs,1));width:18px}.gg-sidebar::before{content:"";position:absolute;width:14px;border:2px solid;top:0;left:2px}.gg-signal,.gg-signal::after,.gg-signal::before{display:block;box-sizing:border-box;width:2px;border-radius:4px;background:currentColor}.gg-signal{position:relative;transform:scale(var(--ggs,1));height:8px}.gg-signal::after,.gg-signal::before{content:"";position:absolute}.gg-signal::before{height:12px;left:4px;bottom:0}.gg-signal::after{height:4px;left:-4px;bottom:0}.gg-size{box-sizing:border-box;position:relative;display:block;width:16px;height:16px;transform:scale(var(--ggs,1));border-left:8px solid transparent;box-shadow:inset 0 0 0 2px}.gg-size::after,.gg-size::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:12px;border:2px solid;border-right:0;right:6px;top:2px}.gg-size::before{width:4px;height:8px;right:12px;top:4px}.gg-sketch{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:22px;height:18px;background:linear-gradient(to left,currentColor 16px,transparent 0) no-repeat center 6px/6px 2px}.gg-sketch::after,.gg-sketch::before{content:"";display:block;box-sizing:border-box;position:absolute;width:14px;border:2px solid;left:4px}.gg-sketch::before{height:14px;border-top-color:transparent;border-right-color:transparent;transform:rotate(-45deg)skew(-8deg,-8deg);bottom:4px}.gg-sketch::after{height:7px;border-bottom:0;transform:perspective(12px)rotateX(35deg)}.gg-slack{position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));display:block;width:20px;height:20px;background:linear-gradient(to left,currentColor 5px,transparent 0) no-repeat 7px 2px/2px 2px,linear-gradient(to left,currentColor 5px,transparent 0) no-repeat 15px 7px/2px 2px,linear-gradient(to left,currentColor 5px,transparent 0) no-repeat 2px 10px/2px 2px,linear-gradient(to left,currentColor 5px,transparent 0) no-repeat 10px 15px/2px 2px,linear-gradient(to left,currentColor 5px,transparent 0) no-repeat 10px 2px/4px 5px,linear-gradient(to left,currentColor 5px,transparent 0) no-repeat 5px 12px/4px 5px}.gg-slack::after,.gg-slack::before{background:currentColor;content:"";position:absolute;box-sizing:border-box;display:block;height:4px;border-radius:22px}.gg-slack::before{width:9px;top:5px;box-shadow:10px 5px 0}.gg-slack::after{width:4px;left:5px;box-shadow:-5px 10px 0,0 10px 0,0 15px 0,5px 15px 0,5px 5px 0,5px 0 0,10px 5px 0}.gg-sleep,.gg-sleep::after{display:block;box-sizing:border-box}.gg-sleep{transform:scale(var(--ggs,1));position:relative;width:18px;height:18px;border:2px solid;border-radius:22px}.gg-sleep::after{content:"";position:absolute;width:14px;height:2px;background:currentColor;bottom:2px}.gg-smart-home-boiler{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:20px;border:2px solid;border-radius:2px;border-top-left-radius:4px;border-top-right-radius:4px;background:linear-gradient(to left,currentColor 14px,transparent 0)no-repeat center 4px/14px 2px}.gg-smart-home-boiler::before{content:"";position:absolute;display:block;box-sizing:border-box;width:6px;height:3px;border-left:2px solid;border-right:2px solid;transform:skewX(20deg);bottom:-4px;left:2px}.gg-smart-home-cooker{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:4px;background:linear-gradient(to left,currentColor 18px,transparent 0) no-repeat center 2px/18px 2px}.gg-smart-home-cooker::after,.gg-smart-home-cooker::before{content:"";position:absolute;display:block;box-sizing:border-box;width:6px;left:4px}.gg-smart-home-cooker::before{height:6px;border:2px solid;border-radius:4px;bottom:2px}.gg-smart-home-cooker::after{height:3px;box-shadow:0 -2px 0,inset 0 0 0 2px;border-left:2px solid transparent;border-right:2px solid transparent;top:-4px}.gg-smart-home-heat{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:24px;height:14px;border:2px solid;border-radius:22px;background:linear-gradient(to left,currentColor 24px,transparent 0) no-repeat center 2px/10px 2px}.gg-smart-home-heat::after,.gg-smart-home-heat::before{content:"";position:absolute;display:block;box-sizing:border-box;width:6px;height:6px;border:2px solid;top:2px}.gg-smart-home-heat::before{border-right:0;border-top-left-radius:22px;border-bottom-left-radius:22px;left:2px}.gg-smart-home-heat::after{border-left:0;border-top-right-radius:22px;border-bottom-right-radius:22px;right:2px}.gg-smart-home-light{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:10px;height:14px;border:2px solid;border-radius:14px;box-shadow:0 11px 0 -4px}.gg-smart-home-light::after,.gg-smart-home-light::before{content:"";position:absolute;display:block;box-sizing:border-box;background:currentColor;width:2px;height:6px;border-radius:6px;bottom:-8px}.gg-smart-home-light::before{transform:rotate(20deg);left:-2px}.gg-smart-home-light::after{transform:rotate(-20deg);right:-2px}.gg-smart-home-refrigerator{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:22px;border:2px solid;border-radius:3px}.gg-smart-home-refrigerator::after,.gg-smart-home-refrigerator::before{content:"";position:absolute;display:block;box-sizing:border-box;background:currentColor}.gg-smart-home-refrigerator::before{width:2px;height:4px;border-radius:2px;top:2px;left:2px;box-shadow:0 8px 0}.gg-smart-home-refrigerator::after{width:14px;height:2px;top:7px;left:-2px}.gg-smart-home-wash-machine{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:18px;height:20px;border:2px solid;background:linear-gradient(to left,currentColor 18px,transparent 0) no-repeat center 4px/18px 2px;border-radius:3px}.gg-smart-home-wash-machine::after,.gg-smart-home-wash-machine::before{content:"";position:absolute;display:block;box-sizing:border-box;border-radius:22px}.gg-smart-home-wash-machine::before{bottom:1px;left:3px;width:8px;height:8px;border:2px solid;box-shadow:5px -9px 0 -3px,2px -9px 0 -3px}.gg-smart-home-wash-machine::after{top:1px;left:1px;width:4px;height:2px;background:currentColor}.gg-smartphone-chip{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:6px double;border-radius:3px}.gg-smartphone-chip::after{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:2px;left:-3px;top:-9px;background:currentColor;box-shadow:4px 0 0,8px 0 0,0 20px 0,4px 20px 0,-6px 6px 0,14px 6px 0,14px 10px 0,14px 14px 0,-6px 10px 0,-6px 14px 0,8px 20px 0}.gg-smartphone-ram{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:26px;height:14px;border:2px solid;border-radius:3px}.gg-smartphone-ram::after,.gg-smartphone-ram::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:2px;background:currentColor;box-shadow:16px 4px 0;top:2px;left:2px}.gg-smartphone-ram::after{box-shadow:4px 0 0,8px 0 0,12px 0 0,16px 0 0,0 18px 0,4px 18px 0,8px 18px 0,12px 18px 0,16px 18px 0;top:-5px}.gg-smartphone-shake{background:linear-gradient(to left,currentColor 5px,transparent 0)no-repeat 4px 12px/2px 2px;box-sizing:border-box;position:relative;transform:scale(var(--ggs,1));display:block;width:14px;height:20px;border:2px solid;border-radius:2px}.gg-smartphone-shake::after,.gg-smartphone-shake::before{content:"";display:block;box-sizing:border-box;position:absolute;height:10px;width:6px;border:2px solid transparent;overflow:hidden;box-shadow:2px 0 0,inset -2px 0 0;top:3px;left:-12px}.gg-smartphone-shake::after{transform:scaleX(-1);left:16px}.gg-smartphone{background:linear-gradient(to left,currentColor 5px,transparent 0)no-repeat 4px 12px/2px 2px;box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:20px;border:2px solid;border-radius:2px;}.gg-smile-mouth-open{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:100px}.gg-smile-mouth-open::after,.gg-smile-mouth-open::before{content:"";display:block;box-sizing:border-box;position:absolute;left:4px}.gg-smile-mouth-open::before{background:currentColor;box-shadow:6px 0 0;width:2px;height:2px;border-radius:50%;top:5px}.gg-smile-mouth-open::after{width:8px;height:4px;border-radius:150px;border-top-left-radius:0;border-top-right-radius:0;border:2px solid;top:9px}.gg-smile-neutral{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:100px}.gg-smile-neutral::after,.gg-smile-neutral::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;background:currentColor;left:4px}.gg-smile-neutral::before{box-shadow:6px 0 0;width:2px;border-radius:10px;top:5px}.gg-smile-neutral::after{border-radius:3px;width:8px;top:10px}.gg-smile-no-mouth{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:100px}.gg-smile-no-mouth::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;background:currentColor;left:4px;box-shadow:6px 0 0;width:2px;border-radius:10px;top:5px}.gg-smile-none{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:100px}.gg-smile-none::after,.gg-smile-none::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;background:currentColor;left:4px}.gg-smile-none::before{box-shadow:5px 0 0;width:3px;border-radius:10px;top:5px}.gg-smile-none::after{border-radius:3px;width:8px;top:10px}.gg-smile-sad{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:100px}.gg-smile-sad::after,.gg-smile-sad::before{content:"";display:block;box-sizing:border-box;position:absolute;left:4px}.gg-smile-sad::before{background:currentColor;box-shadow:6px 0 0;width:2px;height:2px;border-radius:50%;top:5px}.gg-smile-sad::after{width:8px;height:4px;border-radius:150px;border-top-left-radius:0;border-top-right-radius:0;border:2px solid;border-top-color:transparent;top:9px;transform:scaleY(-1)}.gg-smile-upside{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:100px}.gg-smile-upside::after,.gg-smile-upside::before{content:"";display:block;box-sizing:border-box;position:absolute;left:4px}.gg-smile-upside::before{background:currentColor;box-shadow:6px 0 0;width:2px;height:2px;border-radius:50%;bottom:5px}.gg-smile-upside::after{width:8px;height:4px;border-radius:150px;border-bottom-left-radius:0;border-bottom-right-radius:0;border:2px solid;border-bottom-color:transparent;bottom:9px}.gg-smile{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:100px}.gg-smile::after,.gg-smile::before{content:"";display:block;box-sizing:border-box;position:absolute;left:4px}.gg-smile::before{background:currentColor;box-shadow:6px 0 0;width:2px;height:2px;border-radius:50%;top:5px}.gg-smile::after{width:8px;height:4px;border-radius:150px;border-top-left-radius:0;border-top-right-radius:0;border:2px solid;border-top-color:transparent;top:9px}.gg-software-download{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:6px;border:2px solid;border-top:0;border-bottom-left-radius:2px;border-bottom-right-radius:2px;margin-top:8px}.gg-software-download::after{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border-left:2px solid;border-bottom:2px solid;transform:rotate(-45deg);left:2px;bottom:4px}.gg-software-download::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:10px;background:currentColor;left:5px;bottom:5px}.gg-software-upload{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:6px;border:2px solid;border-top:0;border-bottom-left-radius:2px;border-bottom-right-radius:2px;margin-top:8px}.gg-software-upload::after{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border-left:2px solid;border-top:2px solid;transform:rotate(45deg);left:2px;bottom:4px}.gg-software-upload::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:10px;background:currentColor;left:5px;bottom:3px}.gg-sort-az,.gg-sort-az::after,.gg-sort-az::before{display:block;box-sizing:border-box;height:2px;border-radius:4px;background:currentColor}.gg-sort-az{position:relative;transform:scale(var(--ggs,1));width:8px}.gg-sort-az::after,.gg-sort-az::before{content:"";position:absolute}.gg-sort-az::before{width:12px;top:-4px;left:-2px}.gg-sort-az::after{width:4px;top:4px;left:2px}.gg-sort-za,.gg-sort-za::after,.gg-sort-za::before{display:block;box-sizing:border-box;height:2px;border-radius:4px;background:currentColor}.gg-sort-za{position:relative;transform:scale(var(--ggs,1));width:8px}.gg-sort-za::after,.gg-sort-za::before{content:"";position:absolute}.gg-sort-za::before{width:12px;top:4px;left:-2px}.gg-sort-za::after{width:4px;top:-4px;left:2px}.gg-space-between-v{display:block;box-sizing:border-box;transform:scale(var(--ggs,1));width:8px;height:14px;border-top:6px solid transparent;border-bottom:6px solid transparent;box-shadow:inset 0 0 0 2px}.gg-space-between-v::after,.gg-space-between-v::before{content:"";display:block;box-sizing:border-box;position:absolute;width:12px;height:4px;border:2px solid;left:-2px}.gg-space-between-v::before{top:-6px;border-top:0}.gg-space-between-v::after{bottom:-6px;border-bottom:0}.gg-space-between{display:block;box-sizing:border-box;transform:scale(var(--ggs,1));width:14px;height:8px;border-left:6px solid transparent;border-right:6px solid transparent;box-shadow:inset 0 0 0 2px}.gg-space-between::after,.gg-space-between::before{content:"";display:block;box-sizing:border-box;position:absolute;height:12px;width:4px;border:2px solid;top:-2px}.gg-space-between::before{left:-6px;border-left:0}.gg-space-between::after{right:-6px;border-right:0}.gg-spectrum{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;overflow:hidden}.gg-spectrum::before{content:"";display:block;box-sizing:border-box;position:absolute;width:30px;height:30px;left:-15px;bottom:-15px;border:8px solid;border-radius:18px}@keyframes spinneralt{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.gg-spinner-alt{transform:scale(var(--ggs,1))}.gg-spinner-alt,.gg-spinner-alt::before{box-sizing:border-box;position:relative;display:block;width:20px;height:20px}.gg-spinner-alt::before{content:"";position:absolute;border-radius:100px;animation:spinneralt 1s cubic-bezier(.6,0,.4,1) infinite;border:3px solid transparent;border-top-color:currentColor}@keyframes spinner-two-alt{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.gg-spinner-two-alt,.gg-spinner-two-alt::before{box-sizing:border-box;display:block;width:20px;height:20px}.gg-spinner-two-alt{transform:scale(var(--ggs,1));position:relative}.gg-spinner-two-alt::before{content:"";position:absolute;border-radius:100px;animation:spinner-two-alt 1s cubic-bezier(.6,0,.4,1) infinite;border:3px solid transparent;border-bottom-color:currentColor;border-top-color:currentColor}@keyframes spinner-two{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.gg-spinner-two{transform:scale(var(--ggs,1));box-sizing:border-box;position:relative;display:block;width:20px;height:20px}.gg-spinner-two::after,.gg-spinner-two::before{box-sizing:border-box;display:block;width:20px;height:20px;content:"";position:absolute;border-radius:100px}.gg-spinner-two::before{animation:spinner-two 1s cubic-bezier(.6,0,.4,1) infinite;border:3px solid transparent;border-bottom-color:currentColor;border-top-color:currentColor}.gg-spinner-two::after{border:3px solid;opacity:.2}.gg-spinner{transform:scale(var(--ggs,1))}.gg-spinner,.gg-spinner::after,.gg-spinner::before{box-sizing:border-box;position:relative;display:block;width:20px;height:20px}.gg-spinner::after,.gg-spinner::before{content:"";position:absolute;border-radius:100px}.gg-spinner::before{animation:spinner 1s cubic-bezier(.6,0,.4,1) infinite;border:3px solid transparent;border-top-color:currentColor}.gg-spinner::after{border:3px solid;opacity:.2}@keyframes spinner{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.gg-square{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:12px;border-radius:1px;border:3px solid transparent;box-shadow:0 0 0 3px,inset 0 0 0 3px}.gg-stack,.gg-stack::after,.gg-stack::before{display:block;box-sizing:border-box;width:14px;height:14px;border:2px solid}.gg-stack{margin-right:8px;margin-top:8px;transform:scale(var(--ggs,1));position:relative}.gg-stack::after,.gg-stack::before{content:"";position:absolute;border-left:0;border-bottom:0;right:-5px;top:-5px}.gg-stack::before{right:-8px;top:-8px}.gg-stark{background:currentColor;box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:3px;height:16px}.gg-stark::after,.gg-stark::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:16px;border:3px solid}.gg-stark::before{border-top-left-radius:100px;border-bottom-left-radius:100px;border-right:0;border-top-color:transparent;left:-7px;bottom:0}.gg-stark::after{border-top-right-radius:100px;border-bottom-right-radius:100px;border-left:0;border-bottom-color:transparent;right:-7px;top:0}.gg-stopwatch{background:linear-gradient(to left,currentColor 7px,transparent 0)no-repeat 6px 2px/2px 6px;box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border-radius:100%;border:2px solid transparent;box-shadow:0 0 0 2px}.gg-stopwatch::after{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;height:2px;background:currentColor;transform:rotate(45deg);right:-4px;top:-3px}.gg-stories,.gg-stories::after,.gg-stories::before{display:block;box-sizing:border-box;border-radius:3px}.gg-stories{position:relative;transform:scale(var(--ggs,1));width:12px;height:16px;border:2px solid}.gg-stories::after,.gg-stories::before{content:"";position:absolute;background:currentColor;width:2px;height:14px;top:-1px}.gg-stories::before{left:-6px}.gg-stories::after{right:-6px}.gg-studio{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:2px solid}.gg-studio::after{content:"";display:block;box-sizing:border-box;position:absolute;width:4px;height:4px;background:currentColor;right:2px;bottom:2px}.gg-style,.gg-style::after,.gg-style::before{display:block;box-sizing:border-box;width:8px;height:8px}.gg-style{position:relative;transform:scale(var(--ggs,1));box-shadow:-3px 3px 0 -1px,3px -3px 0 -1px}.gg-style::after,.gg-style::before{content:"";position:absolute;border:2px solid}.gg-style::before{top:-5px;left:-5px}.gg-style::after{bottom:-5px;right:-5px}.gg-sun{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:24px;background:linear-gradient(to bottom,currentColor 4px,transparent 0)no-repeat 5px -6px/2px 6px,linear-gradient(to bottom,currentColor 4px,transparent 0)no-repeat 5px 14px/2px 6px,linear-gradient(to bottom,currentColor 4px,transparent 0)no-repeat -8px 5px/6px 2px,linear-gradient(to bottom,currentColor 4px,transparent 0)no-repeat 14px 5px/6px 2px;border-radius:100px;box-shadow:inset 0 0 0 2px;border:6px solid transparent}.gg-sun::after,.gg-sun::before{content:"";display:block;box-sizing:border-box;position:absolute;width:24px;height:2px;border-right:4px solid;border-left:4px solid;left:-6px;top:5px}.gg-sun::before{transform:rotate(-45deg)}.gg-sun::after{transform:rotate(45deg)}.gg-support{box-sizing:border-box;position:relative;display:block;width:20px;height:20px;transform:rotate(45deg) scale(var(--ggs,1));border:5px solid transparent;box-shadow:0 0 0 2px,inset 0 0 0 2px;border-radius:40px}.gg-support::after,.gg-support::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-support::before{border-left:9px solid;border-right:9px solid;width:24px;height:2px;left:-7px;top:4px}.gg-support::after{width:2px;height:24px;border-top:9px solid;border-bottom:9px solid;left:4px;top:-7px}.gg-swap-vertical{box-sizing:border-box;position:relative;display:block;transform:rotate(90deg) scale(var(--ggs,1));box-shadow:-2px 2px 0,2px -2px 0;width:6px;height:2px}.gg-swap-vertical::after,.gg-swap-vertical::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent}.gg-swap-vertical::before{border-left:3px solid;top:-4px;right:-4px}.gg-swap-vertical::after{border-right:3px solid;bottom:-4px;left:-4px}.gg-swap{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));box-shadow:-2px 2px 0,2px -2px 0;width:6px;height:2px}.gg-swap::after,.gg-swap::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:0;border-top:3px solid transparent;border-bottom:3px solid transparent}.gg-swap::before{border-left:3px solid;top:-4px;right:-4px}.gg-swap::after{border-right:3px solid;bottom:-4px;left:-4px}.gg-sweden{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:21px;height:16px}.gg-sweden::after,.gg-sweden::before{content:"";display:block;box-sizing:border-box;position:absolute;height:6px;background:currentColor;box-shadow:0 8px 0;top:0}.gg-sweden::before{left:0;width:7px}.gg-sweden::after{width:12px;right:0}.gg-swiss{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border:4px solid}.gg-swiss::after,.gg-swiss::before{content:"";display:block;box-sizing:border-box;position:absolute;width:5px;height:5px;background:currentColor;box-shadow:0 9px 0;top:-2px}.gg-swiss::after{left:-2px}.gg-swiss::before{right:-2px}.gg-sync{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border-radius:40px;border:2px solid;margin:1px;border-left-color:transparent;border-right-color:transparent;width:18px;height:18px}.gg-sync::after,.gg-sync::before{content:"";display:block;box-sizing:border-box;position:absolute;width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;transform:rotate(-45deg)}.gg-sync::before{border-left:6px solid;bottom:-1px;right:-3px}.gg-sync::after{border-right:6px solid;top:-1px;left:-3px}.gg-tab,.gg-tab::before{display:block;box-sizing:border-box}.gg-tab{position:relative;transform:scale(var(--ggs,1));width:20px;height:16px;border:2px solid;border-radius:3px}.gg-tab::before{content:"";position:absolute;width:10px;height:6px;background:currentColor;border-radius:1px;transform:skewX(20deg);top:-2px;right:-1px}.gg-tag,.gg-tag::before{display:block;border:2px solid}.gg-tag{border-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px;box-sizing:border-box;transform:scale(var(--ggs,1));position:relative;width:19px;height:14px}.gg-tag::before{content:"";position:absolute;width:2px;height:2px;box-sizing:content-box;border-radius:100px;right:0;top:2px}.gg-tag::after{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;border-bottom:2px solid;border-right:2px solid;border-bottom-right-radius:4px;transform:rotate(-45deg);top:0;right:-5px}.gg-tally{box-sizing:border-box;position:relative;display:block;transform:skew(-10deg) scale(var(--ggs,1));width:18px;height:20px}.gg-tally::after,.gg-tally::before{content:"";position:absolute;box-sizing:border-box;display:block;width:3px;background:currentColor;border-radius:.5px}.gg-tally::before{height:20px;box-shadow:5px 0 0;left:5px}.gg-tally::after{height:8px;box-shadow:15px 0 0}.gg-tap-double{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:20px;height:22px}.gg-tap-double::after,.gg-tap-double::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:22px}.gg-tap-double::before{width:20px;height:20px;border:6px double transparent;border-top:6px double}.gg-tap-double::after{width:6px;height:10px;border:2px solid transparent;border-bottom-width:5px;box-shadow:0 0 0 2px,inset 0 0 0 2px;left:7px;bottom:2px}.gg-tap-single{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:16px;height:22px}.gg-tap-single::after,.gg-tap-single::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid transparent;border-radius:22px}.gg-tap-single::before{width:16px;height:16px;border-top:2px solid;top:2px}.gg-tap-single::after{width:6px;height:10px;border-bottom-width:5px;box-shadow:0 0 0 2px,inset 0 0 0 2px;left:5px;top:8px}.gg-template{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:6px;border:2px solid;margin-top:-14px}.gg-template::after,.gg-template::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:10px;top:6px}.gg-template::after{border:2px solid;left:-2px}.gg-template::before{border-top:6px double;border-bottom:2px solid;right:-2px}.gg-tennis,.gg-tennis::after,.gg-tennis::before{display:block;box-sizing:border-box;border:2px solid;width:20px;height:20px;border-radius:20px}.gg-tennis{position:relative;transform:scale(var(--ggs,1));overflow:hidden}.gg-tennis::after,.gg-tennis::before{content:"";position:absolute}.gg-tennis::before{left:-11px;top:-11px}.gg-tennis::after{right:-11px;bottom:-11px}.gg-terminal{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:20px;border:2px solid;border-radius:2px}.gg-terminal::after,.gg-terminal::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-terminal::before{border-right:2px solid;border-bottom:2px solid;transform:rotate(-45deg);width:6px;height:6px;top:5px;left:3px}.gg-terminal::after{width:4px;height:2px;background:currentColor;top:10px;left:11px}.gg-terrain{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:22px;height:14px;overflow:hidden}.gg-terrain::after,.gg-terrain::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-terrain::before{width:0;height:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:10px solid;top:4px}.gg-terrain::after{width:6px;height:22px;background:currentColor;transform:rotate(-32deg) skewY(-35deg);left:14px;top:3px}.gg-thermometer{position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px}.gg-thermometer::after,.gg-thermometer::before{content:"";display:block;position:absolute;width:2px;border-radius:22px;transform:rotate(45deg)}.gg-thermometer::before{height:12px;border:2px solid transparent;box-shadow:0 0 0 2px,inset 0 0 0 6px;right:6px;top:1px}.gg-thermometer::after{height:8px;background:currentColor;bottom:0;left:3px}.gg-thermostat{position:relative;display:block;box-sizing:border-box;transform:scale(var(--ggs,1));width:10px;height:24px}.gg-thermostat::after,.gg-thermostat::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid}.gg-thermostat::after{width:12px;height:12px;border-top-color:transparent;bottom:0;border-radius:100px;background:radial-gradient(circle,currentColor 20%,transparent 20%) no-repeat center}.gg-thermostat::before{width:8px;height:16px;border-bottom-color:transparent;left:2px;border-top-left-radius:100px;border-top-right-radius:100px}.gg-tikcode{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;background:linear-gradient(to left,currentColor 10px,transparent 0) no-repeat 10px 0/8px 2px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat 10px 6px/8px 2px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat 10px 10px/2px 8px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat 13px 10px/2px 8px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat 16px 10px/2px 8px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat 16px 0/2px 8px,linear-gradient(to left,currentColor 10px,transparent 0) no-repeat 10px 0/2px 8px}.gg-tikcode::after,.gg-tikcode::before{content:"";position:absolute;display:block;box-sizing:border-box;width:8px;height:8px;border:2px solid}.gg-tikcode::after{bottom:0}.gg-time{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:18px;border-radius:100%;border:2px solid transparent;box-shadow:0 0 0 2px currentColor}.gg-time::after{content:"";display:block;box-sizing:border-box;position:absolute;width:7px;height:7px;border-left:2px solid;border-bottom:2px solid;top:1px;left:5px}.gg-timelapse{box-sizing:border-box;transform:scale(var(--ggs,1));position:relative;display:block;width:22px;height:22px;border:2px solid;border-radius:22px}.gg-timelapse::after,.gg-timelapse::before{content:"";display:block;box-sizing:border-box;position:absolute;width:5px;height:4px;border:7px solid;border-left-color:transparent;border-bottom-color:transparent;border-radius:22px;top:2px;right:2px}.gg-timelapse::before{transform:rotate(45deg)}.gg-timelapse::after{border-top-color:transparent;transform:rotate(85deg)}.gg-timer,.gg-timer::before{border:2px solid;width:18px;height:18px;border-radius:40px}.gg-timer{background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 6px -2px/2px 6px;box-sizing:border-box;transform:scale(var(--ggs,1));position:relative;display:block;border-top-color:transparent}.gg-timer::after,.gg-timer::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-timer::before{border-right-color:transparent;border-left-color:transparent;border-bottom-color:transparent;right:-2px;top:-2px;transform:rotate(45deg)}.gg-timer::after{width:2px;height:6px;background:currentColor;transform:rotate(-50deg);left:4px;bottom:5px;border-radius:100px}.gg-today{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:18px;height:22px;border:2px solid;border-radius:3px}.gg-today::after,.gg-today::before{content:"";display:block;box-sizing:border-box;position:absolute;left:2px;background:currentColor;border-radius:1px}.gg-today::before{bottom:2px;width:10px;height:10px;opacity:.5}.gg-today::after{top:2px;width:6px;height:2px}.gg-toggle-off,.gg-toggle-off::before{display:block;box-sizing:border-box;border-radius:20px}.gg-toggle-off{border:2px solid;position:relative;transform:scale(var(--ggs,1));width:24px;height:14px}.gg-toggle-off::before{content:"";position:absolute;width:6px;height:6px;background:currentColor;top:2px;left:12px}.gg-toggle-on,.gg-toggle-on::before{display:block;box-sizing:border-box;border-radius:20px}.gg-toggle-on{border:2px solid;position:relative;transform:scale(var(--ggs,1));width:24px;height:14px}.gg-toggle-on::before{content:"";position:absolute;width:6px;height:6px;background:currentColor;top:2px;left:2px}.gg-toggle-square-off{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:14px;border:2px solid;border-radius:2px}.gg-toggle-square-off::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;background:currentColor;top:2px;left:12px;border-radius:1px}.gg-toggle-square{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:24px;height:14px;border:2px solid;border-radius:2px}.gg-toggle-square::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;background:currentColor;top:2px;left:2px;border-radius:1px}.gg-toolbar-bottom{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:12px;box-shadow:0 0 0 2px,inset 0 -2px 0;border:2px solid transparent;border-radius:1px}.gg-toolbar-left{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:12px;box-shadow:0 0 0 2px,inset 2px 0 0;border:2px solid transparent;border-radius:1px}.gg-toolbar-right{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:12px;box-shadow:0 0 0 2px,inset -2px 0 0;border:2px solid transparent;border-radius:1px}.gg-toolbar-top{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:18px;height:12px;box-shadow:0 0 0 2px,inset 0 2px 0;border:2px solid transparent;border-radius:1px}.gg-toolbox{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:16px;border:2px solid;border-radius:2px}.gg-toolbox::after,.gg-toolbox::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-toolbox::before{border:2px solid;border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px;left:4px;width:10px;height:4px;top:-5px}.gg-toolbox::after{width:18px;height:2px;border-left:4px solid transparent;border-right:4px solid transparent;box-shadow:0 -2px 0,inset 4px 0 0,inset -4px 0 0;top:4px}.gg-touchpad{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:22px;height:18px}.gg-touchpad::after{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:6px;bottom:-2px;left:8px;background:currentColor;}.gg-touchpad::before{content:"";display:block;box-sizing:border-box;position:absolute;width:20px;height:2px;left:-2px;bottom:3px;background:currentColor;}.gg-track{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:10px;border:2px solid transparent;box-shadow:0 0 0 2px,inset 0 0 0 10px;border-radius:100px}.gg-track::after,.gg-track::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px}.gg-track::before{border-left:4px solid;border-right:4px solid;width:18px;height:2px;left:-6px;top:2px}.gg-track::after{width:2px;height:18px;border-top:4px solid;border-bottom:4px solid;left:2px;top:-6px}.gg-transcript{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:22px;height:18px}.gg-transcript::after,.gg-transcript::before{content:"";display:block;box-sizing:border-box;position:absolute;height:2px;border-radius:3px;background:currentColor;bottom:2px}.gg-transcript::before{width:10px;left:2px;box-shadow:4px -4px 0}.gg-transcript::after{width:3px;right:2px;box-shadow:-11px -4px 0}.gg-trash-empty{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:12px;border:2px solid transparent;box-shadow:0 0 0 2px;border-bottom-left-radius:1px;border-bottom-right-radius:1px;margin-top:4px}.gg-trash-empty::after,.gg-trash-empty::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-trash-empty::after{background:currentColor;border-radius:3px;width:16px;height:2px;top:-4px;left:-5px}.gg-trash-empty::before{width:10px;height:4px;border:2px solid;border-bottom:transparent;border-top-left-radius:2px;border-top-right-radius:2px;top:-7px;left:-2px}.gg-trash{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:12px;border:2px solid transparent;box-shadow:0 0 0 2px,inset -2px 0 0,inset 2px 0 0;border-bottom-left-radius:1px;border-bottom-right-radius:1px;margin-top:4px}.gg-trash::after,.gg-trash::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-trash::after{background:currentColor;border-radius:3px;width:16px;height:2px;top:-4px;left:-5px}.gg-trash::before{width:10px;height:4px;border:2px solid;border-bottom:transparent;border-top-left-radius:2px;border-top-right-radius:2px;top:-7px;left:-2px}.gg-tree{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:20px}.gg-tree::after,.gg-tree::before{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:8px}.gg-tree::before{width:10px;height:16px;border:2px solid}.gg-tree::after{width:2px;height:12px;background:currentColor;left:4px;bottom:0}.gg-trees{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:20px;border-left:4px solid transparent;border-right:3px solid transparent;border-top:10px solid transparent;box-shadow:inset 2px 0 0,inset -2px 0 0}.gg-trees::after,.gg-trees::before{content:"";display:block;position:absolute;box-sizing:border-box;width:10px;height:16px;border:2px solid;border-radius:8px;left:-4px;top:-10px}.gg-trees::after{width:8px;height:12px;top:-6px;left:4px}.gg-trello{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:2px}.gg-trello::after,.gg-trello::before{content:"";display:block;box-sizing:border-box;position:absolute;width:5px;background:currentColor;border-radius:1px;top:2px}.gg-trello::before{left:2px;height:12px}.gg-trello::after{height:8px;right:2px}.gg-trending-down{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:10px;height:8px;border-bottom:2px solid;border-right:2px solid}.gg-trending-down::after,.gg-trending-down::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-trending-down::before{background:currentColor;left:8px;width:10px;height:2px;top:0}.gg-trending-down::after{width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid;top:-3px;right:-14px}.gg-trending{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:10px;height:8px;border-top:2px solid;border-right:2px solid}.gg-trending::after,.gg-trending::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-trending::before{background:currentColor;left:8px;width:10px;height:2px;bottom:0}.gg-trending::after{width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:6px solid;bottom:-3px;right:-14px}.gg-trophy{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:10px;height:12px;border:2px solid;border-bottom-left-radius:100px;border-bottom-right-radius:100px}.gg-trophy::after,.gg-trophy::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-trophy::before{box-shadow:inset 0 0 0 2px,0 2px 0 0;bottom:-4px;width:6px;height:4px;border-left:2px solid transparent;border-right:2px solid transparent;left:0}.gg-trophy::after{width:16px;height:6px;border-left:2px solid;border-right:2px solid;left:-5px;top:0}.gg-tv{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:11px;border:2px solid;border-radius:2px}.gg-tv::after,.gg-tv::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-tv::before{border-left:2px solid;border-bottom:2px solid;border-bottom-left-radius:2px;top:-6px;left:3px;transform:rotate(-45deg);width:6px;height:5px}.gg-tv::after{width:8px;height:1px;background:currentColor;border-radius:10px;bottom:-4px;right:2px}.gg-twilio{display:block;position:relative;box-sizing:border-box;transform:scale(var(--ggs,1));width:24px;height:24px;border-radius:22px;box-shadow:inset 0 0 0 3px}.gg-twilio::after,.gg-twilio::before{content:"";display:block;position:absolute;box-sizing:border-box;background:currentColor;border-radius:6px;width:4px;height:4px;top:7px;box-shadow:0 6px 0}.gg-twilio::before{left:7px}.gg-twilio::after{right:7px}.gg-twitter{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px}.gg-twitter::after,.gg-twitter::before{content:"";display:block;position:absolute;box-sizing:border-box;left:4px}.gg-twitter::before{width:9px;height:14px;border-left:4px solid;border-bottom:4px solid;border-bottom-left-radius:6px;background:linear-gradient(to left,currentColor 12px,transparent 0)no-repeat center 2px/10px 4px;top:4px}.gg-twitter::after{width:4px;height:4px;background:currentColor;border-radius:20px;top:2px;box-shadow:7px 4px 0,7px 12px 0}.gg-ui-kit,.gg-ui-kit::after,.gg-ui-kit::before{display:block;box-sizing:border-box}.gg-ui-kit{position:relative;transform:scale(var(--ggs,1));width:10px;height:16px;border-radius:3px;border:2px solid}.gg-ui-kit::after,.gg-ui-kit::before{content:"";position:absolute;border:2px solid;width:6px;height:12px}.gg-ui-kit::before{border-right:0;border-top-left-radius:3px;border-bottom-left-radius:3px;transform:perspective(10px)rotateY(30deg);left:-8px}.gg-ui-kit::after{border-top-right-radius:3px;border-bottom-right-radius:3px;transform:perspective(10px)rotateY(-30deg);border-left:0;right:-8px}.gg-umbrella{display:block;box-sizing:border-box;transform:scale(var(--ggs,1));position:relative;width:22px;height:22px;background:linear-gradient(to bottom,currentColor 20px,transparent 0)no-repeat center 10px/2px 8px}.gg-umbrella::after,.gg-umbrella::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid}.gg-umbrella::before{width:16px;height:10px;left:3px;border-top-left-radius:12px;border-top-right-radius:12px}.gg-umbrella::after{width:6px;height:5px;border-top:0;border-bottom-left-radius:12px;border-bottom-right-radius:12px;bottom:0;left:6px}.gg-unavailable{box-sizing:border-box;position:relative;display:block;transform:rotate(-45deg) scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:100px}.gg-unavailable::after{content:"";display:block;box-sizing:border-box;position:absolute;border-radius:3px;width:2px;height:18px;background:currentColor;top:-2px;left:6px}.gg-unblock{box-sizing:border-box;position:relative;display:block;transform:rotate(45deg) scale(var(--ggs,1));width:18px;height:18px;border:2px solid;border-radius:100%}.gg-unblock::after,.gg-unblock::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:7px;background:currentColor;border-radius:5px;left:6px}.gg-unblock::before{top:-2px}.gg-unblock::after{bottom:-2px}.gg-undo{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:14px;height:14px;border:2px solid;border-left-color:transparent;border-radius:100px}.gg-undo::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border-top:2px solid;border-left:2px solid;top:-3px;left:-1px;transform:rotate(-68deg)}.gg-unfold{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:20px;height:20px;border-radius:100%;border-bottom:10px solid}.gg-unsplash{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:15px}.gg-unsplash::after,.gg-unsplash::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-unsplash::before{width:16px;height:9px;border:5px solid;border-top:0;bottom:0}.gg-unsplash::after{width:6px;height:4px;background:currentColor;top:0;left:5px}.gg-usb-c{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:6px;border:2px solid transparent;border-radius:100px;box-shadow:0 0 0 2px,inset 0 0 0 10px}.gg-usb,.gg-usb::before{display:block;box-sizing:border-box}.gg-usb{position:relative;width:14px;height:14px;border:2px solid;transform:scale(var(--ggs,1));margin-bottom:-6px;border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gg-usb::before{content:"";position:absolute;width:6px;height:5px;border-left:1px solid transparent;border-right:1px solid transparent;border-top:1px solid transparent;border-bottom:2px solid transparent;box-shadow:0 0 0 2px,inset 5px 4px 0 -4px,inset -5px 4px 0 -4px;top:-7px;left:2px}.gg-user-add{display:block;transform:scale(var(--ggs,1));box-sizing:border-box;width:20px;height:18px;background:linear-gradient(to left,currentColor 8px,transparent 0)no-repeat 14px 6px/6px 2px,linear-gradient(to left,currentColor 8px,transparent 0)no-repeat 16px 4px/2px 6px}.gg-user-add::after,.gg-user-add::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid}.gg-user-add::before{width:8px;height:8px;border-radius:30px;top:0;left:2px}.gg-user-add::after{width:12px;height:9px;border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px;top:9px}.gg-user-list{display:block;transform:scale(var(--ggs,1));box-sizing:border-box;width:20px;height:18px;background:linear-gradient(to left,currentColor 8px,transparent 0)no-repeat 14px 4px/6px 2px,linear-gradient(to left,currentColor 8px,transparent 0)no-repeat 14px 8px/6px 2px,linear-gradient(to left,currentColor 8px,transparent 0)no-repeat 14px 12px/6px 2px}.gg-user-list::after,.gg-user-list::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid}.gg-user-list::before{width:8px;height:8px;border-radius:30px;top:0;left:2px}.gg-user-list::after{width:12px;height:9px;border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px;top:9px}.gg-user-remove{display:block;transform:scale(var(--ggs,1));box-sizing:border-box;width:20px;height:18px;background:linear-gradient(to left,currentColor 8px,transparent 0)no-repeat 14px 6px/6px 2px}.gg-user-remove::after,.gg-user-remove::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid}.gg-user-remove::before{width:8px;height:8px;border-radius:30px;top:0;left:2px}.gg-user-remove::after{width:12px;height:9px;border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px;top:9px}.gg-user{display:block;transform:scale(var(--ggs,1));box-sizing:border-box;width:12px;height:18px}.gg-user::after,.gg-user::before{content:"";display:block;box-sizing:border-box;position:absolute;border:2px solid}.gg-user::before{width:8px;height:8px;border-radius:30px;top:0;left:2px}.gg-user::after{width:12px;height:9px;border-bottom:0;border-top-left-radius:3px;border-top-right-radius:3px;top:9px}.gg-userlane{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:8px;border-radius:20px;border-top-left-radius:0;border-top-right-radius:0;border:4px solid;border-top-color:transparent}.gg-userlane::after,.gg-userlane::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;background:currentColor;top:-12px}.gg-userlane::before{border-radius:20px;left:-4px}.gg-userlane::after{right:-4px}.gg-view-cols{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:20px;height:14px}.gg-view-cols::after{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:12px;top:-2px;left:4px;background:currentColor;box-shadow:6px 0 0}.gg-view-comfortable{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:20px;height:14px}.gg-view-comfortable::after,.gg-view-comfortable::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor}.gg-view-comfortable::after{width:2px;height:8px;bottom:-2px;left:4px}.gg-view-comfortable::before{width:20px;height:2px;left:-2px;top:4px}.gg-view-day{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:20px;height:14px}.gg-view-day::after,.gg-view-day::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:12px;top:-2px;left:7px;background:currentColor}.gg-view-day::before{width:20px;height:2px;left:-2px;top:4px}.gg-view-grid{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:20px;height:14px}.gg-view-grid::after,.gg-view-grid::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:14px;top:-2px;left:4px;background:currentColor;box-shadow:6px 0 0}.gg-view-grid::before{width:20px;height:2px;left:-2px;top:2px;box-shadow:0 4px 0}.gg-view-list{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:20px;height:14px}.gg-view-list::after,.gg-view-list::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:14px;top:-2px;left:3px;background:currentColor}.gg-view-list::before{width:20px;height:2px;left:-2px;top:2px;box-shadow:0 4px 0}.gg-view-month{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:20px;height:14px}.gg-view-month::after,.gg-view-month::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:14px;top:-2px;left:3px;background:currentColor;box-shadow:4px 0 0,8px 0 0}.gg-view-month::before{width:20px;height:2px;left:-2px;top:2px;box-shadow:0 4px 0}.gg-view-split{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));border:2px solid;border-radius:3px;width:20px;height:14px}.gg-view-split::after{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:12px;top:-2px;left:7px;background:currentColor}.gg-vinyl{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:8px;border:3px solid transparent;box-shadow:0 0 0 6px,inset 0 0 0 2px;border-radius:22px}.gg-voicemail-o{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:22px;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 5px 10px/8px 2px;border-radius:30px;border:2px solid}.gg-voicemail-o::after,.gg-voicemail-o::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border:2px solid;border-radius:10px;top:6px}.gg-voicemail-o::before{left:2px}.gg-voicemail-o::after{right:2px}.gg-voicemail-r{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:21px;height:14px;background:linear-gradient(to left,currentColor 10px,transparent 0)no-repeat 5px 6px/7px 2px;border-radius:3px;border:2px solid}.gg-voicemail-r::after,.gg-voicemail-r::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;height:6px;border:2px solid;border-radius:10px;top:2px}.gg-voicemail-r::before{left:2px}.gg-voicemail-r::after{right:2px}.gg-voicemail{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:12px;height:10px;border-bottom:2px solid}.gg-voicemail::after,.gg-voicemail::before{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:10px;border:2px solid;border-radius:10px;top:0;left:-5px}.gg-voicemail::after{left:7px}.gg-volume{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:8px;border:2px solid;border-right:0;-webkit-perspective:12px;perspective:12px;border-top-left-radius:4px;border-bottom-left-radius:4px}.gg-volume::after,.gg-volume::before{content:"";display:block;box-sizing:border-box;position:absolute}.gg-volume::before{left:2px;transform:rotateY(-90deg);width:10px;height:10px;border:2px solid;border-left:0;top:-3px}.gg-volume::after{width:8px;height:16px;border:6px double;border-left:0;border-top-right-radius:100px;border-bottom-right-radius:100px;right:-14px;top:-6px}.gg-webcam{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:8px;height:8px;border:2px solid transparent;box-shadow:0 0 0 2px,inset 0 0 0 2px;border-radius:100px;margin-top:-4px}.gg-webcam::after{content:"";display:block;box-sizing:border-box;position:absolute;width:10px;height:4px;border-right:4px solid transparent;box-shadow:0 2px 0,inset -2px 0 0;bottom:-6px;left:-3px}.gg-website{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:22px;height:18px;border:2px solid;border-radius:3px;box-shadow:0 -1px 0}.gg-website::after,.gg-website::before{content:"";display:block;box-sizing:border-box;position:absolute;width:6px;top:2px}.gg-website::before{background:currentColor;left:2px;box-shadow:0 4px 0,0 8px 0;border-radius:3px;height:2px}.gg-website::after{height:10px;border:2px solid;right:2px;border-radius:1px}.gg-windows{transform:scale(var(--ggs,1))}.gg-windows,.gg-windows::before{display:block;position:relative;box-sizing:border-box;width:17px;height:15px}.gg-windows::before{content:"";position:absolute;width:7px;height:6px;background:currentColor;box-shadow:8px 0 0,8px 7px 0,0 7px 0;transform:perspective(30px) rotateY(-30deg)}.gg-work-alt,.gg-work-alt::after{display:block;box-sizing:border-box;box-shadow:0 0 0 2px}.gg-work-alt{position:relative;transform:scale(var(--ggs,1));width:14px;height:10px;border-radius:1px}.gg-work-alt::after{content:"";position:absolute;width:6px;height:1px;border-top-left-radius:1px;border-top-right-radius:1px;left:4px;top:-3px}.gg-yinyang{box-sizing:border-box;position:relative;display:block;transform:rotate(95deg) scale(var(--ggs,1));width:20px;height:20px;border:2px solid;border-radius:22px}.gg-yinyang::after,.gg-yinyang::before{content:"";display:block;box-sizing:border-box;position:absolute;width:8px;height:8px;border-radius:10px;top:4px}.gg-yinyang::before{border:2px solid;left:0}.gg-yinyang::after{border:2px solid transparent;right:0;box-shadow:inset 0 0 0 4px,0 -3px 0 1px,-2px -4px 0 1px,-8px -5px 0 -1px,-11px -3px 0 -2px,-12px -1px 0 -3px,-6px -6px 0 -1px}.gg-youtube{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:10px;box-shadow:0 0 0 2px;border-radius:15px 15px 15px 15px /45px 45px 45px 45px}.gg-youtube::before{content:"";display:block;box-sizing:border-box;position:absolute;left:7px;top:2px;border-left:4px solid currentColor;border-top:3px solid transparent;border-bottom:3px solid transparent}.gg-zeit{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:0px;height:0px;border-left:9px solid transparent;border-right:9px solid transparent;border-bottom:18px solid currentColor;}.gg-zoom-in{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:100%;background:linear-gradient(to bottom,currentColor 5px,transparent 0)no-repeat 2px 5px/8px 2px;margin-top:-4px}.gg-zoom-in::after,.gg-zoom-in::before{content:"";display:block;box-sizing:border-box;position:absolute;width:2px;height:8px;background:currentColor}.gg-zoom-in::after{transform:rotate(-45deg);border-radius:3px;top:10px;left:12px}.gg-zoom-in::before{top:2px;left:5px}.gg-zoom-out{box-sizing:border-box;position:relative;display:block;transform:scale(var(--ggs,1));width:16px;height:16px;border:2px solid;border-radius:100%;margin-top:-4px}.gg-zoom-out::after,.gg-zoom-out::before{content:"";display:block;box-sizing:border-box;position:absolute;background:currentColor}.gg-zoom-out::after{transform:rotate(-45deg);border-radius:3px;width:2px;height:8px;top:10px;left:12px}.gg-zoom-out::before{width:8px;height:2px;top:5px;left:2px} \ No newline at end of file diff --git a/v1.2/css/loopy.css b/v1.2/css/loopy.css new file mode 100644 index 0000000..253ce18 --- /dev/null +++ b/v1.2/css/loopy.css @@ -0,0 +1,400 @@ +body { + margin: 0; + background: #eeeeee; + + font-family: Helvetica, Arial, sans-serif; + font-weight: normal; + font-size: 20px; + + overflow: hidden; +} + +canvas { + position: absolute; + top: 0; + left: 0; + background: #eeefff; +} + +#simulator { + position: absolute; + top: 0; + left: 0; + width: calc(100% - 300px); + height: 100%; +} + +#simulator[fullscreen=yes] { + width: 100%; +} + +#simulator[cursor=tool-pen] { + cursor: crosshair; +} + +#simulator[cursor=tool-move] { + cursor: grab; +} + +#simulator[cursor=tool-move-grabbed] { + cursor: grabbing; +} + +#simulator[cursor=tool-erase] { + cursor: cell; +} + +#simulator[cursor=tool-text] { + cursor: text; +} + +/********** sidebar **********/ +#sidebar { + position: absolute; + top: 0; + right: 0; + width: 300px; + height: 100%; + background: #dddddd; + z-index: 5; + + font-weight: 100; + font-size: 17px; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#sidebar>div { + margin: 25px; +} + +#sidebar>div>div { + margin-bottom: 20px; +} + +#sidebar[mode=play] { + background: #222222; + color: #777777; +} + +#sidebar .mini_button { + background: #999999; + color: #ffffff; + padding: 3px 5px; + border-radius: 2px; + font-size: 16px; + cursor: pointer; +} + +#sidebar .mini_button:hover { + background: #aaaaaa; +} + +#sidebar[mode=play] .mini_button { + background: #555555; + color: #111111; +} + +#sidebar[mode=play] .mini_button:hover { + background: #666666; +} + +#sidebar a { + color: #777777; +} + +#sidebar a:hover { + color: #999999; +} + +#sidebar hr { + border: none; + border-bottom: 2px solid rgba(150, 150, 150, 0.5); + width: 300px; + position: relative; + left: -25px; + margin: 10px 0; +} + +.component-input { + border: none; + + width: calc(100% - 10px); + height: 22px; + padding: 5px; + + font-size: 20px; + font-weight: 100; +} + +.component-textarea { + border: none; + width: calc(100% - 10px); + height: 100px; + padding: 5px; + font-size: 16px; + font-weight: 100; + resize: vertical; +} + +.component-output { + border: 1px solid #aaaaaa; + width: 100%; + background: #cccccc; + color: #666666; + font-size: 15px; + font-weight: 100; + resize: vertical; +} + +textarea.component-output { + height: 250px; + resize: vertical; +} + +.component-slider { + position: relative; + width: 250px; + height: 52px; +} + +.component-slider-graphic { + position: absolute; + width: 250px; + height: 40px; + cursor: pointer; +} + +.component-slider-pointer { + position: absolute; + top: 42px; + width: 15px; + height: 10px; +} + +.component-label { + margin-bottom: 5px; +} + +.component-button { + width: calc(100% - 20px); + background: #888888; + color: #ffffff; + font-size: 20px; + font-weight: 100; + text-align: center; + padding: 10px; + border-radius: 5px; + + cursor: pointer; +} + +.component-button:hover { + background: #999999; +} + +.component-button[header=yes] { + position: absolute; + top: 0; + left: 0; + width: 280px; + background: #222222; + border-radius: 0px; + color: #888888; +} + +.component-button[header=yes]:hover { + background: #333333; +} + +/********** playbar **********/ + +#playbar { + position: absolute; + bottom: 15px; + left: calc(50% - 275px); + /* 50% - half of (playbar width + sidebar width)*/ + + width: 250px; + height: 75px; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#playbar[fullscreen=yes] { + left: calc(50% - 125px); + /* 50% - half of (playbar width)*/ +} + +#playbar .component-button { + position: absolute; + bottom: 0; + width: 230px; + height: 25px; + background: #444444; + border-radius: 40px; +} + +#playbar .component-button:hover { + background: #555555; +} + +#playbar .play-slider { + width: 190px; + position: relative; + top: -5px; +} + +#playbar .play-slider-element { + --ggs: 0.9; + display: inline-block; + margin: 2px; +} + +.play-button-icon { + display: inline-block; +} + +.play-button-label { + display: inline-block; + position: relative; + padding-left: 3px; +} + +div[big=yes] .play-button-icon { + --ggs: 2.3; +} + +div[big=no] .play-button-icon { + --ggs: 1.0; +} +/********** modal **********/ +#modal-container { + display: none; + position: absolute; + width: 100%; + height: 100%; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#modal-container[show=yes] { + display: block; +} + +#modal-background { + position: absolute; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.8); + z-index: 6; +} + +#modal-body { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + margin: auto; + + width: fit-content; + height: fit-content; + padding: 10px; + background: #ddd; + z-index: 7; +} + +#modal-close { + width: 120px; + font-weight: 100; + color: #777; + cursor: pointer; +} + +#modal-close:hover { + color: #888888; +} + +#modal-content { + margin: 15px; + font-size: 25px; + font-weight: 100; + color: #333333; +} + +#modal iframe { + border: none; +} + +/********** toolbar **********/ +#toolbar[mode=play] { + display: none; +} + +#toolbar { + --ggs: 1.5; + position: absolute; + top: 100px; + left: 8px; + /* (scale*buttonsize + 2*(padding+border))*/ + width: calc(var(--ggs, 1) * 25px + 2 * 5px); + /* (scale*buttonsize + 2*(padding+border)) * buttoncount */ + height: fit-content; + background-color: #ffffff; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +#toolbar>hr { + border: 1px solid #dddddd; +} + +.toolbar-button { + width: calc(var(--ggs, 1) * 25px); + height: calc(var(--ggs, 1) * 25px); + cursor: pointer; + + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + background-color: #ffffff; + + padding: 2px; + border: 3px solid #ffffff; +} + +.toolbar-button[selected=yes] { + background-color: #999999; +} + +.gg-text { + content: "T"; + display: block; + transform: scale(var(--ggs, 1)); + font-size: 20px; + font-family: sans-serif; + font-style: normal; + font-style: normal; + text-align: center; +} + +.gg-text::after { + content: "T"; + display: block; + width: 20px; + height: 20px; + border: 2px dotted; +} \ No newline at end of file diff --git a/v1.2/favicon.png b/v1.2/favicon.png new file mode 100644 index 0000000..a1b03e2 Binary files /dev/null and b/v1.2/favicon.png differ diff --git a/v1.2/img/sliders/color.png b/v1.2/img/sliders/color.png new file mode 100644 index 0000000..d304565 Binary files /dev/null and b/v1.2/img/sliders/color.png differ diff --git a/v1.2/img/sliders/initial.png b/v1.2/img/sliders/initial.png new file mode 100644 index 0000000..0a5cf56 Binary files /dev/null and b/v1.2/img/sliders/initial.png differ diff --git a/v1.2/img/sliders/slider_pointer.png b/v1.2/img/sliders/slider_pointer.png new file mode 100644 index 0000000..697a033 Binary files /dev/null and b/v1.2/img/sliders/slider_pointer.png differ diff --git a/v1.2/img/sliders/strength.png b/v1.2/img/sliders/strength.png new file mode 100644 index 0000000..5ae21fd Binary files /dev/null and b/v1.2/img/sliders/strength.png differ diff --git a/v1.2/index.html b/v1.2/index.html new file mode 100644 index 0000000..c5198b7 --- /dev/null +++ b/v1.2/index.html @@ -0,0 +1,74 @@ + + + + + + LOOPY (v1.2) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/v1.2/js/loopy.js b/v1.2/js/loopy.js new file mode 100644 index 0000000..0f7731d --- /dev/null +++ b/v1.2/js/loopy.js @@ -0,0 +1,536 @@ +class Loopy { + static get #DEFAULT_ANIMATION_SPEED() { return 3; }; + static get #INITIAL_WOBBLE_CONTROLS() { return -1; }; + + #configuration; + #padding = { all: 25, bottom: 110 }; + #fps = 1000 / 30; // 30 FPS + + #wobble = Loopy.#INITIAL_WOBBLE_CONTROLS; + #elements = {}; + + constructor(dom, configuration) { + Loopy.#registerGlobalParameters(); + + _validateAssigned(dom, "Parent dom to build the simulator must be provided in the configuration."); + _validateAssigned(configuration, "Configuration object must be provided."); + + // configuration + this.#configuration = configuration; + Loopy.#initializeConfigurationParameter(this.#configuration, "embedded", false, Loopy.#booleanParser, Loopy.#booleanTypeChecker); + Loopy.#initializeConfigurationParameter(this.#configuration, "ui", true, Loopy.#booleanParser, Loopy.#booleanTypeChecker); + Loopy.#initializeConfigurationParameter(this.#configuration, "autoSignal", true, Loopy.#arrayParser, Array.isArray); + Loopy.#initializeConfigurationParameter(this.#configuration, "animationSpeed", Loopy.#DEFAULT_ANIMATION_SPEED, parseInt, parameter => typeof parameter == "number"); + + // initialize parameters + var offset = { x: 0, y: 0, scale: 1 } + if (this.#configuration.embedded && !this.#configuration.ui) { + this.#padding.bottom = this.#padding.all; + } + + // initialize html elements + this.#createHTMLElements(dom); + + // mouse + this.mouse = new Mouse(this.#elements.simulator, { + offset: offset, + padding: this.#padding, + embedded: this.#configuration.embedded + }); + + // model + this.model = new Model(this.#elements.simulator, this.mouse, { + initialMode: Model.MODE_COMPOSE, + offset: offset, + padding: this.#padding, + embedded: this.#configuration.embedded + }); + + // toolbar, sidebar & playbar + this.toolbar = new Toolbar(this.#elements.toolbar); + this.sidebar = new Sidebar(this.#elements.sidebar); + this.playbar = new Playbar(this.#elements.playbar, this.#createPlaybarConfiguration()); + this.modal = new Modal(this.#elements.modal, this.#createModalConfiguration()); + + this.#registerTextTool(); + this.#registerEraseTool(); + this.#registerMoveTool(); + this.#registerPenTool(); + + subscribe("resize", function () { this.model.center(this.#configuration.embedded) }.bind(this)); + subscribe("export/file", function () { this.#saveToFile() }.bind(this)); + subscribe("import/file", function () { this.#loadFromFile() }.bind(this)); + + subscribe("model/mode/changed", function () { + if (this.model.isPlaying()) { + this.#wobble = 45; + this.playbar.showPage(Playbar.PAEG_ID_PLAY); + this.sidebar.showPage(Sidebar.PAGE_ID_DEFAULT); + this.sidebar.setAttribute("mode", "play"); + this.toolbar.hide(); + this.#elements.simulator.removeAttribute("cursor"); + } else if (this.model.isComposing()) { + this.#wobble = -1; + this.playbar.showPage(Playbar.PAGE_ID_COMPOSE); + this.sidebar.showPage(Sidebar.PAGE_ID_DEFAULT); + this.sidebar.setAttribute("mode", "compose"); + this.toolbar.show(); + this.#elements.simulator.setAttribute("cursor", this.toolbar.currentTool); + } + }.bind(this)); + } + + run() { + setInterval(function () { + this.mouse.update(); + if (this.#wobble >= 0) { // wobble + this.#wobble--; + } + if (!this.modal.open) { + this.model.update(this.#getAnimationConfiguration()); + } + }.bind(this), this.#fps); + + this.#loadFromURL(); // try to load from URL + + if (this.#configuration.embedded) { + // hide compose functionality + this.toolbar.hide(); + this.sidebar.hide(); + if (!this.#configuration.ui) { + this.playbar.hide() + } + + // fullscreen canvas + this.#elements.simulator.setAttribute("fullscreen", "yes"); + this.#elements.playbar.setAttribute("fullscreen", "yes"); + + // autoplay + this.model.setMode(Model.MODE_PLAY); + this.model.autoSignal(this.#configuration.autoSignal); + } else { + // show edit functionality + this.toolbar.show(); + this.sidebar.show(); + this.playbar.show(); + } + + publish("resize"); + + // display the body now + this.#elements.container.setAttribute("style", "opacity:100") + + requestAnimationFrame(this.#draw.bind(this)); + } + + /**********************************************************************/ + // PRIVATE METHODS + /**********************************************************************/ + #createHTMLElements(container) { + this.#elements.container = container; + this.#elements.container.setAttribute("style", "opacity:0") + + // create simulator dom + this.#elements.simulator = document.createElement("div"); + this.#elements.simulator.setAttribute("id", "simulator") + + // create playbar dom + this.#elements.playbar = document.createElement("div"); + this.#elements.playbar.setAttribute("id", "playbar") + + // create sidebar dom + this.#elements.sidebar = document.createElement("div"); + this.#elements.sidebar.setAttribute("id", "sidebar") + + // create toolbar dom + this.#elements.toolbar = document.createElement("div"); + this.#elements.toolbar.setAttribute("id", "toolbar") + + // create toolbar dom + this.#elements.modal = document.createElement("div"); + this.#elements.modal.setAttribute("id", "modal-container") + + this.#elements.container.appendChild(this.#elements.simulator); + this.#elements.container.appendChild(this.#elements.playbar); + this.#elements.container.appendChild(this.#elements.sidebar); + this.#elements.container.appendChild(this.#elements.toolbar); + this.#elements.container.appendChild(this.#elements.modal); + } + + #createModalConfiguration() { + return { + saveToURL: function (action) { return this.#saveToURL(action); }.bind(this), + } + } + + #createPlaybarConfiguration() { + return { + embedded: this.#configuration.embedded, + isComposing: this.model.isComposing.bind(this.model), + isPlaying: this.model.isPlaying.bind(this.model), + play: function () { this.setMode(Model.MODE_PLAY) }.bind(this.model), + compose: function () { this.setMode(Model.MODE_COMPOSE) }.bind(this.model), + getAnimationSpeed: function () { return this.#configuration.animationSpeed }.bind(this), + setAnimationSpeed: function (animationSpeed) { this.#configuration.animationSpeed = animationSpeed }.bind(this), + saveToURL: function (action) { return this.#saveToURL(action); }.bind(this), + } + } + + #draw() { + if (!this.modal.open) { + this.model.draw(this.#getAnimationConfiguration()); + } + requestAnimationFrame(this.#draw.bind(this)); + } + + #getAnimationConfiguration() { + return { + wobble: this.#wobble, + animationSpeed: this.#configuration.animationSpeed + }; + } + + #getEdgeSelectionRadius() { + // radius to use for select + if (this.toolbar.currentTool == Toolbar.TOOL_MOVE || this.toolbar.currentTool != Toolbar.TOOL_PEN) return 40; // selecting, wide radius! + else if (this.toolbar.currentTool == Toolbar.TOOL_ERASE) return 25; // no accidental erase + else return 15; // add text close to edges + } + + #loadFromFile() { + let input = document.createElement('input'); + input.type = 'file'; + input.onchange = e => { + var file = e.target.files[0]; + var reader = new FileReader(); + reader.readAsText(file, 'UTF-8'); + reader.onload = readerEvent => { + var data = readerEvent.target.result; + this.model.deserialize(this.#getAnimationConfiguration(), data); + } + }; + input.click(); + }; + + #loadFromURL() { + var data = _getParameterByName("data"); + if (data) { + this.model.deserialize(this.#getAnimationConfiguration(), data); + } + }; + + #saveToFile() { + var element = document.createElement('a'); + element.setAttribute('href', 'data:text/plain;charset=utf-8,' + this.model.serialize()); + element.setAttribute('download', "model.loopy"); + element.style.display = 'none'; + document.body.appendChild(element); + + element.click(); + + document.body.removeChild(element); + + this.model.dirty = false; + } + + #saveToURL(action) { + this.model.dirty = false; + var data = this.model.serialize(); + + var link = window.location.origin + window.location.pathname + "?"; + link += "data=" + data + + window.history.replaceState(null, null, link); + + if (action == Toolbar.TOOL_EMBED) { + link += "&embedded=1" + } + + return link; + } + + #selectItemToEdit() { + if (!this.model.isComposing()) return true; + + // Did user click on a text ? If so, edit THAT text. + var clickedText = this.model.getTextByCoordinates(this.mouse.x, this.mouse.y, 0); + if (clickedText) { + this.sidebar.edit(clickedText); + return true; + } + + // Did user click on a node ? If so, edit THAT node. + var clickedEdge = this.model.getNodeByCoordinates(this.mouse.x, this.mouse.y, 0); + if (clickedEdge) { + this.sidebar.edit(clickedEdge); + return true; + } + + // Did user click on an edge ? If so, edit THAT edge. + var clickedEdge = this.model.getEdgeByCoordinates(this.mouse.x, this.mouse.y, this.#getEdgeSelectionRadius()); + if (clickedEdge) { + this.sidebar.edit(clickedEdge); + return true; + } + return false; + } + + #registerTextTool() { + // subscriptions + subscribe("mouseclick", function () { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_TEXT) return; + if (this.#selectItemToEdit()) return; + + if (this.sidebar.currentPage.id != Sidebar.PAGE_ID_TEXT) { + var newText = this.model.addText(this.#getAnimationConfiguration(), { + x: this.mouse.x, + y: this.mouse.y + 10, // to make text actually centered + value: "Add your text here" + }); + this.sidebar.edit(newText); + return; + } + this.sidebar.showPage(Sidebar.PAGE_ID_DEFAULT); + }.bind(this)); + } + + #registerEraseTool() { + var erase = function (clicked) { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_ERASE) return; + + if (this.mouse.pressed || clicked) { + var text = this.model.getTextByCoordinates(this.mouse.x, this.mouse.y, 0); + if (text) text.kill(); + + var node = this.model.getNodeByCoordinates(this.mouse.x, this.mouse.y, 0); + if (node) node.kill(); + + var edge = this.model.getEdgeByCoordinates(this.mouse.x, this.mouse.y, this.#getEdgeSelectionRadius()); + if (edge) edge.kill(); + } + }.bind(this); + + subscribe("mousemove", function () { erase(); }.bind(this)); + subscribe("mouseclick", function () { erase(true); }.bind(this)); + } + + #registerMoveTool() { + var dragging, offset = { x: 0, y: 0 }; + // subscriptions + subscribe("mouseclick", function () { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_MOVE) return; + if (this.#selectItemToEdit()) return; + this.sidebar.showPage(Sidebar.PAGE_ID_DEFAULT); + }.bind(this)); + + subscribe("mousedown", function () { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_MOVE) return; + + var text = this.model.getTextByCoordinates(this.mouse.x, this.mouse.y, 0); + if (text) { + dragging = text; + offset.x = this.mouse.x - text.x; + offset.y = this.mouse.y - text.y; + this.sidebar.edit(text); + publish("tool/changed", [Toolbar.TOOL_MOVE, true]) + return; + } + + var node = this.model.getNodeByCoordinates(this.mouse.x, this.mouse.y, 0); + if (node) { + dragging = node; + offset.x = this.mouse.x - node.x; + offset.y = this.mouse.y - node.y; + this.sidebar.edit(node); + publish("tool/changed", [Toolbar.TOOL_MOVE, true]) + return; + } + + var edge = this.model.getEdgeByCoordinates(this.mouse.x, this.mouse.y, this.#getEdgeSelectionRadius()); + if (edge) { + dragging = edge; + offset.x = this.mouse.x - edge.x; + offset.y = this.mouse.y - edge.y; + this.sidebar.edit(edge); + publish("tool/changed", [Toolbar.TOOL_MOVE, true]) + return; + } + + }.bind(this)); + + subscribe("mousemove", function () { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_MOVE) return; + if (dragging) { + dragging.move(this.mouse.x - offset.x, this.mouse.y - offset.y); + + this.model.update(this.#getAnimationConfiguration()); // update to have no visual glitches + + publish("model/changed"); + } + }.bind(this)); + + subscribe("mouseup", function () { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_MOVE) return; + publish("tool/changed", [Toolbar.TOOL_MOVE]) + dragging = null; + offset.x = 0; + offset.y = 0; + }.bind(this)); + } + + #registerPenTool() { + subscribe("mouseclick", function () { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_PEN) return; + this.model.removeStroke(); + if (this.#selectItemToEdit()) return; + this.sidebar.showPage(Sidebar.PAGE_ID_DEFAULT); + }.bind(this)); + + subscribe("mousedown", function () { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_PEN) return; + + this.model.addStroke([this.mouse.x, this.mouse.y]); + this.model.draw(this.#getAnimationConfiguration()); + }.bind(this)); + + subscribe("mousemove", function () { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_PEN) return; + this.model.draw(this.#getAnimationConfiguration()); + }.bind(this)); + + subscribe("mouseup", function () { + if (!this.model.isComposing() || this.toolbar.currentTool != Toolbar.TOOL_PEN) return; + var stroke = this.model.getStroke(); + + if (!stroke || stroke.length < 2) return; + if (!this.mouse.moved) return; + + // detect which item draw + // if started in a node and ended near/in a node, it is an edge else it is a node + var startPoint = stroke[0]; + var sourceNode = this.model.getNodeByCoordinates(startPoint[0], startPoint[1], 0); + if (!sourceNode) sourceNode = this.model.getNodeByCoordinates(startPoint[0], startPoint[1], 20); // try again with buffer + + var endPoint = stroke[stroke.length - 1]; + var targetNode = this.model.getNodeByCoordinates(endPoint[0], endPoint[1], 0); + if (!targetNode) targetNode = this.model.getNodeByCoordinates(endPoint[0], endPoint[1], 40); // try again with buffer + + if (sourceNode && targetNode) { // add edge + var edgeConfiguration = { source: sourceNode, target: targetNode } + if (sourceNode == targetNode) { + // find rotation first by getting average point + var bounds = _getBounds(stroke); + var x = (bounds.left + bounds.right) / 2; + var y = (bounds.top + bounds.bottom) / 2; + var dx = x - sourceNode.x; + var dy = y - sourceNode.y; + var angle = Math.atan2(dy, dx); + + // find arc height. + var translated = _translatePoints(stroke, -sourceNode.x, -sourceNode.y); + var rotated = _rotatePoints(translated, -angle); + bounds = _getBounds(rotated); + + // arc & rotation + edgeConfiguration.rotation = angle * (360 / Math.TAU) + 90; + edgeConfiguration.arc = bounds.right; + + + // if the arc is NOT greated than the radius, don't draw, and otherwise, make sure minimum distance of radius+25) + if (edgeConfiguration.arc < sourceNode.radius) { + edgeConfiguration = null; + this.sidebar.edit(sourceNode); // you were probably trying to edit the node + } else { + var minimum = sourceNode.radius + 25; + if (edgeConfiguration.arc < minimum) edgeConfiguration.arc = minimum; + } + } else { + // find the arc by translating & rotating + var dx = targetNode.x - sourceNode.x; + var dy = targetNode.y - sourceNode.y; + var angle = Math.atan2(dy, dx); + var translated = _translatePoints(stroke, -sourceNode.x, -sourceNode.y); + var rotated = _rotatePoints(translated, -angle); + var bounds = _getBounds(rotated); + + // arc + if (Math.abs(bounds.top) > Math.abs(bounds.bottom)) { + edgeConfiguration.arc = -bounds.top; + } else { + edgeConfiguration.arc = -bounds.bottom; + } + } + + if (edgeConfiguration) { + var newEdge = this.model.addEdge(this.#getAnimationConfiguration(), edgeConfiguration); + this.sidebar.edit(newEdge); + } + } else if (!sourceNode) { // add node + var bounds = _getBounds(stroke); + var x = (bounds.left + bounds.right) / 2; + var y = (bounds.top + bounds.bottom) / 2; + var r = ((bounds.width / 2) + (bounds.height / 2)) / 2; + + if (r > 15) { // stroke cannot be too small + var newNode = this.model.addNode(this.#getAnimationConfiguration(), { + x: x, + y: y + }); + this.sidebar.edit(newNode); + } + } + + this.model.removeStroke(); + }.bind(this)); + } + /**********************************************************************/ + // PRIVATE STATIC METHODS + /**********************************************************************/ + static #arrayParser(parameter) { + if (parameter && (parameter = JSON.parse(parameter)) && Array.isArray(parameter)) { + return parameter; + } + return null; + } + + static #booleanParser(parameter) { + return !!parseInt(parameter); + } + + static #booleanTypeChecker(parameter) { + return typeof parameter == "boolean"; + } + + static #initializeConfigurationParameter(configuration, parameterName, defaultValue, parser, validator) { + var parameter = _getParameterByName(parameterName); + if (parameter) { + configuration[parameterName] = parser(parameter) + } else { + parameter = configuration[parameterName]; + if (parameter !== undefined) { + if (validator(parameter)) return; + configuration[parameterName] = parser(parameter) + } else { + configuration[parameterName] = defaultValue; + } + } + } + + static #registerGlobalParameters(model) { + window.HIGHLIGHT_COLOR = "rgba(193, 220, 255, 0.6)"; + window.onresize = function () { + publish("resize"); + }; + + Math.TAU = Math.PI * 2; + window.isMacLike = navigator.userAgent.indexOf("Mac") != -1 || navigator.userAgent.indexOf("like Mac") != -1 + + window.onbeforeunload = function (e) { + if (window.Loopy && window.loopy.model && window.loopy.model.dirty) { + var dialogText = "Are you sure you want to leave without saving your changes?"; + e.returnValue = dialogText; + return dialogText; + } + }; + } +} \ No newline at end of file diff --git a/v1.2/js/model/edge.js b/v1.2/js/model/edge.js new file mode 100644 index 0000000..2a8461b --- /dev/null +++ b/v1.2/js/model/edge.js @@ -0,0 +1,493 @@ +class Edge extends Item { + static get #MAX_SIGNALS() { return 100; }; + static get #MAX_SIGNALS_PER_EDGE() { return 10; }; + + static DEFAULT_STRENGTH = 1; + + static #allSignals = []; + + #source; #target; #arc = 100; #rotation = 0; #strength = Edge.DEFAULT_STRENGTH; + + #signal = { data: [], speed: 0, size: 40 }; + #listeners = { modelreset: null }; + + /** + * source coordinates: sx, sy + * target coordinates: sx, sy + * target - source different: dx, dy + * label position: lx, ly + */ + #parameters = { sx: 0, sy: 0, tx: 0, ty: 0, dx: 0, dy: 0, r: 0, w: 0, a: 0, a2: 0, h: 0, y: 0, y2: 0, begin: 0, end: 0 }; + #label = { text: "", x: 0, y: 0, circleX: 0, circleY: 0, angle: 0, buffer: 0 }; + #angle = { begin: 0, start: 0, end: 0 }; + #arrow = { a: 0, x: 0, y: 0, angle: 0, buffer: 0, distance: 0, length: 0, beginDistance: 0 }; + + get x() { return this.#label.circleX; } + get y() { return this.#label.circleY; } + get arc() { return this.#arc; } + get source() { return this.#source; } + get target() { return this.#target; } + get signals() { return this.#signal.data; } + get rotation() { return this.#rotation; } + get strength() { return this.#strength; } + + set strength(strength) { return this.#strength = strength; } + + constructor(configuration) { + super(Item.EDGE, configuration); + + _validateAssigned(configuration.source, "Source node 'source' must be provided in configuration."); + _validateAssigned(configuration.target, "Target node 'target' must be provided in configuration."); + + this.#source = configuration.source; + this.#target = configuration.target; + + if (configuration.arc !== undefined) this.#arc = configuration.arc; + if (configuration.rotation !== undefined) this.#rotation = configuration.rotation; + if (configuration.strength !== undefined) this.#strength = configuration.strength; + + this.source.addOutboundEdge(this); + this.target.addInboundEdge(this); + } + + addSignal(signal) { + // if too many overall just return + if (Edge.#allSignals.length > Edge.#MAX_SIGNALS) { + return; + } + + // if too many overall just return + if (this.signals.length > Edge.#MAX_SIGNALS_PER_EDGE) { + return; + } + + // re-create signal + var delta = signal.delta; + + var newSignal = { + delta: delta, + position: 0, + scaleX: Math.abs(delta), + scaleY: delta + }; + + if (signal.age) { + // if expired let it die + if (signal.age <= 0) return; + + newSignal.age = signal.age - 1 + } + + // add to signals, it's a queue + this.signals.unshift(newSignal); + + // add to all signals + Edge.#allSignals.push(newSignal); + }; + + getBoundingBox(context) { + if (this.isLoop()) { + var perpendicular = a - Math.TAU / 4; + var cx = (this.#parameters.sx + Math.cos(perpendicular) * -this.#parameters.y2) / 2; // un-retina (divide to 2) + var cy = (this.#parameters.sy + Math.sin(perpendicular) * -this.#parameters.y2) / 2; // un-retina (divide to 2) + var _radius = this.#parameters.r / 2; // un-retina + return { + left: cx - _radius, + top: cy - _radius, + right: cx + _radius, + bottom: cy + _radius + }; + } + + // THREE POINTS: start, end, and perpendicular with r + var from = { x: this.source.x, y: this.source.y }; + var to = { x: this.target.x, y: this.target.y }; + var mid = { x: (from.x + to.x) / 2, y: (from.y + to.y) / 2 }; + + var perpendicular = this.#parameters.a - Math.TAU / 4; + mid.x += Math.cos(perpendicular) * this.#arc; + mid.y += Math.sin(perpendicular) * this.#arc; + + // TEST ALL POINTS + var left = Infinity; + var top = Infinity; + var right = -Infinity; + var bottom = -Infinity; + var points = [from, to, mid]; + for (var i = 0; i < points.length; i++) { + var point = points[i]; + var x = point.x; + var y = point.y; + if (left > x) left = x; + if (top > y) top = y; + if (right < x) right = x; + if (bottom < y) bottom = y; + } + + return { + left: left, + top: top, + right: right, + bottom: bottom + }; + }; + + draw(context, configuration) { + // width & color + context.lineWidth = 4 * Math.abs(this.#strength) - 2; + context.strokeStyle = "#666666"; + + // translate & rotate + context.save(); + context.translate(this.#parameters.sx, this.#parameters.sy); + context.rotate(this.#parameters.a); + + // highlight selected + if (this.selected) { + context.save(); + context.translate(this.#label.x, this.#label.y); + context.rotate(-this.#parameters.a); + context.beginPath(); + context.arc(0, 5, 60, 0, Math.TAU, false); + context.fillStyle = HIGHLIGHT_COLOR; + context.fill(); + context.restore(); + } + + // arc + context.beginPath(); + if (this.#arc > 0) { + context.arc(this.#parameters.w / 2, this.#parameters.y2, this.#parameters.r, this.#angle.start, this.#parameters.end, false); + } else { + context.arc(this.#parameters.w / 2, this.#parameters.y2, this.#parameters.r, -this.#angle.start, this.#parameters.end, true); + } + + // arrow head + context.save(); + context.translate(this.#arrow.x, this.#arrow.y); + if (this.#arc < 0) context.scale(-1, -1); + context.rotate(this.#arrow.a); + context.moveTo(-this.#arrow.length, -this.#arrow.length); + context.lineTo(0, 0); + context.lineTo(-this.#arrow.length, this.#arrow.length); + context.restore(); + + // draw it + context.stroke(); + + // draw label + context.font = "100 60px sans-serif"; + context.textAlign = "center"; + context.textBaseline = "middle"; + context.save(); + context.translate(this.#label.x, this.#label.y); + context.rotate(-this.#parameters.a); + context.fillStyle = "#999999"; + context.fillText(this.#label.text, 0, 0); + context.restore(); + + // draw signals + this.#drawSignals(context); + + // Restore + context.restore(); + } + + initialize(model, mouse) { + this.#reset(); + + this.#listeners.modelreset = subscribe("model/reset", function () { this.#onModelReset(model) }.bind(this)); + } + + isAssociated(node) { + return this.source == node || this.target == node; + }; + + isLoop() { + return this.source == this.target; + } + + isPointOnLabel(x, y, buffer) { + return _isPointInCircle(x, y, this.#label.circleX, this.#label.circleY, buffer); + }; + + kill() { + unsubscribe("model/reset", this.#listeners.modelreset); + + this.source.removeOutboundEdge(this); + this.target.removeInboundEdge(this); + + publish("kill", [this]); + }; + + move(x, y) { + if (this.isLoop()) { + // just get angle & mag for label + var dx = x - this.source.x; + var dy = y - this.source.y; + var a = Math.atan2(dy, dx); + var mag = Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2)); + var minimumMag = this.source.radius + 25; + mag = Math.max(mag, minimumMag); + + // update edge + this.#arc = mag; + this.#rotation = a * (360 / Math.TAU) + 90; + } else { + // the Arc: whatever label *Y* is, relative to angle & first node's pos + var sx = this.source.x; + var sy = this.source.y; + var tx = this.target.x; + var ty = this.target.y; + + var dx = tx - sx; + var dy = ty - sy; + + var a = Math.atan2(dy, dx); + + // Calculate arc + var points = [[x, y]]; + var translated = _translatePoints(points, -sx, -sy); + var rotated = _rotatePoints(translated, -a); + var newLabelPoint = rotated[0]; + + this.#arc = -newLabelPoint[1]; + } + } + + update(mouse, configuration) { + // Edge case: if arc is EXACTLY zero, whatever, add 0.1 to it. + if (this.#arc == 0) this.#arc = 0.1; + + // retina calculations + this.#parameters.sx = this.source.x * 2; + this.#parameters.sy = this.source.y * 2; + this.#parameters.tx = this.target.x * 2; + this.#parameters.ty = this.target.y * 2; + if (this.isLoop()) { + var rotation = this.rotation; + rotation *= Math.TAU / 360; + this.#parameters.tx += Math.cos(rotation); + this.#parameters.ty += Math.sin(rotation); + } + + this.#parameters.dx = this.#parameters.tx - this.#parameters.sx + this.#parameters.dy = this.#parameters.ty - this.#parameters.sy + this.#parameters.w = Math.sqrt(Math.pow(this.#parameters.dx, 2) + Math.pow(this.#parameters.dy, 2)); + this.#parameters.a = Math.atan2(this.#parameters.dy, this.#parameters.dx); + this.#parameters.h = Math.abs(this.#arc * 2); + + // from: http://www.mathopenref.com/arcradius.html + this.#parameters.r = (this.#parameters.h / 2) + (Math.pow(this.#parameters.w, 2) / (8 * this.#parameters.h)); + this.#parameters.y = this.#parameters.r - this.#parameters.h; // the circle's y-pos is radius - given height. + this.#parameters.a2 = Math.acos((this.#parameters.w / 2) / this.#parameters.r); // angle from x axis, arc-cosine of half-width & radius + + // arrow buffer + this.#arrow.buffer = 15; + this.#arrow.distance = (this.target.radius + this.#arrow.buffer) * 2; + this.#arrow.angle = this.#arrow.distance / this.#parameters.r; // (distance/circumference)*TAU, close enough. + this.#arrow.beginDistance = (this.source.radius + this.#arrow.buffer) * 2; + this.#angle.begin = this.#arrow.beginDistance / this.#parameters.r; + + // arc it + this.#angle.start = this.#parameters.a2 - Math.TAU / 2; + this.#angle.end = -this.#parameters.a2; + if (this.#parameters.h > this.#parameters.r) { + this.#angle.start *= -1; + this.#angle.end *= -1; + } + if (this.#arc > 0) { + this.#parameters.y2 = this.#parameters.y; + this.#parameters.begin = this.#angle.start + this.#angle.begin; + this.#parameters.end = this.#angle.end - this.#arrow.angle; + } else { + this.#parameters.y2 = -this.#parameters.y; + this.#parameters.begin = -this.#angle.start - this.#angle.begin; + this.#parameters.end = -this.#angle.end + this.#arrow.angle; + } + + // arrow head + this.#arrow.length = 10 * 2; + this.#arrow.x = this.#parameters.w / 2 + Math.cos(this.#parameters.end) * this.#parameters.r; + this.#arrow.y = this.#parameters.y2 + Math.sin(this.#parameters.end) * this.#parameters.r; + this.#arrow.a = this.#parameters.end + Math.TAU / 4; + + // My label is... + var dash = "–"; + var s = this.#strength; + if (s >= 3) this.#label.text = "+++"; + else if (s >= 2) this.#label.text = "++"; + else if (s >= 1) this.#label.text = "+"; + else if (s == 0) this.#label.text = "?"; + else if (s >= -1) this.#label.text = dash; // EM dash, not hyphen + else if (s >= -2) this.#label.text = dash + " " + dash; + else this.#label.text = dash + " " + dash + " " + dash; + + // label position + var labelPosition = this.#getPositionAlongArrow(0.5); + this.#label.x = labelPosition.x; + this.#label.y = labelPosition.y; + + // label position, for grabbing purposes + this.#label.circleX = (this.#parameters.sx + Math.cos(this.#parameters.a) * this.#label.x - Math.sin(this.#parameters.a) * this.#label.y) / 2; // un-retina + this.#label.circleY = (this.#parameters.sy + Math.sin(this.#parameters.a) * this.#label.x + Math.cos(this.#parameters.a) * this.#label.y) / 2; // un-retina + + // add offset to label + this.#label.buffer = 18 * 2; // retina + if (this.#arc < 0) this.#label.buffer *= -1; + this.#label.y += this.#label.buffer; + + // update signals + this.#updateSignals(mouse, configuration); + }; + + /**********************************************************************/ + // PRIVATE METHODS + /**********************************************************************/ + #drawSignals = function (context) { + // Draw each one + for (var i = 0; i < this.signals.length; i++) { + // get position to draw at + var signal = this.signals[i]; + var signalPosition = this.#getPositionAlongArrow(signal.position); + var signalX = signalPosition.x; + var signalY = signalPosition.y; + + // Transform + context.save(); + context.translate(signalX, signalY); + context.rotate(-this.#parameters.a); + + // Signal's direction & size + var size = this.#signal.size; + context.scale(signal.scaleX, signal.scaleY); + context.scale(size, size); + + // signal's color, blending + var fromColor = this.source.color; + var toColor = this.target.color; + var blend; + var bStart = 0.4, bEnd = 0.6; + if (signal.position < bStart) { + blend = 0; + } else if (signal.position < bEnd) { + blend = (signal.position - bStart) / (bEnd - bStart); + } else { + blend = 1; + } + var signalColor = _blendColors(fromColor, toColor, blend); + + // Also, tween the scaleY, flipping, IF STRENGTH<0 + if (this.#strength < 0) { + // sin/cos-animate it for niceness. + var flip = Math.cos(blend * Math.PI); // (0,1) -> (1,-1) + context.scale(1, flip); + } + + // Signal's age = alpha. + if (signal.age == 2) { + context.globalAlpha = 0.5; + } else if (signal.age == 1) { + context.globalAlpha = 0.25; + } + + // Draw an arrow + context.beginPath(); + context.moveTo(-2, 0); + context.lineTo(0, -2); + context.lineTo(2, 0); + context.lineTo(1, 0); + context.lineTo(1, 2); + context.lineTo(-1, 2); + context.lineTo(-1, 0); + context.fillStyle = signalColor; + context.fill(); + + // Restore + context.restore(); + } + } + + #getArrowLength() { + var angle; + if (this.isLoop()) { + return this.#parameters.r * Math.TAU - 2 * this.source.radius; + } else { + if (this.#parameters.y < 0) { + // arc's center is above the horizon + if (this.#arc < 0) { // ccw + angle = Math.TAU + this.#parameters.begin - this.#parameters.end; + } else { // cw + angle = Math.TAU + this.#parameters.end - this.#parameters.begin; + } + } else { + // arc's center is below the horizon + angle = Math.abs(this.#parameters.end - this.#parameters.begin); + } + } + return this.#parameters.r * angle; + }; + + #getPositionAlongArrow(parameter) { + parameter = -0.05 + parameter * 1.1; // (0,1) --> (-0.05, 1.05) + + // if the arc's circle is actually BELOW the line + var begin2 = this.#parameters.begin; + if (this.#parameters.y < 0) { // DON'T KNOW WHY THIS WORKS, BUT IT DOES. + if (begin2 > 0) { + begin2 -= Math.TAU; + } else { + begin2 += Math.TAU; + } + } + + // get angle + var angle = begin2 + (this.#parameters.end - begin2) * parameter; + + // return x & y + return { + x: this.#parameters.w / 2 + Math.cos(angle) * this.#parameters.r, + y: this.#parameters.y2 + Math.sin(angle) * this.#parameters.r + }; + }; + + #removeSignal(signal) { + this.signals.splice(this.signals.indexOf(signal), 1); + Edge.#allSignals.splice(Edge.#allSignals.indexOf(signal), 1); + }; + + #reset() { + Edge.#allSignals = []; + this.#signal.data = []; + } + + #updateSignals(mouse, configuration) { + var speed = Math.pow(2, configuration.animationSpeed); + this.#signal.speed = speed / this.#getArrowLength(); + + // Move all signals along + for (var i = 0; i < this.signals.length; i++) { + var signal = this.signals[i]; + signal.position += this.#signal.speed; + } + + // If any signals reach >=1, pass 'em along + var lastSignal = this.signals[this.signals.length - 1]; + while (lastSignal && lastSignal.position >= 1) { + + // Actually pass it along + lastSignal.delta *= this.#strength; // flip at the end only + this.target.takeSignal(lastSignal); + + // pop it, move on down + this.#removeSignal(lastSignal); + lastSignal = this.signals[this.signals.length - 1]; + } + } + /**********************************************************************/ + // EVENT METHODS + /**********************************************************************/ + #onModelReset(model) { + this.#reset(); + } +} \ No newline at end of file diff --git a/v1.2/js/model/item.js b/v1.2/js/model/item.js new file mode 100644 index 0000000..6dda96a --- /dev/null +++ b/v1.2/js/model/item.js @@ -0,0 +1,27 @@ +class Item { + static get TEXT() { return "TEXT"; }; + static get NODE() { return "NODE"; }; + static get EDGE() { return "EDGE"; }; + + #type + #selected + + get type() { return this.#type; } + get selected() { return this.#selected; } + + set selected(selected) { this.#selected = selected; } + + constructor(type, configuration) { + _validateAssigned(type, "Type must be provided."); + _validateAssigned(configuration, "Configuration object must be provided."); + + this.#type = type; + this.#selected = false; + } + + initialize(model, mouse) { _throwErrorMessage("Not implemented yet!") } + draw(context, wobbleControls) { _throwErrorMessage("Not implemented yet!") } + move(x, y) { _throwErrorMessage("Not implemented yet!") }; + kill() { _throwErrorMessage("Not implemented yet!") }; + update(mouse, configuration) { _throwErrorMessage("Not implemented yet!") } +} \ No newline at end of file diff --git a/v1.2/js/model/model.js b/v1.2/js/model/model.js new file mode 100644 index 0000000..2cade38 --- /dev/null +++ b/v1.2/js/model/model.js @@ -0,0 +1,496 @@ +class Model { + static get MODE_COMPOSE() { return 0; }; + static get MODE_PLAY() { return 1; }; + + #texts = []; + #nodes = []; + #edges = []; + #stroke = []; + + #dom; + #canvas; + #context; + #embedded; + #mode; + #mouse; + #padding; + #offset; + + #dirty = false; + #updated = false; + #drawCountdownFull = 60; // two-second buffer + #drawCountdown = this.#drawCountdownFull; + + get dirty() { return this.#dirty; } + get embedded() { return this.#embedded; } + + set dirty(dirty) { return this.#dirty = dirty; } + + constructor(dom, mouse, configuration) { + _validateAssigned(dom, "Model DOM must be provided."); + _validateAssigned(mouse, "Mouse must be provided."); + _validateAssigned(configuration, "Configuration object must be provided."); + _validateAssigned(configuration.offset, "Offset information must be present in the configuration."); + _validateAssigned(configuration.padding, "Padding information must be present in the configuration."); + _validateTrue(configuration.initialMode === Model.MODE_COMPOSE || configuration.initialMode === Model.MODE_PLAY, "Initial mode must be present in the configuration."); + _validateTrue(configuration.embedded !== undefined, "Embedded mode information must be present in the configuration."); + + this.#dom = dom + this.#mouse = mouse + + this.#mode = configuration.initialMode + this.#embedded = configuration.embedded; + + this.#offset = configuration.offset; + this.#padding = configuration.padding; + + this.#canvas = _createCanvas(this.#dom); + this.#context = this.#canvas.getContext("2d"); + + subscribe("model/reset", function () { this.#drawCountdown = this.#drawCountdownFull; }.bind(this)); + subscribe("mousemove", function () { this.#drawCountdown = this.#drawCountdownFull; }.bind(this)); + subscribe("mousedown", function () { this.#drawCountdown = this.#drawCountdownFull; }.bind(this)); + subscribe("resize", function () { this.#drawCountdown = this.#drawCountdownFull; }.bind(this)); + subscribe("kill", function (item) { this.#removeItem(item) }.bind(this)); + subscribe("model/changed", function (source) { + if (this.isComposing()) this.#drawCountdown = this.#drawCountdownFull; + this.dirty = source == "stroke"; + }.bind(this)); + subscribe("tool/changed", function (tool, grabbed) { + var postfix = grabbed ? "-grabbed" : ""; + this.#dom.setAttribute("cursor", tool + postfix); + this.removeStroke(); + }.bind(this)); + } + + autoSignal(signal) { + if (signal && Array.isArray(signal) && signal.length == 2) { + var node = Node.getNode(signal[0]); + if (node) { + var direction = signal[1] && signal[1] > 0 ? 1 : -1; + node.takeSignal({ delta: direction * Node.DEFAULT_SIGNAL_DELTA_MULTIPLIER }); + } + } + } + + center(scale) { + if (this.#nodes.length == 0 && this.#texts.length == 0) return; + + var bounds = this.getBounds(); + var cx = (bounds.left + bounds.right) / 2; + var cy = (bounds.top + bounds.bottom) / 2; + + if (scale) { + var fitWidth = this.#dom.clientWidth - (2 * this.#padding.all); + var fitHeight = this.#dom.clientHeight - this.#padding.bottom - this.#padding.all; + + this.#offset.x = (this.#padding.all + fitWidth) / 2 - cx; + this.#offset.y = (this.#padding.all + fitHeight) / 2 - cy; + + var w = bounds.right - bounds.left; + var h = bounds.bottom - bounds.top; + var modelRatio = w / h; + var screenRatio = fitWidth / fitHeight; + + // wider or taller than the screen ? wider : taller + this.#offset.scale = modelRatio > screenRatio ? fitWidth / w : fitHeight / h; + } else { + var offsetX = (this.#dom.clientWidth + this.#padding.all) / 2 - cx; + var offsetY = (this.#dom.clientHeight - this.#padding.bottom) / 2 - cy; + + // move all nodes + for (var i = 0; i < this.#nodes.length; i++) { + var node = this.#nodes[i]; + node.x += offsetX; + node.y += offsetY; + } + + // move all texts + for (var i = 0; i < this.#texts.length; i++) { + var text = this.#texts[i]; + text.x += offsetX; + text.y += offsetY; + } + } + }; + + clear() { + while (this.#nodes.length > 0) { + this.#nodes[0].kill(); + } + + while (this.#texts.length > 0) { + this.#texts[0].kill(); + } + }; + + deserialize(animationConfiguration, data) { + this.clear(); + + var data = JSON.parse(data); + + var nodes = data[0]; + var edges = data[1]; + var texts = data[2]; + + // nodes + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + this.addNode(animationConfiguration, { + id: node[0], + x: node[1], + y: node[2], + initialValue: node[3], + label: decodeURIComponent(node[4]), + hue: node[5] + }); + } + + // edges + for (var i = 0; i < edges.length; i++) { + var edge = edges[i]; + this.addEdge(animationConfiguration, { + source: Node.getNode(edge[0]), + target: Node.getNode(edge[1]), + arc: edge[2], + strength: edge[3], + rotation: edge[4] + }); + } + + // texts + for (var i = 0; i < texts.length; i++) { + var text = texts[i]; + this.addText(animationConfiguration, { + x: text[0], + y: text[1], + value: decodeURIComponent(text[2]) + }); + } + + this.dirty = false; + }; + + draw(configuration) { + if (this.#mouse.pressed && this.#stroke.length > 0) { // stroke + var lastPoint = this.#stroke[this.#stroke.length - 1]; + + // style + this.#context.strokeStyle = "#ccc"; + this.#context.lineWidth = 5; + this.#context.lineCap = "round"; + + // draw line from last to current + this.#context.beginPath(); + this.#context.moveTo(lastPoint[0] * 2, lastPoint[1] * 2); + this.#context.lineTo(this.#mouse.x * 2, this.#mouse.y * 2); + this.#context.stroke(); + + // update last point + this.#stroke.push([this.#mouse.x, this.#mouse.y]); + + return; + } + + // draw model only if arrow-signals are moving + for (var i = 0; i < this.#edges.length; i++) { + if (this.#edges[i].signals.length > 0) { + this.#drawCountdown = this.#drawCountdownFull; + break; + } + } + + this.#drawCountdown--; + if (this.#drawCountdown <= 0) return; + + // also only draw if updated + if (!this.#updated) return; + this.#updated = false; + + // clear & save + this.#context.clearRect(0, 0, this.#canvas.width, this.#canvas.height); + this.#context.save(); + + // translate to center, (translate, scale, translate) to expand to size + var CW = this.#dom.clientWidth - (2 * this.#padding.all); + var CH = this.#dom.clientHeight - this.#padding.bottom - this.#padding.all; + var tx = this.#offset.x * 2; + var ty = this.#offset.y * 2; + var s = this.#offset.scale + + tx -= CW + this.#padding.all; + ty -= CH + this.#padding.all; + tx = s * tx; + ty = s * ty; + tx += CW + this.#padding.all; + ty += CH + this.#padding.all; + + if (this.#embedded) { // dunno why but this is needed + tx += this.#padding.all; + ty += this.#padding.all; + } + + this.#context.setTransform(s, 0, 0, s, tx, ty); + + // draw all + for (var i = 0; i < this.#texts.length; i++) this.#texts[i].draw(this.#context, configuration); + for (var i = 0; i < this.#edges.length; i++) this.#edges[i].draw(this.#context, configuration); + for (var i = 0; i < this.#nodes.length; i++) this.#nodes[i].draw(this.#context, configuration); + + // restore + this.#context.restore(); + }; + + getBounds() { + if (this.#nodes.length == 0 && this.#texts.length == 0) return; + + // get bounds of all objects + var left = Infinity; + var top = Infinity; + var right = -Infinity; + var bottom = -Infinity; + + var processItems = function (items) { + for (var i = 0; i < items.length; i++) { + var item = items[i]; + var bounds = item.getBoundingBox(this.#context); + if (left > bounds.left) left = bounds.left; + if (top > bounds.top) top = bounds.top; + if (right < bounds.right) right = bounds.right; + if (bottom < bounds.bottom) bottom = bounds.bottom; + } + }.bind(this); + + processItems(this.#nodes); + processItems(this.#edges); + processItems(this.#texts); + + return { + left: left, + top: top, + right: right, + bottom: bottom + }; + + }; + + isComposing() { + return this.#mode == Model.MODE_COMPOSE; + } + + isPlaying() { + return this.#mode == Model.MODE_PLAY; + } + + serialize() { + var data = []; // 0: nodes, 1: edges, 2: labels, 3: UID + + // nodes + var nodes = []; + for (var i = 0; i < this.#nodes.length; i++) { + var node = this.#nodes[i]; + + // 0: id, 1: x, 2: y, 3: initialValue, 4: label, 5: hue + nodes.push([ + node.id, + Math.round(node.x), + Math.round(node.y), + node.initialValue, + encodeURIComponent(encodeURIComponent(node.label)), + node.hue + ]); + } + + // edges + var edges = []; + for (var i = 0; i < this.#edges.length; i++) { + var edge = this.#edges[i]; + + // 0: from, 1: to, 2: arc, 3: stregth, 4: rotation + edges.push([ + edge.source.id, + edge.target.id, + Math.round(edge.arc), + edge.strength, + edge.isLoop() ? Math.round(edge.rotation) : null + ]); + } + + // Labels + var texts = []; + for (var i = 0; i < this.#texts.length; i++) { + var text = this.#texts[i]; + + // 0: x, 1: y, 2: value + texts.push([ + Math.round(text.x), + Math.round(text.y), + encodeURIComponent(encodeURIComponent(text.value)) + ]); + } + + data.push(nodes); + data.push(edges); + data.push(texts); + + // only uri encode quotes, also replace the last character + var dataString = JSON.stringify(data); + dataString = dataString.replace(/"/gi, "%22"); + dataString = dataString.substring(0, dataString.length - 1) + "%5D"; + return dataString; + }; + + setMode(mode) { + this.#mode = mode; + if (this.isComposing()) { + publish("model/reset"); + this.#drawCountdown = this.#drawCountdownFull * 2; + } else { + this.#drawCountdown = this.#drawCountdownFull; + } + + publish("model/mode/changed"); + } + + update(configuration) { + _configureProperties(configuration, configuration, { + isPlaying: this.isPlaying() + }); + + for (var i = 0; i < this.#texts.length; i++) { + this.#texts[i].update(this.#mouse, configuration); + } + + for (var i = 0; i < this.#edges.length; i++) { + this.#edges[i].update(this.#mouse, configuration); + } + + for (var i = 0; i < this.#nodes.length; i++) { + this.#nodes[i].update(this.#mouse, configuration); + } + + this.#updated = true; + }; + //**********************************************************************/ + // ITEM METHODS + /**********************************************************************/ + addEdge(animationConfiguraiton, edgeConfiguration) { + var edge = new Edge(edgeConfiguration); + edge.initialize(this, this.#mouse); + + this.#edges.push(edge); + + publish("model/changed"); + + return edge; + }; + + addNode(animationConfiguraiton, nodeConfiguration) { + var node = new Node(nodeConfiguration); + node.initialize(this, this.#mouse); + + this.#nodes.push(node) + this.update(animationConfiguraiton); + + publish("model/changed"); + + return node; + } + + addStroke(stroke) { + this.#stroke.push(stroke) + + publish("model/changed"); + } + + addText(animationConfiguraiton, textConfiguration) { + var text = new Text(textConfiguration); + text.initialize(this, this.#mouse); + + this.#texts.push(text) + this.update(animationConfiguraiton); + + publish("model/changed"); + + return text; + }; + + getStroke() { + return this.#stroke; + }; + + getEdgeByCoordinates(x, y, buffer) { + for (var i = this.#edges.length - 1; i >= 0; i--) { // top-down + var edge = this.#edges[i]; + if (edge.isPointOnLabel(x, y, buffer)) return edge; + } + return null; + }; + + getEdgesByStartNode(startNode) { + return this.#edges.filter(function (edge) { + return (edge.from === startNode); + }); + }; + + getNodeByCoordinates(x, y, buffer) { + for (var i = this.#nodes.length - 1; i >= 0; i--) { // top-down + var node = this.#nodes[i]; + if (node.isPointInNode(this.#context, x, y, buffer)) return node; + } + return null; + }; + + getTextByCoordinates(x, y, buffer) { + for (var i = this.#texts.length - 1; i >= 0; i--) { // top-down + var text = this.#texts[i]; + if (text.isPointInText(this.#context, x, y)) return text; + } + return null; + }; + + removeEdge(edge) { + this.#edges.splice(this.#edges.indexOf(edge), 1); + + publish("model/changed"); + }; + + removeNode(node) { + this.#nodes.splice(this.#nodes.indexOf(node), 1); + + // Remove all associated TO and FROM edges + for (var i = 0; i < this.#edges.length; i++) { + var edge = this.#edges[i]; + if (edge.isAssociated(node)) { + edge.kill(); + i--; // move index back, because it's been killed + } + } + publish("model/changed"); + }; + + removeStroke() { + this.#stroke = []; + + publish("model/changed", [true]); + } + + removeText(text) { + this.#texts.splice(this.#texts.indexOf(text), 1); + + publish("model/changed"); + }; + + /**********************************************************************/ + // PRIVATE METHODS + /**********************************************************************/ + #removeItem(item) { + if (item.type == Item.TEXT) { + this.removeText(item); + } else if (item.type == Item.NODE) { + this.removeNode(item); + } else if (item.type == Item.EDGE) { + this.removeEdge(item); + } + } +} \ No newline at end of file diff --git a/v1.2/js/model/node.js b/v1.2/js/model/node.js new file mode 100644 index 0000000..ebe8165 --- /dev/null +++ b/v1.2/js/model/node.js @@ -0,0 +1,310 @@ +class Node extends Item { + static DEFAULT_SIGNAL_DELTA_MULTIPLIER = 0.33; + static DEFAULT_HUE = 0; + static #ID_COUNTER = 0; + + static get #DEFAULT_LABEL() { return "?"; } + static get #DEFAULT_RADIUS() { return 60; }; + static get #DEFAULT_VALUE() { return 0.5; } + static get #COLORS() { + return { + 0: "#EA3E3E", // red + 1: "#EA9D51", // orange + 2: "#FEEE43", // yellow + 3: "#BFEE3F", // green + 4: "#7FD4FF", // blue + 5: "#A97FFF" // purple + }; + } + static #nodes = {}; + static getNode(id) { return Node.#nodes[id]; } + + #id; #x; #y; + #radius = Node.#DEFAULT_RADIUS; + #label = Node.#DEFAULT_LABEL; + #hue = Node.DEFAULT_HUE; + #initialValue = Node.#DEFAULT_VALUE; + + #controls = { visible: false, alpha: 0, direction: 0, selected: false, pressed: false } + #offset = { main: 0, goTo: 0, vel: 0, acc: 0, damp: 0, hookes: 0 } + #listeners = { modelreset: null, mousedown: null, mousemove: null, mouseup: null } + #edges = { inbound: [], outbound: [] } + + #currentValue; + #circleRadius; + + get id() { return this.#id; } + get x() { return this.#x; } + get y() { return this.#y; } + get radius() { return this.#radius; } + get label() { return this.#label; } + get hue() { return this.#hue; } + get initialValue() { return this.#initialValue; } + get color() { return Node.#COLORS[this.#hue]; } + + set x(x) { this.#x = x; } + set y(y) { this.#y = y; } + set radius(radius) { this.#radius = radius; } + set label(label) { this.#label = label; } + set hue(hue) { this.#hue = hue; } + set initialValue(initialValue) { this.#initialValue = initialValue; } + + constructor(configuration) { + super(Item.NODE, configuration); + + _validateTrue(configuration.x && configuration.x >= 0, "X axis coordinate 'x' must be provided in configuration as a non-negative number."); + _validateTrue(configuration.y && configuration.y >= 0, "Y axis coordinate 'y' must be provided in configuration as a non-negative number."); + + this.x = configuration.x; + this.y = configuration.y; + + if (configuration.radius !== undefined) this.#radius = configuration.radius; + if (configuration.label !== undefined) this.#label = configuration.label; + if (configuration.hue !== undefined) this.#hue = configuration.hue; + if (configuration.initialValue !== undefined) this.#initialValue = configuration.initialValue; + + this.#reset(); + + this.#id = this.generateId(configuration.id); + } + + addInboundEdge(edge) { + this.#edges.inbound.push(edge); + } + + addOutboundEdge(edge) { + this.#edges.outbound.push(edge); + } + + getBoundingBox(context) { + return { + left: this.x - this.radius, + top: this.y - this.radius, + right: this.x + this.radius, + bottom: this.y + this.radius + }; + }; + + draw(context, configuration) { + var x = this.x * 2; + var y = this.y * 2; + var r = this.radius * 2; + var color = Node.#COLORS[this.hue]; + + context.save(); + context.translate(x, y + this.#offset.main); + + // highlight selected + if (this.selected) { + context.beginPath(); + context.arc(0, 0, r + 40, 0, Math.TAU, false); + context.fillStyle = HIGHLIGHT_COLOR; + context.fill(); + } + + // white-gray bubble with colored border + context.beginPath(); + context.arc(0, 0, r - 2, 0, Math.TAU, false); + context.fillStyle = "#ffffff"; + context.fill(); + context.lineWidth = 6; + context.strokeStyle = color; + context.stroke(); + + // radius is inverse tangent (in radians) (atan) of value + var _r = Math.atan(this.#currentValue * 5); + _r = _r / (Math.PI / 2); + _r = (_r + 1) / 2; + + // INFINITE RANGE FOR RADIUS + // linear from 0 to 1, asymptotic otherwise. + var _value; + if (this.#currentValue >= 0 && this.#currentValue <= 1) { + // (0,1) -> (0.1, 0.9) + _value = 0.1 + 0.8 * this.#currentValue; + } else { + if (this.#currentValue < 0) { + // asymptotically approach 0, starting at 0.1 + _value = (1 / (Math.abs(this.#currentValue) + 1)) * 0.1; + } + if (this.#currentValue > 1) { + // asymptotically approach 1, starting at 0.9 + _value = 1 - (1 / this.#currentValue) * 0.1; + } + } + var _circleRadiusGoto = r * _value; // radius + this.#circleRadius = this.#circleRadius * 0.8 + _circleRadiusGoto * 0.2; + + // colored bubble + context.beginPath(); + context.arc(0, 0, this.#circleRadius, 0, Math.TAU, false); + context.fillStyle = color; + context.fill(); + + // label + var fontsize = 40; + context.font = "normal " + fontsize + "px sans-serif"; + context.textAlign = "center"; + context.textBaseline = "middle"; + context.fillStyle = "#000"; + var width = context.measureText(this.#label).width; + while (width > r * 2 - 30) { // -30 for buffer. HACK: HARD-CODED. + fontsize -= 1; + context.font = "normal " + fontsize + "px sans-serif"; + width = context.measureText(this.#label).width; + } + context.fillText(this.#label, 0, 0); + + // WOBBLE CONTROLS + var cl = 40; + var cy = 0; + if (configuration.wobble > 0) { + var wobble = configuration.wobble * (Math.TAU / 30); + cy = Math.abs(Math.sin(wobble)) * 10; + } + + // controls + context.globalAlpha = this.#controls.alpha; + context.strokeStyle = "rgba(0,0,0,0.8)"; + // top arrow + context.beginPath(); + context.moveTo(-cl, -cy - cl); + context.lineTo(0, -cy - cl * 2); + context.lineTo(cl, -cy - cl); + context.lineWidth = (this.#controls.direction > 0) ? 10 : 3; + context.stroke(); + // bottom arrow + context.beginPath(); + context.moveTo(-cl, cy + cl); + context.lineTo(0, cy + cl * 2); + context.lineTo(cl, cy + cl); + context.lineWidth = (this.#controls.direction < 0) ? 10 : 3; + context.stroke(); + + // restore + context.restore(); + } + + initialize(model, mouse) { + this.#reset(); + this.#circleRadius = 0; + + this.#listeners.modelreset = subscribe("model/reset", function () { this.#onModelReset(model) }.bind(this)); + this.#listeners.mousedown = subscribe("mousedown", function () { this.#onMouseDown(model, mouse) }.bind(this)); + this.#listeners.mousemove = subscribe("mousemove", function () { this.#onMouseMove(model, mouse) }.bind(this)); + this.#listeners.mouseup = subscribe("mouseup", function () { this.#onMouseUp(model, mouse) }.bind(this)); + } + + isPointInNode(context, x, y, buffer) { + return _isPointInCircle(x, y, this.x, this.y, this.radius + (buffer || 0)); + }; + + kill() { + unsubscribe("model/reset", this.#listeners.modelreset); + unsubscribe("mousedown", this.#listeners.mousedown); + unsubscribe("mousemove", this.#listeners.mousemove); + unsubscribe("mouseup", this.#listeners.mouseup); + + delete Node.#nodes[this.id]; + + publish("kill", [this]); + }; + + move(x, y) { + this.x = x; + this.y = y; + } + + removeInboundEdge(edge) { + this.#edges.inbound.splice(this.#edges.inbound.indexOf(edge), 1); + } + + removeOutboundEdge(edge) { + this.#edges.outbound.splice(this.#edges.outbound.indexOf(edge), 1); + } + + takeSignal(signal) { + this.#currentValue += signal.delta; + this.#offset.vel -= 6 * (signal.delta / Math.abs(signal.delta)); + + this.#sendSignal(signal); + }; + + update(mouse, configuration) { + if (!configuration.isPlaying) { + this.#reset(); + } + + // Cursor! + if (this.#controls.selected) mouse.showCursor("pointer"); + + // Visually & vertically bump the node + var gotoAlpha = (this.#controls.visible) ? 1 : 0; + this.#controls.alpha = this.#controls.alpha * 0.5 + gotoAlpha * 0.5; + if (configuration.isPlaying && this.#controls.pressed) { + this.#offset.goTo = -this.#controls.direction * 20; // by 20 pixels + } else { + this.#offset.goTo = 0; + } + this.#offset.main += this.#offset.vel; + if (this.#offset.main > 40) this.#offset.main = 40 + if (this.#offset.main < -40) this.#offset.main = -40; + this.#offset.vel += this.#offset.acc; + this.#offset.vel *= this.#offset.damp; + this.#offset.acc = (this.#offset.goTo - this.#offset.main) * this.#offset.hookes; + }; + /**********************************************************************/ + // PRIVATE METHODS + /**********************************************************************/ + #reset() { + this.#currentValue = this.#initialValue; + } + + #sendSignal(signal) { + var edges = this.#edges.outbound; + for (var i = 0; i < edges.length; i++) { + edges[i].addSignal(signal); + } + }; + + generateId(id) { + if (id !== undefined) { + _validateTrue(!Node.#nodes[id], "ID is already in use!"); + } else { + do { id = Node.#ID_COUNTER++; } while (Node.#nodes[id]); + } + + Node.#nodes[id] = this; + return id; + } + + /**********************************************************************/ + // EVENT METHODS + /**********************************************************************/ + #onModelReset(model) { + this.#reset(); + } + #onMouseDown(model, mouse) { + if (!model.isPlaying()) return; + + this.#controls.pressed = this.#controls.selected; + if (this.#controls.pressed) { + var delta = this.#controls.direction * Node.DEFAULT_SIGNAL_DELTA_MULTIPLIER; + this.#currentValue += delta; + + this.#sendSignal({ delta: delta }); + } + } + #onMouseMove(model, mouse) { + if (!model.isPlaying()) return; + + this.#controls.selected = this.isPointInNode(model.context, mouse.x, mouse.y); + this.#controls.visible = this.#controls.selected; + this.#controls.direction = this.#controls.selected ? (mouse.y < this.y) ? 1 : -1 : 0; + } + #onMouseUp(model, mouse) { + if (!model.isPlaying()) return; + + this.#controls.pressed = false; + } +} \ No newline at end of file diff --git a/v1.2/js/model/text.js b/v1.2/js/model/text.js new file mode 100644 index 0000000..cc6974a --- /dev/null +++ b/v1.2/js/model/text.js @@ -0,0 +1,118 @@ +class Text extends Item { + static get FONT_SIZE() { return "40"; }; + + #x; + #y; + #value; + + get x() { return this.#x; } + get y() { return this.#y; } + get value() { return this.#value; } + + set x(x) { this.#x = x; } + set y(y) { this.#y = y; } + set value(value) { this.#value = value; } + + constructor(configuration) { + super(Item.TEXT, configuration); + + _validateTrue(configuration.x && configuration.x >= 0, "X axis coordinate 'x' must be provided in configuration as a non-negative number."); + _validateTrue(configuration.y && configuration.y >= 0, "Y axis coordinate 'y' must be provided in configuration as a non-negative number."); + _validateAssigned(configuration.value, "Initial text value must be present in the configuration."); + + this.#x = configuration.x; + this.#y = configuration.y; + this.#value = configuration.value; + } + + getBoundingBox(context) { + var bounds = this.#getBounds(context); + return { + left: bounds.x, + top: bounds.y, + right: bounds.x + bounds.width, + bottom: bounds.y + bounds.height + }; + }; + + draw(context, configuration) { + // retina + var x = this.x * 2; + var y = this.y * 2; + + // highlight selected + if (this.selected) { + var bounds = this.#getBounds(context); + context.save(); + context.scale(2, 2); // retina + context.beginPath(); + context.rect(bounds.x, bounds.y, bounds.width, bounds.height); + context.fillStyle = HIGHLIGHT_COLOR; + context.fill(); + context.restore(); + } + + context.save(); + context.translate(x, y); + + context.font = "100 " + Text.FONT_SIZE + "px sans-serif"; + context.textAlign = "center"; + context.textBaseline = "middle"; + context.fillStyle = "#000000"; + + var lines = this.#breakText(); + context.translate(0, -(Text.FONT_SIZE * lines.length) / 2); + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + context.fillText(line, 0, 0); + context.translate(0, Text.FONT_SIZE); + } + + context.restore(); + } + + initialize(model, mouse) { } + + isPointInText(context, x, y) { + return _isPointInBox(x, y, this.#getBounds(context)); + }; + + kill() { + publish("kill", [this]); + }; + + move(x, y) { + this.x = x; + this.y = y; + } + + update(mouse, configuration) { } + /**********************************************************************/ + // PRIVATE METHODS + /**********************************************************************/ + #breakText() { + return this.value.split(/\n/); + }; + + #getBounds(context) { + var lines = this.#breakText(); + + var maxWidth = 0; + for (var i = 0; i < lines.length; i++) { + var line = lines[i]; + var w = (context.measureText(line).width + 10) * 2; + if (maxWidth < w) maxWidth = w; + } + + var w = maxWidth; + var h = (Text.FONT_SIZE * lines.length) / 2; + + return { + x: this.x - w / 2, + y: this.y - h / 2 - Text.FONT_SIZE / 2, + width: w, + height: h + Text.FONT_SIZE / 2 + }; + }; +} + diff --git a/v1.2/js/ui/key.js b/v1.2/js/ui/key.js new file mode 100644 index 0000000..dbb7de7 --- /dev/null +++ b/v1.2/js/ui/key.js @@ -0,0 +1,50 @@ +(function (exports) { + // Keycodes to words mapping + var KEY_CODES = { + 17: "control", + 91: "control", // macos command + 13: "enter", // enter + + 77: "move", // (M)OVE + 80: "pen", // (P)EN + 69: "erase", // (E)RASE + 84: "text", // (T)EXT + + 49: "link", // (1) Save as link + 50: "embed", // (2) Embed + 51: "import", // (3) import file + 52: "export", // (4) export file + }; + + // singleton + var Key = {}; + exports.Key = Key; + + Key.onKeyDown = function (event) { + if (window.loopy && window.loopy.modal && window.loopy.modal.open) return; + var code = KEY_CODES[event.keyCode]; + + if (code) { + Key[code] = true; + publish("key/" + code); + } + + event.stopPropagation(); + event.preventDefault(); + } + + Key.onKeyUp = function (event) { + if (window.loopy && window.loopy.modal && window.loopy.modal.open) return; + + var code = KEY_CODES[event.keyCode]; + if (code) { + Key[code] = false; + } + + event.stopPropagation(); + event.preventDefault(); + } + + exports.addEventListener("keydown", Key.onKeyDown, false); + exports.addEventListener("keyup", Key.onKeyUp, false); +})(window); \ No newline at end of file diff --git a/v1.2/js/ui/modal.js b/v1.2/js/ui/modal.js new file mode 100644 index 0000000..f9f9190 --- /dev/null +++ b/v1.2/js/ui/modal.js @@ -0,0 +1,253 @@ +class Modal extends UI { + static get EXAMPLES() { return "examples"; } + static get HOW_TO() { return "howto"; } + static get CREDITS() { return "credits"; } + + #elements = {}; + #open = false; + + get open() { return this.#open; } + + constructor(dom, configuration) { + var content = document.createElement("div"); + + super(content) + + this.#createHTMLElements(dom, content); + + this.addPage(Toolbar.TOOL_LINK, this.#initializeSaveAsLinkPage(configuration)); + this.addPage(Toolbar.TOOL_EMBED, this.#initializeEmbedCodePage(configuration)); + this.addPage(Modal.EXAMPLES, this.#initializeExamplesPage(configuration)); + this.addPage(Modal.HOW_TO, this.#initializeHowToPage(configuration)); + this.addPage(Modal.CREDITS, this.#initializeCreditsPage(configuration)); + + subscribe("modal", function (action) { + var page = this.showPage(action); + if (!page) return; + + if (page.onshow) page.onshow(); + this.show(); + }.bind(this)); + } + + //**********************************************************************/ + // PUBLIC METHODS + /**********************************************************************/ + hide() { + super.hide(); + this.#elements.container.setAttribute("show", "no"); + if (this.currentPage.onhide) this.currentPage.onhide(); + this.#open = false; + }; + + show() { + super.show(); + this.#elements.container.setAttribute("show", "yes"); + this.#open = true; + }; + /**********************************************************************/ + // PRIVATE METHODS + /**********************************************************************/ + #createHTMLElements(container, content) { + this.#elements.container = container; + + // create background dom + this.#elements.background = document.createElement("div"); + this.#elements.background.setAttribute("id", "modal-background") + this.#elements.background.onclick = function () { this.hide(); }.bind(this); + + // create body dom + this.#elements.body = document.createElement("div"); + this.#elements.body.setAttribute("id", "modal-body") + + // create close button dom + this.#elements.close = document.createElement("div"); + this.#elements.close.setAttribute("id", "modal-close") + this.#elements.close.innerHTML = "[X] CLOSE" + this.#elements.close.onclick = function () { this.hide(); }.bind(this); + this.#elements.body.appendChild(this.#elements.close); + + // create content dom + this.#elements.content = content; + this.#elements.content.setAttribute("id", "modal-content") + this.#elements.body.appendChild(this.#elements.content); + + this.#elements.container.appendChild(this.#elements.background); + this.#elements.container.appendChild(this.#elements.body); + } + + #initializeEmbedCodePage(configuration) { + var page = new ModalPage(); + + var link; + var __onUpdate = function () { + var embedCode = ''; + embedCode = _format(embedCode, widthInput.getValue(), heightInput.getValue(), 0, link); + + output.output(embedCode); + }; + + var sidebar = document.createElement("div"); + sidebar.style.width = "200px"; + sidebar.style.height = "500px"; + sidebar.style.float = "left"; + page.dom.appendChild(sidebar); + + // label 1 + var label = document.createElement("div"); + label.innerHTML = "
PREVIEW →

"; + sidebar.appendChild(label); + + // label 2 + var label = document.createElement("div"); + label.style.fontSize = "15px"; + label.innerHTML = "what size do you want your embed to be?"; + sidebar.appendChild(label); + + // edit size + var widthInput = _createNumberInput(__onUpdate); + var heightInput = _createNumberInput(__onUpdate); + var label = document.createElement("div"); + label.style.display = "inline-block"; + label.style.fontSize = "15px"; + label.innerHTML = " X "; + sidebar.appendChild(widthInput.dom); + sidebar.appendChild(label); + sidebar.appendChild(heightInput.dom); + + // label 3 + var label = document.createElement("div"); + label.style.fontSize = "15px"; + label.innerHTML = "

copy the code below:"; + sidebar.appendChild(label); + + // result otput + var output = new ComponentOutput(page, "", { textarea: true }); + sidebar.appendChild(output.dom); + output.getOutputElement().style.fontSize = "12px"; + output.getOutputElement().style.height = "160px"; + + // label 3 + var label = document.createElement("div"); + label.style.fontSize = "15px"; + label.style.textAlign = "left"; + label.innerHTML = "

(note: the REMIX button lets someone else, well, remix your model! don't worry, it'll just be a copy, it won't affect the original.)"; + sidebar.appendChild(label); + + var iframeContainer = page.addComponent(new ComponentIframe(page, "", { + width: 500, + height: 440 + })); + + iframeContainer.dom.style.float = "right"; + iframeContainer.dom.style["padding"] = "20px"; + + page.onShow = function () { + link = configuration.saveToURL(Toolbar.TOOL_EMBED); + + widthInput.setValue(500); + heightInput.setValue(440); + + iframeContainer.getIframeElement().setAttribute("src", link); + + __onUpdate(); + + output.select(); + }; + + page.onHide = function () { + iframeContainer.getIframeElement().removeAttribute("src"); + }; + + return page; + } + + #initializeExamplesPage(configuration) { + var page = new ModalPage(); + + var iframeContainer = page.addComponent(new ComponentIframe(page, "", { + width: 700, + height: 440 + })); + + iframeContainer.getIframeElement().setAttribute("src", "pages/examples/index.html"); + + return page; + } + + #initializeHowToPage(configuration) { + var page = new ModalPage(); + + var iframeContainer = page.addComponent(new ComponentIframe(page, "", { + width: 530, + height: 430 + })); + + iframeContainer.getIframeElement().setAttribute("src", "pages/howto.html"); + + return page; + } + + #initializeCreditsPage(configuration) { + var page = new ModalPage(); + + var iframeContainer = page.addComponent(new ComponentIframe(page, "", { + width: 700, + height: 430 + })); + + iframeContainer.getIframeElement().setAttribute("src", "pages/credits/index.html"); + + return page; + } + + #initializeSaveAsLinkPage(configuration) { + var page = new ModalPage(); + + page.addComponent(new ComponentHTML(page, "", { + html: "Copy the link below:

" + })); + + var output = page.addComponent(new ComponentOutput(page, "", { textarea: true })); + + var label = document.createElement("div"); + label.style.textAlign = "right"; + label.style.fontSize = "15px"; + label.style.marginTop = "6px"; + label.style.color = "#888888"; + label.innerHTML = "(this is a long URL, so you may want to use a link-shortener like bit.ly)"; + page.dom.appendChild(label); + + // chars left... + var charactersLeft = document.createElement("div"); + charactersLeft.style.textAlign = "right"; + charactersLeft.style.fontSize = "15px"; + charactersLeft.style.marginTop = "3px"; + charactersLeft.style.color = "#888888"; + charactersLeft.innerHTML = "X out of 2048 characters"; + page.dom.appendChild(charactersLeft); + + page.onshow = function () { + var link = configuration.saveToURL(); + output.output(link); + output.select(); + + // Chars left + var html = link.length + " / 2048 characters"; + if (link.length > 2048) { + html += " - MAY BE TOO LONG FOR MOST BROWSERS"; + } + charactersLeft.innerHTML = html; + charactersLeft.style.fontWeight = (link.length > 2048) ? "bold" : "100"; + charactersLeft.style.fontSize = (link.length > 2048) ? "14px" : "15px"; + }; + + return page; + } +} + +class ModalPage extends UIPage { + constructor(configuration) { + super(configuration); + } +} diff --git a/v1.2/js/ui/mouse.js b/v1.2/js/ui/mouse.js new file mode 100644 index 0000000..06c6d47 --- /dev/null +++ b/v1.2/js/ui/mouse.js @@ -0,0 +1,93 @@ + +class Mouse { + #configuration; + #x; #y; #moved; #pressed; + #target; #startedOnTarget; + + get x() { return this.#x; } + get y() { return this.#y; } + get moved() { return this.#moved; } + get pressed() { return this.#pressed; } + + constructor(target, configuration) { + _validateAssigned(target, "Target must be provided."); + _validateAssigned(configuration, "Configuration object must be provided."); + _validateAssigned(configuration.offset, "Offset information must be present in the configuration."); + _validateAssigned(configuration.padding, "Padding information must be present in the configuration."); + _validateTrue(configuration.embedded !== undefined, "Embedded mode information must be present in the configuration."); + + this.#target = target; + this.#configuration = configuration; + + this.#x = 0; + this.#y = 0; + this.#moved = true; + this.#pressed = false; + this.#startedOnTarget = false; + + _addMouseEvents(this.#target, this); + } + + onMouseDown(event) { + this.#moved = false; + this.#pressed = true; + this.#startedOnTarget = true; + + publish("mousedown"); + }; + + onMouseMove(event) { + var tx = 0; + var ty = 0; + var s = 1 / this.#configuration.offset.scale; + var CW = this.#target.clientWidth - (this.#configuration.padding.all) + var CH = this.#target.clientHeight - this.#configuration.padding.bottom - this.#configuration.padding.all; + + if (this.#configuration.embedded) { // dunno why but this is needed + tx -= this.#configuration.padding.all / 2; + ty -= this.#configuration.padding.all / 2; + } + + tx -= (CW + this.#configuration.padding.all) / 2; + ty -= (CH + this.#configuration.padding.all) / 2; + + tx = s * tx; + ty = s * ty; + + tx += (CW + this.#configuration.padding.all) / 2; + ty += (CH + this.#configuration.padding.all) / 2; + + tx -= this.#configuration.offset.x; + ty -= this.#configuration.offset.y; + + // Mutliply by Mouse vector + var mx = event.x * s + tx; + var my = event.y * s + ty; + + this.#x = mx; + this.#y = my; + this.#moved = true; + + publish("mousemove"); + }; + + onMouseUp() { + this.#pressed = false; + if (this.#startedOnTarget) { + publish("mouseup"); + if (!this.moved) { + publish("mouseclick"); + } + } + this.#moved = false; + this.#startedOnTarget = false; + }; + + showCursor(cursorStyle) { + this.#target.style.cursor = cursorStyle; + }; + + update() { + this.showCursor(""); + }; +} \ No newline at end of file diff --git a/v1.2/js/ui/playbar.js b/v1.2/js/ui/playbar.js new file mode 100644 index 0000000..f9f597b --- /dev/null +++ b/v1.2/js/ui/playbar.js @@ -0,0 +1,178 @@ +class Playbar extends UI { + static get PAGE_ID_COMPOSE() { return "COMPOSE" }; + static get PAEG_ID_PLAY() { return "PLAY" }; + + constructor(dom, configuration) { + super(dom) + + this.addPage(Playbar.PAGE_ID_COMPOSE, this.#initializeComposePage(configuration)); + this.addPage(Playbar.PAEG_ID_PLAY, this.#initializePlayPage(configuration)); + + this.showPage(Playbar.PAGE_ID_COMPOSE); + + subscribe("key/enter", function () { + if (Key.control) { + if (configuration.isComposing()) { + configuration.play(); + } else { + configuration.compose(); + } + } + }.bind(this)); + } + + #initializeComposePage(configuration) { + var page = new PlaybarPage(); + + // play + var buttonDOM = page.addComponent(new PlaybarButton({ + icon: "gg-play-button", + label: "Play", + tooltip: isMacLike ? "⌘ + Enter" : "Ctrl + Enter", + big: true, + onclick: function () { + configuration.play(); + } + })).dom; + buttonDOM.style.fontSize = "28px"; + buttonDOM.style.height = "35px"; + + return page; + } + + #initializePlayPage(configuration) { + var page = new PlaybarPage(); + if (configuration.embedded) { + // reset + var buttonDOM = page.addComponent(new PlaybarButton({ + icon: "gg-undo", + label: "Reset", + onclick: function () { + publish("model/reset"); + } + })).dom; + buttonDOM.style.width = "100px"; + buttonDOM.style.left = "0px"; + buttonDOM.style.top = "0px"; + // remix + var buttonDOM = page.addComponent(new PlaybarButton({ + icon: "gg-external", + label: "Remix", + onclick: function () { + window.open(configuration.saveToURL("embed"), '_blank'); + } + })).dom; + buttonDOM.style.width = "100px"; + buttonDOM.style.right = "0px"; + buttonDOM.style.top = "0px"; + } else { + // stop + var buttonDOM = page.addComponent(new PlaybarButton({ + icon: "gg-play-stop", + label: "Stop", + onclick: function () { + configuration.compose(); + }.bind(this) + })).dom; + buttonDOM.style.width = "100px"; + buttonDOM.style.left = "0px"; + buttonDOM.style.top = "0px"; + + // reset + var buttonDOM = page.addComponent(new PlaybarButton({ + icon: "gg-undo", + label: "Reset", + onclick: function () { + publish("model/reset"); + } + })).dom; + buttonDOM.style.width = "100px"; + buttonDOM.style.right = "0px"; + buttonDOM.style.top = "0px"; + } + + // animation speed + var speedSlider = page.addComponent(new PlaybarSlider({ + value: configuration.getAnimationSpeed(), + min: 0, max: 6, step: 0.2, + oninput: function (value) { + configuration.setAnimationSpeed(value); + } + })).dom; + speedSlider.style.bottom = "0px"; + + return page; + } + +} + +class PlaybarPage extends UIPage { + constructor() { + super(); + } +} + +class PlaybarButton { + #dom; + + get dom() { return this.#dom; } + + constructor(configuration) { + var label = + '

' + + '
' + configuration.label + '
'; + + this.#dom = _createButton(label, function () { + configuration.onclick(); + }); + + this.#dom.setAttribute("big", configuration.big ? "yes" : "no"); + + // tooltip + if (configuration.tooltip) { + this.#dom.setAttribute("data-balloon", configuration.tooltip); + this.#dom.setAttribute("data-balloon-pos", "top"); + } + } +} + +class PlaybarSlider { + #dom; + + get dom() { return this.#dom; } + + constructor(configuration) { + this.#dom = document.createElement("div"); + this.#dom.style.bottom = "0px"; + this.#dom.style.position = "absolute"; + this.#dom.style.width = "100%"; + this.#dom.style.height = "20px"; + + var decrease = document.createElement("div"); + decrease.setAttribute("class", "play-slider-element gg-remove"); + this.#dom.appendChild(decrease); + + // input + var input = document.createElement("input"); + input.setAttribute("class", "play-slider"); + input.type = "range"; + input.value = configuration.value; + input.step = configuration.step; + input.min = configuration.min; + input.max = configuration.max; + input.oninput = function (event) { configuration.oninput(input.value); }; + + var inputDiv = document.createElement("div"); + inputDiv.setAttribute("class", "play-slider-element"); + + inputDiv.appendChild(input); + + this.#dom.appendChild(inputDiv); + + + + var increase = document.createElement("div"); + increase.setAttribute("class", "play-slider-element gg-add"); + this.#dom.appendChild(increase); + } +} \ No newline at end of file diff --git a/v1.2/js/ui/sidebar.js b/v1.2/js/ui/sidebar.js new file mode 100644 index 0000000..119d424 --- /dev/null +++ b/v1.2/js/ui/sidebar.js @@ -0,0 +1,283 @@ +class Sidebar extends UI { + static get #BACK_BUTTON_TEXT() { return "go back" }; + + static get PAGE_ID_DEFAULT() { return "DEFAULT" }; + static get PAGE_ID_NODE() { return "NODE" }; + static get PAGE_ID_EDGE() { return "EDGE" }; + static get PAGE_ID_TEXT() { return "TEXT" }; + + + constructor(dom) { + super(dom) + + this.addPage(Sidebar.PAGE_ID_DEFAULT, this.#initializeDefaultPage()); + this.addPage(Sidebar.PAGE_ID_NODE, this.#initializeNodeEditPage()); + this.addPage(Sidebar.PAGE_ID_EDGE, this.#initializeEdgeEditPage()); + this.addPage(Sidebar.PAGE_ID_TEXT, this.#initializeTextEditPage()); + + this.showPage(Sidebar.PAGE_ID_DEFAULT); + + // go back to main when editing is killed + subscribe("kill", function (item) { + if (this.currentPage.target == item) { + this.showPage(Sidebar.PAGE_ID_DEFAULT); + } + }.bind(this)); + } + + edit(object) { + this.showPage(object.type); + this.currentPage.edit(object); + }; + + #initializeNodeEditPage() { + var page = new SidebarPage(); + page.addComponent(new ComponentButton(page, "", { + header: true, + label: Sidebar.#BACK_BUTTON_TEXT, + onclick: function () { this.showPage(Sidebar.PAGE_ID_DEFAULT); }.bind(this) + })); + page.addComponent(new ComponentInput(page, "label", { + label: "

Name:" + })); + page.addComponent(new ComponentSlider(page, "hue", { + bg: "color", + label: "Color:", + options: [0, 1, 2, 3, 4, 5], + oninput: function (value) { Node.DEFAULT_HUE = value; } + })); + page.addComponent(new ComponentSlider(page, "initialValue", { + bg: "initial", + label: "Start Amount:", + options: [0, 0.16, 0.33, 0.50, 0.66, 0.83, 1], + oninput: function (value) { Node.DEFAULT_HUE = value; } + + })); + page.addComponent(new ComponentButton(page, "", { + label: "delete node", + onclick: function (node) { + node.kill(); + this.showPage(Sidebar.PAGE_ID_DEFAULT); + }.bind(this) + })); + + page.onEdit = function () { + var node = page.target; + var color = node.color; + page.getComponent("initialValue").setBGColor(color); + + var name = node.label; + if (name == "" || name == "?") page.getComponent("label").select(); + }; + return page; + } + + #initializeEdgeEditPage() { + var page = new SidebarPage(); + page.addComponent(new ComponentButton(page, "", { + header: true, + label: Sidebar.#BACK_BUTTON_TEXT, + onclick: function () { this.showPage(Sidebar.PAGE_ID_DEFAULT); }.bind(this) + })); + page.addComponent(new ComponentSlider(page, "strength", { + bg: "strength", + label: "

Relationship:", + options: [1, -1], + oninput: function (value) { Edge.DEFAULT_STRENGTH = value; } + })); + page.addComponent(new ComponentHTML(page, "", { + html: "(to make a stronger relationship, draw multiple arrows!)

(to make a delayed relationship, draw longer arrows)" + })); + page.addComponent(new ComponentButton(page, "", { + label: "delete edge", + onclick: function (edge) { + edge.kill(); + this.showPage(Sidebar.PAGE_ID_DEFAULT); + }.bind(this) + })); + return page; + } + + #initializeTextEditPage() { + var page = new SidebarPage(); + page.addComponent(new ComponentButton(page, "", { + header: true, + label: Sidebar.#BACK_BUTTON_TEXT, + onclick: function () { this.showPage(Sidebar.PAGE_ID_DEFAULT); }.bind(this) + })); + page.addComponent(new ComponentInput(page, "value", { + label: "

Label:", + textarea: true + })); + page.addComponent(new ComponentButton(page, "", { + label: "delete label", + onclick: function (item) { + item.kill(); + this.showPage(Sidebar.PAGE_ID_DEFAULT); + }.bind(this) + })); + + page.onShow = function () { + page.getComponent("value").select(); + }; + + page.onHide = function () { + var label = page.target; + if (!page.target) return; + + var text = label.text; + if (/^\s*$/.test(text)) { + page.target = null; + label.kill(); + } + }; + + return page; + } + + #initializeDefaultPage() { + var page = new SidebarPage(); + page.addComponent(new ComponentHTML(page, "", { + html: "" + + "LOOPY (v1.2)
a tool for thinking in systems

" + + + "see examples " + + "how to " + + "credits

" + + + "

"+ + + "LOOPY is "+ + "made by nicky case "+ + "with your support on patreon <3

"+ + "P.S: go read Thinking In Systems, thx" + + })); + return page; + } +} + +///////////////////////////////////////////////////////////////////////////////////////////// +// COMPONENTS /////////////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////////////////////////////// +class SidebarPage extends UIPage { + #target; + + get target() { return this.#target; } + + constructor() { + super(); + this.#target = null; + + // start hiding + this.hide(); + } + + addComponent(component) { + super.addComponent(component); + }; + + edit(item) { + if (this.target) { + this.target.selected = false; + } + + // new target to edit + this.#target = item; + this.target.selected = true; + + // show each property with its component + for (var i = 0; i < this.components.length; i++) { + this.components[i].show(); + } + + // callback + this.onEdit(); + }; + + hide() { + super.hide(); + if (this.target) { + this.target.selected = false; + } + }; + + onEdit() { } +} + +class ComponentSlider extends Component { + constructor(page, propertyName, configuration) { + super(page, propertyName, configuration); + + this.isDragging = false; + + // Slider DOM: graphic + pointer + this.slider = new Image(); + this.slider.draggable = false; + this.slider.src = "img/sliders/" + configuration.bg + ".png"; + this.slider.setAttribute("class", "component-slider-graphic"); + + this.pointer = new Image(); + this.pointer.draggable = false; + this.pointer.src = "img/sliders/slider_pointer.png"; + this.pointer.setAttribute("class", "component-slider-pointer"); + + var sliderDOM = document.createElement("div"); + sliderDOM.setAttribute("class", "component-slider"); + sliderDOM.appendChild(this.slider); + sliderDOM.appendChild(this.pointer); + + var label = _createLabel(this.configuration.label); + this.dom.appendChild(label); + this.dom.appendChild(sliderDOM); + + _addMouseEvents(this.slider, this); + } + + movePointer() { + var value = this.getTargetPropertyValue(); + var optionIndex = this.configuration.options.indexOf(value); + var x = (optionIndex + 0.5) * (250 / this.configuration.options.length); + this.pointer.style.left = (x - 7.5) + "px"; + }; + + onMouseDown(event) { + this.isDragging = true; + this.sliderInput(event); + }; + + onMouseUp() { + this.isDragging = false; + }; + + onMouseMove(event) { + if (this.isDragging) { + this.sliderInput(event); + } + }; + + sliderInput(event) { + // What's the option? + var index = event.x / 250; + var optionIndex = Math.floor(index * this.configuration.options.length); + var option = this.configuration.options[optionIndex]; + if (option === undefined) return; + this.setTargetPropertyValue(option); + + if (this.configuration.oninput) { + this.configuration.oninput(option); + } + + this.movePointer(); + }; + + show() { + this.movePointer(); + }; + + setBGColor(color) { + this.slider.style.background = color; + }; +} + + diff --git a/v1.2/js/ui/toolbar.js b/v1.2/js/ui/toolbar.js new file mode 100644 index 0000000..2ef7bf0 --- /dev/null +++ b/v1.2/js/ui/toolbar.js @@ -0,0 +1,168 @@ +class Toolbar { + static get TOOL_MOVE() { return "tool-move"; }; + static get TOOL_TEXT() { return "tool-text"; }; + static get TOOL_ERASE() { return "tool-erase"; }; + static get TOOL_PEN() { return "tool-pen"; }; + + static get TOOL_LINK() { return "tool-link"; }; + static get TOOL_EMBED() { return "tool-embed"; }; + static get TOOL_IMPORT() { return "tool-import"; }; + static get TOOL_EXPORT() { return "tool-export"; }; + + #dom; + #currentTool; + #buttons = []; + #buttonsByID = {}; + + get currentTool() { return this.#currentTool; }; + + constructor(dom) { + _validateAssigned(dom, "Toolbar DOM must be provided."); + + this.#dom = dom + + // add buttons + this.#addButton({ + id: Toolbar.TOOL_MOVE, + class: "gg-controller", + tooltip: "(M)ove", + selectable: true, + }); + this.#addButton({ + id: Toolbar.TOOL_PEN, + class: "gg-pen", + tooltip: "(P)en", + selectable: true, + }); + this.#addButton({ + id: Toolbar.TOOL_TEXT, + class: "gg-text", + tooltip: "(T)ext", + selectable: true, + }); + this.#addButton({ + id: Toolbar.TOOL_ERASE, + class: "gg-erase", + tooltip: "(E)rase", + selectable: true, + }); + + this.#addHTML({ + html: "
" + }); + + this.#addButton({ + id: Toolbar.TOOL_LINK, + class: "gg-link", + tooltip: "(1) Save as link", + callback: function () { publish("modal", [Toolbar.TOOL_LINK]); }.bind(this) + }); + this.#addButton({ + id: Toolbar.TOOL_EMBED, + class: "gg-code-slash", + tooltip: "(2) Embed", + callback: function () { publish("modal", [Toolbar.TOOL_EMBED]); }.bind(this) + }); + this.#addButton({ + id: Toolbar.TOOL_IMPORT, + class: "gg-import", + tooltip: "(3) Import File", + callback: function () { publish("import/file"); }.bind(this) + }); + this.#addButton({ + id: Toolbar.TOOL_EXPORT, + class: "gg-export", + tooltip: "(4) Export File", + callback: function () { publish("export/file"); }.bind(this) + }); + + this.#setCurrentTool(Toolbar.TOOL_MOVE); + } + + //**********************************************************************/ + // PUBLIC METHODS + /**********************************************************************/ + hide() { + this.#dom.style.display = "none"; + } + + onButtonClick(configuration) { + if (configuration.selectable) { + this.#setCurrentTool(configuration.id); + } + if (configuration.callback) { + configuration.callback(); + } + } + + show() { + this.#dom.style.display = "block"; + } + + /**********************************************************************/ + // PRIVATE METHODS + /**********************************************************************/ + #addButton(configuration) { + // add the button + var button = new ToolbarButton(this, configuration); + this.#dom.appendChild(button.dom); + this.#buttons.push(button); + this.#buttonsByID[configuration.id] = button; + + // shortcut + subscribe("key/" + configuration.id.replace("tool-", ""), function () { + this.onButtonClick(configuration); + }.bind(this)); + }; + + #addHTML(configuration) { + // add the button + var html = new ComponentHTML(this, "", configuration); + this.#dom.appendChild(html.dom); + } + + #setCurrentTool(tool) { + this.#currentTool = tool; + for (var i = 0; i < this.#buttons.length; i++) { + this.#buttons[i].deselect(); + } + this.#buttonsByID[tool].select(); + + publish("tool/changed", [tool]); + }; +} + +class ToolbarButton { + #dom; + #selectable; + + get dom() { return this.#dom; }; + + constructor(toolbar, configuration) { + this.id = configuration.id; + this.#selectable = configuration.selectable; + this.#dom = document.createElement("div"); + this.#dom.setAttribute("class", "toolbar-button"); + + var i = document.createElement("i"); + i.setAttribute("class", configuration.class); + this.#dom.appendChild(i); + + // tooltip + this.#dom.setAttribute("data-balloon", configuration.tooltip); + this.#dom.setAttribute("data-balloon-pos", "right"); + + // on click + this.#dom.onclick = function () { + toolbar.onButtonClick(configuration); + }; + } + + select() { + this.#dom.setAttribute("selected", "yes"); + }; + + deselect() { + this.#dom.setAttribute("selected", "no"); + }; +} \ No newline at end of file diff --git a/v1.2/js/ui/ui.js b/v1.2/js/ui/ui.js new file mode 100644 index 0000000..d220787 --- /dev/null +++ b/v1.2/js/ui/ui.js @@ -0,0 +1,238 @@ +class UI { + + #dom; + #pages; + #currentPage; + + get currentPage() { return this.#currentPage; } + + constructor(dom) { + this.#dom = dom; + this.#pages = []; + this.#currentPage = null; + } + + addPage(id, page) { + page.id = id; + this.#dom.appendChild(page.dom); + this.#pages.push(page); + }; + + hide() { + this.#dom.style.display = "none"; + } + + show() { + this.#dom.style.display = "block"; + } + + showPage(id) { + var shownPage = null; + for (var i = 0; i < this.#pages.length; i++) { + var page = this.#pages[i]; + if (page.id == id) { + page.show(); + shownPage = page; + } else { + page.hide(); + } + } + return this.#currentPage = shownPage; + }; + + removeAttribute(key) { + this.#dom.removeAttribute(key); + } + + setAttribute(key, value) { + this.#dom.setAttribute(key, value); + } +} + +class UIPage { + #dom; + + components; + componentsByID; + configuration; + + get dom() { return this.#dom; } + + constructor(configuration) { + this.#dom = document.createElement("div"); + + this.components = []; + this.componentsByID = {}; + this.configuration = configuration; + } + + addComponent(component) { + this.#dom.appendChild(component.dom); + this.components.push(component); + this.componentsByID[component.targetPropertyName] = component; + return component; + }; + + getComponent(id) { + return this.componentsByID[id]; + }; + + removeAttribute(key) { + this.#dom.removeAttribute(key); + } + + setAttribute(key, value) { + this.#dom.setAttribute(key, value); + } + + show() { + this.#dom.style.display = "block"; + this.onShow(); + }; + + hide() { + this.#dom.style.display = "none"; + this.onHide(); + }; + + onHide() { } + + onShow() { } +} + +class Component { + #dom; + #page; + #configuration; + #targetPropertyName; + + constructor(page, targetPropertyName, configuration) { + this.#page = page; + this.#targetPropertyName = targetPropertyName; + this.#configuration = configuration; + + this.#dom = document.createElement("div"); + } + + get dom() { return this.#dom; }; + get page() { return this.#page; }; + get targetPropertyName() { return this.#targetPropertyName; }; + get configuration() { return this.#configuration; }; + + getTargetPropertyValue() { + return this.page.target[this.targetPropertyName]; + }; + + setTargetPropertyValue(value) { + this.page.target[this.targetPropertyName] = value; + this.page.onEdit(); + + publish("model/changed"); + }; + + show() { _throwErrorMessage("Not implemented!"); } +} + +class ComponentButton extends Component { + constructor(page, targetPropertyName, configuration) { + super(page, targetPropertyName, configuration); + + var button = _createButton(this.configuration.label, function () { + configuration.onclick(this.page.target); + }.bind(this)); + + this.dom.appendChild(button); + + // Unless it's a HEADER button! + if (this.configuration.header) { + button.setAttribute("header", "yes"); + } + } + + show() { } +} + +class ComponentHTML extends Component { + constructor(page, targetPropertyName, configuration) { + super(page, targetPropertyName, configuration); + + this.dom.innerHTML = this.configuration.html; + } + + show() { } +} + +class ComponentInput extends Component { + #input; + + constructor(page, targetPropertyName, configuration) { + super(page, targetPropertyName, configuration); + + // label + var label = _createLabel(configuration.label); + var className = configuration.textarea ? "component-textarea" : "component-input"; + this.dom.appendChild(label); + + // input + this.#input = _createTextInput(className, configuration.textarea, function (event) { + this.setTargetPropertyValue(this.#input.value); + }.bind(this)); + + this.dom.appendChild(this.#input); + } + + show() { + this.#input.value = this.getTargetPropertyValue(); + }; + + select() { + setTimeout(function () { this.#input.select(); }.bind(this), 10); + }; +} + +class ComponentOutput extends Component { + #output; + + constructor(page, targetPropertyName, configuration) { + super(page, targetPropertyName, configuration); + + this.#output = _createTextInput("component-output", configuration.textarea, configuration.oninput); + this.#output.setAttribute("readonly", "true"); + this.#output.onclick = function () { + this.#output.select(); + }.bind(this); + + this.dom.appendChild(this.#output); + } + + getOutputElement() { + return this.#output; + } + + output(value) { + this.#output.value = value; + }; + + select() { + this.#output.select(); + } +} + +class ComponentIframe extends Component { + #iframe; + + constructor(page, targetPropertyName, configuration) { + super(page, targetPropertyName, configuration); + + this.#iframe = document.createElement("iframe"); + this.#iframe.width = configuration.width; + this.#iframe.height = configuration.height; + + this.dom.appendChild(this.#iframe); + } + + getIframeElement() { + return this.#iframe; + } + +} \ No newline at end of file diff --git a/v1.2/js/utility/minpubsub.js b/v1.2/js/utility/minpubsub.js new file mode 100644 index 0000000..358008d --- /dev/null +++ b/v1.2/js/utility/minpubsub.js @@ -0,0 +1,95 @@ +/*! + * MinPubSub + * Copyright(c) 2011 Daniel Lamb + * MIT Licensed + */ +(function (context) { + var MinPubSub = {}; + + // the topic/subscription hash + var cache = context.c_ || {}; //check for 'c_' cache for unit testing + + MinPubSub.publish = function ( /* String */ topic, /* Array? */ args) { + // summary: + // Publish some data on a named topic. + // topic: String + // The channel to publish on + // args: Array? + // The data to publish. Each array item is converted into an ordered + // arguments on the subscribed functions. + // + // example: + // Publish stuff on '/some/topic'. Anything subscribed will be called + // with a function signature like: function(a,b,c){ ... } + // + // publish('/some/topic', ['a','b','c']); + + var subs = cache[topic], + len = subs ? subs.length : 0; + + //can change loop or reverse array if the order matters + while (len--) { + subs[len].apply(context, args || []); + } + }; + + MinPubSub.subscribe = function ( /* String */ topic, /* Function */ callback) { + // summary: + // Register a callback on a named topic. + // topic: String + // The channel to subscribe to + // callback: Function + // The handler event. Anytime something is publish'ed on a + // subscribed channel, the callback will be called with the + // published array as ordered arguments. + // + // returns: Array + // A handle which can be used to unsubscribe this particular subscription. + // + // example: + // subscribe('/some/topic', function(a, b, c){ /* handle data */ }); + + if (!cache[topic]) { + cache[topic] = []; + } + cache[topic].push(callback); + return [topic, callback]; // Array + }; + + MinPubSub.unsubscribe = function ( /* Array */ handle, /* Function? */ callback) { + // summary: + // Disconnect a subscribed function for a topic. + // handle: Array + // The return value from a subscribe call. + // example: + // var handle = subscribe('/some/topic', function(){}); + // unsubscribe(handle); + + var subs = cache[callback ? handle : handle[0]], + callback = callback || handle[1], + len = subs ? subs.length : 0; + + while (len--) { + if (subs[len] === callback) { + subs.splice(len, 1); + } + } + }; + + // UMD definition to allow for CommonJS, AMD and legacy window + if (typeof module === 'object' && module.exports) { + // CommonJS, just export + module.exports = exports = MinPubSub; + } else if (typeof define === 'function' && define.amd) { + // AMD support + define(function () { + return MinPubSub; + }); + } else if (typeof context === 'object') { + // If no AMD and we are in the browser, attach to window + context.publish = MinPubSub.publish; + context.subscribe = MinPubSub.subscribe; + context.unsubscribe = MinPubSub.unsubscribe; + } + +})(this.window); \ No newline at end of file diff --git a/v1.2/js/utility/utility.js b/v1.2/js/utility/utility.js new file mode 100644 index 0000000..85fb893 --- /dev/null +++ b/v1.2/js/utility/utility.js @@ -0,0 +1,273 @@ +/**************************************************************************/ +/**************************************************************************/ +function _addMouseEvents(target, eventSource) { + var _onmousedown = function (event) { + var _fakeEvent = _onmousemove(event); + eventSource.onMouseDown(_fakeEvent); + }; + + var _onmousemove = function (event) { + var _fakeEvent = {}; + if (event.changedTouches) { // touch + var offset = _getTotalOffset(target); + _fakeEvent.x = event.changedTouches[0].clientX - offset.left; + _fakeEvent.y = event.changedTouches[0].clientY - offset.top; + event.preventDefault(); + } else { // not touch + + _fakeEvent.x = event.offsetX; + _fakeEvent.y = event.offsetY; + } + eventSource.onMouseMove(_fakeEvent); + return _fakeEvent; + }; + var _onmouseup = function (event) { + var _fakeEvent = {}; + eventSource.onMouseUp(_fakeEvent); + }; + + // add events + target.addEventListener("mousedown", _onmousedown); + target.addEventListener("mousemove", _onmousemove); + document.body.addEventListener("mouseup", _onmouseup); + + // touch + target.addEventListener("touchstart", _onmousedown, false); + target.addEventListener("touchmove", _onmousemove, false); + document.body.addEventListener("touchend", _onmouseup, false); +} +/**************************************************************************/ +/**************************************************************************/ +function _blendColors(color1, color2, blend) { + var color = "#"; + for (var i = 0; i < 3; i++) { + var sub1 = color1.substring(1 + 2 * i, 3 + 2 * i); + var sub2 = color2.substring(1 + 2 * i, 3 + 2 * i); + var num1 = parseInt(sub1, 16); + var num2 = parseInt(sub2, 16); + + // blended number & sub + var num = Math.floor(num1 * (1 - blend) + num2 * blend); + var sub = num.toString(16).toUpperCase(); + var paddedSub = ('0' + sub).slice(-2); // in case it's only one digit long + + color += paddedSub; + } + return color; +} +/**************************************************************************/ +/**************************************************************************/ +function _createCanvas(dom) { + var canvas = document.createElement("canvas"); + + // dimensions + var __onResize = function () { + var width = dom.clientWidth; + var height = dom.clientHeight; + + canvas.width = width * 2; // retina + canvas.style.width = width + "px"; + + canvas.height = height * 2; // retina + canvas.style.height = height + "px"; + }; + __onResize(); + + dom.appendChild(canvas); + + subscribe("resize", function () { + __onResize(); + }); + return canvas; +} +/**************************************************************************/ +/**************************************************************************/ +function _configureProperties(object, configuration, properties) { + for (var propertyName in properties) { + // default values + if (configuration[propertyName] === undefined) { + var value = properties[propertyName]; + if (typeof value == "function") value = value(); + configuration[propertyName] = value; + } + // transfer to "object" + object[propertyName] = configuration[propertyName]; + } +} +/**************************************************************************/ +/**************************************************************************/ +function _createButton(label, onclick) { + var button = document.createElement("div"); + + button.innerHTML = label; + button.onclick = onclick; + button.setAttribute("class", "component-button"); + + return button; +} +/**************************************************************************/ +/**************************************************************************/ +function _createTextInput(className, textarea, oninput) { + var input = textarea ? document.createElement("textarea") : document.createElement("input"); + + input.oninput = oninput; + input.setAttribute("class", className); + input.addEventListener("keydown", function (event) { + event.stopPropagation(); // stop it from triggering key.js + }, false); + + return input; +} +/**************************************************************************/ +/**************************************************************************/ +function _createLabel(message) { + var label = document.createElement("div"); + + label.innerHTML = message; + label.setAttribute("class", "component-label"); + + return label; +} +/**************************************************************************/ +/**************************************************************************/ +function _createNumberInput(onUpdate) { + var self = {}; + + self.dom = document.createElement("input"); + self.dom.style.border = "none"; + self.dom.style.width = "40px"; + self.dom.style.padding = "5px"; + + self.dom.addEventListener("keydown", function (event) { + event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true); + }, + false); // STOP IT FROM TRIGGERING KEY.js + + // on update + self.dom.onchange = function () { + var value = parseInt(self.getValue()); + if (isNaN(value)) value = 0; + self.setValue(value); + onUpdate(value); + }; + + // select on click, yo + self.dom.onclick = function () { + self.dom.select(); + }; + + // set & get value + self.getValue = function () { + return self.dom.value; + }; + + self.setValue = function (number) { + self.dom.value = number; + }; + + // return an OBJECT. + return self; +} +/**************************************************************************/ +/**************************************************************************/ +function _format(template) { + var args = [].slice.call(arguments, 1), + i = 0; + + return template.replace(/%s/g, () => args[i++]); +} +/**************************************************************************/ +/**************************************************************************/ +function _getBounds(points) { + // Bounds + var left = Infinity, top = Infinity, right = -Infinity, bottom = -Infinity; + for (var i = 0; i < points.length; i++) { + var point = points[i]; + if (point[0] < left) left = point[0]; + if (right < point[0]) right = point[0]; + if (point[1] < top) top = point[1]; + if (bottom < point[1]) bottom = point[1]; + } + + // Dimensions + var width = (right - left); + var height = (bottom - top); + + return { left: left, right: right, top: top, bottom: bottom, width: width, height: height }; +} +/**************************************************************************/ +/**************************************************************************/ +function _getParameterByName(name) { + var url = window.location.href; + name = name.replace(/[\[\]]/g, "\\$&"); + var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"), + results = regex.exec(url); + if (!results) return null; + if (!results[2]) return ''; + return decodeURIComponent(results[2].replace(/\+/g, " ")); +}; +/**************************************************************************/ +/**************************************************************************/ +function _isPointInBox(x, y, box) { + if (x < box.x) return false; + if (x > box.x + box.width) return false; + if (y < box.y) return false; + if (y > box.y + box.height) return false; + return true; +} +/**************************************************************************/ +/**************************************************************************/ +function _isPointInCircle(x, y, cx, cy, radius) { + // point distance + var dx = cx - x; + var dy = cy - y; + var distanceSquared = dx * dx + dy * dy; + + // radius + var radiusSquared = radius * radius; + + return distanceSquared <= radiusSquared; +} +/**************************************************************************/ +/**************************************************************************/ +function _rotatePoints(points, angle) { + points = JSON.parse(JSON.stringify(points)); + for (var i = 0; i < points.length; i++) { + var p = points[i]; + var x = p[0]; + var y = p[1]; + p[0] = x * Math.cos(angle) - y * Math.sin(angle); + p[1] = y * Math.cos(angle) + x * Math.sin(angle); + } + return points; +} +/**************************************************************************/ +/**************************************************************************/ +function _translatePoints(points, dx, dy) { + points = JSON.parse(JSON.stringify(points)); + for (var i = 0; i < points.length; i++) { + var p = points[i]; + p[0] += dx; + p[1] += dy; + } + return points; +} +/**************************************************************************/ +/**************************************************************************/ +function _throwErrorMessage(message) { + throw Error(message); +}; +/**************************************************************************/ +/**************************************************************************/ +function _validateAssigned(object, message) { + _validateTrue(!!object, message); +}; +/**************************************************************************/ +/**************************************************************************/ +function _validateTrue(object, message) { + if (object !== true) { + _throwErrorMessage(message); + } +}; +/**************************************************************************/ +/**************************************************************************/ \ No newline at end of file diff --git a/v1.2/pages/credits/favicon.png b/v1.2/pages/credits/favicon.png new file mode 100644 index 0000000..a1b03e2 Binary files /dev/null and b/v1.2/pages/credits/favicon.png differ diff --git a/v1.2/pages/credits/index.html b/v1.2/pages/credits/index.html new file mode 100644 index 0000000..1ad4ed5 --- /dev/null +++ b/v1.2/pages/credits/index.html @@ -0,0 +1,331 @@ + + + + + + LOOPY: Credits! + + + + + + + + + + +
+ + +
+

+ LOOPY is made by me, Nicky Case, + with the kind, lovely support of my fans on patreon! +

+

+ Speaking of which, here they are: +

+
+ +
+ + +
+
+ + + Aimee Jarboe +
+
+ + + Buster Benson +
+
+ + + Chad Sansing +
+
+ + + Jared Cosulich +
+
+ + + Louis-Jean Teitelbaum +
+
+ + + Mark McCartney +
+
+ + + Matt Hughes +
+
+ + + Michael Duke +
+
+ + + Michael Huff +
+
+ + + Natalie Sun +
+
+ + + Nicholas Perry +
+
+ + + Noel Lehmann +
+
+ + + Phil Dougherty +
+
+ + + Philippe Vallotti +
+
+ + + Thomas de Rego +
+
+ + + Travis Ross +
+
+ + + Yu-Han Kuo +
+
+ + +
+
+ + Cedric Rossi +
+
+ + Dylan Field +
+
+ + Dylan Sinnott +
+
+ + Feiya Wang +
+
+ + Glen E. Ivey +
+
+ + Iago Medeiros Cordeiro +
+
+ + Karen Cooper +
+
+ + Kate Fractal +
+
+ + Kevin Wang +
+
+ + Klemen Slavic +
+
+ + kuerqing1024 +
+
+ + Michelle Kelly +
+
+ + Nimrod Kimhi +
+
+ + Rob Napier +
+
+ + William O'Hanley +
+
+ + Zach Smith +
+
+ + +
+ 3Blue1Brown
+ Adam M. Smith
+ Alex Dytrych
+ Andrew
+ Andy
+ Aria Minaei
+ Artemiy Solopov
+ Aschelon
+ ben fei
+ Bill
+ Billy Madison
+ Boondoggle
+ Brandon
+ Brent Werness
+ Brian Wu
+ Brie Code
+ Bruno Chagas Macedo Carvalho
+ Bruno Guerrero
+ Casey Ross
+ Charlie McIlwain
+ Christopher
+ Colin
+ Colin #2
+ Cort Stratton
+ Craig Protzel
+ Craig Steele
+ Daniel Horowitz
+ Daniel Shiffman
+ Dave Tu
+ David Smit
+ Dylan Meconis
+ Fabio Utzig
+ Fahrstuhl
+ Forrest Oliphant
+ Frank Leon Rose
+ Heather Weaver
+ Henry Reich
+ J. Hu
+ Jacob Christian Munch-Andersen
+ Jacques Frechet
+ James Hogan
+ Janusz Leidgens
+ Jason Brennan
+ Jeff Long
+ Joel
+ Johannes Wärn
+ John_Ca
+ Johnny Owens
+ Jonathan
+ Joseph Perry
+ Joshua Horowitz
+ Julia Karmo
+ Kaitlin M.
+ Karishma Bhatia
+ Kat Suricata
+ Kathryn Long
+ Keith Olson
+ Kevin
+ Lawrence
+ Linda Booth Sweeney
+ Luming Hao
+ Maic Lopez Saenz
+ Majid Iqbal
+ Matt "Kupo" Roszak
+ Matt Warren
+ May-Li Khoe
+ Mekki MacAulay
+ Micah Cowan
+ Michael Sargent
+ Michelle Brown
+ Milan Pingel
+ Monika Denes
+ Mustafa Alic
+ Nick Schrag
+ Nikita
+ Noah Swartz
+ Olivia Brode-Roger
+ Pat Mächler
+ Peter McEvoy
+ Philip Tibitoski
+ Piotr Migdal
+ Rachel Nabors
+ Raphael D'Amico
+ Richard Hackathorn
+ Roland Tanglao
+ Ryan Barker
+ Sam Anderson
+ Sam Maynard
+ Samira Nedungadi
+ Sarah Barbour
+ sarah mathys
+ SB Sigma
+ Seanny123
+ Serguei Filimonov
+ Shane-o
+ Sigpipe
+ Sina Khanifar
+ Sylvain Francis
+ Syria Carys Sirlay
+ Thembers
+ Tom
+ Tony Onodi
+ Traci Lawson
+ Woo-Kyeong Choi
+ Yona
+ Zoe Bogner +
+ +
+ + +
+

+ and special thanks to my beta-testers, + who helped me squash the bugs and shame the kinks out of LOOPY: +

+
+ Alex Dytrych
+ Alex Jaffe
+ Amit Patel
+ Andrea Hawksley
+ Bret Victor
+ Brian Bucklew
+ Chris Walker
+ Dan Cook
+ Dylan Jones
+ Ichiro Lambe
+ Jack Schaedler
+ Joshua Horowitz
+ M Eifler
+ Saketh Kasibatla
+ Sebastian Morr
+ Tanya Short
+ Toph Tucker
+ Vi Hart +
+
+ +
+ + \ No newline at end of file diff --git a/v1.2/pages/credits/peep/aimee.png b/v1.2/pages/credits/peep/aimee.png new file mode 100644 index 0000000..09dfe08 Binary files /dev/null and b/v1.2/pages/credits/peep/aimee.png differ diff --git a/v1.2/pages/credits/peep/buster.png b/v1.2/pages/credits/peep/buster.png new file mode 100644 index 0000000..ec3d9cc Binary files /dev/null and b/v1.2/pages/credits/peep/buster.png differ diff --git a/v1.2/pages/credits/peep/chad.png b/v1.2/pages/credits/peep/chad.png new file mode 100644 index 0000000..dff54ec Binary files /dev/null and b/v1.2/pages/credits/peep/chad.png differ diff --git a/v1.2/pages/credits/peep/jared.png b/v1.2/pages/credits/peep/jared.png new file mode 100644 index 0000000..b38b39b Binary files /dev/null and b/v1.2/pages/credits/peep/jared.png differ diff --git a/v1.2/pages/credits/peep/ljt.png b/v1.2/pages/credits/peep/ljt.png new file mode 100644 index 0000000..62b8997 Binary files /dev/null and b/v1.2/pages/credits/peep/ljt.png differ diff --git a/v1.2/pages/credits/peep/mark.png b/v1.2/pages/credits/peep/mark.png new file mode 100644 index 0000000..6e7a2f8 Binary files /dev/null and b/v1.2/pages/credits/peep/mark.png differ diff --git a/v1.2/pages/credits/peep/matt.png b/v1.2/pages/credits/peep/matt.png new file mode 100644 index 0000000..7312d22 Binary files /dev/null and b/v1.2/pages/credits/peep/matt.png differ diff --git a/v1.2/pages/credits/peep/michael_duke.png b/v1.2/pages/credits/peep/michael_duke.png new file mode 100644 index 0000000..198ab95 Binary files /dev/null and b/v1.2/pages/credits/peep/michael_duke.png differ diff --git a/v1.2/pages/credits/peep/michael_huff.png b/v1.2/pages/credits/peep/michael_huff.png new file mode 100644 index 0000000..6664075 Binary files /dev/null and b/v1.2/pages/credits/peep/michael_huff.png differ diff --git a/v1.2/pages/credits/peep/natalie.png b/v1.2/pages/credits/peep/natalie.png new file mode 100644 index 0000000..2b83bc6 Binary files /dev/null and b/v1.2/pages/credits/peep/natalie.png differ diff --git a/v1.2/pages/credits/peep/nicholas.png b/v1.2/pages/credits/peep/nicholas.png new file mode 100644 index 0000000..0205c25 Binary files /dev/null and b/v1.2/pages/credits/peep/nicholas.png differ diff --git a/v1.2/pages/credits/peep/noel.png b/v1.2/pages/credits/peep/noel.png new file mode 100644 index 0000000..a87779a Binary files /dev/null and b/v1.2/pages/credits/peep/noel.png differ diff --git a/v1.2/pages/credits/peep/phil.png b/v1.2/pages/credits/peep/phil.png new file mode 100644 index 0000000..af39735 Binary files /dev/null and b/v1.2/pages/credits/peep/phil.png differ diff --git a/v1.2/pages/credits/peep/philippe.png b/v1.2/pages/credits/peep/philippe.png new file mode 100644 index 0000000..50e945e Binary files /dev/null and b/v1.2/pages/credits/peep/philippe.png differ diff --git a/v1.2/pages/credits/peep/thomas.png b/v1.2/pages/credits/peep/thomas.png new file mode 100644 index 0000000..514b9ac Binary files /dev/null and b/v1.2/pages/credits/peep/thomas.png differ diff --git a/v1.2/pages/credits/peep/travis.png b/v1.2/pages/credits/peep/travis.png new file mode 100644 index 0000000..bfa410c Binary files /dev/null and b/v1.2/pages/credits/peep/travis.png differ diff --git a/v1.2/pages/credits/peep/yu-han.png b/v1.2/pages/credits/peep/yu-han.png new file mode 100644 index 0000000..745f4a4 Binary files /dev/null and b/v1.2/pages/credits/peep/yu-han.png differ diff --git a/v1.2/pages/credits/polygon/aimee.png b/v1.2/pages/credits/polygon/aimee.png new file mode 100644 index 0000000..d967d00 Binary files /dev/null and b/v1.2/pages/credits/polygon/aimee.png differ diff --git a/v1.2/pages/credits/polygon/buster.png b/v1.2/pages/credits/polygon/buster.png new file mode 100644 index 0000000..fef4986 Binary files /dev/null and b/v1.2/pages/credits/polygon/buster.png differ diff --git a/v1.2/pages/credits/polygon/cedric.png b/v1.2/pages/credits/polygon/cedric.png new file mode 100644 index 0000000..fb3d4fc Binary files /dev/null and b/v1.2/pages/credits/polygon/cedric.png differ diff --git a/v1.2/pages/credits/polygon/chad.png b/v1.2/pages/credits/polygon/chad.png new file mode 100644 index 0000000..d16710e Binary files /dev/null and b/v1.2/pages/credits/polygon/chad.png differ diff --git a/v1.2/pages/credits/polygon/dylan.png b/v1.2/pages/credits/polygon/dylan.png new file mode 100644 index 0000000..65e10d2 Binary files /dev/null and b/v1.2/pages/credits/polygon/dylan.png differ diff --git a/v1.2/pages/credits/polygon/dylan_s.png b/v1.2/pages/credits/polygon/dylan_s.png new file mode 100644 index 0000000..8752a52 Binary files /dev/null and b/v1.2/pages/credits/polygon/dylan_s.png differ diff --git a/v1.2/pages/credits/polygon/feiya.png b/v1.2/pages/credits/polygon/feiya.png new file mode 100644 index 0000000..0f0c884 Binary files /dev/null and b/v1.2/pages/credits/polygon/feiya.png differ diff --git a/v1.2/pages/credits/polygon/glen.png b/v1.2/pages/credits/polygon/glen.png new file mode 100644 index 0000000..0ab0cb4 Binary files /dev/null and b/v1.2/pages/credits/polygon/glen.png differ diff --git a/v1.2/pages/credits/polygon/iago.png b/v1.2/pages/credits/polygon/iago.png new file mode 100644 index 0000000..6eee613 Binary files /dev/null and b/v1.2/pages/credits/polygon/iago.png differ diff --git a/v1.2/pages/credits/polygon/jared.png b/v1.2/pages/credits/polygon/jared.png new file mode 100644 index 0000000..8631cf5 Binary files /dev/null and b/v1.2/pages/credits/polygon/jared.png differ diff --git a/v1.2/pages/credits/polygon/karen.png b/v1.2/pages/credits/polygon/karen.png new file mode 100644 index 0000000..7cf01cf Binary files /dev/null and b/v1.2/pages/credits/polygon/karen.png differ diff --git a/v1.2/pages/credits/polygon/kate.png b/v1.2/pages/credits/polygon/kate.png new file mode 100644 index 0000000..3b6aa38 Binary files /dev/null and b/v1.2/pages/credits/polygon/kate.png differ diff --git a/v1.2/pages/credits/polygon/kevin.png b/v1.2/pages/credits/polygon/kevin.png new file mode 100644 index 0000000..d219dfb Binary files /dev/null and b/v1.2/pages/credits/polygon/kevin.png differ diff --git a/v1.2/pages/credits/polygon/klemen.png b/v1.2/pages/credits/polygon/klemen.png new file mode 100644 index 0000000..8d47f13 Binary files /dev/null and b/v1.2/pages/credits/polygon/klemen.png differ diff --git a/v1.2/pages/credits/polygon/kuerqing1024.png b/v1.2/pages/credits/polygon/kuerqing1024.png new file mode 100644 index 0000000..2730587 Binary files /dev/null and b/v1.2/pages/credits/polygon/kuerqing1024.png differ diff --git a/v1.2/pages/credits/polygon/ljt.png b/v1.2/pages/credits/polygon/ljt.png new file mode 100644 index 0000000..5dc4c0d Binary files /dev/null and b/v1.2/pages/credits/polygon/ljt.png differ diff --git a/v1.2/pages/credits/polygon/mark.png b/v1.2/pages/credits/polygon/mark.png new file mode 100644 index 0000000..50c71c0 Binary files /dev/null and b/v1.2/pages/credits/polygon/mark.png differ diff --git a/v1.2/pages/credits/polygon/matt.png b/v1.2/pages/credits/polygon/matt.png new file mode 100644 index 0000000..fa5132b Binary files /dev/null and b/v1.2/pages/credits/polygon/matt.png differ diff --git a/v1.2/pages/credits/polygon/michael_duke.png b/v1.2/pages/credits/polygon/michael_duke.png new file mode 100644 index 0000000..8bbd451 Binary files /dev/null and b/v1.2/pages/credits/polygon/michael_duke.png differ diff --git a/v1.2/pages/credits/polygon/michael_huff.png b/v1.2/pages/credits/polygon/michael_huff.png new file mode 100644 index 0000000..e762929 Binary files /dev/null and b/v1.2/pages/credits/polygon/michael_huff.png differ diff --git a/v1.2/pages/credits/polygon/michelle.png b/v1.2/pages/credits/polygon/michelle.png new file mode 100644 index 0000000..e2511cc Binary files /dev/null and b/v1.2/pages/credits/polygon/michelle.png differ diff --git a/v1.2/pages/credits/polygon/natalie.png b/v1.2/pages/credits/polygon/natalie.png new file mode 100644 index 0000000..5d6c505 Binary files /dev/null and b/v1.2/pages/credits/polygon/natalie.png differ diff --git a/v1.2/pages/credits/polygon/nicholas.png b/v1.2/pages/credits/polygon/nicholas.png new file mode 100644 index 0000000..8a907cd Binary files /dev/null and b/v1.2/pages/credits/polygon/nicholas.png differ diff --git a/v1.2/pages/credits/polygon/nimrod.png b/v1.2/pages/credits/polygon/nimrod.png new file mode 100644 index 0000000..9fb7940 Binary files /dev/null and b/v1.2/pages/credits/polygon/nimrod.png differ diff --git a/v1.2/pages/credits/polygon/noel.png b/v1.2/pages/credits/polygon/noel.png new file mode 100644 index 0000000..9d1a12a Binary files /dev/null and b/v1.2/pages/credits/polygon/noel.png differ diff --git a/v1.2/pages/credits/polygon/phil.png b/v1.2/pages/credits/polygon/phil.png new file mode 100644 index 0000000..15be551 Binary files /dev/null and b/v1.2/pages/credits/polygon/phil.png differ diff --git a/v1.2/pages/credits/polygon/philippe.png b/v1.2/pages/credits/polygon/philippe.png new file mode 100644 index 0000000..66d8b0f Binary files /dev/null and b/v1.2/pages/credits/polygon/philippe.png differ diff --git a/v1.2/pages/credits/polygon/rob.png b/v1.2/pages/credits/polygon/rob.png new file mode 100644 index 0000000..0776371 Binary files /dev/null and b/v1.2/pages/credits/polygon/rob.png differ diff --git a/v1.2/pages/credits/polygon/thomas.png b/v1.2/pages/credits/polygon/thomas.png new file mode 100644 index 0000000..df02041 Binary files /dev/null and b/v1.2/pages/credits/polygon/thomas.png differ diff --git a/v1.2/pages/credits/polygon/travis.png b/v1.2/pages/credits/polygon/travis.png new file mode 100644 index 0000000..9e549e3 Binary files /dev/null and b/v1.2/pages/credits/polygon/travis.png differ diff --git a/v1.2/pages/credits/polygon/william.png b/v1.2/pages/credits/polygon/william.png new file mode 100644 index 0000000..4ee8b3d Binary files /dev/null and b/v1.2/pages/credits/polygon/william.png differ diff --git a/v1.2/pages/credits/polygon/yu-han.png b/v1.2/pages/credits/polygon/yu-han.png new file mode 100644 index 0000000..3c56c1c Binary files /dev/null and b/v1.2/pages/credits/polygon/yu-han.png differ diff --git a/v1.2/pages/credits/polygon/zach.png b/v1.2/pages/credits/polygon/zach.png new file mode 100644 index 0000000..73bff9a Binary files /dev/null and b/v1.2/pages/credits/polygon/zach.png differ diff --git a/v1.2/pages/examples/favicon.png b/v1.2/pages/examples/favicon.png new file mode 100644 index 0000000..a1b03e2 Binary files /dev/null and b/v1.2/pages/examples/favicon.png differ diff --git a/v1.2/pages/examples/index.html b/v1.2/pages/examples/index.html new file mode 100644 index 0000000..3b86e21 --- /dev/null +++ b/v1.2/pages/examples/index.html @@ -0,0 +1,114 @@ + + + + + + LOOPY: Examples! + + + + + + + + + + +
+
+ +
+
basic
ecology
+
+
+ +
+
depression
& anxiety
+
+
+ +
+
automation
& job loss
+
+
+
+
+ +
+ + diff --git a/v1.2/pages/gif.html b/v1.2/pages/gif.html new file mode 100644 index 0000000..f1faf02 --- /dev/null +++ b/v1.2/pages/gif.html @@ -0,0 +1,21 @@ + + + + + + + + + Step 1: download LICEcap, + a free open-source tool to record GIFs (Windows/Mac only. Linux users, try + Peek) +

+ Step 2: record a GIF while playing around in LOOPY +

+ Step 3: ta-dah +

+
+ +
+ + \ No newline at end of file diff --git a/v1.2/pages/gifs.gif b/v1.2/pages/gifs.gif new file mode 100644 index 0000000..2e17cc3 Binary files /dev/null and b/v1.2/pages/gifs.gif differ diff --git a/v1.2/pages/howto.html b/v1.2/pages/howto.html new file mode 100644 index 0000000..46ec9ef --- /dev/null +++ b/v1.2/pages/howto.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/v1.2/pages/howto/1.png b/v1.2/pages/howto/1.png new file mode 100644 index 0000000..59e9deb Binary files /dev/null and b/v1.2/pages/howto/1.png differ diff --git a/v1.2/pages/howto/2.png b/v1.2/pages/howto/2.png new file mode 100644 index 0000000..35eabd0 Binary files /dev/null and b/v1.2/pages/howto/2.png differ diff --git a/v1.2/pages/howto/3.png b/v1.2/pages/howto/3.png new file mode 100644 index 0000000..69dc1ee Binary files /dev/null and b/v1.2/pages/howto/3.png differ diff --git a/v1.2/pages/howto/4.png b/v1.2/pages/howto/4.png new file mode 100644 index 0000000..405fb9e Binary files /dev/null and b/v1.2/pages/howto/4.png differ diff --git a/v1.2/pages/howto/5.png b/v1.2/pages/howto/5.png new file mode 100644 index 0000000..4cf4a46 Binary files /dev/null and b/v1.2/pages/howto/5.png differ diff --git a/v1.2/pages/page.css b/v1.2/pages/page.css new file mode 100644 index 0000000..5a4dadf --- /dev/null +++ b/v1.2/pages/page.css @@ -0,0 +1,185 @@ +body{ + background: #ddd; + font-family: Helvetica, Arial, sans-serif; + font-weight: 100; + font-size: 19px; + color: #222; + margin: 0; +} +.full{ + width:100%; + margin: 0; + display: block; +} +.shadow{ + width:100%; height: 100%; + position: fixed; + top:0; left:0; + box-shadow: inset 0 0 20px rgba(0,0,0,0.75); +} + +/********************************/ +/********************************/ + +#examples{ + width: 620px; + margin:0 auto; + overflow: hidden; +} + +#examples hr{ + border:none; + border-bottom: 2px dashed #aaa; + width: 560px; + margin: 0 auto; + margin-top: 15px; +} + +#more_examples{ + color: #333; + width: 500px; + margin: 30px auto; +} +#more_examples li{ + color: #666; + margin-bottom: 1em; + position: relative; + left: -0.8em; +} +#more_examples li a{ + color: #dd4040; +} +#more_examples li a:hover{ + color: #ee6060; +} +#more_examples li a.twitter{ + color: inherit; +} + +.example{ + display: block; + float: left; + width: 180px; + height: 180px; + + cursor: pointer; + transform: scale(1); + transition: all 0.2s ease-in-out; +} +.example:hover{ + transform: scale(1.1); +} +.example > div{ + width: 180px; + height: 180px; + background: #888; + border-radius: 100px; + float: left; + position: relative; +} +.example > div > div{ + font-size: 25px; + color: #fff; + width: 150px; + height: 55px; + position: absolute; + top:0; left:0; right:0; bottom:0; + margin: auto; + text-align: center; +} +.example:nth-child(n+2){ + margin-left: 19px; +} + +/********************************/ +/********************************/ + +#credits{ + width: 600px; + margin: 50px auto; + font-weight: 100; + color: #fff; + font-size: 20px; +} + +.credit_intro{ + font-size: 26px; +} +.credit_intro a{ + color: #dd3939; +} +.credit_intro a:hover{ + color: #ee6060; +} + +#credits hr{ + border:none; + border-bottom: 4px dashed #444; + margin-top: 30px; +} + +.credits_peeps{ + overflow: hidden; + padding-bottom: 20px; + text-align: center; +} +.credits_peeps > div{ + position: relative; + width: 150px; + height: 210px; + text-align: center; + display: inline-block; + margin-right: -6px; +} +.credits_peeps > div > img:nth-child(1){ + position: absolute; + left: 0; + width: 150px; + bottom: 30px; +} +.credits_peeps > div > img:nth-child(2){ + position: absolute; + width: 50px; + right: 5px; + bottom: 30px; +} +.credits_peeps > div > span{ + display: block; + position: absolute; + bottom:0; + width: 150px; + height: 20px; + text-transform: lowercase; +} + +.credits_polygons{ + margin-top: 15px; + overflow: hidden; + color: #ddd; + font-size: 18px; + padding-bottom: 20px; + text-align: center; +} +.credits_polygons > div{ + display: inline-block; +} +.credits_polygons > div > img{ + width: 40px; + position: relative; + top:10px; +} +.credits_polygons > div > span{ + text-transform: lowercase; +} + +.credits_names{ + margin-top: 30px; + overflow: hidden; + color: #bbb; + font-size: 16px; + padding-bottom: 20px; + text-align: center; + -webkit-columns: 150px 3; + -moz-columns: 150px 3; + columns: 150px 3; +} \ No newline at end of file