ctucx.git: gallery

static-site-generator for image-galleries [used @ photos.ctu.cx]

commit 422ffacf45424e996b393c85ea9025b8183d2cd0
Author: ctucx <c@ctu.cx>
Date: Sun, 23 Feb 2020 18:39:25 +0100

init
9 files changed, 1350 insertions(+), 0 deletions(-)
A
picture_gallery.nimble
|
15
+++++++++++++++
A
src/assets/album.html
|
131
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A
src/assets/exif.js
|
1
+
A
src/assets/iconic.svg
|
2
++
A
src/assets/ionicons.svg
|
2
++
A
src/assets/no_images.svg
|
2
++
A
src/assets/picture.html
|
175
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A
src/assets/style.css
|
855
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A
src/picture_gallery.nim
|
167
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
diff --git a/picture_gallery.nimble b/picture_gallery.nimble
@@ -0,0 +1,14 @@
+# Package
+
+version       = "0.1.0"
+author        = "ctucx"
+description   = "A new awesome nimble package"
+license       = "MIT"
+srcDir        = "src"
+bin           = @["picture_gallery"]
+
+
+
+# Dependencies
+requires "nim >= 1.0.6"
+requires "moustachu >= 0.14.0"+
\ No newline at end of file
diff --git a/src/assets/album.html b/src/assets/album.html
@@ -0,0 +1,131 @@
+<!DOCTYPE HTML>
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+		<title>ctucx' pics</title>
+
+		<link type="text/css" rel="stylesheet" href="/style.css">
+		<link rel="shortcut icon" href="/favicon.ico">
+
+		<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+	</head>
+	<body>
+
+		<header class="header">
+			{{#isSubalbum}}
+			<a class="button" title="back" href="..">
+				<svg class="iconic"><use xlink:href="/iconic.svg#chevron-left"></use></svg>
+			</a>
+			{{/isSubalbum}}
+
+			<a class="header-title">{{name}}</a>
+
+			{{#isSubalbum}}
+			<input type="checkbox" id="toggle">
+			<label for="toggle" style="display: block;" class="button button--info" title="Info">
+				<svg class="iconic"><use xlink:href="/iconic.svg#info"></use></svg>
+			</label>
+
+			<div class="sidebar">
+				<div class="sidebar-header">
+					<h1>About</h1>
+				</div>
+
+				<div class="sidebar-wrapper">
+					<div class="sidebar-divider">
+						<h1>Basics</h1>
+					</div>
+		
+					<table>
+						<tbody>
+							<tr>
+								<td>Title</td>
+								<td><span class="attr_title">{{name}}</span></td>
+							</tr>
+					 
+							<tr>
+								<td>Description</td>
+								<td><span class="attr_description">{{description}}</span></td>
+							</tr>	 
+						</tbody>
+					</table>
+				 
+					<div class="sidebar-divider">
+						<h1>Album</h1>
+					</div>
+				
+					<table>
+						<tbody>
+							<tr>
+								<td>Created</td>
+								<td><span class="attr_created">-</span></td>
+							</tr>
+						 
+							<tr>
+								<td>Subalbums</td>
+								<td><span class="attr_subalbums">0</span></td>
+							</tr>
+						 
+							<tr>
+								<td>Pictures</td>
+								<td><span class="attr_pictures">30</span></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			{{/isSubalbum}}
+		</header>
+
+		<div class="content contentZoomIn">
+			{{#hasSubalbums}}
+			{{#isSubalbum}}
+			<div class="divider">
+				<h1>Albums</h1>
+			</div>
+			{{/isSubalbum}}
+
+			{{#subalbums}}
+
+			<a href="{{name}}" class="album">
+				<img src="{{thumbnail1}}" alt="Photo thumbnail" width="200" height="200">
+				<img src="{{thumbnail2}}" alt="Photo thumbnail" width="200" height="200">
+				<img src="{{thumbnail3}}" alt="Photo thumbnail" width="200" height="200">
+				<span class="overlay">
+					<h1>{{name}}</h1>
+					<p>{{numPictures}} Pictures - {{numAlbums}} Albums</p>
+				</span>
+			</a>
+			{{/subalbums}}
+
+			{{#isSubalbum}}
+			<div class="divider">
+				<h1>Photos</h1>
+			</div>
+			{{/isSubalbum}}
+
+			{{/hasSubalbums}}
+
+			{{#pictures}}
+			<a href="{{name}}" class="photo">
+				<img src="thumbnails/{{name}}.png" alt="Photo thumbnail" width="200" height="200">
+				<span class="overlay">
+					<h1>2017.06</h1>
+					<p><span title="Camera Date"><svg class="iconic "><use xlink:href="/iconic.svg#camera-slr"></use></svg></span></p>
+				</span>
+			</a>
+			{{/pictures}}
+
+		</div>
+	</body>
+	{{#isSubalbum}}
+	<script type="text/javascript">
+		window.onkeyup = function(e) {
+			if (e.keyCode == 27) window.location = "..";
+			if (e.keyCode == 32) document.getElementById("toggle").checked = true;
+		}
+	</script>
+	{{/isSubalbum}}
+</html>
diff --git a/src/assets/exif.js b/src/assets/exif.js
@@ -0,0 +1 @@
+(function(){var d=!1,l=function(e){return e instanceof l?e:this instanceof l?void(this.EXIFwrapped=e):new l(e)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=l),exports.EXIF=l):this.EXIF=l;var u=l.Tags={36864:"ExifVersion",40960:"FlashpixVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37500:"MakerNote",37510:"UserComment",40964:"RelatedSoundFile",36867:"DateTimeOriginal",36868:"DateTimeDigitized",37520:"SubsecTime",37521:"SubsecTimeOriginal",37522:"SubsecTimeDigitized",33434:"ExposureTime",33437:"FNumber",34850:"ExposureProgram",34852:"SpectralSensitivity",34855:"ISOSpeedRatings",34856:"OECF",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureBias",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37396:"SubjectArea",37386:"FocalLength",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41492:"SubjectLocation",41493:"ExposureIndex",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRation",41989:"FocalLengthIn35mmFilm",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",40965:"InteroperabilityIFDPointer",42016:"ImageUniqueID"},c=l.TiffTags={256:"ImageWidth",257:"ImageHeight",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer",40965:"InteroperabilityIFDPointer",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",274:"Orientation",277:"SamplesPerPixel",284:"PlanarConfiguration",530:"YCbCrSubSampling",531:"YCbCrPositioning",282:"XResolution",283:"YResolution",296:"ResolutionUnit",273:"StripOffsets",278:"RowsPerStrip",279:"StripByteCounts",513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength",301:"TransferFunction",318:"WhitePoint",319:"PrimaryChromaticities",529:"YCbCrCoefficients",532:"ReferenceBlackWhite",306:"DateTime",270:"ImageDescription",271:"Make",272:"Model",305:"Software",315:"Artist",33432:"Copyright"},f=l.GPSTags={0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential"},g=l.IFD1Tags={256:"ImageWidth",257:"ImageHeight",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",273:"StripOffsets",274:"Orientation",277:"SamplesPerPixel",278:"RowsPerStrip",279:"StripByteCounts",282:"XResolution",283:"YResolution",284:"PlanarConfiguration",296:"ResolutionUnit",513:"JpegIFOffset",514:"JpegIFByteCount",529:"YCbCrCoefficients",530:"YCbCrSubSampling",531:"YCbCrPositioning",532:"ReferenceBlackWhite"},m=l.StringValues={ExposureProgram:{0:"Not defined",1:"Manual",2:"Normal program",3:"Aperture priority",4:"Shutter priority",5:"Creative program",6:"Action program",7:"Portrait mode",8:"Landscape mode"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{0:"Unknown",1:"Daylight",2:"Fluorescent",3:"Tungsten (incandescent light)",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 - 5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},SensingMethod:{1:"Not defined",2:"One-chip color area sensor",3:"Two-chip color area sensor",4:"Three-chip color area sensor",5:"Color sequential area sensor",7:"Trilinear sensor",8:"Color sequential linear sensor"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},SceneType:{1:"Directly photographed"},CustomRendered:{0:"Normal process",1:"Custom process"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},GainControl:{0:"None",1:"Low gain up",2:"High gain up",3:"Low gain down",4:"High gain down"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},SubjectDistanceRange:{0:"Unknown",1:"Macro",2:"Close view",3:"Distant view"},FileSource:{3:"DSC"},Components:{0:"",1:"Y",2:"Cb",3:"Cr",4:"R",5:"G",6:"B"}};function i(e){return!!e.exifdata}function r(i,o){function t(e){var t=p(e);i.exifdata=t||{};var n=function(e){var t=new DataView(e);d&&console.log("Got file of length "+e.byteLength);if(255!=t.getUint8(0)||216!=t.getUint8(1))return d&&console.log("Not a valid JPEG"),!1;var n=2,r=e.byteLength;for(;n<r;){if(l=n,56===(s=t).getUint8(l)&&66===s.getUint8(l+1)&&73===s.getUint8(l+2)&&77===s.getUint8(l+3)&&4===s.getUint8(l+4)&&4===s.getUint8(l+5)){var i=t.getUint8(n+7);i%2!=0&&(i+=1),0===i&&(i=4);var o=n+8+i,a=t.getUint16(n+6+i);return S(e,o,a)}n++}var s,l}(e);if(i.iptcdata=n||{},l.isXmpEnabled){var r=function(e){if(!("DOMParser"in self))return;var t=new DataView(e);d&&console.log("Got file of length "+e.byteLength);if(255!=t.getUint8(0)||216!=t.getUint8(1))return d&&console.log("Not a valid JPEG"),!1;var n=2,r=e.byteLength,i=new DOMParser;for(;n<r-4;){if("http"==y(t,n,4)){var o=n-1,a=t.getUint16(n-2)-1,s=y(t,o,a),l=s.indexOf("xmpmeta>")+8,u=(s=s.substring(s.indexOf("<x:xmpmeta"),l)).indexOf("x:xmpmeta")+10;s=s.slice(0,u)+'xmlns:Iptc4xmpCore="http://iptc.org/std/Iptc4xmpCore/1.0/xmlns/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tiff="http://ns.adobe.com/tiff/1.0/" xmlns:plus="http://schemas.android.com/apk/lib/com.google.android.gms.plus" xmlns:ext="http://www.gettyimages.com/xsltExtension/1.0" xmlns:exif="http://ns.adobe.com/exif/1.0/" xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:crs="http://ns.adobe.com/camera-raw-settings/1.0/" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:Iptc4xmpExt="http://iptc.org/std/Iptc4xmpExt/2008-02-29/" '+s.slice(u);var c=i.parseFromString(s,"text/xml");return x(c)}n++}}(e);i.xmpdata=r||{}}o&&o.call(i)}var e,n,r;if(i.src)if(/^data\:/i.test(i.src))t(function(e,t){t=t||e.match(/^data\:([^\;]+)\;base64,/im)[1]||"",e=e.replace(/^data\:([^\;]+)\;base64,/gim,"");for(var n=atob(e),r=n.length,i=new ArrayBuffer(r),o=new Uint8Array(i),a=0;a<r;a++)o[a]=n.charCodeAt(a);return i}(i.src));else if(/^blob\:/i.test(i.src)){(s=new FileReader).onload=function(e){t(e.target.result)},e=i.src,n=function(e){s.readAsArrayBuffer(e)},(r=new XMLHttpRequest).open("GET",e,!0),r.responseType="blob",r.onload=function(e){200!=this.status&&0!==this.status||n(this.response)},r.send()}else{var a=new XMLHttpRequest;a.onload=function(){if(200!=this.status&&0!==this.status)throw"Could not load image";t(a.response),a=null},a.open("GET",i.src,!0),a.responseType="arraybuffer",a.send(null)}else if(self.FileReader&&(i instanceof self.Blob||i instanceof self.File)){var s;(s=new FileReader).onload=function(e){d&&console.log("Got file of length "+e.target.result.byteLength),t(e.target.result)},s.readAsArrayBuffer(i)}}function p(e){var t=new DataView(e);if(d&&console.log("Got file of length "+e.byteLength),255!=t.getUint8(0)||216!=t.getUint8(1))return d&&console.log("Not a valid JPEG"),!1;for(var n,r=2,i=e.byteLength;r<i;){if(255!=t.getUint8(r))return d&&console.log("Not a valid marker at offset "+r+", found: "+t.getUint8(r)),!1;if(n=t.getUint8(r+1),d&&console.log(n),225==n)return d&&console.log("Found 0xFFE1 marker"),o(t,r+4,t.getUint16(r+2));r+=2+t.getUint16(r+2)}}var h={120:"caption",110:"credit",25:"keywords",55:"dateCreated",80:"byline",85:"bylineTitle",122:"captionWriter",105:"headline",116:"copyright",15:"category"};function S(e,t,n){for(var r,i,o,a,s=new DataView(e),l={},u=t;u<t+n;)28===s.getUint8(u)&&2===s.getUint8(u+1)&&(a=s.getUint8(u+2))in h&&((o=s.getInt16(u+3))+5,i=h[a],r=y(s,u+5,o),l.hasOwnProperty(i)?l[i]instanceof Array?l[i].push(r):l[i]=[l[i],r]:l[i]=r),u++;return l}function P(e,t,n,r,i){var o,a,s,l=e.getUint16(n,!i),u={};for(s=0;s<l;s++)o=n+12*s+2,!(a=r[e.getUint16(o,!i)])&&d&&console.log("Unknown tag: "+e.getUint16(o,!i)),u[a]=F(e,o,t,n,i);return u}function F(e,t,n,r,i){var o,a,s,l,u,c,d=e.getUint16(t+2,!i),f=e.getUint32(t+4,!i),g=e.getUint32(t+8,!i)+n;switch(d){case 1:case 7:if(1==f)return e.getUint8(t+8,!i);for(o=4<f?g:t+8,a=[],l=0;l<f;l++)a[l]=e.getUint8(o+l);return a;case 2:return y(e,o=4<f?g:t+8,f-1);case 3:if(1==f)return e.getUint16(t+8,!i);for(o=2<f?g:t+8,a=[],l=0;l<f;l++)a[l]=e.getUint16(o+2*l,!i);return a;case 4:if(1==f)return e.getUint32(t+8,!i);for(a=[],l=0;l<f;l++)a[l]=e.getUint32(g+4*l,!i);return a;case 5:if(1==f)return u=e.getUint32(g,!i),c=e.getUint32(g+4,!i),(s=new Number(u/c)).numerator=u,s.denominator=c,s;for(a=[],l=0;l<f;l++)u=e.getUint32(g+8*l,!i),c=e.getUint32(g+4+8*l,!i),a[l]=new Number(u/c),a[l].numerator=u,a[l].denominator=c;return a;case 9:if(1==f)return e.getInt32(t+8,!i);for(a=[],l=0;l<f;l++)a[l]=e.getInt32(g+4*l,!i);return a;case 10:if(1==f)return e.getInt32(g,!i)/e.getInt32(g+4,!i);for(a=[],l=0;l<f;l++)a[l]=e.getInt32(g+8*l,!i)/e.getInt32(g+4+8*l,!i);return a}}function y(e,t,r){var i="";for(n=t;n<t+r;n++)i+=String.fromCharCode(e.getUint8(n));return i}function o(e,t){if("Exif"!=y(e,t,4))return d&&console.log("Not valid EXIF data! "+y(e,t,4)),!1;var n,r,i,o,a,s=t+6;if(18761==e.getUint16(s))n=!1;else{if(19789!=e.getUint16(s))return d&&console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"),!1;n=!0}if(42!=e.getUint16(s+2,!n))return d&&console.log("Not valid TIFF data! (no 0x002A)"),!1;var l=e.getUint32(s+4,!n);if(l<8)return d&&console.log("Not valid TIFF data! (First offset less than 8)",e.getUint32(s+4,!n)),!1;if((r=P(e,s,s+l,c,n)).ExifIFDPointer)for(i in o=P(e,s,s+r.ExifIFDPointer,u,n)){switch(i){case"LightSource":case"Flash":case"MeteringMode":case"ExposureProgram":case"SensingMethod":case"SceneCaptureType":case"SceneType":case"CustomRendered":case"WhiteBalance":case"GainControl":case"Contrast":case"Saturation":case"Sharpness":case"SubjectDistanceRange":case"FileSource":o[i]=m[i][o[i]];break;case"ExifVersion":case"FlashpixVersion":o[i]=String.fromCharCode(o[i][0],o[i][1],o[i][2],o[i][3]);break;case"ComponentsConfiguration":o[i]=m.Components[o[i][0]]+m.Components[o[i][1]]+m.Components[o[i][2]]+m.Components[o[i][3]]}r[i]=o[i]}if(r.GPSInfoIFDPointer)for(i in a=P(e,s,s+r.GPSInfoIFDPointer,f,n)){switch(i){case"GPSVersionID":a[i]=a[i][0]+"."+a[i][1]+"."+a[i][2]+"."+a[i][3]}r[i]=a[i]}return r.thumbnail=function(e,t,n,r){var i,o,a,s,l=(o=t+n,a=r,s=(i=e).getUint16(o,!a),i.getUint32(o+2+12*s,!a));if(!l)return{};if(l>e.byteLength)return{};var u=P(e,t,t+l,g,r);if(u.Compression)switch(u.Compression){case 6:if(u.JpegIFOffset&&u.JpegIFByteCount){var c=t+u.JpegIFOffset,d=u.JpegIFByteCount;u.blob=new Blob([new Uint8Array(e.buffer,c,d)],{type:"image/jpeg"})}break;case 1:console.log("Thumbnail image format is TIFF, which is not implemented.");break;default:console.log("Unknown thumbnail image format '%s'",u.Compression)}else 2==u.PhotometricInterpretation&&console.log("Thumbnail image format is RGB, which is not implemented.");return u}(e,s,l,n),r}function b(e){var t={};if(1==e.nodeType){if(0<e.attributes.length){t["@attributes"]={};for(var n=0;n<e.attributes.length;n++){var r=e.attributes.item(n);t["@attributes"][r.nodeName]=r.nodeValue}}}else if(3==e.nodeType)return e.nodeValue;if(e.hasChildNodes())for(var i=0;i<e.childNodes.length;i++){var o=e.childNodes.item(i),a=o.nodeName;if(null==t[a])t[a]=b(o);else{if(null==t[a].push){var s=t[a];t[a]=[],t[a].push(s)}t[a].push(b(o))}}return t}function x(e){try{var t={};if(0<e.children.length)for(var n=0;n<e.children.length;n++){var r=e.children.item(n),i=r.attributes;for(var o in i){var a=i[o],s=a.nodeName,l=a.nodeValue;void 0!==s&&(t[s]=l)}var u=r.nodeName;if(void 0===t[u])t[u]=b(r);else{if(void 0===t[u].push){var c=t[u];t[u]=[],t[u].push(c)}t[u].push(b(r))}}else t=e.textContent;return t}catch(e){console.log(e.message)}}l.enableXmp=function(){l.isXmpEnabled=!0},l.disableXmp=function(){l.isXmpEnabled=!1},l.getData=function(e,t){return!((self.Image&&e instanceof self.Image||self.HTMLImageElement&&e instanceof self.HTMLImageElement)&&!e.complete)&&(i(e)?t&&t.call(e):r(e,t),!0)},l.getTag=function(e,t){if(i(e))return e.exifdata[t]},l.getIptcTag=function(e,t){if(i(e))return e.iptcdata[t]},l.getAllTags=function(e){if(!i(e))return{};var t,n=e.exifdata,r={};for(t in n)n.hasOwnProperty(t)&&(r[t]=n[t]);return r},l.getAllIptcTags=function(e){if(!i(e))return{};var t,n=e.iptcdata,r={};for(t in n)n.hasOwnProperty(t)&&(r[t]=n[t]);return r},l.pretty=function(e){if(!i(e))return"";var t,n=e.exifdata,r="";for(t in n)n.hasOwnProperty(t)&&("object"==typeof n[t]?n[t]instanceof Number?r+=t+" : "+n[t]+" ["+n[t].numerator+"/"+n[t].denominator+"]\r\n":r+=t+" : ["+n[t].length+" values]\r\n":r+=t+" : "+n[t]+"\r\n");return r},l.readFromBinaryFile=function(e){return p(e)},"function"==typeof define&&define.amd&&define("exif-js",[],function(){return l})}).call(this);
diff --git a/src/assets/iconic.svg b/src/assets/iconic.svg
@@ -0,0 +1 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg"><defs><symbol id="account-login" viewBox="0 0 8 8"><path d="M3 0v1h4v5h-4v1h5v-7h-5zm1 2v1h-4v1h4v1l2-1.5-2-1.5z"/></symbol><symbol id="account-logout" viewBox="0 0 8 8"><path d="M3 0v1h4v5h-4v1h5v-7h-5zm-1 2l-2 1.5 2 1.5v-1h4v-1h-4v-1z"/></symbol><symbol id="action-redo" viewBox="0 0 8 8"><path d="M3.5 0c-1.93 0-3.5 1.57-3.5 3.5 0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v.5h-1l2 2 2-2h-1v-.5c0-1.93-1.57-3.5-3.5-3.5z" transform="translate(0 1)"/></symbol><symbol id="action-undo" viewBox="0 0 8 8"><path d="M4.5 0c-1.93 0-3.5 1.57-3.5 3.5v.5h-1l2 2 2-2h-1v-.5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5c0-1.93-1.57-3.5-3.5-3.5z" transform="translate(0 1)"/></symbol><symbol id="align-center" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm1 2v1h6v-1h-6zm-1 2v1h8v-1h-8zm1 2v1h6v-1h-6z"/></symbol><symbol id="align-left" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm0 2v1h6v-1h-6zm0 2v1h8v-1h-8zm0 2v1h6v-1h-6z"/></symbol><symbol id="align-right" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm2 2v1h6v-1h-6zm-2 2v1h8v-1h-8zm2 2v1h6v-1h-6z"/></symbol><symbol id="aperture" viewBox="0 0 8 8"><path d="M4 0c-.69 0-1.336.19-1.906.5l3.219 2.344.719-2.25c-.59-.36-1.281-.594-2.031-.594zm-2.75 1.125c-.76.73-1.25 1.735-1.25 2.875 0 .25.022.489.063.719l3.094-2.219-1.906-1.375zm5.625.125l-1.219 3.75h2.219c.08-.32.125-.65.125-1 0-1.07-.435-2.03-1.125-2.75zm-4.719 3.188l-1.75 1.281c.55 1.13 1.595 1.989 2.875 2.219l-1.125-3.5zm1.563 1.563l.625 1.969c1.33-.11 2.454-.879 3.094-1.969h-3.719z"/></symbol><symbol id="arrow-bottom" viewBox="0 0 8 8"><path d="M2 0v5h-2l2.531 3 2.469-3h-2v-5h-1z" transform="translate(1)"/></symbol><symbol id="arrow-circle-bottom" viewBox="0 0 8 8"><path d="M4 0c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-1 1h2v3h2l-3 3-3-3h2v-3z"/></symbol><symbol id="arrow-circle-left" viewBox="0 0 8 8"><path d="M4 0c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 1v2h3v2h-3v2l-3-3 3-3z"/></symbol><symbol id="arrow-circle-right" viewBox="0 0 8 8"><path d="M4 0c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 1l3 3-3 3v-2h-3v-2h3v-2z"/></symbol><symbol id="arrow-circle-top" viewBox="0 0 8 8"><path d="M4 0c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 1l3 3h-2v3h-2v-3h-2l3-3z"/></symbol><symbol id="arrow-left" viewBox="0 0 8 8"><path d="M3 0l-3 2.531 3 2.469v-2h5v-1h-5v-2z" transform="translate(0 1)"/></symbol><symbol id="arrow-right" viewBox="0 0 8 8"><path d="M5 0v2h-5v1h5v2l3-2.531-3-2.469z" transform="translate(0 1)"/></symbol><symbol id="arrow-thick-bottom" viewBox="0 0 8 8"><path d="M2 0v5h-2l3.031 3 2.969-3h-2v-5h-2z" transform="translate(1)"/></symbol><symbol id="arrow-thick-left" viewBox="0 0 8 8"><path d="M3 0l-3 3.031 3 2.969v-2h5v-2h-5v-2z" transform="translate(0 1)"/></symbol><symbol id="arrow-thick-right" viewBox="0 0 8 8"><path d="M5 0v2h-5v2h5v2l3-3.031-3-2.969z" transform="translate(0 1)"/></symbol><symbol id="arrow-thick-top" viewBox="0 0 8 8"><path d="M2.969 0l-2.969 3h2v5h2v-5h2l-3.031-3z" transform="translate(1)"/></symbol><symbol id="arrow-top" viewBox="0 0 8 8"><path d="M2.469 0l-2.469 3h2v5h1v-5h2l-2.531-3z" transform="translate(1)"/></symbol><symbol id="audio-spectrum" viewBox="0 0 8 8"><path d="M4 0v8h1v-8h-1zm-2 1v6h1v-6h-1zm4 1v4h1v-4h-1zm-6 1v2h1v-2h-1z"/></symbol><symbol id="audio" viewBox="0 0 8 8"><path d="M1.188 0c-.734.722-1.188 1.748-1.188 2.844 0 1.095.454 2.09 1.188 2.813l.688-.719c-.546-.538-.875-1.269-.875-2.094s.329-1.587.875-2.125l-.688-.719zm5.625 0l-.688.719c.552.552.875 1.289.875 2.125 0 .836-.327 1.554-.875 2.094l.688.719c.732-.72 1.188-1.708 1.188-2.813 0-1.104-.459-2.115-1.188-2.844zm-4.219 1.406c-.362.362-.594.889-.594 1.438 0 .548.232 1.045.594 1.406l.688-.719c-.178-.178-.281-.416-.281-.688 0-.272.103-.54.281-.719l-.688-.719zm2.813 0l-.688.719c.183.183.281.434.281.719s-.099.505-.281.688l.688.719c.357-.357.594-.851.594-1.406 0-.555-.236-1.08-.594-1.438z" transform="translate(0 1)"/></symbol><symbol id="badge" viewBox="0 0 8 8"><path d="M2 0c-1.105 0-2 .895-2 2s.895 2 2 2 2-.895 2-2-.895-2-2-2zm-1 4.813v3.188l1-1 1 1v-3.188c-.31.11-.65.188-1 .188s-.69-.077-1-.188z" transform="translate(2)"/></symbol><symbol id="ban" viewBox="0 0 8 8"><path d="M4 0c-2.203 0-4 1.797-4 4 0 2.203 1.797 4 4 4 2.203 0 4-1.797 4-4 0-2.203-1.797-4-4-4zm0 1c.655 0 1.258.209 1.75.563l-4.188 4.188c-.353-.492-.563-1.095-.563-1.75 0-1.663 1.337-3 3-3zm2.438 1.25c.353.492.563 1.095.563 1.75 0 1.663-1.337 3-3 3-.655 0-1.258-.209-1.75-.563l4.188-4.188z"/></symbol><symbol id="bar-chart" viewBox="0 0 8 8"><path d="M0 0v7h8v-1h-7v-6h-1zm5 0v5h2v-5h-2zm-3 2v3h2v-3h-2z"/></symbol><symbol id="basket" viewBox="0 0 8 8"><path d="M3.969 0c-.127.011-.259.083-.344.188l-2.344 2.813h-1.281v1h1v3.656c0 .18.164.344.344.344h5.313c.18 0 .344-.164.344-.344v-3.656h1v-1h-1.281c-.274-.329-2.387-2.866-2.406-2.875-.105-.09-.216-.136-.344-.125zm.031 1.281l1.438 1.719h-2.875l1.438-1.719zm-1.5 3.719c.28 0 .5.22.5.5v1c0 .28-.22.5-.5.5s-.5-.22-.5-.5v-1c0-.28.22-.5.5-.5zm3 0c.28 0 .5.22.5.5v1c0 .28-.22.5-.5.5s-.5-.22-.5-.5v-1c0-.28.22-.5.5-.5z"/></symbol><symbol id="battery-empty" viewBox="0 0 8 8"><path d="M.094 0c-.06 0-.094.034-.094.094v5.813c0 .06.034.094.094.094h6.813c.06 0 .094-.034.094-.094v-1.906h1v-2h-1v-1.906c0-.06-.034-.094-.094-.094h-6.813zm.906 1h5v4h-5v-4z" transform="translate(0 1)"/></symbol><symbol id="battery-full" viewBox="0 0 8 8"><path d="M.094 0c-.06 0-.094.034-.094.094v5.813c0 .06.034.094.094.094h6.813c.06 0 .094-.034.094-.094v-1.906h1v-2h-1v-1.906c0-.06-.034-.094-.094-.094h-6.813z" transform="translate(0 1)"/></symbol><symbol id="beaker" viewBox="0 0 8 8"><path d="M1.344 0a.502.502 0 0 0 .156 1h.5v1.406c-.088.172-1.194 2.313-1.656 3.094-.153.268-.344.612-.344 1.063 0 .383.139.764.406 1.031.26.26.643.406 1.031.406h5.125c.383 0 .764-.139 1.031-.406.26-.26.406-.643.406-1.031 0-.452-.194-.801-.344-1.063-.463-.78-1.568-2.922-1.656-3.094v-1.406h.5a.5.5 0 1 0 0-1h-5a.5.5 0 0 0-.094 0 .502.502 0 0 0-.063 0zm1.656 1h2v1.625l.063.094s.652 1.233 1.219 2.281h-4.563c.567-1.049 1.219-2.281 1.219-2.281l.063-.094v-1.625z"/></symbol><symbol id="bell" viewBox="0 0 8 8"><path d="M4 0c-1.1 0-2 .9-2 2 0 1.04-.524 1.976-1.344 2.656-.42.34-.656.824-.656 1.344h8c0-.52-.236-1.004-.656-1.344-.82-.68-1.344-1.616-1.344-2.656 0-1.1-.9-2-2-2zm-1 7c0 .55.45 1 1 1s1-.45 1-1h-2z"/></symbol><symbol id="bluetooth" viewBox="0 0 8 8"><path d="M1.5 0v2.5l-.75-.75-.75.75 1.5 1.5-1.5 1.5.75.75.75-.75v2.5h.5l3.5-2.5-2.25-1.531 2.25-1.469-3.5-2.5h-.5zm1 1.5l1.5 1-1.5 1v-2zm0 3l1.5 1-1.5 1v-2z" transform="translate(1)"/></symbol><symbol id="bold" viewBox="0 0 8 8"><path d="M0 0v1c.55 0 1 .45 1 1v4c0 .55-.45 1-1 1v1h5.5c1.38 0 2.5-1.12 2.5-2.5 0-1-.588-1.85-1.438-2.25.27-.34.438-.78.438-1.25 0-1.1-.9-2-2-2h-5zm3 1h1c.55 0 1 .45 1 1s-.45 1-1 1h-1v-2zm0 3h1.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-1.5v-3z"/></symbol><symbol id="bolt" viewBox="0 0 8 8"><path d="M3 0l-3 5h2v3l3-5h-2v-3z" transform="translate(1)"/></symbol><symbol id="book" viewBox="0 0 8 8"><path d="M1 0c-.07 0-.127.001-.188.031-.39.08-.701.391-.781.781-.03.06-.031.118-.031.188v5.5c0 .83.67 1.5 1.5 1.5h5.5v-1h-5.5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5h5.5v-5.5c0-.28-.22-.5-.5-.5h-.5v3l-1-1-1 1v-3h-3z"/></symbol><symbol id="bookmark" viewBox="0 0 8 8"><path d="M0 0v8l2-2 2 2v-8h-4z" transform="translate(2)"/></symbol><symbol id="box" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm0 2v5.906c0 .06.034.094.094.094h7.813c.06 0 .094-.034.094-.094v-5.906h-2.969v1.031h-2.031v-1.031h-3z"/></symbol><symbol id="briefcase" viewBox="0 0 8 8"><path d="M3 0c-.554 0-1 .458-1 1v1h-1.906c-.06 0-.094.034-.094.094v2.406c0 .28.22.5.5.5h7c.28 0 .5-.22.5-.5v-2.406c0-.06-.034-.094-.094-.094h-1.906v-1c0-.542-.446-1-1-1h-2zm0 1h2v1h-2v-1zm-3 4.906v2c0 .06.034.094.094.094h7.813c.06 0 .094-.034.094-.094v-2c-.16.05-.32.094-.5.094h-7c-.18 0-.34-.044-.5-.094z"/></symbol><symbol id="british-pound" viewBox="0 0 8 8"><path d="M3 0c-.619 0-1.159.262-1.5.688-.341.426-.5.986-.5 1.563 0 .692.165 1.245.25 1.75h-1.25v1h1.219c-.112.448-.37.964-1.063 1.656l-.156.125v1.219h6v-1h-4.906c.641-.729.982-1.397 1.125-2h1.781v-1h-1.719c-.078-.683-.281-1.242-.281-1.75 0-.394.115-.731.281-.938.166-.207.368-.313.719-.313.394 0 .609.109.75.25.141.141.25.356.25.75h1c0-.576-.165-1.102-.531-1.469-.366-.366-.893-.531-1.469-.531z" transform="translate(1)"/></symbol><symbol id="browser" viewBox="0 0 8 8"><path d="M.344 0a.5.5 0 0 0-.344.5v7a.5.5 0 0 0 .5.5h7a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.5-.5h-7a.5.5 0 0 0-.094 0 .5.5 0 0 0-.063 0zm1.156 1c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5zm2 0h3c.28 0 .5.22.5.5s-.22.5-.5.5h-3c-.28 0-.5-.22-.5-.5s.22-.5.5-.5zm-2.5 2h6v4h-6v-4z"/></symbol><symbol id="brush" viewBox="0 0 8 8"><path d="M7.438.031c-.029-.001-.037.016-.063.031l-3.75 2.656c-.04.03-.095.106-.125.156l-.125.25c.719.229 1.271.781 1.5 1.5l.25-.125c.05-.02.126-.075.156-.125l2.656-3.75c.03-.04.04-.116 0-.156l-.406-.406c-.02-.02-.065-.03-.094-.031zm-4.781 3.969c-.73 0-1.313.614-1.313 1.344 0 .99-.544 1.821-1.344 2.281.4.23.864.375 1.344.375 1.48 0 2.656-1.176 2.656-2.656 0-.73-.604-1.344-1.344-1.344z"/></symbol><symbol id="bug" viewBox="0 0 8 8"><path d="M3.5 0c-1.19 0-1.978 1.69-1.188 2.5-.09.07-.196.137-.281.219l-1.313-.656a.5.5 0 0 0-.344-.063.5.5 0 0 0-.094.938l1.156.563c-.09.156-.186.328-.25.5h-.688a.5.5 0 0 0-.094 0 .502.502 0 1 0 .094 1h.5c0 .227.023.445.063.656l-.781.406a.5.5 0 1 0 .438.875l.656-.344c.245.46.59.844 1 1.094.35-.19.625-.439.625-.719v-1.438a.5.5 0 0 0 0-.094v-.813a.5.5 0 0 0 0-.219c.045-.231.254-.406.5-.406.28 0 .5.22.5.5v.875a.5.5 0 0 0 0 .094v.063a.5.5 0 0 0 0 .094v1.344c0 .27.275.497.625.688.41-.245.755-.604 1-1.063l.656.344a.5.5 0 1 0 .438-.875l-.781-.406c.04-.211.063-.429.063-.656h.5a.5.5 0 1 0 0-1h-.688c-.064-.172-.16-.344-.25-.5l1.156-.563a.5.5 0 0 0-.313-.938.5.5 0 0 0-.125.063l-1.313.656c-.086-.082-.191-.149-.281-.219.78-.83.003-2.5-1.188-2.5z"/></symbol><symbol id="bullhorn" viewBox="0 0 8 8"><path d="M6.094 0c-.03 0-.06.022-.094.031v5.969c.033.007.065 0 .094 0h.813c.06 0 .094-.034.094-.094v-5.813c0-.06-.034-.094-.094-.094h-.813zm-1.094.5l-2.906 1.469c-.05.02-.127.031-.188.031h-1.813c-.06 0-.094.034-.094.094v1.813c0 .06.034.094.094.094h.906l1.031 2.719c.11.25.406.36.656.25.25-.11.36-.406.25-.656l-.719-1.781c.033-.136.136-.25.281-.25v-.031l2.5 1.25v-5z"/></symbol><symbol id="calculator" viewBox="0 0 8 8"><path d="M.094 0c-.06 0-.094.034-.094.094v7.813c0 .06.034.094.094.094h6.813c.06 0 .094-.034.094-.094v-7.813c0-.06-.034-.094-.094-.094h-6.813zm.906 1h5v2h-5v-2zm0 3h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v3h-1v-3zm-4 2h1v1h-1v-1zm2 0h1v1h-1v-1z"/></symbol><symbol id="calendar" viewBox="0 0 8 8"><path d="M0 0v2h7v-2h-7zm0 3v4.906c0 .06.034.094.094.094h6.813c.06 0 .094-.034.094-.094v-4.906h-7zm1 1h1v1h-1v-1zm2 0h1v1h-1v-1zm2 0h1v1h-1v-1zm-4 2h1v1h-1v-1zm2 0h1v1h-1v-1z"/></symbol><symbol id="camera-slr" viewBox="0 0 8 8"><path d="M4.094 0c-.06 0-.105.044-.125.094l-.938 1.813c-.02.05-.065.094-.125.094h-1.406c-.83 0-1.5.67-1.5 1.5v4.406c0 .06.034.094.094.094h7.813c.06 0 .094-.034.094-.094v-5.813c0-.06-.034-.094-.094-.094h-.813c-.06 0-.105-.044-.125-.094l-.938-1.813c-.02-.05-.065-.094-.125-.094h-1.813zm-2.594 3c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5zm3.5 0c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm0 1c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1z"/></symbol><symbol id="caret-bottom" viewBox="0 0 8 8"><path d="M0 0l4 4 4-4h-8z" transform="translate(0 2)"/></symbol><symbol id="caret-left" viewBox="0 0 8 8"><path d="M4 0l-4 4 4 4v-8z" transform="translate(2)"/></symbol><symbol id="caret-right" viewBox="0 0 8 8"><path d="M0 0v8l4-4-4-4z" transform="translate(2)"/></symbol><symbol id="caret-top" viewBox="0 0 8 8"><path d="M4 0l-4 4h8l-4-4z" transform="translate(0 2)"/></symbol><symbol id="cart" viewBox="0 0 8 8"><path d="M.344 0a.502.502 0 0 0 .156 1h1.5l.094.25.406 1.25.406 1.25c.04.13.204.25.344.25h3.5c.14 0 .304-.12.344-.25l.813-2.531c.04-.12-.016-.219-.156-.219h-4.438l-.375-.719a.5.5 0 0 0-.438-.281h-2a.5.5 0 0 0-.094 0 .502.502 0 0 0-.063 0zm3.156 5c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm3 0c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5z" transform="translate(0 1)"/></symbol><symbol id="chat" viewBox="0 0 8 8"><path d="M0 0v5l1-1h1v-3h3v-1h-5zm3 2v4h4l1 1v-5h-5z"/></symbol><symbol id="check" viewBox="0 0 8 8"><path d="M6.406 0l-.719.688-2.781 2.781-.781-.781-.719-.688-1.406 1.406.688.719 1.5 1.5.719.688.719-.688 3.5-3.5.688-.719-1.406-1.406z" transform="translate(0 1)"/></symbol><symbol id="chevron-bottom" viewBox="0 0 8 8"><path d="M1.5 0l-1.5 1.5 4 4 4-4-1.5-1.5-2.5 2.5-2.5-2.5z" transform="translate(0 1)"/></symbol><symbol id="chevron-left" viewBox="0 0 8 8"><path d="M4 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z" transform="translate(1)"/></symbol><symbol id="chevron-right" viewBox="0 0 8 8"><path d="M1.5 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z" transform="translate(1)"/></symbol><symbol id="chevron-top" viewBox="0 0 8 8"><path d="M4 0l-4 4 1.5 1.5 2.5-2.5 2.5 2.5 1.5-1.5-4-4z" transform="translate(0 1)"/></symbol><symbol id="circle-check" viewBox="0 0 8 8"><path d="M4 0c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm2 1.781l.719.719-3.219 3.219-1.719-1.719.719-.719 1 1 2.5-2.5z"/></symbol><symbol id="circle-x" viewBox="0 0 8 8"><path d="M4 0c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-1.5 1.781l1.5 1.5 1.5-1.5.719.719-1.5 1.5 1.5 1.5-.719.719-1.5-1.5-1.5 1.5-.719-.719 1.5-1.5-1.5-1.5.719-.719z"/></symbol><symbol id="clipboard" viewBox="0 0 8 8"><path d="M3.5 0c-.28 0-.5.22-.5.5v.5h-.75c-.14 0-.25.11-.25.25v.75h3v-.75c0-.14-.11-.25-.25-.25h-.75v-.5c0-.28-.22-.5-.5-.5zm-3.25 1c-.14 0-.25.11-.25.25v6.5c0 .14.11.25.25.25h6.5c.14 0 .25-.11.25-.25v-6.5c0-.14-.11-.25-.25-.25h-.75v2h-5v-2h-.75z"/></symbol><symbol id="clock" viewBox="0 0 8 8"><path d="M4 0c-2.203 0-4 1.797-4 4 0 2.203 1.797 4 4 4 2.203 0 4-1.797 4-4 0-2.203-1.797-4-4-4zm0 1c1.663 0 3 1.337 3 3s-1.337 3-3 3-3-1.337-3-3 1.337-3 3-3zm-.5 1v2.219l.156.125.5.5.344.375.719-.719-.375-.344-.344-.344v-1.813h-1z"/></symbol><symbol id="cloud-download" viewBox="0 0 8 8"><path d="M4.5 0c-1.21 0-2.27.86-2.5 2-1.1 0-2 .9-2 2 0 .37.111.7.281 1h2.719v-.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v.5h1.906c.05-.16.094-.32.094-.5 0-.65-.42-1.29-1-1.5v-.5c0-1.38-1.12-2.5-2.5-2.5zm-.156 4a.5.5 0 0 0-.344.5v1.5h-1.5l2 2 2-2h-1.5v-1.5a.5.5 0 0 0-.594-.5.5.5 0 0 0-.063 0z"/></symbol><symbol id="cloud-upload" viewBox="0 0 8 8"><path d="M4.5 0c-1.21 0-2.27.86-2.5 2-1.1 0-2 .9-2 2 0 .37.111.7.281 1h2.219l2-2 2 2h1.406c.05-.16.094-.32.094-.5 0-.65-.42-1.29-1-1.5v-.5c0-1.38-1.12-2.5-2.5-2.5zm0 4.5l-2.5 2.5h2v.5a.5.5 0 1 0 1 0v-.5h2l-2.5-2.5z"/></symbol><symbol id="cloud" viewBox="0 0 8 8"><path d="M4.5 0c-1.21 0-2.27.86-2.5 2-1.1 0-2 .9-2 2s.9 2 2 2h4.5c.83 0 1.5-.67 1.5-1.5 0-.65-.42-1.29-1-1.5v-.5c0-1.38-1.12-2.5-2.5-2.5z" transform="translate(0 1)"/></symbol><symbol id="cloudy" viewBox="0 0 8 8"><path d="M2.5 0c-1.38 0-2.5 1.12-2.5 2.5 0 .39.09.743.25 1.063.3-.21.63-.379 1-.469.55-1.25 1.82-2.084 3.25-2.094-.46-.6-1.18-1-2-1zm2 2c-1.21 0-2.27.86-2.5 2-1.1 0-2 .9-2 2s.9 2 2 2h4.5c.83 0 1.5-.67 1.5-1.5 0-.65-.42-1.29-1-1.5v-.5c0-1.38-1.12-2.5-2.5-2.5z"/></symbol><symbol id="code" viewBox="0 0 8 8"><path d="M5 0l-3 6h1l3-6h-1zm-4 1l-1 2 1 2h1l-1-2 1-2h-1zm5 0l1 2-1 2h1l1-2-1-2h-1z" transform="translate(0 1)"/></symbol><symbol id="cog" viewBox="0 0 8 8"><path d="M3.5 0l-.5 1.188c-.1.04-.191.085-.281.125l-1.188-.5-.719.719.5 1.188c-.05.1-.095.181-.125.281l-1.188.5v1l1.188.5c.03.1.075.213.125.313l-.5 1.156.719.719 1.188-.5c.1.05.181.085.281.125l.5 1.188h1l.5-1.188c.1-.03.191-.085.281-.125l1.188.5.719-.719-.5-1.188c.04-.09.085-.181.125-.281l1.188-.5v-1l-1.188-.5c-.03-.09-.075-.191-.125-.281l.469-1.188-.688-.719-1.188.5c-.09-.04-.181-.095-.281-.125l-.5-1.188h-1zm.5 2.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5-1.5-.67-1.5-1.5.67-1.5 1.5-1.5z"/></symbol><symbol id="collapse-down" viewBox="0 0 8 8"><path d="M0 0v2h8v-2h-8zm2 3l2 2 2-2h-4zm-2 4v1h8v-1h-8z"/></symbol><symbol id="collapse-left" viewBox="0 0 8 8"><path d="M0 0v8h1v-8h-1zm6 0v8h2v-8h-2zm-1 2l-2 2 2 2v-4z"/></symbol><symbol id="collapse-right" viewBox="0 0 8 8"><path d="M0 0v8h2v-8h-2zm7 0v8h1v-8h-1zm-4 2v4l2-2-2-2z"/></symbol><symbol id="collapse-up" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm4 3l-2 2h4l-2-2zm-4 3v2h8v-2h-8z"/></symbol><symbol id="command" viewBox="0 0 8 8"><path d="M1.5 0c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5h.5v1h-.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5v-.5h1v.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5h-.5v-1h.5c.83 0 1.5-.67 1.5-1.5s-.67-1.5-1.5-1.5-1.5.67-1.5 1.5v.5h-1v-.5c0-.83-.67-1.5-1.5-1.5zm0 1c.28 0 .5.22.5.5v.5h-.5c-.28 0-.5-.22-.5-.5s.22-.5.5-.5zm4 0c.28 0 .5.22.5.5s-.22.5-.5.5h-.5v-.5c0-.28.22-.5.5-.5zm-2.5 2h1v1h-1v-1zm-1.5 2h.5v.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5.22-.5.5-.5zm3.5 0h.5c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5v-.5z"/></symbol><symbol id="comment-square" viewBox="0 0 8 8"><path d="M.094 0c-.06 0-.094.034-.094.094v5.813c0 .06.034.094.094.094h5.906l2 2v-7.906c0-.06-.034-.094-.094-.094h-7.813z"/></symbol><symbol id="compass" viewBox="0 0 8 8"><path d="M4 0c-2.203 0-4 1.797-4 4 0 2.203 1.797 4 4 4 2.203 0 4-1.797 4-4 0-2.203-1.797-4-4-4zm0 1c1.663 0 3 1.337 3 3s-1.337 3-3 3-3-1.337-3-3 1.337-3 3-3zm2 1l-3 1-1 3 3-1 1-3zm-2 1.5c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5z"/></symbol><symbol id="contrast" viewBox="0 0 8 8"><path d="M4 0c-2.203 0-4 1.797-4 4 0 2.203 1.797 4 4 4 2.203 0 4-1.797 4-4 0-2.203-1.797-4-4-4zm0 1c1.663 0 3 1.337 3 3s-1.337 3-3 3v-6z"/></symbol><symbol id="copywriting" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm0 2v1h5v-1h-5zm0 3v1h8v-1h-8zm0 2v1h6v-1h-6zm7.5 0c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5z"/></symbol><symbol id="credit-card" viewBox="0 0 8 8"><path d="M.25 0c-.14 0-.25.11-.25.25v.75h8v-.75c0-.14-.11-.25-.25-.25h-7.5zm-.25 2v3.75c0 .14.11.25.25.25h7.5c.14 0 .25-.11.25-.25v-3.75h-8zm1 2h1v1h-1v-1zm2 0h1v1h-1v-1z" transform="translate(0 1)"/></symbol><symbol id="crop" viewBox="0 0 8 8"><path d="M1 0v1h-1v1h1v5h5v1h1v-1h1v-1h-1v-4.5l1-1-.5-.5-1 1h-4.5v-1h-1zm1 2h3.5l-3.5 3.5v-3.5zm4 .5v3.5h-3.5l3.5-3.5z"/></symbol><symbol id="dashboard" viewBox="0 0 8 8"><path d="M4 0c-2.203 0-4 1.797-4 4 0 2.203 1.797 4 4 4 2.203 0 4-1.797 4-4 0-2.203-1.797-4-4-4zm0 1c1.663 0 3 1.337 3 3s-1.337 3-3 3-3-1.337-3-3 1.337-3 3-3zm0 1c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm-1.656 1a.5.5 0 0 0-.188.844l.906.906c-.023.085-.063.158-.063.25 0 .552.448 1 1 1s1-.448 1-1-.448-1-1-1c-.092 0-.165.039-.25.063l-.906-.906a.5.5 0 0 0-.438-.156.5.5 0 0 0-.063 0zm3.156 0c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5z"/></symbol><symbol id="data-transfer-download" viewBox="0 0 8 8"><path d="M3 0v3h-2l3 3 3-3h-2v-3h-2zm-3 7v1h8v-1h-8z"/></symbol><symbol id="data-transfer-upload" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm4 2l-3 3h2v3h2v-3h2l-3-3z"/></symbol><symbol id="delete" viewBox="0 0 8 8"><path d="M2 0l-2 3 2 3h6v-6h-6zm1.5.781l1.5 1.5 1.5-1.5.719.719-1.5 1.5 1.5 1.5-.719.719-1.5-1.5-1.5 1.5-.719-.719 1.5-1.5-1.5-1.5.719-.719z" transform="translate(0 1)"/></symbol><symbol id="dial" viewBox="0 0 8 8"><path d="M4 0c-2.201 0-4 1.799-4 4h1c0-1.659 1.341-3 3-3s3 1.341 3 3h1c0-2.201-1.799-4-4-4zm-.594 2.094c-.82.25-1.406 1.006-1.406 1.906 0 1.1.9 2 2 2s2-.9 2-2c0-.9-.586-1.656-1.406-1.906l-.594.875-.594-.875z" transform="translate(0 1)"/></symbol><symbol id="document" viewBox="0 0 8 8"><path d="M0 0v8h7v-4h-4v-4h-3zm4 0v3h3l-3-3zm-3 2h1v1h-1v-1zm0 2h1v1h-1v-1zm0 2h4v1h-4v-1z"/></symbol><symbol id="dollar" viewBox="0 0 8 8"><path d="M2 0v1h-.75c-.686 0-1.25.564-1.25 1.25v.5c0 .678.437 1.242 1.094 1.406l2.563.656c.143.036.344.296.344.438v.5c0 .134-.116.25-.25.25h-2.5c-.116 0-.212-.037-.25-.063v-.938h-1v1c0 .342.203.627.438.781.234.155.518.219.813.219h.75v1h1v-1h.75c.686 0 1.25-.564 1.25-1.25v-.5c0-.678-.437-1.242-1.094-1.406l-2.563-.656c-.143-.036-.344-.296-.344-.438v-.5c0-.134.116-.25.25-.25h2.5c.116 0 .212.037.25.063v.938h1v-1c0-.342-.203-.627-.438-.781-.234-.155-.518-.219-.813-.219h-.75v-1h-1z" transform="translate(1)"/></symbol><symbol id="double-quote-sans-left" viewBox="0 0 8 8"><path d="M0 0v6l3-3v-3h-3zm5 0v6l3-3v-3h-3z" transform="translate(0 1)"/></symbol><symbol id="double-quote-sans-right" viewBox="0 0 8 8"><path d="M3 0l-3 3v3h3v-6zm5 0l-3 3v3h3v-6z" transform="translate(0 1)"/></symbol><symbol id="double-quote-serif-left" viewBox="0 0 8 8"><path d="M3 0c-1.651 0-3 1.349-3 3v3h3v-3h-2c0-1.109.891-2 2-2v-1zm5 0c-1.651 0-3 1.349-3 3v3h3v-3h-2c0-1.109.891-2 2-2v-1z" transform="translate(0 1)"/></symbol><symbol id="double-quote-serif-right" viewBox="0 0 8 8"><path d="M0 0v3h2c0 1.109-.891 2-2 2v1c1.651 0 3-1.349 3-3v-3h-3zm5 0v3h2c0 1.109-.891 2-2 2v1c1.651 0 3-1.349 3-3v-3h-3z" transform="translate(0 1)"/></symbol><symbol id="droplet" viewBox="0 0 8 8"><path d="M3 0l-.344.344c-.11.11-2.656 2.685-2.656 4.875 0 1.65 1.35 3 3 3s3-1.35 3-3c0-2.19-2.546-4.765-2.656-4.875l-.344-.344zm-1.5 4.719c.28 0 .5.22.5.5 0 .55.45 1 1 1 .28 0 .5.22.5.5s-.22.5-.5.5c-1.1 0-2-.9-2-2 0-.28.22-.5.5-.5z" transform="translate(1)"/></symbol><symbol id="eject" viewBox="0 0 8 8"><path d="M4 0l-4 5h8l-4-5zm-4 6v2h8v-2h-8z"/></symbol><symbol id="elevator" viewBox="0 0 8 8"><path d="M3 0l-3 3h6l-3-3zm-3 5l3 3 3-3h-6z" transform="translate(1)"/></symbol><symbol id="ellipses" viewBox="0 0 8 8"><path d="M0 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2z" transform="translate(0 3)"/></symbol><symbol id="envelope-closed" viewBox="0 0 8 8"><path d="M0 0v1l4 2 4-2v-1h-8zm0 2v4h8v-4l-4 2-4-2z" transform="translate(0 1)"/></symbol><symbol id="envelope-open" viewBox="0 0 8 8"><path d="M4 0l-4 2v6h8v-6l-4-2zm0 1.125l3 1.5v1.875l-3 1.5-3-1.5v-1.875l3-1.5zm-2 1.875v1l2 1 2-1v-1h-4z"/></symbol><symbol id="euro" viewBox="0 0 8 8"><path d="M6 0c-1.858 0-3.398 1.278-3.844 3h-1.906l-.25 1h2c0 .345.073.68.156 1h-1.969l-.188 1h2.563c.696 1.185 1.969 2 3.438 2 .734 0 1.407-.215 2-.563v-1.219c-.531.479-1.225.781-2 .781-.888 0-1.671-.392-2.219-1h2.219l.156-1h-2.969c-.113-.317-.188-.643-.188-1h3.344l.156-1h-3.313c.414-1.16 1.507-2 2.813-2 .655 0 1.258.209 1.75.563l.156-1.063c-.57-.313-1.213-.5-1.906-.5z" transform="translate(-1)"/></symbol><symbol id="excerpt" viewBox="0 0 8 8"><path d="M0 0v1h7v-1h-7zm0 2v1h5v-1h-5zm0 2v1h8v-1h-8zm0 2v1h1v-1h-1zm2 0v1h1v-1h-1zm2 0v1h1v-1h-1z"/></symbol><symbol id="expand-down" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm2 2l2 2 2-2h-4zm-2 4v2h8v-2h-8z"/></symbol><symbol id="expand-left" viewBox="0 0 8 8"><path d="M0 0v8h1v-8h-1zm6 0v8h2v-8h-2zm-4 2v4l2-2-2-2z"/></symbol><symbol id="expand-right" viewBox="0 0 8 8"><path d="M0 0v8h2v-8h-2zm7 0v8h1v-8h-1zm-1 2l-2 2 2 2v-4z"/></symbol><symbol id="expand-up" viewBox="0 0 8 8"><path d="M0 0v2h8v-2h-8zm4 4l-2 2h4l-2-2zm-4 3v1h8v-1h-8z"/></symbol><symbol id="external-link" viewBox="0 0 8 8"><path d="M0 0v8h8v-2h-1v1h-6v-6h1v-1h-2zm4 0l1.5 1.5-2.5 2.5 1 1 2.5-2.5 1.5 1.5v-4h-4z"/></symbol><symbol id="eye" viewBox="0 0 8 8"><path d="M4.031 0c-2.53 0-4.031 3-4.031 3s1.501 3 4.031 3c2.47 0 3.969-3 3.969-3s-1.499-3-3.969-3zm-.031 1c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2zm0 1c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1c0-.1-.032-.191-.063-.281-.08.16-.237.281-.438.281-.28 0-.5-.22-.5-.5 0-.2.121-.357.281-.438-.09-.03-.181-.063-.281-.063z" transform="translate(0 1)"/></symbol><symbol id="eyedropper" viewBox="0 0 8 8"><path d="M3.313 0a.5.5 0 0 0-.188.844l.625.625-3.594 3.656-.156.156v2.719h2.719l.125-.156 3.656-3.656.625.656a.5.5 0 1 0 .719-.688l-.938-.938.656-.656c.59-.58.59-1.545 0-2.125-.56-.57-1.555-.57-2.125 0l-.656.656-.938-.938a.5.5 0 0 0-.469-.156.5.5 0 0 0-.063 0zm1.156 2.188l1.313 1.313-3.156 3.156-1.281-1.313 3.125-3.156z"/></symbol><symbol id="file" viewBox="0 0 8 8"><path d="M0 0v8h7v-4h-4v-4h-3zm4 0v3h3l-3-3z"/></symbol><symbol id="fire" viewBox="0 0 8 8"><path d="M2 0c1 2-2 3-2 5s2 3 2 3c-.98-1.98 2-3 2-5s-2-3-2-3zm3 3c1 2-2 3-2 5h3c.4 0 1-.5 1-2 0-2-2-3-2-3z"/></symbol><symbol id="flag" viewBox="0 0 8 8"><path d="M0 0v8h1v-8h-1zm2 0v4h2v1h4l-2-1.969 2-2.031h-3v-1h-3z"/></symbol><symbol id="flash" viewBox="0 0 8 8"><path d="M1.5 0l-1.5 3h2l-.656 2h-1.344l1 3 3-3h-1.5l1.5-3h-2l1-2h-1.5z" transform="translate(2)"/></symbol><symbol id="folder" viewBox="0 0 8 8"><path d="M0 0v2h8v-1h-5v-1h-3zm0 3v4.5c0 .28.22.5.5.5h7c.28 0 .5-.22.5-.5v-4.5h-8z"/></symbol><symbol id="fork" viewBox="0 0 8 8"><path d="M1.5 0c-.828 0-1.5.672-1.5 1.5 0 .656.414 1.202 1 1.406v2.188c-.586.204-1 .75-1 1.406 0 .828.672 1.5 1.5 1.5s1.5-.672 1.5-1.5c0-.595-.341-1.101-.844-1.344.09-.09.205-.156.344-.156h2c.823 0 1.5-.677 1.5-1.5v-.594c.586-.204 1-.75 1-1.406 0-.828-.672-1.5-1.5-1.5s-1.5.672-1.5 1.5c0 .656.414 1.202 1 1.406v.594c0 .277-.223.5-.5.5h-2c-.171 0-.346.04-.5.094v-1.188c.586-.204 1-.75 1-1.406 0-.828-.672-1.5-1.5-1.5z"/></symbol><symbol id="fullscreen-enter" viewBox="0 0 8 8"><path d="M0 0v4l1.5-1.5 1.5 1.5 1-1-1.5-1.5 1.5-1.5h-4zm5 4l-1 1 1.5 1.5-1.5 1.5h4v-4l-1.5 1.5-1.5-1.5z"/></symbol><symbol id="fullscreen-exit" viewBox="0 0 8 8"><path d="M1 0l-1 1 1.5 1.5-1.5 1.5h4v-4l-1.5 1.5-1.5-1.5zm3 4v4l1.5-1.5 1.5 1.5 1-1-1.5-1.5 1.5-1.5h-4z"/></symbol><symbol id="globe" viewBox="0 0 8 8"><path d="M4 0c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm0 1c.333 0 .637.086.938.188-.214.197-.45.383-.406.563.04.18.688.13.688.5 0 .27-.425.346-.125.656.35.35-.636.978-.656 1.438-.03.83.841.969 1.531.969.424 0 .503.195.469.438-.546.758-1.438 1.25-2.438 1.25-.378 0-.729-.09-1.063-.219.224-.442-.313-1.344-.781-1.625-.226-.226-.689-.114-.969-.219-.092-.271-.178-.545-.188-.844.031-.05.081-.094.156-.094.19 0 .454.374.594.344.18-.04-.742-1.313-.313-1.563.2-.12.609.394.469-.156-.12-.51.366-.276.656-.406.26-.11.455-.414.125-.594-.057-.031-.133-.104-.219-.188.45-.27.972-.438 1.531-.438zm2.313 1.094c.184.222.323.481.438.75-.043.065-.083.114-.188.219-.29.27-.327-.212-.438-.313-.13-.11-.638.025-.688-.125-.077-.181.499-.418.875-.531z"/></symbol><symbol id="graph" viewBox="0 0 8 8"><path d="M7.031 0l-3.031 3-1-1-3 3.031 1 1 2-2.031 1 1 4-4-.969-1zm-7.031 7v1h8v-1h-8z"/></symbol><symbol id="grid-four-up" viewBox="0 0 8 8"><path d="M0 0v1h1v-1h-1zm2 0v1h1v-1h-1zm2 0v1h1v-1h-1zm2 0v1h1v-1h-1zm-6 2v1h1v-1h-1zm2 0v1h1v-1h-1zm2 0v1h1v-1h-1zm2 0v1h1v-1h-1zm-6 2v1h1v-1h-1zm2 0v1h1v-1h-1zm2 0v1h1v-1h-1zm2 0v1h1v-1h-1zm-6 2v1h1v-1h-1zm2 0v1h1v-1h-1zm2 0v1h1v-1h-1zm2 0v1h1v-1h-1z"/></symbol><symbol id="grid-three-up" viewBox="0 0 8 8"><path d="M0 0v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-6 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2zm-6 3v2h2v-2h-2zm3 0v2h2v-2h-2zm3 0v2h2v-2h-2z"/></symbol><symbol id="grid-two-up" viewBox="0 0 8 8"><path d="M0 0v3h3v-3h-3zm5 0v3h3v-3h-3zm-5 5v3h3v-3h-3zm5 0v3h3v-3h-3z"/></symbol><symbol id="hard-drive" viewBox="0 0 8 8"><path d="M.188 0c-.11 0-.188.077-.188.188v3.313c0 .28.22.5.5.5h6c.28 0 .5-.22.5-.5v-3.313c0-.11-.077-.188-.188-.188h-6.625zm-.188 4.906v2.906c0 .11.077.188.188.188h6.625c.11 0 .188-.077.188-.188v-2.906c-.16.05-.32.094-.5.094h-6c-.18 0-.34-.044-.5-.094zm5.5 1.094c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5z"/></symbol><symbol id="header" viewBox="0 0 8 8"><path d="M0 0v1h.5c.28 0 .5.22.5.5v4c0 .28-.22.5-.5.5h-.5v1h3v-1h-.5c-.28 0-.5-.22-.5-.5v-1.5h3v1.5c0 .28-.22.5-.5.5h-.5v1h3v-1h-.5c-.28 0-.5-.22-.5-.5v-4c0-.28.22-.5.5-.5h.5v-1h-3v1h.5c.28 0 .5.22.5.5v1.5h-3v-1.5c0-.28.22-.5.5-.5h.5v-1h-3z"/></symbol><symbol id="headphones" viewBox="0 0 8 8"><path d="M4 0c-1.651 0-3 1.349-3 3v1h-.5a.5.5 0 0 0-.5.5v2a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-3.5c0-1.109.891-2 2-2s2 .891 2 2v3.5a.5.5 0 0 0 .5.5h1a.5.5 0 0 0 .5-.5v-2a.5.5 0 0 0-.5-.5h-.5v-1c0-1.651-1.349-3-3-3z"/></symbol><symbol id="heart" viewBox="0 0 8 8"><path d="M2 0c-.55 0-1.046.224-1.406.594-.37.36-.594.856-.594 1.406 0 .55.224 1.046.594 1.406l3.406 3.438 3.406-3.438c.37-.37.594-.856.594-1.406 0-.55-.224-1.046-.594-1.406-.36-.37-.856-.594-1.406-.594-.55 0-1.046.224-1.406.594-.37.36-.594.856-.594 1.406 0-.55-.224-1.046-.594-1.406-.36-.37-.856-.594-1.406-.594z" transform="translate(0 1)"/></symbol><symbol id="home" viewBox="0 0 8 8"><path d="M4 0l-4 3h1v4h2v-2h2v2h2v-4.031l1 .031-4-3z"/></symbol><symbol id="image" viewBox="0 0 8 8"><path d="M0 0v8h8v-8h-8zm1 1h6v3l-1-1-1 1 2 2v1h-1l-4-4-1 1v-3z"/></symbol><symbol id="inbox" viewBox="0 0 8 8"><path d="M.188 0c-.11 0-.188.077-.188.188v7.625c0 .11.077.188.188.188h7.625c.11 0 .188-.077.188-.188v-7.625c0-.11-.077-.188-.188-.188h-7.625zm.813 2h6v3h-1l-1 1h-2l-1-1h-1v-3z"/></symbol><symbol id="infinity" viewBox="0 0 8 8"><path d="M2 0c-1.31 0-2 1.01-2 2s.69 2 2 2c.79 0 1.42-.559 2-1.219.58.66 1.19 1.219 2 1.219 1.31 0 2-1.01 2-2s-.69-2-2-2c-.81 0-1.42.559-2 1.219-.57-.66-1.21-1.219-2-1.219zm0 1c.42 0 .884.47 1.344 1-.46.53-.924 1-1.344 1-.74 0-1-.54-1-1 0-.46.26-1 1-1zm4 0c.74 0 1 .54 1 1 0 .46-.26 1-1 1-.43 0-.894-.47-1.344-1 .45-.53.914-1 1.344-1z" transform="translate(0 2)"/></symbol><symbol id="info" viewBox="0 0 8 8"><path d="M3 0c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1zm-1.5 2.5c-.83 0-1.5.67-1.5 1.5h1c0-.28.22-.5.5-.5s.5.22.5.5-1 1.64-1 2.5c0 .86.67 1.5 1.5 1.5s1.5-.67 1.5-1.5h-1c0 .28-.22.5-.5.5s-.5-.22-.5-.5c0-.36 1-1.84 1-2.5 0-.81-.67-1.5-1.5-1.5z" transform="translate(2)"/></symbol><symbol id="italic" viewBox="0 0 8 8"><path d="M2 0v1h1.625l-.063.125-2 5-.344.875h-1.219v1h5v-1h-1.625l.063-.125 2-5 .344-.875h1.219v-1h-5z"/></symbol><symbol id="justify-center" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm0 2v1h8v-1h-8zm0 2v1h8v-1h-8zm1 2v1h6v-1h-6z"/></symbol><symbol id="justify-left" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm0 2v1h8v-1h-8zm0 2v1h8v-1h-8zm0 2v1h6v-1h-6z"/></symbol><symbol id="justify-right" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm0 2v1h8v-1h-8zm0 2v1h8v-1h-8zm2 2v1h6v-1h-6z"/></symbol><symbol id="key" viewBox="0 0 8 8"><path d="M5.5 0c-1.38 0-2.5 1.12-2.5 2.5 0 .16.033.297.063.438l-3.063 3.063v2h3v-2h2v-1l.063-.063c.14.03.277.063.438.063 1.38 0 2.5-1.12 2.5-2.5s-1.12-2.5-2.5-2.5zm.5 1c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1z"/></symbol><symbol id="laptop" viewBox="0 0 8 8"><path d="M1.344 0a.5.5 0 0 0-.344.5v3.5h-1v1.5c0 .28.22.5.5.5h7c.28 0 .5-.22.5-.5v-1.5h-1v-3.5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0-.094 0 .5.5 0 0 0-.063 0zm.656 1h4v3h-1v1h-2v-1h-1v-3z" transform="translate(0 1)"/></symbol><symbol id="layers" viewBox="0 0 8 8"><path d="M0 0v4h4v-4h-4zm5 2v3h-3v1h4v-4h-1zm2 2v3h-3v1h4v-4h-1z"/></symbol><symbol id="lightbulb" viewBox="0 0 8 8"><path d="M3.406 0a.5.5 0 0 0-.125.063l-3 1.5a.5.5 0 1 0 .438.875l3-1.5a.5.5 0 0 0-.313-.938zm1 1.5a.5.5 0 0 0-.125.063l-4 2a.5.5 0 1 0 .438.875l4-2a.5.5 0 0 0-.313-.938zm0 2a.5.5 0 0 0-.125.063l-3 1.5a.5.5 0 0 0 .219.938h2a.502.502 0 0 0 .156-1l1.063-.563a.5.5 0 0 0-.313-.938zm-2.563 3.5a.502.502 0 0 0 .156 1h1a.5.5 0 1 0 0-1h-1a.5.5 0 0 0-.094 0 .502.502 0 0 0-.063 0z" transform="translate(1)"/></symbol><symbol id="link-broken" viewBox="0 0 8 8"><path d="M2 0v1h-1v1h2v-2h-1zm3.875.031c-.184.01-.354.03-.531.094-.27.095-.531.25-.75.469l-.438.438a.5.5 0 1 0 .688.688l.438-.438c.101-.101.245-.173.375-.219.352-.126.78-.064 1.063.219.395.389.4 1.037 0 1.438l-1.5 1.5a.5.5 0 1 0 .688.688l1.5-1.5c.78-.78.785-2.041 0-2.813-.279-.279-.606-.452-.969-.531-.181-.039-.379-.041-.563-.031zm-3.594 2.906a.5.5 0 0 0-.188.156l-1.5 1.5c-.78.78-.785 2.041 0 2.813.557.557 1.355.722 2.063.469.27-.095.531-.25.75-.469l.438-.438a.5.5 0 1 0-.688-.688l-.438.438c-.101.101-.245.173-.375.219-.352.126-.78.064-1.063-.219-.395-.389-.4-1.037 0-1.438l1.5-1.5a.5.5 0 0 0-.438-.844.5.5 0 0 0-.063 0zm2.719 3.063v2h1v-1h1v-1h-2z"/></symbol><symbol id="link-intact" viewBox="0 0 8 8"><path d="M5.875.031c-.184.01-.354.03-.531.094-.27.095-.531.25-.75.469a.5.5 0 1 0 .688.688c.101-.101.245-.173.375-.219.352-.126.78-.064 1.063.219.395.389.4 1.037 0 1.438l-1.5 1.5c-.434.434-.799.483-1.063.469-.264-.015-.406-.125-.406-.125a.504.504 0 1 0-.5.875s.34.222.844.25c.504.028 1.197-.165 1.813-.781l1.5-1.5c.78-.78.785-2.041 0-2.813-.279-.279-.606-.452-.969-.531-.181-.039-.379-.041-.563-.031zm-2 2.313c-.501-.019-1.186.155-1.781.75l-1.5 1.5c-.78.78-.785 2.041 0 2.813.557.557 1.355.722 2.063.469.27-.095.531-.25.75-.469a.5.5 0 1 0-.688-.688c-.101.101-.245.173-.375.219-.352.126-.78.064-1.063-.219-.395-.389-.4-1.037 0-1.438l1.5-1.5c.405-.405.752-.448 1.031-.438.279.011.469.094.469.094a.5.5 0 1 0 .438-.875s-.343-.199-.844-.219z"/></symbol><symbol id="list-rich" viewBox="0 0 8 8"><path d="M0 0v3h3v-3h-3zm4 0v1h4v-1h-4zm0 2v1h3v-1h-3zm-4 2v3h3v-3h-3zm4 0v1h4v-1h-4zm0 2v1h3v-1h-3z"/></symbol><symbol id="list" viewBox="0 0 8 8"><path d="M.5 0c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm1.5 0v1h6v-1h-6zm-1.5 2c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm1.5 0v1h6v-1h-6zm-1.5 2c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm1.5 0v1h6v-1h-6zm-1.5 2c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm1.5 0v1h6v-1h-6z"/></symbol><symbol id="location" viewBox="0 0 8 8"><path d="M8 0l-8 4 3 1 1 3 4-8z"/></symbol><symbol id="lock-locked" viewBox="0 0 8 8"><path d="M3 0c-1.099 0-2 .901-2 2v1h-1v4h6v-4h-1v-1c0-1.099-.901-2-2-2zm0 1c.561 0 1 .439 1 1v1h-2v-1c0-.561.439-1 1-1z" transform="translate(1)"/></symbol><symbol id="lock-unlocked" viewBox="0 0 8 8"><path d="M3 0c-1.099 0-2 .901-2 2h1c0-.561.439-1 1-1 .561 0 1 .439 1 1v2h-4v4h6v-4h-1v-2c0-1.099-.901-2-2-2z" transform="translate(1)"/></symbol><symbol id="loop-circular" viewBox="0 0 8 8"><path d="M4 0c-1.651 0-3 1.349-3 3h-1l1.5 2 1.5-2h-1c0-1.109.891-2 2-2v-1zm2.5 1l-1.5 2h1c0 1.109-.891 2-2 2v1c1.651 0 3-1.349 3-3h1l-1.5-2z" transform="translate(0 1)"/></symbol><symbol id="loop-square" viewBox="0 0 8 8"><path d="M1 0v2h1v-1h4v2h-1l1.5 2.5 1.5-2.5h-1v-3h-6zm.5 2.5l-1.5 2.5h1v3h6v-2h-1v1h-4v-2h1l-1.5-2.5z"/></symbol><symbol id="loop" viewBox="0 0 8 8"><path d="M6 0v1h-5c-.554 0-1 .446-1 1v1h1v-1h5v1l2-1.5-2-1.5zm-4 4l-2 1.5 2 1.5v-1h5c.542 0 1-.458 1-1v-1h-1v1h-5v-1z"/></symbol><symbol id="magnifying-glass" viewBox="0 0 8 8"><path d="M3.5 0c-1.927 0-3.5 1.573-3.5 3.5s1.573 3.5 3.5 3.5c.592 0 1.166-.145 1.656-.406a1 1 0 0 0 .125.125l1 1a1.016 1.016 0 1 0 1.438-1.438l-1-1a1 1 0 0 0-.156-.125c.266-.493.438-1.059.438-1.656 0-1.927-1.573-3.5-3.5-3.5zm0 1c1.387 0 2.5 1.113 2.5 2.5 0 .661-.241 1.273-.656 1.719-.01.011-.021.021-.031.031a1 1 0 0 0-.125.125c-.442.397-1.043.625-1.688.625-1.387 0-2.5-1.113-2.5-2.5s1.113-2.5 2.5-2.5z"/></symbol><symbol id="map-marker" viewBox="0 0 8 8"><path d="M3 0c-1.66 0-3 1.34-3 3 0 2 3 5 3 5s3-3 3-5c0-1.66-1.34-3-3-3zm0 1c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2z" transform="translate(1)"/></symbol><symbol id="map" viewBox="0 0 8 8"><path d="M0 0v8h8v-2.375a.5.5 0 0 0 0-.219v-5.406h-8zm1 1h6v4h-1.5a.5.5 0 0 0-.094 0 .502.502 0 1 0 .094 1h1.5v1h-6v-6zm2.5 1c-.83 0-1.5.67-1.5 1.5 0 1 1.5 2.5 1.5 2.5s1.5-1.5 1.5-2.5c0-.83-.67-1.5-1.5-1.5zm0 1c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5z"/></symbol><symbol id="media-pause" viewBox="0 0 8 8"><path d="M0 0v6h2v-6h-2zm4 0v6h2v-6h-2z" transform="translate(1 1)"/></symbol><symbol id="media-play" viewBox="0 0 8 8"><path d="M0 0v6l6-3-6-3z" transform="translate(1 1)"/></symbol><symbol id="media-record" viewBox="0 0 8 8"><path d="M3 0c-1.657 0-3 1.343-3 3s1.343 3 3 3 3-1.343 3-3-1.343-3-3-3z" transform="translate(1 1)"/></symbol><symbol id="media-skip-backward" viewBox="0 0 8 8"><path d="M4 0l-4 3 4 3v-6zm0 3l4 3v-6l-4 3z" transform="translate(0 1)"/></symbol><symbol id="media-skip-forward" viewBox="0 0 8 8"><path d="M0 0v6l4-3-4-3zm4 3v3l4-3-4-3v3z" transform="translate(0 1)"/></symbol><symbol id="media-step-backward" viewBox="0 0 8 8"><path d="M0 0v6h2v-6h-2zm2 3l5 3v-6l-5 3z" transform="translate(0 1)"/></symbol><symbol id="media-step-forward" viewBox="0 0 8 8"><path d="M0 0v6l5-3-5-3zm5 3v3h2v-6h-2v3z" transform="translate(0 1)"/></symbol><symbol id="media-stop" viewBox="0 0 8 8"><path d="M0 0v6h6v-6h-6z" transform="translate(1 1)"/></symbol><symbol id="medical-cross" viewBox="0 0 8 8"><path d="M2 0v2h-2v4h2v2h4v-2h2v-4h-2v-2h-4z"/></symbol><symbol id="menu" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm0 2.969v1h8v-1h-8zm0 3v1h8v-1h-8z" transform="translate(0 1)"/></symbol><symbol id="microphone" viewBox="0 0 8 8"><path d="M2.906-.031a1 1 0 0 0-.125.031 1 1 0 0 0-.781 1v2a1 1 0 1 0 2 0v-2a1 1 0 0 0-1.094-1.031zm-2.563 2.031a.5.5 0 0 0-.344.5v.5c0 1.476 1.091 2.693 2.5 2.938v1.063h-.5c-.55 0-1 .45-1 1h4c0-.55-.45-1-1-1h-.5v-1.063c1.409-.244 2.5-1.461 2.5-2.938v-.5a.5.5 0 1 0-1 0v.5c0 1.109-.891 2-2 2s-2-.891-2-2v-.5a.5.5 0 0 0-.594-.5.5.5 0 0 0-.063 0z" transform="translate(1)"/></symbol><symbol id="minus" viewBox="0 0 8 8"><path d="M0 0v2h8v-2h-8z" transform="translate(0 3)"/></symbol><symbol id="monitor" viewBox="0 0 8 8"><path d="M.344 0a.5.5 0 0 0-.344.5v5a.5.5 0 0 0 .5.5h2.5v1h-1c-.55 0-1 .45-1 1h6c0-.55-.45-1-1-1h-1v-1h2.5a.5.5 0 0 0 .5-.5v-5a.5.5 0 0 0-.5-.5h-7a.5.5 0 0 0-.094 0 .5.5 0 0 0-.063 0zm.656 1h6v4h-6v-4z"/></symbol><symbol id="moon" viewBox="0 0 8 8"><path d="M2.719 0c-1.58.53-2.719 2.021-2.719 3.781 0 2.21 1.79 4 4 4 1.76 0 3.251-1.17 3.781-2.75-.4.14-.831.25-1.281.25-2.21 0-4-1.79-4-4 0-.44.079-.881.219-1.281z"/></symbol><symbol id="move" viewBox="0 0 8 8"><path d="M3.5 0l-1.5 1.5h1v1.5h-1.5v-1l-1.5 1.5 1.5 1.5v-1h1.5v1.5h-1l1.5 1.5 1.5-1.5h-1v-1.5h1.5v1l1.5-1.5-1.5-1.5v1h-1.5v-1.5h1l-1.5-1.5z"/></symbol><symbol id="musical-note" viewBox="0 0 8 8"><path d="M8 0c-5 0-6 1-6 1v4.094c-.154-.054-.327-.094-.5-.094-.828 0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5 1.5-.672 1.5-1.5v-3.969c.732-.226 1.99-.438 4-.5v2.063c-.154-.054-.327-.094-.5-.094-.828 0-1.5.672-1.5 1.5s.672 1.5 1.5 1.5 1.5-.672 1.5-1.5v-5.5z"/></symbol><symbol id="paperclip" viewBox="0 0 8 8"><path d="M5 0c-.514 0-1.021.201-1.406.594l-2.781 2.719c-1.07 1.07-1.07 2.805 0 3.875 1.07 1.07 2.805 1.07 3.875 0l1.25-1.25-.688-.688-.906.875-.344.375c-.69.69-1.81.69-2.5 0-.682-.682-.668-1.778 0-2.469l2.781-2.719v-.031c.389-.395 1.037-.4 1.438 0 .388.381.378 1.006 0 1.406l-2.5 2.469c-.095.095-.28.095-.375 0-.095-.095-.095-.28 0-.375l.375-.344.594-.625-.688-.688-.875.875-.094.094c-.485.485-.485 1.265 0 1.75.485.485 1.265.485 1.75 0l2.5-2.438c.78-.78.785-2.041 0-2.813-.39-.39-.893-.594-1.406-.594z"/></symbol><symbol id="pencil" viewBox="0 0 8 8"><path d="M6 0l-1 1 2 2 1-1-2-2zm-2 2l-4 4v2h2l4-4-2-2z"/></symbol><symbol id="people" viewBox="0 0 8 8"><path d="M5.5 0c-.51 0-.949.355-1.219.875.45.54.719 1.275.719 2.125 0 .29-.034.574-.094.844.18.11.374.156.594.156.83 0 1.5-.9 1.5-2s-.67-2-1.5-2zm-3 1c-.828 0-1.5.895-1.5 2s.672 2 1.5 2 1.5-.895 1.5-2-.672-2-1.5-2zm4.75 3.156c-.43.51-1.018.824-1.688.844.27.38.438.844.438 1.344v.656h2v-1.656c0-.52-.31-.968-.75-1.188zm-6.5 1c-.44.22-.75.668-.75 1.188v1.656h5v-1.656c0-.52-.31-.968-.75-1.188-.44.53-1.06.844-1.75.844s-1.31-.314-1.75-.844z"/></symbol><symbol id="person" viewBox="0 0 8 8"><path d="M4 0c-1.105 0-2 1.119-2 2.5s.895 2.5 2 2.5 2-1.119 2-2.5-.895-2.5-2-2.5zm-2.094 5c-1.07.04-1.906.92-1.906 2v1h8v-1c0-1.08-.836-1.96-1.906-2-.54.61-1.284 1-2.094 1-.81 0-1.554-.39-2.094-1z"/></symbol><symbol id="phone" viewBox="0 0 8 8"><path d="M.188 0c-.11 0-.188.077-.188.188v7.625c0 .11.077.188.188.188h4.625c.11 0 .188-.077.188-.188v-7.625c0-.11-.077-.188-.188-.188h-4.625zm.813 1h3v5h-3v-5zm1.5 5.5c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5z" transform="translate(1)"/></symbol><symbol id="pie-chart" viewBox="0 0 8 8"><path d="M3.5 0c-.97 0-1.839.391-2.469 1.031l2.969 2.969v-3.969c-.16-.03-.33-.031-.5-.031zm1.5 1.063v3.406l-2.719 2.719c.6.5 1.369.813 2.219.813 1.93 0 3.5-1.57 3.5-3.5 0-1.76-1.31-3.197-3-3.438zm-4.094 1.313c-.55.54-.906 1.285-.906 2.125 0 .95.435 1.804 1.125 2.344l2.156-2.125-2.375-2.344z"/></symbol><symbol id="pin" viewBox="0 0 8 8"><path d="M1.344 0a.502.502 0 0 0 .156 1h.5v2h-1c-.55 0-1 .45-1 1h3v3l.438 1 .563-1v-3h3c0-.55-.45-1-1-1h-1v-2h.5a.5.5 0 1 0 0-1h-4a.5.5 0 0 0-.094 0 .502.502 0 0 0-.063 0z"/></symbol><symbol id="play-circle" viewBox="0 0 8 8"><path d="M4 0c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-1 2l3 2-3 2v-4z"/></symbol><symbol id="plus" viewBox="0 0 8 8"><path d="M3 0v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2z"/></symbol><symbol id="power-standby" viewBox="0 0 8 8"><path d="M3 0v4h1v-4h-1zm-1.281 1.438l-.375.313c-.803.64-1.344 1.634-1.344 2.75 0 1.929 1.571 3.5 3.5 3.5s3.5-1.571 3.5-3.5c0-1.116-.529-2.11-1.344-2.75l-.375-.313-.625.781.375.313c.585.46.969 1.165.969 1.969 0 1.391-1.109 2.5-2.5 2.5s-2.5-1.109-2.5-2.5c0-.804.361-1.509.938-1.969l.406-.313-.625-.781z"/></symbol><symbol id="print" viewBox="0 0 8 8"><path d="M2 0v2h4v-2h-4zm-1.906 3c-.06 0-.094.034-.094.094v2.813c0 .06.034.094.094.094h.906v-2h6v2h.906c.06 0 .094-.034.094-.094v-2.813c0-.06-.034-.094-.094-.094h-7.813zm1.906 2v3h4v-3h-4z"/></symbol><symbol id="project" viewBox="0 0 8 8"><path d="M0 0v7h1v-7h-1zm7 0v7h1v-7h-1zm-5 1v1h2v-1h-2zm1 2v1h2v-1h-2zm1 2v1h2v-1h-2z"/></symbol><symbol id="pulse" viewBox="0 0 8 8"><path d="M3.25 0l-.469 1.531-.781 2.563-.031-.063-.094-.344h-1.875v1h1.156l.375 1.156.469 1.469.469-1.469.781-2.5.781 2.5.406 1.313.531-1.281.594-1.469.125.281h2.313v-1h-1.688l-.375-.719-.5-1-.406 1.031-.469 1.188-.844-2.656-.469-1.531z"/></symbol><symbol id="puzzle-piece" viewBox="0 0 8 8"><path d="M3 0c-.28 0-.539.101-.719.281-.18.18-.281.439-.281.719 0 .28.181.479.281.719.03.06.063.161.063.281h-2.344v6h2.344c0-.12-.011-.221-.031-.281-.11-.24-.313-.439-.313-.719 0-.28.101-.539.281-.719.18-.18.439-.281.719-.281.28 0 .539.101.719.281.18.18.281.439.281.719 0 .28-.181.479-.281.719-.03.06-.063.161-.063.281h2.344v-2.344c.12 0 .221.011.281.031.24.11.439.313.719.313.28 0 .539-.101.719-.281.18-.18.281-.439.281-.719 0-.28-.101-.539-.281-.719-.18-.18-.439-.281-.719-.281-.28 0-.479.181-.719.281-.06.03-.161.063-.281.063v-2.344h-2.344c0-.12.011-.221.031-.281.11-.24.313-.439.313-.719 0-.28-.101-.539-.281-.719-.18-.18-.439-.281-.719-.281z"/></symbol><symbol id="question-mark" viewBox="0 0 8 8"><path d="M2.469 0c-.854 0-1.48.256-1.875.656s-.54.901-.594 1.281l1 .125c.036-.26.125-.497.313-.688.188-.19.491-.375 1.156-.375.664 0 1.019.163 1.219.344.199.181.281.405.281.656 0 .833-.313 1.063-.813 1.5-.5.438-1.188 1.083-1.188 2.25v.25h1v-.25c0-.833.344-1.063.844-1.5.5-.438 1.156-1.083 1.156-2.25 0-.479-.168-1.02-.594-1.406-.426-.387-1.071-.594-1.906-.594zm-.5 7v1h1v-1h-1z" transform="translate(2)"/></symbol><symbol id="rain" viewBox="0 0 8 8"><path d="M4.5 0c-1.21 0-2.27.86-2.5 2-1.1 0-2 .9-2 2 0 .52.201 1.015.531 1.375.26-.22.599-.375.969-.375.2 0 .393.055.563.125.17-.64.748-1.125 1.438-1.125s1.268.485 1.438 1.125c.17-.07.362-.125.563-.125.63 0 1.155.388 1.375.938.64-.17 1.125-.747 1.125-1.438 0-.65-.42-1.29-1-1.5v-.5c0-1.38-1.12-2.5-2.5-2.5zm-1.156 5a.5.5 0 0 0-.344.5v2a.5.5 0 1 0 1 0v-2a.5.5 0 0 0-.594-.5.5.5 0 0 0-.063 0zm-2 1a.5.5 0 0 0-.344.5v1a.5.5 0 1 0 1 0v-1a.5.5 0 0 0-.594-.5.5.5 0 0 0-.063 0zm4 0a.5.5 0 0 0-.344.5v1a.5.5 0 1 0 1 0v-1a.5.5 0 0 0-.594-.5.5.5 0 0 0-.063 0z"/></symbol><symbol id="random" viewBox="0 0 8 8"><path d="M6 0v1h-.5c-.354 0-.6.116-.813.375l-1.406 1.75-1.5-1.75v-.031c-.212-.236-.427-.344-.781-.344h-1v1h1c-.037 0 .008-.011.031 0v.031l1.625 1.906-1.625 2.031c.016-.02.019.022 0 .031-.019.009-.068 0-.031 0h-1v1h1c.354 0 .6-.116.813-.375l1.531-1.906 1.625 1.906v.031c.212.236.427.344.781.344h.25v1l2-1.5-2-1.5v1h-.25c.037 0-.008.011-.031 0v-.031l-1.75-2.063 1.5-1.875v-.031c.019-.009.068 0 .031 0h.5v1l2-1.5-2-1.5z"/></symbol><symbol id="reload" viewBox="0 0 8 8"><path d="M4 0c-2.201 0-4 1.799-4 4s1.799 4 4 4c1.104 0 2.092-.456 2.813-1.188l-.688-.688c-.54.548-1.289.875-2.125.875-1.659 0-3-1.341-3-3s1.341-3 3-3c.834 0 1.545.354 2.094.906l-1.094 1.094h3v-3l-1.188 1.188c-.731-.72-1.719-1.188-2.813-1.188z"/></symbol><symbol id="resize-both" viewBox="0 0 8 8"><path d="M4 0l1.656 1.656-4 4-1.656-1.656v4h4l-1.656-1.656 4-4 1.656 1.656v-4h-4z"/></symbol><symbol id="resize-height" viewBox="0 0 8 8"><path d="M2.5 0l-2.5 3h2v2h-2l2.5 3 2.5-3h-2v-2h2l-2.5-3z" transform="translate(1)"/></symbol><symbol id="resize-width" viewBox="0 0 8 8"><path d="M3 0l-3 2.5 3 2.5v-2h2v2l3-2.5-3-2.5v2h-2v-2z" transform="translate(0 1)"/></symbol><symbol id="rss-alt" viewBox="0 0 8 8"><path d="M0 0v2c3.331 0 6 2.669 6 6h2c0-4.409-3.591-8-8-8zm0 3v2c1.67 0 3 1.33 3 3h2c0-2.75-2.25-5-5-5zm0 3v2h2c0-1.11-.89-2-2-2z"/></symbol><symbol id="rss" viewBox="0 0 8 8"><path d="M1 0v1c3.32 0 6 2.68 6 6h1c0-3.86-3.14-7-7-7zm0 2v1c2.221 0 4 1.779 4 4h1c0-2.759-2.241-5-5-5zm0 2v1c1.109 0 2 .891 2 2h1c0-1.651-1.349-3-3-3zm0 2c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1z"/></symbol><symbol id="script" viewBox="0 0 8 8"><path d="M3 0c-.55 0-1 .45-1 1v5.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5v-1.5h-1v2c0 .55.45 1 1 1h5c.55 0 1-.45 1-1v-3h-4v-2.5c0-.28.22-.5.5-.5s.5.22.5.5v1.5h4v-2c0-.55-.45-1-1-1h-4z"/></symbol><symbol id="share-boxed" viewBox="0 0 8 8"><path d="M.75 0c-.402 0-.75.348-.75.75v5.5c0 .402.348.75.75.75h4.5c.402 0 .75-.348.75-.75v-1.25h-1v1h-4v-5h2v-1h-2.25zm5.25 0v1c-2.05 0-3.704 1.544-3.938 3.531.213-.875.999-1.531 1.938-1.531h2v1l2-2-2-2z"/></symbol><symbol id="share" viewBox="0 0 8 8"><path d="M5 0v2c-4 0-5 2.05-5 5 .52-1.98 2-3 4-3h1v2l3-3.156-3-2.844z"/></symbol><symbol id="shield" viewBox="0 0 8 8"><path d="M4 0l-.188.094-3.5 1.469-.313.125v.313c0 1.657.666 3.122 1.469 4.188.401.533.828.969 1.25 1.281.422.313.826.531 1.281.531.455 0 .86-.219 1.281-.531.422-.313.849-.749 1.25-1.281.803-1.065 1.469-2.53 1.469-4.188v-.313l-.313-.125-3.5-1.469-.188-.094zm0 1.094v5.906c-.045 0-.328-.069-.656-.313s-.714-.631-1.063-1.094c-.642-.851-1.137-2.025-1.219-3.281l2.938-1.219z"/></symbol><symbol id="signal" viewBox="0 0 8 8"><path d="M6 0v8h1v-8h-1zm-2 1v7h1v-7h-1zm-2 2v5h1v-5h-1zm-2 2v3h1v-3h-1z"/></symbol><symbol id="signpost" viewBox="0 0 8 8"><path d="M3 0v1h-2l-1 1 1 1h2v5h1v-4h2l1-1-1-1h-2v-2h-1z"/></symbol><symbol id="sort-ascending" viewBox="0 0 8 8"><path d="M2 0v6h-2l2.5 2 2.5-2h-2v-6h-1zm2 0v1h2v-1h-2zm0 2v1h3v-1h-3zm0 2v1h4v-1h-4z"/></symbol><symbol id="sort-descending" viewBox="0 0 8 8"><path d="M2 0v6h-2l2.5 2 2.5-2h-2v-6h-1zm2 0v1h4v-1h-4zm0 2v1h3v-1h-3zm0 2v1h2v-1h-2z"/></symbol><symbol id="spreadsheet" viewBox="0 0 8 8"><path d="M.75 0c-.402 0-.75.348-.75.75v5.5c0 .402.348.75.75.75h6.5c.402 0 .75-.348.75-.75v-5.5c0-.402-.348-.75-.75-.75h-6.5zm.25 1h1v1h-1v-1zm2 0h4v1h-4v-1zm-2 2h1v1h-1v-1zm2 0h4v1h-4v-1zm-2 2h1v1h-1v-1zm2 0h4v1h-4v-1z"/></symbol><symbol id="star" viewBox="0 0 8 8"><path d="M4 0l-1 3h-3l2.5 2-1 3 2.5-2 2.5 2-1-3 2.5-2h-3l-1-3z"/></symbol><symbol id="sun" viewBox="0 0 8 8"><path d="M4 0c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm-2.5 1c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm5 0c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm-2.5 1c-1.105 0-2 .895-2 2s.895 2 2 2 2-.895 2-2-.895-2-2-2zm-3.5 1.5c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm7 0c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm-6 2.5c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm5 0c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5zm-2.5 1c-.276 0-.5.224-.5.5s.224.5.5.5.5-.224.5-.5-.224-.5-.5-.5z"/></symbol><symbol id="tablet" viewBox="0 0 8 8"><path d="M.344 0c-.18 0-.344.164-.344.344v7.313c0 .18.164.344.344.344h6.313c.18 0 .344-.164.344-.344v-7.313c0-.18-.164-.344-.344-.344h-6.313zm.656 1h5v5h-5v-5zm2.5 5.5c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5z"/></symbol><symbol id="tag" viewBox="0 0 8 8"><path d="M0 0v3l5 5 3-3-5-5h-3zm2 1c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1z"/></symbol><symbol id="tags" viewBox="0 0 8 8"><path d="M0 0v2l3 3 1.5-1.5.5-.5-2-2-1-1h-2zm3.406 0l3 3-1.188 1.219.781.781 2-2-3-3h-1.594zm-1.906 1c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5z" transform="translate(0 1)"/></symbol><symbol id="target" viewBox="0 0 8 8"><path d="M4 0c-2.203 0-4 1.797-4 4 0 2.203 1.797 4 4 4 2.203 0 4-1.797 4-4 0-2.203-1.797-4-4-4zm0 1c1.663 0 3 1.337 3 3s-1.337 3-3 3-3-1.337-3-3 1.337-3 3-3zm0 1c-1.099 0-2 .901-2 2s.901 2 2 2 2-.901 2-2-.901-2-2-2zm0 1c.558 0 1 .442 1 1s-.442 1-1 1-1-.442-1-1 .442-1 1-1z"/></symbol><symbol id="task" viewBox="0 0 8 8"><path d="M0 0v7h7v-3.594l-1 1v1.594h-5v-5h3.594l1-1h-5.594zm7 0l-3 3-1-1-1 1 2 2 4-4-1-1z"/></symbol><symbol id="terminal" viewBox="0 0 8 8"><path d="M.094 0c-.06 0-.094.034-.094.094v7.813c0 .06.034.094.094.094h7.813c.06 0 .094-.034.094-.094v-7.813c0-.06-.034-.094-.094-.094h-7.813zm1.406.781l1.719 1.719-1.719 1.719-.719-.719 1-1-1-1 .719-.719zm2.5 2.219h3v1h-3v-1z"/></symbol><symbol id="text" viewBox="0 0 8 8"><path d="M0 0v2h.5c0-.55.45-1 1-1h1.5v5.5c0 .28-.22.5-.5.5h-.5v1h4v-1h-.5c-.28 0-.5-.22-.5-.5v-5.5h1.5c.55 0 1 .45 1 1h.5v-2h-8z"/></symbol><symbol id="thumb-down" viewBox="0 0 8 8"><path d="M0 0v4h1v-4h-1zm2 0v4.001c.28 0 .529.101.719.281.18.19 1.151 2.115 1.281 2.375.13.26.386.393.656.313.26-.08.393-.355.313-.625-.08-.26-.469-1.594-.469-1.844s.22-.5.5-.5h1.5c.28 0 .5-.22.5-.5s-1.031-3.188-1.031-3.188c-.08-.18-.259-.313-.469-.313h-3.5z"/></symbol><symbol id="thumb-up" viewBox="0 0 8 8"><path d="M4.438 0c-.19.021-.34.149-.438.344-.13.26-1.101 2.185-1.281 2.375-.19.18-.439.281-.719.281v4.001h3.5c.21 0 .389-.133.469-.313 0 0 1.031-2.908 1.031-3.188 0-.28-.22-.5-.5-.5h-1.5c-.28 0-.5-.25-.5-.5s.389-1.574.469-1.844c.08-.27-.053-.545-.313-.625-.067-.02-.155-.038-.219-.031zm-4.438 3v4h1v-4h-1z"/></symbol><symbol id="timer" viewBox="0 0 8 8"><path d="M2 0v1h1v.031c-1.697.241-3 1.707-3 3.469 0 1.929 1.571 3.5 3.5 3.5s3.5-1.571 3.5-3.5c0-.45-.086-.874-.219-1.25l-.938.344c.107.304.156.596.156.906 0 1.391-1.109 2.5-2.5 2.5s-2.5-1.109-2.5-2.5 1.109-2.5 2.5-2.5c.298 0 .585.051.875.156l.344-.938c-.221-.081-.471-.119-.719-.156v-.063h1v-1h-3zm5 1.125s-3.675 2.8-3.875 3c-.2.2-.2.519 0 .719.2.2.519.2.719 0 .2-.19 3.156-3.719 3.156-3.719z"/></symbol><symbol id="transfer" viewBox="0 0 8 8"><path d="M6 0v1h-6v1h6v1l2-1.5-2-1.5zm-4 4l-2 1.5 2 1.5v-1h6v-1h-6v-1z"/></symbol><symbol id="trash" viewBox="0 0 8 8"><path d="M3 0c-.55 0-1 .45-1 1h-1c-.55 0-1 .45-1 1h7c0-.55-.45-1-1-1h-1c0-.55-.45-1-1-1h-1zm-2 3v4.813c0 .11.077.188.188.188h4.625c.11 0 .188-.077.188-.188v-4.813h-1v3.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5v-3.5h-1v3.5c0 .28-.22.5-.5.5s-.5-.22-.5-.5v-3.5h-1z"/></symbol><symbol id="underline" viewBox="0 0 8 8"><path d="M1 0v4c0 1.1 1.12 2 2.5 2h.5c1.1 0 2-.9 2-2v-4h-1v4c0 .55-.45 1-1 1s-1-.45-1-1v-4h-2zm-1 7v1h7v-1h-7z"/></symbol><symbol id="vertical-align-bottom" viewBox="0 0 8 8"><path d="M.094 0c-.06 0-.094.034-.094.094v4.813c0 .06.034.094.094.094h1.813c.06 0 .094-.034.094-.094v-4.813c0-.06-.034-.094-.094-.094h-1.813zm6 0c-.06 0-.094.034-.094.094v4.813c0 .06.034.094.094.094h1.813c.06 0 .094-.034.094-.094v-4.813c0-.06-.034-.094-.094-.094h-1.813zm-3 2c-.06 0-.094.034-.094.094v2.813c0 .06.034.094.094.094h1.813c.06 0 .094-.034.094-.094v-2.813c0-.06-.034-.094-.094-.094h-1.813zm-3.094 4v1h8v-1h-8z"/></symbol><symbol id="vertical-align-center" viewBox="0 0 8 8"><path d="M.094 0c-.06 0-.094.034-.094.094v1.906h2v-1.906c0-.06-.034-.094-.094-.094h-1.813zm6 0c-.06 0-.094.034-.094.094v1.906h2v-1.906c0-.06-.034-.094-.094-.094h-1.813zm-3 1c-.06 0-.094.034-.094.094v.906h2v-.906c0-.06-.034-.094-.094-.094h-1.813zm-3.094 2v1h8v-1h-8zm0 2v1.906c0 .06.034.094.094.094h1.813c.06 0 .094-.034.094-.094v-1.906h-2zm3 0v.906c0 .06.034.094.094.094h1.813c.06 0 .094-.034.094-.094v-.906h-2zm3 0v1.906c0 .06.034.094.094.094h1.813c.06 0 .094-.034.094-.094v-1.906h-2z"/></symbol><symbol id="vertical-align-top" viewBox="0 0 8 8"><path d="M0 0v1h8v-1h-8zm.094 2c-.06 0-.094.034-.094.094v4.813c0 .06.034.094.094.094h1.813c.06 0 .094-.034.094-.094v-4.813c0-.06-.034-.094-.094-.094h-1.813zm3 0c-.06 0-.094.034-.094.094v2.813c0 .06.034.094.094.094h1.813c.06 0 .094-.034.094-.094v-2.813c0-.06-.034-.094-.094-.094h-1.813zm3 0c-.06 0-.094.034-.094.094v4.813c0 .06.034.094.094.094h1.813c.06 0 .094-.034.094-.094v-4.813c0-.06-.034-.094-.094-.094h-1.813z"/></symbol><symbol id="video" viewBox="0 0 8 8"><path d="M.5 0c-.28 0-.5.22-.5.5v4c0 .28.22.5.5.5h5c.28 0 .5-.22.5-.5v-1.5l1 1h1v-3h-1l-1 1v-1.5c0-.28-.22-.5-.5-.5h-5z" transform="translate(0 1)"/></symbol><symbol id="volume-high" viewBox="0 0 8 8"><path d="M3.344 0l-1.344 2h-2v4h2l1.344 2h.656v-8h-.656zm1.656 1v1c.152 0 .313.026.469.063h.031c.86.215 1.5.995 1.5 1.938 0 .942-.64 1.722-1.5 1.938-.166.041-.338.063-.5.063v1c.258 0 .516-.035.75-.094 1.3-.325 2.25-1.508 2.25-2.906 0-1.398-.95-2.581-2.25-2.906-.234-.059-.492-.094-.75-.094zm0 2v2c.04 0 .134-.002.25-.031.433-.118.75-.507.75-.969 0-.446-.325-.819-.75-.938v-.031c-.005-.001-.025.002-.031 0-.043-.011-.111-.031-.219-.031z"/></symbol><symbol id="volume-low" viewBox="0 0 8 8"><path d="M3.344 0l-1.344 2h-2v4h2l1.344 2h.656v-8h-.656zm1.656 3v2c.04 0 .134-.002.25-.031.433-.118.75-.507.75-.969 0-.446-.325-.819-.75-.938v-.031c-.005-.001-.025.002-.031 0-.043-.011-.111-.031-.219-.031z" transform="translate(1)"/></symbol><symbol id="volume-off" viewBox="0 0 8 8"><path d="M3.344 0l-1.344 2h-2v4h2l1.344 2h.656v-8h-.656z" transform="translate(2)"/></symbol><symbol id="warning" viewBox="0 0 8 8"><path d="M3.094 0c-.06 0-.105.044-.125.094l-2.938 6.813c-.02.05-.031.128-.031.188v.813c0 .06.034.094.094.094h6.813c.06 0 .094-.034.094-.094v-.813c0-.06-.011-.128-.031-.188l-2.938-6.813c-.02-.05-.065-.094-.125-.094h-.813zm-.094 3h1v2h-1v-2zm0 3h1v1h-1v-1z"/></symbol><symbol id="wifi" viewBox="0 0 8 8"><path d="M3.75 0c-1.374 0-2.66.372-3.75 1.063l.531.875c.93-.59 2.033-.938 3.219-.938 1.2 0 2.323.31 3.25.906l.531-.813c-1.093-.703-2.401-1.094-3.781-1.094zm.031 3c-.795 0-1.531.227-2.156.625l.531.844c.475-.302 1.02-.469 1.625-.469.593 0 1.13.177 1.594.469l.531-.844c-.616-.388-1.338-.625-2.125-.625zm-.031 3c-.552 0-1 .448-1 1s.448 1 1 1 1-.448 1-1-.448-1-1-1z"/></symbol><symbol id="wrench" viewBox="0 0 8 8"><path d="M5.5 0c-1.38 0-2.5 1.12-2.5 2.5 0 .32.078.626.188.906l-2.906 2.875c-.39.39-.39 1.016 0 1.406.2.2.459.313.719.313.26 0 .519-.091.719-.281l2.875-2.875c.28.1.586.156.906.156 1.38 0 2.5-1.12 2.5-2.5 0-.16-.032-.297-.063-.438l-.938.938h-2v-2l.938-.938c-.14-.03-.277-.062-.438-.063zm-4.5 6.5c.28 0 .5.22.5.5s-.22.5-.5.5-.5-.22-.5-.5.22-.5.5-.5z"/></symbol><symbol id="x" viewBox="0 0 8 8"><path d="M1.406 0l-1.406 1.406.688.719 1.781 1.781-1.781 1.781-.688.719 1.406 1.406.719-.688 1.781-1.781 1.781 1.781.719.688 1.406-1.406-.688-.719-1.781-1.781 1.781-1.781.688-.719-1.406-1.406-.719.688-1.781 1.781-1.781-1.781-.719-.688z"/></symbol><symbol id="yen" viewBox="0 0 8 8"><path d="M0 0l2.25 3h-2.25v1h3v1h-3v1h3v2h1v-2h3v-1h-3v-1h3v-1h-2.25l2.25-3h-1l-2.313 3h-.375l-2.313-3h-1z"/></symbol><symbol id="zoom-in" viewBox="0 0 8 8"><path d="M3.5 0c-1.927 0-3.5 1.573-3.5 3.5s1.573 3.5 3.5 3.5c.592 0 1.166-.145 1.656-.406a1 1 0 0 0 .094.094l1.031 1.031a1.016 1.016 0 1 0 1.438-1.438l-1.031-1.031a1 1 0 0 0-.125-.094c.266-.493.438-1.059.438-1.656 0-1.927-1.573-3.5-3.5-3.5zm0 1c1.387 0 2.5 1.113 2.5 2.5 0 .587-.196 1.137-.531 1.563-.009.012-.022.02-.031.031a1 1 0 0 0-.063.031 1 1 0 0 0-.281.281 1 1 0 0 0-.063.063c-.422.326-.953.531-1.531.531-1.387 0-2.5-1.113-2.5-2.5s1.113-2.5 2.5-2.5zm-.5 1v1h-1v1h1v1h1v-1h1v-1h-1v-1h-1z"/></symbol><symbol id="zoom-out" viewBox="0 0 8 8"><path d="M3.5 0c-1.927 0-3.5 1.573-3.5 3.5s1.573 3.5 3.5 3.5c.592 0 1.166-.145 1.656-.406a1 1 0 0 0 .094.094l1.031 1.031a1.016 1.016 0 1 0 1.438-1.438l-1.031-1.031a1 1 0 0 0-.125-.094c.266-.493.438-1.059.438-1.656 0-1.927-1.573-3.5-3.5-3.5zm0 1c1.387 0 2.5 1.113 2.5 2.5 0 .587-.196 1.137-.531 1.563-.009.012-.022.02-.031.031a1 1 0 0 0-.063.031 1 1 0 0 0-.281.281 1 1 0 0 0-.063.063c-.422.326-.953.531-1.531.531-1.387 0-2.5-1.113-2.5-2.5s1.113-2.5 2.5-2.5zm-1.5 2v1h3v-1h-3z"/></symbol></defs></svg>+
\ No newline at end of file
diff --git a/src/assets/ionicons.svg b/src/assets/ionicons.svg
@@ -0,0 +1 @@
+<svg version="1.1" xmlns="http://www.w3.org/2000/svg"><symbol id="twitter" viewBox="0 0 512 512"><path d="M492 109.5c-17.4 7.7-36 12.9-55.6 15.3 20-12 35.4-31 42.6-53.6-18.7 11.1-39.4 19.2-61.5 23.5C399.8 75.8 374.6 64 346.8 64c-53.5 0-96.8 43.4-96.8 96.9 0 7.6.8 15 2.5 22.1-80.5-4-151.9-42.6-199.6-101.3-8.3 14.3-13.1 31-13.1 48.7 0 33.6 17.2 63.3 43.2 80.7-16-.4-31-4.8-44-12.1v1.2c0 47 33.4 86.1 77.7 95-8.1 2.2-16.7 3.4-25.5 3.4-6.2 0-12.3-.6-18.2-1.8 12.3 38.5 48.1 66.5 90.5 67.3-33.1 26-74.9 41.5-120.3 41.5-7.8 0-15.5-.5-23.1-1.4C62.8 432 113.7 448 168.3 448 346.6 448 444 300.3 444 172.2c0-4.2-.1-8.4-.3-12.5C462.6 146 479 129 492 109.5z"/></symbol><symbol id="facebook" viewBox="0 0 512 512"><path d="M288 192v-38.1c0-17.2 3.8-25.9 30.5-25.9H352V64h-55.9c-68.5 0-91.1 31.4-91.1 85.3V192h-45v64h45v192h83V256h56.4l7.6-64h-64z"/></symbol><symbol id="dropbox" viewBox="0 0 512 512"><path d="M177 77L64 150.9l78.1 62.7L256 143.1zM64 276.3l113 73.9 79-66.1-113.9-70.5zM256 284.1l79 66.1 113-73.9-78.1-62.7zM448 150.9L335 77l-79 66.1 113.9 70.5zM256.2 298.3l-79.8 66-34.4-22.2V367l114 68 114-68v-24.9l-34.2 22.2z"/></symbol></svg>+
\ No newline at end of file
diff --git a/src/assets/no_images.svg b/src/assets/no_images.svg
@@ -0,0 +1 @@
+<svg width="200" height="200" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg"><g fill="none"><path d="M0 0h200v200h-200v-200z" fill="#222"/><g><path stroke="#B4B4B4" stroke-width="4" d="M68 52h50v42h-50z"/><path d="M79 63h44v36h-44v-36z" fill="#222"/><path stroke="#B4B4B4" stroke-width="4" d="M88 72h50v42h-50z"/></g></g></svg>+
\ No newline at end of file
diff --git a/src/assets/picture.html b/src/assets/picture.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML>
+<html>
+	<head>
+		<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+		<title>ctucx' pics</title>
+
+		<link type="text/css" rel="stylesheet" href="/style.css">
+		<link rel="shortcut icon" href="favicon.ico">
+
+		<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0">
+		<meta name="apple-mobile-web-app-status-bar-style" content="black">
+		<meta name="apple-mobile-web-app-capable" content="yes">
+	</head>
+	<body>
+		<header class="header header-view" style="display: flex;">
+			<!--<div class="header-toolbar headerer-toolbar-photo header-toolbar-visible">-->
+			<a class="button" href=".." id="button_close" title="Close Photo"><svg class="iconic"><use xlink:href="/iconic.svg#chevron-left"></use></svg></a>
+			<a class="header-title">{{name}}<svg class="iconic "><use xlink:href="/iconic.svg#caret-bottom"></use></svg></a>
+			<a class="button" href="/original{{orig}}" title="Download"><svg class="iconic"><use xlink:href="/iconic.svg#cloud-download"></use></svg></a>
+			<a class="header-divider"></a>
+
+			<input type="checkbox" id="toggle">
+			<label for="toggle" style="display: block;" class="button button--info" title="Info">
+				<svg class="iconic"><use xlink:href="/iconic.svg#info"></use></svg>
+			</label>
+
+			<div class="sidebar">
+				<div class="sidebar-header">
+					<h1>About</h1>
+				</div>
+
+				<div class="sidebar-wrapper">
+					<div class="sidebar-divider">
+						<h1>Basics</h1>
+					</div>
+
+					<table>
+						<tbody>
+							<tr>
+								<td>Title</td>
+								<td><span id="attr_title">{{name}}</span></td>
+							</tr>
+					 
+							<tr>
+								<td>Description</td>
+								<td><span id="attr_description">{{description}}</span></td>
+							</tr>
+					 
+						</tbody>
+					</table>
+				 
+					<div class="sidebar-divider">
+						<h1>Image</h1>
+					</div>
+			
+					<table>
+						<tbody>
+							<tr>
+								<td>Size</td>
+								<td><span id="attr_size">{{size}}MB</span></td>
+							</tr>
+					 
+							<tr>
+								<td>Resolution</td>
+								<td><span id="attr_resolution" id="resolution">-</span></td>
+							</tr>
+					 
+						</tbody>
+					</table>
+
+					<div class="sidebar-divider">
+						<h1>Camera</h1>
+					</div>
+				
+					<table>
+						<tbody>
+							<tr>
+								<td>Captured</td>
+								<td><span id="attr_captured">-</span></td>
+							</tr>
+
+							<tr>
+						 		<td>Make</td>
+								<td><span id="attr_make">-</span></td>
+							</tr>
+					 
+							<tr>
+								<td>Type/Model</td>
+								<td><span id="attr_type/model">-</span></td>
+							</tr>
+
+							<tr>
+								<td>Shutter Speed</td>
+								<td><span id="attr_shutter-speed">-</span></td>
+							</tr>
+
+							<tr>
+								<td>Shutter Program</td>
+								<td><span id="attr_shutter-program">-</span></td>
+							</tr>
+					 
+							<tr>
+								<td>Aperture</td>
+								<td><span id="attr_aperture">-</span></td>
+							</tr>
+					 
+							<tr>
+								<td>Focal Length</td>
+								<td><span id="attr_focal-length">-</span></td>
+							</tr>
+					 
+					 		<tr>
+								<td>ISO</td>
+								<td><span id="attr_iso">-</span></td>
+							</tr>
+
+					 		<tr>
+								<td>Flash</td>
+								<td><span id="attr_flash">-</span></td>
+							</tr>
+						</tbody>
+					</table>
+				</div>
+			</div>
+		</header>
+
+		<div id="imageview" class="fadeIn full" style="display: block;">
+			<img id="image" class="" src="../medium/{{name}}.jpg">
+			
+			{{#hasPrev}}
+			<div class="arrow_wrapper arrow_wrapper--previous">
+				<a id="previous" href="../{{prev_name}}" style="background-image: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url(&quot;../thumbnails/{{prev_name}}.png&quot;);">
+					<svg class="iconic "><use xlink:href="/iconic.svg#caret-left"></use></svg>
+				</a>
+			</div>
+			{{/hasPrev}}
+
+			{{#hasNext}}
+			<div class="arrow_wrapper arrow_wrapper--next">
+				<a id="next" href="../{{next_name}}" style="background-image: linear-gradient(rgba(0, 0, 0, 0.4), rgba(0, 0, 0, 0.4)), url(&quot;../thumbnails/{{next_name}}.png&quot;);">
+					<svg class="iconic "><use xlink:href="/iconic.svg#caret-right"></use></svg>
+				</a>
+			</div>
+			{{/hasNext}}
+		</div>
+	</body>
+	<script type="text/javascript" src="/exif.js"></script>
+	<script type="text/javascript">
+		window.onload=getExif;
+		window.onkeyup = function(e) {
+			if (e.keyCode == 27) window.location = "..";
+			if (e.keyCode == 39) window.location = "../{{next_name}}";
+			if (e.keyCode == 37) window.location = "../{{prev_name}}";
+			if (e.keyCode == 32) document.getElementById("toggle").checked = true;
+		}
+
+		function getExif() {
+			let image = document.getElementById("image");
+
+			EXIF.getData(image, function() {
+				document.getElementById("attr_resolution").innerHTML       = EXIF.getTag(this, "PixelXDimension") + 'x' + EXIF.getTag(this, "PixelYDimension");
+
+				document.getElementById("attr_captured").innerHTML         = EXIF.getTag(this, "DateTimeOriginal");
+				document.getElementById("attr_make").innerHTML             = EXIF.getTag(this, "Make");
+				document.getElementById("attr_type/model").innerHTML       = EXIF.getTag(this, "Model");
+				document.getElementById("attr_shutter-speed").innerHTML    = EXIF.getTag(this, "ExposureTime") + ' s';
+				document.getElementById("attr_shutter-program").innerHTML  = EXIF.getTag(this, "ExposureProgram");
+				document.getElementById("attr_aperture").innerHTML         = EXIF.getTag(this, "FNumber");
+				document.getElementById("attr_focal-length").innerHTML     = EXIF.getTag(this, "FocalLength") + 'mm';
+				document.getElementById("attr_iso").innerHTML              = EXIF.getTag(this, "ISOSpeedRatings");
+				document.getElementById("attr_flash").innerHTML            = EXIF.getTag(this, "Flash");
+    		});
+		}
+	</script>
+</html>
diff --git a/src/assets/style.css b/src/assets/style.css
@@ -0,0 +1,854 @@
+html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
+  margin: 0;
+  padding: 0;
+  border: 0;
+  font-size: 100%;
+  font: inherit;
+  vertical-align: baseline;
+}
+
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
+  display: block;
+}
+
+body {
+  line-height: 1;
+}
+
+ol, ul {
+  list-style: none;
+}
+
+blockquote, q {
+  quotes: none;
+}
+
+blockquote:before, blockquote:after, q:before, q:after {
+  content: '';
+  content: none;
+}
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+
+* {
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  user-select: none;
+  transition: color .3s, opacity .3s ease-out, transform .3s ease-out, box-shadow .3s;
+}
+
+html,
+body {
+  min-height: 100%;
+}
+
+body {
+  background-color: #1d1d1d;
+  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+  font-size: 12px;
+  -webkit-font-smoothing: antialiased;
+  -moz-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  font-smoothing: antialiased;
+}
+
+body.view {
+  background-color: #0f0f0f;
+}
+
+input {
+  -webkit-user-select: text !important;
+  -moz-user-select: text !important;
+  user-select: text !important;
+}
+
+.iconic {
+  width: 100%;
+  height: 100%;
+}
+
+
+/*****
+ *
+ * Animations
+ *
+ *****/
+
+.fadeIn {
+  animation-name: fadeIn;
+  animation-duration: .3s;
+  animation-fill-mode: forwards;
+  animation-timing-function: cubic-bezier(0.51, 0.92, 0.24, 1);
+}
+
+.fadeOut {
+  animation-name: fadeOut;
+  animation-duration: .3s;
+  animation-fill-mode: forwards;
+  animation-timing-function: cubic-bezier(0.51, 0.92, 0.24, 1);
+}
+
+@keyframes fadeIn {
+  0% {
+    opacity: 0;
+  }
+  100% {
+    opacity: 1;
+  }
+}
+
+@keyframes fadeOut {
+  0% {
+    opacity: 1;
+  }
+  100% {
+    opacity: 0;
+  }
+}
+
+@keyframes moveBackground {
+  0% {
+    background-position-x: 0px;
+  }
+  100% {
+    background-position-x: -100px;
+  }
+}
+
+@keyframes zoomIn {
+  0% {
+    opacity: 0;
+    transform: scale(0.8);
+  }
+  100% {
+    opacity: 1;
+    transform: scale(1);
+  }
+}
+
+@keyframes zoomOut {
+  0% {
+    opacity: 1;
+    transform: scale(1);
+  }
+  100% {
+    opacity: 0;
+    transform: scale(0.8);
+  }
+}
+
+@keyframes pulse {
+  0% {
+    opacity: 1;
+  }
+  50% {
+    opacity: .3;
+  }
+  100% {
+    opacity: 1;
+  }
+}
+
+
+/*****
+ *
+ * Content
+ *
+ *****/
+
+.content {
+  display: flex;
+  flex-wrap: wrap;
+  padding: 0 0 33px;
+  width: 100%;
+  min-height: calc(100% - 83px);
+  -webkit-overflow-scrolling: touch;
+}
+
+.content::before {
+  content: '';
+  position: absolute;
+  left: 0;
+  width: 100%;
+  height: 1px;
+  background: rgba(255, 255, 255, 0.02);
+}
+
+.content-sidebar {
+  width: calc(100% - 300px);
+}
+
+.content.contentZoomIn .album, .content.contentZoomIn .photo {
+  animation-name: zoomIn;
+}
+
+.content.contentZoomIn .divider {
+  animation-name: fadeIn;
+}
+
+.content.contentZoomOut .album, .content.contentZoomOut .photo {
+  animation-name: zoomOut;
+}
+
+.content.contentZoomOut .divider {
+  animation-name: fadeOut;
+}
+
+.content .album,
+.content .photo {
+  display: block;
+  position: relative;
+  width: 202px;
+  height: 202px;
+  margin: 30px 0 0 30px;
+  cursor: default;
+  animation-duration: .2s;
+  animation-fill-mode: forwards;
+  animation-timing-function: cubic-bezier(0.51, 0.92, 0.24, 1);
+  cursor: pointer;
+}
+
+.content .album img,
+.content .photo img {
+  position: absolute;
+  width: 200px;
+  height: 200px;
+  background: #222;
+  color: #222;
+  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
+  border: 1px solid rgba(255, 255, 255, 0.5);
+  transition: opacity .3s ease-out, transform .3s ease-out, border-color .3s ease-out;
+}
+
+.content .album:hover img, .content .album.active img,
+.content .photo:hover img,
+.content .photo.active img {
+  border-color: #2293EC;
+}
+
+.content .album:active img,
+.content .photo:active img {
+  transition: none;
+  border-color: #0f6ab2;
+}
+
+.content .album img:first-child,
+.content .album img:nth-child(2) {
+  transform: rotate(0) translateY(0) translateX(0);
+  opacity: 0;
+}
+
+.content .album:hover img:nth-child(1), .content .album:hover img:nth-child(2) {
+  opacity: 1;
+  will-change: transform;
+}
+
+.content .album:hover img:nth-child(1) {
+  transform: rotate(-2deg) translateY(10px) translateX(-12px);
+}
+
+.content .album:hover img:nth-child(2) {
+  transform: rotate(5deg) translateY(-8px) translateX(12px);
+}
+
+.content .album .overlay,
+.content .photo .overlay {
+  position: absolute;
+  margin: 0 1px;
+  width: 200px;
+  background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.6));
+  bottom: 1px;
+}
+
+.content .photo .overlay {
+  opacity: 0;
+}
+
+.content .photo:hover .overlay,
+.content .photo.active .overlay {
+  opacity: 1;
+}
+
+.content .album .overlay h1,
+.content .photo .overlay h1 {
+  min-height: 19px;
+  width: 180px;
+  margin: 12px 0 5px 15px;
+  color: #fff;
+  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
+  font-size: 16px;
+  font-weight: bold;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+.content .album .overlay p,
+.content .photo .overlay p {
+  display: block;
+  margin: 0 0 12px 15px;
+  font-size: 11px;
+  color: #ccc;
+  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
+}
+
+.content .photo .overlay p .iconic {
+  fill: #ccc;
+  margin: 0 5px 0 0;
+  width: 8px;
+  height: 8px;
+}
+
+.content .divider {
+  margin: 50px 0 0;
+  padding: 10px 0 0;
+  width: 100%;
+  opacity: 0;
+  border-top: 1px solid rgba(255, 255, 255, 0.02);
+  box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+  animation-duration: .2s;
+  animation-fill-mode: forwards;
+  animation-timing-function: cubic-bezier(0.51, 0.92, 0.24, 1);
+}
+
+.content .divider:first-child {
+  margin-top: 10px;
+  border-top: 0;
+  box-shadow: none;
+}
+
+.content .divider h1 {
+  margin: 0 0 0 30px;
+  color: rgba(255, 255, 255, 0.6);
+  font-size: 14px;
+  font-weight: bold;
+}
+
+.no_content {
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  padding-top: 20px;
+  color: rgba(255, 255, 255, 0.35);
+  text-align: center;
+  transform: translateX(-50%) translateY(-50%);
+}
+
+.no_content .iconic {
+  fill: rgba(255, 255, 255, 0.3);
+  margin: 0 0 10px;
+  width: 50px;
+  height: 50px;
+}
+
+.no_content p {
+  font-size: 16px;
+  font-weight: bold;
+}
+
+
+/*****
+ *
+ * Header
+ *
+ *****/
+
+.header {
+  position: fixed;
+  height: 49px;
+  width: 100%;
+  background: linear-gradient(to bottom, #222222, #1a1a1a);
+  border-bottom: 1px solid #0f0f0f;
+  z-index: 1;
+  transition: transform .3s ease-out;
+  display: flex;
+  align-items: center;
+  position: relative;
+  box-sizing: border-box;
+  padding: 0 10px;
+}
+
+.header-hidden {
+  transform: translateY(-60px);
+}
+
+.header-view {
+  background: none;
+  border-bottom: none;
+}
+
+.header-title {
+  width: 100%;
+  padding: 16px 0;
+  color: #fff;
+  font-size: 16px;
+  font-weight: bold;
+  text-align: center;
+  cursor: default;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+.header-title .iconic {
+  display: none;
+  margin: 0 0 0 5px;
+  width: 10px;
+  height: 10px;
+  fill: rgba(255, 255, 255, 0.5);
+  transition: fill .2s ease-out;
+}
+.header-title:hover .iconic {
+  fill: white;
+}
+.header-title:active .iconic {
+  transition: none;
+  fill: rgba(255, 255, 255, 0.8);
+}
+
+.header .button {
+  flex-shrink: 0;
+  padding: 16px 8px;
+  height: 15px;
+  cursor: pointer;
+}
+.header .button .iconic {
+  width: 15px;
+  height: 15px;
+  fill: rgba(255, 255, 255, 0.5);
+  transition: fill .2s ease-out;
+}
+
+.header .button:hover .iconic {
+  fill: white;
+}
+
+.header .button:active .iconic {
+  transition: none;
+  fill: rgba(255, 255, 255, 0.8);
+}
+
+.header .button-eye.active .iconic {
+  fill: #ff9737;
+}
+
+.header .button-info.active .iconic {
+  fill: #2293EC;
+}
+
+.header-divider {
+  flex-shrink: 0;
+  width: 14px;
+}
+
+.header-search {
+  flex-shrink: 0;
+  width: 80px;
+  margin: 0;
+  padding: 5px 12px 6px 12px;
+  background-color: #1d1d1d;
+  color: #fff;
+  border: 1px solid rgba(0, 0, 0, 0.9);
+  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.04);
+  outline: none;
+  border-radius: 50px;
+  opacity: .6;
+  transition: opacity .3s ease-out, box-shadow .3s ease-out, width .2s ease-out;
+}
+
+.header-search:focus {
+  width: 140px;
+  border-color: #2293EC;
+  box-shadow: 0 1px 0 rgba(255, 255, 255, 0);
+  opacity: 1;
+}
+
+.header-search:focus ~ #clearSearch {
+  opacity: 1;
+}
+
+.header-search::-ms-clear {
+  display: none;
+}
+
+.header-clear {
+  position: absolute;
+  top: 13px;
+  right: 60px;
+  padding: 0;
+  color: rgba(255, 255, 255, 0.5);
+  font-size: 20px;
+  opacity: 0;
+  transition: color .2s ease-out;
+  cursor: default;
+}
+
+.header-clear:hover {
+  color: white;
+}
+
+
+/*****
+ *
+ * Header
+ *
+ *****/
+
+.header {
+  position: fixed;
+  height: 49px;
+  width: 100%;
+  background: linear-gradient(to bottom, #222222, #1a1a1a);
+  border-bottom: 1px solid #0f0f0f;
+  z-index: 1;
+  transition: transform .3s ease-out;
+  display: flex;
+  align-items: center;
+  position: relative;
+  box-sizing: border-box;
+  padding: 0 10px;
+}
+
+.header-hidden {
+  transform: translateY(-60px);
+}
+
+.header-view {
+  background: none;
+  border-bottom: none;
+}
+
+.header-title {
+  width: 100%;
+  padding: 16px 0;
+  color: #fff;
+  font-size: 16px;
+  font-weight: bold;
+  text-align: center;
+  cursor: default;
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+.header-title .iconic {
+  display: none;
+  margin: 0 0 0 5px;
+  width: 10px;
+  height: 10px;
+  fill: rgba(255, 255, 255, 0.5);
+  transition: fill .2s ease-out;
+}
+.header-title:hover .iconic {
+  fill: white;
+}
+.header-title:active .iconic {
+  transition: none;
+  fill: rgba(255, 255, 255, 0.8);
+}
+
+.header .button {
+  flex-shrink: 0;
+  padding: 16px 8px;
+  height: 15px;
+}
+.header .button .iconic {
+  width: 15px;
+  height: 15px;
+  fill: rgba(255, 255, 255, 0.5);
+  transition: fill .2s ease-out;
+}
+
+.header .button:hover .iconic {
+  fill: white;
+}
+
+.header .button:active .iconic {
+  transition: none;
+  fill: rgba(255, 255, 255, 0.8);
+}
+
+.header .button-eye.active .iconic {
+  fill: #ff9737;
+}
+
+.header .button-info.active .iconic {
+  fill: #2293EC;
+}
+
+.header-divider {
+  flex-shrink: 0;
+  width: 14px;
+}
+
+.header-search {
+  flex-shrink: 0;
+  width: 80px;
+  margin: 0;
+  padding: 5px 12px 6px 12px;
+  background-color: #1d1d1d;
+  color: #fff;
+  border: 1px solid rgba(0, 0, 0, 0.9);
+  box-shadow: 0 1px 0 rgba(255, 255, 255, 0.04);
+  outline: none;
+  border-radius: 50px;
+  opacity: .6;
+  transition: opacity .3s ease-out, box-shadow .3s ease-out, width .2s ease-out;
+}
+
+.header-search:focus {
+  width: 140px;
+  border-color: #2293EC;
+  box-shadow: 0 1px 0 rgba(255, 255, 255, 0);
+  opacity: 1;
+}
+
+.header-search:focus ~ #clearSearch {
+  opacity: 1;
+}
+
+.header-search::-ms-clear {
+  display: none;
+}
+
+.header-clear {
+  position: absolute;
+  top: 13px;
+  right: 60px;
+  padding: 0;
+  color: rgba(255, 255, 255, 0.5);
+  font-size: 20px;
+  opacity: 0;
+  transition: color .2s ease-out;
+  cursor: default;
+}
+
+.header-clear:hover {
+  color: white;
+}
+
+
+/*****
+ *
+ * Sidebar
+ *
+ *****/
+
+input[type=checkbox] {
+  display: none;
+}
+
+input[type=checkbox]:checked ~ .sidebar {
+  display: block;
+}
+
+.sidebar {
+  display: none;
+  position: fixed;
+  top: 50px;
+  right: 0;
+  width: 350px;
+  height: calc(100% - 50px);
+  background-color: rgba(25, 25, 25, 0.98);
+  border-left: 1px solid rgba(0, 0, 0, 0.2);
+}
+
+
+.sidebar.notSelectable table tr td:last-child {
+  -webkit-user-select: none !important;
+  -moz-user-select: none !important;
+  user-select: none !important;
+}
+
+.sidebar-header {
+  float: left;
+  height: 49px;
+  width: 100%;
+  background: linear-gradient(to bottom, rgba(255, 255, 255, 0.02), transparent);
+  border-top: 1px solid #2293EC;
+}
+
+.sidebar-header h1 {
+  position: absolute;
+  margin: 15px 0 15px 0;
+  width: 100%;
+  color: #fff;
+  font-size: 16px;
+  font-weight: bold;
+  text-align: center;
+}
+
+.sidebar-wrapper {
+  float: left;
+  height: calc(100% - 49px);
+  width: 350px;
+  overflow: auto;
+  -webkit-overflow-scrolling: touch;
+}
+
+.sidebar__divider {
+  float: left;
+  padding: 12px 0 8px;
+  width: 100%;
+  border-top: 1px solid rgba(255, 255, 255, 0.02);
+  box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+}
+
+.sidebar-divider:first-child {
+  border-top: 0;
+  box-shaodw: none;
+}
+
+.sidebar-divider h1 {
+  margin: 0 0 0 20px;
+  color: rgba(255, 255, 255, 0.6);
+  font-size: 14px;
+  font-weight: bold;
+}
+
+.sidebar table {
+  float: left;
+  margin: 10px 0 15px 20px;
+  width: calc(100% - 20px);
+}
+
+.sidebar table tr td {
+  padding: 5px 0px;
+  color: #fff;
+  font-size: 14px;
+  line-height: 19px;
+}
+
+.sidebar table tr td:first-child {
+  width: 110px;
+}
+
+.sidebar table tr td:last-child {
+  padding-right: 10px;
+  -webkit-user-select: text;
+  -moz-user-select: text;
+  user-select: text;
+}
+
+
+/*****
+ *
+ * Imageviewer
+ *
+ *****/
+
+ #imageview {
+  position: fixed;
+  display: none;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(10, 10, 10, 0.98);
+  transition: background-color .3s;
+}
+
+#imageview.view {
+  background-color: inherit;
+}
+
+#imageview.full {
+  background-color: black;
+}
+
+#imageview #image {
+  position: absolute;
+  top: 60px;
+  right: 30px;
+  bottom: 30px;
+  left: 30px;
+  margin: auto;
+  max-width: calc(100% - 60px);
+  max-height: calc(100% - 90px);
+  width: auto;
+  height: auto;
+  transition: top .3s, right .3s, bottom .3s, left .3s, max-width .3s, max-height .3s;
+  animation-name: zoomIn;
+  animation-duration: .3s;
+  animation-timing-function: cubic-bezier(0.51, 0.92, 0.24, 1.15);
+}
+
+#imageview.full #image {
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  max-width: 100%;
+  max-height: 100%;
+}
+
+#imageview .arrow_wrapper {
+  position: fixed;
+  width: 15%;
+  height: calc(100% - 60px);
+  top: 60px;
+}
+
+#imageview .arrow_wrapper--previous {
+  left: 0;
+}
+
+#imageview .arrow_wrapper--next {
+  right: 0;
+}
+
+#imageview .arrow_wrapper a {
+  position: fixed;
+  top: 50%;
+  margin: -19px 0 0;
+  padding: 8px 12px;
+  width: 16px;
+  height: 22px;
+  background-size: 100% 100%;
+  border: 1px solid rgba(255, 255, 255, 0.8);
+  opacity: .6;
+  z-index: 2;
+  transition: transform .2s ease-out, opacity .2s ease-out;
+  will-change: transform;
+}
+
+#imageview .arrow_wrapper a#previous {
+  left: -1px;
+  transform: translateX(-100%);
+}
+
+#imageview .arrow_wrapper a#next {
+  right: -1px;
+  transform: translateX(100%);
+}
+
+#imageview .arrow_wrapper:hover a#previous, #imageview .arrow_wrapper:hover a#next {
+  transform: translateX(0);
+}
+
+#imageview .arrow_wrapper a:hover {
+  opacity: 1;
+}
+
+#imageview .arrow_wrapper .iconic {
+  fill: rgba(255, 255, 255, 0.8);
+}
+
+@media (max-width: 640px) {
+  #imageview .arrow_wrapper {
+    display: none;
+  }
+
+  #imageview #image {
+    top: 60px;
+    right: 20px;
+    bottom: 20px;
+    left: 20px;
+    max-width: calc(100% - 40px);
+    max-height: calc(100% - 80px);
+  }
+}+
\ No newline at end of file
diff --git a/src/picture_gallery.nim b/src/picture_gallery.nim
@@ -0,0 +1,166 @@
+import os, osproc, options, json, strutils, sequtils, random
+import moustachu
+
+const asset_exif_js      = staticRead"./assets/exif.js"
+const asset_style_css    = staticRead"./assets/style.css"
+const asset_noimages_svg = staticRead"./assets/no_images.svg"
+const asset_iconic_svg   = staticRead"./assets/iconic.svg"
+const asset_album_html   = staticRead"./assets/album.html"
+const asset_picture_html = staticRead"./assets/picture.html"
+
+type
+    Album* = object
+        name*:       string
+        path*:       string
+        visible*:    bool
+        desc*:       Option[string]
+        subalbums*:  seq[Album]
+        pictures*:   seq[Picture]
+
+    Picture* = object
+        name*:     string
+        path*:     string
+        filename*: string
+        desc*:     Option[string]
+        size*:     BiggestInt
+
+proc createPicture(path: string): Picture = 
+    let allowedExtensions = @[".jpg", ".jpeg", ".JPG", ".JPEG"]
+    let (dir, name, ext) = splitFile(path)
+
+    if not allowedExtensions.contains(ext): return
+
+    if fileExists(dir & "/" & name & ".txt"): result.desc = some(readFile(dir & "/" & name & ".txt")) 
+
+    result.name       = name
+    result.path       = dir
+    result.filename   = lastPathPart(path)
+    result.size       = getFileSize(path)
+
+proc createAlbum(path: string, isRoot: bool): Album = 
+    result.name    = lastPathPart(path)
+
+    if isRoot != false:
+        result.path       = path
+
+    if not fileExists(path & "/.nomedia"): result.visible = true
+    if fileExists(path & "/.description"): result.desc = some(readFile(path & "/.description")) 
+
+    for element in walkDir(path):
+        if element.kind != pcFile:
+            let album = createAlbum(element.path, false)
+            if album.name != "": result.subalbums.add(album)
+        else:
+            let picture = createPicture(element.path)
+            if picture.name != "": result.pictures.add(picture)
+
+
+proc placeAssets(targetDir: string) =
+    echo "============"
+    echo "Copying Assets to target dir"
+
+    discard existsOrCreateDir(targetDir)
+    writeFile(targetDir & "/exif.js", asset_exif_js)
+    writeFile(targetDir & "/style.css", asset_style_css)
+    writeFile(targetDir & "/no_images.svg", asset_noimages_svg)
+    writeFile(targetDir & "/iconic.svg", asset_iconic_svg)
+
+proc generateWebsite(sourceDir: string, targetDir: string, album: Album) =
+    echo "============"
+    echo "Create Album:" & album.name
+    discard existsOrCreateDir(targetDir)
+    discard existsOrCreateDir(targetDir & "/thumbnails")
+    discard existsOrCreateDir(targetDir & "/medium")
+
+    var templateContext = %* {
+            "name":         album.name,
+            "description":  "-",
+            "numAlbums":    album.subalbums.len,
+            "numPictures":  album.pictures.len,
+            "isSubalbum":   true,
+            "hasSubalbums": false,
+            "subalbums":    [],
+            "pictures":     []
+        }
+
+    var smallThumbnails  = newSeq[string]()
+    var mediumThumbnails = newSeq[string]()
+
+    if album.path != "": templateContext["isSubalbum"]          = %false
+    if not album.desc.isNone: templateContext["description"]    = %album.desc.get
+    if album.subalbums.len > 0: templateContext["hasSubalbums"] = %true
+
+    for subalbum in album.subalbums:
+        generateWebsite(sourceDir, targetDir & "/" & subalbum.name, subalbum)
+
+        var thumbnail1 = "/no_images.svg"
+        var thumbnail2 = "/no_images.svg"
+        var thumbnail3 = "/no_images.svg"
+
+        if subalbum.pictures.len > 0:
+            thumbnail1 = subalbum.name & "/thumbnails/" & subalbum.pictures[rand(0..subalbum.pictures.len-1)].name & ".png"
+            thumbnail2 = subalbum.name & "/thumbnails/" & subalbum.pictures[rand(0..subalbum.pictures.len-1)].name & ".png"
+            thumbnail3 = subalbum.name & "/thumbnails/" & subalbum.pictures[rand(0..subalbum.pictures.len-1)].name & ".png"
+
+        templateContext["subalbums"].add(%* {
+                "name":        subalbum.name,
+                "numAlbums":   subalbum.subalbums.len,
+                "numPictures": subalbum.pictures.len,
+                "thumbnail1":  thumbnail1,
+                "thumbnail2":  thumbnail2,
+                "thumbnail3":  thumbnail3
+            })
+
+    for index, picture in album.pictures:
+        discard existsOrCreateDir(targetDir & "/" & picture.name)
+        var pictureTemplateContext = %* {
+                "name":        picture.name,
+                "orig":        picture.path.replace(sourceDir, "") & "/" & picture.filename,
+                "description": "-",
+                "hasPrev":     false,
+                "hasNext":     false,
+                "size":        (picture.size.int/1000/1000)
+            }
+
+        if not picture.desc.isNone: pictureTemplateContext["description"] = %picture.desc.get
+
+        if index > 0:
+            pictureTemplateContext["hasPrev"]   = %true
+            pictureTemplateContext["prev_name"] = %album.pictures[index-1].name
+
+        if index+1 < album.pictures.len:
+            pictureTemplateContext["hasNext"]   = %true
+            pictureTemplateContext["next_name"] = %album.pictures[index+1].name
+
+        echo "Generate picture page: " & picture.name
+        writeFile(targetDir & "/" & picture.name & "/index.html", render(asset_picture_html, pictureTemplateContext))
+
+
+        if not fileExists(targetDir & "/thumbnails/" & picture.name & ".png"):
+            smallThumbnails.add("/usr/bin/mogrify -strip -quality 90 -format png -path " & targetDir & "/thumbnails -thumbnail 200x200^ -gravity center -extent 200x200 " & picture.path & "/" & picture.filename)
+
+        if not fileExists(targetDir & "/medium/" & picture.name & ".jpg"):
+            mediumThumbnails.add("/usr/bin/mogrify -format jpg -path " & targetDir & "/medium -resize 1920x\\> " & picture.path & "/" & picture.filename)
+
+        templateContext["pictures"].add(%* {
+                "name":        picture.name,
+            })
+
+    echo "Generate small thumbnails!"
+    discard execProcesses(smallThumbnails)
+    echo "Generate medium thumbnails!"
+    discard execProcesses(mediumThumbnails)
+
+    echo "Generate album page!\n"
+    writeFile(targetDir & "/index.html", render(asset_album_html, templateContext))
+
+
+
+randomize()
+
+let sourceDir = paramStr(1)
+let targetDir = paramStr(2)
+
+let mainAlbum = createAlbum(sourceDir, true)
+placeAssets(targetDir)
+generateWebsite(sourceDir, targetDir, mainAlbum)+
\ No newline at end of file