diff --git a/README.md b/README.md new file mode 100644 index 0000000..e3513c6 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +## Commands + +recompile css +```sh +tailwindcss -i ./content/css/main.css -o ./content/css/mini.css --minify +``` + +build, serve and watch +```sh +cabal run site -- watch +``` diff --git a/content/css/custom.css b/content/css/custom.css new file mode 100644 index 0000000..385ce1b --- /dev/null +++ b/content/css/custom.css @@ -0,0 +1,34 @@ +.components-flex { + display: flex; + gap: 1.4em; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.components-grid { + display: grid; + grid-column-gap: 1.4em; + grid-template-columns: auto; + grid-template-rows: auto; + align-items: center; + justify-content: center; +} + +.image-grid { + display: grid; + grid-template-rows: auto; + display: grid; + grid-gap: 1em; + grid-template-rows: auto; + grid-template-columns: repeat( + auto-fit, + minmax(calc(var(--page-width) / 12), 1fr) + ); +} + +@media only screen and (min-width: 45em) { + .components-grid { + grid-template-columns: 3fr 9fr; + } +} diff --git a/content/css/default.css b/content/css/default.css new file mode 100644 index 0000000..381ff73 --- /dev/null +++ b/content/css/default.css @@ -0,0 +1,141 @@ +html { + font-size: 62.5%; +} + +body { + font-size: 1.6rem; + color: #000; +} + +header { + border-bottom: 0.2rem solid #000; +} + +nav { + text-align: right; +} + +nav a { + font-size: 1.8rem; + font-weight: bold; + color: black; + text-decoration: none; + text-transform: uppercase; +} + +footer { + margin-top: 3rem; + padding: 1.2rem 0; + border-top: 0.2rem solid #000; + font-size: 1.2rem; + color: #555; +} + +h1 { + font-size: 2.4rem; +} + +h2 { + font-size: 2rem; +} + +article .header { + font-size: 1.4rem; + font-style: italic; + color: #555; +} + +.logo a { + font-weight: bold; + color: #000; + text-decoration: none; +} + +@media (max-width: 319px) { + body { + width: 90%; + margin: 0; + padding: 0 5%; + } + header { + margin: 4.2rem 0; + } + nav { + margin: 0 auto 3rem; + text-align: center; + } + footer { + text-align: center; + } + .logo { + text-align: center; + margin: 1rem auto 3rem; + } + .logo a { + font-size: 2.4rem; + } + nav a { + display: block; + line-height: 1.6; + } +} + +@media (min-width: 320px) { + body { + width: 90%; + margin: 0; + padding: 0 5%; + } + header { + margin: 4.2rem 0; + } + nav { + margin: 0 auto 3rem; + text-align: center; + } + footer { + text-align: center; + } + .logo { + text-align: center; + margin: 1rem auto 3rem; + } + .logo a { + font-size: 2.4rem; + } + nav a { + display: inline; + margin: 0 0.6rem; + } +} + +@media (min-width: 640px) { + body { + width: 60rem; + margin: 0 auto; + padding: 0; + } + header { + margin: 0 0 3rem; + padding: 1.2rem 0; + } + nav { + margin: 0; + text-align: right; + } + nav a { + margin: 0 0 0 1.2rem; + display: inline; + } + footer { + text-align: right; + } + .logo { + margin: 0; + text-align: left; + } + .logo a { + float: left; + font-size: 1.8rem; + } +} diff --git a/content/css/main.css b/content/css/main.css new file mode 100644 index 0000000..3713c15 --- /dev/null +++ b/content/css/main.css @@ -0,0 +1,10 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@font-face { + /* Set in tailwindconfig */ + font-family: "jetbrains-mono"; + src: local("jetbrains-mono"), + url("/fonts/JetBrainsMono-Medium.woff2") format("woff2"); +} \ No newline at end of file diff --git a/content/css/mini.css b/content/css/mini.css new file mode 100644 index 0000000..803e5bf --- /dev/null +++ b/content/css/mini.css @@ -0,0 +1 @@ +/*! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:jetbrains-mono;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.left-0{left:0}.right-0{right:0}.z-10{z-index:10}.m-auto{margin:auto}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-auto{margin-left:auto;margin-right:auto}.ml-3{margin-left:.75rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.block{display:block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-16{height:4rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-96{height:24rem}.h-full{height:100%}.min-h-\[50vh\]{min-height:50vh}.w-48{width:12rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-auto{width:auto}.max-w-7xl{max-width:80rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.origin-top-right{transform-origin:top right}.scale-100{--tw-scale-x:1;--tw-scale-y:1}.scale-100,.scale-95{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.border{border-width:1px}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-3{padding-bottom:.75rem}.pr-2{padding-right:.5rem}.pt-2{padding-top:.5rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.italic{font-style:italic}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgb(0 0 0/var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity:0.05}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-75{transition-duration:75ms}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}@font-face{font-family:jetbrains-mono;src:local("jetbrains-mono"),url(/fonts/JetBrainsMono-Medium.woff2) format("woff2")}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.focus\:outline-none:focus{outline:2px solid #0000;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-inset:focus{--tw-ring-inset:inset}.focus\:ring-white:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255/var(--tw-ring-opacity))}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:ring-offset-gray-800:focus{--tw-ring-offset-color:#1f2937}@media (min-width:640px){.sm\:static{position:static}.sm\:inset-auto{inset:auto}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:ml-6{margin-left:1.5rem}.sm\:block{display:block}.sm\:hidden{display:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:items-stretch{align-items:stretch}.sm\:justify-start{justify-content:flex-start}.sm\:gap-8{gap:2rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pr-0{padding-right:0}}@media (min-width:768px){.md\:mx-24{margin-left:6rem;margin-right:6rem}.md\:gap-8{gap:2rem}}@media (min-width:1024px){.lg\:block{display:block}.lg\:hidden{display:none}.lg\:px-8{padding-left:2rem;padding-right:2rem}} \ No newline at end of file diff --git a/content/css/normalize.css b/content/css/normalize.css new file mode 100644 index 0000000..b0c1902 --- /dev/null +++ b/content/css/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} \ No newline at end of file diff --git a/content/css/terminal.css b/content/css/terminal.css new file mode 100644 index 0000000..b591704 --- /dev/null +++ b/content/css/terminal.css @@ -0,0 +1,994 @@ +:root { + --global-font-size: 20px; + --global-line-height: 1.6em; + --global-space: 12px; + --font-stack: "JetBrains Mono", Menlo, Monaco, Lucida Console, Liberation Mono, + DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, + serif; + --mono-font-stack: Menlo, Monaco, Lucida Console, Liberation Mono, + DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, + serif; + --background-color: #222225; + --page-width: 60em; + --font-color: #e8e9ed; + --invert-font-color: #222225; + --secondary-color: #a3abba; + --tertiary-color: #a3abba; + --primary-color: #62c4ff; + --error-color: #ff3c74; + --progress-bar-background: #3f3f44; + --progress-bar-fill: #62c4ff; + --code-bg-color: #3f3f44; + --input-style: solid; + --display-h1-decoration: none; +} + +* { + box-sizing: border-box; + text-rendering: geometricPrecision; +} + +*::-moz-selection { + background: var(--primary-color); + color: var(--invert-font-color); +} + +*::selection { + background: var(--primary-color); + color: var(--invert-font-color); +} + +body { + font-size: var(--global-font-size); + color: var(--font-color); + line-height: var(--global-line-height); + margin: 0; + font-family: var(--font-stack); + word-wrap: break-word; + background-color: var(--background-color); +} + +h1, +h2, +h3, +h4, +h5, +h6, +.logo { + line-height: var(--global-line-height); +} + +a { + cursor: pointer; + color: var(--primary-color); + text-decoration: none; +} + +a:hover { + background-color: var(--primary-color); + color: var(--invert-font-color); +} + +em { + font-size: var(--global-font-size); + font-style: italic; + font-family: var(--font-stack); + color: var(--font-color); +} + +blockquote, +code, +em, +strong { + line-height: var(--global-line-height); +} + +blockquote, +code, +footer, +h1, +h2, +h3, +h4, +h5, +h6, +header, +li, +ol, +p, +section, +ul, +.logo { + float: none; + margin: 0; + padding: 0; +} + +blockquote, +h1, +ol, +p, +ul, +.logo { + margin-top: calc(var(--global-space) * 2); + margin-bottom: calc(var(--global-space) * 2); +} + +h1, +.logo { + position: relative; + display: inline-block; + display: table-cell; + padding: calc(var(--global-space) * 2) 0 calc(var(--global-space) * 2); + margin: 0; + overflow: hidden; + font-weight: 600; +} + +h1::after { + content: "===================================================================================================="; + position: absolute; + bottom: 5px; + left: 0; + display: var(--display-h1-decoration); +} + +h1 + *, +.logo + * { + margin-top: 0; +} + +h2, +h3, +h4, +h5, +h6 { + position: relative; + margin-bottom: var(--global-line-height); + font-weight: 600; +} + +blockquote { + position: relative; + padding-left: calc(var(--global-space) * 2); + padding-left: 2ch; + overflow: hidden; +} + +blockquote::after { + content: ">\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>"; + white-space: pre; + position: absolute; + top: 0; + left: 0; + line-height: var(--global-line-height); + color: #9ca2ab; +} + +code { + font-weight: inherit; + background-color: var(--code-bg-color); + font-family: var(--mono-font-stack); +} + +code::after, +code::before { + content: "`"; + display: inline; +} + +pre code::after, +pre code::before { + content: ""; +} + +pre { + display: block; + word-break: break-all; + word-wrap: break-word; + color: var(--secondary-color); + background-color: var(--background-color); + border: 1px solid var(--secondary-color); + padding: var(--global-space); + white-space: pre-wrap; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; +} + +pre code { + overflow-x: scroll; + padding: 0; + margin: 0; + display: inline-block; + min-width: 100%; + font-family: var(--mono-font-stack); +} + +.terminal blockquote, +.terminal code, +.terminal h1, +.terminal h2, +.terminal h3, +.terminal h4, +.terminal h5, +.terminal h6, +.terminal strong, +.terminal .logo { + font-size: var(--global-font-size); + font-style: normal; + font-family: var(--font-stack); + color: var(--font-color); +} + +.terminal-prompt { + position: relative; + white-space: nowrap; +} + +.terminal-prompt::before { + content: "> "; +} + +.terminal-prompt::after { + content: ""; + animation: cursor 1200ms infinite; + background: var(--primary-color); + border-radius: 0; + display: inline-block; + height: 1em; + margin-left: 0.2em; + width: 3px; + bottom: -2px; + position: relative; +} + +@-webkit-keyframes cursor { + 0% { + opacity: 0; + } + + 50% { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes cursor { + 0% { + opacity: 0; + } + + 50% { + opacity: 1; + } + + to { + opacity: 0; + } +} + +li, +li > ul > li { + position: relative; + display: block; + padding-left: calc(var(--global-space) * 2); +} + +nav > ul > li { + padding-left: 0; +} + +li::after { + position: absolute; + top: 0; + left: 0; +} + +ul > li::after { + content: "-"; +} + +nav ul > li::after { + content: ""; +} + +ol li::before { + content: counters(item, ".") ". "; + counter-increment: item; +} + +ol ol li::before { + content: counters(item, ".") " "; + counter-increment: item; +} + +.terminal-menu li::after, +.terminal-menu li::before { + display: none; +} + +ol { + counter-reset: item; +} + +ol li:nth-child(n+10)::after { + left: -7px; +} + +ol ol { + margin-top: 0; + margin-bottom: 0; +} + +.terminal-menu { + width: 100%; +} + +.terminal-nav { + display: flex; + flex-direction: column; + align-items: flex-start; +} + +ul ul { + margin-top: 0; + margin-bottom: 0; +} + +.terminal-menu ul { + list-style-type: none; + padding: 0 !important; + display: flex; + flex-direction: column; + width: 100%; + flex-grow: 1; + font-size: var(--global-font-size); + margin-top: 0; +} + +.terminal-menu li { + display: flex; + margin: 0 0 0.5em 0; + padding: 0; +} + +ol.terminal-toc li { + border-bottom: 1px dotted var(--secondary-color); + padding: 0; + margin-bottom: 15px; +} + +.terminal-menu li:last-child { + margin-bottom: 0; +} + +ol.terminal-toc li a { + margin: 4px 4px 4px 0; + background: var(--background-color); + position: relative; + top: 6px; + text-align: left; + padding-right: 4px; +} + +.terminal-menu li a:not(.btn) { + text-decoration: none; + display: block; + width: 100%; + border: none; + color: var(--secondary-color); +} + +.terminal-menu li a.active { + color: var(--font-color); +} + +.terminal-menu li a:hover { + background: none; + color: inherit; +} + +ol.terminal-toc li::before { + content: counters(item, ".") ". "; + counter-increment: item; + position: absolute; + right: 0; + background: var(--background-color); + padding: 4px 0 4px 4px; + bottom: -8px; +} + +ol.terminal-toc li a:hover { + background: var(--primary-color); + color: var(--invert-font-color); +} + +hr { + position: relative; + overflow: hidden; + margin: calc(var(--global-space) * 4) 0; + border: 0; + border-bottom: 1px dashed var(--secondary-color); +} + +p { + margin: 0 0 var(--global-line-height); + color: var(--global-font-color); +} + +.container { + max-width: var(--page-width); +} + +.container, +.container-fluid { + margin: 0 auto; + padding: 0 calc(var(--global-space) * 2); +} + +img { + width: 100%; +} + +.progress-bar { + height: 8px; + background-color: var(--progress-bar-background); + margin: 12px 0; +} + +.progress-bar.progress-bar-show-percent { + margin-top: 38px; +} + +.progress-bar-filled { + background-color: var(--progress-bar-fill); + height: 100%; + transition: width 0.3s ease; + position: relative; + width: 0; +} + +.progress-bar-filled::before { + content: ""; + border: 6px solid transparent; + border-top-color: var(--progress-bar-fill); + position: absolute; + top: -12px; + right: -6px; +} + +.progress-bar-filled::after { + color: var(--progress-bar-fill); + content: attr(data-filled); + display: block; + font-size: 12px; + white-space: nowrap; + position: absolute; + border: 6px solid transparent; + top: -38px; + right: 0; + -ms-transform: translateX(50%); + transform: translateX(50%); +} + +.progress-bar-no-arrow > .progress-bar-filled::before, +.progress-bar-no-arrow > .progress-bar-filled::after { + content: ""; + display: none; + visibility: hidden; + opacity: 0; +} + +table { + width: 100%; + border-collapse: collapse; + margin: var(--global-line-height) 0; + color: var(--font-color); + font-size: var(--global-font-size); +} + +table td, +table th { + vertical-align: top; + border: 1px solid var(--font-color); + line-height: var(--global-line-height); + padding: calc(var(--global-space) / 2); + font-size: 1em; +} + +table thead th { + font-size: 1em; +} + +table tfoot tr th { + font-weight: 500; +} + +table caption { + font-size: 1em; + margin: 0 0 1em 0; +} + +table tbody td:first-child { + font-weight: 700; + color: var(--secondary-color); +} + +.form { + width: 100%; +} + +fieldset { + border: 1px solid var(--font-color); + padding: 1em; +} + +label { + font-size: 1em; + color: var(--font-color); +} + +input[type="email"], +input[type="text"], +input[type="number"], +input[type="password"], +input[type="search"] { + border: 1px var(--input-style) var(--font-color); + width: 100%; + padding: 0.7em 0.5em; + font-size: 1em; + font-family: var(--font-stack); + -webkit-appearance: none; + border-radius: 0; +} + +input[type="email"]:active, +input[type="text"]:active, +input[type="number"]:active, +input[type="password"]:active, +input[type="search"]:active, +input[type="email"]:focus, +input[type="text"]:focus, +input[type="number"]:focus, +input[type="password"]:focus, +input[type="search"]:focus { + outline: none; + -webkit-appearance: none; + border: 1px solid var(--font-color); +} + +input[type="text"]:not(:placeholder-shown):invalid, +input[type="email"]:not(:placeholder-shown):invalid, +input[type="password"]:not(:placeholder-shown):invalid, +input[type="search"]:not(:placeholder-shown):invalid, +input[type="number"]:not(:placeholder-shown):invalid { + border-color: var(--error-color); +} + +input, +textarea { + color: var(--font-color); + background-color: var(--background-color); +} + +input::placeholder, +textarea::placeholder { + color: var(--secondary-color) !important; + opacity: 1; +} + +textarea { + height: auto; + width: 100%; + resize: none; + border: 1px var(--input-style) var(--font-color); + padding: 0.5em; + font-size: 1em; + font-family: var(--font-stack); + -webkit-appearance: none; + border-radius: 0; +} + +textarea:focus { + outline: none; + -webkit-appearance: none; + border: 1px solid var(--font-color); +} + +textarea:not(:placeholder-shown):invalid { + border-color: var(--error-color); +} + +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus textarea:-webkit-autofill, +textarea:-webkit-autofill:hover textarea:-webkit-autofill:focus, +select:-webkit-autofill, +select:-webkit-autofill:hover, +select:-webkit-autofill:focus { + border: 1px solid var(--font-color); + -webkit-text-fill-color: var(--font-color); + box-shadow: 0 0 0 1000px var(--invert-font-color) inset; + -webkit-box-shadow: 0 0 0 1000px var(--invert-font-color) inset; + transition: background-color 5000s ease-in-out 0s; +} + +.form-group { + margin-bottom: var(--global-line-height); + overflow: auto; +} + +.btn { + border-style: solid; + border-width: 1px; + display: -ms-inline-flexbox; + display: inline-flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + cursor: pointer; + outline: none; + padding: 0.65em 2em; + font-size: 1em; + font-family: inherit; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + position: relative; + z-index: 1; +} + +.btn:active { + box-shadow: none; +} + +.btn.btn-ghost { + border-color: var(--font-color); + color: var(--font-color); + background-color: transparent; +} + +.btn.btn-ghost:focus, +.btn.btn-ghost:hover { + border-color: var(--tertiary-color); + color: var(--tertiary-color); + z-index: 2; +} + +.btn.btn-ghost:hover { + background-color: transparent; +} + +.btn-block { + width: 100%; + display: -ms-flexbox; + display: flex; +} + +.btn-default { + background-color: var(--font-color); + border-color: var(--invert-font-color); + color: var(--invert-font-color); +} + +.btn-default:hover, +.btn-default:focus:not(.btn-ghost) { + background-color: var(--secondary-color); + color: var(--invert-font-color); +} + +.btn-default.btn-ghost:focus, +.btn-default.btn-ghost:hover { + border-color: var(--secondary-color); + color: var(--secondary-color); + z-index: 2; +} + +.btn-error { + color: var(--invert-font-color); + background-color: var(--error-color); + border: 1px solid var(--error-color); +} + +.btn-error:hover, +.btn-error:focus:not(.btn-ghost) { + background-color: var(--error-color); + border-color: var(--error-color); +} + +.btn-error.btn-ghost { + border-color: var(--error-color); + color: var(--error-color); +} + +.btn-error.btn-ghost:focus, +.btn-error.btn-ghost:hover { + border-color: var(--error-color); + color: var(--error-color); + z-index: 2; +} + +.btn-primary { + color: var(--invert-font-color); + background-color: var(--primary-color); + border: 1px solid var(--primary-color); +} + +.btn-primary:hover, +.btn-primary:focus:not(.btn-ghost) { + background-color: var(--primary-color); + border-color: var(--primary-color); +} + +.btn-primary.btn-ghost { + border-color: var(--primary-color); + color: var(--primary-color); +} + +.btn-primary.btn-ghost:focus, +.btn-primary.btn-ghost:hover { + border-color: var(--primary-color); + color: var(--primary-color); + z-index: 2; +} + +.btn-small { + padding: 0.5em 1.3em !important; + font-size: 0.9em !important; +} + +.btn-group { + overflow: auto; +} + +.btn-group .btn { + float: left; +} + +.btn-group .btn-ghost:not(:first-child) { + margin-left: -1px; +} + +.terminal-card { + border: 1px solid var(--secondary-color); +} + +.terminal-card > header { + color: var(--invert-font-color); + text-align: center; + background-color: var(--secondary-color); + padding: 0.5em 0; +} + +.terminal-card > div:first-of-type { + padding: var(--global-space); +} + +.terminal-timeline { + position: relative; + padding-left: 70px; +} + +.terminal-timeline::before { + content: ' '; + background: var(--secondary-color); + display: inline-block; + position: absolute; + left: 35px; + width: 2px; + height: 100%; + z-index: 400; +} + +.terminal-timeline .terminal-card { + margin-bottom: 25px; +} + +.terminal-timeline .terminal-card::before { + content: ' '; + background: var(--invert-font-color); + border: 2px solid var(--secondary-color); + display: inline-block; + position: absolute; + margin-top: 25px; + left: 26px; + width: 15px; + height: 15px; + z-index: 400; +} + +.terminal-alert { + color: var(--font-color); + padding: 1em; + border: 1px solid var(--font-color); + margin-bottom: var(--global-space); +} + +.terminal-alert-error { + color: var(--error-color); + border-color: var(--error-color); +} + +.terminal-alert-primary { + color: var(--primary-color); + border-color: var(--primary-color); +} + +@media screen and (max-width: 960px) { + label { + display: block; + width: 100%; + } + + pre::-webkit-scrollbar { + height: 3px; + } +} + +@media screen and (max-width: 480px) { + form { + width: 100%; + } +} + +@media only screen and (min-width: 30em) { + .terminal-nav { + flex-direction: row; + align-items: center; + } + + .terminal-menu ul { + flex-direction: row; + justify-items: flex-end; + align-items: center; + justify-content: flex-end; + margin-top: calc(var(--global-space) * 2); + } + + .terminal-menu li { + margin: 0; + margin-right: 2em; + } + + .terminal-menu li:last-child { + margin-right: 0; + } +} + +.terminal-media:not(:last-child) { + margin-bottom: 1.25rem; +} + +.terminal-media-left { + padding-right: var(--global-space); +} + +.terminal-media-left, +.terminal-media-right { + display: table-cell; + vertical-align: top; +} + +.terminal-media-right { + padding-left: var(--global-space); +} + +.terminal-media-body { + display: table-cell; + vertical-align: top; +} + +.terminal-media-heading { + font-size: 1em; + font-weight: 700; +} + +.terminal-media-content { + margin-top: 0.3rem; +} + +.terminal-placeholder { + background-color: var(--secondary-color); + text-align: center; + color: var(--font-color); + font-size: 1rem; + border: 1px solid var(--secondary-color); +} + +figure > img { + padding: 0; +} + +.terminal-avatarholder { + width: calc(var(--global-space) * 5); + height: calc(var(--global-space) * 5); +} + +.terminal-avatarholder img { + padding: 0; +} + +figure { + margin: 0; +} + +figure > figcaption { + color: var(--secondary-color); + text-align: center; +} + +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: var(--block-background-color); + color: var(--font-color); +} + +.hljs-comment, +.hljs-quote { + color: var(--secondary-color); +} + +.hljs-variable { + color: var(--font-color); +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-built_in, +.hljs-name, +.hljs-tag { + color: var(--primary-color); +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-attribute, +.hljs-literal, +.hljs-template-tag, +.hljs-template-variable, +.hljs-type, +.hljs-addition { + color: var(--secondary-color); +} + +.hljs-string { + color: var(--secondary-color); +} + +.hljs-deletion, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-meta { + color: var(--primary-color); +} + +.hljs-doctag { + color: var(--secondary-color); +} + +.hljs-attr { + color: var(--primary-color); +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link { + color: var(--primary-color); +} + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/content/css/terminal.min.css b/content/css/terminal.min.css new file mode 100644 index 0000000..d92ba60 --- /dev/null +++ b/content/css/terminal.min.css @@ -0,0 +1 @@ +:root{--global-font-size:15px;--global-line-height:1.4em;--global-space:10px;--font-stack:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;--mono-font-stack:Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;--background-color:#fff;--page-width:60em;--font-color:#151515;--invert-font-color:#fff;--primary-color:#1a95e0;--secondary-color:#727578;--error-color:#d20962;--progress-bar-background:#727578;--progress-bar-fill:#151515;--code-bg-color:#e8eff2;--input-style:solid;--display-h1-decoration:none}*{box-sizing:border-box;text-rendering:geometricPrecision}::-moz-selection{background:var(--primary-color);color:var(--invert-font-color)}::selection{background:var(--primary-color);color:var(--invert-font-color)}body{font-size:var(--global-font-size);color:var(--font-color);line-height:var(--global-line-height);margin:0;font-family:var(--font-stack);word-wrap:break-word;background-color:var(--background-color)}.logo,h1,h2,h3,h4,h5,h6{line-height:var(--global-line-height)}a{cursor:pointer;color:var(--primary-color);text-decoration:none}a:hover{background-color:var(--primary-color);color:var(--invert-font-color)}em{font-size:var(--global-font-size);font-style:italic;font-family:var(--font-stack);color:var(--font-color)}blockquote,code,em,strong{line-height:var(--global-line-height)}.logo,blockquote,code,footer,h1,h2,h3,h4,h5,h6,header,li,ol,p,section,ul{float:none;margin:0;padding:0}.logo,blockquote,h1,ol,p,ul{margin-top:calc(var(--global-space) * 2);margin-bottom:calc(var(--global-space) * 2)}.logo,h1{position:relative;display:inline-block;display:table-cell;padding:calc(var(--global-space) * 2) 0 calc(var(--global-space) * 2);margin:0;overflow:hidden;font-weight:600}h1::after{content:"====================================================================================================";position:absolute;bottom:5px;left:0;display:var(--display-h1-decoration)}.logo+*,h1+*{margin-top:0}h2,h3,h4,h5,h6{position:relative;margin-bottom:var(--global-line-height);font-weight:600}blockquote{position:relative;padding-left:calc(var(--global-space) * 2);padding-left:2ch;overflow:hidden}blockquote::after{content:">\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>\A>";white-space:pre;position:absolute;top:0;left:0;line-height:var(--global-line-height);color:#9ca2ab}code{font-weight:inherit;background-color:var(--code-bg-color);font-family:var(--mono-font-stack)}code::after,code::before{content:"`";display:inline}pre code::after,pre code::before{content:""}pre{display:block;word-break:break-all;word-wrap:break-word;color:var(--secondary-color);background-color:var(--background-color);border:1px solid var(--secondary-color);padding:var(--global-space);white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap}pre code{overflow-x:scroll;padding:0;margin:0;display:inline-block;min-width:100%;font-family:var(--mono-font-stack)}.terminal .logo,.terminal blockquote,.terminal code,.terminal h1,.terminal h2,.terminal h3,.terminal h4,.terminal h5,.terminal h6,.terminal strong{font-size:var(--global-font-size);font-style:normal;font-family:var(--font-stack);color:var(--font-color)}.terminal-prompt{position:relative;white-space:nowrap}.terminal-prompt::before{content:"> "}.terminal-prompt::after{content:"";-webkit-animation:cursor .8s infinite;animation:cursor .8s infinite;background:var(--primary-color);border-radius:0;display:inline-block;height:1em;margin-left:.2em;width:3px;bottom:-2px;position:relative}@-webkit-keyframes cursor{0%{opacity:0}50%{opacity:1}to{opacity:0}}@keyframes cursor{0%{opacity:0}50%{opacity:1}to{opacity:0}}li,li>ul>li{position:relative;display:block;padding-left:calc(var(--global-space) * 2)}nav>ul>li{padding-left:0}li::after{position:absolute;top:0;left:0}ul>li::after{content:"-"}nav ul>li::after{content:""}ol li::before{content:counters(item, ".") ". ";counter-increment:item}ol ol li::before{content:counters(item, ".") " ";counter-increment:item}.terminal-menu li::after,.terminal-menu li::before{display:none}ol{counter-reset:item}ol li:nth-child(n+10)::after{left:-7px}ol ol{margin-top:0;margin-bottom:0}.terminal-menu{width:100%}.terminal-nav{display:flex;flex-direction:column;align-items:flex-start}ul ul{margin-top:0;margin-bottom:0}.terminal-menu ul{list-style-type:none;padding:0!important;display:flex;flex-direction:column;width:100%;flex-grow:1;font-size:var(--global-font-size);margin-top:0}.terminal-menu li{display:flex;margin:0 0 .5em 0;padding:0}ol.terminal-toc li{border-bottom:1px dotted var(--secondary-color);padding:0;margin-bottom:15px}.terminal-menu li:last-child{margin-bottom:0}ol.terminal-toc li a{margin:4px 4px 4px 0;background:var(--background-color);position:relative;top:6px;text-align:left;padding-right:4px}.terminal-menu li a:not(.btn){text-decoration:none;display:block;width:100%;border:none;color:var(--secondary-color)}.terminal-menu li a.active{color:var(--font-color)}.terminal-menu li a:hover{background:0 0;color:inherit}ol.terminal-toc li::before{content:counters(item, ".") ". ";counter-increment:item;position:absolute;right:0;background:var(--background-color);padding:4px 0 4px 4px;bottom:-8px}ol.terminal-toc li a:hover{background:var(--primary-color);color:var(--invert-font-color)}hr{position:relative;overflow:hidden;margin:calc(var(--global-space) * 4) 0;border:0;border-bottom:1px dashed var(--secondary-color)}p{margin:0 0 var(--global-line-height);color:var(--global-font-color)}.container{max-width:var(--page-width)}.container,.container-fluid{margin:0 auto;padding:0 calc(var(--global-space) * 2)}img{width:100%}.progress-bar{height:8px;background-color:var(--progress-bar-background);margin:12px 0}.progress-bar.progress-bar-show-percent{margin-top:38px}.progress-bar-filled{background-color:var(--progress-bar-fill);height:100%;transition:width .3s ease;position:relative;width:0}.progress-bar-filled::before{content:"";border:6px solid transparent;border-top-color:var(--progress-bar-fill);position:absolute;top:-12px;right:-6px}.progress-bar-filled::after{color:var(--progress-bar-fill);content:attr(data-filled);display:block;font-size:12px;white-space:nowrap;position:absolute;border:6px solid transparent;top:-38px;right:0;transform:translateX(50%)}.progress-bar-no-arrow>.progress-bar-filled::after,.progress-bar-no-arrow>.progress-bar-filled::before{content:"";display:none;visibility:hidden;opacity:0}table{width:100%;border-collapse:collapse;margin:var(--global-line-height) 0;color:var(--font-color);font-size:var(--global-font-size)}table td,table th{vertical-align:top;border:1px solid var(--font-color);line-height:var(--global-line-height);padding:calc(var(--global-space)/ 2);font-size:1em}table thead th{font-size:1em}table tfoot tr th{font-weight:500}table caption{font-size:1em;margin:0 0 1em 0}table tbody td:first-child{font-weight:700;color:var(--secondary-color)}.form{width:100%}fieldset{border:1px solid var(--font-color);padding:1em}label{font-size:1em;color:var(--font-color)}input[type=email],input[type=number],input[type=password],input[type=search],input[type=text]{border:1px var(--input-style) var(--font-color);width:100%;padding:.7em .5em;font-size:1em;font-family:var(--font-stack);-webkit-appearance:none;border-radius:0}input[type=email]:active,input[type=email]:focus,input[type=number]:active,input[type=number]:focus,input[type=password]:active,input[type=password]:focus,input[type=search]:active,input[type=search]:focus,input[type=text]:active,input[type=text]:focus{outline:0;-webkit-appearance:none;border:1px solid var(--font-color)}input[type=email]:not(:placeholder-shown):invalid,input[type=number]:not(:placeholder-shown):invalid,input[type=password]:not(:placeholder-shown):invalid,input[type=search]:not(:placeholder-shown):invalid,input[type=text]:not(:placeholder-shown):invalid{border-color:var(--error-color)}input,textarea{color:var(--font-color);background-color:var(--background-color)}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:var(--secondary-color)!important;opacity:1}input::-moz-placeholder,textarea::-moz-placeholder{color:var(--secondary-color)!important;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:var(--secondary-color)!important;opacity:1}input::-ms-input-placeholder,textarea::-ms-input-placeholder{color:var(--secondary-color)!important;opacity:1}input::placeholder,textarea::placeholder{color:var(--secondary-color)!important;opacity:1}textarea{height:auto;width:100%;resize:none;border:1px var(--input-style) var(--font-color);padding:.5em;font-size:1em;font-family:var(--font-stack);-webkit-appearance:none;border-radius:0}textarea:focus{outline:0;-webkit-appearance:none;border:1px solid var(--font-color)}textarea:not(:placeholder-shown):invalid{border-color:var(--error-color)}input:-webkit-autofill,input:-webkit-autofill:focus textarea:-webkit-autofill,input:-webkit-autofill:hover,select:-webkit-autofill,select:-webkit-autofill:focus,select:-webkit-autofill:hover,textarea:-webkit-autofill:hover textarea:-webkit-autofill:focus{border:1px solid var(--font-color);-webkit-text-fill-color:var(--font-color);box-shadow:0 0 0 1000px var(--invert-font-color) inset;-webkit-box-shadow:0 0 0 1000px var(--invert-font-color) inset;transition:background-color 5000s ease-in-out 0s}.form-group{margin-bottom:var(--global-line-height);overflow:auto}.btn{border-style:solid;border-width:1px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;outline:0;padding:.65em 2em;font-size:1em;font-family:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;z-index:1}.btn:active{box-shadow:none}.btn.btn-ghost{border-color:var(--font-color);color:var(--font-color);background-color:transparent}.btn.btn-ghost:focus,.btn.btn-ghost:hover{border-color:var(--tertiary-color);color:var(--tertiary-color);z-index:2}.btn.btn-ghost:hover{background-color:transparent}.btn-block{width:100%;display:flex}.btn-default{background-color:var(--font-color);border-color:var(--invert-font-color);color:var(--invert-font-color)}.btn-default:focus:not(.btn-ghost),.btn-default:hover{background-color:var(--secondary-color);color:var(--invert-font-color)}.btn-default.btn-ghost:focus,.btn-default.btn-ghost:hover{border-color:var(--secondary-color);color:var(--secondary-color);z-index:2}.btn-error{color:var(--invert-font-color);background-color:var(--error-color);border:1px solid var(--error-color)}.btn-error:focus:not(.btn-ghost),.btn-error:hover{background-color:var(--error-color);border-color:var(--error-color)}.btn-error.btn-ghost{border-color:var(--error-color);color:var(--error-color)}.btn-error.btn-ghost:focus,.btn-error.btn-ghost:hover{border-color:var(--error-color);color:var(--error-color);z-index:2}.btn-primary{color:var(--invert-font-color);background-color:var(--primary-color);border:1px solid var(--primary-color)}.btn-primary:focus:not(.btn-ghost),.btn-primary:hover{background-color:var(--primary-color);border-color:var(--primary-color)}.btn-primary.btn-ghost{border-color:var(--primary-color);color:var(--primary-color)}.btn-primary.btn-ghost:focus,.btn-primary.btn-ghost:hover{border-color:var(--primary-color);color:var(--primary-color);z-index:2}.btn-small{padding:.5em 1.3em!important;font-size:.9em!important}.btn-group{overflow:auto}.btn-group .btn{float:left}.btn-group .btn-ghost:not(:first-child){margin-left:-1px}.terminal-card{border:1px solid var(--secondary-color)}.terminal-card>header{color:var(--invert-font-color);text-align:center;background-color:var(--secondary-color);padding:.5em 0}.terminal-card>div:first-of-type{padding:var(--global-space)}.terminal-timeline{position:relative;padding-left:70px}.terminal-timeline::before{content:' ';background:var(--secondary-color);display:inline-block;position:absolute;left:35px;width:2px;height:100%;z-index:400}.terminal-timeline .terminal-card{margin-bottom:25px}.terminal-timeline .terminal-card::before{content:' ';background:var(--invert-font-color);border:2px solid var(--secondary-color);display:inline-block;position:absolute;margin-top:25px;left:26px;width:15px;height:15px;z-index:400}.terminal-alert{color:var(--font-color);padding:1em;border:1px solid var(--font-color);margin-bottom:var(--global-space)}.terminal-alert-error{color:var(--error-color);border-color:var(--error-color)}.terminal-alert-primary{color:var(--primary-color);border-color:var(--primary-color)}@media screen and (max-width:960px){label{display:block;width:100%}pre::-webkit-scrollbar{height:3px}}@media screen and (max-width:480px){form{width:100%}}@media only screen and (min-width:30em){.terminal-nav{flex-direction:row;align-items:center}.terminal-menu ul{flex-direction:row;justify-items:flex-end;align-items:center;justify-content:flex-end;margin-top:calc(var(--global-space) * 2)}.terminal-menu li{margin:0;margin-right:2em}.terminal-menu li:last-child{margin-right:0}}.terminal-media:not(:last-child){margin-bottom:1.25rem}.terminal-media-left{padding-right:var(--global-space)}.terminal-media-left,.terminal-media-right{display:table-cell;vertical-align:top}.terminal-media-right{padding-left:var(--global-space)}.terminal-media-body{display:table-cell;vertical-align:top}.terminal-media-heading{font-size:1em;font-weight:700}.terminal-media-content{margin-top:.3rem}.terminal-placeholder{background-color:var(--secondary-color);text-align:center;color:var(--font-color);font-size:1rem;border:1px solid var(--secondary-color)}figure>img{padding:0}.terminal-avatarholder{width:calc(var(--global-space) * 5);height:calc(var(--global-space) * 5)}.terminal-avatarholder img{padding:0}figure{margin:0}figure>figcaption{color:var(--secondary-color);text-align:center}.hljs{display:block;overflow-x:auto;padding:.5em;background:var(--block-background-color);color:var(--font-color)}.hljs-comment,.hljs-quote{color:var(--secondary-color)}.hljs-variable{color:var(--font-color)}.hljs-built_in,.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:var(--primary-color)}.hljs-addition,.hljs-attribute,.hljs-literal,.hljs-section,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type{color:var(--secondary-color)}.hljs-string{color:var(--secondary-color)}.hljs-deletion,.hljs-meta,.hljs-selector-attr,.hljs-selector-pseudo{color:var(--primary-color)}.hljs-doctag{color:var(--secondary-color)}.hljs-attr{color:var(--primary-color)}.hljs-bullet,.hljs-link,.hljs-symbol{color:var(--primary-color)}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/content/favicon.png b/content/favicon.png new file mode 100644 index 0000000..50c13fd Binary files /dev/null and b/content/favicon.png differ diff --git a/content/fonts/JetBrainsMono-Bold.woff2 b/content/fonts/JetBrainsMono-Bold.woff2 new file mode 100644 index 0000000..4917f43 Binary files /dev/null and b/content/fonts/JetBrainsMono-Bold.woff2 differ diff --git a/content/fonts/JetBrainsMono-BoldItalic.woff2 b/content/fonts/JetBrainsMono-BoldItalic.woff2 new file mode 100644 index 0000000..536d3f7 Binary files /dev/null and b/content/fonts/JetBrainsMono-BoldItalic.woff2 differ diff --git a/content/fonts/JetBrainsMono-ExtraBold.woff2 b/content/fonts/JetBrainsMono-ExtraBold.woff2 new file mode 100644 index 0000000..8f88c54 Binary files /dev/null and b/content/fonts/JetBrainsMono-ExtraBold.woff2 differ diff --git a/content/fonts/JetBrainsMono-ExtraBoldItalic.woff2 b/content/fonts/JetBrainsMono-ExtraBoldItalic.woff2 new file mode 100644 index 0000000..d1478ba Binary files /dev/null and b/content/fonts/JetBrainsMono-ExtraBoldItalic.woff2 differ diff --git a/content/fonts/JetBrainsMono-ExtraLight.woff2 b/content/fonts/JetBrainsMono-ExtraLight.woff2 new file mode 100644 index 0000000..b97239f Binary files /dev/null and b/content/fonts/JetBrainsMono-ExtraLight.woff2 differ diff --git a/content/fonts/JetBrainsMono-ExtraLightItalic.woff2 b/content/fonts/JetBrainsMono-ExtraLightItalic.woff2 new file mode 100644 index 0000000..be01aac Binary files /dev/null and b/content/fonts/JetBrainsMono-ExtraLightItalic.woff2 differ diff --git a/content/fonts/JetBrainsMono-Italic.woff2 b/content/fonts/JetBrainsMono-Italic.woff2 new file mode 100644 index 0000000..d60c270 Binary files /dev/null and b/content/fonts/JetBrainsMono-Italic.woff2 differ diff --git a/content/fonts/JetBrainsMono-Light.woff2 b/content/fonts/JetBrainsMono-Light.woff2 new file mode 100644 index 0000000..6538498 Binary files /dev/null and b/content/fonts/JetBrainsMono-Light.woff2 differ diff --git a/content/fonts/JetBrainsMono-LightItalic.woff2 b/content/fonts/JetBrainsMono-LightItalic.woff2 new file mode 100644 index 0000000..66ca3d2 Binary files /dev/null and b/content/fonts/JetBrainsMono-LightItalic.woff2 differ diff --git a/content/fonts/JetBrainsMono-Medium.woff2 b/content/fonts/JetBrainsMono-Medium.woff2 new file mode 100644 index 0000000..669d04c Binary files /dev/null and b/content/fonts/JetBrainsMono-Medium.woff2 differ diff --git a/content/fonts/JetBrainsMono-MediumItalic.woff2 b/content/fonts/JetBrainsMono-MediumItalic.woff2 new file mode 100644 index 0000000..80cfd15 Binary files /dev/null and b/content/fonts/JetBrainsMono-MediumItalic.woff2 differ diff --git a/content/fonts/JetBrainsMono-Regular.woff2 b/content/fonts/JetBrainsMono-Regular.woff2 new file mode 100644 index 0000000..40da427 Binary files /dev/null and b/content/fonts/JetBrainsMono-Regular.woff2 differ diff --git a/content/fonts/JetBrainsMono-SemiBold.woff2 b/content/fonts/JetBrainsMono-SemiBold.woff2 new file mode 100644 index 0000000..5ead7b0 Binary files /dev/null and b/content/fonts/JetBrainsMono-SemiBold.woff2 differ diff --git a/content/fonts/JetBrainsMono-SemiBoldItalic.woff2 b/content/fonts/JetBrainsMono-SemiBoldItalic.woff2 new file mode 100644 index 0000000..c5dd294 Binary files /dev/null and b/content/fonts/JetBrainsMono-SemiBoldItalic.woff2 differ diff --git a/content/fonts/JetBrainsMono-Thin.woff2 b/content/fonts/JetBrainsMono-Thin.woff2 new file mode 100644 index 0000000..17270e4 Binary files /dev/null and b/content/fonts/JetBrainsMono-Thin.woff2 differ diff --git a/content/fonts/JetBrainsMono-ThinItalic.woff2 b/content/fonts/JetBrainsMono-ThinItalic.woff2 new file mode 100644 index 0000000..a643215 Binary files /dev/null and b/content/fonts/JetBrainsMono-ThinItalic.woff2 differ diff --git a/content/images/haskell-logo.png b/content/images/haskell-logo.png new file mode 100644 index 0000000..97c0937 Binary files /dev/null and b/content/images/haskell-logo.png differ diff --git a/content/images/icons/github.svg b/content/images/icons/github.svg new file mode 100644 index 0000000..40e8178 --- /dev/null +++ b/content/images/icons/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/images/icons/linkedin.svg b/content/images/icons/linkedin.svg new file mode 100644 index 0000000..3b9cc05 --- /dev/null +++ b/content/images/icons/linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/images/icons/twitter.svg b/content/images/icons/twitter.svg new file mode 100644 index 0000000..a43d68d --- /dev/null +++ b/content/images/icons/twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/content/index.html b/content/index.html new file mode 100644 index 0000000..e69de29 diff --git a/content/posts/unpicking-aiken-air.md b/content/posts/unpicking-aiken-air.md new file mode 100644 index 0000000..435aa29 --- /dev/null +++ b/content/posts/unpicking-aiken-air.md @@ -0,0 +1,57 @@ +Aims: + +- Describe the pipeline, and components getting from aiken to uplc. + +## Air + +Aiken compiles aiken code to uplc via _air_: +Aiken Intermediate Representation. + +## Trace + +Running `aiken build`... + +The cli (See `aiken/src/cmd/mod.rs`) parses the command, +finds the context and calls `Project::build` (`crates/aiken-project/src/lib.rs`), +which in turn calls `Project::compile`. + +#### `Project::compile` + +1. Check dependencies are available _eg_ aiken stdlib. +2. Read source files. + 1. Walk over `./lib` and `./validators` and push aiken modules onto `Project.sources`. +3. Parse each source in sources: + 1. Generate a `ParsedModule` containing the `ast`, `docs`, _etc_. + The `ast` here is an `UntypedModule`, which contains untyped definitions. +4. Type check each parsed module. + 1. For each untyped module, create a `CheckedModule`. + This includes typed definitions. +5. `compile` forks into two depending on whether it's been called with `build` or `check`. +6. From `CheckModules` construct a `CodeGenerator` +7. Pass the generator to construct a new `Blueprints`. + 1. Blueprints finds validators from checked modules. + 2. From each it constructs a `Validator` with the constructor `Validator::from_checked_module` (which returns a vector of validators) + 1. Its here that the magic happens: The method `generator.generate(def)` is called, + where `def` is the typed validator(s). + This method outputs a `Program` which contains the UPLC. + 2. These are collected together. + 3. The rest is collecting and handling the errors and warnings and writing the blueprint. + + +#### `CodeGenerator::generate` + +1. Create a new `AirStack`. + + +#### `AirStack` + +Consists of: +1. An Id +2. A `Scope` +3. A vector of `Air` + +The Scope keeps track of ... [TODO] + +#### Air + +Air is a typed language... [TODO] diff --git a/content/scripts/nav.js b/content/scripts/nav.js new file mode 100644 index 0000000..83347fd --- /dev/null +++ b/content/scripts/nav.js @@ -0,0 +1,16 @@ +document.addEventListener('DOMContentLoaded', function () { + // Get all "navbar-burger" elements + var $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0); + // Check if there are any navbar burgers + if ($navbarBurgers.length > 0) { + // Add a click event on each of them + $navbarBurgers.forEach(function ($el) { + $el.addEventListener('click', function () { + // Get the "main-nav" element + var $target = document.getElementById('main-nav'); + // Toggle the class on "main-nav" + $target.classList.toggle('hidden'); + }); + }); + } +}); diff --git a/kompact-landing.cabal b/kompact-landing.cabal new file mode 100644 index 0000000..2245200 --- /dev/null +++ b/kompact-landing.cabal @@ -0,0 +1,12 @@ +name: example +version: 0.1.0.0 +build-type: Simple +cabal-version: >= 1.10 + +executable site + main-is: site.hs + build-depends: base == 4.* + , hakyll == 4.15.* + , hip == 1.5.* + ghc-options: -threaded -rtsopts -with-rtsopts=-N + default-language: Haskell2010 diff --git a/site.hs b/site.hs new file mode 100644 index 0000000..c6a48d7 --- /dev/null +++ b/site.hs @@ -0,0 +1,80 @@ +-------------------------------------------------------------------------------- +{-# LANGUAGE OverloadedStrings #-} +import Data.Monoid (mappend) +import Hakyll + + +-------------------------------------------------------------------------------- +main :: IO () +main = hakyll $ do + match "content/favicon.png" $ do + route rmContentPrefix + compile copyFileCompiler + + match "content/images/*" $ do + route rmContentPrefix + compile copyFileCompiler + + match "content/scripts/*" $ do + route rmContentPrefix + compile copyFileCompiler + + match "content/css/*" $ do + route rmContentPrefix + compile compressCssCompiler + + match "content/fonts/*" $ do + route rmContentPrefix + compile copyFileCompiler + + match (fromList ["content/about.rst", "content/contact.markdown"]) $ do + route $ setExtension "html" + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/default.html" defaultContext + >>= relativizeUrls + + match "content/posts/*" $ do + route $ setExtension "html" + compile $ pandocCompiler + >>= loadAndApplyTemplate "templates/post.html" postCtx + >>= loadAndApplyTemplate "templates/default.html" postCtx + >>= relativizeUrls + + create ["archive.html"] $ do + route idRoute + compile $ do + posts <- recentFirst =<< loadAll "content/posts/*" + let archiveCtx = + listField "posts" postCtx (return posts) `mappend` + constField "title" "Archives" `mappend` + defaultContext + + makeItem "" + >>= loadAndApplyTemplate "templates/archive.html" archiveCtx + >>= loadAndApplyTemplate "templates/default.html" archiveCtx + >>= relativizeUrls + + + match "content/index.html" $ do + route rmContentPrefix + compile $ do + posts <- recentFirst =<< loadAll "content/posts/*" + let indexCtx = + listField "posts" postCtx (return posts) `mappend` + defaultContext + + getResourceBody + >>= applyAsTemplate indexCtx + >>= loadAndApplyTemplate "templates/default.html" indexCtx + >>= relativizeUrls + + match "templates/*" $ compile templateBodyCompiler + + +-------------------------------------------------------------------------------- +postCtx :: Context String +postCtx = + dateField "date" "%B %e, %Y" `mappend` + defaultContext + +rmContentPrefix = gsubRoute "content/" (const "") diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..9c0ac9a --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,15 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./content/**/*.{html,js}", + "./templates/**/*.{html,js}", + ], + theme: { + extend: {}, + fontFamily: { + 'sans' : ['jetbrains-mono',], + } + }, + plugins: [], +} + diff --git a/templates/about.html b/templates/about.html new file mode 100644 index 0000000..8e04a7f --- /dev/null +++ b/templates/about.html @@ -0,0 +1,27 @@ +
+
+ # about +
+
+ Kompact.io is dapp dev house. + + Our focus: +
    +
  • + safety-first +
  • +
  • + fast turn around +
  • +
  • + integration support +
  • +
+
+ Our typical process: +
+ Idea -> Spec -> Impl -> Test -> Handover +
+
+
+
\ No newline at end of file diff --git a/templates/archive.html b/templates/archive.html new file mode 100644 index 0000000..80b148f --- /dev/null +++ b/templates/archive.html @@ -0,0 +1,2 @@ +Here you can find all my previous posts: +$partial("templates/post-list.html")$ \ No newline at end of file diff --git a/templates/contact.html b/templates/contact.html new file mode 100644 index 0000000..22454a3 --- /dev/null +++ b/templates/contact.html @@ -0,0 +1,11 @@ +
+
+ # contact +
+
+ Questions? We'll be happy to help answer any of your questions. Send us an email and we'll get back to you shortly. +
+
+ Reach us on : hello@kompact.io +
+
\ No newline at end of file diff --git a/templates/default.html b/templates/default.html new file mode 100644 index 0000000..26d03d6 --- /dev/null +++ b/templates/default.html @@ -0,0 +1,30 @@ + + + + + + + + + + + +
+
+ $partial("templates/nav.html")$ +
+ $partial("templates/hero.html")$ +
+ $partial("templates/services.html")$ +
+ $partial("templates/pricing.html")$ +
+ $partial("templates/contact.html")$ +
+ $partial("templates/footer.html")$ +
+ $body$ +
+ + + \ No newline at end of file diff --git a/templates/footer.html b/templates/footer.html new file mode 100644 index 0000000..14ed937 --- /dev/null +++ b/templates/footer.html @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/templates/hero.html b/templates/hero.html new file mode 100644 index 0000000..0d93db4 --- /dev/null +++ b/templates/hero.html @@ -0,0 +1,12 @@ +
+
+
+ ⟨K⟩ +
+
+
withKompact $ do
+
· · dapp <- lean dev
+
· · run dapp
+
+
+
\ No newline at end of file diff --git a/templates/nav.html b/templates/nav.html new file mode 100644 index 0000000..89bdcc6 --- /dev/null +++ b/templates/nav.html @@ -0,0 +1,26 @@ + \ No newline at end of file diff --git a/templates/post-list.html b/templates/post-list.html new file mode 100644 index 0000000..71cf1b9 --- /dev/null +++ b/templates/post-list.html @@ -0,0 +1,7 @@ + diff --git a/templates/post.html b/templates/post.html new file mode 100644 index 0000000..732149b --- /dev/null +++ b/templates/post.html @@ -0,0 +1,11 @@ +
+
+ Posted on $date$ + $if(author)$ + by $author$ + $endif$ +
+
+ $body$ +
+
diff --git a/templates/pricing.html b/templates/pricing.html new file mode 100644 index 0000000..16a1894 --- /dev/null +++ b/templates/pricing.html @@ -0,0 +1,46 @@ +
+
+ # pricing +
+
+ Plutus development has traditionally meant long development schedules, and expensive ( $ 25k+/mo FTE) engineers. + We can work with you at competitive rates in either deliverable or retainer based engagements. +
+
+
+
+ ## retainer +
+
+ Time-based +
+
+ Still figuring out your project scope? +
+
+ Need an extra pair of hands on an existing project? +
+
+ Then a retainer based engagement is for you. +
+
+
+
+ ## deliverable +
+
+ Output-based +
+
+ You know what you want and need help implementing it? +
+
+ We'll first produce a spec on how the dapp will operate technically. + This involves discussing different options and trade-offs on things from UX to validator complexity. +
+
+ Once settled we'll begin the implementation phase and finally integration phase. +
+
+
+
\ No newline at end of file diff --git a/templates/services.html b/templates/services.html new file mode 100644 index 0000000..c8ab761 --- /dev/null +++ b/templates/services.html @@ -0,0 +1,35 @@ +
+
+ # services +
+
+ We are cardano native dapp dev outfit focused on helping you going from 0 to launch ASAP. +
+ +
+
+
+ ## strategy +
+
+ We'll work with you to validate your concept, and translate it into an implementable Proof of Concept +
+
+
+
+ ## implementation +
+
+ Cook up appropriate Plutus validators to meet your needs +
+
+
+
+ ## deployment +
+
+ We facilitate integrating the on-chain aspects with the rest of your stack +
+
+
+
\ No newline at end of file diff --git a/templates/tailwind-nav-example.html b/templates/tailwind-nav-example.html new file mode 100644 index 0000000..b9ffa17 --- /dev/null +++ b/templates/tailwind-nav-example.html @@ -0,0 +1,89 @@ + \ No newline at end of file diff --git a/templates/terminal_default.html b/templates/terminal_default.html new file mode 100644 index 0000000..83d97b4 --- /dev/null +++ b/templates/terminal_default.html @@ -0,0 +1,126 @@ + + + + + + + + + + + $title$ + + + + + + + + + + + + + + + + + + + + + + +
+
+ + +
+
+ +
$body$
+ + + + +