diff --git a/404.html b/404.html new file mode 100644 index 0000000..c62b060 --- /dev/null +++ b/404.html @@ -0,0 +1,3 @@ + + mathias-aparicio +
Page not found :(
\ No newline at end of file diff --git a/about/index.html b/about/index.html new file mode 100644 index 0000000..f033ac2 --- /dev/null +++ b/about/index.html @@ -0,0 +1,4 @@ + + About + +
\ No newline at end of file diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000..79dad65 --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o \ No newline at end of file diff --git a/feather/sun.svg b/feather/sun.svg new file mode 100644 index 0000000..7f51b94 --- /dev/null +++ b/feather/sun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fonts.css b/fonts.css new file mode 100644 index 0000000..7172ab4 --- /dev/null +++ b/fonts.css @@ -0,0 +1 @@ +@font-face{font-family:"Jetbrains Mono";font-style:normal;font-weight:400;src:url("fonts/JetbrainsMono/JetBrainsMono-Regular.ttf"),local("ttf");font-display:swap}@font-face{font-family:"Jetbrains Mono";font-style:normal;font-weight:700;src:url("fonts/JetbrainsMono/JetBrainsMono-Bold.ttf"),local("ttf");font-display:swap}@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:400;src:url("fonts/SpaceGrotesk/SpaceGrotesk-Regular.ttf"),local("ttf");font-display:swap}@font-face{font-family:"Space Grotesk";font-style:normal;font-weight:700;src:url("fonts/SpaceGrotesk/SpaceGrotesk-Bold.ttf"),local("ttf");font-display:swap} \ No newline at end of file diff --git a/fonts/.gitkeep b/fonts/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/fonts/JetbrainsMono/JetBrainsMono-Bold.ttf b/fonts/JetbrainsMono/JetBrainsMono-Bold.ttf new file mode 100644 index 0000000..710c34b Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Bold.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-BoldItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-BoldItalic.ttf new file mode 100644 index 0000000..fdff00f Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-BoldItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ExtraBold.ttf b/fonts/JetbrainsMono/JetBrainsMono-ExtraBold.ttf new file mode 100644 index 0000000..eb94300 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ExtraBold.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ExtraBoldItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-ExtraBoldItalic.ttf new file mode 100644 index 0000000..b70b4e7 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ExtraBoldItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ExtraLight.ttf b/fonts/JetbrainsMono/JetBrainsMono-ExtraLight.ttf new file mode 100644 index 0000000..74efced Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ExtraLight.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ExtraLightItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-ExtraLightItalic.ttf new file mode 100644 index 0000000..1a9d2d3 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ExtraLightItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Italic.ttf b/fonts/JetbrainsMono/JetBrainsMono-Italic.ttf new file mode 100644 index 0000000..ffd5d77 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Italic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Light.ttf b/fonts/JetbrainsMono/JetBrainsMono-Light.ttf new file mode 100644 index 0000000..c0682f9 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Light.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-LightItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-LightItalic.ttf new file mode 100644 index 0000000..f20bac9 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-LightItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Medium.ttf b/fonts/JetbrainsMono/JetBrainsMono-Medium.ttf new file mode 100644 index 0000000..17ff945 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Medium.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-MediumItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-MediumItalic.ttf new file mode 100644 index 0000000..9b699bb Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-MediumItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Regular.ttf b/fonts/JetbrainsMono/JetBrainsMono-Regular.ttf new file mode 100644 index 0000000..9a5202e Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Regular.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-SemiBold.ttf b/fonts/JetbrainsMono/JetBrainsMono-SemiBold.ttf new file mode 100644 index 0000000..84b7795 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-SemiBold.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-SemiBoldItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-SemiBoldItalic.ttf new file mode 100644 index 0000000..ffa1f39 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-SemiBoldItalic.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-Thin.ttf b/fonts/JetbrainsMono/JetBrainsMono-Thin.ttf new file mode 100644 index 0000000..1317bfe Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-Thin.ttf differ diff --git a/fonts/JetbrainsMono/JetBrainsMono-ThinItalic.ttf b/fonts/JetbrainsMono/JetBrainsMono-ThinItalic.ttf new file mode 100644 index 0000000..bc72439 Binary files /dev/null and b/fonts/JetbrainsMono/JetBrainsMono-ThinItalic.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-Bold.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-Bold.ttf new file mode 100644 index 0000000..869a60f Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-Bold.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-Light.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-Light.ttf new file mode 100644 index 0000000..76a195f Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-Light.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-Medium.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-Medium.ttf new file mode 100644 index 0000000..667905f Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-Medium.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-Regular.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-Regular.ttf new file mode 100644 index 0000000..792fe1b Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-Regular.ttf differ diff --git a/fonts/SpaceGrotesk/SpaceGrotesk-SemiBold.ttf b/fonts/SpaceGrotesk/SpaceGrotesk-SemiBold.ttf new file mode 100644 index 0000000..0219302 Binary files /dev/null and b/fonts/SpaceGrotesk/SpaceGrotesk-SemiBold.ttf differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..5df49b2 --- /dev/null +++ b/index.html @@ -0,0 +1,3 @@ + + mathias-aparicio + \ No newline at end of file diff --git a/js/codeblock.js b/js/codeblock.js new file mode 100644 index 0000000..def68bc --- /dev/null +++ b/js/codeblock.js @@ -0,0 +1,103 @@ +const successIcon = ` + + `; +const errorIcon = ` + + `; +const copyIcon = ` + + `; + +// Function to change icons after copying +const changeIcon = (button, isSuccess) => { + button.innerHTML = isSuccess ? successIcon : errorIcon; + setTimeout(() => { + button.innerHTML = copyIcon; // Reset to copy icon + }, 2000); +}; + +// Function to get code text from tables, skipping line numbers +const getCodeFromTable = (codeBlock) => { + return [...codeBlock.querySelectorAll('tr')] + .map(row => row.querySelector('td:last-child')?.innerText ?? '') + .join(''); +}; + +// Function to get code text from non-table blocks +const getNonTableCode = (codeBlock) => { + return codeBlock.textContent.trim(); +}; + +document.addEventListener('DOMContentLoaded', function () { + // Select all `pre` elements containing `code` + + const observer = new IntersectionObserver((entries) => { + entries.forEach(entry => { + const pre = entry.target.parentNode; + const clipboardBtn = pre.querySelector('.clipboard-button'); + const label = pre.querySelector('.code-label'); + + if (clipboardBtn) { + // Adjust the position of the clipboard button when the `code` is not fully visible + clipboardBtn.style.right = entry.isIntersecting ? '5px' : `-${entry.boundingClientRect.right - pre.clientWidth + 5}px`; + } + + if (label) { + // Adjust the position of the label similarly + label.style.right = entry.isIntersecting ? '0px' : `-${entry.boundingClientRect.right - pre.clientWidth}px`; + } + }); + }, { + root: null, // observing relative to viewport + rootMargin: '0px', + threshold: 1.0 // Adjust this to control when the callback fires + }); + + document.querySelectorAll('pre code').forEach(codeBlock => { + const pre = codeBlock.parentNode; + pre.style.position = 'relative'; // Ensure parent `pre` can contain absolute elements + + // Create and append the copy button + const copyBtn = document.createElement('button'); + copyBtn.className = 'clipboard-button'; + copyBtn.innerHTML = copyIcon; + copyBtn.setAttribute('aria-label', 'Copy code to clipboard'); + pre.appendChild(copyBtn); + + // Attach event listener to copy button + copyBtn.addEventListener('click', async () => { + // Determine if the code is in a table or not + const isTable = codeBlock.querySelector('table'); + const codeToCopy = isTable ? getCodeFromTable(codeBlock) : getNonTableCode(codeBlock); + try { + await navigator.clipboard.writeText(codeToCopy); + changeIcon(copyBtn, true); // Show success icon + } catch (error) { + console.error('Failed to copy text: ', error); + changeIcon(copyBtn, false); // Show error icon + } + }); + + const langClass = codeBlock.className.match(/language-(\w+)/); + const lang = langClass ? langClass[1] : 'default'; + + // Create and append the label + const label = document.createElement('span'); + label.className = 'code-label label-' + lang; // Use the specific language class + label.textContent = lang.toUpperCase(); // Display the language as label + pre.appendChild(label); + + let ticking = false; + pre.addEventListener('scroll', () => { + if (!ticking) { + window.requestAnimationFrame(() => { + copyBtn.style.right = `-${pre.scrollLeft}px`; + label.style.right = `-${pre.scrollLeft}px`; + ticking = false; + }); + ticking = true; + } + }); + + }); +}); diff --git a/js/count.js b/js/count.js new file mode 100644 index 0000000..7c504bc --- /dev/null +++ b/js/count.js @@ -0,0 +1,270 @@ +// GoatCounter: https://www.goatcounter.com +// This file (and *only* this file) is released under the ISC license: +// https://opensource.org/licenses/ISC +;(function() { + 'use strict'; + + if (window.goatcounter && window.goatcounter.vars) // Compatibility with very old version; do not use. + window.goatcounter = window.goatcounter.vars + else + window.goatcounter = window.goatcounter || {} + + // Load settings from data-goatcounter-settings. + var s = document.querySelector('script[data-goatcounter]') + if (s && s.dataset.goatcounterSettings) { + try { var set = JSON.parse(s.dataset.goatcounterSettings) } + catch (err) { console.error('invalid JSON in data-goatcounter-settings: ' + err) } + for (var k in set) + if (['no_onload', 'no_events', 'allow_local', 'allow_frame', 'path', 'title', 'referrer', 'event'].indexOf(k) > -1) + window.goatcounter[k] = set[k] + } + + var enc = encodeURIComponent + + // Get all data we're going to send off to the counter endpoint. + var get_data = function(vars) { + var data = { + p: (vars.path === undefined ? goatcounter.path : vars.path), + r: (vars.referrer === undefined ? goatcounter.referrer : vars.referrer), + t: (vars.title === undefined ? goatcounter.title : vars.title), + e: !!(vars.event || goatcounter.event), + s: [window.screen.width, window.screen.height, (window.devicePixelRatio || 1)], + b: is_bot(), + q: location.search, + } + + var rcb, pcb, tcb // Save callbacks to apply later. + if (typeof(data.r) === 'function') rcb = data.r + if (typeof(data.t) === 'function') tcb = data.t + if (typeof(data.p) === 'function') pcb = data.p + + if (is_empty(data.r)) data.r = document.referrer + if (is_empty(data.t)) data.t = document.title + if (is_empty(data.p)) data.p = get_path() + + if (rcb) data.r = rcb(data.r) + if (tcb) data.t = tcb(data.t) + if (pcb) data.p = pcb(data.p) + return data + } + + // Check if a value is "empty" for the purpose of get_data(). + var is_empty = function(v) { return v === null || v === undefined || typeof(v) === 'function' } + + // See if this looks like a bot; there is some additional filtering on the + // backend, but these properties can't be fetched from there. + var is_bot = function() { + // Headless browsers are probably a bot. + var w = window, d = document + if (w.callPhantom || w._phantom || w.phantom) + return 150 + if (w.__nightmare) + return 151 + if (d.__selenium_unwrapped || d.__webdriver_evaluate || d.__driver_evaluate) + return 152 + if (navigator.webdriver) + return 153 + return 0 + } + + // Object to urlencoded string, starting with a ?. + var urlencode = function(obj) { + var p = [] + for (var k in obj) + if (obj[k] !== '' && obj[k] !== null && obj[k] !== undefined && obj[k] !== false) + p.push(enc(k) + '=' + enc(obj[k])) + return '?' + p.join('&') + } + + // Show a warning in the console. + var warn = function(msg) { + if (console && 'warn' in console) + console.warn('goatcounter: ' + msg) + } + + // Get the endpoint to send requests to. + var get_endpoint = function() { + var s = document.querySelector('script[data-goatcounter]') + if (s && s.dataset.goatcounter) + return s.dataset.goatcounter + return (goatcounter.endpoint || window.counter) // counter is for compat; don't use. + } + + // Get current path. + var get_path = function() { + var loc = location, + c = document.querySelector('link[rel="canonical"][href]') + if (c) { // May be relative or point to different domain. + var a = document.createElement('a') + a.href = c.href + if (a.hostname.replace(/^www\./, '') === location.hostname.replace(/^www\./, '')) + loc = a + } + return (loc.pathname + loc.search) || '/' + } + + // Run function after DOM is loaded. + var on_load = function(f) { + if (document.body === null) + document.addEventListener('DOMContentLoaded', function() { f() }, false) + else + f() + } + + // Filter some requests that we (probably) don't want to count. + goatcounter.filter = function() { + if ('visibilityState' in document && document.visibilityState === 'prerender') + return 'visibilityState' + if (!goatcounter.allow_frame && location !== parent.location) + return 'frame' + if (!goatcounter.allow_local && location.hostname.match(/(localhost$|^127\.|^10\.|^172\.(1[6-9]|2[0-9]|3[0-1])\.|^192\.168\.|^0\.0\.0\.0$)/)) + return 'localhost' + if (!goatcounter.allow_local && location.protocol === 'file:') + return 'localfile' + if (localStorage && localStorage.getItem('skipgc') === 't') + return 'disabled with #toggle-goatcounter' + return false + } + + // Get URL to send to GoatCounter. + window.goatcounter.url = function(vars) { + var data = get_data(vars || {}) + if (data.p === null) // null from user callback. + return + data.rnd = Math.random().toString(36).substr(2, 5) // Browsers don't always listen to Cache-Control. + + var endpoint = get_endpoint() + if (!endpoint) + return warn('no endpoint found') + + return endpoint + urlencode(data) + } + + // Count a hit. + window.goatcounter.count = function(vars) { + var f = goatcounter.filter() + if (f) + return warn('not counting because of: ' + f) + + var url = goatcounter.url(vars) + if (!url) + return warn('not counting because path callback returned null') + + var img = document.createElement('img') + img.src = url + img.style.position = 'absolute' // Affect layout less. + img.style.bottom = '0px' + img.style.width = '1px' + img.style.height = '1px' + img.loading = 'eager' + img.setAttribute('alt', '') + img.setAttribute('aria-hidden', 'true') + + var rm = function() { if (img && img.parentNode) img.parentNode.removeChild(img) } + img.addEventListener('load', rm, false) + document.body.appendChild(img) + } + + // Get a query parameter. + window.goatcounter.get_query = function(name) { + var s = location.search.substr(1).split('&') + for (var i = 0; i < s.length; i++) + if (s[i].toLowerCase().indexOf(name.toLowerCase() + '=') === 0) + return s[i].substr(name.length + 1) + } + + // Track click events. + window.goatcounter.bind_events = function() { + if (!document.querySelectorAll) // Just in case someone uses an ancient browser. + return + + var send = function(elem) { + return function() { + goatcounter.count({ + event: true, + path: (elem.dataset.goatcounterClick || elem.name || elem.id || ''), + title: (elem.dataset.goatcounterTitle || elem.title || (elem.innerHTML || '').substr(0, 200) || ''), + referrer: (elem.dataset.goatcounterReferrer || elem.dataset.goatcounterReferral || ''), + }) + } + } + + Array.prototype.slice.call(document.querySelectorAll("*[data-goatcounter-click]")).forEach(function(elem) { + if (elem.dataset.goatcounterBound) + return + var f = send(elem) + elem.addEventListener('click', f, false) + elem.addEventListener('auxclick', f, false) // Middle click. + elem.dataset.goatcounterBound = 'true' + }) + } + + // Add a "visitor counter" frame or image. + window.goatcounter.visit_count = function(opt) { + on_load(function() { + opt = opt || {} + opt.type = opt.type || 'html' + opt.append = opt.append || 'body' + opt.path = opt.path || get_path() + opt.attr = opt.attr || {width: '200', height: (opt.no_branding ? '60' : '80')} + + opt.attr['src'] = get_endpoint() + 'er/' + enc(opt.path) + '.' + enc(opt.type) + '?' + if (opt.no_branding) opt.attr['src'] += '&no_branding=1' + if (opt.style) opt.attr['src'] += '&style=' + enc(opt.style) + if (opt.start) opt.attr['src'] += '&start=' + enc(opt.start) + if (opt.end) opt.attr['src'] += '&end=' + enc(opt.end) + + var tag = {png: 'img', svg: 'img', html: 'iframe'}[opt.type] + if (!tag) + return warn('visit_count: unknown type: ' + opt.type) + + if (opt.type === 'html') { + opt.attr['frameborder'] = '0' + opt.attr['scrolling'] = 'no' + } + + var d = document.createElement(tag) + for (var k in opt.attr) + d.setAttribute(k, opt.attr[k]) + + var p = document.querySelector(opt.append) + if (!p) + return warn('visit_count: append not found: ' + opt.append) + p.appendChild(d) + }) + } + + // Make it easy to skip your own views. + if (location.hash === '#toggle-goatcounter') { + if (localStorage.getItem('skipgc') === 't') { + localStorage.removeItem('skipgc', 't') + alert('GoatCounter tracking is now ENABLED in this browser.') + } + else { + localStorage.setItem('skipgc', 't') + alert('GoatCounter tracking is now DISABLED in this browser until ' + location + ' is loaded again.') + } + } + + if (!goatcounter.no_onload) + on_load(function() { + // 1. Page is visible, count request. + // 2. Page is not yet visible; wait until it switches to 'visible' and count. + // See #487 + if (!('visibilityState' in document) || document.visibilityState === 'visible') + goatcounter.count() + else { + var f = function(e) { + if (document.visibilityState !== 'visible') + return + document.removeEventListener('visibilitychange', f) + goatcounter.count() + } + document.addEventListener('visibilitychange', f) + } + + if (!goatcounter.no_events) + goatcounter.bind_events() + }) +})(); + diff --git a/js/imamu.js b/js/imamu.js new file mode 100644 index 0000000..c317f48 --- /dev/null +++ b/js/imamu.js @@ -0,0 +1 @@ +!function(){"use strict";!function(t){var e=t.screen,n=e.width,r=e.height,a=t.navigator.language,i=t.location,o=t.localStorage,u=t.document,c=t.history,f=i.hostname,s=i.pathname,l=i.search,d=u.currentScript;if(d){var m="data-",h=d.getAttribute.bind(d),v=h(m+"website-id"),p=h(m+"host-url"),g="false"!==h(m+"auto-track"),y=h(m+"do-not-track"),b=h(m+"domains")||"",S=b.split(",").map((function(t){return t.trim()})),k=(p?p.replace(/\/$/,""):d.src.split("/").slice(0,-1).join("/"))+"/api/send",w=n+"x"+r,N=/data-umami-event-([\w-_]+)/,T=m+"umami-event",j=300,A=function(t,e,n){var r=t[e];return function(){for(var e=[],a=arguments.length;a--;)e[a]=arguments[a];return n.apply(null,e),r.apply(t,e)}},x=function(){return{website:v,hostname:f,screen:w,language:a,title:M,url:I,referrer:J}},E=function(){return o&&o.getItem("umami.disabled")||y&&function(){var e=t.doNotTrack,n=t.navigator,r=t.external,a="msTrackingProtectionEnabled",i=e||n.doNotTrack||n.msDoNotTrack||r&&a in r&&r[a]();return"1"==i||"yes"===i}()||b&&!S.includes(f)},O=function(t,e,n){n&&(J=I,(I=function(t){try{return new URL(t).pathname}catch(e){return t}}(n.toString()))!==J&&setTimeout(D,j))},L=function(t,e){if(void 0===e&&(e="event"),!E()){var n={"Content-Type":"application/json"};return void 0!==K&&(n["x-umami-cache"]=K),fetch(k,{method:"POST",body:JSON.stringify({type:e,payload:t}),headers:n}).then((function(t){return t.text()})).then((function(t){return K=t})).catch((function(){}))}},D=function(t,e){return L("string"==typeof t?Object.assign({},x(),{name:t,data:"object"==typeof e?e:void 0}):"object"==typeof t?t:"function"==typeof t?t(x()):x())};t.umami||(t.umami={track:D,identify:function(t){return L(Object.assign({},x(),{data:t}),"identify")}});var K,P,_,q,C,I=""+s+l,J=u.referrer,M=u.title;if(g&&!E()){c.pushState=A(c,"pushState",O),c.replaceState=A(c,"replaceState",O),C=function(t){var e=t.getAttribute.bind(t),n=e(T);if(n){var r={};return t.getAttributeNames().forEach((function(t){var n=t.match(N);n&&(r[n[1]]=e(t))})),D(n,r)}return Promise.resolve()},u.addEventListener("click",(function(t){var e=t.target,n="A"===e.tagName?e:function(t,e){for(var n=t,r=0;r title"))&&_.observe(q,{subtree:!0,characterData:!0,childList:!0});var R=function(){"complete"!==u.readyState||P||(D(),P=!0)};u.addEventListener("readystatechange",R,!0),R()}}}(window)}(); \ No newline at end of file diff --git a/js/main.js b/js/main.js new file mode 100644 index 0000000..e69de29 diff --git a/js/note.js b/js/note.js new file mode 100644 index 0000000..ec7a141 --- /dev/null +++ b/js/note.js @@ -0,0 +1,14 @@ +document.addEventListener('DOMContentLoaded', function() { + document.querySelectorAll('.note-toggle').forEach(function(toggleButton) { + var content = toggleButton.nextElementSibling; + var isHidden = content.style.display === 'none'; + toggleButton.setAttribute('aria-expanded', !isHidden); + + toggleButton.addEventListener('click', function() { + var expanded = this.getAttribute('aria-expanded') === 'true'; + this.setAttribute('aria-expanded', !expanded); + content.style.display = expanded ? 'none' : 'block'; + }); + }); +}); + diff --git a/js/themetoggle.js b/js/themetoggle.js new file mode 100644 index 0000000..79764a8 --- /dev/null +++ b/js/themetoggle.js @@ -0,0 +1,57 @@ +function setTheme(mode) { + localStorage.setItem("theme-storage", mode); +} + +// Functions needed for the theme toggle +// + +function toggleTheme() { + if (localStorage.getItem("theme-storage") === "light") { + setTheme("dark"); + updateItemToggleTheme(); + } else if (localStorage.getItem("theme-storage") === "dark") { + setTheme("light"); + updateItemToggleTheme(); + } +} + +function updateItemToggleTheme() { + let mode = getSavedTheme(); + + const darkModeStyle = document.getElementById("darkModeStyle"); + if (darkModeStyle) { + darkModeStyle.disabled = (mode === "light"); + } + + const sunIcon = document.getElementById("sun-icon"); + const moonIcon = document.getElementById("moon-icon"); + if (sunIcon && moonIcon) { + sunIcon.style.display = (mode === "dark") ? "inline-block" : "none"; + moonIcon.style.display = (mode === "light") ? "inline-block" : "none"; + } + + let htmlElement = document.querySelector("html"); + if (mode === "dark") { + htmlElement.classList.remove("light") + htmlElement.classList.add("dark") + } else if (mode === "light") { + htmlElement.classList.remove("dark") + htmlElement.classList.add("light") + } +} + +function getSavedTheme() { + let currentTheme = localStorage.getItem("theme-storage"); + if(!currentTheme) { + if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { + currentTheme = "dark"; + } else { + currentTheme = "light"; + } + } + + return currentTheme; +} + +// Update the toggle theme on page load +updateItemToggleTheme(); diff --git a/js/toc.js b/js/toc.js new file mode 100644 index 0000000..5521c18 --- /dev/null +++ b/js/toc.js @@ -0,0 +1,15 @@ +document.addEventListener('DOMContentLoaded', () => { + const tocTitle = document.querySelector('.toc-title'); + const tocList = document.querySelector('.toc-list'); + + if (tocTitle && tocList) { + const toggleToC = () => { + const isExpanded = tocList.style.display === 'block' || window.getComputedStyle(tocList).display === 'block'; + tocList.style.display = isExpanded ? 'none' : 'block'; + tocTitle.classList.toggle('expanded', !isExpanded); + }; + + tocTitle.addEventListener('click', toggleToC); + } +}); + diff --git a/main.css b/main.css new file mode 100644 index 0000000..298e317 --- /dev/null +++ b/main.css @@ -0,0 +1 @@ +.cards{display:grid;grid-template-rows:auto;gap:24px;padding:12px 0}@media all and (min-width: 640px){.cards{grid-template-columns:repeat(auto-fill, minmax(400px, 1fr))}}@media all and (max-width: 640px){.cards{grid-template-columns:repeat(auto-fill, 1fr)}}.card{min-height:100px;background:var(--bg-1);border:2px solid var(--border-color);border-radius:10px;overflow:hidden}.card-info{padding:0 24px 24px 24px}.card-title{margin-top:.7em}.card-image{border:unset;width:100%}.card-image-placeholder{height:12px;width:100%}.card-description{margin-top:.5em;overflow:hidden}@media all and (max-width: 720px){.cards{gap:18px}}:root{--code-font: "Courier New", monospace;--bg-primary: var(--bg-1);--text-color: var(--text-0);--label-color: #f0f0f0;--hightlight-color: #f0f0f0}:root.dark{--hightlight-color: #204e8a}.code-label{background:#333;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-js{background:#f7df1e;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-yaml{background:#f71e6a;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-shell{background:#4eaa25;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-json{background:#1e90ff;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-python{background:#3572a5;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-css{background:#264de4;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-go{background:#00add8;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-markdown{background:blue;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-rust{background:#ff4647;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-java{background:#f89820;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-csharp{background:#178600;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-ruby{background:#701516;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-swift{background:#f05138;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-php{background:#777bb4;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-typescript{background:#3178c6;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-scala{background:#c22d40;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-kotlin{background:#f18e33;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-lua{background:navy;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-perl{background:#0298c3;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-haskell{background:#5e5086;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-r{background:#198ce7;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-dart{background:#00d2b8;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-elixir{background:#6e4a7e;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-clojure{background:#5881d8;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-bash{background:#4eaa25;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}.label-default{background:#333;color:var(--label-color);border-radius:0 0 .25rem .25rem;font-size:12px;letter-spacing:.025rem;padding:.1rem .5rem;text-align:right;text-transform:uppercase;position:absolute;right:0;top:0;margin-top:.1rem}code{background-color:var(--bg-primary);padding:.1em .2em;border-radius:5px;border:1px solid var(--border-color);font-family:var(--code-font)}pre{background-color:var(--bg-primary) !important;border-radius:5px;border:1px solid var(--border-color);line-height:1.4;overflow-x:auto;padding:1em;position:relative}pre mark{background-color:var(--hightlight-color) !important;padding:0;border-radius:0px}pre code{background-color:rgba(0,0,0,0) !important;color:var(--text-color);font-size:100%;padding:0;border:none;font-family:var(--code-font)}pre code table{margin:0;border-collapse:collapse;font-family:var(--code-font)}pre code table mark{display:block;color:unset;padding:0;background-color:var(--hightlight-color) !important;filter:brightness(1.2)}pre code td,pre code th,pre code tr{padding:0;border-bottom:none;border:none}pre code tbody td:first-child{text-align:center;user-select:none;min-width:60px;border-right:none}pre code tbody tr:nth-child(even),pre code thead tr{background-color:unset}.clipboard-button,.clipboard-button svg{all:unset;cursor:pointer;position:absolute;bottom:5px;right:5px;z-index:10;background-color:rgba(0,0,0,0);border:none;fill:#ef5350;}.page-header{font-size:2.5em;line-height:100%;font-family:var(--header-font);margin:4rem 0px 1rem 0px}.centered-header{font-family:var(--header-font);position:absolute;top:40%;left:50%;transform:translate(-50%, -50%);text-align:center;font-size:4em}header{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;padding:1em 0}header .main{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:12px;font-size:1.5rem;margin-bottom:5px}header .social img,header #dark-mode-toggle img{width:16px;height:16px}header .socials{margin-bottom:10px;}#dark-mode-toggle{justify-content:center}.socials{flex-grow:0;display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:flex-end;gap:6px}.social{border-bottom:unset;background-image:unset;padding:2px}.social>img{border:unset;width:24px;height:24px}@media (max-width: 600px){header{flex-direction:column;align-items:center;padding:1em 0}header .main a{font-size:20px}}.meta{color:#999;display:flexbox;align-items:center;flex-wrap:wrap;}#dark-mode-toggle>img{display:none;width:15px;height:15px;border:unset}h1,h2,h3,h4,h5,h6{font-size:1.2rem;margin-top:2em}h1::before{color:var(--primary-color);content:"# "}h2::before{color:var(--primary-color);content:"## "}h3::before{color:var(--primary-color);content:"### "}h4::before{color:var(--primary-color);content:"#### "}h5::before{color:var(--primary-color);content:"##### "}h6::before{color:var(--primary-color);content:"###### "}img{border:3px solid #ececec;max-width:100%}figure{box-sizing:border-box;display:inline-block;margin:0;max-width:100%}figure img{max-height:500px}@media screen and (min-width: 600px){figure{padding:0 40px}}figure h4{font-size:1rem;margin:0;margin-bottom:1em}figure h4::before{content:"↳ "}svg{max-height:15px}.toc-container .toc-title{cursor:pointer;position:relative;padding-left:20px}.toc-container .toc-title:before{content:"▼";position:absolute;left:0;transition:transform .3s ease}.toc-container .toc-title:hover:before,.toc-container .toc-title.expanded:before{transform:rotate(180deg)}.toc-container .toc-list{display:none}:root{--note-header-bg: var(--bg-2);--note-header-color: var(--text-0);--note-content-bg: var(--bg-1)}.note-container{border-radius:4px;overflow:hidden;margin:1em 0;position:relative;border-left:3px solid var(--primary-color);font-family:var(--paragraph-font)}.note-toggle,.note-header{color:var(--note-header-color);background-color:var(--note-header-bg);padding:10px 25px;text-align:left;border:none;width:100%;position:relative;outline:none;font-size:1.2em;transition:background-color .3s ease}.note-toggle p,.note-header p{margin:0}.note-toggle .note-center,.note-header .note-center{text-align:center;padding-right:50px}.note-toggle .note-icon,.note-toggle .note-icon,.note-header .note-icon,.note-header .note-icon{padding-left:25px}.note-toggle{cursor:pointer;position:relative}.note-toggle::before{content:"▼";position:absolute;right:20px;top:50%;transform:translateY(-50%);}.note-toggle:hover,.note-toggle:focus{color:var(--note-header-color);background-color:var(--note-header-bg);outline:none}.note-content{padding:10px 20px;background-color:var(--note-content-bg)}.note-icon::before{content:"✎";color:var(--primary-color);position:absolute;left:20px;top:50%;transform:translateY(-50%)}summary:hover,summary:focus{color:var(--primary-color);background-color:var(--note-header-bg);outline:none;padding:10px}.primary-color{color:var(--primary-color)}.draft-label{color:var(--hover-color);text-decoration:none;padding:2px 4px;border-radius:4px;margin-left:6px;background-color:var(--primary-color)}::-moz-selection{background:var(--primary-color);color:var(--hover-color);text-shadow:none}::selection{background:var(--primary-color);color:var(--hover-color)}p{line-height:1.5}hr{border:0;border-top:3px solid var(--border-color);margin:1em 0}blockquote{border-left:3px solid var(--primary-color);color:#737373;margin:0;padding-left:1em}a{border-bottom:3px solid var(--primary-color);color:inherit;text-decoration:none;position:relative;z-index:1}a.zola-anchor{border-bottom:none}a:hover{background-color:var(--primary-color);color:var(--hover-color)}time{color:grey}.list>ul{margin:0;padding:1rem 0 0 0}.list-item{margin-bottom:30px;list-style-type:none}del{text-decoration-color:var(--primary-color);text-decoration-thickness:3px}@media all and (max-width: 640px){.post-header{display:grid;grid-template-rows:auto 1fr}.post-header h1{margin-top:0}.post-header h1 a{border-bottom:none}}@media all and (min-width: 640px){.post-header{display:grid;gap:1rem;grid-row-gap:1.5rem;grid-template-columns:auto 1fr}.post-header h1{margin:0;font-size:130%}.post-header h1 a{border-bottom:none}}#dark-mode-toggle{border-bottom:none}#dark-mode-toggle:hover{background-color:rgba(0,0,0,0)}.MathJax_Display,.MJXc-display,.MathJax_SVG_Display{overflow-x:auto;overflow-y:hidden}table{border-spacing:0;border-collapse:collapse}table th{padding:6px 13px;border:1px solid #dfe2e5;font-size:large}table td{padding:6px 13px;border:1px solid #dfe2e5}.tags ul{margin-left:0;padding-left:0}.tags li{list-style-type:none}.tags a{border-bottom:3px solid var(--primary-color);font-family:var(--text-font)}.tags a:hover{color:var(--hover_color);background-color:var(--primary-color)}.tags a::before{content:"🏷 ";display:inline;white-space:nowrap !important}:root{--border-color: var(--border-color);--text-font: "Jetbrains Mono";--header-font: "Space Grotesk", "Helvetica", sans-serif;--code-font: "Jetbrains Mono"}html{background-color:var(--bg-0);color:var(--text-0);font-family:var(--text-font);line-height:1.6em}.content{max-width:1000px;margin:0 auto;padding:0 24px;word-wrap:break-word}@media all and (min-width: 640px){html{font-size:16.5px}}@media all and (min-width: 720px){html{font-size:17px}}@media all and (min-width: 960px){html{font-size:18px}} \ No newline at end of file diff --git a/posts/index.html b/posts/index.html new file mode 100644 index 0000000..bf84d51 --- /dev/null +++ b/posts/index.html @@ -0,0 +1,4 @@ + + Posts + + \ No newline at end of file diff --git a/posts/tailwind-deno/index.html b/posts/tailwind-deno/index.html new file mode 100644 index 0000000..97b41bf --- /dev/null +++ b/posts/tailwind-deno/index.html @@ -0,0 +1,20 @@ + + Import custom fonts with Tailwind CSS fresh + +
Posted on :: Tags: ,

Prologue

I was working in a project that used deno as javascript runtime alongside fresh as web framework. And I couldn't find easly how to import a front.

Prerequisites

This post assumes you are working on a fresh project and use Tailwind CSS for styling library.

1. Find Your Font

To choose your font you can go to Google Fonts and search the one you want, for the sake of this tutorial we will be looking for the Fredoka font.

2. Get the Embed Code

Once you have chosen your font:

  • Click on the font.
  • Hit the Get font then Get embed code button
  • Navigate to the "Get embed code" section
  • Select @import.
  • Copy the @import url('https::/fonts/googleapis.com ... display=swap'); code snippets

3. Edit tailwind configuration

Open your tailwind.config.ts file and add the following:

import { type Config } from "tailwindcss";
+
+export default {
+  content: [
+    "{routes,islands,components}/**/*.{ts,tsx}",
+  ],
+  theme: {
+    extend: {
+      fontFamily: {
+        'fredoka': ['"Fredoka"', 'sans-serif'],
+      },
+    },
+  },
+  plugins: [],
+} satisfies Config;
+

4. Import the Font

Finally, open your styles.css file and add the following line:

@import url('https://fonts.googleapis.com/css2?family=Fredoka&display=swap');
+

Conclusion

You now can add your font to you tsx 🚀!

\ No newline at end of file diff --git a/projects/index.html b/projects/index.html new file mode 100644 index 0000000..91ea193 --- /dev/null +++ b/projects/index.html @@ -0,0 +1,4 @@ + + Projects + +

Simple preavis

Un template typst pour créer des lettres de préavis
\ No newline at end of file diff --git a/projects/nemesis/index.html b/projects/nemesis/index.html new file mode 100644 index 0000000..e82d409 --- /dev/null +++ b/projects/nemesis/index.html @@ -0,0 +1,4 @@ + + Simple preavis + +
\ No newline at end of file diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..3d7e040 --- /dev/null +++ b/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Disallow: +Allow: / +Sitemap: https://mathias-aparicio.github.io/mathias-aparicio.fr/sitemap.xml diff --git a/search_index.en.js b/search_index.en.js new file mode 100644 index 0000000..4666822 --- /dev/null +++ b/search_index.en.js @@ -0,0 +1 @@ +window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"1":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1},"2":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1},"3":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1},"4":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.7320508075688772}},"df":1}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.7320508075688772}},"df":1}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":2.0}},"df":1}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.4142135623730951}},"df":1,"u":{"docs":{},"df":0,"r":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"i":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"o":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"=":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"b":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.7320508075688772}},"df":1}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}}}},"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":3.1622776601683795}},"df":1,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.7320508075688772}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.7320508075688772}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,"w":{"docs":{},"df":0,".":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":2.6457513110645907}},"df":1}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1,"c":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/":{"tf":1.0},"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/nemesis/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.4142135623730951},"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,",":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,",":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"}":{"docs":{},"df":0,"/":{"docs":{},"df":0,"*":{"docs":{},"df":0,"*":{"docs":{},"df":0,"/":{"docs":{},"df":0,"*":{"docs":{},"df":0,".":{"docs":{},"df":0,"{":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,",":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"x":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/nemesis/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.4142135623730951}},"df":1}}}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.7320508075688772}},"df":1,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}},"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"x":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"(":{"docs":{},"df":0,"'":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{},"df":0,"?":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"=":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,";":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"=":{"docs":{},"df":0,"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.4142135623730951}},"df":1}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"b":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"tf":1.0},"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.4142135623730951}},"df":2}}}}}},"title":{"root":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/nemesis/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/nemesis/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"tf":1.0}},"df":1}}}}}}}}}}},"documentStore":{"save":true,"docs":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/":{"body":"","id":"https://mathias-aparicio.github.io/mathias-aparicio.fr/","title":""},"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"body":"Hello my name is Mathias APARICIO and I am a french enginner student in computer student at Enseirb-matmeca. \nI am currently working toward building solid skills in rust.\nContact\nGithub: https://github.com/mathias-aparicio \nLinkedIn: https://www.linkedin.com/in/mathias-aparicio/ \n","id":"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/","title":"About"},"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/":{"body":"","id":"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/","title":"Posts"},"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"body":"Prologue\nI was working in a project that used deno as javascript runtime alongside fresh as web framework. And I couldn't find easly how to import a front.\nPrerequisites\nThis post assumes you are working on a fresh project and use Tailwind CSS for styling library. \n1. Find Your Font\nTo choose your font you can go to Google Fonts and search the one you want, for the sake of this tutorial we will be looking for the Fredoka font.\n2. Get the Embed Code\nOnce you have chosen your font:\n\nClick on the font.\nHit the Get font then Get embed code button\nNavigate to the \"Get embed code\" section\nSelect @import.\nCopy the @import url('https::/fonts/googleapis.com ... display=swap'); code snippets\n\n3. Edit tailwind configuration\nOpen your tailwind.config.ts file and add the following:\nimport { type Config } from \"tailwindcss\";\n\nexport default {\n content: [\n \"{routes,islands,components}/**/*.{ts,tsx}\",\n ],\n theme: {\n extend: {\n fontFamily: {\n 'fredoka': ['\"Fredoka\"', 'sans-serif'],\n },\n },\n },\n plugins: [],\n} satisfies Config;\n\n4. Import the Font\nFinally, open your styles.css file and add the following line:\n@import url('https://fonts.googleapis.com/css2?family=Fredoka&display=swap');\n\nConclusion\nYou now can add your font to you tsx 🚀!\n","id":"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/","title":"Import custom fonts with Tailwind CSS fresh"},"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/":{"body":"","id":"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/","title":"Projects"},"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/nemesis/":{"body":"","id":"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/nemesis/","title":"Simple preavis"}},"docInfo":{"https://mathias-aparicio.github.io/mathias-aparicio.fr/":{"body":0,"title":0},"https://mathias-aparicio.github.io/mathias-aparicio.fr/about/":{"body":25,"title":0},"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/":{"body":0,"title":1},"https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/":{"body":112,"title":6},"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/":{"body":0,"title":1},"https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/nemesis/":{"body":0,"title":2}},"length":6},"lang":"English"}; \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..301cce9 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,31 @@ + + + + https://mathias-aparicio.github.io/mathias-aparicio.fr/ + + + https://mathias-aparicio.github.io/mathias-aparicio.fr/about/ + + + https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/ + + + https://mathias-aparicio.github.io/mathias-aparicio.fr/posts/tailwind-deno/ + 2024-09-22 + + + https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/ + + + https://mathias-aparicio.github.io/mathias-aparicio.fr/projects/nemesis/ + + + https://mathias-aparicio.github.io/mathias-aparicio.fr/tags/ + + + https://mathias-aparicio.github.io/mathias-aparicio.fr/tags/deno/ + + + https://mathias-aparicio.github.io/mathias-aparicio.fr/tags/tailwind/ + + diff --git a/social_icons/LICENSE b/social_icons/LICENSE new file mode 100644 index 0000000..993facc --- /dev/null +++ b/social_icons/LICENSE @@ -0,0 +1 @@ +All icons in this directory are downloaded from [FontAwesome](https://fontawesome.com/). They are part of the [free offer](https://fontawesome.com/license/free) and are licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). \ No newline at end of file diff --git a/social_icons/apple.svg b/social_icons/apple.svg new file mode 100644 index 0000000..d0532d5 --- /dev/null +++ b/social_icons/apple.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/bitcoin.svg b/social_icons/bitcoin.svg new file mode 100644 index 0000000..941d9b0 --- /dev/null +++ b/social_icons/bitcoin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/deviantart.svg b/social_icons/deviantart.svg new file mode 100644 index 0000000..7dbd0b6 --- /dev/null +++ b/social_icons/deviantart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/diaspora.svg b/social_icons/diaspora.svg new file mode 100644 index 0000000..55527b5 --- /dev/null +++ b/social_icons/diaspora.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/discord.svg b/social_icons/discord.svg new file mode 100644 index 0000000..f0dfeab --- /dev/null +++ b/social_icons/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/discourse.svg b/social_icons/discourse.svg new file mode 100644 index 0000000..343bea6 --- /dev/null +++ b/social_icons/discourse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/email.svg b/social_icons/email.svg new file mode 100644 index 0000000..85245e2 --- /dev/null +++ b/social_icons/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/ethereum.svg b/social_icons/ethereum.svg new file mode 100644 index 0000000..af202de --- /dev/null +++ b/social_icons/ethereum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/etsy.svg b/social_icons/etsy.svg new file mode 100644 index 0000000..ebc040a --- /dev/null +++ b/social_icons/etsy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/facebook.svg b/social_icons/facebook.svg new file mode 100644 index 0000000..0afaf7a --- /dev/null +++ b/social_icons/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/github.svg b/social_icons/github.svg new file mode 100644 index 0000000..e32807a --- /dev/null +++ b/social_icons/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/gitlab.svg b/social_icons/gitlab.svg new file mode 100644 index 0000000..b577d3f --- /dev/null +++ b/social_icons/gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/google.svg b/social_icons/google.svg new file mode 100644 index 0000000..b3776b0 --- /dev/null +++ b/social_icons/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/hacker-news.svg b/social_icons/hacker-news.svg new file mode 100644 index 0000000..23e3980 --- /dev/null +++ b/social_icons/hacker-news.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/instagram.svg b/social_icons/instagram.svg new file mode 100644 index 0000000..89f63c4 --- /dev/null +++ b/social_icons/instagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/linkedin.svg b/social_icons/linkedin.svg new file mode 100644 index 0000000..d54fcf5 --- /dev/null +++ b/social_icons/linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/mastodon.svg b/social_icons/mastodon.svg new file mode 100644 index 0000000..5e12f81 --- /dev/null +++ b/social_icons/mastodon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/matrix.svg b/social_icons/matrix.svg new file mode 100644 index 0000000..bc41720 --- /dev/null +++ b/social_icons/matrix.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/social_icons/paypal.svg b/social_icons/paypal.svg new file mode 100644 index 0000000..efdc81a --- /dev/null +++ b/social_icons/paypal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/pinterest.svg b/social_icons/pinterest.svg new file mode 100644 index 0000000..eb977c2 --- /dev/null +++ b/social_icons/pinterest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/quora.svg b/social_icons/quora.svg new file mode 100644 index 0000000..375d302 --- /dev/null +++ b/social_icons/quora.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/reddit.svg b/social_icons/reddit.svg new file mode 100644 index 0000000..a8a3a96 --- /dev/null +++ b/social_icons/reddit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/rss.svg b/social_icons/rss.svg new file mode 100644 index 0000000..b862886 --- /dev/null +++ b/social_icons/rss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/skype.svg b/social_icons/skype.svg new file mode 100644 index 0000000..3369aba --- /dev/null +++ b/social_icons/skype.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/slack.svg b/social_icons/slack.svg new file mode 100644 index 0000000..0dbc26d --- /dev/null +++ b/social_icons/slack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/snapchat.svg b/social_icons/snapchat.svg new file mode 100644 index 0000000..2cd79dd --- /dev/null +++ b/social_icons/snapchat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/soundcloud.svg b/social_icons/soundcloud.svg new file mode 100644 index 0000000..4724d74 --- /dev/null +++ b/social_icons/soundcloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/spotify.svg b/social_icons/spotify.svg new file mode 100644 index 0000000..1d393ba --- /dev/null +++ b/social_icons/spotify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/stack-exchange.svg b/social_icons/stack-exchange.svg new file mode 100644 index 0000000..0a3177f --- /dev/null +++ b/social_icons/stack-exchange.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/stack-overflow.svg b/social_icons/stack-overflow.svg new file mode 100644 index 0000000..2ca50c7 --- /dev/null +++ b/social_icons/stack-overflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/steam.svg b/social_icons/steam.svg new file mode 100644 index 0000000..b61f374 --- /dev/null +++ b/social_icons/steam.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/telegram.svg b/social_icons/telegram.svg new file mode 100644 index 0000000..02f48c0 --- /dev/null +++ b/social_icons/telegram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/twitter.svg b/social_icons/twitter.svg new file mode 100644 index 0000000..0778f72 --- /dev/null +++ b/social_icons/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/vimeo.svg b/social_icons/vimeo.svg new file mode 100644 index 0000000..d98368e --- /dev/null +++ b/social_icons/vimeo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/whatsapp.svg b/social_icons/whatsapp.svg new file mode 100644 index 0000000..d259142 --- /dev/null +++ b/social_icons/whatsapp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/x-twitter.svg b/social_icons/x-twitter.svg new file mode 100644 index 0000000..f5feed7 --- /dev/null +++ b/social_icons/x-twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/social_icons/youtube.svg b/social_icons/youtube.svg new file mode 100644 index 0000000..287dca2 --- /dev/null +++ b/social_icons/youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tags/deno/index.html b/tags/deno/index.html new file mode 100644 index 0000000..0ffaf7e --- /dev/null +++ b/tags/deno/index.html @@ -0,0 +1,4 @@ + + mathias-aparicio + +
\ No newline at end of file diff --git a/tags/index.html b/tags/index.html new file mode 100644 index 0000000..e5a78e3 --- /dev/null +++ b/tags/index.html @@ -0,0 +1,4 @@ + + mathias-aparicio + + \ No newline at end of file diff --git a/tags/tailwind/index.html b/tags/tailwind/index.html new file mode 100644 index 0000000..b0c98d8 --- /dev/null +++ b/tags/tailwind/index.html @@ -0,0 +1,4 @@ + + mathias-aparicio + +
\ No newline at end of file diff --git a/theme/dark.css b/theme/dark.css new file mode 100644 index 0000000..a097fcd --- /dev/null +++ b/theme/dark.css @@ -0,0 +1 @@ +:root.dark{--text-0: #f0f0f0;--text-1: #ababab;--bg-0: #121212;--bg-1: #1f1f1f;--bg-2: #383838;--border-color: var(--bg-2);--primary-color: #ef5350;--hover-color: white}:root.dark .social>img{filter:invert(1)} \ No newline at end of file diff --git a/theme/light.css b/theme/light.css new file mode 100644 index 0000000..6174631 --- /dev/null +++ b/theme/light.css @@ -0,0 +1 @@ +:root.light{--text-0: #212121;--text-1: #666;--bg-0: #fff;--bg-1: #fafafa;--bg-2: #e6e6e6;--border-color: var(--bg-2);--primary-color: #ef5350;--hover-color: white}:root.light .social :hover{filter:invert(1)} \ No newline at end of file