diff --git a/.gitattributes b/.gitattributes
index f9c523b..462574c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,3 @@
public/** filter=lfs diff=lfs merge=lfs -text
+assets/js/pack.*.js.map filter=lfs diff=lfs merge=lfs -text
+assets/js/pack.*.js filter=lfs diff=lfs merge=lfs -text
diff --git a/_data/assets.json b/_data/assets.json
new file mode 100644
index 0000000..2c2a6cf
--- /dev/null
+++ b/_data/assets.json
@@ -0,0 +1,4 @@
+{
+ "assets/js/pack.js": "assets/js/pack.c42a6f683b2c0c0fa404.js",
+ "assets/js/pack.js.map": "assets/js/pack.c42a6f683b2c0c0fa404.js.map"
+}
\ No newline at end of file
diff --git a/_includes/pack.html b/_includes/pack.html
new file mode 100644
index 0000000..d9b0937
--- /dev/null
+++ b/_includes/pack.html
@@ -0,0 +1 @@
+
diff --git a/_layouts/default.html b/_layouts/default.html
index 6024ebd..bb4f868 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -9,7 +9,14 @@
-
+ {% comment %}
+ No tenemos forma de hashear SASS aún, por lo que renovamos la caché
+ aplicando la hora de compilación del sitio. Es importante que los
+ CSS se renueven cuando se regenera el sitio, porque pueden contener
+ variables dinámicas (como personalización de colores y tipografía) o
+ minificarse distinto dependiendo del contenido.
+ {% endcomment %}
+
{% comment %}
Webpack. La configuración se pasa por variables de entorno, en
@@ -18,14 +25,18 @@
{% endcomment %}
-
+ {% include_cached pack.html %}
{% comment %}
Agregar otras tipografías. Esto hace que las tipografías se carguen
lo más rápido posible y minimizar el tiempo en que se ven las del
navegador. En Firefox todavía no está soportado.
+
+ Fork Awesome lleva la hora de generación para poder renovarlo si
+ agregamos íconos nuevos, de lo contrario puede quedar cacheado para
+ siempre y les visitantes van a ver íconos rotos.
{% endcomment %}
- {% include_cached preload_font.html font='assets/fonts/forkawesome-webfont.woff2' %}
+ {% include_cached preload_font.html font='assets/fonts/forkawesome-webfont.woff2?{{ site.time }}' %}
diff --git a/assets/js/pack.c42a6f683b2c0c0fa404.js b/assets/js/pack.c42a6f683b2c0c0fa404.js
new file mode 100644
index 0000000..f906c94
--- /dev/null
+++ b/assets/js/pack.c42a6f683b2c0c0fa404.js
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:158461582f1b08e50d24e5d496e70bb87a61e2dc6a787af7c516e99e5e492c3d
+size 372197
diff --git a/assets/js/pack.c42a6f683b2c0c0fa404.js.map b/assets/js/pack.c42a6f683b2c0c0fa404.js.map
new file mode 100644
index 0000000..f51bb6c
--- /dev/null
+++ b/assets/js/pack.c42a6f683b2c0c0fa404.js.map
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4bb591a381a42d71c1b4912ecb93f69d11ad803a23f53aef3420a5aa9104ea87
+size 1520884
diff --git a/assets/js/pack.js b/assets/js/pack.js
deleted file mode 100644
index cbd17db..0000000
--- a/assets/js/pack.js
+++ /dev/null
@@ -1,90 +0,0 @@
-!function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=409)}([function(t,e,r){var n=r(2),i=r(13).f,o=r(15),s=r(16),a=r(90),u=r(119),c=r(58);t.exports=function(t,e){var r,l,f,h,p,d=t.target,y=t.global,g=t.stat;if(r=y?n:g?n[d]||a(d,{}):(n[d]||{}).prototype)for(l in e){if(h=e[l],f=t.noTargetGet?(p=i(r,l))&&p.value:r[l],!c(y?l:d+(g?".":"#")+l,t.forced)&&void 0!==f){if(typeof h==typeof f)continue;u(h,f)}(t.sham||f&&f.sham)&&o(h,"sham",!0),s(r,l,h,t)}}},function(t,e){t.exports=function(t){try{return!!t()}catch(t){return!0}}},function(t,e,r){(function(e){var r=function(t){return t&&t.Math==Math&&t};t.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof e&&e)||function(){return this}()||Function("return this")()}).call(this,r(88))},function(t,e){t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},function(t,e,r){var n=r(3);t.exports=function(t){if(!n(t))throw TypeError(String(t)+" is not an object");return t}},function(t,e,r){var n=r(1);t.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},function(t,e,r){var n=r(2),i=r(93),o=r(11),s=r(54),a=r(97),u=r(121),c=i("wks"),l=n.Symbol,f=u?l:l&&l.withoutSetter||s;t.exports=function(t){return o(c,t)||(a&&o(l,t)?c[t]=l[t]:c[t]=f("Symbol."+t)),c[t]}},function(t,e,r){var n=r(27),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},function(t,e,r){"use strict";var n,i=r(114),o=r(5),s=r(2),a=r(3),u=r(11),c=r(63),l=r(15),f=r(16),h=r(9).f,p=r(28),d=r(40),y=r(6),g=r(54),v=s.Int8Array,m=v&&v.prototype,b=s.Uint8ClampedArray,w=b&&b.prototype,x=v&&p(v),_=m&&p(m),E=Object.prototype,S=E.isPrototypeOf,T=y("toStringTag"),k=g("TYPED_ARRAY_TAG"),O=i&&!!d&&"Opera"!==c(s.opera),A=!1,R={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},L={BigInt64Array:8,BigUint64Array:8},P=function(t){if(!a(t))return!1;var e=c(t);return u(R,e)||u(L,e)};for(n in R)s[n]||(O=!1);if((!O||"function"!=typeof x||x===Function.prototype)&&(x=function(){throw TypeError("Incorrect invocation")},O))for(n in R)s[n]&&d(s[n],x);if((!O||!_||_===E)&&(_=x.prototype,O))for(n in R)s[n]&&d(s[n].prototype,_);if(O&&p(w)!==_&&d(w,_),o&&!u(_,T))for(n in A=!0,h(_,T,{get:function(){return a(this)?this[k]:void 0}}),R)s[n]&&l(s[n],k,n);t.exports={NATIVE_ARRAY_BUFFER_VIEWS:O,TYPED_ARRAY_TAG:A&&k,aTypedArray:function(t){if(P(t))return t;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(t){if(d){if(S.call(x,t))return t}else for(var e in R)if(u(R,n)){var r=s[e];if(r&&(t===r||S.call(r,t)))return t}throw TypeError("Target is not a typed array constructor")},exportTypedArrayMethod:function(t,e,r){if(o){if(r)for(var n in R){var i=s[n];i&&u(i.prototype,t)&&delete i.prototype[t]}_[t]&&!r||f(_,t,r?e:O&&m[t]||e)}},exportTypedArrayStaticMethod:function(t,e,r){var n,i;if(o){if(d){if(r)for(n in R)(i=s[n])&&u(i,t)&&delete i[t];if(x[t]&&!r)return;try{return f(x,t,r?e:O&&v[t]||e)}catch(t){}}for(n in R)!(i=s[n])||i[t]&&!r||f(i,t,e)}},isView:function(t){if(!a(t))return!1;var e=c(t);return"DataView"===e||u(R,e)||u(L,e)},isTypedArray:P,TypedArray:x,TypedArrayPrototype:_}},function(t,e,r){var n=r(5),i=r(117),o=r(4),s=r(29),a=Object.defineProperty;e.f=n?a:function(t,e,r){if(o(t),e=s(e,!0),o(r),i)try{return a(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported");return"value"in r&&(t[e]=r.value),t}},function(t,e,r){var n=r(14);t.exports=function(t){return Object(n(t))}},function(t,e){var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},function(t,e,r){var n=r(39),i=r(53),o=r(10),s=r(7),a=r(60),u=[].push,c=function(t){var e=1==t,r=2==t,c=3==t,l=4==t,f=6==t,h=7==t,p=5==t||f;return function(d,y,g,v){for(var m,b,w=o(d),x=i(w),_=n(y,g,3),E=s(x.length),S=0,T=v||a,k=e?T(d,E):r||h?T(d,0):void 0;E>S;S++)if((p||S in x)&&(b=_(m=x[S],S,w),t))if(e)k[S]=b;else if(b)switch(t){case 3:return!0;case 5:return m;case 6:return S;case 2:u.call(k,m)}else switch(t){case 4:return!1;case 7:u.call(k,m)}return f?-1:c||l?l:k}};t.exports={forEach:c(0),map:c(1),filter:c(2),some:c(3),every:c(4),find:c(5),findIndex:c(6),filterOut:c(7)}},function(t,e,r){var n=r(5),i=r(68),o=r(33),s=r(22),a=r(29),u=r(11),c=r(117),l=Object.getOwnPropertyDescriptor;e.f=n?l:function(t,e){if(t=s(t),e=a(e,!0),c)try{return l(t,e)}catch(t){}if(u(t,e))return o(!i.f.call(t,e),t[e])}},function(t,e){t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,r){var n=r(5),i=r(9),o=r(33);t.exports=n?function(t,e,r){return i.f(t,e,o(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n=r(2),i=r(15),o=r(11),s=r(90),a=r(91),u=r(17),c=u.get,l=u.enforce,f=String(String).split("String");(t.exports=function(t,e,r,a){var u,c=!!a&&!!a.unsafe,h=!!a&&!!a.enumerable,p=!!a&&!!a.noTargetGet;"function"==typeof r&&("string"!=typeof e||o(r,"name")||i(r,"name",e),(u=l(r)).source||(u.source=f.join("string"==typeof e?e:""))),t!==n?(c?!p&&t[e]&&(h=!0):delete t[e],h?t[e]=r:i(t,e,r)):h?t[e]=r:s(e,r)})(Function.prototype,"toString",(function(){return"function"==typeof this&&c(this).source||a(this)}))},function(t,e,r){var n,i,o,s=r(118),a=r(2),u=r(3),c=r(15),l=r(11),f=r(92),h=r(69),p=r(55),d=a.WeakMap;if(s){var y=f.state||(f.state=new d),g=y.get,v=y.has,m=y.set;n=function(t,e){return e.facade=t,m.call(y,t,e),e},i=function(t){return g.call(y,t)||{}},o=function(t){return v.call(y,t)}}else{var b=h("state");p[b]=!0,n=function(t,e){return e.facade=t,c(t,b,e),e},i=function(t){return l(t,b)?t[b]:{}},o=function(t){return l(t,b)}}t.exports={set:n,get:i,has:o,enforce:function(t){return o(t)?i(t):n(t,{})},getterFor:function(t){return function(e){var r;if(!u(e)||(r=i(e)).type!==t)throw TypeError("Incompatible receiver, "+t+" required");return r}}}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(String(t)+" is not a function");return t}},function(t,e,r){var n=r(56),i=r(11),o=r(124),s=r(9).f;t.exports=function(t){var e=n.Symbol||(n.Symbol={});i(e,t)||s(e,t,{value:o.f(t)})}},function(t,e,r){var n=r(5),i=r(1),o=r(11),s=Object.defineProperty,a={},u=function(t){throw t};t.exports=function(t,e){if(o(a,t))return a[t];e||(e={});var r=[][t],c=!!o(e,"ACCESSORS")&&e.ACCESSORS,l=o(e,0)?e[0]:u,f=o(e,1)?e[1]:void 0;return a[t]=!!r&&!i((function(){if(c&&!n)return!0;var t={length:-1};c?s(t,1,{enumerable:!0,get:u}):t[1]=1,r.call(t,l,f)}))}},function(t,e,r){"use strict";r.d(e,"a",(function(){return C})),r.d(e,"b",(function(){return F}));var n=function(){function t(t,e){this.eventTarget=t,this.eventName=e,this.unorderedBindings=new Set}return t.prototype.connect=function(){this.eventTarget.addEventListener(this.eventName,this,!1)},t.prototype.disconnect=function(){this.eventTarget.removeEventListener(this.eventName,this,!1)},t.prototype.bindingConnected=function(t){this.unorderedBindings.add(t)},t.prototype.bindingDisconnected=function(t){this.unorderedBindings.delete(t)},t.prototype.handleEvent=function(t){for(var e=function(t){if("immediatePropagationStopped"in t)return t;var e=t.stopImmediatePropagation;return Object.assign(t,{immediatePropagationStopped:!1,stopImmediatePropagation:function(){this.immediatePropagationStopped=!0,e.call(this)}})}(t),r=0,n=this.bindings;rn?1:0}))},enumerable:!0,configurable:!0}),t}();var i=function(){function t(t){this.application=t,this.eventListenerMaps=new Map,this.started=!1}return t.prototype.start=function(){this.started||(this.started=!0,this.eventListeners.forEach((function(t){return t.connect()})))},t.prototype.stop=function(){this.started&&(this.started=!1,this.eventListeners.forEach((function(t){return t.disconnect()})))},Object.defineProperty(t.prototype,"eventListeners",{get:function(){return Array.from(this.eventListenerMaps.values()).reduce((function(t,e){return t.concat(Array.from(e.values()))}),[])},enumerable:!0,configurable:!0}),t.prototype.bindingConnected=function(t){this.fetchEventListenerForBinding(t).bindingConnected(t)},t.prototype.bindingDisconnected=function(t){this.fetchEventListenerForBinding(t).bindingDisconnected(t)},t.prototype.handleError=function(t,e,r){void 0===r&&(r={}),this.application.handleError(t,"Error "+e,r)},t.prototype.fetchEventListenerForBinding=function(t){var e=t.eventTarget,r=t.eventName;return this.fetchEventListener(e,r)},t.prototype.fetchEventListener=function(t,e){var r=this.fetchEventListenerMapForEventTarget(t),n=r.get(e);return n||(n=this.createEventListener(t,e),r.set(e,n)),n},t.prototype.createEventListener=function(t,e){var r=new n(t,e);return this.started&&r.connect(),r},t.prototype.fetchEventListenerMapForEventTarget=function(t){var e=this.eventListenerMaps.get(t);return e||(e=new Map,this.eventListenerMaps.set(t,e)),e},t}(),o=/^((.+?)(@(window|document))?->)?(.+?)(#(.+))?$/;var s=function(){function t(t,e,r){this.element=t,this.index=e,this.eventTarget=r.eventTarget||t,this.eventName=r.eventName||function(t){var e=t.tagName.toLowerCase();if(e in a)return a[e](t)}(t)||u("missing event name"),this.identifier=r.identifier||u("missing identifier"),this.methodName=r.methodName||u("missing method name")}return t.forToken=function(t){return new this(t.element,t.index,(r=t.content,n=r.trim().match(o)||[],{eventTarget:(e=n[4],"window"==e?window:"document"==e?document:void 0),eventName:n[2],identifier:n[5],methodName:n[7]}));var e,r,n},t.prototype.toString=function(){var t=this.eventTargetName?"@"+this.eventTargetName:"";return""+this.eventName+t+"->"+this.identifier+"#"+this.methodName},Object.defineProperty(t.prototype,"eventTargetName",{get:function(){return(t=this.eventTarget)==window?"window":t==document?"document":void 0;var t},enumerable:!0,configurable:!0}),t}(),a={a:function(t){return"click"},button:function(t){return"click"},form:function(t){return"submit"},input:function(t){return"submit"==t.getAttribute("type")?"click":"change"},select:function(t){return"change"},textarea:function(t){return"change"}};function u(t){throw new Error(t)}var c=function(){function t(t,e){this.context=t,this.action=e}return Object.defineProperty(t.prototype,"index",{get:function(){return this.action.index},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"eventTarget",{get:function(){return this.action.eventTarget},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"identifier",{get:function(){return this.context.identifier},enumerable:!0,configurable:!0}),t.prototype.handleEvent=function(t){this.willBeInvokedByEvent(t)&&this.invokeWithEvent(t)},Object.defineProperty(t.prototype,"eventName",{get:function(){return this.action.eventName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"method",{get:function(){var t=this.controller[this.methodName];if("function"==typeof t)return t;throw new Error('Action "'+this.action+'" references undefined method "'+this.methodName+'"')},enumerable:!0,configurable:!0}),t.prototype.invokeWithEvent=function(t){try{this.method.call(this.controller,t)}catch(r){var e={identifier:this.identifier,controller:this.controller,element:this.element,index:this.index,event:t};this.context.handleError(r,'invoking action "'+this.action+'"',e)}},t.prototype.willBeInvokedByEvent=function(t){var e=t.target;return this.element===e||(!(e instanceof Element&&this.element.contains(e))||this.scope.containsElement(e))},Object.defineProperty(t.prototype,"controller",{get:function(){return this.context.controller},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"methodName",{get:function(){return this.action.methodName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"element",{get:function(){return this.scope.element},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"scope",{get:function(){return this.context.scope},enumerable:!0,configurable:!0}),t}(),l=function(){function t(t,e){var r=this;this.element=t,this.started=!1,this.delegate=e,this.elements=new Set,this.mutationObserver=new MutationObserver((function(t){return r.processMutations(t)}))}return t.prototype.start=function(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,childList:!0,subtree:!0}),this.refresh())},t.prototype.stop=function(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)},t.prototype.refresh=function(){if(this.started){for(var t=new Set(this.matchElementsInTree()),e=0,r=Array.from(this.elements);e0&&i[i.length-1])||6!==o[0]&&2!==o[0])){s=0;continue}if(3===o[0]&&(!i||o[1]>i[0]&&o[1]"+s+""+e+">"}},function(t,e,r){var n=r(1);t.exports=function(t){return n((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}))}},function(t,e){t.exports=!1},function(t,e){var r=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:r)(t)}},function(t,e,r){var n=r(11),i=r(10),o=r(69),s=r(99),a=o("IE_PROTO"),u=Object.prototype;t.exports=s?Object.getPrototypeOf:function(t){return t=i(t),n(t,a)?t[a]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?u:null}},function(t,e,r){var n=r(3);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e,r){var n=r(9).f,i=r(11),o=r(6)("toStringTag");t.exports=function(t,e,r){t&&!i(t=r?t:t.prototype,o)&&n(t,o,{configurable:!0,value:e})}},function(t,e,r){var n,i=r(4),o=r(98),s=r(95),a=r(55),u=r(122),c=r(89),l=r(69),f=l("IE_PROTO"),h=function(){},p=function(t){return"