Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mcrwfrd/hugo-frances-theme.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormcrwfrd <mcrwfrd@gmail.com>2019-07-11 03:51:22 +0300
committermcrwfrd <mcrwfrd@gmail.com>2019-07-11 03:51:22 +0300
commitd9998b191c70eeeec54533d181ea2cfb4632fecf (patch)
treef84bca89dc64686e34c80f5b4f4c01854c55e1b3
Initial commit
-rw-r--r--LICENSE20
-rw-r--r--archetypes/default.md2
-rw-r--r--layouts/404.html0
-rw-r--r--layouts/_default/baseof.html12
-rw-r--r--layouts/_default/list.html0
-rw-r--r--layouts/_default/single.html0
-rw-r--r--layouts/index.html15
-rw-r--r--layouts/partials/footer.html5
-rw-r--r--layouts/partials/head.html20
-rw-r--r--layouts/partials/header.html16
-rw-r--r--layouts/partials/scripts.html440
-rw-r--r--static/css/component.css195
-rw-r--r--static/css/main.css81
-rw-r--r--static/js/modernizr.custom.js4
-rw-r--r--theme.toml21
15 files changed, 831 insertions, 0 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..17855f7
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2019 Michael Crawford
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000..ac36e06
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,2 @@
++++
++++
diff --git a/layouts/404.html b/layouts/404.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/layouts/404.html
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
new file mode 100644
index 0000000..3f28e15
--- /dev/null
+++ b/layouts/_default/baseof.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html>
+ {{- partial "head.html" . -}}
+ <body>
+ {{- partial "header.html" . -}}
+ <div id="content">
+ {{- block "main" . }}{{- end }}
+ </div>
+ <!-- {{- partial "footer.html" . -}} -->
+ {{- partial "scripts.html" . -}}
+ </body>
+</html>
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/layouts/_default/list.html
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/layouts/_default/single.html
diff --git a/layouts/index.html b/layouts/index.html
new file mode 100644
index 0000000..de2ed4f
--- /dev/null
+++ b/layouts/index.html
@@ -0,0 +1,15 @@
+{{ define "main" }}
+ <ul id="og-grid" class="og-grid">
+ {{ range $.Site.Data.artworks.artworks }}
+ <li>
+ <a
+ href=""
+ data-largesrc="{{ .image }}"
+ data-title="{{ .title }}"
+ data-description="{{ .description }}">
+ <img src="{{ .thumb }}" alt="{{ .alt }}"/>
+ </a>
+ </li>
+ {{ end }}
+ </ul>
+{{ end }} \ No newline at end of file
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
new file mode 100644
index 0000000..6e52adc
--- /dev/null
+++ b/layouts/partials/footer.html
@@ -0,0 +1,5 @@
+{{ if .Site.Params.copyrightname }}
+ <footer class="footer">
+ <p class="text-muted ui center aligned header">Copyright &#xA9; 2017 {{.Site.Params.CopyrightName }}. All Rights Reserved.</p>
+ </footer>
+{{ end }}
diff --git a/layouts/partials/head.html b/layouts/partials/head.html
new file mode 100644
index 0000000..8418e38
--- /dev/null
+++ b/layouts/partials/head.html
@@ -0,0 +1,20 @@
+<head>
+ <meta charset="UTF-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>{{ .Site.Title | default "Demo Hugo Site"}}</title>
+ <meta name="description" content="{{ with .Site.Params.description }}{{ . }}{{ end }}" />
+ <meta name="keywords" content="{{ with .Site.Params.keywords }}{{ . }}{{ end }}" />
+ <meta name="author" content="{{ with .Site.Params.author }}{{ . }}{{ end }}" />
+
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
+
+ <link rel="stylesheet" type="text/css" href="{{ .Site.BaseURL }}css/main.css?v=1.2.2" />
+ <link rel="stylesheet" type="text/css" href="{{ .Site.BaseURL }}css/component.css" />
+
+ <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
+ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
+
+ <script src="{{ .Site.BaseURL }}js/modernizr.custom.js"></script>
+</head> \ No newline at end of file
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
new file mode 100644
index 0000000..1317e3f
--- /dev/null
+++ b/layouts/partials/header.html
@@ -0,0 +1,16 @@
+<nav class="navbar navbar-expand-lg navbar-light bg-light">
+ <a class="navbar-brand" href="#">{{ $.Site.Params.Author | default "John Doe"}}</a>
+
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
+ <span class="navbar-toggler-icon"></span>
+ </button>
+
+ <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
+ <div class="navbar-nav">
+ <a class="nav-item nav-link active" href="#">Home <span class="sr-only">(current)</span></a>
+ <a class="nav-item nav-link" href="#">Features</a>
+ <a class="nav-item nav-link" href="#">Pricing</a>
+ <a class="nav-item nav-link disabled" href="#">Disabled</a>
+ </div>
+ </div>
+</nav>
diff --git a/layouts/partials/scripts.html b/layouts/partials/scripts.html
new file mode 100644
index 0000000..97294cf
--- /dev/null
+++ b/layouts/partials/scripts.html
@@ -0,0 +1,440 @@
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
+ <script>
+ var $event = $.event,
+ $special,
+ resizeTimeout;
+
+ $special = $event.special.debouncedresize = {
+ setup: function() {
+ $( this ).on( "resize", $special.handler );
+ },
+ teardown: function() {
+ $( this ).off( "resize", $special.handler );
+ },
+ handler: function( event, execAsap ) {
+ var context = this,
+ args = arguments,
+ dispatch = function() {
+ event.type = "debouncedresize";
+ $event.dispatch.apply( context, args );
+ };
+
+ if ( resizeTimeout ) {
+ clearTimeout( resizeTimeout );
+ }
+
+ execAsap ?
+ dispatch() :
+ resizeTimeout = setTimeout( dispatch, $special.threshold );
+ },
+ threshold: 250
+ };
+
+ var BLANK = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';
+
+ $.fn.imagesLoaded = function( callback ) {
+ var $this = this,
+ deferred = $.isFunction($.Deferred) ? $.Deferred() : 0,
+ hasNotify = $.isFunction(deferred.notify),
+ $images = $this.find('img').add( $this.filter('img') ),
+ loaded = [],
+ proper = [],
+ broken = [];
+
+ if ($.isPlainObject(callback)) {
+ $.each(callback, function (key, value) {
+ if (key === 'callback') {
+ callback = value;
+ } else if (deferred) {
+ deferred[key](value);
+ }
+ });
+ }
+
+ function doneLoading() {
+ var $proper = $(proper),
+ $broken = $(broken);
+
+ if ( deferred ) {
+ if ( broken.length ) {
+ deferred.reject( $images, $proper, $broken );
+ } else {
+ deferred.resolve( $images );
+ }
+ }
+
+ if ( $.isFunction( callback ) ) {
+ callback.call( $this, $images, $proper, $broken );
+ }
+ }
+
+ function imgLoaded( img, isBroken ) {
+ if ( img.src === BLANK || $.inArray( img, loaded ) !== -1 ) {
+ return;
+ }
+
+ loaded.push( img );
+
+ if ( isBroken ) {
+ broken.push( img );
+ } else {
+ proper.push( img );
+ }
+
+ $.data( img, 'imagesLoaded', { isBroken: isBroken, src: img.src } );
+
+ if ( hasNotify ) {
+ deferred.notifyWith( $(img), [ isBroken, $images, $(proper), $(broken) ] );
+ }
+
+ if ( $images.length === loaded.length ){
+ setTimeout( doneLoading );
+ $images.unbind( '.imagesLoaded' );
+ }
+ }
+
+ if ( !$images.length ) {
+ doneLoading();
+ } else {
+ $images.bind( 'load.imagesLoaded error.imagesLoaded', function( event ){
+ imgLoaded( event.target, event.type === 'error' );
+ }).each( function( i, el ) {
+ var src = el.src;
+
+ var cached = $.data( el, 'imagesLoaded' );
+ if ( cached && cached.src === src ) {
+ imgLoaded( el, cached.isBroken );
+ return;
+ }
+
+ if ( el.complete && el.naturalWidth !== undefined ) {
+ imgLoaded( el, el.naturalWidth === 0 || el.naturalHeight === 0 );
+ return;
+ }
+
+ if ( el.readyState || el.complete ) {
+ el.src = BLANK;
+ el.src = src;
+ }
+ });
+ }
+
+ return deferred ? deferred.promise( $this ) : $this;
+ };
+
+ var Grid = (function() {
+
+ var $grid = $( '*#og-grid' ),
+ $items = $grid.children( 'li' ),
+ current = -1,
+ previewPos = -1,
+ scrollExtra = 0,
+ marginExpanded = 10,
+ $window = $( window ), winsize,
+ $body = $( 'html, body' ),
+ transEndEventNames = {
+ 'WebkitTransition' : 'webkitTransitionEnd',
+ 'MozTransition' : 'transitionend',
+ 'OTransition' : 'oTransitionEnd',
+ 'msTransition' : 'MSTransitionEnd',
+ 'transition' : 'transitionend'
+ },
+ transEndEventName = transEndEventNames[ Modernizr.prefixed( 'transition' ) ],
+ support = Modernizr.csstransitions,
+ settings = {
+ minHeight : 500,
+ speed : 350,
+ easing : 'ease'
+ };
+
+ function init( config ) {
+
+ settings = $.extend( true, {}, settings, config );
+
+ $grid.imagesLoaded( function() {
+
+ saveItemInfo( true );
+ getWinSize();
+ initEvents();
+
+ } );
+
+ }
+
+ function addItems( $newitems ) {
+
+ $items = $items.add( $newitems );
+
+ $newitems.each( function() {
+ var $item = $( this );
+ $item.data( {
+ offsetTop : $item.offset().top,
+ height : $item.height()
+ } );
+ } );
+
+ initItemsEvents( $newitems );
+
+ }
+
+ function saveItemInfo( saveheight ) {
+ $items.each( function() {
+ var $item = $( this );
+ $item.data( 'offsetTop', $item.offset().top );
+ if( saveheight ) {
+ $item.data( 'height', $item.height() );
+ }
+ } );
+ }
+
+ function initEvents() {
+
+ initItemsEvents( $items );
+
+ $window.on( 'debouncedresize', function() {
+
+ scrollExtra = 0;
+ previewPos = -1;
+ saveItemInfo();
+ getWinSize();
+ var preview = $.data( this, 'preview' );
+ if( typeof preview != 'undefined' ) {
+ hidePreview();
+ }
+
+ } );
+
+ }
+
+ function initItemsEvents( $items ) {
+ $items.on( 'click', 'span.og-close', function() {
+ hidePreview();
+ return false;
+ } ).children( 'a' ).on( 'click', function(e) {
+
+ var $item = $( this ).parent();
+ current === Array.from($items).findIndex(d => d == $item[0]) ? hidePreview() : showPreview( $item );
+ return false;
+
+ } );
+ }
+
+ function getWinSize() {
+ winsize = { width : $window.width(), height : $window.height() };
+ }
+
+ function showPreview( $item ) {
+
+ var preview = $.data( this, 'preview' ),
+ position = $item.data( 'offsetTop' );
+
+ scrollExtra = 0;
+
+ if( typeof preview != 'undefined' ) {
+
+ if( previewPos !== position ) {
+ if( position > previewPos ) {
+ scrollExtra = preview.height;
+ }
+ hidePreview();
+ }
+ else {
+ preview.update( $item );
+ return false;
+ }
+
+ }
+
+ previewPos = position;
+ preview = $.data( this, 'preview', new Preview( $item ) );
+ preview.open();
+
+ }
+
+ function hidePreview() {
+ current = -1;
+ var preview = $.data( this, 'preview' );
+ preview.close();
+ $.removeData( this, 'preview' );
+ }
+
+ function Preview( $item ) {
+ this.$item = $item;
+ this.expandedIdx = Array.from($items).findIndex(d => d == this.$item[0]);
+ this.create();
+ this.update();
+ }
+
+ Preview.prototype = {
+ create : function() {
+ this.$title = $( '<h3></h3>' );
+ this.$description = $( '<p></p>' );
+ this.$href = $( '<a href="#" target="_blank">{{ .Site.Params.buttontext }}</a>' );
+ this.$details = $( '<div class="og-details"></div>' ).append( this.$title, this.$description, this.$href );
+ this.$loading = $( '<div class="og-loading"></div>' );
+ this.$fullimage = $( '<div class="og-fullimg"></div>' ).append( this.$loading );
+ this.$closePreview = $( '<span class="og-close"></span>' );
+ this.$previewInner = $( '<div class="og-expander-inner"></div>' ).append( this.$closePreview, this.$fullimage, this.$details );
+ this.$previewEl = $( '<div class="og-expander"></div>' ).append( this.$previewInner );
+ this.$item.append( this.getEl() );
+ if( support ) {
+ this.setTransition();
+ }
+ },
+ update : function( $item ) {
+
+ if( $item ) {
+ this.$item = $item;
+ }
+
+ if( current !== -1 ) {
+ var $currentItem = $items.eq( current );
+ $currentItem.removeClass( 'og-expanded' );
+ this.$item.addClass( 'og-expanded' );
+ this.positionPreview();
+ }
+
+ current = this.$item.index();
+
+ var $itemEl = this.$item.children( 'a' ),
+ eldata = {
+ href : $itemEl.attr( 'href' ),
+ largesrc : $itemEl.data( 'largesrc' ),
+ title : $itemEl.data( 'title' ),
+ description : $itemEl.data( 'description' ),
+ buttontext : $itemEl.data( 'buttontext' )
+ };
+
+ this.$title.html( eldata.title );
+ this.$description.html( eldata.description );
+ if(eldata.buttontext) this.$href.text(eldata.buttontext);
+ else this.$href.text("{{ .Site.Params.buttontext }}")
+
+ if (eldata.href) {
+ this.$href.attr( 'href', eldata.href );
+ this.$href.show();
+ }
+ else {
+ this.$href.hide();
+ }
+
+ var self = this;
+
+ if( typeof self.$largeImg != 'undefined' ) {
+ self.$largeImg.remove();
+ }
+
+ if( self.$fullimage.is( ':visible' ) ) {
+ this.$loading.show();
+ $( '<img/>' ).load( function() {
+ var $img = $( this );
+ if( $img.attr( 'src' ) === self.$item.children('a').data( 'largesrc' ) ) {
+ self.$loading.hide();
+ self.$fullimage.find( 'img' ).remove();
+ self.$largeImg = $img.fadeIn( 350 );
+ self.$fullimage.append( self.$largeImg );
+ }
+ } ).attr( 'src', eldata.largesrc );
+ }
+
+ },
+ open : function() {
+
+ setTimeout( $.proxy( function() {
+ this.setHeights();
+ this.positionPreview();
+ }, this ), 25 );
+
+ },
+ close : function() {
+
+ var self = this,
+ onEndFn = function() {
+ if( support ) {
+ $( this ).off( transEndEventName );
+ }
+ self.$item.removeClass( 'og-expanded' );
+ self.$previewEl.remove();
+ };
+
+ setTimeout( $.proxy( function() {
+
+ if( typeof this.$largeImg !== 'undefined' ) {
+ this.$largeImg.fadeOut( 'fast' );
+ }
+ this.$previewEl.css( 'height', 0 );
+ var $expandedItem = $items.eq( this.expandedIdx );
+ $expandedItem.css( 'height', $expandedItem.data( 'height' ) ).on( transEndEventName, onEndFn );
+
+ if( !support ) {
+ onEndFn.call();
+ }
+
+ }, this ), 25 );
+
+ return false;
+
+ },
+ calcHeight : function() {
+
+ var heightPreview = winsize.height - this.$item.data( 'height' ) - marginExpanded,
+ itemHeight = winsize.height;
+
+ if( heightPreview < settings.minHeight ) {
+ heightPreview = settings.minHeight;
+ itemHeight = settings.minHeight + this.$item.data( 'height' ) + marginExpanded;
+ }
+
+ this.height = heightPreview;
+ this.itemHeight = itemHeight;
+
+ },
+ setHeights : function() {
+
+ var self = this,
+ onEndFn = function() {
+ if( support ) {
+ self.$item.off( transEndEventName );
+ }
+ self.$item.addClass( 'og-expanded' );
+ };
+
+ this.calcHeight();
+ this.$previewEl.css( 'height', this.height );
+ this.$item.css( 'height', this.itemHeight ).on( transEndEventName, onEndFn );
+
+ if( !support ) {
+ onEndFn.call();
+ }
+
+ },
+ positionPreview : function() {
+
+ var position = this.$item.data( 'offsetTop' ),
+ previewOffsetT = this.$previewEl.offset().top - scrollExtra,
+ scrollVal = this.height + this.$item.data( 'height' ) + marginExpanded <= winsize.height ? position : this.height < winsize.height ? previewOffsetT - ( winsize.height - this.height ) : previewOffsetT;
+
+ $body.animate( { scrollTop : scrollVal }, settings.speed );
+
+ },
+ setTransition : function() {
+ this.$previewEl.css( 'transition', 'height ' + settings.speed + 'ms ' + settings.easing );
+ this.$item.css( 'transition', 'height ' + settings.speed + 'ms ' + settings.easing );
+ },
+ getEl : function() {
+ return this.$previewEl;
+ }
+ }
+
+ return {
+ init : init,
+ addItems : addItems
+ };
+
+ })();
+ </script>
+ <script>
+ $(function() {
+ Grid.init();
+ });
+ </script> \ No newline at end of file
diff --git a/static/css/component.css b/static/css/component.css
new file mode 100644
index 0000000..8f21f49
--- /dev/null
+++ b/static/css/component.css
@@ -0,0 +1,195 @@
+.og-grid {
+ list-style: none;
+ padding: 20px 0;
+ margin: 0 auto;
+ text-align: center;
+ width: 100%;
+}
+
+.og-grid li {
+ display: inline-block;
+ margin: 10px 5px 0 5px;
+ vertical-align: top;
+ height: 250px;
+}
+
+.og-grid li > a,
+.og-grid li > a img {
+ border: none;
+ outline: none;
+ display: block;
+ position: relative;
+}
+
+.og-grid li.og-expanded > a::after {
+ top: auto;
+ border: solid transparent;
+ content: " ";
+ height: 0;
+ width: 0;
+ position: absolute;
+ pointer-events: none;
+ border-bottom-color: #ddd;
+ border-width: 15px;
+ left: 50%;
+ margin: -20px 0 0 -15px;
+}
+
+.og-expander {
+ position: absolute;
+ background: #ddd;
+ top: auto;
+ left: 0;
+ width: 100%;
+ margin-top: 10px;
+ text-align: left;
+ height: 0;
+ overflow: hidden;
+}
+
+.og-expander-inner {
+ padding: 50px 30px;
+ height: 100%;
+}
+
+.og-close {
+ position: absolute;
+ width: 40px;
+ height: 40px;
+ top: 20px;
+ right: 20px;
+ cursor: pointer;
+}
+
+.og-close::before,
+.og-close::after {
+ content: '';
+ position: absolute;
+ width: 100%;
+ top: 50%;
+ height: 1px;
+ background: #888;
+ -webkit-transform: rotate(45deg);
+ -moz-transform: rotate(45deg);
+ transform: rotate(45deg);
+}
+
+.og-close::after {
+ -webkit-transform: rotate(-45deg);
+ -moz-transform: rotate(-45deg);
+ transform: rotate(-45deg);
+}
+
+.og-close:hover::before,
+.og-close:hover::after {
+ background: #333;
+}
+
+.og-fullimg,
+.og-details {
+ width: 50%;
+ float: left;
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+}
+
+.og-details {
+ padding: 0 40px 0 20px;
+}
+
+.og-fullimg {
+ text-align: center;
+}
+
+.og-fullimg img {
+ display: inline-block;
+ max-height: 100%;
+ max-width: 100%;
+}
+
+.og-details h3 {
+ font-weight: 300;
+ font-size: 52px;
+ padding: 40px 0 10px;
+ margin-bottom: 10px;
+}
+
+.og-details p {
+ font-weight: 400;
+ font-size: 16px;
+ line-height: 22px;
+ color: #999;
+}
+
+.og-details a {
+ font-weight: 700;
+ font-size: 16px;
+ color: #333;
+ text-transform: uppercase;
+ letter-spacing: 2px;
+ padding: 10px 20px;
+ border: 3px solid #333;
+ display: inline-block;
+ margin: 30px 0 0;
+ outline: none;
+}
+
+.og-details a::before {
+ content: '\2192';
+ display: inline-block;
+ margin-right: 10px;
+}
+
+.og-details a:hover {
+ border-color: #999;
+ color: #999;
+}
+
+.og-loading {
+ width: 20px;
+ height: 20px;
+ border-radius: 50%;
+ background: #ddd;
+ box-shadow: 0 0 1px #ccc, 15px 30px 1px #ccc, -15px 30px 1px #ccc;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ margin: -25px 0 0 -25px;
+ -webkit-animation: loader 0.5s infinite ease-in-out both;
+ -moz-animation: loader 0.5s infinite ease-in-out both;
+ animation: loader 0.5s infinite ease-in-out both;
+}
+
+@-webkit-keyframes loader {
+ 0% { background: #ddd; }
+ 33% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ccc, -15px 30px 1px #ddd; }
+ 66% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ddd, -15px 30px 1px #ccc; }
+}
+
+@-moz-keyframes loader {
+ 0% { background: #ddd; }
+ 33% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ccc, -15px 30px 1px #ddd; }
+ 66% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ddd, -15px 30px 1px #ccc; }
+}
+
+@keyframes loader {
+ 0% { background: #ddd; }
+ 33% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ccc, -15px 30px 1px #ddd; }
+ 66% { background: #ccc; box-shadow: 0 0 1px #ccc, 15px 30px 1px #ddd, -15px 30px 1px #ccc; }
+}
+
+@media screen and (max-width: 830px) {
+
+ .og-expander h3 { font-size: 32px; }
+ .og-expander p { font-size: 13px; }
+ .og-expander a { font-size: 12px; }
+
+}
+
+@media screen and (max-width: 650px) {
+
+ .og-fullimg { display: none; }
+ .og-details { float: none; width: 100%; }
+
+} \ No newline at end of file
diff --git a/static/css/main.css b/static/css/main.css
new file mode 100644
index 0000000..b0d1b6c
--- /dev/null
+++ b/static/css/main.css
@@ -0,0 +1,81 @@
+
+/* General Demo Style */
+@import url(//fonts.googleapis.com/css?family=Lato:300,400,700);
+
+html { height: 100%; }
+
+*,
+*:after,
+*:before {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 0;
+ margin: 0;
+}
+
+/* Clearfix hack by Nicolas Gallagher: http://nicolasgallagher.com/micro-clearfix-hack/ */
+.clearfix:before,
+.clearfix:after {
+ content: " ";
+ display: table;
+}
+
+.clearfix:after {
+ clear: both;
+}
+
+.clearfix {
+ *zoom: 1;
+}
+
+body {
+ font-family: 'Lato', Calibri, Arial, sans-serif;
+ font-weight: 300;
+ font-size: 15px;
+ color: #333;
+ overflow: scroll;
+ overflow-x: hidden;
+}
+
+a {
+ color: #555;
+ text-decoration: none;
+}
+
+.container {
+ width: 100%;
+ position: relative;
+}
+
+.container > header {
+ width: 90%;
+ max-width: 1240px;
+ margin: 0 auto;
+ position: relative;
+ padding: 0 30px 50px 30px;
+}
+
+.container > header {
+ padding: 60px 30px 50px;
+ text-align: center;
+}
+
+.container > header h1 {
+ font-size: 34px;
+ line-height: 38px;
+ margin: 0 auto;
+ font-weight: 700;
+ color: #333;
+}
+
+.container > header h1 span {
+ display: block;
+ font-size: 20px;
+ font-weight: 300;
+}
+
+.main > p {
+ text-align: center;
+ padding: 50px 20px;
+} \ No newline at end of file
diff --git a/static/js/modernizr.custom.js b/static/js/modernizr.custom.js
new file mode 100644
index 0000000..fb55d0f
--- /dev/null
+++ b/static/js/modernizr.custom.js
@@ -0,0 +1,4 @@
+/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
+ * Build: http://modernizr.com/download/#-csstransitions-shiv-cssclasses-prefixed-testprop-testallprops-domprefixes-load
+ */
+;window.Modernizr=function(a,b,c){function x(a){j.cssText=a}function y(a,b){return x(prefixes.join(a+";")+(b||""))}function z(a,b){return typeof a===b}function A(a,b){return!!~(""+a).indexOf(b)}function B(a,b){for(var d in a){var e=a[d];if(!A(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function C(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:z(f,"function")?f.bind(d||b):f}return!1}function D(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+n.join(d+" ")+d).split(" ");return z(b,"string")||z(b,"undefined")?B(e,b):(e=(a+" "+o.join(d+" ")+d).split(" "),C(e,b,c))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m="Webkit Moz O ms",n=m.split(" "),o=m.toLowerCase().split(" "),p={},q={},r={},s=[],t=s.slice,u,v={}.hasOwnProperty,w;!z(v,"undefined")&&!z(v.call,"undefined")?w=function(a,b){return v.call(a,b)}:w=function(a,b){return b in a&&z(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=t.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(t.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(t.call(arguments)))};return e}),p.csstransitions=function(){return D("transition")};for(var E in p)w(p,E)&&(u=E.toLowerCase(),e[u]=p[E](),s.push((e[u]?"":"no-")+u));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)w(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},x(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._domPrefixes=o,e._cssomPrefixes=n,e.testProp=function(a){return B([a])},e.testAllProps=D,e.prefixed=function(a,b,c){return b?D(a,b,c):D(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+s.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))}; \ No newline at end of file
diff --git a/theme.toml b/theme.toml
new file mode 100644
index 0000000..5b9371b
--- /dev/null
+++ b/theme.toml
@@ -0,0 +1,21 @@
+# theme.toml template for a Hugo theme
+# See https://github.com/gohugoio/hugoThemes#themetoml for an example
+
+name = "Artist Portfolio"
+license = "MIT"
+licenselink = "https://github.com/yourname/yourtheme/blob/master/LICENSE"
+description = ""
+homepage = "http://example.com/"
+tags = []
+features = []
+min_version = "0.41"
+
+[author]
+ name = ""
+ homepage = ""
+
+# If porting an existing theme
+[original]
+ name = ""
+ homepage = ""
+ repo = ""