diff --git a/public_html/LICENSE b/LICENSE similarity index 100% rename from public_html/LICENSE rename to LICENSE diff --git a/public_html/README.md b/README.md similarity index 100% rename from public_html/README.md rename to README.md diff --git a/public_html/assets/css/font-awesome.min.css b/assets/css/font-awesome.min.css similarity index 100% rename from public_html/assets/css/font-awesome.min.css rename to assets/css/font-awesome.min.css diff --git a/public_html/assets/css/ie8.css b/assets/css/ie8.css similarity index 100% rename from public_html/assets/css/ie8.css rename to assets/css/ie8.css diff --git a/public_html/assets/css/ie9.css b/assets/css/ie9.css similarity index 100% rename from public_html/assets/css/ie9.css rename to assets/css/ie9.css diff --git a/public_html/assets/css/images/arrow.svg b/assets/css/images/arrow.svg similarity index 98% rename from public_html/assets/css/images/arrow.svg rename to assets/css/images/arrow.svg index 2176c14..734ef5d 100644 --- a/public_html/assets/css/images/arrow.svg +++ b/assets/css/images/arrow.svg @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/public_html/assets/css/images/overlay.png b/assets/css/images/overlay.png similarity index 100% rename from public_html/assets/css/images/overlay.png rename to assets/css/images/overlay.png diff --git a/public_html/assets/css/main.css b/assets/css/main.css similarity index 100% rename from public_html/assets/css/main.css rename to assets/css/main.css diff --git a/public_html/assets/fonts/FontAwesome.otf b/assets/fonts/FontAwesome.otf similarity index 100% rename from public_html/assets/fonts/FontAwesome.otf rename to assets/fonts/FontAwesome.otf diff --git a/public_html/assets/fonts/fontawesome-webfont.eot b/assets/fonts/fontawesome-webfont.eot similarity index 100% rename from public_html/assets/fonts/fontawesome-webfont.eot rename to assets/fonts/fontawesome-webfont.eot diff --git a/public_html/assets/fonts/fontawesome-webfont.svg b/assets/fonts/fontawesome-webfont.svg similarity index 100% rename from public_html/assets/fonts/fontawesome-webfont.svg rename to assets/fonts/fontawesome-webfont.svg diff --git a/public_html/assets/fonts/fontawesome-webfont.ttf b/assets/fonts/fontawesome-webfont.ttf similarity index 100% rename from public_html/assets/fonts/fontawesome-webfont.ttf rename to assets/fonts/fontawesome-webfont.ttf diff --git a/public_html/assets/fonts/fontawesome-webfont.woff b/assets/fonts/fontawesome-webfont.woff similarity index 100% rename from public_html/assets/fonts/fontawesome-webfont.woff rename to assets/fonts/fontawesome-webfont.woff diff --git a/public_html/assets/fonts/fontawesome-webfont.woff2 b/assets/fonts/fontawesome-webfont.woff2 similarity index 100% rename from public_html/assets/fonts/fontawesome-webfont.woff2 rename to assets/fonts/fontawesome-webfont.woff2 diff --git a/public_html/assets/js/ie/backgroundsize.min.htc b/assets/js/ie/backgroundsize.min.htc similarity index 99% rename from public_html/assets/js/ie/backgroundsize.min.htc rename to assets/js/ie/backgroundsize.min.htc index 3d9960d..9b2592e 100644 --- a/public_html/assets/js/ie/backgroundsize.min.htc +++ b/assets/js/ie/backgroundsize.min.htc @@ -1,7 +1,7 @@ - - - - -
') - .css('background-image', ( - 'url("assets/css/images/overlay.png"), url("' + $primaryImg.attr('src') + '")' - )) - .appendTo($body); - - // Scrollex. - options = { - mode: 'middle', - delay: 200, - top: '-10vh', - bottom: '-10vh' - }; - - if (skel.canUse('transition')) { - - options.init = function() { $bg.removeClass('active'); }; - options.enter = function() { $bg.addClass('active'); }; - options.leave = function() { $bg.removeClass('active'); }; - - } - else { - - $bg - .css('opacity', 1) - .hide(); - - options.init = function() { $bg.fadeOut(0); }; - options.enter = function() { $bg.fadeIn(400); }; - options.leave = function() { $bg.fadeOut(400); }; - - } - - $this.scrollex(options); - - }); - - }); - +/* + Highlights by HTML5 UP + html5up.net | @ajlkn + Free for personal and commercial use under the CCA 3.0 license (html5up.net/license) +*/ + +(function($) { + + skel.breakpoints({ + large: '(max-width: 1680px)', + medium: '(max-width: 980px)', + small: '(max-width: 736px)', + xsmall: '(max-width: 480px)' + }); + + $(function() { + + var $window = $(window), + $body = $('body'), + $html = $('html'); + + // Disable animations/transitions until the page has loaded. + $html.addClass('is-loading'); + + $window.on('load', function() { + window.setTimeout(function() { + $html.removeClass('is-loading'); + }, 0); + }); + + // Touch mode. + if (skel.vars.mobile) { + + var $wrapper; + + // Create wrapper. + $body.wrapInner('
'); + $wrapper = $('#wrapper'); + + // Hack: iOS vh bug. + if (skel.vars.os == 'ios') + $wrapper + .css('margin-top', -25) + .css('padding-bottom', 25); + + // Pass scroll event to window. + $wrapper.on('scroll', function() { + $window.trigger('scroll'); + }); + + // Scrolly. + $window.on('load.hl_scrolly', function() { + + $('.scrolly').scrolly({ + speed: 1500, + parent: $wrapper, + pollOnce: true + }); + + $window.off('load.hl_scrolly'); + + }); + + // Enable touch mode. + $html.addClass('is-touch'); + + } + else { + + // Scrolly. + $('.scrolly').scrolly({ + speed: 1500 + }); + + } + + // Fix: Placeholder polyfill. + $('form').placeholder(); + + // Prioritize "important" elements on medium. + skel.on('+medium -medium', function() { + $.prioritize( + '.important\\28 medium\\29', + skel.breakpoint('medium').active + ); + }); + + // Header. + var $header = $('#header'), + $headerTitle = $header.find('header'), + $headerContainer = $header.find('.container'); + + // Make title fixed. + if (!skel.vars.mobile) { + + $window.on('load.hl_headerTitle', function() { + + skel.on('-medium !medium', function() { + + $headerTitle + .css('position', 'fixed') + .css('height', 'auto') + .css('top', '50%') + .css('left', '0') + .css('width', '100%') + .css('margin-top', ($headerTitle.outerHeight() / -2)); + + }); + + skel.on('+medium', function() { + + $headerTitle + .css('position', '') + .css('height', '') + .css('top', '') + .css('left', '') + .css('width', '') + .css('margin-top', ''); + + }); + + $window.off('load.hl_headerTitle'); + + }); + + } + + // Scrollex. + skel.on('-small !small', function() { + $header.scrollex({ + terminate: function() { + + $headerTitle.css('opacity', ''); + + }, + scroll: function(progress) { + + // Fade out title as user scrolls down. + if (progress > 0.5) + x = 1 - progress; + else + x = progress; + + $headerTitle.css('opacity', Math.max(0, Math.min(1, x * 2))); + + } + }); + }); + + skel.on('+small', function() { + + $header.unscrollex(); + + }); + + // Main sections. + $('.main').each(function() { + + var $this = $(this), + $primaryImg = $this.find('.image.primary > img'), + $bg, + options; + + // No primary image? Bail. + if ($primaryImg.length == 0) + return; + + // Hack: IE8 fallback. + if (skel.vars.IEVersion < 9) { + + $this + .css('background-image', 'url("' + $primaryImg.attr('src') + '")') + .css('-ms-behavior', 'url("css/ie/backgroundsize.min.htc")'); + + return; + + } + + // Create bg and append it to body. + $bg = $('
') + .css('background-image', ( + 'url("assets/css/images/overlay.png"), url("' + $primaryImg.attr('src') + '")' + )) + .appendTo($body); + + // Scrollex. + options = { + mode: 'middle', + delay: 200, + top: '-10vh', + bottom: '-10vh' + }; + + if (skel.canUse('transition')) { + + options.init = function() { $bg.removeClass('active'); }; + options.enter = function() { $bg.addClass('active'); }; + options.leave = function() { $bg.removeClass('active'); }; + + } + else { + + $bg + .css('opacity', 1) + .hide(); + + options.init = function() { $bg.fadeOut(0); }; + options.enter = function() { $bg.fadeIn(400); }; + options.leave = function() { $bg.fadeOut(400); }; + + } + + $this.scrollex(options); + + }); + + }); + })(jQuery); \ No newline at end of file diff --git a/public_html/assets/js/skel.min.js b/assets/js/skel.min.js similarity index 99% rename from public_html/assets/js/skel.min.js rename to assets/js/skel.min.js index 0e7633a..6ca4bf1 100644 --- a/public_html/assets/js/skel.min.js +++ b/assets/js/skel.min.js @@ -1,2 +1,2 @@ -/* skel.js v3.0.1 | (c) skel.io | MIT licensed */ +/* skel.js v3.0.1 | (c) skel.io | MIT licensed */ var skel=function(){"use strict";var t={breakpointIds:null,events:{},isInit:!1,obj:{attachments:{},breakpoints:{},head:null,states:{}},sd:"/",state:null,stateHandlers:{},stateId:"",vars:{},DOMReady:null,indexOf:null,isArray:null,iterate:null,matchesMedia:null,extend:function(e,n){t.iterate(n,function(i){t.isArray(n[i])?(t.isArray(e[i])||(e[i]=[]),t.extend(e[i],n[i])):"object"==typeof n[i]?("object"!=typeof e[i]&&(e[i]={}),t.extend(e[i],n[i])):e[i]=n[i]})},newStyle:function(t){var e=document.createElement("style");return e.type="text/css",e.innerHTML=t,e},_canUse:null,canUse:function(e){t._canUse||(t._canUse=document.createElement("div"));var n=t._canUse.style,i=e.charAt(0).toUpperCase()+e.slice(1);return e in n||"Moz"+i in n||"Webkit"+i in n||"O"+i in n||"ms"+i in n},on:function(e,n){var i=e.split(/[\s]+/);return t.iterate(i,function(e){var a=i[e];if(t.isInit){if("init"==a)return void n();if("change"==a)n();else{var r=a.charAt(0);if("+"==r||"!"==r){var o=a.substring(1);if(o in t.obj.breakpoints)if("+"==r&&t.obj.breakpoints[o].active)n();else if("!"==r&&!t.obj.breakpoints[o].active)return void n()}}}t.events[a]||(t.events[a]=[]),t.events[a].push(n)}),t},trigger:function(e){return t.events[e]&&0!=t.events[e].length?(t.iterate(t.events[e],function(n){t.events[e][n]()}),t):void 0},breakpoint:function(e){return t.obj.breakpoints[e]},breakpoints:function(e){function n(t,e){this.name=this.id=t,this.media=e,this.active=!1,this.wasActive=!1}return n.prototype.matches=function(){return t.matchesMedia(this.media)},n.prototype.sync=function(){this.wasActive=this.active,this.active=this.matches()},t.iterate(e,function(i){t.obj.breakpoints[i]=new n(i,e[i])}),window.setTimeout(function(){t.poll()},0),t},addStateHandler:function(e,n){t.stateHandlers[e]=n},callStateHandler:function(e){var n=t.stateHandlers[e]();t.iterate(n,function(e){t.state.attachments.push(n[e])})},changeState:function(e){t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].sync()}),t.vars.lastStateId=t.stateId,t.stateId=e,t.breakpointIds=t.stateId===t.sd?[]:t.stateId.substring(1).split(t.sd),t.obj.states[t.stateId]?t.state=t.obj.states[t.stateId]:(t.obj.states[t.stateId]={attachments:[]},t.state=t.obj.states[t.stateId],t.iterate(t.stateHandlers,t.callStateHandler)),t.detachAll(t.state.attachments),t.attachAll(t.state.attachments),t.vars.stateId=t.stateId,t.vars.state=t.state,t.trigger("change"),t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].active?t.obj.breakpoints[e].wasActive||t.trigger("+"+e):t.obj.breakpoints[e].wasActive&&t.trigger("-"+e)})},generateStateConfig:function(e,n){var i={};return t.extend(i,e),t.iterate(t.breakpointIds,function(e){t.extend(i,n[t.breakpointIds[e]])}),i},getStateId:function(){var e="";return t.iterate(t.obj.breakpoints,function(n){var i=t.obj.breakpoints[n];i.matches()&&(e+=t.sd+i.id)}),e},poll:function(){var e="";e=t.getStateId(),""===e&&(e=t.sd),e!==t.stateId&&t.changeState(e)},_attach:null,attach:function(e){var n=t.obj.head,i=e.element;return i.parentNode&&i.parentNode.tagName?!1:(t._attach||(t._attach=n.firstChild),n.insertBefore(i,t._attach.nextSibling),e.permanent&&(t._attach=i),!0)},attachAll:function(e){var n=[];t.iterate(e,function(t){n[e[t].priority]||(n[e[t].priority]=[]),n[e[t].priority].push(e[t])}),n.reverse(),t.iterate(n,function(e){t.iterate(n[e],function(i){t.attach(n[e][i])})})},detach:function(t){var e=t.element;return t.permanent||!e.parentNode||e.parentNode&&!e.parentNode.tagName?!1:(e.parentNode.removeChild(e),!0)},detachAll:function(e){var n={};t.iterate(e,function(t){n[e[t].id]=!0}),t.iterate(t.obj.attachments,function(e){e in n||t.detach(t.obj.attachments[e])})},attachment:function(e){return e in t.obj.attachments?t.obj.attachments[e]:null},newAttachment:function(e,n,i,a){return t.obj.attachments[e]={id:e,element:n,priority:i,permanent:a}},init:function(){t.initMethods(),t.initVars(),t.initEvents(),t.obj.head=document.getElementsByTagName("head")[0],t.isInit=!0,t.trigger("init")},initEvents:function(){t.on("resize",function(){t.poll()}),t.on("orientationChange",function(){t.poll()}),t.DOMReady(function(){t.trigger("ready")}),window.onload&&t.on("load",window.onload),window.onload=function(){t.trigger("load")},window.onresize&&t.on("resize",window.onresize),window.onresize=function(){t.trigger("resize")},window.onorientationchange&&t.on("orientationChange",window.onorientationchange),window.onorientationchange=function(){t.trigger("orientationChange")}},initMethods:function(){document.addEventListener?!function(e,n){t.DOMReady=n()}("domready",function(){function t(t){for(r=1;t=n.shift();)t()}var e,n=[],i=document,a="DOMContentLoaded",r=/^loaded|^c/.test(i.readyState);return i.addEventListener(a,e=function(){i.removeEventListener(a,e),t()}),function(t){r?t():n.push(t)}}):!function(e,n){t.DOMReady=n()}("domready",function(t){function e(t){for(h=1;t=i.shift();)t()}var n,i=[],a=!1,r=document,o=r.documentElement,s=o.doScroll,c="DOMContentLoaded",d="addEventListener",u="onreadystatechange",l="readyState",f=s?/^loaded|^c/:/^loaded|c/,h=f.test(r[l]);return r[d]&&r[d](c,n=function(){r.removeEventListener(c,n,a),e()},a),s&&r.attachEvent(u,n=function(){/^c/.test(r[l])&&(r.detachEvent(u,n),e())}),t=s?function(e){self!=top?h?e():i.push(e):function(){try{o.doScroll("left")}catch(n){return setTimeout(function(){t(e)},50)}e()}()}:function(t){h?t():i.push(t)}}),Array.prototype.indexOf?t.indexOf=function(t,e){return t.indexOf(e)}:t.indexOf=function(t,e){if("string"==typeof t)return t.indexOf(e);var n,i,a=e?e:0;if(!this)throw new TypeError;if(i=this.length,0===i||a>=i)return-1;for(0>a&&(a=i-Math.abs(a)),n=a;i>n;n++)if(this[n]===t)return n;return-1},Array.isArray?t.isArray=function(t){return Array.isArray(t)}:t.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)},Object.keys?t.iterate=function(t,e){if(!t)return[];var n,i=Object.keys(t);for(n=0;i[n]&&e(i[n],t[i[n]])!==!1;n++);}:t.iterate=function(t,e){if(!t)return[];var n;for(n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])===!1)break},window.matchMedia?t.matchesMedia=function(t){return""==t?!0:window.matchMedia(t).matches}:window.styleMedia||window.media?t.matchesMedia=function(t){if(""==t)return!0;var e=window.styleMedia||window.media;return e.matchMedium(t||"all")}:window.getComputedStyle?t.matchesMedia=function(t){if(""==t)return!0;var e=document.createElement("style"),n=document.getElementsByTagName("script")[0],i=null;e.type="text/css",e.id="matchmediajs-test",n.parentNode.insertBefore(e,n),i="getComputedStyle"in window&&window.getComputedStyle(e,null)||e.currentStyle;var a="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return e.styleSheet?e.styleSheet.cssText=a:e.textContent=a,"1px"===i.width}:t.matchesMedia=function(t){if(""==t)return!0;var e,n,i,a,r={"min-width":null,"max-width":null},o=!1;for(i=t.split(/\s+and\s+/),e=0;er["max-width"]||null!==r["min-height"]&&cr["max-height"]?!1:!0},navigator.userAgent.match(/MSIE ([0-9]+)/)&&RegExp.$1<9&&(t.newStyle=function(t){var e=document.createElement("span");return e.innerHTML=' ",e})},initVars:function(){var e,n,i,a=navigator.userAgent;e="other",n=0,i=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(RegExp.$1),!1):void 0}),t.vars.browser=e,t.vars.browserVersion=n,e="other",n=0,i=[["ios",/([0-9_]+) like Mac OS X/,function(t){return t.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(t){return 0}],["wp",/Windows Phone ([0-9\.]+)/,null],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(t){return t.replace("_",".").replace("_","")}],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(i[2]?i[2](RegExp.$1):RegExp.$1),!1):void 0}),t.vars.os=e,t.vars.osVersion=n,t.vars.IEVersion="ie"==t.vars.browser?t.vars.browserVersion:99,t.vars.touch="wp"==t.vars.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),t.vars.mobile="wp"==t.vars.os||"android"==t.vars.os||"ios"==t.vars.os||"bb"==t.vars.os}};return t.init(),t}();!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.skel=e()}(this,function(){return skel}); diff --git a/public_html/assets/js/util.js b/assets/js/util.js similarity index 95% rename from public_html/assets/js/util.js rename to assets/js/util.js index bdb8e9f..ecf7b37 100644 --- a/public_html/assets/js/util.js +++ b/assets/js/util.js @@ -1,587 +1,587 @@ -(function($) { - - /** - * Generate an indented list of links from a nav. Meant for use with panel(). - * @return {jQuery} jQuery object. - */ - $.fn.navList = function() { - - var $this = $(this); - $a = $this.find('a'), - b = []; - - $a.each(function() { - - var $this = $(this), - indent = Math.max(0, $this.parents('li').length - 1), - href = $this.attr('href'), - target = $this.attr('target'); - - b.push( - '' + - '' + - $this.text() + - '' - ); - - }); - - return b.join(''); - - }; - - /** - * Panel-ify an element. - * @param {object} userConfig User config. - * @return {jQuery} jQuery object. - */ - $.fn.panel = function(userConfig) { - - // No elements? - if (this.length == 0) - return $this; - - // Multiple elements? - if (this.length > 1) { - - for (var i=0; i < this.length; i++) - $(this[i]).panel(userConfig); - - return $this; - - } - - // Vars. - var $this = $(this), - $body = $('body'), - $window = $(window), - id = $this.attr('id'), - config; - - // Config. - config = $.extend({ - - // Delay. - delay: 0, - - // Hide panel on link click. - hideOnClick: false, - - // Hide panel on escape keypress. - hideOnEscape: false, - - // Hide panel on swipe. - hideOnSwipe: false, - - // Reset scroll position on hide. - resetScroll: false, - - // Reset forms on hide. - resetForms: false, - - // Side of viewport the panel will appear. - side: null, - - // Target element for "class". - target: $this, - - // Class to toggle. - visibleClass: 'visible' - - }, userConfig); - - // Expand "target" if it's not a jQuery object already. - if (typeof config.target != 'jQuery') - config.target = $(config.target); - - // Panel. - - // Methods. - $this._hide = function(event) { - - // Already hidden? Bail. - if (!config.target.hasClass(config.visibleClass)) - return; - - // If an event was provided, cancel it. - if (event) { - - event.preventDefault(); - event.stopPropagation(); - - } - - // Hide. - config.target.removeClass(config.visibleClass); - - // Post-hide stuff. - window.setTimeout(function() { - - // Reset scroll position. - if (config.resetScroll) - $this.scrollTop(0); - - // Reset forms. - if (config.resetForms) - $this.find('form').each(function() { - this.reset(); - }); - - }, config.delay); - - }; - - // Vendor fixes. - $this - .css('-ms-overflow-style', '-ms-autohiding-scrollbar') - .css('-webkit-overflow-scrolling', 'touch'); - - // Hide on click. - if (config.hideOnClick) { - - $this.find('a') - .css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)'); - - $this - .on('click', 'a', function(event) { - - var $a = $(this), - href = $a.attr('href'), - target = $a.attr('target'); - - if (!href || href == '#' || href == '' || href == '#' + id) - return; - - // Cancel original event. - event.preventDefault(); - event.stopPropagation(); - - // Hide panel. - $this._hide(); - - // Redirect to href. - window.setTimeout(function() { - - if (target == '_blank') - window.open(href); - else - window.location.href = href; - - }, config.delay + 10); - - }); - - } - - // Event: Touch stuff. - $this.on('touchstart', function(event) { - - $this.touchPosX = event.originalEvent.touches[0].pageX; - $this.touchPosY = event.originalEvent.touches[0].pageY; - - }) - - $this.on('touchmove', function(event) { - - if ($this.touchPosX === null - || $this.touchPosY === null) - return; - - var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX, - diffY = $this.touchPosY - event.originalEvent.touches[0].pageY, - th = $this.outerHeight(), - ts = ($this.get(0).scrollHeight - $this.scrollTop()); - - // Hide on swipe? - if (config.hideOnSwipe) { - - var result = false, - boundary = 20, - delta = 50; - - switch (config.side) { - - case 'left': - result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta); - break; - - case 'right': - result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta)); - break; - - case 'top': - result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta); - break; - - case 'bottom': - result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta)); - break; - - default: - break; - - } - - if (result) { - - $this.touchPosX = null; - $this.touchPosY = null; - $this._hide(); - - return false; - - } - - } - - // Prevent vertical scrolling past the top or bottom. - if (($this.scrollTop() < 0 && diffY < 0) - || (ts > (th - 2) && ts < (th + 2) && diffY > 0)) { - - event.preventDefault(); - event.stopPropagation(); - - } - - }); - - // Event: Prevent certain events inside the panel from bubbling. - $this.on('click touchend touchstart touchmove', function(event) { - event.stopPropagation(); - }); - - // Event: Hide panel if a child anchor tag pointing to its ID is clicked. - $this.on('click', 'a[href="#' + id + '"]', function(event) { - - event.preventDefault(); - event.stopPropagation(); - - config.target.removeClass(config.visibleClass); - - }); - - // Body. - - // Event: Hide panel on body click/tap. - $body.on('click touchend', function(event) { - $this._hide(event); - }); - - // Event: Toggle. - $body.on('click', 'a[href="#' + id + '"]', function(event) { - - event.preventDefault(); - event.stopPropagation(); - - config.target.toggleClass(config.visibleClass); - - }); - - // Window. - - // Event: Hide on ESC. - if (config.hideOnEscape) - $window.on('keydown', function(event) { - - if (event.keyCode == 27) - $this._hide(event); - - }); - - return $this; - - }; - - /** - * Apply "placeholder" attribute polyfill to one or more forms. - * @return {jQuery} jQuery object. - */ - $.fn.placeholder = function() { - - // Browser natively supports placeholders? Bail. - if (typeof (document.createElement('input')).placeholder != 'undefined') - return $(this); - - // No elements? - if (this.length == 0) - return $this; - - // Multiple elements? - if (this.length > 1) { - - for (var i=0; i < this.length; i++) - $(this[i]).placeholder(); - - return $this; - - } - - // Vars. - var $this = $(this); - - // Text, TextArea. - $this.find('input[type=text],textarea') - .each(function() { - - var i = $(this); - - if (i.val() == '' - || i.val() == i.attr('placeholder')) - i - .addClass('polyfill-placeholder') - .val(i.attr('placeholder')); - - }) - .on('blur', function() { - - var i = $(this); - - if (i.attr('name').match(/-polyfill-field$/)) - return; - - if (i.val() == '') - i - .addClass('polyfill-placeholder') - .val(i.attr('placeholder')); - - }) - .on('focus', function() { - - var i = $(this); - - if (i.attr('name').match(/-polyfill-field$/)) - return; - - if (i.val() == i.attr('placeholder')) - i - .removeClass('polyfill-placeholder') - .val(''); - - }); - - // Password. - $this.find('input[type=password]') - .each(function() { - - var i = $(this); - var x = $( - $('
') - .append(i.clone()) - .remove() - .html() - .replace(/type="password"/i, 'type="text"') - .replace(/type=password/i, 'type=text') - ); - - if (i.attr('id') != '') - x.attr('id', i.attr('id') + '-polyfill-field'); - - if (i.attr('name') != '') - x.attr('name', i.attr('name') + '-polyfill-field'); - - x.addClass('polyfill-placeholder') - .val(x.attr('placeholder')).insertAfter(i); - - if (i.val() == '') - i.hide(); - else - x.hide(); - - i - .on('blur', function(event) { - - event.preventDefault(); - - var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); - - if (i.val() == '') { - - i.hide(); - x.show(); - - } - - }); - - x - .on('focus', function(event) { - - event.preventDefault(); - - var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']'); - - x.hide(); - - i - .show() - .focus(); - - }) - .on('keypress', function(event) { - - event.preventDefault(); - x.val(''); - - }); - - }); - - // Events. - $this - .on('submit', function() { - - $this.find('input[type=text],input[type=password],textarea') - .each(function(event) { - - var i = $(this); - - if (i.attr('name').match(/-polyfill-field$/)) - i.attr('name', ''); - - if (i.val() == i.attr('placeholder')) { - - i.removeClass('polyfill-placeholder'); - i.val(''); - - } - - }); - - }) - .on('reset', function(event) { - - event.preventDefault(); - - $this.find('select') - .val($('option:first').val()); - - $this.find('input,textarea') - .each(function() { - - var i = $(this), - x; - - i.removeClass('polyfill-placeholder'); - - switch (this.type) { - - case 'submit': - case 'reset': - break; - - case 'password': - i.val(i.attr('defaultValue')); - - x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); - - if (i.val() == '') { - i.hide(); - x.show(); - } - else { - i.show(); - x.hide(); - } - - break; - - case 'checkbox': - case 'radio': - i.attr('checked', i.attr('defaultValue')); - break; - - case 'text': - case 'textarea': - i.val(i.attr('defaultValue')); - - if (i.val() == '') { - i.addClass('polyfill-placeholder'); - i.val(i.attr('placeholder')); - } - - break; - - default: - i.val(i.attr('defaultValue')); - break; - - } - }); - - }); - - return $this; - - }; - - /** - * Moves elements to/from the first positions of their respective parents. - * @param {jQuery} $elements Elements (or selector) to move. - * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations. - */ - $.prioritize = function($elements, condition) { - - var key = '__prioritize'; - - // Expand $elements if it's not already a jQuery object. - if (typeof $elements != 'jQuery') - $elements = $($elements); - - // Step through elements. - $elements.each(function() { - - var $e = $(this), $p, - $parent = $e.parent(); - - // No parent? Bail. - if ($parent.length == 0) - return; - - // Not moved? Move it. - if (!$e.data(key)) { - - // Condition is false? Bail. - if (!condition) - return; - - // Get placeholder (which will serve as our point of reference for when this element needs to move back). - $p = $e.prev(); - - // Couldn't find anything? Means this element's already at the top, so bail. - if ($p.length == 0) - return; - - // Move element to top of parent. - $e.prependTo($parent); - - // Mark element as moved. - $e.data(key, $p); - - } - - // Moved already? - else { - - // Condition is true? Bail. - if (condition) - return; - - $p = $e.data(key); - - // Move element back to its original location (using our placeholder). - $e.insertAfter($p); - - // Unmark element as moved. - $e.removeData(key); - - } - - }); - - }; - +(function($) { + + /** + * Generate an indented list of links from a nav. Meant for use with panel(). + * @return {jQuery} jQuery object. + */ + $.fn.navList = function() { + + var $this = $(this); + $a = $this.find('a'), + b = []; + + $a.each(function() { + + var $this = $(this), + indent = Math.max(0, $this.parents('li').length - 1), + href = $this.attr('href'), + target = $this.attr('target'); + + b.push( + '' + + '' + + $this.text() + + '' + ); + + }); + + return b.join(''); + + }; + + /** + * Panel-ify an element. + * @param {object} userConfig User config. + * @return {jQuery} jQuery object. + */ + $.fn.panel = function(userConfig) { + + // No elements? + if (this.length == 0) + return $this; + + // Multiple elements? + if (this.length > 1) { + + for (var i=0; i < this.length; i++) + $(this[i]).panel(userConfig); + + return $this; + + } + + // Vars. + var $this = $(this), + $body = $('body'), + $window = $(window), + id = $this.attr('id'), + config; + + // Config. + config = $.extend({ + + // Delay. + delay: 0, + + // Hide panel on link click. + hideOnClick: false, + + // Hide panel on escape keypress. + hideOnEscape: false, + + // Hide panel on swipe. + hideOnSwipe: false, + + // Reset scroll position on hide. + resetScroll: false, + + // Reset forms on hide. + resetForms: false, + + // Side of viewport the panel will appear. + side: null, + + // Target element for "class". + target: $this, + + // Class to toggle. + visibleClass: 'visible' + + }, userConfig); + + // Expand "target" if it's not a jQuery object already. + if (typeof config.target != 'jQuery') + config.target = $(config.target); + + // Panel. + + // Methods. + $this._hide = function(event) { + + // Already hidden? Bail. + if (!config.target.hasClass(config.visibleClass)) + return; + + // If an event was provided, cancel it. + if (event) { + + event.preventDefault(); + event.stopPropagation(); + + } + + // Hide. + config.target.removeClass(config.visibleClass); + + // Post-hide stuff. + window.setTimeout(function() { + + // Reset scroll position. + if (config.resetScroll) + $this.scrollTop(0); + + // Reset forms. + if (config.resetForms) + $this.find('form').each(function() { + this.reset(); + }); + + }, config.delay); + + }; + + // Vendor fixes. + $this + .css('-ms-overflow-style', '-ms-autohiding-scrollbar') + .css('-webkit-overflow-scrolling', 'touch'); + + // Hide on click. + if (config.hideOnClick) { + + $this.find('a') + .css('-webkit-tap-highlight-color', 'rgba(0,0,0,0)'); + + $this + .on('click', 'a', function(event) { + + var $a = $(this), + href = $a.attr('href'), + target = $a.attr('target'); + + if (!href || href == '#' || href == '' || href == '#' + id) + return; + + // Cancel original event. + event.preventDefault(); + event.stopPropagation(); + + // Hide panel. + $this._hide(); + + // Redirect to href. + window.setTimeout(function() { + + if (target == '_blank') + window.open(href); + else + window.location.href = href; + + }, config.delay + 10); + + }); + + } + + // Event: Touch stuff. + $this.on('touchstart', function(event) { + + $this.touchPosX = event.originalEvent.touches[0].pageX; + $this.touchPosY = event.originalEvent.touches[0].pageY; + + }) + + $this.on('touchmove', function(event) { + + if ($this.touchPosX === null + || $this.touchPosY === null) + return; + + var diffX = $this.touchPosX - event.originalEvent.touches[0].pageX, + diffY = $this.touchPosY - event.originalEvent.touches[0].pageY, + th = $this.outerHeight(), + ts = ($this.get(0).scrollHeight - $this.scrollTop()); + + // Hide on swipe? + if (config.hideOnSwipe) { + + var result = false, + boundary = 20, + delta = 50; + + switch (config.side) { + + case 'left': + result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX > delta); + break; + + case 'right': + result = (diffY < boundary && diffY > (-1 * boundary)) && (diffX < (-1 * delta)); + break; + + case 'top': + result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY > delta); + break; + + case 'bottom': + result = (diffX < boundary && diffX > (-1 * boundary)) && (diffY < (-1 * delta)); + break; + + default: + break; + + } + + if (result) { + + $this.touchPosX = null; + $this.touchPosY = null; + $this._hide(); + + return false; + + } + + } + + // Prevent vertical scrolling past the top or bottom. + if (($this.scrollTop() < 0 && diffY < 0) + || (ts > (th - 2) && ts < (th + 2) && diffY > 0)) { + + event.preventDefault(); + event.stopPropagation(); + + } + + }); + + // Event: Prevent certain events inside the panel from bubbling. + $this.on('click touchend touchstart touchmove', function(event) { + event.stopPropagation(); + }); + + // Event: Hide panel if a child anchor tag pointing to its ID is clicked. + $this.on('click', 'a[href="#' + id + '"]', function(event) { + + event.preventDefault(); + event.stopPropagation(); + + config.target.removeClass(config.visibleClass); + + }); + + // Body. + + // Event: Hide panel on body click/tap. + $body.on('click touchend', function(event) { + $this._hide(event); + }); + + // Event: Toggle. + $body.on('click', 'a[href="#' + id + '"]', function(event) { + + event.preventDefault(); + event.stopPropagation(); + + config.target.toggleClass(config.visibleClass); + + }); + + // Window. + + // Event: Hide on ESC. + if (config.hideOnEscape) + $window.on('keydown', function(event) { + + if (event.keyCode == 27) + $this._hide(event); + + }); + + return $this; + + }; + + /** + * Apply "placeholder" attribute polyfill to one or more forms. + * @return {jQuery} jQuery object. + */ + $.fn.placeholder = function() { + + // Browser natively supports placeholders? Bail. + if (typeof (document.createElement('input')).placeholder != 'undefined') + return $(this); + + // No elements? + if (this.length == 0) + return $this; + + // Multiple elements? + if (this.length > 1) { + + for (var i=0; i < this.length; i++) + $(this[i]).placeholder(); + + return $this; + + } + + // Vars. + var $this = $(this); + + // Text, TextArea. + $this.find('input[type=text],textarea') + .each(function() { + + var i = $(this); + + if (i.val() == '' + || i.val() == i.attr('placeholder')) + i + .addClass('polyfill-placeholder') + .val(i.attr('placeholder')); + + }) + .on('blur', function() { + + var i = $(this); + + if (i.attr('name').match(/-polyfill-field$/)) + return; + + if (i.val() == '') + i + .addClass('polyfill-placeholder') + .val(i.attr('placeholder')); + + }) + .on('focus', function() { + + var i = $(this); + + if (i.attr('name').match(/-polyfill-field$/)) + return; + + if (i.val() == i.attr('placeholder')) + i + .removeClass('polyfill-placeholder') + .val(''); + + }); + + // Password. + $this.find('input[type=password]') + .each(function() { + + var i = $(this); + var x = $( + $('
') + .append(i.clone()) + .remove() + .html() + .replace(/type="password"/i, 'type="text"') + .replace(/type=password/i, 'type=text') + ); + + if (i.attr('id') != '') + x.attr('id', i.attr('id') + '-polyfill-field'); + + if (i.attr('name') != '') + x.attr('name', i.attr('name') + '-polyfill-field'); + + x.addClass('polyfill-placeholder') + .val(x.attr('placeholder')).insertAfter(i); + + if (i.val() == '') + i.hide(); + else + x.hide(); + + i + .on('blur', function(event) { + + event.preventDefault(); + + var x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); + + if (i.val() == '') { + + i.hide(); + x.show(); + + } + + }); + + x + .on('focus', function(event) { + + event.preventDefault(); + + var i = x.parent().find('input[name=' + x.attr('name').replace('-polyfill-field', '') + ']'); + + x.hide(); + + i + .show() + .focus(); + + }) + .on('keypress', function(event) { + + event.preventDefault(); + x.val(''); + + }); + + }); + + // Events. + $this + .on('submit', function() { + + $this.find('input[type=text],input[type=password],textarea') + .each(function(event) { + + var i = $(this); + + if (i.attr('name').match(/-polyfill-field$/)) + i.attr('name', ''); + + if (i.val() == i.attr('placeholder')) { + + i.removeClass('polyfill-placeholder'); + i.val(''); + + } + + }); + + }) + .on('reset', function(event) { + + event.preventDefault(); + + $this.find('select') + .val($('option:first').val()); + + $this.find('input,textarea') + .each(function() { + + var i = $(this), + x; + + i.removeClass('polyfill-placeholder'); + + switch (this.type) { + + case 'submit': + case 'reset': + break; + + case 'password': + i.val(i.attr('defaultValue')); + + x = i.parent().find('input[name=' + i.attr('name') + '-polyfill-field]'); + + if (i.val() == '') { + i.hide(); + x.show(); + } + else { + i.show(); + x.hide(); + } + + break; + + case 'checkbox': + case 'radio': + i.attr('checked', i.attr('defaultValue')); + break; + + case 'text': + case 'textarea': + i.val(i.attr('defaultValue')); + + if (i.val() == '') { + i.addClass('polyfill-placeholder'); + i.val(i.attr('placeholder')); + } + + break; + + default: + i.val(i.attr('defaultValue')); + break; + + } + }); + + }); + + return $this; + + }; + + /** + * Moves elements to/from the first positions of their respective parents. + * @param {jQuery} $elements Elements (or selector) to move. + * @param {bool} condition If true, moves elements to the top. Otherwise, moves elements back to their original locations. + */ + $.prioritize = function($elements, condition) { + + var key = '__prioritize'; + + // Expand $elements if it's not already a jQuery object. + if (typeof $elements != 'jQuery') + $elements = $($elements); + + // Step through elements. + $elements.each(function() { + + var $e = $(this), $p, + $parent = $e.parent(); + + // No parent? Bail. + if ($parent.length == 0) + return; + + // Not moved? Move it. + if (!$e.data(key)) { + + // Condition is false? Bail. + if (!condition) + return; + + // Get placeholder (which will serve as our point of reference for when this element needs to move back). + $p = $e.prev(); + + // Couldn't find anything? Means this element's already at the top, so bail. + if ($p.length == 0) + return; + + // Move element to top of parent. + $e.prependTo($parent); + + // Mark element as moved. + $e.data(key, $p); + + } + + // Moved already? + else { + + // Condition is true? Bail. + if (condition) + return; + + $p = $e.data(key); + + // Move element back to its original location (using our placeholder). + $e.insertAfter($p); + + // Unmark element as moved. + $e.removeData(key); + + } + + }); + + }; + })(jQuery); \ No newline at end of file diff --git a/public_html/assets/sass/ie8.scss b/assets/sass/ie8.scss similarity index 100% rename from public_html/assets/sass/ie8.scss rename to assets/sass/ie8.scss diff --git a/public_html/assets/sass/ie9.scss b/assets/sass/ie9.scss similarity index 100% rename from public_html/assets/sass/ie9.scss rename to assets/sass/ie9.scss diff --git a/public_html/assets/sass/libs/_functions.scss b/assets/sass/libs/_functions.scss similarity index 95% rename from public_html/assets/sass/libs/_functions.scss rename to assets/sass/libs/_functions.scss index 0e08c1a..3b834f5 100644 --- a/public_html/assets/sass/libs/_functions.scss +++ b/assets/sass/libs/_functions.scss @@ -1,34 +1,34 @@ -/// Gets a duration value. -/// @param {string} $keys Key(s). -/// @return {string} Value. -@function _duration($keys...) { - @return val($duration, $keys...); -} - -/// Gets a font value. -/// @param {string} $keys Key(s). -/// @return {string} Value. -@function _font($keys...) { - @return val($font, $keys...); -} - -/// Gets a misc value. -/// @param {string} $keys Key(s). -/// @return {string} Value. -@function _misc($keys...) { - @return val($misc, $keys...); -} - -/// Gets a palette value. -/// @param {string} $keys Key(s). -/// @return {string} Value. -@function _palette($keys...) { - @return val($palette, $keys...); -} - -/// Gets a size value. -/// @param {string} $keys Key(s). -/// @return {string} Value. -@function _size($keys...) { - @return val($size, $keys...); +/// Gets a duration value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _duration($keys...) { + @return val($duration, $keys...); +} + +/// Gets a font value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _font($keys...) { + @return val($font, $keys...); +} + +/// Gets a misc value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _misc($keys...) { + @return val($misc, $keys...); +} + +/// Gets a palette value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _palette($keys...) { + @return val($palette, $keys...); +} + +/// Gets a size value. +/// @param {string} $keys Key(s). +/// @return {string} Value. +@function _size($keys...) { + @return val($size, $keys...); } \ No newline at end of file diff --git a/public_html/assets/sass/libs/_mixins.scss b/assets/sass/libs/_mixins.scss similarity index 95% rename from public_html/assets/sass/libs/_mixins.scss rename to assets/sass/libs/_mixins.scss index d4bf3c8..ab6191f 100644 --- a/public_html/assets/sass/libs/_mixins.scss +++ b/assets/sass/libs/_mixins.scss @@ -1,398 +1,398 @@ -/// Makes an element's :before pseudoelement a FontAwesome icon. -/// @param {string} $content Optional content value to use. -/// @param {string} $where Optional pseudoelement to target (before or after). -@mixin icon($content: false, $where: before) { - - text-decoration: none; - - &:#{$where} { - - @if $content { - content: $content; - } - - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - font-family: FontAwesome; - font-style: normal; - font-weight: normal; - text-transform: none !important; - - } - -} - -/// Applies padding to an element, taking the current element-margin value into account. -/// @param {mixed} $tb Top/bottom padding. -/// @param {mixed} $lr Left/right padding. -/// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left) -/// @param {bool} $important If true, adds !important. -@mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) { - - @if $important { - $important: '!important'; - } - - $x: 0.1em; - - @if unit(_size(element-margin)) == 'rem' { - $x: 0.1rem; - } - - padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max($x, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)) #{$important}; - -} - -/// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp). -/// @param {string} $svg SVG data URL. -/// @return {string} Encoded SVG data URL. -@function svg-url($svg) { - - $svg: str-replace($svg, '"', '\''); - $svg: str-replace($svg, '%', '%25'); - $svg: str-replace($svg, '<', '%3C'); - $svg: str-replace($svg, '>', '%3E'); - $svg: str-replace($svg, '&', '%26'); - $svg: str-replace($svg, '#', '%23'); - $svg: str-replace($svg, '{', '%7B'); - $svg: str-replace($svg, '}', '%7D'); - $svg: str-replace($svg, ';', '%3B'); - - @return url("data:image/svg+xml;charset=utf8,#{$svg}"); - -} - -/// Initializes base flexgrid classes. -/// @param {string} $vertical-align Vertical alignment of cells. -/// @param {string} $horizontal-align Horizontal alignment of cells. -@mixin flexgrid-base($vertical-align: null, $horizontal-align: null) { - - // Grid. - @include vendor('display', 'flex'); - @include vendor('flex-wrap', 'wrap'); - - // Vertical alignment. - @if ($vertical-align == top) { - @include vendor('align-items', 'flex-start'); - } - @else if ($vertical-align == bottom) { - @include vendor('align-items', 'flex-end'); - } - @else if ($vertical-align == center) { - @include vendor('align-items', 'center'); - } - @else { - @include vendor('align-items', 'stretch'); - } - - // Horizontal alignment. - @if ($horizontal-align != null) { - text-align: $horizontal-align; - } - - // Cells. - > * { - @include vendor('flex-shrink', '1'); - @include vendor('flex-grow', '0'); - } - -} - -/// Sets up flexgrid columns. -/// @param {integer} $columns Columns. -@mixin flexgrid-columns($columns) { - - > * { - $cell-width: 100% / $columns; - width: #{$cell-width}; - } - -} - -/// Sets up flexgrid gutters. -/// @param {integer} $columns Columns. -/// @param {number} $gutters Gutters. -@mixin flexgrid-gutters($columns, $gutters) { - - // Apply padding. - > * { - $cell-width: 100% / $columns; - - padding: ($gutters * 0.5); - width: $cell-width; - } - -} - -/// Sets up flexgrid gutters (flush). -/// @param {integer} $columns Columns. -/// @param {number} $gutters Gutters. -@mixin flexgrid-gutters-flush($columns, $gutters) { - - // Apply padding. - > * { - $cell-width: 100% / $columns; - $cell-width-pad: $gutters / $columns; - - padding: ($gutters * 0.5); - width: calc(#{$cell-width} + #{$cell-width-pad}); - } - - // Clear top/bottom gutters. - > :nth-child(-n + #{$columns}) { - padding-top: 0; - } - - > :nth-last-child(-n + #{$columns}) { - padding-bottom: 0; - } - - // Clear left/right gutters. - > :nth-child(#{$columns}n + 1) { - padding-left: 0; - } - - > :nth-child(#{$columns}n) { - padding-right: 0; - } - - // Adjust widths of leftmost and rightmost cells. - > :nth-child(#{$columns}n + 1), - > :nth-child(#{$columns}n) { - $cell-width: 100% / $columns; - $cell-width-pad: ($gutters / $columns) - ($gutters / 2); - - width: calc(#{$cell-width} + #{$cell-width-pad}); - } - -} - -/// Reset flexgrid gutters (flush only). -/// Used to override a previous set of flexgrid gutter classes. -/// @param {integer} $columns Columns. -/// @param {number} $gutters Gutters. -/// @param {integer} $prev-columns Previous columns. -@mixin flexgrid-gutters-flush-reset($columns, $gutters, $prev-columns) { - - // Apply padding. - > * { - $cell-width: 100% / $prev-columns; - $cell-width-pad: $gutters / $prev-columns; - - padding: ($gutters * 0.5); - width: calc(#{$cell-width} + #{$cell-width-pad}); - } - - // Clear top/bottom gutters. - > :nth-child(-n + #{$prev-columns}) { - padding-top: ($gutters * 0.5); - } - - > :nth-last-child(-n + #{$prev-columns}) { - padding-bottom: ($gutters * 0.5); - } - - // Clear left/right gutters. - > :nth-child(#{$prev-columns}n + 1) { - padding-left: ($gutters * 0.5); - } - - > :nth-child(#{$prev-columns}n) { - padding-right: ($gutters * 0.5); - } - - // Adjust widths of leftmost and rightmost cells. - > :nth-child(#{$prev-columns}n + 1), - > :nth-child(#{$prev-columns}n) { - $cell-width: 100% / $columns; - $cell-width-pad: $gutters / $columns; - - padding: ($gutters * 0.5); - width: calc(#{$cell-width} + #{$cell-width-pad}); - } - -} - -/// Adds debug styles to current flexgrid element. -@mixin flexgrid-debug() { - - box-shadow: 0 0 0 1px red; - - > * { - box-shadow: inset 0 0 0 1px blue; - position: relative; - - > * { - position: relative; - box-shadow: inset 0 0 0 1px green; - } - } - -} - -/// Initializes the current element as a flexgrid. -/// @param {integer} $columns Columns (optional). -/// @param {number} $gutters Gutters (optional). -/// @param {bool} $flush If true, clears padding around the very edge of the grid. -@mixin flexgrid($settings: ()) { - - // Settings. - - // Debug. - $debug: false; - - @if (map-has-key($settings, 'debug')) { - $debug: map-get($settings, 'debug'); - } - - // Vertical align. - $vertical-align: null; - - @if (map-has-key($settings, 'vertical-align')) { - $vertical-align: map-get($settings, 'vertical-align'); - } - - // Horizontal align. - $horizontal-align: null; - - @if (map-has-key($settings, 'horizontal-align')) { - $horizontal-align: map-get($settings, 'horizontal-align'); - } - - // Columns. - $columns: null; - - @if (map-has-key($settings, 'columns')) { - $columns: map-get($settings, 'columns'); - } - - // Gutters. - $gutters: 0; - - @if (map-has-key($settings, 'gutters')) { - $gutters: map-get($settings, 'gutters'); - } - - // Flush. - $flush: true; - - @if (map-has-key($settings, 'flush')) { - $flush: map-get($settings, 'flush'); - } - - // Initialize base grid. - @include flexgrid-base($vertical-align, $horizontal-align); - - // Debug? - @if ($debug) { - @include flexgrid-debug; - } - - // Columns specified? - @if ($columns != null) { - - // Initialize columns. - @include flexgrid-columns($columns); - - // Gutters specified? - @if ($gutters > 0) { - - // Flush gutters? - @if ($flush) { - - // Initialize gutters (flush). - @include flexgrid-gutters-flush($columns, $gutters); - - } - - // Otherwise ... - @else { - - // Initialize gutters. - @include flexgrid-gutters($columns, $gutters); - - } - - } - - } - -} - -/// Resizes a previously-initialized grid. -/// @param {integer} $columns Columns. -/// @param {number} $gutters Gutters (optional). -/// @param {list} $reset A list of previously-initialized grid columns (only if $flush is true). -/// @param {bool} $flush If true, clears padding around the very edge of the grid. -@mixin flexgrid-resize($settings: ()) { - - // Settings. - - // Columns. - $columns: 1; - - @if (map-has-key($settings, 'columns')) { - $columns: map-get($settings, 'columns'); - } - - // Gutters. - $gutters: 0; - - @if (map-has-key($settings, 'gutters')) { - $gutters: map-get($settings, 'gutters'); - } - - // Previous columns. - $prev-columns: false; - - @if (map-has-key($settings, 'prev-columns')) { - $prev-columns: map-get($settings, 'prev-columns'); - } - - // Flush. - $flush: true; - - @if (map-has-key($settings, 'flush')) { - $flush: map-get($settings, 'flush'); - } - - // Resize columns. - @include flexgrid-columns($columns); - - // Gutters specified? - @if ($gutters > 0) { - - // Flush gutters? - @if ($flush) { - - // Previous columns specified? - @if ($prev-columns) { - - // Convert to list if it isn't one already. - @if (type-of($prev-columns) != list) { - $prev-columns: ($prev-columns); - } - - // Step through list of previous columns and reset them. - @each $x in $prev-columns { - @include flexgrid-gutters-flush-reset($columns, $gutters, $x); - } - - } - - // Resize gutters (flush). - @include flexgrid-gutters-flush($columns, $gutters); - - } - - // Otherwise ... - @else { - - // Resize gutters. - @include flexgrid-gutters($columns, $gutters); - - } - - } - +/// Makes an element's :before pseudoelement a FontAwesome icon. +/// @param {string} $content Optional content value to use. +/// @param {string} $where Optional pseudoelement to target (before or after). +@mixin icon($content: false, $where: before) { + + text-decoration: none; + + &:#{$where} { + + @if $content { + content: $content; + } + + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-transform: none !important; + + } + +} + +/// Applies padding to an element, taking the current element-margin value into account. +/// @param {mixed} $tb Top/bottom padding. +/// @param {mixed} $lr Left/right padding. +/// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left) +/// @param {bool} $important If true, adds !important. +@mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) { + + @if $important { + $important: '!important'; + } + + $x: 0.1em; + + @if unit(_size(element-margin)) == 'rem' { + $x: 0.1rem; + } + + padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max($x, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)) #{$important}; + +} + +/// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp). +/// @param {string} $svg SVG data URL. +/// @return {string} Encoded SVG data URL. +@function svg-url($svg) { + + $svg: str-replace($svg, '"', '\''); + $svg: str-replace($svg, '%', '%25'); + $svg: str-replace($svg, '<', '%3C'); + $svg: str-replace($svg, '>', '%3E'); + $svg: str-replace($svg, '&', '%26'); + $svg: str-replace($svg, '#', '%23'); + $svg: str-replace($svg, '{', '%7B'); + $svg: str-replace($svg, '}', '%7D'); + $svg: str-replace($svg, ';', '%3B'); + + @return url("data:image/svg+xml;charset=utf8,#{$svg}"); + +} + +/// Initializes base flexgrid classes. +/// @param {string} $vertical-align Vertical alignment of cells. +/// @param {string} $horizontal-align Horizontal alignment of cells. +@mixin flexgrid-base($vertical-align: null, $horizontal-align: null) { + + // Grid. + @include vendor('display', 'flex'); + @include vendor('flex-wrap', 'wrap'); + + // Vertical alignment. + @if ($vertical-align == top) { + @include vendor('align-items', 'flex-start'); + } + @else if ($vertical-align == bottom) { + @include vendor('align-items', 'flex-end'); + } + @else if ($vertical-align == center) { + @include vendor('align-items', 'center'); + } + @else { + @include vendor('align-items', 'stretch'); + } + + // Horizontal alignment. + @if ($horizontal-align != null) { + text-align: $horizontal-align; + } + + // Cells. + > * { + @include vendor('flex-shrink', '1'); + @include vendor('flex-grow', '0'); + } + +} + +/// Sets up flexgrid columns. +/// @param {integer} $columns Columns. +@mixin flexgrid-columns($columns) { + + > * { + $cell-width: 100% / $columns; + width: #{$cell-width}; + } + +} + +/// Sets up flexgrid gutters. +/// @param {integer} $columns Columns. +/// @param {number} $gutters Gutters. +@mixin flexgrid-gutters($columns, $gutters) { + + // Apply padding. + > * { + $cell-width: 100% / $columns; + + padding: ($gutters * 0.5); + width: $cell-width; + } + +} + +/// Sets up flexgrid gutters (flush). +/// @param {integer} $columns Columns. +/// @param {number} $gutters Gutters. +@mixin flexgrid-gutters-flush($columns, $gutters) { + + // Apply padding. + > * { + $cell-width: 100% / $columns; + $cell-width-pad: $gutters / $columns; + + padding: ($gutters * 0.5); + width: calc(#{$cell-width} + #{$cell-width-pad}); + } + + // Clear top/bottom gutters. + > :nth-child(-n + #{$columns}) { + padding-top: 0; + } + + > :nth-last-child(-n + #{$columns}) { + padding-bottom: 0; + } + + // Clear left/right gutters. + > :nth-child(#{$columns}n + 1) { + padding-left: 0; + } + + > :nth-child(#{$columns}n) { + padding-right: 0; + } + + // Adjust widths of leftmost and rightmost cells. + > :nth-child(#{$columns}n + 1), + > :nth-child(#{$columns}n) { + $cell-width: 100% / $columns; + $cell-width-pad: ($gutters / $columns) - ($gutters / 2); + + width: calc(#{$cell-width} + #{$cell-width-pad}); + } + +} + +/// Reset flexgrid gutters (flush only). +/// Used to override a previous set of flexgrid gutter classes. +/// @param {integer} $columns Columns. +/// @param {number} $gutters Gutters. +/// @param {integer} $prev-columns Previous columns. +@mixin flexgrid-gutters-flush-reset($columns, $gutters, $prev-columns) { + + // Apply padding. + > * { + $cell-width: 100% / $prev-columns; + $cell-width-pad: $gutters / $prev-columns; + + padding: ($gutters * 0.5); + width: calc(#{$cell-width} + #{$cell-width-pad}); + } + + // Clear top/bottom gutters. + > :nth-child(-n + #{$prev-columns}) { + padding-top: ($gutters * 0.5); + } + + > :nth-last-child(-n + #{$prev-columns}) { + padding-bottom: ($gutters * 0.5); + } + + // Clear left/right gutters. + > :nth-child(#{$prev-columns}n + 1) { + padding-left: ($gutters * 0.5); + } + + > :nth-child(#{$prev-columns}n) { + padding-right: ($gutters * 0.5); + } + + // Adjust widths of leftmost and rightmost cells. + > :nth-child(#{$prev-columns}n + 1), + > :nth-child(#{$prev-columns}n) { + $cell-width: 100% / $columns; + $cell-width-pad: $gutters / $columns; + + padding: ($gutters * 0.5); + width: calc(#{$cell-width} + #{$cell-width-pad}); + } + +} + +/// Adds debug styles to current flexgrid element. +@mixin flexgrid-debug() { + + box-shadow: 0 0 0 1px red; + + > * { + box-shadow: inset 0 0 0 1px blue; + position: relative; + + > * { + position: relative; + box-shadow: inset 0 0 0 1px green; + } + } + +} + +/// Initializes the current element as a flexgrid. +/// @param {integer} $columns Columns (optional). +/// @param {number} $gutters Gutters (optional). +/// @param {bool} $flush If true, clears padding around the very edge of the grid. +@mixin flexgrid($settings: ()) { + + // Settings. + + // Debug. + $debug: false; + + @if (map-has-key($settings, 'debug')) { + $debug: map-get($settings, 'debug'); + } + + // Vertical align. + $vertical-align: null; + + @if (map-has-key($settings, 'vertical-align')) { + $vertical-align: map-get($settings, 'vertical-align'); + } + + // Horizontal align. + $horizontal-align: null; + + @if (map-has-key($settings, 'horizontal-align')) { + $horizontal-align: map-get($settings, 'horizontal-align'); + } + + // Columns. + $columns: null; + + @if (map-has-key($settings, 'columns')) { + $columns: map-get($settings, 'columns'); + } + + // Gutters. + $gutters: 0; + + @if (map-has-key($settings, 'gutters')) { + $gutters: map-get($settings, 'gutters'); + } + + // Flush. + $flush: true; + + @if (map-has-key($settings, 'flush')) { + $flush: map-get($settings, 'flush'); + } + + // Initialize base grid. + @include flexgrid-base($vertical-align, $horizontal-align); + + // Debug? + @if ($debug) { + @include flexgrid-debug; + } + + // Columns specified? + @if ($columns != null) { + + // Initialize columns. + @include flexgrid-columns($columns); + + // Gutters specified? + @if ($gutters > 0) { + + // Flush gutters? + @if ($flush) { + + // Initialize gutters (flush). + @include flexgrid-gutters-flush($columns, $gutters); + + } + + // Otherwise ... + @else { + + // Initialize gutters. + @include flexgrid-gutters($columns, $gutters); + + } + + } + + } + +} + +/// Resizes a previously-initialized grid. +/// @param {integer} $columns Columns. +/// @param {number} $gutters Gutters (optional). +/// @param {list} $reset A list of previously-initialized grid columns (only if $flush is true). +/// @param {bool} $flush If true, clears padding around the very edge of the grid. +@mixin flexgrid-resize($settings: ()) { + + // Settings. + + // Columns. + $columns: 1; + + @if (map-has-key($settings, 'columns')) { + $columns: map-get($settings, 'columns'); + } + + // Gutters. + $gutters: 0; + + @if (map-has-key($settings, 'gutters')) { + $gutters: map-get($settings, 'gutters'); + } + + // Previous columns. + $prev-columns: false; + + @if (map-has-key($settings, 'prev-columns')) { + $prev-columns: map-get($settings, 'prev-columns'); + } + + // Flush. + $flush: true; + + @if (map-has-key($settings, 'flush')) { + $flush: map-get($settings, 'flush'); + } + + // Resize columns. + @include flexgrid-columns($columns); + + // Gutters specified? + @if ($gutters > 0) { + + // Flush gutters? + @if ($flush) { + + // Previous columns specified? + @if ($prev-columns) { + + // Convert to list if it isn't one already. + @if (type-of($prev-columns) != list) { + $prev-columns: ($prev-columns); + } + + // Step through list of previous columns and reset them. + @each $x in $prev-columns { + @include flexgrid-gutters-flush-reset($columns, $gutters, $x); + } + + } + + // Resize gutters (flush). + @include flexgrid-gutters-flush($columns, $gutters); + + } + + // Otherwise ... + @else { + + // Resize gutters. + @include flexgrid-gutters($columns, $gutters); + + } + + } + } \ No newline at end of file diff --git a/public_html/assets/sass/libs/_skel.scss b/assets/sass/libs/_skel.scss similarity index 96% rename from public_html/assets/sass/libs/_skel.scss rename to assets/sass/libs/_skel.scss index f5e0dcd..33fdccb 100644 --- a/public_html/assets/sass/libs/_skel.scss +++ b/assets/sass/libs/_skel.scss @@ -1,587 +1,587 @@ -// skel.scss v3.0.2-dev | (c) skel.io | MIT licensed */ - -// Vars. - - /// Breakpoints. - /// @var {list} - $breakpoints: () !global; - - /// Vendor prefixes. - /// @var {list} - $vendor-prefixes: ( - '-moz-', - '-webkit-', - '-ms-', - '' - ); - - /// Properties that should be vendorized. - /// @var {list} - $vendor-properties: ( - 'align-content', - 'align-items', - 'align-self', - 'animation', - 'animation-delay', - 'animation-direction', - 'animation-duration', - 'animation-fill-mode', - 'animation-iteration-count', - 'animation-name', - 'animation-play-state', - 'animation-timing-function', - 'appearance', - 'backface-visibility', - 'box-sizing', - 'filter', - 'flex', - 'flex-basis', - 'flex-direction', - 'flex-flow', - 'flex-grow', - 'flex-shrink', - 'flex-wrap', - 'justify-content', - 'object-fit', - 'object-position', - 'order', - 'perspective', - 'pointer-events', - 'transform', - 'transform-origin', - 'transform-style', - 'transition', - 'transition-delay', - 'transition-duration', - 'transition-property', - 'transition-timing-function', - 'user-select' - ); - - /// Values that should be vendorized. - /// @var {list} - $vendor-values: ( - 'filter', - 'flex', - 'linear-gradient', - 'radial-gradient', - 'transform' - ); - -// Functions. - - /// Removes a specific item from a list. - /// @author Hugo Giraudel - /// @param {list} $list List. - /// @param {integer} $index Index. - /// @return {list} Updated list. - @function remove-nth($list, $index) { - - $result: null; - - @if type-of($index) != number { - @warn "$index: #{quote($index)} is not a number for `remove-nth`."; - } - @else if $index == 0 { - @warn "List index 0 must be a non-zero integer for `remove-nth`."; - } - @else if abs($index) > length($list) { - @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`."; - } - @else { - - $result: (); - $index: if($index < 0, length($list) + $index + 1, $index); - - @for $i from 1 through length($list) { - - @if $i != $index { - $result: append($result, nth($list, $i)); - } - - } - - } - - @return $result; - - } - - /// Replaces a substring within another string. - /// @author Hugo Giraudel - /// @param {string} $string String. - /// @param {string} $search Substring. - /// @param {string} $replace Replacement. - /// @return {string} Updated string. - @function str-replace($string, $search, $replace: '') { - - $index: str-index($string, $search); - - @if $index { - @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); - } - - @return $string; - - } - - /// Replaces a substring within each string in a list. - /// @param {list} $strings List of strings. - /// @param {string} $search Substring. - /// @param {string} $replace Replacement. - /// @return {list} Updated list of strings. - @function str-replace-all($strings, $search, $replace: '') { - - @each $string in $strings { - $strings: set-nth($strings, index($strings, $string), str-replace($string, $search, $replace)); - } - - @return $strings; - - } - - /// Gets a value from a map. - /// @author Hugo Giraudel - /// @param {map} $map Map. - /// @param {string} $keys Key(s). - /// @return {string} Value. - @function val($map, $keys...) { - - @if nth($keys, 1) == null { - $keys: remove-nth($keys, 1); - } - - @each $key in $keys { - $map: map-get($map, $key); - } - - @return $map; - - } - -// Mixins. - - /// Sets the global box model. - /// @param {string} $model Model (default is content). - @mixin boxModel($model: 'content') { - - $x: $model + '-box'; - - *, *:before, *:after { - -moz-box-sizing: #{$x}; - -webkit-box-sizing: #{$x}; - box-sizing: #{$x}; - } - - } - - /// Wraps @content in a @media block using a given breakpoint. - /// @param {string} $breakpoint Breakpoint. - /// @param {map} $queries Additional queries. - @mixin breakpoint($breakpoint: null, $queries: null) { - - $query: 'screen'; - - // Breakpoint. - @if $breakpoint and map-has-key($breakpoints, $breakpoint) { - $query: $query + ' and ' + map-get($breakpoints, $breakpoint); - } - - // Queries. - @if $queries { - @each $k, $v in $queries { - $query: $query + ' and (' + $k + ':' + $v + ')'; - } - } - - @media #{$query} { - @content; - } - - } - - /// Wraps @content in a @media block targeting a specific orientation. - /// @param {string} $orientation Orientation. - @mixin orientation($orientation) { - @media screen and (orientation: #{$orientation}) { - @content; - } - } - - /// Utility mixin for containers. - /// @param {mixed} $width Width. - @mixin containers($width) { - - // Locked? - $lock: false; - - @if length($width) == 2 { - $width: nth($width, 1); - $lock: true; - } - - // Modifiers. - .container.\31 25\25 { width: 100%; max-width: $width * 1.25; min-width: $width; } - .container.\37 5\25 { width: $width * 0.75; } - .container.\35 0\25 { width: $width * 0.5; } - .container.\32 5\25 { width: $width * 0.25; } - - // Main class. - .container { - @if $lock { - width: $width !important; - } - @else { - width: $width; - } - } - - } - - /// Utility mixin for grid. - /// @param {list} $gutters Column and row gutters (default is 40px). - /// @param {string} $breakpointName Optional breakpoint name. - @mixin grid($gutters: 40px, $breakpointName: null) { - - // Gutters. - @include grid-gutters($gutters); - @include grid-gutters($gutters, \32 00\25, 2); - @include grid-gutters($gutters, \31 50\25, 1.5); - @include grid-gutters($gutters, \35 0\25, 0.5); - @include grid-gutters($gutters, \32 5\25, 0.25); - - // Cells. - $x: ''; - - @if $breakpointName { - $x: '\\28' + $breakpointName + '\\29'; - } - - .\31 2u#{$x}, .\31 2u\24#{$x} { width: 100%; clear: none; margin-left: 0; } - .\31 1u#{$x}, .\31 1u\24#{$x} { width: 91.6666666667%; clear: none; margin-left: 0; } - .\31 0u#{$x}, .\31 0u\24#{$x} { width: 83.3333333333%; clear: none; margin-left: 0; } - .\39 u#{$x}, .\39 u\24#{$x} { width: 75%; clear: none; margin-left: 0; } - .\38 u#{$x}, .\38 u\24#{$x} { width: 66.6666666667%; clear: none; margin-left: 0; } - .\37 u#{$x}, .\37 u\24#{$x} { width: 58.3333333333%; clear: none; margin-left: 0; } - .\36 u#{$x}, .\36 u\24#{$x} { width: 50%; clear: none; margin-left: 0; } - .\35 u#{$x}, .\35 u\24#{$x} { width: 41.6666666667%; clear: none; margin-left: 0; } - .\34 u#{$x}, .\34 u\24#{$x} { width: 33.3333333333%; clear: none; margin-left: 0; } - .\33 u#{$x}, .\33 u\24#{$x} { width: 25%; clear: none; margin-left: 0; } - .\32 u#{$x}, .\32 u\24#{$x} { width: 16.6666666667%; clear: none; margin-left: 0; } - .\31 u#{$x}, .\31 u\24#{$x} { width: 8.3333333333%; clear: none; margin-left: 0; } - - .\31 2u\24#{$x} + *, - .\31 1u\24#{$x} + *, - .\31 0u\24#{$x} + *, - .\39 u\24#{$x} + *, - .\38 u\24#{$x} + *, - .\37 u\24#{$x} + *, - .\36 u\24#{$x} + *, - .\35 u\24#{$x} + *, - .\34 u\24#{$x} + *, - .\33 u\24#{$x} + *, - .\32 u\24#{$x} + *, - .\31 u\24#{$x} + * { - clear: left; - } - - .\-11u#{$x} { margin-left: 91.6666666667% } - .\-10u#{$x} { margin-left: 83.3333333333% } - .\-9u#{$x} { margin-left: 75% } - .\-8u#{$x} { margin-left: 66.6666666667% } - .\-7u#{$x} { margin-left: 58.3333333333% } - .\-6u#{$x} { margin-left: 50% } - .\-5u#{$x} { margin-left: 41.6666666667% } - .\-4u#{$x} { margin-left: 33.3333333333% } - .\-3u#{$x} { margin-left: 25% } - .\-2u#{$x} { margin-left: 16.6666666667% } - .\-1u#{$x} { margin-left: 8.3333333333% } - - } - - /// Utility mixin for grid. - /// @param {list} $gutters Gutters. - /// @param {string} $class Optional class name. - /// @param {integer} $multiplier Multiplier (default is 1). - @mixin grid-gutters($gutters, $class: null, $multiplier: 1) { - - // Expand gutters if it's not a list. - @if length($gutters) == 1 { - $gutters: ($gutters, 0); - } - - // Get column and row gutter values. - $c: nth($gutters, 1); - $r: nth($gutters, 2); - - // Get class (if provided). - $x: ''; - - @if $class { - $x: '.' + $class; - } - - // Default. - .row#{$x} > * { padding: ($r * $multiplier) 0 0 ($c * $multiplier); } - .row#{$x} { margin: ($r * $multiplier * -1) 0 -1px ($c * $multiplier * -1); } - - // Uniform. - .row.uniform#{$x} > * { padding: ($c * $multiplier) 0 0 ($c * $multiplier); } - .row.uniform#{$x} { margin: ($c * $multiplier * -1) 0 -1px ($c * $multiplier * -1); } - - } - - /// Wraps @content in vendorized keyframe blocks. - /// @param {string} $name Name. - @mixin keyframes($name) { - - @-moz-keyframes #{$name} { @content; } - @-webkit-keyframes #{$name} { @content; } - @-ms-keyframes #{$name} { @content; } - @keyframes #{$name} { @content; } - - } - - /// - /// Sets breakpoints. - /// @param {map} $x Breakpoints. - /// - @mixin skel-breakpoints($x: ()) { - $breakpoints: $x !global; - } - - /// - /// Initializes layout module. - /// @param {map} config Config. - /// - @mixin skel-layout($config: ()) { - - // Config. - $configPerBreakpoint: (); - - $z: map-get($config, 'breakpoints'); - - @if $z { - $configPerBreakpoint: $z; - } - - // Reset. - $x: map-get($config, 'reset'); - - @if $x { - - /* Reset */ - - @include reset($x); - - } - - // Box model. - $x: map-get($config, 'boxModel'); - - @if $x { - - /* Box Model */ - - @include boxModel($x); - - } - - // Containers. - $containers: map-get($config, 'containers'); - - @if $containers { - - /* Containers */ - - .container { - margin-left: auto; - margin-right: auto; - } - - // Use default is $containers is just "true". - @if $containers == true { - $containers: 960px; - } - - // Apply base. - @include containers($containers); - - // Apply per-breakpoint. - @each $name in map-keys($breakpoints) { - - // Get/use breakpoint setting if it exists. - $x: map-get($configPerBreakpoint, $name); - - // Per-breakpoint config exists? - @if $x { - $y: map-get($x, 'containers'); - - // Setting exists? Use it. - @if $y { - $containers: $y; - } - - } - - // Create @media block. - @media screen and #{map-get($breakpoints, $name)} { - @include containers($containers); - } - - } - - } - - // Grid. - $grid: map-get($config, 'grid'); - - @if $grid { - - /* Grid */ - - // Use defaults if $grid is just "true". - @if $grid == true { - $grid: (); - } - - // Sub-setting: Gutters. - $grid-gutters: 40px; - $x: map-get($grid, 'gutters'); - - @if $x { - $grid-gutters: $x; - } - - // Rows. - .row { - border-bottom: solid 1px transparent; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - } - - .row > * { - float: left; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - } - - .row:after, .row:before { - content: ''; - display: block; - clear: both; - height: 0; - } - - .row.uniform > * > :first-child { - margin-top: 0; - } - - .row.uniform > * > :last-child { - margin-bottom: 0; - } - - // Gutters (0%). - @include grid-gutters($grid-gutters, \30 \25, 0); - - // Apply base. - @include grid($grid-gutters); - - // Apply per-breakpoint. - @each $name in map-keys($breakpoints) { - - // Get/use breakpoint setting if it exists. - $x: map-get($configPerBreakpoint, $name); - - // Per-breakpoint config exists? - @if $x { - $y: map-get($x, 'grid'); - - // Setting exists? - @if $y { - - // Sub-setting: Gutters. - $x: map-get($y, 'gutters'); - - @if $x { - $grid-gutters: $x; - } - - } - - } - - // Create @media block. - @media screen and #{map-get($breakpoints, $name)} { - @include grid($grid-gutters, $name); - } - - } - - } - - } - - /// Resets browser styles. - /// @param {string} $mode Mode (default is 'normalize'). - @mixin reset($mode: 'normalize') { - - @if $mode == 'normalize' { - - // normalize.css v3.0.2 | MIT License | git.io/normalize - html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} - - } - @else if $mode == 'full' { - - // meyerweb.com/eric/tools/css/reset v2.0 | 20110126 | License: none (public domain) - 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;}body{-webkit-text-size-adjust:none} - - } - - } - - /// Vendorizes a declaration's property and/or value(s). - /// @param {string} $property Property. - /// @param {mixed} $value String/list of value(s). - @mixin vendor($property, $value) { - - // Determine if property should expand. - $expandProperty: index($vendor-properties, $property); - - // Determine if value should expand (and if so, add '-prefix-' placeholder). - $expandValue: false; - - @each $x in $value { - @each $y in $vendor-values { - @if $y == str-slice($x, 1, str-length($y)) { - - $value: set-nth($value, index($value, $x), '-prefix-' + $x); - $expandValue: true; - - } - } - } - - // Expand property? - @if $expandProperty { - @each $vendor in $vendor-prefixes { - #{$vendor}#{$property}: #{str-replace-all($value, '-prefix-', $vendor)}; - } - } - - // Expand just the value? - @elseif $expandValue { - @each $vendor in $vendor-prefixes { - #{$property}: #{str-replace-all($value, '-prefix-', $vendor)}; - } - } - - // Neither? Treat them as a normal declaration. - @else { - #{$property}: #{$value}; - } - +// skel.scss v3.0.2-dev | (c) skel.io | MIT licensed */ + +// Vars. + + /// Breakpoints. + /// @var {list} + $breakpoints: () !global; + + /// Vendor prefixes. + /// @var {list} + $vendor-prefixes: ( + '-moz-', + '-webkit-', + '-ms-', + '' + ); + + /// Properties that should be vendorized. + /// @var {list} + $vendor-properties: ( + 'align-content', + 'align-items', + 'align-self', + 'animation', + 'animation-delay', + 'animation-direction', + 'animation-duration', + 'animation-fill-mode', + 'animation-iteration-count', + 'animation-name', + 'animation-play-state', + 'animation-timing-function', + 'appearance', + 'backface-visibility', + 'box-sizing', + 'filter', + 'flex', + 'flex-basis', + 'flex-direction', + 'flex-flow', + 'flex-grow', + 'flex-shrink', + 'flex-wrap', + 'justify-content', + 'object-fit', + 'object-position', + 'order', + 'perspective', + 'pointer-events', + 'transform', + 'transform-origin', + 'transform-style', + 'transition', + 'transition-delay', + 'transition-duration', + 'transition-property', + 'transition-timing-function', + 'user-select' + ); + + /// Values that should be vendorized. + /// @var {list} + $vendor-values: ( + 'filter', + 'flex', + 'linear-gradient', + 'radial-gradient', + 'transform' + ); + +// Functions. + + /// Removes a specific item from a list. + /// @author Hugo Giraudel + /// @param {list} $list List. + /// @param {integer} $index Index. + /// @return {list} Updated list. + @function remove-nth($list, $index) { + + $result: null; + + @if type-of($index) != number { + @warn "$index: #{quote($index)} is not a number for `remove-nth`."; + } + @else if $index == 0 { + @warn "List index 0 must be a non-zero integer for `remove-nth`."; + } + @else if abs($index) > length($list) { + @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`."; + } + @else { + + $result: (); + $index: if($index < 0, length($list) + $index + 1, $index); + + @for $i from 1 through length($list) { + + @if $i != $index { + $result: append($result, nth($list, $i)); + } + + } + + } + + @return $result; + + } + + /// Replaces a substring within another string. + /// @author Hugo Giraudel + /// @param {string} $string String. + /// @param {string} $search Substring. + /// @param {string} $replace Replacement. + /// @return {string} Updated string. + @function str-replace($string, $search, $replace: '') { + + $index: str-index($string, $search); + + @if $index { + @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); + } + + @return $string; + + } + + /// Replaces a substring within each string in a list. + /// @param {list} $strings List of strings. + /// @param {string} $search Substring. + /// @param {string} $replace Replacement. + /// @return {list} Updated list of strings. + @function str-replace-all($strings, $search, $replace: '') { + + @each $string in $strings { + $strings: set-nth($strings, index($strings, $string), str-replace($string, $search, $replace)); + } + + @return $strings; + + } + + /// Gets a value from a map. + /// @author Hugo Giraudel + /// @param {map} $map Map. + /// @param {string} $keys Key(s). + /// @return {string} Value. + @function val($map, $keys...) { + + @if nth($keys, 1) == null { + $keys: remove-nth($keys, 1); + } + + @each $key in $keys { + $map: map-get($map, $key); + } + + @return $map; + + } + +// Mixins. + + /// Sets the global box model. + /// @param {string} $model Model (default is content). + @mixin boxModel($model: 'content') { + + $x: $model + '-box'; + + *, *:before, *:after { + -moz-box-sizing: #{$x}; + -webkit-box-sizing: #{$x}; + box-sizing: #{$x}; + } + + } + + /// Wraps @content in a @media block using a given breakpoint. + /// @param {string} $breakpoint Breakpoint. + /// @param {map} $queries Additional queries. + @mixin breakpoint($breakpoint: null, $queries: null) { + + $query: 'screen'; + + // Breakpoint. + @if $breakpoint and map-has-key($breakpoints, $breakpoint) { + $query: $query + ' and ' + map-get($breakpoints, $breakpoint); + } + + // Queries. + @if $queries { + @each $k, $v in $queries { + $query: $query + ' and (' + $k + ':' + $v + ')'; + } + } + + @media #{$query} { + @content; + } + + } + + /// Wraps @content in a @media block targeting a specific orientation. + /// @param {string} $orientation Orientation. + @mixin orientation($orientation) { + @media screen and (orientation: #{$orientation}) { + @content; + } + } + + /// Utility mixin for containers. + /// @param {mixed} $width Width. + @mixin containers($width) { + + // Locked? + $lock: false; + + @if length($width) == 2 { + $width: nth($width, 1); + $lock: true; + } + + // Modifiers. + .container.\31 25\25 { width: 100%; max-width: $width * 1.25; min-width: $width; } + .container.\37 5\25 { width: $width * 0.75; } + .container.\35 0\25 { width: $width * 0.5; } + .container.\32 5\25 { width: $width * 0.25; } + + // Main class. + .container { + @if $lock { + width: $width !important; + } + @else { + width: $width; + } + } + + } + + /// Utility mixin for grid. + /// @param {list} $gutters Column and row gutters (default is 40px). + /// @param {string} $breakpointName Optional breakpoint name. + @mixin grid($gutters: 40px, $breakpointName: null) { + + // Gutters. + @include grid-gutters($gutters); + @include grid-gutters($gutters, \32 00\25, 2); + @include grid-gutters($gutters, \31 50\25, 1.5); + @include grid-gutters($gutters, \35 0\25, 0.5); + @include grid-gutters($gutters, \32 5\25, 0.25); + + // Cells. + $x: ''; + + @if $breakpointName { + $x: '\\28' + $breakpointName + '\\29'; + } + + .\31 2u#{$x}, .\31 2u\24#{$x} { width: 100%; clear: none; margin-left: 0; } + .\31 1u#{$x}, .\31 1u\24#{$x} { width: 91.6666666667%; clear: none; margin-left: 0; } + .\31 0u#{$x}, .\31 0u\24#{$x} { width: 83.3333333333%; clear: none; margin-left: 0; } + .\39 u#{$x}, .\39 u\24#{$x} { width: 75%; clear: none; margin-left: 0; } + .\38 u#{$x}, .\38 u\24#{$x} { width: 66.6666666667%; clear: none; margin-left: 0; } + .\37 u#{$x}, .\37 u\24#{$x} { width: 58.3333333333%; clear: none; margin-left: 0; } + .\36 u#{$x}, .\36 u\24#{$x} { width: 50%; clear: none; margin-left: 0; } + .\35 u#{$x}, .\35 u\24#{$x} { width: 41.6666666667%; clear: none; margin-left: 0; } + .\34 u#{$x}, .\34 u\24#{$x} { width: 33.3333333333%; clear: none; margin-left: 0; } + .\33 u#{$x}, .\33 u\24#{$x} { width: 25%; clear: none; margin-left: 0; } + .\32 u#{$x}, .\32 u\24#{$x} { width: 16.6666666667%; clear: none; margin-left: 0; } + .\31 u#{$x}, .\31 u\24#{$x} { width: 8.3333333333%; clear: none; margin-left: 0; } + + .\31 2u\24#{$x} + *, + .\31 1u\24#{$x} + *, + .\31 0u\24#{$x} + *, + .\39 u\24#{$x} + *, + .\38 u\24#{$x} + *, + .\37 u\24#{$x} + *, + .\36 u\24#{$x} + *, + .\35 u\24#{$x} + *, + .\34 u\24#{$x} + *, + .\33 u\24#{$x} + *, + .\32 u\24#{$x} + *, + .\31 u\24#{$x} + * { + clear: left; + } + + .\-11u#{$x} { margin-left: 91.6666666667% } + .\-10u#{$x} { margin-left: 83.3333333333% } + .\-9u#{$x} { margin-left: 75% } + .\-8u#{$x} { margin-left: 66.6666666667% } + .\-7u#{$x} { margin-left: 58.3333333333% } + .\-6u#{$x} { margin-left: 50% } + .\-5u#{$x} { margin-left: 41.6666666667% } + .\-4u#{$x} { margin-left: 33.3333333333% } + .\-3u#{$x} { margin-left: 25% } + .\-2u#{$x} { margin-left: 16.6666666667% } + .\-1u#{$x} { margin-left: 8.3333333333% } + + } + + /// Utility mixin for grid. + /// @param {list} $gutters Gutters. + /// @param {string} $class Optional class name. + /// @param {integer} $multiplier Multiplier (default is 1). + @mixin grid-gutters($gutters, $class: null, $multiplier: 1) { + + // Expand gutters if it's not a list. + @if length($gutters) == 1 { + $gutters: ($gutters, 0); + } + + // Get column and row gutter values. + $c: nth($gutters, 1); + $r: nth($gutters, 2); + + // Get class (if provided). + $x: ''; + + @if $class { + $x: '.' + $class; + } + + // Default. + .row#{$x} > * { padding: ($r * $multiplier) 0 0 ($c * $multiplier); } + .row#{$x} { margin: ($r * $multiplier * -1) 0 -1px ($c * $multiplier * -1); } + + // Uniform. + .row.uniform#{$x} > * { padding: ($c * $multiplier) 0 0 ($c * $multiplier); } + .row.uniform#{$x} { margin: ($c * $multiplier * -1) 0 -1px ($c * $multiplier * -1); } + + } + + /// Wraps @content in vendorized keyframe blocks. + /// @param {string} $name Name. + @mixin keyframes($name) { + + @-moz-keyframes #{$name} { @content; } + @-webkit-keyframes #{$name} { @content; } + @-ms-keyframes #{$name} { @content; } + @keyframes #{$name} { @content; } + + } + + /// + /// Sets breakpoints. + /// @param {map} $x Breakpoints. + /// + @mixin skel-breakpoints($x: ()) { + $breakpoints: $x !global; + } + + /// + /// Initializes layout module. + /// @param {map} config Config. + /// + @mixin skel-layout($config: ()) { + + // Config. + $configPerBreakpoint: (); + + $z: map-get($config, 'breakpoints'); + + @if $z { + $configPerBreakpoint: $z; + } + + // Reset. + $x: map-get($config, 'reset'); + + @if $x { + + /* Reset */ + + @include reset($x); + + } + + // Box model. + $x: map-get($config, 'boxModel'); + + @if $x { + + /* Box Model */ + + @include boxModel($x); + + } + + // Containers. + $containers: map-get($config, 'containers'); + + @if $containers { + + /* Containers */ + + .container { + margin-left: auto; + margin-right: auto; + } + + // Use default is $containers is just "true". + @if $containers == true { + $containers: 960px; + } + + // Apply base. + @include containers($containers); + + // Apply per-breakpoint. + @each $name in map-keys($breakpoints) { + + // Get/use breakpoint setting if it exists. + $x: map-get($configPerBreakpoint, $name); + + // Per-breakpoint config exists? + @if $x { + $y: map-get($x, 'containers'); + + // Setting exists? Use it. + @if $y { + $containers: $y; + } + + } + + // Create @media block. + @media screen and #{map-get($breakpoints, $name)} { + @include containers($containers); + } + + } + + } + + // Grid. + $grid: map-get($config, 'grid'); + + @if $grid { + + /* Grid */ + + // Use defaults if $grid is just "true". + @if $grid == true { + $grid: (); + } + + // Sub-setting: Gutters. + $grid-gutters: 40px; + $x: map-get($grid, 'gutters'); + + @if $x { + $grid-gutters: $x; + } + + // Rows. + .row { + border-bottom: solid 1px transparent; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + } + + .row > * { + float: left; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + } + + .row:after, .row:before { + content: ''; + display: block; + clear: both; + height: 0; + } + + .row.uniform > * > :first-child { + margin-top: 0; + } + + .row.uniform > * > :last-child { + margin-bottom: 0; + } + + // Gutters (0%). + @include grid-gutters($grid-gutters, \30 \25, 0); + + // Apply base. + @include grid($grid-gutters); + + // Apply per-breakpoint. + @each $name in map-keys($breakpoints) { + + // Get/use breakpoint setting if it exists. + $x: map-get($configPerBreakpoint, $name); + + // Per-breakpoint config exists? + @if $x { + $y: map-get($x, 'grid'); + + // Setting exists? + @if $y { + + // Sub-setting: Gutters. + $x: map-get($y, 'gutters'); + + @if $x { + $grid-gutters: $x; + } + + } + + } + + // Create @media block. + @media screen and #{map-get($breakpoints, $name)} { + @include grid($grid-gutters, $name); + } + + } + + } + + } + + /// Resets browser styles. + /// @param {string} $mode Mode (default is 'normalize'). + @mixin reset($mode: 'normalize') { + + @if $mode == 'normalize' { + + // normalize.css v3.0.2 | MIT License | git.io/normalize + html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0} + + } + @else if $mode == 'full' { + + // meyerweb.com/eric/tools/css/reset v2.0 | 20110126 | License: none (public domain) + 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;}body{-webkit-text-size-adjust:none} + + } + + } + + /// Vendorizes a declaration's property and/or value(s). + /// @param {string} $property Property. + /// @param {mixed} $value String/list of value(s). + @mixin vendor($property, $value) { + + // Determine if property should expand. + $expandProperty: index($vendor-properties, $property); + + // Determine if value should expand (and if so, add '-prefix-' placeholder). + $expandValue: false; + + @each $x in $value { + @each $y in $vendor-values { + @if $y == str-slice($x, 1, str-length($y)) { + + $value: set-nth($value, index($value, $x), '-prefix-' + $x); + $expandValue: true; + + } + } + } + + // Expand property? + @if $expandProperty { + @each $vendor in $vendor-prefixes { + #{$vendor}#{$property}: #{str-replace-all($value, '-prefix-', $vendor)}; + } + } + + // Expand just the value? + @elseif $expandValue { + @each $vendor in $vendor-prefixes { + #{$property}: #{str-replace-all($value, '-prefix-', $vendor)}; + } + } + + // Neither? Treat them as a normal declaration. + @else { + #{$property}: #{$value}; + } + } \ No newline at end of file diff --git a/public_html/assets/sass/libs/_vars.scss b/assets/sass/libs/_vars.scss similarity index 95% rename from public_html/assets/sass/libs/_vars.scss rename to assets/sass/libs/_vars.scss index 1459107..32b1ccc 100644 --- a/public_html/assets/sass/libs/_vars.scss +++ b/assets/sass/libs/_vars.scss @@ -1,74 +1,74 @@ -// Misc. - $misc: ( - z-index-base: 10000 - ); - -// Duration. - $duration: ( - transition: 0.2s, - loader-fadein: 1s, - bg-fadein: 0.5s - ); - -// Size. - $size: ( - element-height: 3em, - element-margin: 2em - ); - -// Font. - $font: ( - family: ('Raleway', 'Helvetica', sans-serif), - family-fixed: ('Courier New', monospace), - weight: 400, - weight-bold: 700, - weight-heavy: 800 - ); - -// Palette. - $palette: ( - bg: #fff, - fg: #6f7577, - fg-bold: #61686b, - fg-light: #a8b0b3, - fg-lighter: #e8f0f3, - border: #dddddd, - border-bg: rgba(144,144,144,0.075), - border2: #d3d3d3, - border2-bg: rgba(144,144,144,0.15), - - alt: ( - fg-bold: #ffffff, - fg: rgba(255,255,255,0.5), - fg-light: rgba(255,255,255,0.35), - fg-lighter: rgba(255,255,255,0.2), - border: #ffffff, - border-bg: rgba(255,255,255,0.075), - border2: #ffffff, - border2-bg: rgba(255,255,255,0.15) - ), - - accent1: ( - bg: #8cd1a8, - fg-bold: #ffffff, - fg: mix(#8cd1a8, #ffffff, 25%), - fg-light: mix(#8cd1a8, #ffffff, 40%), - fg-lighter: mix(#8cd1a8, #ffffff, 90%), - border: rgba(255,255,255,0.25), - border-bg: rgba(255,255,255,0.075), - border2: rgba(255,255,255,0.5), - border2-bg: rgba(255,255,255,0.2) - ), - - accent2: ( - bg: #313a3d, - fg-bold: #ffffff, - fg: mix(#313a3d, #ffffff, 25%), - fg-light: mix(#313a3d, #ffffff, 40%), - fg-lighter: mix(#313a3d, #ffffff, 90%), - border: rgba(255,255,255,0.25), - border-bg: rgba(255,255,255,0.075), - border2: rgba(255,255,255,0.5), - border2-bg: rgba(255,255,255,0.2) - ) +// Misc. + $misc: ( + z-index-base: 10000 + ); + +// Duration. + $duration: ( + transition: 0.2s, + loader-fadein: 1s, + bg-fadein: 0.5s + ); + +// Size. + $size: ( + element-height: 3em, + element-margin: 2em + ); + +// Font. + $font: ( + family: ('Raleway', 'Helvetica', sans-serif), + family-fixed: ('Courier New', monospace), + weight: 400, + weight-bold: 700, + weight-heavy: 800 + ); + +// Palette. + $palette: ( + bg: #fff, + fg: #6f7577, + fg-bold: #61686b, + fg-light: #a8b0b3, + fg-lighter: #e8f0f3, + border: #dddddd, + border-bg: rgba(144,144,144,0.075), + border2: #d3d3d3, + border2-bg: rgba(144,144,144,0.15), + + alt: ( + fg-bold: #ffffff, + fg: rgba(255,255,255,0.5), + fg-light: rgba(255,255,255,0.35), + fg-lighter: rgba(255,255,255,0.2), + border: #ffffff, + border-bg: rgba(255,255,255,0.075), + border2: #ffffff, + border2-bg: rgba(255,255,255,0.15) + ), + + accent1: ( + bg: #8cd1a8, + fg-bold: #ffffff, + fg: mix(#8cd1a8, #ffffff, 25%), + fg-light: mix(#8cd1a8, #ffffff, 40%), + fg-lighter: mix(#8cd1a8, #ffffff, 90%), + border: rgba(255,255,255,0.25), + border-bg: rgba(255,255,255,0.075), + border2: rgba(255,255,255,0.5), + border2-bg: rgba(255,255,255,0.2) + ), + + accent2: ( + bg: #313a3d, + fg-bold: #ffffff, + fg: mix(#313a3d, #ffffff, 25%), + fg-light: mix(#313a3d, #ffffff, 40%), + fg-lighter: mix(#313a3d, #ffffff, 90%), + border: rgba(255,255,255,0.25), + border-bg: rgba(255,255,255,0.075), + border2: rgba(255,255,255,0.5), + border2-bg: rgba(255,255,255,0.2) + ) ); \ No newline at end of file diff --git a/public_html/assets/sass/main.scss b/assets/sass/main.scss old mode 100755 new mode 100644 similarity index 100% rename from public_html/assets/sass/main.scss rename to assets/sass/main.scss diff --git a/public_html/assets/xsl/main.xsl b/assets/xsl/main.xsl similarity index 100% rename from public_html/assets/xsl/main.xsl rename to assets/xsl/main.xsl diff --git a/public_html/circuitos.html b/circuitos.html similarity index 98% rename from public_html/circuitos.html rename to circuitos.html index 2e3f570..e527747 100644 --- a/public_html/circuitos.html +++ b/circuitos.html @@ -1,609 +1,609 @@ - - - - - - Trabajo de Circuitos - - - - - - - - - - - - - - -
-
- -
-
-
-
-

Corriente Alterna

-
-
-

Corriente alterna (abreviada CA en español y AC en inglés, de alternating current) se denomina a la corriente - eléctrica en la que la magnitud y el sentido varían cíclicamente, significando esto que gráficamente - pasa la mitad del tiempo en zona positiva y la otra mitad en zona negativa.

-

La forma de oscilación de la corriente alterna más comúnmente utilizada es la oscilación senoidal (sinusoidal - en inglés) ​con la que se consigue una transmisión más eficiente de la energía, a tal punto que al - hablar de corriente alterna se sobrentiende que se refiere a la corriente alterna senoidal.

- -

Sin embargo, en ciertas aplicaciones se utilizan otras formas de oscilación periódicas, tales como la - triangular o la cuadrada.

-

Utilizada genéricamente, la CA se refiere a la forma en la cual la electricidad llega a los hogares y - a las industrias. Sin embargo, las señales de audio y de radio transmitidas por los cables eléctricos, - son también ejemplos de corriente alterna. En estos usos, el fin más importante suele ser la transmisión - y recuperación de la información codificada (o modulada) sobre la señal de la CA.

-

Algunos tipos de oscilaciones periódicas tienen el inconveniente de no tener definida su expresión matemática, - por lo que no se puede operar analíticamente con ellas. Por el contrario, la oscilación sinusoidal - no tiene esta indeterminación matemática y presenta las siguientes ventajas:

-
    -
  • La función seno está perfectamente definida mediante su expresión analítica y gráfica. Mediante la - teoría de los números complejos se analizan con suma facilidad los circuitos de alterna.
  • -
  • Las oscilaciones periódicas no sinusoidales se pueden descomponer en suma de una serie de oscilaciones - sinusoidales de diferentes frecuencias que reciben el nombre de armónicos. Esto es una aplicación - directa de las series de Fourier.
  • -
  • Se pueden generar con facilidad y en magnitudes de valores elevados para facilitar el transporte - de la energía eléctrica.
  • -
  • Su transformación en otras oscilaciones de distinta magnitud se consigue con facilidad mediante la - utilización de transformadores.
  • -
- -
-
-

Oscilación Senoidal

-
-

Una señal senoidal o sinusoidal, - a(t), tensión, - v(t), y corriente, - i(t), se puede expresar matemáticamente según sus parámetros característicos, como una función - del tiempo por medio de la siguiente ecuación:

- - -

Donde:

-
    -
  • - A0 es la amplitud en voltios (Vmax) o amperios(Imax) (también llamado valor máximo o - de pico)
  • -
  • - ω la pulsación en radianes/segundo
  • -
  • - t el tiempo en segundos
  • -
  • - β el ángulo de fase inicial en radianes
  • -
-

Dado que la velocidad angular es más interesante para matemáticos que para ingenieros, la fórmula - anterior se suele expresar como:

- -

Donde se puede observar que - ω = 2πf, y donde - f es la frecuencia en hercios (Hz) y equivale a la inversa del período - f=1/T. Los valores más empleados en la distribución son 50 Hz y 60 Hz.

-
- -
-
-

Valores Significativos

-
-
    -
  • - Valor instantáneo ( - a(t) ): Es el que toma la ordeada en un instante, t, determinado.
  • -
  • - Valor pico a pico ( - App ): Diferencia entre su pico o máximo positivo y su pico negativo. Dado que el valor - máximo de sen(x) es +1 y el valor mínimo es -1, una señal sinusoidal que oscila entre +A0 - y -A0. El valor de pico a pico, escrito como AP-P, es por lo tanto (+A0)-(-A0) = 2×A0
  • -
  • - Valor medio ( - Amed ): Valor del área que forma con el eje de abscisas partido por su período. El valor - medio se puede interpretar como el componente de continua de la oscilación sinusoidal. El - área se considera positiva si está por encima del eje de abscisas y negativa si está por - debajo. Como en una señal sinusoidal el semiciclo positivo es idéntico al negativo, su valor - medio es nulo. Por eso el valor medio de una Oscilación sinusoidal se refiere a un semiciclo. - Mediante el cálculo integral se puede demostrar que su expresión es la siguiente - -
  • -
  • - Pico o cresta: Valor máximo, de signo positivo (+), que toma la oscilación sinusoidal - del espectro electromagnético, cada medio ciclo, a partir del punto “0”. Ese valor aumenta - o disminuye a medida que la amplitud “A” de la propia oscilación crece o decrece positivamente - por encima del valor "0".
  • -
  • - Valor eficaz ( - A ): El valor eficaz se define como el valor de una corriente (o tensión) continua que - produce los mismos efectos calóricos que su equivalente de alterna. Es decir que para determinada - corriente alterna, su valor eficaz (Ief) será la corriente continua que produzca la misma - disipación de potencia (P) en una resistencia(R). Matemáticamente, el valor eficaz de una - magnitud variable con el tiempo, se define como la raíz cuadrada de la media de los cuadrados - de los valores instantáneos alcanzados durante un período: - En la literatura inglesa este valor se conoce como R.M.S. (root mean square, valor cuadrático - medio), y de hecho en matemáticas a veces es llamado valor cuadrático medio de una función. - En el campo industrial, el valor eficaz es de gran importancia, ya que casi todas las operaciones - con magnitudes energéticas se hacen con dicho valor. De ahí que por rapidez y claridad se - represente con la letra mayúscula de la magnitud que se trate (I, V, P, etc.). Matemáticamente - se demuestra que para una corriente alterna sinusoidal el valor eficaz viene dado por la - expresión: - El valor A, tensión o intensidad, es útil para calcular la potencia consumida por una carga. - Así, si una tensión de alterna, desarrolla una cierta potencia P en una carga resistiva dada, - una tensión de continua de Vrms desarrollará la misma potencia P en la misma carga, por lo - tanto, - Vrms x I = VCA x I. -
  • -
  • - Potencia en C.A: - -
  • -
-
- -
-
-

Representación Fasorial

-
-

Una función sinusoidal puede ser representada por un número complejo cuyo argumento crece linealmente - con el tiempo, al que se denomina fasor o representación de Fresnel, que tendrá las siguientes - características: -

-
    -
  • Girará con una velocidad angular ω.
  • -
  • Su módulo será el valor máximo o el eficaz, según convenga.
  • -
-

La razón de utilizar la representación fasorial está en la simplificación que ello supone. Matemáticamente, - un fasor puede ser definido fácilmente por un número complejo, por lo que puede emplearse la - teoría de cálculo de estos números para el análisis de sistemas de corriente alterna.

-

Consideremos, a modo de ejemplo, una tensión de CA cuyo valor instantáneo sea el siguiente:

- -

Tomando como módulo del fasor su valor eficaz, la representación gráfica de la anterior tensión será - la que se puede observar en la figura:

- -

y se anotará:

- -

denominadas formas polares, o bien:

- -

denominada forma binómica.

-

Ahora, la parte práctica de todo esto se resume a lo siguiente:

-

Suponiendo que se tiene el siguiente circuito cuya fuente es de corriente alterna;

- -

Donde - V = V(t) = Vm*Sen(ωt ± θ), y - ω=2πf.

-

Esto se conoce como Circuito en dominio del tiempo, pero para poder trabajar este circuito y aplicar - las propiedades ya que está en corriente alterna debe hacerse una transformación hacia el dominio - del fasor. Para pasar de dominio del tiempo a dominio del fasor se deben transformar los elementos:

-

En este caso se transformará - R = R (La resistencia permanece igual), - L = XL (La inductancia se transforma en reactancia inductiva), y - C = Xc (La capacitancia se transforma en reactancia capacitiva), y el nuevo V será el Vef - (Voltaje eficaz), - V = Vef = Vm / √2; En este caso se conserva el angulo fasor - θ.

-

Hecho esto surge un nuevo concepto llamado Impedancia

-
- -
-
-

Impedancia

-
-

La impedancia (Z) es una medida de oposición que presenta un circuito a una corriente cuando se aplica - una tensión. La impedancia extiende el concepto de resistencia a los circuitos de corriente alterna - (CA), y posee tanto magnitud como fase, a diferencia de la resistencia, que sólo tiene magnitud. - Cuando un circuito es alimentado con corriente continua (CC), su impedancia es igual a la resistencia, - lo que puede ser interpretado como la impedancia con ángulo de fase cero.

-

Forma rectangular:

- -

Forma polar:

- -

En este caso X significa Xc o XL, dependiendo del elemento que se haya transformado:

- -

Circuito transformado:

- -

- Las impedancias se miden en - Ohms (Ω). -

-

Finalmente, obtenidas las impedancias el circuito puede ser calculado exactamente como un circuito - de corriente continua, tomando las impedancias como resistencias (es decir, se pueden aplicar - todas las leyes, teoremas y propiedades de la corriente continua), con la particularidad de que - se debe cumplir con ciertas propiedades particulares:

-
    -
  • Para la suma de impedancias: Todas las impedancias deben estar en forma rectangular.
  • -
  • Para la multiplicación de impedancias: Todas las impedancias deben estar en la misma forma, ya - sea rectangular o polar -
      -
    • Para la multiplicación polar se multiplican las magnitudes de Z y se suman los ángulos.
    • -
    • En la forma rectangular hay que recordar que al ser j un numero imaginario se deben aplicar - las respectivas propiedades
    • -
    -
  • -
  • Para la división de impedancias: Todas las impedancias deben estar en su forma polar (Se dividen - las magnitudes y se restan los ángulos).
  • -
- -
- -
-
-
-
- - -
-
- -
-
-
-
-

Corriente Continua

-
-
-

La corriente continua (abreviada CD en español y DC en inglés, de direct current) se refiere al flujo - continuo de carga eléctrica a través de un conductor entre dos puntos de distinto potencial y carga - eléctrica, que no cambia de sentido con el tiempo.​ A diferencia de la corriente alterna, en la corriente - continua las cargas eléctricas circulan siempre en la misma dirección.

- -

Aunque comúnmente se identifica la corriente continua con una corriente constante, es continua toda corriente - que mantenga siempre la misma polaridad, así disminuya su intensidad conforme se va consumiendo la - carga (por ejemplo cuando se descarga una batería eléctrica).

- - -

También se dice corriente continua cuando los electrones se mueven siempre en el mismo sentido, el flujo - se denomina corriente continua y va (por convenio) del polo positivo al negativo.

-

Los cálculos de circuitos de corriente continua se realizan respectivamente aplicando las leyes de Ohm, - leyes de Kirchhoff, circuitos delta y estrella, teoremas de mallas y nodos, teorema de superposición, - y ley de Thevenin y Norton.

-
-
-
-
- - -
-
- -
-
-
-
-

Bobinas

-
-
-
-

Definición

-
-

Un inductor, bobina o reactor es un componente pasivo de un circuito eléctrico que, debido al fenómeno - de la autoinducción, almacena energía en forma de campo magnético.

- - -
-

Construcción

-
-

Un inductor está constituido normalmente por una bobina de conductor, típicamente alambre o hilo de cobre - esmaltado. Existen inductores con núcleo de aire o con núcleo hecho de material ferroso (por ejemplo, - acero magnético), para incrementar su capacidad de magnetismo. -

- - -
-

Funcionamiento

-
-

La bobina almacena energía en forma de campo magnético cuando aumenta la intensidad de corriente, devolviéndola - cuando ésta disminuye.

- -
-

Voltaje y Corriente a través de una Bobina

-
-

Matemáticamente se puede demostrar que la energía U, almacenada por una bobina con inductancia L, que - es recorrida por una corriente de intensidad I, viene dada por:

- -

Y la Corriente viene dada por:

- -

Esto quiere decir que, si por ejemplo tenemos el siguiente circuito en el cual el interruptor se cierra - en el instante t=0, el voltaje y la corriente se comportan de la siguiente manera:

- - -
-
-
-
- - -
-
- -
-
-
-
-

Condensadores

-
-
-
-

Definición

-
-

Los Condensadores (también llamados Capacitores) son componentes que tienen la capacidad de almacenar - energía en forma de un campo eléctrico, son ampliamente utilizados en electricidad y electrónica - como unos de los componentes mas básicos en el diseño de circuitos

- -

Idealmente tiene un Capacitancia (C) constante, medida en Faradios, que se define como la relación entre - la Carga (Q) en cada conductor sobre el Voltaje (V) entre ellos

- -
-

Construcción

-
-

Los Condensadores están construidos, en su forma mas básica, por 2 placas conductoras paralelas, separadas - por un material dieléctrico o vacío, las placas paralelas pueden ser rectangulares, circulares, cilíndricas - y el dieléctrico puede vidrio, aire, papel, cerámica, aceite, etc.

- -
-

Funcionamiento

-
-

Al ser sometidos an voltaje, los Capacitores almacenan electrones en uno de sus terminales, estas generan - un campo eléctrico que atraen cargas positivas al otro terminal y empujan las negativas al resto - del circuito. Estas ocurre hasta que la fuerza de repulsion entra las cargas del terminal negativo - se igualan al voltaje que las mantienen ahy, entonces el capacitor esta cargado y la corriente deja - de atravesarlo. Finalmente al desaparecer el voltaje la fuerza almacenada se libera empujando a los - electrones desde el terminal negativo al positivo. -

- -

Esto puede visualizarse de forma mas intuitiva con una analogía hidráulica: una tubería un un elástico - tapándola. El agua representa a los electrones, el elástico es el dieléctrico evitando que estos - lo atraviesen. -

-
-

Corriente a través de un Capacitor

-
-

Como podemos ver en la sección anterior, los Condensadores son elementos que se oponen a la variacion - de la tension. El voltaje generado por el componente siempre esta en contra del voltaje que lo causa - y es proporcional a este, y una ves que se cargan no permiten el paso de la corriente. -

-

Ya que ninguna carga puede atravesar el dieléctrico, la corriente que atraviesa al condensador es la - medida de electrones desplazados del terminal positivo causado por los electrones que llegan hasta - el terminal negativo. Asi que conociendo la Capacitancia de un Condensador y el Voltaje al que esta - sometido en un momento especifico, se puede calcular la corriente en ese momento:

- - -
-
-
-
- - -
-
- -
-
-
-
-

Circuitos Transitorios

-
- -
-
-

Circuitos RC

-
-

-

Es un Circuito compuesto por Capacitores y Resistencias en serie. Se pueden usar para filtrar una señal - al bloquear ciertas frecuencias y permitir otras.

-

El Circuito RC mas simple es un Capacitor cargado y una Resistencia conectadas entre ellas, el Capacitor - va a descargar creando un voltaje, este valor depende del tiempo y se reduce hasta llegar a 0

- -
-

Voltaje en el Circuito

-
-

- Como pudimos ver en el - tema anterior - la corriente que atravesara el Capacitor variara con el tiempo, y deducimos que: -

- -

Al despejar el Voltaje obtenemos la formula de la Caída Exponencial, Si V0 es el Voltaje inicial del - Capacitor -

- -

Ademas, el tiempo requerido para que el voltaje disminuya a un 1/e de su valor inicial, se conoce como - la Constante de Tiempo RC, y esta definida por: -

- -
- -
-
-

Circuitos RL

-
- -

Es un Circuito compuesto por Inductores y Resistencias en serie. Se pueden usar para filtrar una señal, - específicamente los circuitos de Respuesta Infinita al Impulso esta compuesto de una sola Resistencia - con un Inductor

-

- Un Circuito de Respuesta Natural es un circuito RL en el que el Inductor se se encuentra cargado y conectado a una Resistencia. - El inductor descargara su campo magnético generando una corriente cuyo valor dependerá del tiempo -

-
-

Corriente en el Circuito

-
-

- Como pudimos ver en el - tema anterior y en simetría con los - Circuitos RC la corriente que generara el Inductor esta dada por: -

- -

Definiendo la Constante de Tiempo RL como: -

- -

Por lo que terminamos con: -

- -
- -
-
-

Circuitos RLC

-
-

Es un circuito eléctrico que consiste de una Resistencia (R), un Inductor (L) y un Condensador (C), conectados - en serie o paralelo. Estos circuitos se caracterizan por su comportamiento de oscilador armónico, - de la misma forma que un circuito LC, pero en la realidad no es posible obtener una resistencia de - 0 en un circuito fuera de la super conductividad

- - -
-

Circuito LC

-
-

Para entender mejor el funcionamiento de un circuito RLC es mejor examinar el caso ideal donde la resistencia - es nula: un circuito LC

- -

Como se puede observer el comportamiento de los Inductores al oponerse a los cambios de de corriente, - incluyendo su disminución, y la de los Capacitores de almacenar cargas eléctricas hasta cargarse - y luego descargarse expulsando las cargas en sentido opuesto, causan un efecto de Oscilación

- -

El Capacitor cargado expulsaría electrones hasta que ambas capas estuvieran al mismo potencial, sin embargo - el campo magnético del inductor retrasa la corriente al inicio, cuando esta es fuerte, manteniendo - la diferencia de potencial, y al final cuando quedan pocas cargas en el negativo del capacitor, el - campo magnético acumulado las empuja hasta el otro terminal, de forma que todas las cargas son transferidas - de un terminal del Condensador al otro

-

El funcionamiento de los Circuitos RLC es como esto pero obviamente con una Resistencia agregada, esta - tendrá el efecto de disipar una parte de la energía en cada Oscilación, conocido como Amortiguamiento

- -
-

Amortiguamiento

-
- -

Para poder explicar funcionamiento del circuito primero es importante discutir su amortiguación y para - eso se necesita conocer las medidas frecuencia angular, - α y - ω - 0 - .

-

- α es la frecuencia neperiana o Atenuación, y es una medida de que tan rápido la respuesta del - circuito morirá después de ser removido una fuente de estimulo. - ω - 0 - es la frecuencia de resonancia angular. En un circuito en series estas están dadas por:

- -

Un Circuito RLC puede esta en 3 estados de amortiguamiento dependiendo de la relación entre estas dos - medidas: -

-
    -
  • Si - α > ω0, se encuentra - Super-Amortiguado -
  • -
  • - Si - α = ω0, se encuentra - Amortiguamiento Critico -
  • -
  • - Si - α < ω0, se encuentra - Sub-Amortiguado -
  • -
-
Super-Amortiguado
-

Definiendo a las raíces S como:

- -

Se puede calcular la formula para la Corriente en el circuito:

- -

En donde los coeficientes - A - 1 - e - A - 2 - son dependientes del circuito y se calculan al realizar un sistema de ecuaciones con la formula resulta - para el valor de la Corriente en el tiempo inicial y el que va atener después de un tiempo infinito

-
Amortiguamiento Critico
-

En este caso la formula es mas simple:

- -

Al igual que la ves pasada los coeficientes - A - 1 - e - A - 2 - son dependientes del circuito

-
Sub-Amortiguamiento
-

Para este caso, definiendo la raíz - ω - d - :

- -

Se usa la formula:

- -
-
-
-
- - - - - - - - - - - - - - - - - + + + + + + Trabajo de Circuitos + + + + + + + + + + + + + + +
+
+ +
+
+
+
+

Corriente Alterna

+
+
+

Corriente alterna (abreviada CA en español y AC en inglés, de alternating current) se denomina a la corriente + eléctrica en la que la magnitud y el sentido varían cíclicamente, significando esto que gráficamente + pasa la mitad del tiempo en zona positiva y la otra mitad en zona negativa.

+

La forma de oscilación de la corriente alterna más comúnmente utilizada es la oscilación senoidal (sinusoidal + en inglés) ​con la que se consigue una transmisión más eficiente de la energía, a tal punto que al + hablar de corriente alterna se sobrentiende que se refiere a la corriente alterna senoidal.

+ +

Sin embargo, en ciertas aplicaciones se utilizan otras formas de oscilación periódicas, tales como la + triangular o la cuadrada.

+

Utilizada genéricamente, la CA se refiere a la forma en la cual la electricidad llega a los hogares y + a las industrias. Sin embargo, las señales de audio y de radio transmitidas por los cables eléctricos, + son también ejemplos de corriente alterna. En estos usos, el fin más importante suele ser la transmisión + y recuperación de la información codificada (o modulada) sobre la señal de la CA.

+

Algunos tipos de oscilaciones periódicas tienen el inconveniente de no tener definida su expresión matemática, + por lo que no se puede operar analíticamente con ellas. Por el contrario, la oscilación sinusoidal + no tiene esta indeterminación matemática y presenta las siguientes ventajas:

+
    +
  • La función seno está perfectamente definida mediante su expresión analítica y gráfica. Mediante la + teoría de los números complejos se analizan con suma facilidad los circuitos de alterna.
  • +
  • Las oscilaciones periódicas no sinusoidales se pueden descomponer en suma de una serie de oscilaciones + sinusoidales de diferentes frecuencias que reciben el nombre de armónicos. Esto es una aplicación + directa de las series de Fourier.
  • +
  • Se pueden generar con facilidad y en magnitudes de valores elevados para facilitar el transporte + de la energía eléctrica.
  • +
  • Su transformación en otras oscilaciones de distinta magnitud se consigue con facilidad mediante la + utilización de transformadores.
  • +
+ +
+
+

Oscilación Senoidal

+
+

Una señal senoidal o sinusoidal, + a(t), tensión, + v(t), y corriente, + i(t), se puede expresar matemáticamente según sus parámetros característicos, como una función + del tiempo por medio de la siguiente ecuación:

+ + +

Donde:

+
    +
  • + A0 es la amplitud en voltios (Vmax) o amperios(Imax) (también llamado valor máximo o + de pico)
  • +
  • + ω la pulsación en radianes/segundo
  • +
  • + t el tiempo en segundos
  • +
  • + β el ángulo de fase inicial en radianes
  • +
+

Dado que la velocidad angular es más interesante para matemáticos que para ingenieros, la fórmula + anterior se suele expresar como:

+ +

Donde se puede observar que + ω = 2πf, y donde + f es la frecuencia en hercios (Hz) y equivale a la inversa del período + f=1/T. Los valores más empleados en la distribución son 50 Hz y 60 Hz.

+
+ +
+
+

Valores Significativos

+
+
    +
  • + Valor instantáneo ( + a(t) ): Es el que toma la ordeada en un instante, t, determinado.
  • +
  • + Valor pico a pico ( + App ): Diferencia entre su pico o máximo positivo y su pico negativo. Dado que el valor + máximo de sen(x) es +1 y el valor mínimo es -1, una señal sinusoidal que oscila entre +A0 + y -A0. El valor de pico a pico, escrito como AP-P, es por lo tanto (+A0)-(-A0) = 2×A0
  • +
  • + Valor medio ( + Amed ): Valor del área que forma con el eje de abscisas partido por su período. El valor + medio se puede interpretar como el componente de continua de la oscilación sinusoidal. El + área se considera positiva si está por encima del eje de abscisas y negativa si está por + debajo. Como en una señal sinusoidal el semiciclo positivo es idéntico al negativo, su valor + medio es nulo. Por eso el valor medio de una Oscilación sinusoidal se refiere a un semiciclo. + Mediante el cálculo integral se puede demostrar que su expresión es la siguiente + +
  • +
  • + Pico o cresta: Valor máximo, de signo positivo (+), que toma la oscilación sinusoidal + del espectro electromagnético, cada medio ciclo, a partir del punto “0”. Ese valor aumenta + o disminuye a medida que la amplitud “A” de la propia oscilación crece o decrece positivamente + por encima del valor "0".
  • +
  • + Valor eficaz ( + A ): El valor eficaz se define como el valor de una corriente (o tensión) continua que + produce los mismos efectos calóricos que su equivalente de alterna. Es decir que para determinada + corriente alterna, su valor eficaz (Ief) será la corriente continua que produzca la misma + disipación de potencia (P) en una resistencia(R). Matemáticamente, el valor eficaz de una + magnitud variable con el tiempo, se define como la raíz cuadrada de la media de los cuadrados + de los valores instantáneos alcanzados durante un período: + En la literatura inglesa este valor se conoce como R.M.S. (root mean square, valor cuadrático + medio), y de hecho en matemáticas a veces es llamado valor cuadrático medio de una función. + En el campo industrial, el valor eficaz es de gran importancia, ya que casi todas las operaciones + con magnitudes energéticas se hacen con dicho valor. De ahí que por rapidez y claridad se + represente con la letra mayúscula de la magnitud que se trate (I, V, P, etc.). Matemáticamente + se demuestra que para una corriente alterna sinusoidal el valor eficaz viene dado por la + expresión: + El valor A, tensión o intensidad, es útil para calcular la potencia consumida por una carga. + Así, si una tensión de alterna, desarrolla una cierta potencia P en una carga resistiva dada, + una tensión de continua de Vrms desarrollará la misma potencia P en la misma carga, por lo + tanto, + Vrms x I = VCA x I. +
  • +
  • + Potencia en C.A: + +
  • +
+
+ +
+
+

Representación Fasorial

+
+

Una función sinusoidal puede ser representada por un número complejo cuyo argumento crece linealmente + con el tiempo, al que se denomina fasor o representación de Fresnel, que tendrá las siguientes + características: +

+
    +
  • Girará con una velocidad angular ω.
  • +
  • Su módulo será el valor máximo o el eficaz, según convenga.
  • +
+

La razón de utilizar la representación fasorial está en la simplificación que ello supone. Matemáticamente, + un fasor puede ser definido fácilmente por un número complejo, por lo que puede emplearse la + teoría de cálculo de estos números para el análisis de sistemas de corriente alterna.

+

Consideremos, a modo de ejemplo, una tensión de CA cuyo valor instantáneo sea el siguiente:

+ +

Tomando como módulo del fasor su valor eficaz, la representación gráfica de la anterior tensión será + la que se puede observar en la figura:

+ +

y se anotará:

+ +

denominadas formas polares, o bien:

+ +

denominada forma binómica.

+

Ahora, la parte práctica de todo esto se resume a lo siguiente:

+

Suponiendo que se tiene el siguiente circuito cuya fuente es de corriente alterna;

+ +

Donde + V = V(t) = Vm*Sen(ωt ± θ), y + ω=2πf.

+

Esto se conoce como Circuito en dominio del tiempo, pero para poder trabajar este circuito y aplicar + las propiedades ya que está en corriente alterna debe hacerse una transformación hacia el dominio + del fasor. Para pasar de dominio del tiempo a dominio del fasor se deben transformar los elementos:

+

En este caso se transformará + R = R (La resistencia permanece igual), + L = XL (La inductancia se transforma en reactancia inductiva), y + C = Xc (La capacitancia se transforma en reactancia capacitiva), y el nuevo V será el Vef + (Voltaje eficaz), + V = Vef = Vm / √2; En este caso se conserva el angulo fasor + θ.

+

Hecho esto surge un nuevo concepto llamado Impedancia

+
+ +
+
+

Impedancia

+
+

La impedancia (Z) es una medida de oposición que presenta un circuito a una corriente cuando se aplica + una tensión. La impedancia extiende el concepto de resistencia a los circuitos de corriente alterna + (CA), y posee tanto magnitud como fase, a diferencia de la resistencia, que sólo tiene magnitud. + Cuando un circuito es alimentado con corriente continua (CC), su impedancia es igual a la resistencia, + lo que puede ser interpretado como la impedancia con ángulo de fase cero.

+

Forma rectangular:

+ +

Forma polar:

+ +

En este caso X significa Xc o XL, dependiendo del elemento que se haya transformado:

+ +

Circuito transformado:

+ +

+ Las impedancias se miden en + Ohms (Ω). +

+

Finalmente, obtenidas las impedancias el circuito puede ser calculado exactamente como un circuito + de corriente continua, tomando las impedancias como resistencias (es decir, se pueden aplicar + todas las leyes, teoremas y propiedades de la corriente continua), con la particularidad de que + se debe cumplir con ciertas propiedades particulares:

+
    +
  • Para la suma de impedancias: Todas las impedancias deben estar en forma rectangular.
  • +
  • Para la multiplicación de impedancias: Todas las impedancias deben estar en la misma forma, ya + sea rectangular o polar +
      +
    • Para la multiplicación polar se multiplican las magnitudes de Z y se suman los ángulos.
    • +
    • En la forma rectangular hay que recordar que al ser j un numero imaginario se deben aplicar + las respectivas propiedades
    • +
    +
  • +
  • Para la división de impedancias: Todas las impedancias deben estar en su forma polar (Se dividen + las magnitudes y se restan los ángulos).
  • +
+ +
+ +
+
+
+
+ + +
+
+ +
+
+
+
+

Corriente Continua

+
+
+

La corriente continua (abreviada CD en español y DC en inglés, de direct current) se refiere al flujo + continuo de carga eléctrica a través de un conductor entre dos puntos de distinto potencial y carga + eléctrica, que no cambia de sentido con el tiempo.​ A diferencia de la corriente alterna, en la corriente + continua las cargas eléctricas circulan siempre en la misma dirección.

+ +

Aunque comúnmente se identifica la corriente continua con una corriente constante, es continua toda corriente + que mantenga siempre la misma polaridad, así disminuya su intensidad conforme se va consumiendo la + carga (por ejemplo cuando se descarga una batería eléctrica).

+ + +

También se dice corriente continua cuando los electrones se mueven siempre en el mismo sentido, el flujo + se denomina corriente continua y va (por convenio) del polo positivo al negativo.

+

Los cálculos de circuitos de corriente continua se realizan respectivamente aplicando las leyes de Ohm, + leyes de Kirchhoff, circuitos delta y estrella, teoremas de mallas y nodos, teorema de superposición, + y ley de Thevenin y Norton.

+
+
+
+
+ + +
+
+ +
+
+
+
+

Bobinas

+
+
+
+

Definición

+
+

Un inductor, bobina o reactor es un componente pasivo de un circuito eléctrico que, debido al fenómeno + de la autoinducción, almacena energía en forma de campo magnético.

+ + +
+

Construcción

+
+

Un inductor está constituido normalmente por una bobina de conductor, típicamente alambre o hilo de cobre + esmaltado. Existen inductores con núcleo de aire o con núcleo hecho de material ferroso (por ejemplo, + acero magnético), para incrementar su capacidad de magnetismo. +

+ + +
+

Funcionamiento

+
+

La bobina almacena energía en forma de campo magnético cuando aumenta la intensidad de corriente, devolviéndola + cuando ésta disminuye.

+ +
+

Voltaje y Corriente a través de una Bobina

+
+

Matemáticamente se puede demostrar que la energía U, almacenada por una bobina con inductancia L, que + es recorrida por una corriente de intensidad I, viene dada por:

+ +

Y la Corriente viene dada por:

+ +

Esto quiere decir que, si por ejemplo tenemos el siguiente circuito en el cual el interruptor se cierra + en el instante t=0, el voltaje y la corriente se comportan de la siguiente manera:

+ + +
+
+
+
+ + +
+
+ +
+
+
+
+

Condensadores

+
+
+
+

Definición

+
+

Los Condensadores (también llamados Capacitores) son componentes que tienen la capacidad de almacenar + energía en forma de un campo eléctrico, son ampliamente utilizados en electricidad y electrónica + como unos de los componentes mas básicos en el diseño de circuitos

+ +

Idealmente tiene un Capacitancia (C) constante, medida en Faradios, que se define como la relación entre + la Carga (Q) en cada conductor sobre el Voltaje (V) entre ellos

+ +
+

Construcción

+
+

Los Condensadores están construidos, en su forma mas básica, por 2 placas conductoras paralelas, separadas + por un material dieléctrico o vacío, las placas paralelas pueden ser rectangulares, circulares, cilíndricas + y el dieléctrico puede vidrio, aire, papel, cerámica, aceite, etc.

+ +
+

Funcionamiento

+
+

Al ser sometidos an voltaje, los Capacitores almacenan electrones en uno de sus terminales, estas generan + un campo eléctrico que atraen cargas positivas al otro terminal y empujan las negativas al resto + del circuito. Estas ocurre hasta que la fuerza de repulsion entra las cargas del terminal negativo + se igualan al voltaje que las mantienen ahy, entonces el capacitor esta cargado y la corriente deja + de atravesarlo. Finalmente al desaparecer el voltaje la fuerza almacenada se libera empujando a los + electrones desde el terminal negativo al positivo. +

+ +

Esto puede visualizarse de forma mas intuitiva con una analogía hidráulica: una tubería un un elástico + tapándola. El agua representa a los electrones, el elástico es el dieléctrico evitando que estos + lo atraviesen. +

+
+

Corriente a través de un Capacitor

+
+

Como podemos ver en la sección anterior, los Condensadores son elementos que se oponen a la variacion + de la tension. El voltaje generado por el componente siempre esta en contra del voltaje que lo causa + y es proporcional a este, y una ves que se cargan no permiten el paso de la corriente. +

+

Ya que ninguna carga puede atravesar el dieléctrico, la corriente que atraviesa al condensador es la + medida de electrones desplazados del terminal positivo causado por los electrones que llegan hasta + el terminal negativo. Asi que conociendo la Capacitancia de un Condensador y el Voltaje al que esta + sometido en un momento especifico, se puede calcular la corriente en ese momento:

+ + +
+
+
+
+ + +
+
+ +
+
+
+
+

Circuitos Transitorios

+
+ +
+
+

Circuitos RC

+
+

+

Es un Circuito compuesto por Capacitores y Resistencias en serie. Se pueden usar para filtrar una señal + al bloquear ciertas frecuencias y permitir otras.

+

El Circuito RC mas simple es un Capacitor cargado y una Resistencia conectadas entre ellas, el Capacitor + va a descargar creando un voltaje, este valor depende del tiempo y se reduce hasta llegar a 0

+ +
+

Voltaje en el Circuito

+
+

+ Como pudimos ver en el + tema anterior + la corriente que atravesara el Capacitor variara con el tiempo, y deducimos que: +

+ +

Al despejar el Voltaje obtenemos la formula de la Caída Exponencial, Si V0 es el Voltaje inicial del + Capacitor +

+ +

Ademas, el tiempo requerido para que el voltaje disminuya a un 1/e de su valor inicial, se conoce como + la Constante de Tiempo RC, y esta definida por: +

+ +
+ +
+
+

Circuitos RL

+
+ +

Es un Circuito compuesto por Inductores y Resistencias en serie. Se pueden usar para filtrar una señal, + específicamente los circuitos de Respuesta Infinita al Impulso esta compuesto de una sola Resistencia + con un Inductor

+

+ Un Circuito de Respuesta Natural es un circuito RL en el que el Inductor se se encuentra cargado y conectado a una Resistencia. + El inductor descargara su campo magnético generando una corriente cuyo valor dependerá del tiempo +

+
+

Corriente en el Circuito

+
+

+ Como pudimos ver en el + tema anterior y en simetría con los + Circuitos RC la corriente que generara el Inductor esta dada por: +

+ +

Definiendo la Constante de Tiempo RL como: +

+ +

Por lo que terminamos con: +

+ +
+ +
+
+

Circuitos RLC

+
+

Es un circuito eléctrico que consiste de una Resistencia (R), un Inductor (L) y un Condensador (C), conectados + en serie o paralelo. Estos circuitos se caracterizan por su comportamiento de oscilador armónico, + de la misma forma que un circuito LC, pero en la realidad no es posible obtener una resistencia de + 0 en un circuito fuera de la super conductividad

+ + +
+

Circuito LC

+
+

Para entender mejor el funcionamiento de un circuito RLC es mejor examinar el caso ideal donde la resistencia + es nula: un circuito LC

+ +

Como se puede observer el comportamiento de los Inductores al oponerse a los cambios de de corriente, + incluyendo su disminución, y la de los Capacitores de almacenar cargas eléctricas hasta cargarse + y luego descargarse expulsando las cargas en sentido opuesto, causan un efecto de Oscilación

+ +

El Capacitor cargado expulsaría electrones hasta que ambas capas estuvieran al mismo potencial, sin embargo + el campo magnético del inductor retrasa la corriente al inicio, cuando esta es fuerte, manteniendo + la diferencia de potencial, y al final cuando quedan pocas cargas en el negativo del capacitor, el + campo magnético acumulado las empuja hasta el otro terminal, de forma que todas las cargas son transferidas + de un terminal del Condensador al otro

+

El funcionamiento de los Circuitos RLC es como esto pero obviamente con una Resistencia agregada, esta + tendrá el efecto de disipar una parte de la energía en cada Oscilación, conocido como Amortiguamiento

+ +
+

Amortiguamiento

+
+ +

Para poder explicar funcionamiento del circuito primero es importante discutir su amortiguación y para + eso se necesita conocer las medidas frecuencia angular, + α y + ω + 0 + .

+

+ α es la frecuencia neperiana o Atenuación, y es una medida de que tan rápido la respuesta del + circuito morirá después de ser removido una fuente de estimulo. + ω + 0 + es la frecuencia de resonancia angular. En un circuito en series estas están dadas por:

+ +

Un Circuito RLC puede esta en 3 estados de amortiguamiento dependiendo de la relación entre estas dos + medidas: +

+
    +
  • Si + α > ω0, se encuentra + Super-Amortiguado +
  • +
  • + Si + α = ω0, se encuentra + Amortiguamiento Critico +
  • +
  • + Si + α < ω0, se encuentra + Sub-Amortiguado +
  • +
+
Super-Amortiguado
+

Definiendo a las raíces S como:

+ +

Se puede calcular la formula para la Corriente en el circuito:

+ +

En donde los coeficientes + A + 1 + e + A + 2 + son dependientes del circuito y se calculan al realizar un sistema de ecuaciones con la formula resulta + para el valor de la Corriente en el tiempo inicial y el que va atener después de un tiempo infinito

+
Amortiguamiento Critico
+

En este caso la formula es mas simple:

+ +

Al igual que la ves pasada los coeficientes + A + 1 + e + A + 2 + son dependientes del circuito

+
Sub-Amortiguamiento
+

Para este caso, definiendo la raíz + ω + d + :

+ +

Se usa la formula:

+ +
+
+
+
+ + + + + + + + + + + + + + + + + diff --git a/public_html/example.html b/example.html similarity index 100% rename from public_html/example.html rename to example.html diff --git a/public_html/images/Bobina_Circuito.png b/images/Bobina_Circuito.png similarity index 100% rename from public_html/images/Bobina_Circuito.png rename to images/Bobina_Circuito.png diff --git a/public_html/images/Bobina_Voltaje_Corriente.png b/images/Bobina_Voltaje_Corriente.png similarity index 100% rename from public_html/images/Bobina_Voltaje_Corriente.png rename to images/Bobina_Voltaje_Corriente.png diff --git a/public_html/images/Circuito_CA1.png b/images/Circuito_CA1.png similarity index 100% rename from public_html/images/Circuito_CA1.png rename to images/Circuito_CA1.png diff --git a/public_html/images/Circuito_CA2.png b/images/Circuito_CA2.png similarity index 100% rename from public_html/images/Circuito_CA2.png rename to images/Circuito_CA2.png diff --git a/public_html/images/Corriente_Continua_01.png b/images/Corriente_Continua_01.png similarity index 100% rename from public_html/images/Corriente_Continua_01.png rename to images/Corriente_Continua_01.png diff --git a/public_html/images/Corriente_Continua_02.png b/images/Corriente_Continua_02.png similarity index 100% rename from public_html/images/Corriente_Continua_02.png rename to images/Corriente_Continua_02.png diff --git a/public_html/images/Corriente_Continua_03.png b/images/Corriente_Continua_03.png similarity index 100% rename from public_html/images/Corriente_Continua_03.png rename to images/Corriente_Continua_03.png diff --git a/public_html/images/Fasor.png b/images/Fasor.png similarity index 100% rename from public_html/images/Fasor.png rename to images/Fasor.png diff --git a/public_html/images/LC_Circuit.gif b/images/LC_Circuit.gif similarity index 100% rename from public_html/images/LC_Circuit.gif rename to images/LC_Circuit.gif diff --git a/public_html/images/Onda_Senoidal.png b/images/Onda_Senoidal.png similarity index 100% rename from public_html/images/Onda_Senoidal.png rename to images/Onda_Senoidal.png diff --git a/public_html/images/Onda_Senoidal_Parametros.png b/images/Onda_Senoidal_Parametros.png similarity index 100% rename from public_html/images/Onda_Senoidal_Parametros.png rename to images/Onda_Senoidal_Parametros.png diff --git a/public_html/images/RLC_Series.jpg b/images/RLC_Series.jpg similarity index 100% rename from public_html/images/RLC_Series.jpg rename to images/RLC_Series.jpg diff --git a/public_html/images/RL_Series.png b/images/RL_Series.png similarity index 100% rename from public_html/images/RL_Series.png rename to images/RL_Series.png diff --git a/public_html/images/bg-old.jpg b/images/bg-old.jpg similarity index 100% rename from public_html/images/bg-old.jpg rename to images/bg-old.jpg diff --git a/public_html/images/bg.jpg b/images/bg.jpg old mode 100755 new mode 100644 similarity index 100% rename from public_html/images/bg.jpg rename to images/bg.jpg diff --git a/public_html/images/bobina01.jpg b/images/bobina01.jpg similarity index 100% rename from public_html/images/bobina01.jpg rename to images/bobina01.jpg diff --git a/public_html/images/bobina02.jpg b/images/bobina02.jpg similarity index 100% rename from public_html/images/bobina02.jpg rename to images/bobina02.jpg diff --git a/public_html/images/bobina03.jpg b/images/bobina03.jpg similarity index 100% rename from public_html/images/bobina03.jpg rename to images/bobina03.jpg diff --git a/public_html/images/calabozo.png b/images/calabozo.png similarity index 100% rename from public_html/images/calabozo.png rename to images/calabozo.png diff --git a/public_html/images/calabozo01.jpg b/images/calabozo01.jpg similarity index 100% rename from public_html/images/calabozo01.jpg rename to images/calabozo01.jpg diff --git a/public_html/images/calabozo02.jpg b/images/calabozo02.jpg similarity index 100% rename from public_html/images/calabozo02.jpg rename to images/calabozo02.jpg diff --git a/public_html/images/calabozo03.jpg b/images/calabozo03.jpg similarity index 100% rename from public_html/images/calabozo03.jpg rename to images/calabozo03.jpg diff --git a/public_html/images/calabozo04.jpg b/images/calabozo04.jpg similarity index 100% rename from public_html/images/calabozo04.jpg rename to images/calabozo04.jpg diff --git a/public_html/images/circuitos02.jpg b/images/circuitos02.jpg similarity index 100% rename from public_html/images/circuitos02.jpg rename to images/circuitos02.jpg diff --git a/public_html/images/circuitos03.jpg b/images/circuitos03.jpg similarity index 100% rename from public_html/images/circuitos03.jpg rename to images/circuitos03.jpg diff --git a/public_html/images/circuitos09.jpg b/images/circuitos09.jpg similarity index 100% rename from public_html/images/circuitos09.jpg rename to images/circuitos09.jpg diff --git a/public_html/images/circuitos10.jpg b/images/circuitos10.jpg similarity index 100% rename from public_html/images/circuitos10.jpg rename to images/circuitos10.jpg diff --git a/public_html/images/circuitos11.jpg b/images/circuitos11.jpg similarity index 100% rename from public_html/images/circuitos11.jpg rename to images/circuitos11.jpg diff --git a/public_html/images/condensadores01.jpg b/images/condensadores01.jpg similarity index 100% rename from public_html/images/condensadores01.jpg rename to images/condensadores01.jpg diff --git a/public_html/images/condensadores02.jpg b/images/condensadores02.jpg similarity index 100% rename from public_html/images/condensadores02.jpg rename to images/condensadores02.jpg diff --git a/public_html/images/condensadores03.gif b/images/condensadores03.gif similarity index 100% rename from public_html/images/condensadores03.gif rename to images/condensadores03.gif diff --git a/public_html/images/img01.jpg b/images/img01.jpg similarity index 100% rename from public_html/images/img01.jpg rename to images/img01.jpg diff --git a/public_html/images/pic01.jpg b/images/pic01.jpg similarity index 100% rename from public_html/images/pic01.jpg rename to images/pic01.jpg diff --git a/public_html/images/pic02.jpg b/images/pic02.jpg similarity index 100% rename from public_html/images/pic02.jpg rename to images/pic02.jpg diff --git a/public_html/images/pic03.jpg b/images/pic03.jpg similarity index 100% rename from public_html/images/pic03.jpg rename to images/pic03.jpg diff --git a/public_html/images/pic04.jpg b/images/pic04.jpg similarity index 100% rename from public_html/images/pic04.jpg rename to images/pic04.jpg diff --git a/public_html/images/pic05.jpg b/images/pic05.jpg similarity index 100% rename from public_html/images/pic05.jpg rename to images/pic05.jpg diff --git a/public_html/images/sahm.ico b/images/sahm.ico similarity index 100% rename from public_html/images/sahm.ico rename to images/sahm.ico diff --git a/public_html/images/sahm01.jpg b/images/sahm01.jpg similarity index 100% rename from public_html/images/sahm01.jpg rename to images/sahm01.jpg diff --git a/public_html/images/scet.ico b/images/scet.ico similarity index 100% rename from public_html/images/scet.ico rename to images/scet.ico diff --git a/public_html/images/scet01.jpg b/images/scet01.jpg similarity index 100% rename from public_html/images/scet01.jpg rename to images/scet01.jpg diff --git a/public_html/images/schematics.jpg b/images/schematics.jpg similarity index 100% rename from public_html/images/schematics.jpg rename to images/schematics.jpg diff --git a/public_html/images/symbols/Bobinas_01.png b/images/symbols/Bobinas_01.png similarity index 100% rename from public_html/images/symbols/Bobinas_01.png rename to images/symbols/Bobinas_01.png diff --git a/public_html/images/symbols/Bobinas_02.png b/images/symbols/Bobinas_02.png similarity index 100% rename from public_html/images/symbols/Bobinas_02.png rename to images/symbols/Bobinas_02.png diff --git a/public_html/images/symbols/Capasitance_formula.svg b/images/symbols/Capasitance_formula.svg similarity index 100% rename from public_html/images/symbols/Capasitance_formula.svg rename to images/symbols/Capasitance_formula.svg diff --git a/public_html/images/symbols/Circuito_LC.svg b/images/symbols/Circuito_LC.svg similarity index 97% rename from public_html/images/symbols/Circuito_LC.svg rename to images/symbols/Circuito_LC.svg index 262e578..dc71ac9 100644 --- a/public_html/images/symbols/Circuito_LC.svg +++ b/images/symbols/Circuito_LC.svg @@ -1,45 +1,45 @@ - - - - - - - - - - - - - - - - i - - - - - - L - - - - - - - C - - - + - v - - - - - - + + + + + + + + + + + + + + + + i + + + + + + L + + + + + + + C + + + + + v + - + + + + diff --git a/public_html/images/symbols/Circuito_RC_01.svg b/images/symbols/Circuito_RC_01.svg similarity index 100% rename from public_html/images/symbols/Circuito_RC_01.svg rename to images/symbols/Circuito_RC_01.svg diff --git a/public_html/images/symbols/Circuito_RC_02.svg b/images/symbols/Circuito_RC_02.svg similarity index 100% rename from public_html/images/symbols/Circuito_RC_02.svg rename to images/symbols/Circuito_RC_02.svg diff --git a/public_html/images/symbols/Circuito_RC_03.svg b/images/symbols/Circuito_RC_03.svg similarity index 100% rename from public_html/images/symbols/Circuito_RC_03.svg rename to images/symbols/Circuito_RC_03.svg diff --git a/public_html/images/symbols/Circuito_RLC_Serie.svg b/images/symbols/Circuito_RLC_Serie.svg similarity index 100% rename from public_html/images/symbols/Circuito_RLC_Serie.svg rename to images/symbols/Circuito_RLC_Serie.svg diff --git a/public_html/images/symbols/Circuito_RL_01.svg b/images/symbols/Circuito_RL_01.svg similarity index 100% rename from public_html/images/symbols/Circuito_RL_01.svg rename to images/symbols/Circuito_RL_01.svg diff --git a/public_html/images/symbols/Circuito_RL_02.svg b/images/symbols/Circuito_RL_02.svg similarity index 100% rename from public_html/images/symbols/Circuito_RL_02.svg rename to images/symbols/Circuito_RL_02.svg diff --git a/public_html/images/symbols/Circuito_RL_03.svg b/images/symbols/Circuito_RL_03.svg similarity index 100% rename from public_html/images/symbols/Circuito_RL_03.svg rename to images/symbols/Circuito_RL_03.svg diff --git a/public_html/images/symbols/Corriente_Alterna_01.png b/images/symbols/Corriente_Alterna_01.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_01.png rename to images/symbols/Corriente_Alterna_01.png diff --git a/public_html/images/symbols/Corriente_Alterna_02.png b/images/symbols/Corriente_Alterna_02.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_02.png rename to images/symbols/Corriente_Alterna_02.png diff --git a/public_html/images/symbols/Corriente_Alterna_03.png b/images/symbols/Corriente_Alterna_03.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_03.png rename to images/symbols/Corriente_Alterna_03.png diff --git a/public_html/images/symbols/Corriente_Alterna_04.png b/images/symbols/Corriente_Alterna_04.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_04.png rename to images/symbols/Corriente_Alterna_04.png diff --git a/public_html/images/symbols/Corriente_Alterna_05.png b/images/symbols/Corriente_Alterna_05.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_05.png rename to images/symbols/Corriente_Alterna_05.png diff --git a/public_html/images/symbols/Corriente_Alterna_06.png b/images/symbols/Corriente_Alterna_06.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_06.png rename to images/symbols/Corriente_Alterna_06.png diff --git a/public_html/images/symbols/Corriente_Alterna_07.png b/images/symbols/Corriente_Alterna_07.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_07.png rename to images/symbols/Corriente_Alterna_07.png diff --git a/public_html/images/symbols/Corriente_Alterna_08.png b/images/symbols/Corriente_Alterna_08.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_08.png rename to images/symbols/Corriente_Alterna_08.png diff --git a/public_html/images/symbols/Corriente_Alterna_09.png b/images/symbols/Corriente_Alterna_09.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_09.png rename to images/symbols/Corriente_Alterna_09.png diff --git a/public_html/images/symbols/Corriente_Alterna_10.png b/images/symbols/Corriente_Alterna_10.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_10.png rename to images/symbols/Corriente_Alterna_10.png diff --git a/public_html/images/symbols/Corriente_Alterna_11.png b/images/symbols/Corriente_Alterna_11.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_11.png rename to images/symbols/Corriente_Alterna_11.png diff --git a/public_html/images/symbols/Corriente_Alterna_12.png b/images/symbols/Corriente_Alterna_12.png similarity index 100% rename from public_html/images/symbols/Corriente_Alterna_12.png rename to images/symbols/Corriente_Alterna_12.png diff --git a/public_html/images/symbols/Corriente_RLC_Serie_01.svg b/images/symbols/Corriente_RLC_Serie_01.svg similarity index 100% rename from public_html/images/symbols/Corriente_RLC_Serie_01.svg rename to images/symbols/Corriente_RLC_Serie_01.svg diff --git a/public_html/images/symbols/Corriente_RLC_Serie_02.svg b/images/symbols/Corriente_RLC_Serie_02.svg similarity index 100% rename from public_html/images/symbols/Corriente_RLC_Serie_02.svg rename to images/symbols/Corriente_RLC_Serie_02.svg diff --git a/public_html/images/symbols/Corriente_RLC_Serie_03.svg b/images/symbols/Corriente_RLC_Serie_03.svg similarity index 100% rename from public_html/images/symbols/Corriente_RLC_Serie_03.svg rename to images/symbols/Corriente_RLC_Serie_03.svg diff --git a/public_html/images/symbols/Current_on_capasitor.svg b/images/symbols/Current_on_capasitor.svg similarity index 100% rename from public_html/images/symbols/Current_on_capasitor.svg rename to images/symbols/Current_on_capasitor.svg diff --git a/public_html/images/symbols/Discharging_capacitor.svg b/images/symbols/Discharging_capacitor.svg similarity index 100% rename from public_html/images/symbols/Discharging_capacitor.svg rename to images/symbols/Discharging_capacitor.svg diff --git a/public_html/images/symbols/Raices_RLC_01.svg b/images/symbols/Raices_RLC_01.svg similarity index 100% rename from public_html/images/symbols/Raices_RLC_01.svg rename to images/symbols/Raices_RLC_01.svg diff --git a/public_html/images/symbols/Raices_RLC_02.svg b/images/symbols/Raices_RLC_02.svg similarity index 100% rename from public_html/images/symbols/Raices_RLC_02.svg rename to images/symbols/Raices_RLC_02.svg diff --git a/public_html/images/symbols/Resonancia_Atenuacion_Serie.svg b/images/symbols/Resonancia_Atenuacion_Serie.svg similarity index 100% rename from public_html/images/symbols/Resonancia_Atenuacion_Serie.svg rename to images/symbols/Resonancia_Atenuacion_Serie.svg diff --git a/index.html b/index.html new file mode 100644 index 0000000..8b6c8fe --- /dev/null +++ b/index.html @@ -0,0 +1,229 @@ + + + + + + Wolfang Torres + + + + + + + + + + + + + + +
+
+ +
+
+
+
+

Datasheet

+
+
+
+
Description
+

+ A Mechatronics Engineer student and self-taught Freelancer Programmer, experienced in developing Administrative Software. You can also read my + Resume. +

+
+
+
+
+
Applications
+
    +
  • Python lover, both in Desktop and Server
  • +
  • Web enthusiat, HTML, CSS, XML, XSL...
  • +
  • Games Dev. for Haxeflixel, AS3 and the like
  • + +
    Features
    +
      +
    • Fast and eager learner
    • +
    • Dedicated to solve problems in elegant way
    • +
    • Works well in teams
    • +
    • Full familiarity with git, jenkins, and others DevOps
    • +
    +
+
+
Schematics
+ + schematics + +
+
+
+
+
Extras
+
    +
  • Electronics and Robotics, love to make stuff in my workshop
  • +
  • Linux PowerUser, and general Open-Source lover
  • +
  • Have my own dedicated WebServer! (refurbished old pc)
  • +
  • Very Experienced in Networking, Cisco Certified CCNA
  • +
+
+
+
+

Quick Reference Data

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterValue
NameWolfang Alfredo Torres González
Birth DateMay 25, 1995
LocationMaracaibo, Zulia, Venezuela
Time SettingsVET: UTC-4:30, Available anytime
LanguagesSpanish, English, Portuguese (learning)
Other Languages + Python, HaxeFlixel, MySQL, HTML, CSS, JavaScript, XML, XSLT, Django, Flask, Linux, Bluemix, Gnome, PostgreSQL, SQL Server, ActionScript 3, Java, C, C++/CLI, Flixel, Tkinter, GTK3+, Arduino, FreeCAD... +
+
+
+
+
+ + +
+
+ +
+
+
+
+

Log of Activities

+
+

+ + + +

SAHM
+ A minimalist and simple to use system for the creation and administration of medical records, developed in Python3 and MySQL. It allow medical staff without familiarity with computers to easily read and store the medical information of their patients + and print their indications. +

+
+ +
+

+ + + +

SCET
+ A nice looking tool to control the workings of any kind of workshop, it can control incoming products for repair an maintenance, which technicians works on them, with tools and resources are used and where are they stored, developed in Python3 and MySQL. +

+
+ +
+

+ + + +

Calabozo
+ A small flash game about being sad inside of a dungeon, build in a couple of days using AS3 and flixel. +

+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public_html/index.xml b/index.xml similarity index 100% rename from public_html/index.xml rename to index.xml diff --git a/public_html/index.html b/public_html/index.html index 8b6c8fe..7a01f06 100644 --- a/public_html/index.html +++ b/public_html/index.html @@ -22,7 +22,7 @@