diff --git a/404.html b/404.html index c94ca8ae..583d4205 100644 --- a/404.html +++ b/404.html @@ -1,74 +1,114 @@ - + - + 404 Page not found · Congo - + - - - + + - + - + - - + + -
+ +
+Skip to main content +
-Congo +Congo
-
+

Page Not Found 😕

Error 404

-
+

It seems that the page you've requested does not exist.

-
+
+ + diff --git a/css/compiled/main.min.51037225bb3c65887773b052da1e38f105db8f3d9aa6a34ba3c5c40c88fb309724f8cc5ed2871adc7e55dacab9b36c60ce7aa7a61dff2cc638f8b435c898d5a8.css b/css/compiled/main.min.51037225bb3c65887773b052da1e38f105db8f3d9aa6a34ba3c5c40c88fb309724f8cc5ed2871adc7e55dacab9b36c60ce7aa7a61dff2cc638f8b435c898d5a8.css deleted file mode 100644 index a06e6b1a..00000000 --- a/css/compiled/main.min.51037225bb3c65887773b052da1e38f105db8f3d9aa6a34ba3c5c40c88fb309724f8cc5ed2871adc7e55dacab9b36c60ce7aa7a61dff2cc638f8b435c898d5a8.css +++ /dev/null @@ -1 +0,0 @@ -/*!Congo v1.6.4 | MIT License | https://github.com/jpanther/congo*//*!tailwindcss v2.2.19 | MIT License | https://tailwindcss.com*//*!modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize*/*,::before,::after{box-sizing:border-box}html{-moz-tab-size:4;-o-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}body{font-family:system-ui,-apple-system,segoe ui,Roboto,Helvetica,Arial,sans-serif,apple color emoji,segoe ui emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,liberation mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}::-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:initial}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#a1a1aa}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#a1a1aa}input::placeholder,textarea::placeholder{opacity:1;color:#a1a1aa}button,[role=button]{cursor:pointer}:-moz-focusring{outline:auto}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}pre,code,kbd,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::before,::after{border-color:initial}.prose{color:var(--color-neutral-700);max-width:65ch}.prose [class~=lead]{color:#4b5563;font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:var(--color-primary-700);text-decoration:underline;font-weight:500;-webkit-text-decoration-color:var(--color-primary-300);text-decoration-color:var(--color-primary-300)}.prose a:hover{background-color:var(--color-primary-600);border-radius:.09rem;color:var(--color-neutral);text-decoration:none}.prose strong{color:var(--color-neutral-900);font-weight:600}.prose ol[type=A]{--list-counter-style:upper-alpha}.prose ol[type=a]{--list-counter-style:lower-alpha}.prose ol[type=As]{--list-counter-style:upper-alpha}.prose ol[type=as]{--list-counter-style:lower-alpha}.prose ol[type=I]{--list-counter-style:upper-roman}.prose ol[type=i]{--list-counter-style:lower-roman}.prose ol[type=Is]{--list-counter-style:upper-roman}.prose ol[type=is]{--list-counter-style:lower-roman}.prose ol[type="1"]{--list-counter-style:decimal}.prose ol>li{position:relative;padding-left:1.75em}.prose ol>li::before{content:counter(list-item,var(--list-counter-style,decimal))".";position:absolute;font-weight:400;color:var(--color-neutral-800);left:0}.prose ul>li{position:relative;padding-left:1.75em}.prose ul>li::before{content:"";position:absolute;background-color:var(--color-neutral-500);border-radius:50%;width:.375em;height:.375em;top:calc(.875em - .1875em);left:.25em}.prose hr{border-color:var(--color-neutral-200);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose blockquote{font-weight:500;font-style:italic;color:var(--color-neutral-800);border-left-width:.25rem;border-left-color:var(--color-primary-200);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose blockquote p:first-of-type::before{content:open-quote}.prose blockquote p:last-of-type::after{content:close-quote}.prose h1{color:var(--color-neutral-900);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111;position:relative}.prose h2{color:var(--color-neutral-800);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333;position:relative}.prose h3{color:var(--color-neutral-800);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6;position:relative}.prose h4{color:var(--color-neutral-800);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5;position:relative}.prose figure figcaption{color:#6b7280;font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose code{color:var(--color-secondary-700);font-weight:600;font-size:.875em}.prose code::before{content:"`"}.prose code::after{content:"`"}.prose a code{color:var(--color-secondary-700)}.prose pre{color:var(--color-neutral-700);background-color:var(--color-neutral-50);overflow-x:auto;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-right:1.1428571em;padding-bottom:.8571429em;padding-left:1.1428571em}.prose pre code{background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:400;color:var(--color-neutral-700);font-size:inherit;font-family:inherit;line-height:inherit}.prose pre code::before{content:none}.prose pre code::after{content:none}.prose table{width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose thead{color:var(--color-neutral-800);font-weight:600;border-bottom-width:1px;border-bottom-color:var(--color-neutral-500)}.prose thead th{vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose tbody tr{border-bottom-width:1px;border-bottom-color:var(--color-neutral-300)}.prose tbody tr:last-child{border-bottom-width:0}.prose tbody td{vertical-align:top;padding-top:.5714286em;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose{font-size:1rem;line-height:1.75}.prose p{margin-top:1.25em;margin-bottom:1.25em}.prose img{margin-top:2em;margin-bottom:2em}.prose video{margin-top:2em;margin-bottom:2em}.prose figure{margin-top:2em;margin-bottom:2em}.prose figure>*{margin-top:0;margin-bottom:0}.prose h2 code{font-size:.875em}.prose h3 code{font-size:.9em}.prose ol{margin-top:1.25em;margin-bottom:1.25em}.prose ul{margin-top:1.25em;margin-bottom:1.25em}.prose li{margin-top:.5em;margin-bottom:.5em}.prose>ul>li p{margin-top:.75em;margin-bottom:.75em}.prose>ul>li>*:first-child{margin-top:1.25em}.prose>ul>li>*:last-child{margin-bottom:1.25em}.prose>ol>li>*:first-child{margin-top:1.25em}.prose>ol>li>*:last-child{margin-bottom:1.25em}.prose ul ul,.prose ul ol,.prose ol ul,.prose ol ol{margin-top:.75em;margin-bottom:.75em}.prose hr+*{margin-top:0}.prose h2+*{margin-top:0}.prose h3+*{margin-top:0}.prose h4+*{margin-top:0}.prose thead th:first-child{padding-left:0}.prose thead th:last-child{padding-right:0}.prose tbody td:first-child{padding-left:0}.prose tbody td:last-child{padding-right:0}.prose>:first-child{margin-top:0}.prose>:last-child{margin-bottom:0}.prose kbd{background-color:var(--color-neutral-200);padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose mark{background-color:var(--color-secondary-200);padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}.prose .heading-anchor{position:absolute;top:0;text-decoration:none;opacity:0;width:1.1em;left:-1.1em}.prose .heading-anchor:hover{background-color:transparent;color:var(--color-primary-600);text-decoration:underline}.prose .heading-anchor:hover,.prose .heading-anchor:focus,.prose h2:hover>.heading-anchor,.prose h3:hover>.heading-anchor,.prose h4:hover>.heading-anchor{opacity:1}.no-prose>p{margin-top:0}.no-prose>p:last-child{margin-bottom:0}.article-pagination a:hover .article-pagination-title{text-decoration:underline;-webkit-text-decoration-color:var(--color-primary-500);text-decoration-color:var(--color-primary-500)}.article-pagination a:hover .article-pagination-direction{color:var(--color-primary-700)}.dark .article-pagination a:hover .article-pagination-direction{color:var(--color-primary-400)}.prose .chroma{border-radius:.375rem;background-color:var(--color-neutral-50);color:var(--color-neutral-700)}.dark .prose .chroma{background-color:var(--color-neutral-700);color:var(--color-neutral-200)}.chroma .x{}.chroma .err{}.chroma .lntd,.chroma .lntd pre{margin:0;border-style:none;padding:0;vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding-left:1rem;padding-right:1rem;padding-top:.75rem;padding-bottom:.75rem;font-size:1rem;line-height:1.5rem;border-spacing:0}.chroma .hl{margin-left:-1rem;margin-right:-1rem;display:block;width:auto;background-color:var(--color-primary-100);padding-left:1rem;padding-right:1rem}.dark .chroma .hl{background-color:var(--color-primary-900)}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt{color:var(--color-neutral-600)}.dark .chroma .lnt{color:var(--color-neutral-300)}.chroma .lnt{margin-right:.4em;padding:0 .4em}.chroma .ln{color:var(--color-neutral-600)}.dark .chroma .ln{color:var(--color-neutral-300)}.chroma .ln{margin-right:.4em;padding:0 .4em}.chroma .k{color:var(--color-primary-600)}.dark .chroma .k{color:var(--color-primary-300)}.chroma .kc{font-weight:600;color:var(--color-secondary-400)}.dark .chroma .kc{color:var(--color-secondary-500)}.chroma .kd{color:var(--color-primary-600)}.dark .chroma .kd{color:var(--color-primary-300)}.chroma .kn{color:var(--color-primary-600)}.dark .chroma .kn{color:var(--color-primary-300)}.chroma .kp{color:var(--color-primary-600)}.dark .chroma .kp{color:var(--color-primary-300)}.chroma .kr{color:var(--color-primary-600)}.dark .chroma .kr{color:var(--color-primary-300)}.chroma .kt{color:var(--color-secondary-400)}.dark .chroma .kt{color:var(--color-secondary-600)}.chroma .n{color:var(--color-secondary-900)}.dark .chroma .n{color:var(--color-secondary-200)}.chroma .na{color:var(--color-secondary-800)}.dark .chroma .na{color:var(--color-secondary-300)}.chroma .nb{color:var(--color-secondary-800)}.dark .chroma .nb{color:var(--color-secondary-300)}.chroma .bp{color:var(--color-secondary-800)}.dark .chroma .bp{color:var(--color-secondary-300)}.chroma .nc{color:var(--color-primary-600)}.dark .chroma .nc{color:var(--color-primary-300)}.chroma .no{font-weight:600;color:var(--color-secondary-400)}.dark .chroma .no{color:var(--color-secondary-500)}.chroma .nd{color:var(--color-secondary-900)}.dark .chroma .nd{color:var(--color-secondary-200)}.chroma .ni{color:var(--color-secondary-900)}.dark .chroma .ni{color:var(--color-secondary-200)}.chroma .ne{font-weight:600;color:var(--color-secondary-400)}.dark .chroma .ne{color:var(--color-secondary-500)}.chroma .nf{color:var(--color-secondary-600)}.dark .chroma .nf{color:var(--color-secondary-500)}.chroma .fm{color:var(--color-primary-600)}.dark .chroma .fm{color:var(--color-primary-300)}.chroma .nl{color:var(--color-secondary-900)}.dark .chroma .nl{color:var(--color-secondary-200)}.chroma .nn{color:var(--color-primary-600)}.dark .chroma .nn{color:var(--color-primary-300)}.chroma .nx{color:var(--color-secondary-800)}.dark .chroma .nx{color:var(--color-secondary-300)}.chroma .py{color:#cebc3a}.chroma .nt{color:var(--color-secondary-800)}.dark .chroma .nt{color:var(--color-secondary-300)}.chroma .nv{color:var(--color-secondary-400)}.dark .chroma .nv{color:var(--color-secondary-600)}.chroma .vc{color:var(--color-primary-600)}.dark .chroma .vc{color:var(--color-primary-300)}.chroma .vg{font-weight:600;color:var(--color-secondary-400)}.dark .chroma .vg{color:var(--color-secondary-500)}.chroma .vi{color:var(--color-secondary-400)}.dark .chroma .vi{color:var(--color-secondary-600)}.chroma .vm{color:var(--color-secondary-400)}.dark .chroma .vm{color:var(--color-secondary-600)}.chroma .l{color:var(--color-primary-800)}.dark .chroma .l{color:var(--color-primary-400)}.chroma .ld{color:var(--color-primary-800)}.dark .chroma .ld{color:var(--color-primary-400)}.chroma .s{color:var(--color-primary-800)}.dark .chroma .s{color:var(--color-primary-400)}.chroma .sa{color:var(--color-primary-800)}.dark .chroma .sa{color:var(--color-primary-400)}.chroma .sb{color:var(--color-primary-800)}.dark .chroma .sb{color:var(--color-primary-400)}.chroma .sc{color:var(--color-primary-800)}.dark .chroma .sc{color:var(--color-primary-400)}.chroma .dl{color:var(--color-primary-800)}.dark .chroma .dl{color:var(--color-primary-400)}.chroma .sd{color:var(--color-primary-800)}.dark .chroma .sd{color:var(--color-primary-400)}.chroma .s2{color:var(--color-primary-800)}.dark .chroma .s2{color:var(--color-primary-400)}.chroma .se{font-weight:600;color:var(--color-secondary-400)}.dark .chroma .se{color:var(--color-secondary-500)}.chroma .sh{color:var(--color-primary-800)}.dark .chroma .sh{color:var(--color-primary-400)}.chroma .si{color:var(--color-primary-800)}.dark .chroma .si{color:var(--color-primary-400)}.chroma .sx{color:var(--color-primary-800)}.dark .chroma .sx{color:var(--color-primary-400)}.chroma .sr{font-weight:600;color:var(--color-primary-800)}.dark .chroma .sr{color:var(--color-primary-400)}.chroma .s1{color:var(--color-primary-800)}.dark .chroma .s1{color:var(--color-primary-400)}.chroma .ss{font-weight:600;color:var(--color-primary-800)}.dark .chroma .ss{color:var(--color-primary-400)}.chroma .m{color:var(--color-secondary-400)}.dark .chroma .m{color:var(--color-secondary-600)}.chroma .mb{color:var(--color-secondary-400)}.dark .chroma .mb{color:var(--color-secondary-600)}.chroma .mf{color:var(--color-secondary-400)}.dark .chroma .mf{color:var(--color-secondary-600)}.chroma .mh{color:var(--color-secondary-400)}.dark .chroma .mh{color:var(--color-secondary-600)}.chroma .mi{color:var(--color-secondary-400)}.dark .chroma .mi{color:var(--color-secondary-600)}.chroma .il{color:var(--color-secondary-400)}.dark .chroma .il{color:var(--color-secondary-600)}.chroma .mo{color:var(--color-secondary-400)}.dark .chroma .mo{color:var(--color-secondary-600)}.chroma .o{color:var(--color-primary-600)}.chroma .ow{font-weight:600;color:var(--color-primary-400)}.dark .chroma .ow{color:var(--color-primary-600)}.chroma .p{}.chroma .c{font-style:italic;color:var(--color-neutral-500)}.dark .chroma .c{color:var(--color-neutral-400)}.chroma .ch{font-weight:600;font-style:italic;color:var(--color-neutral-500)}.dark .chroma .ch{color:var(--color-neutral-400)}.chroma .cm{font-style:italic;color:var(--color-neutral-500)}.dark .chroma .cm{color:var(--color-neutral-400)}.chroma .c1{font-style:italic;color:var(--color-neutral-500)}.dark .chroma .c1{color:var(--color-neutral-400)}.chroma .cs{font-style:italic;color:var(--color-neutral-500)}.dark .chroma .cs{color:var(--color-neutral-400)}.chroma .cp{font-style:italic;color:var(--color-neutral-500)}.dark .chroma .cp{color:var(--color-neutral-400)}.chroma .cpf{font-style:italic;color:var(--color-neutral-500)}.dark .chroma .cpf{color:var(--color-neutral-400)}.chroma .g{}.chroma .gd{}.chroma .ge{font-style:italic}.chroma .gr{}.chroma .gh{font-weight:600;color:var(--color-neutral-500)}.chroma .gi{color:var(--color-primary-800)}.dark .chroma .gi{color:var(--color-primary-400)}.chroma .go{color:var(--color-primary-800)}.dark .chroma .go{color:var(--color-primary-400)}.chroma .gp{color:var(--color-primary-800)}.dark .chroma .gp{color:var(--color-primary-400)}.chroma .gs{font-weight:600}.chroma .gu{color:var(--color-neutral-500)}.chroma .gt{color:var(--color-neutral-500)}.chroma .gl{text-decoration:underline}.chroma .w{}.relative{position:relative}.m-auto{margin:auto}.m-1{margin:.25rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mb-3{margin-bottom:.75rem}.mt-8{margin-top:2rem}.mb-12{margin-bottom:3rem}.mt-12{margin-top:3rem}.mt-10{margin-top:2.5rem}.mt-0{margin-top:0}.mt-6{margin-top:1.5rem}.-mt-2{margin-top:-.5rem}.ml-2{margin-left:.5rem}.mr-3{margin-right:.75rem}.mt-\[0\.1rem\]{margin-top:.1rem}.ml-3{margin-left:.75rem}.\!mt-0{margin-top:0!important}.\!mb-0{margin-bottom:0!important}.mr-4{margin-right:1rem}.ml-1{margin-left:.25rem}.mb-1{margin-bottom:.25rem}.\!mb-9{margin-bottom:2.25rem!important}.mb-2{margin-bottom:.5rem}.mt-1{margin-top:.25rem}.mb-\[2px\]{margin-bottom:2px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-screen{height:100vh}.h-24{height:6rem}.h-full{height:100%}.h-36{height:9rem}.max-h-\[10rem\]{max-height:10rem}.w-36{width:9rem}.w-full{width:100%}.w-24{width:6rem}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-7xl{max-width:80rem}.max-w-prose{max-width:65ch}.max-w-\[10rem\]{max-width:10rem}.max-w-full{max-width:100%}.flex-grow{flex-grow:1}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.overflow-hidden{overflow:hidden}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.\!rounded-md{border-radius:.375rem!important}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-400{border-color:var(--color-neutral-400)}.border-neutral-300{border-color:var(--color-neutral-300)}.border-primary-400{border-color:var(--color-primary-400)}.border-neutral-200{border-color:var(--color-neutral-200)}.border-neutral-700{border-color:var(--color-neutral-700)}.bg-neutral{background-color:var(--color-neutral)}.bg-primary-200{background-color:var(--color-primary-200)}.bg-neutral-300{background-color:var(--color-neutral-300)}.bg-primary-100{background-color:var(--color-primary-100)}.bg-primary-600{background-color:var(--color-primary-600)}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-1{padding:.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pt-8{padding-top:2rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pb-4{padding-bottom:1rem}.pt-4{padding-top:1rem}.pr-3{padding-right:.75rem}.text-center{text-align:center}.text-right{text-align:right}.align-text-bottom{vertical-align:text-bottom}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-\[0\.6rem\]{font-size:.6rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.leading-7{line-height:1.75rem}.leading-6{line-height:1.5rem}.leading-3{line-height:.75rem}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-900{color:var(--color-neutral-900)}.text-neutral-700{color:var(--color-neutral-700)}.text-neutral-500{color:var(--color-neutral-500)}.text-primary-500{color:var(--color-primary-500)}.text-neutral-800{color:var(--color-neutral-800)}.text-primary-700{color:var(--color-primary-700)}.text-primary-400{color:var(--color-primary-400)}.\!text-neutral{color:var(--color-neutral)!important}.\!no-underline{text-decoration:none!important}.first\:mt-8:first-child{margin-top:2rem}.hover\:border-primary-400:hover{border-color:var(--color-primary-400)}.hover\:border-primary-500:hover{border-color:var(--color-primary-500)}.hover\:bg-primary-600:hover{background-color:var(--color-primary-600)}.hover\:bg-primary-500:hover{background-color:var(--color-primary-500)}.hover\:\!bg-primary-500:hover{background-color:var(--color-primary-500)!important}.hover\:text-primary-700:hover{color:var(--color-primary-700)}.hover\:text-primary-500:hover{color:var(--color-primary-500)}.hover\:text-primary-400:hover{color:var(--color-primary-400)}.hover\:text-neutral:hover{color:var(--color-neutral)}.hover\:underline:hover{text-decoration:underline}.hover\:underline-neutral-300:hover{-webkit-text-decoration-color:var(--color-neutral-300);text-decoration-color:var(--color-neutral-300)}.hover\:underline-primary-400:hover{-webkit-text-decoration-color:var(--color-primary-400);text-decoration-color:var(--color-primary-400)}.hover\:underline-primary-500:hover{-webkit-text-decoration-color:var(--color-primary-500);text-decoration-color:var(--color-primary-500)}.hover\:underline-offset-small:hover{text-underline-offset:2px}.hover\:underline-thickness-bold:hover{text-decoration-thickness:2px}.dark .dark\:prose-light{color:var(--color-neutral-300)}.dark .dark\:prose-light a{color:var(--color-primary-400);-webkit-text-decoration-color:var(--color-neutral-500);text-decoration-color:var(--color-neutral-500)}.dark .dark\:prose-light a:hover{color:var(--color-neutral);text-decoration:none}.dark .dark\:prose-light strong{color:var(--color-neutral)}.dark .dark\:prose-light ol>li::before{color:var(--color-neutral-400)}.dark .dark\:prose-light ul>li::before{background-color:var(--color-neutral-600)}.dark .dark\:prose-light hr{border-color:var(--color-neutral-500)}.dark .dark\:prose-light blockquote{color:var(--color-neutral-200);border-left-color:var(--color-primary-900)}.dark .dark\:prose-light h1{color:var(--color-neutral)}.dark .dark\:prose-light h2{color:var(--color-neutral-50)}.dark .dark\:prose-light h3{color:var(--color-neutral-50)}.dark .dark\:prose-light h4{color:var(--color-neutral-50)}.dark .dark\:prose-light figure figcaption{color:var(--color-neutral-400)}.dark .dark\:prose-light code{color:var(--color-secondary-400)}.dark .dark\:prose-light a code{color:var(--color-secondary-400)}.dark .dark\:prose-light pre{color:var(--color-neutral-200);background-color:var(--color-neutral-700)}.dark .dark\:prose-light pre code{color:var(--color-neutral-200)}.dark .dark\:prose-light thead{color:var(--color-neutral);border-bottom-color:var(--color-neutral-500)}.dark .dark\:prose-light tbody tr{border-bottom-color:var(--color-neutral-700)}.dark .dark\:prose-light kbd{background-color:var(--color-neutral-700);color:var(--color-neutral-300)}.dark .dark\:prose-light mark{background-color:var(--color-secondary-400)}.dark .dark\:inline{display:inline}.dark .dark\:hidden{display:none}.dark .dark\:border-neutral-600{border-color:var(--color-neutral-600)}.dark .dark\:border-primary-600{border-color:var(--color-primary-600)}.dark .dark\:bg-neutral-800{background-color:var(--color-neutral-800)}.dark .dark\:bg-primary-400{background-color:var(--color-primary-400)}.dark .dark\:bg-neutral-700{background-color:var(--color-neutral-700)}.dark .dark\:bg-primary-900{background-color:var(--color-primary-900)}.dark .dark\:bg-primary-800{background-color:var(--color-primary-800)}.dark .dark\:text-neutral-500{color:var(--color-neutral-500)}.dark .dark\:text-neutral{color:var(--color-neutral)}.dark .dark\:text-neutral-300{color:var(--color-neutral-300)}.dark .dark\:text-neutral-400{color:var(--color-neutral-400)}.dark .dark\:text-primary-400{color:var(--color-primary-400)}.dark .dark\:text-neutral-600{color:var(--color-neutral-600)}.dark .dark\:text-neutral-800{color:var(--color-neutral-800)}.dark .dark\:underline-neutral-600{-webkit-text-decoration-color:var(--color-neutral-600);text-decoration-color:var(--color-neutral-600)}.dark .dark\:hover\:bg-primary-400:hover{background-color:var(--color-primary-400)}.dark .dark\:hover\:\!bg-primary-700:hover{background-color:var(--color-primary-700)!important}.dark .dark\:hover\:text-primary-400:hover{color:var(--color-primary-400)}.dark .dark\:hover\:text-neutral-800:hover{color:var(--color-neutral-800)}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:mr-7{margin-right:1.75rem}.sm\:w-1\/2{width:50%}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:mr-0:last-child{margin-right:0}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:w-1\/4{width:25%}.lg\:px-32{padding-left:8rem;padding-right:8rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}} \ No newline at end of file diff --git a/css/main.bundle.min.9b253ddfacfebf2bc0e3f42afb0c2d8b458f751b3e08c100f4eceb03f1d561676be97c329374cd7904bb700647b0197f85fc20298a8ee3ffdc467d4c43bb20a9.css b/css/main.bundle.min.9b253ddfacfebf2bc0e3f42afb0c2d8b458f751b3e08c100f4eceb03f1d561676be97c329374cd7904bb700647b0197f85fc20298a8ee3ffdc467d4c43bb20a9.css new file mode 100644 index 00000000..cc001452 --- /dev/null +++ b/css/main.bundle.min.9b253ddfacfebf2bc0e3f42afb0c2d8b458f751b3e08c100f4eceb03f1d561676be97c329374cd7904bb700647b0197f85fc20298a8ee3ffdc467d4c43bb20a9.css @@ -0,0 +1 @@ +:root{--color-neutral:255, 255, 255;--color-neutral-50:250, 250, 250;--color-neutral-100:244, 244, 245;--color-neutral-200:228, 228, 231;--color-neutral-300:212, 212, 216;--color-neutral-400:161, 161, 170;--color-neutral-500:113, 113, 122;--color-neutral-600:82, 82, 91;--color-neutral-700:63, 63, 70;--color-neutral-800:39, 39, 42;--color-neutral-900:24, 24, 27;--color-primary-50:245, 243, 255;--color-primary-100:237, 233, 254;--color-primary-200:221, 214, 254;--color-primary-300:196, 181, 253;--color-primary-400:167, 139, 250;--color-primary-500:139, 92, 246;--color-primary-600:124, 58, 237;--color-primary-700:109, 40, 217;--color-primary-800:91, 33, 182;--color-primary-900:76, 29, 149;--color-secondary-50:253, 244, 255;--color-secondary-100:250, 232, 255;--color-secondary-200:245, 208, 254;--color-secondary-300:240, 171, 252;--color-secondary-400:232, 121, 249;--color-secondary-500:217, 70, 239;--color-secondary-600:192, 38, 211;--color-secondary-700:162, 28, 175;--color-secondary-800:134, 25, 143;--color-secondary-900:112, 26, 117}/*!Congo v2.0.0 | MIT License | https://github.com/jpanther/congo*//*!tailwindcss v3.0.18 | MIT License | https://tailwindcss.com*/*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}::before,::after{--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:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,segoe ui,Roboto,helvetica neue,Arial,noto sans,sans-serif,apple color emoji,segoe ui emoji,segoe ui symbol,noto color emoji}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,samp,pre{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:baseline}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%;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-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,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::before,::after{--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-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:rgb(59 130 246 / 0.5);--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: }.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where([class~=lead]):not(:where([class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose a{color:var(--tw-prose-links);text-decoration:underline;font-weight:500;-webkit-text-decoration-color:rgb(var(--color-primary-300));text-decoration-color:rgb(var(--color-primary-300))}:where(.prose a:hover):not(:where([class~=not-prose] *)){color:rgb(var(--color-neutral))!important;text-decoration:none!important;background-color:rgb(var(--color-primary-600))!important;border-radius:.09rem}.prose :where(strong):not(:where([class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(ol):not(:where([class~=not-prose] *)){list-style-type:decimal;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=As]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=as]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=Is]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=is]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose] *)){list-style-type:disc;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(hr):not(:where([class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose] *))::before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose] *))::after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose] *)){font-weight:900}.prose :where(h2):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose] *)){font-weight:800}.prose :where(h3):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose] *)){font-weight:700}.prose :where(h4):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose] *)){font-weight:700}.prose :where(figure>*):not(:where([class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose :where(code):not(:where([class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose] *))::before{content:"`"}.prose :where(code):not(:where([class~=not-prose] *))::after{content:"`"}.prose :where(a code):not(:where([class~=not-prose] *)){color:var(--tw-prose-code)}.prose :where(pre):not(:where([class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding-top:.8571429em;padding-right:1.1428571em;padding-bottom:.8571429em;padding-left:1.1428571em}.prose :where(pre code):not(:where([class~=not-prose] *)){background-color:transparent;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose] *))::before{content:none}.prose :where(pre code):not(:where([class~=not-prose] *))::after{content:none}.prose :where(table):not(:where([class~=not-prose] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose] *)){vertical-align:baseline;padding-top:.5714286em;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose{--tw-prose-body:rgb(var(--color-neutral-700));--tw-prose-headings:rgb(var(--color-neutral-800));--tw-prose-lead:rgb(var(--color-neutral-500));--tw-prose-links:rgb(var(--color-primary-700));--tw-prose-bold:rgb(var(--color-neutral-900));--tw-prose-counters:rgb(var(--color-neutral-800));--tw-prose-bullets:rgb(var(--color-neutral-500));--tw-prose-hr:rgb(var(--color-neutral-200));--tw-prose-quotes:rgb(var(--color-neutral-700));--tw-prose-quote-borders:rgb(var(--color-primary-200));--tw-prose-captions:rgb(var(--color-neutral-500));--tw-prose-code:rgb(var(--color-secondary-700));--tw-prose-pre-code:rgb(var(--color-neutral-700));--tw-prose-pre-bg:rgb(var(--color-neutral-50));--tw-prose-th-borders:rgb(var(--color-neutral-500));--tw-prose-td-borders:rgb(var(--color-neutral-300));--tw-prose-invert-body:rgb(var(--color-neutral-300));--tw-prose-invert-headings:rgb(var(--color-neutral-50));--tw-prose-invert-lead:rgb(var(--color-neutral-500));--tw-prose-invert-links:rgb(var(--color-primary-400));--tw-prose-invert-bold:rgb(var(--color-neutral));--tw-prose-invert-counters:rgb(var(--color-neutral-400));--tw-prose-invert-bullets:rgb(var(--color-neutral-600));--tw-prose-invert-hr:rgb(var(--color-neutral-500));--tw-prose-invert-quotes:rgb(var(--color-neutral-200));--tw-prose-invert-quote-borders:rgb(var(--color-primary-900));--tw-prose-invert-captions:rgb(var(--color-neutral-400));--tw-prose-invert-code:rgb(var(--color-secondary-400));--tw-prose-invert-pre-code:rgb(var(--color-neutral-200));--tw-prose-invert-pre-bg:rgb(var(--color-neutral-700));--tw-prose-invert-th-borders:rgb(var(--color-neutral-500));--tw-prose-invert-td-borders:rgb(var(--color-neutral-700));font-size:1rem;line-height:1.75}.prose :where(p):not(:where([class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(img):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(video):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(h2 code):not(:where([class~=not-prose] *)){font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose] *)){font-size:.9em}.prose :where(li):not(:where([class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose>:where(ul>li p):not(:where([class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose>:where(ul>li>*:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose>:where(ul>li>*:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose>:where(ol>li>*:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose>:where(ol>li>*:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(tbody td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose>:where(:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose>:where(:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.prose :where(kbd):not(:where([class~=not-prose] *)){background-color:rgb(var(--color-neutral-200));padding:.1rem .4rem;border-radius:.25rem;font-size:.9rem;font-weight:600}.prose :where(mark):not(:where([class~=not-prose] *)){color:rgb(var(--color-neutral-800));background-color:rgb(var(--color-secondary-200));padding:.1rem .2rem;border-radius:.12rem}body a,body button{transition-property:color,background-color,border-color,fill,stroke,-webkit-text-decoration-color;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,-webkit-text-decoration-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.icon svg{height:1em;width:1em}#search-query::-webkit-search-cancel-button,#search-query::-webkit-search-decoration,#search-query::-webkit-search-results-button,#search-query::-webkit-search-results-decoration{display:none}[dir=rtl] .prose blockquote{border-left-width:0;border-right-width:4px;padding-right:1rem}[dir=rtl] .prose ul>li,[dir=rtl] .prose ol>li{margin-right:1.75rem;padding-left:0;padding-right:.5rem}[dir=rtl] .prose ol>li:before,[dir=rtl] .prose ul>li:before{left:auto;right:.25rem}[dir=rtl] .prose thead td:first-child,[dir=rtl] .prose thead th:first-child{padding-right:0}[dir=rtl] .prose thead td:last-child,[dir=rtl] .prose thead th:last-child{padding-left:0}.toc ul,.toc li{list-style-type:none;padding-left:0;padding-right:0;line-height:1.375}[dir=ltr] .toc ul ul{padding-left:1rem}[dir=rtl] .toc ul ul{padding-right:1rem}.toc a{font-weight:400;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity))}.dark .toc a{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}[dir=rtl] .toc ul>li{margin-right:0}.highlight-wrapper{display:block}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;top:0;right:0;z-index:10;width:5rem;cursor:pointer;white-space:nowrap;border-bottom-left-radius:.375rem;border-top-right-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-200),var(--tw-bg-opacity));padding-top:.25rem;padding-bottom:.25rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,liberation mono,courier new,monospace;font-size:.875rem;line-height:1.25rem;--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity));opacity:.9}.dark .copy-button{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity))}.copy-button:hover,.copy-button:focus,.copy-button:active,.copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity))}.dark .copy-button:hover,.dark .copy-button:focus,.dark .copy-button:active,.dark .copy-button:active:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity))}.copy-textarea{position:absolute;z-index:-10;opacity:.05}.prose .chroma{position:static;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-50),var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity))}.dark .prose .chroma{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity));--tw-text-opacity:1;color:rgba(var(--color-neutral-200),var(--tw-text-opacity))}.chroma .lntd,.chroma .lntd pre{margin:0;border-style:none;padding:0;vertical-align:top}.chroma .lntable{display:block;width:auto;overflow:hidden;padding-left:1rem;padding-right:1rem;padding-top:.75rem;padding-bottom:.75rem;font-size:1rem;line-height:1.5rem;border-spacing:0}.chroma .hl{margin-left:-1rem;margin-right:-1rem;display:block;width:auto;--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity));padding-left:1rem;padding-right:1rem}.dark .chroma .hl{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity))}.chroma .lntd .hl{margin:0;padding:0}.chroma .lnt,.chroma .ln{margin-right:.4em;padding-left:.4em;padding-right:.4em;padding-top:0;padding-bottom:0;--tw-text-opacity:1;color:rgba(var(--color-neutral-600),var(--tw-text-opacity))}.dark .chroma .lnt,.dark .chroma .ln{--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity))}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .nc,.chroma .fm,.chroma .nn,.chroma .vc,.chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}.dark .chroma .k,.dark .chroma .kd,.dark .chroma .kn,.dark .chroma .kp,.dark .chroma .kr,.dark .chroma .nc,.dark .chroma .fm,.dark .chroma .nn,.dark .chroma .vc,.dark .chroma .o{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity))}.chroma .kc{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity))}.dark .chroma .kc{--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity))}.chroma .kt,.chroma .nv,.chroma .vi,.chroma .vm,.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .il,.chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity))}.dark .chroma .kt,.dark .chroma .nv,.dark .chroma .vi,.dark .chroma .vm,.dark .chroma .m,.dark .chroma .mb,.dark .chroma .mf,.dark .chroma .mh,.dark .chroma .mi,.dark .chroma .il,.dark .chroma .mo{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity))}.chroma .n,.chroma .nd,.chroma .ni,.chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-900),var(--tw-text-opacity))}.dark .chroma .n,.dark .chroma .nd,.dark .chroma .ni,.dark .chroma .nl{--tw-text-opacity:1;color:rgba(var(--color-secondary-200),var(--tw-text-opacity))}.chroma .na,.chroma .nb,.chroma .bp,.chroma .nx,.chroma .py,.chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-800),var(--tw-text-opacity))}.dark .chroma .na,.dark .chroma .nb,.dark .chroma .bp,.dark .chroma .nx,.dark .chroma .py,.dark .chroma .nt{--tw-text-opacity:1;color:rgba(var(--color-secondary-300),var(--tw-text-opacity))}.chroma .no,.chroma .ne,.chroma .vg{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity))}.dark .chroma .no,.dark .chroma .ne,.dark .chroma .vg{--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity))}.chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-600),var(--tw-text-opacity))}.dark .chroma .nf{--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity))}.chroma .l,.chroma .ld,.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .sh,.chroma .si,.chroma .sx,.chroma .s1,.chroma .gi,.chroma .go,.chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity))}.dark .chroma .l,.dark .chroma .ld,.dark .chroma .s,.dark .chroma .sa,.dark .chroma .sb,.dark .chroma .sc,.dark .chroma .dl,.dark .chroma .sd,.dark .chroma .s2,.dark .chroma .sh,.dark .chroma .si,.dark .chroma .sx,.dark .chroma .s1,.dark .chroma .gi,.dark .chroma .go,.dark .chroma .gp{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.chroma .se{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-secondary-400),var(--tw-text-opacity))}.dark .chroma .se{--tw-text-opacity:1;color:rgba(var(--color-secondary-500),var(--tw-text-opacity))}.chroma .sr,.chroma .ss{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-800),var(--tw-text-opacity))}.dark .chroma .sr,.dark .chroma .ss{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.chroma .ow{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.dark .chroma .ow{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}.chroma .c,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}.dark .chroma .c,.dark .chroma .cm,.dark .chroma .c1,.dark .chroma .cs,.dark .chroma .cp,.dark .chroma .cpf{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}.chroma .ch{font-weight:600;font-style:italic;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}.dark .chroma .ch{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}.chroma .ge{font-style:italic}.chroma .gh{font-weight:600;--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}.chroma .gs{font-weight:600}.chroma .gu,.chroma .gt{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}.chroma .gl{-webkit-text-decoration-line:underline;text-decoration-line:underline}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.invisible{visibility:hidden}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:-webkit-sticky;position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.top-\[110vh\]{top:110vh}.bottom-\[-5\.5rem\]{bottom:-5.5rem}.top-\[calc\(100vh-5rem\)\]{top:calc(100vh - 5rem)}.top-20{top:5rem}.top-0{top:0}.z-50{z-index:50}.z-10{z-index:10}.order-first{order:-9999}.m-auto{margin:auto}.m-1{margin:.25rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.mb-3{margin-bottom:.75rem}.mt-8{margin-top:2rem}.mb-12{margin-bottom:3rem}.mt-0{margin-top:0}.mt-12{margin-top:3rem}.mt-10{margin-top:2.5rem}.mt-6{margin-top:1.5rem}.-mt-2{margin-top:-.5rem}.mr-3{margin-right:.75rem}.ml-3{margin-left:.75rem}.mt-\[0\.1rem\]{margin-top:.1rem}.\!mt-0{margin-top:0!important}.\!mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.-mb-1{margin-bottom:-.25rem}.ml-2{margin-left:.5rem}.mr-2{margin-right:.5rem}.\!mb-9{margin-bottom:2.25rem!important}.mt-1{margin-top:.25rem}.mb-\[2px\]{margin-bottom:2px}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-screen{height:100vh}.h-12{height:3rem}.h-24{height:6rem}.h-8{height:2rem}.h-full{height:100%}.h-36{height:9rem}.max-h-\[10rem\]{max-height:10rem}.min-h-0{min-height:0}.w-12{width:3rem}.w-36{width:9rem}.w-full{width:100%}.w-24{width:6rem}.w-screen{width:100vw}.w-8{width:2rem}.w-6{width:1.5rem}.min-w-0{min-width:0}.min-w-\[1\.8rem\]{min-width:1.8rem}.min-w-\[2\.4rem\]{min-width:2.4rem}.max-w-7xl{max-width:80rem}.max-w-full{max-width:100%}.max-w-prose{max-width:65ch}.max-w-\[10rem\]{max-width:10rem}.max-w-3xl{max-width:48rem}.flex-none{flex:none}.flex-auto{flex:auto}.grow{flex-grow:1}.-translate-y-8{--tw-translate-y:-2rem;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))}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.place-self-center{place-self:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.scroll-smooth{scroll-behavior:smooth}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.rounded-lg{border-radius:.5rem}.\!rounded-md{border-radius:.375rem!important}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-dotted{border-style:dotted}.border-neutral-400{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-400),var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-200),var(--tw-border-opacity))}.border-neutral-300{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-300),var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity:1;border-color:rgba(var(--color-primary-400),var(--tw-border-opacity))}.bg-neutral{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral),var(--tw-bg-opacity))}.bg-primary-200{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-200),var(--tw-bg-opacity))}.bg-neutral\/50{background-color:rgba(var(--color-neutral),.5)}.bg-neutral-500\/50{background-color:rgba(var(--color-neutral-500),.5)}.bg-transparent{background-color:transparent}.bg-neutral-100{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-100),var(--tw-bg-opacity))}.bg-neutral-300{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-300),var(--tw-bg-opacity))}.bg-primary-100{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity))}.bg-primary-600{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity))}.object-scale-down{-o-object-fit:scale-down;object-fit:scale-down}.object-left{-o-object-position:left;object-position:left}.p-4{padding:1rem}.p-1{padding:.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.px-0{padding-left:0;padding-right:0}.py-8{padding-top:2rem;padding-bottom:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pt-8{padding-top:2rem}.pl-2{padding-left:.5rem}.pt-3{padding-top:.75rem}.pb-4{padding-bottom:1rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-right{text-align:right}.align-text-bottom{vertical-align:text-bottom}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-base{font-size:1rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.text-\[0\.6rem\]{font-size:.6rem}.font-extrabold{font-weight:800}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-normal{font-weight:400}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-7{line-height:1.75rem}.leading-6{line-height:1.5rem}.leading-3{line-height:.75rem}.text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}.text-neutral-900{--tw-text-opacity:1;color:rgba(var(--color-neutral-900),var(--tw-text-opacity))}.text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}.text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}.text-primary-500{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity))}.text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity))}.text-primary-700{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity))}.text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.\!text-neutral{--tw-text-opacity:1 !important;color:rgba(var(--color-neutral),var(--tw-text-opacity))!important}.\!no-underline{-webkit-text-decoration-line:none!important;text-decoration-line:none!important}.opacity-0{opacity:0}.shadow-lg{--tw-shadow:0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);--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)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:150ms}.first\:mt-8:first-child{margin-top:2rem}.hover\:border-primary-300:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-300),var(--tw-border-opacity))}.hover\:bg-primary-600:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-600),var(--tw-bg-opacity))}.hover\:bg-primary-100:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity))}.hover\:bg-primary-500:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity))}.hover\:\!bg-primary-500:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-500),var(--tw-bg-opacity))!important}.hover\:text-primary-600:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}.hover\:text-primary-700:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-700),var(--tw-text-opacity))}.hover\:text-primary-500:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-500),var(--tw-text-opacity))}.hover\:text-neutral:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity))}.hover\:underline:hover{-webkit-text-decoration-line:underline;text-decoration-line:underline}.hover\:decoration-primary-500:hover{-webkit-text-decoration-color:rgb(var(--color-primary-500));text-decoration-color:rgb(var(--color-primary-500))}.hover\:decoration-neutral-300:hover{-webkit-text-decoration-color:rgb(var(--color-neutral-300));text-decoration-color:rgb(var(--color-neutral-300))}.hover\:decoration-primary-400:hover{-webkit-text-decoration-color:rgb(var(--color-primary-400));text-decoration-color:rgb(var(--color-primary-400))}.hover\:decoration-2:hover{text-decoration-thickness:2px}.hover\:underline-offset-2:hover{text-underline-offset:2px}.focus\:translate-y-0:focus{--tw-translate-y:0px;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))}.focus\:bg-primary-100:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-100),var(--tw-bg-opacity))}.focus\:outline-dotted:focus{outline-style:dotted}.focus\:outline-2:focus{outline-width:2px}.focus\:outline-transparent:focus{outline-color:transparent}.group:hover .group-hover\:text-primary-600{--tw-text-opacity:1;color:rgba(var(--color-primary-600),var(--tw-text-opacity))}.group:hover .group-hover\:text-primary-300{--tw-text-opacity:1;color:rgba(var(--color-primary-300),var(--tw-text-opacity))}.group:hover .group-hover\:underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.group:hover .group-hover\:decoration-primary-500{-webkit-text-decoration-color:rgb(var(--color-primary-500));text-decoration-color:rgb(var(--color-primary-500))}.group:hover .group-hover\:opacity-100{opacity:1}[dir=ltr] .ltr\:right-0{right:0}[dir=ltr] .ltr\:-left-6{left:-1.5rem}[dir=ltr] .ltr\:ml-2{margin-left:.5rem}[dir=ltr] .ltr\:mr-4{margin-right:1rem}[dir=ltr] .ltr\:ml-1{margin-left:.25rem}[dir=ltr] .ltr\:mr-14{margin-right:3.5rem}[dir=ltr] .ltr\:-ml-5{margin-left:-1.25rem}[dir=ltr] .ltr\:block{display:block}[dir=ltr] .ltr\:inline{display:inline}[dir=ltr] .ltr\:hidden{display:none}[dir=ltr] .ltr\:border-l{border-left-width:1px}[dir=ltr] .ltr\:pr-2{padding-right:.5rem}[dir=ltr] .ltr\:pl-5{padding-left:1.25rem}[dir=ltr] .ltr\:pr-3{padding-right:.75rem}[dir=ltr] .ltr\:text-right{text-align:right}[dir=rtl] .rtl\:left-0{left:0}[dir=rtl] .rtl\:-right-6{right:-1.5rem}[dir=rtl] .rtl\:mr-2{margin-right:.5rem}[dir=rtl] .rtl\:ml-4{margin-left:1rem}[dir=rtl] .rtl\:mr-1{margin-right:.25rem}[dir=rtl] .rtl\:ml-14{margin-left:3.5rem}[dir=rtl] .rtl\:-mr-5{margin-right:-1.25rem}[dir=rtl] .rtl\:block{display:block}[dir=rtl] .rtl\:inline{display:inline}[dir=rtl] .rtl\:hidden{display:none}[dir=rtl] .rtl\:border-r{border-right-width:1px}[dir=rtl] .rtl\:pl-2{padding-left:.5rem}[dir=rtl] .rtl\:pr-5{padding-right:1.25rem}[dir=rtl] .rtl\:pl-3{padding-left:.75rem}[dir=rtl] .rtl\:text-left{text-align:left}.dark .dark\:prose-invert{--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.dark .dark\:prose-invert :where(a):not(:where([class~=not-prose] *)){-webkit-text-decoration-color:rgb(var(--color-neutral-600));text-decoration-color:rgb(var(--color-neutral-600))}.dark .dark\:prose-invert :where(kbd):not(:where([class~=not-prose] *)){color:rgb(var(--color-neutral-200));background-color:rgb(var(--color-neutral-700))}.dark .dark\:prose-invert :where(mark):not(:where([class~=not-prose] *)){background-color:rgb(var(--color-secondary-400))}.dark .dark\:inline{display:inline}.dark .dark\:hidden{display:none}.dark .dark\:border-neutral-600{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-600),var(--tw-border-opacity))}.dark .dark\:border-primary-600{--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity))}.dark .dark\:border-neutral-700{--tw-border-opacity:1;border-color:rgba(var(--color-neutral-700),var(--tw-border-opacity))}.dark .dark\:bg-neutral-800{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-800),var(--tw-bg-opacity))}.dark .dark\:bg-neutral-600{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-600),var(--tw-bg-opacity))}.dark .dark\:bg-neutral-800\/50{background-color:rgba(var(--color-neutral-800),.5)}.dark .dark\:bg-primary-400{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity))}.dark .dark\:bg-neutral-900\/50{background-color:rgba(var(--color-neutral-900),.5)}.dark .dark\:bg-neutral-700{--tw-bg-opacity:1;background-color:rgba(var(--color-neutral-700),var(--tw-bg-opacity))}.dark .dark\:bg-primary-900{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity))}.dark .dark\:bg-primary-800{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-800),var(--tw-bg-opacity))}.dark .dark\:text-neutral-500{--tw-text-opacity:1;color:rgba(var(--color-neutral-500),var(--tw-text-opacity))}.dark .dark\:text-neutral{--tw-text-opacity:1;color:rgba(var(--color-neutral),var(--tw-text-opacity))}.dark .dark\:text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.dark .dark\:text-neutral-300{--tw-text-opacity:1;color:rgba(var(--color-neutral-300),var(--tw-text-opacity))}.dark .dark\:text-neutral-400{--tw-text-opacity:1;color:rgba(var(--color-neutral-400),var(--tw-text-opacity))}.dark .dark\:text-neutral-800{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity))}.dark .dark\:text-neutral-100{--tw-text-opacity:1;color:rgba(var(--color-neutral-100),var(--tw-text-opacity))}.dark .dark\:hover\:border-primary-600:hover{--tw-border-opacity:1;border-color:rgba(var(--color-primary-600),var(--tw-border-opacity))}.dark .dark\:hover\:bg-primary-900:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity))}.dark .dark\:hover\:bg-primary-400:hover{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-400),var(--tw-bg-opacity))}.dark .dark\:hover\:\!bg-primary-700:hover{--tw-bg-opacity:1 !important;background-color:rgba(var(--color-primary-700),var(--tw-bg-opacity))!important}.dark .dark\:hover\:text-primary-400:hover{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.dark .dark\:hover\:text-neutral-800:hover{--tw-text-opacity:1;color:rgba(var(--color-neutral-800),var(--tw-text-opacity))}.dark .dark\:focus\:bg-primary-900:focus{--tw-bg-opacity:1;background-color:rgba(var(--color-primary-900),var(--tw-bg-opacity))}.dark .group:hover .dark\:group-hover\:text-primary-400{--tw-text-opacity:1;color:rgba(var(--color-primary-400),var(--tw-text-opacity))}.dark .group:hover .dark\:group-hover\:text-neutral-700{--tw-text-opacity:1;color:rgba(var(--color-neutral-700),var(--tw-text-opacity))}@media(min-width:640px){.sm\:mb-0{margin-bottom:0}.sm\:mr-7{margin-right:1.75rem}.sm\:w-1\/2{width:50%}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:p-6{padding:1.5rem}.sm\:px-14{padding-left:3.5rem;padding-right:3.5rem}.sm\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:last\:mr-0:last-child{margin-right:0}[dir=ltr] .ltr\:sm\:mr-7{margin-right:1.75rem}[dir=ltr] .ltr\:sm\:last\:mr-0:last-child{margin-right:0}[dir=rtl] .rtl\:sm\:ml-7{margin-left:1.75rem}[dir=rtl] .rtl\:sm\:last\:ml-0:last-child{margin-left:0}}@media(min-width:768px){.md\:w-1\/3{width:33.333333%}.md\:p-\[10vh\]{padding:10vh}.md\:px-24{padding-left:6rem;padding-right:6rem}}@media(min-width:1024px){.lg\:sticky{position:-webkit-sticky;position:sticky}.lg\:top-10{top:2.5rem}.lg\:order-last{order:9999}.lg\:mt-3{margin-top:.75rem}.lg\:hidden{display:none}.lg\:w-1\/4{width:25%}.lg\:max-w-xs{max-width:20rem}.lg\:flex-row{flex-direction:row}.lg\:p-\[12vh\]{padding:12vh}.lg\:px-32{padding-left:8rem;padding-right:8rem}[dir=ltr] .ltr\:lg\:pl-8{padding-left:2rem}[dir=rtl] .rtl\:lg\:pr-8{padding-right:2rem}}@media(min-width:1280px){.xl\:w-1\/5{width:20%}} \ No newline at end of file diff --git a/css/schemes/congo.min.b48d6ba061dc77186a2524fb8aac5ac3823b2679a9299ca60325abbccc9c1764c884715f0ba24b4e2776cb3814df4af1f4c854b87207cd5d4c7a254da9b55751.css b/css/schemes/congo.min.b48d6ba061dc77186a2524fb8aac5ac3823b2679a9299ca60325abbccc9c1764c884715f0ba24b4e2776cb3814df4af1f4c854b87207cd5d4c7a254da9b55751.css deleted file mode 100644 index 582c0323..00000000 --- a/css/schemes/congo.min.b48d6ba061dc77186a2524fb8aac5ac3823b2679a9299ca60325abbccc9c1764c884715f0ba24b4e2776cb3814df4af1f4c854b87207cd5d4c7a254da9b55751.css +++ /dev/null @@ -1 +0,0 @@ -:root{--color-neutral:#fff;--color-neutral-50:#fafafa;--color-neutral-100:#f4f4f5;--color-neutral-200:#e4e4e7;--color-neutral-300:#d4d4d8;--color-neutral-400:#a1a1aa;--color-neutral-500:#71717a;--color-neutral-600:#52525b;--color-neutral-700:#3f3f46;--color-neutral-800:#27272a;--color-neutral-900:#18181b;--color-primary-50:#f5f3ff;--color-primary-100:#ede9fe;--color-primary-200:#ddd6fe;--color-primary-300:#c4b5fd;--color-primary-400:#a78bfa;--color-primary-500:#8b5cf6;--color-primary-600:#7c3aed;--color-primary-700:#6d28d9;--color-primary-800:#5b21b6;--color-primary-900:#4c1d95;--color-secondary-50:#fdf4ff;--color-secondary-100:#fae8ff;--color-secondary-200:#f5d0fe;--color-secondary-300:#f0abfc;--color-secondary-400:#e879f9;--color-secondary-500:#d946ef;--color-secondary-600:#c026d3;--color-secondary-700:#a21caf;--color-secondary-800:#86198f;--color-secondary-900:#701a75} \ No newline at end of file diff --git a/docs/advanced-customisation/index.html b/docs/advanced-customisation/index.html index 6092e561..221ee35f 100644 --- a/docs/advanced-customisation/index.html +++ b/docs/advanced-customisation/index.html @@ -1,15 +1,14 @@ - + - + Advanced Customisation · Congo - + - - - + + @@ -18,52 +17,61 @@ - - + + - - + + -
+ +
-Congo +Congo
-
-
-
+
+
+
  1. -Documentation/ +Documentation/

@@ -71,7 +79,7 @@ Advanced Customisation

-
+
+ +

There are many ways you can make advanced changes to Congo. Read below to learn more about what can be customised and the best way of achieving your desired result.

If you need further advice, post your questions on GitHub Discussions.

-

Hugo project structure #

+

Hugo project structure #

Before leaping into it, first a quick note about Hugo project structure and best practices for managing your content and theme customisations.

- + -In summary: Never directly edit the theme files. Only make customisations in your Hugo project’s sub-directories, not in the themes directory itself. +In summary: Never directly edit the theme files. Only make customisations in your Hugo project’s sub-directories, not in the themes directory itself.

Congo is built to take advantage of all the standard Hugo practices. It is designed to allow all aspects of the theme to be customised and overriden without changing any of the core theme files. This allows for a seamless upgrade experience while giving you total control over the look and feel of your website.

In order to achieve this, you should never manually adjust any of the theme files directly. Whether you install using Hugo modules, as a git submodule or manually include the theme in your themes/ directory, you should always leave these files intact.

The correct way to adjust any theme behaviour is by overriding files using Hugo’s powerful file lookup order. In summary, the lookup order ensures any files you include in your project directory will automatically take precedence over any theme files.

For example, if you wanted to override the main article template in Congo, you can simply create your own layouts/_default/single.html file and place it in the root of your project. This file will then override the single.html from the theme without ever changing the theme itself. This works for any theme files - HTML templates, partials, shortcodes, config files, data, assets, etc.

As long as you follow this simple practice, you will always be able to update the theme (or test different theme versions) without worrying that you will lose any of your custom changes.

-

Colour schemes #

+

Colour schemes #

Congo ships with a number of colour schemes out of the box. To change the basic colour scheme, you can set the colorScheme theme parameter. Refer to the Getting Started section to learn more about the built-in schemes.

In addition to the default schemes, you can also create your own and re-style the entire website to your liking. Schemes are created by by placing a <scheme-name>.css file in the assets/css/schemes/ folder. Once the file is created, simply refer to it by name in the theme configuration.

Congo defines a three-colour palette that is used throughout the theme. The three colours are defined as neutral, primary and secondary variants, each containing ten shades of colour.

+

Due to the way Tailwind CSS 3.0 calculates colour values with opacity, the colours specified in the scheme need to conform to a particular format by providing the red, green and blue colour values.

+
:root {
+  --color-primary-500: 139, 92, 246;
+}
+

This example defines a CSS variable for the primary-500 colour with a red value of 139, green value of 92 and blue value of 246.

Use one of the existing theme stylesheets as a template. You are free to define your own colours, but for some inspiration, check out the official Tailwind colour palette reference.

-

Overriding the stylesheet #

+

Overriding the stylesheet #

Sometimes you need to add a custom style to style your own HTML elements. Congo provides for this scenario by allowing you to override the default styles in your own CSS stylesheet. Simply create a custom.css file in your project’s assets/css/ folder.

The custom.css file will be minified by Hugo and loaded automatically after all the other theme styles which means anything in your custom file will take precedence over the defaults.

-

Adjusting the font size #

+

Adjusting the font size #

Changing the font size of your website is one example of overriding the default stylesheet. Congo makes this simple as it uses scaled font sizes throughout the theme which are derived from the base HTML font size. By default, Tailwind sets the default size to 12pt, but it can be changed to whatever value you prefer.

Create a custom.css file using the instructions above and add the following CSS declaration:

/* Increase the default font size */
@@ -114,72 +159,165 @@ Advanced Customisation
   font-size: 13pt;
 }
 

Simply by changing this one value, all the font sizes on your website will be adjusted to match this new size. Therefore, to increase the overall font sizes used, make the value greater than 12pt. Similarly, to decrease the font sizes, make the value less than 12pt.

-

Building from source #

-

If you’d like to make a major change, you can take advantage of Tailwind CSS’s JIT compiler and rebuild the entire theme CSS from scratch.

+

Building the theme CSS from source #

+

If you’d like to make a major change, you can take advantage of Tailwind CSS’s JIT compiler and rebuild the entire theme CSS from scratch. This is useful if you want to adjust the Tailwind configuration or add extra Tailwind classes to the main stylesheet.

- + -Note: Building the theme manually is intended for advanced users. +Note: Building the theme manually is intended for advanced users.
-

Change into the themes/congo/ folder and install the project dependencies.

-
npm install
-

Once installed, you can edit the themes/congo/tailwind.config.js to change the styles that are applied throughout the theme. You can also adjust specific styles in themes/congo/assets/css/main.css.

-

To allow for easy theme colour changes, Congo defines a three-colour palette that is used throughout the theme. The three colours are defined as neutral, primary and secondary variants, each containing ten shades of colour. In order to change the colour across the entire theme, simply edit the tailwind.config.js file accordingly.

-

For a full list of colours available, and their corresponding configuration values, see the official Tailwind docs.

-

After editing the configuration, you need to rebuild the theme’s stylesheets. This will run the Tailwind JIT compiler in watch mode which aids with testing style changes.

-
npm run dev
-

This will automatically output a CSS file to /themes/congo/assets/css/compiled/main.css.

-
- - - - -Note: You should not make manual edits to the compiled CSS file. +

Let’s step through how building the Tailwind CSS works.

+

Tailwind configuration #

+

In order to generate a CSS file that only contains the Tailwind classes that are actually being used the JIT compiler needs to scan through all the HTML templates and Markdown content files to check which styles are present in the markup. The compiler does this by looking at the tailwind.config.js file which is included in the root of the theme directory:

+
// themes/congo/tailwind.config.js
+
+module.exports = {
+  content: [
+    "./layouts/**/*.html",
+    "./content/**/*.{html,md}",
+    "./themes/congo/layouts/**/*.html",
+    "./themes/congo/content/**/*.{html,md}",
+  ],
+
+  // and more...
+};
+

This default configuration has been included with these content paths so that you can easily generate your own CSS file without needing to modify it, provided you follow a particular project structure. Namely, you have to include Congo in your project as a subdirectory at themes/congo/. This means you cannot easily use Hugo Modules to install the theme and you must go down either the git submodule (recommended) or manual install routes. The Installation docs explain how to install the theme using either of these methods.

+

Project structure #

+

In order to take advantage of the default configuration, your project should look something like this…

+
.
+├── assets
+│   └── css
+│       └── compiled
+│           └── main.css  # this is the file we will generate
+├── config  # site config
+│   └── _default
+├── content  # site content
+│   ├── _index.md
+│   ├── projects
+│   │   └── _index.md
+│   └── blog
+│       └── _index.md
+├── layouts  # custom layouts for your site
+│   ├── partials
+│   │   └── extend-article-link.html
+│   ├── projects
+│   │   └── list.html
+│   └── shortcodes
+│       └── disclaimer.html
+└── themes
+    └── congo  # git submodule or manual theme install
+

This example structure adds a new projects content type with its own custom layout along with a custom shortcode and extended partial. Provided the project follows this structure, all that’s required is to recompile the main.css file.

+

Install dependencies #

+

In order for this to work you’ll need to change into the themes/congo/ directory and install the project dependencies. You’ll need npm on your local machine for this step.

+
cd themes/congo
+npm install
+

Run the Tailwind compiler #

+

With the dependencies installed all that’s left is to use Tailwind CLI to invoke the JIT compiler. Navigate back to the root of your Hugo project and issue the following command:

+
cd ../..
+./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit
+

It’s a bit of an ugly command due to the paths involved but essentially you’re calling Tailwind CLI and passing it the location of the Tailwind config file (the one we looked at above), where to find the theme’s main.css file and then where you want the compiled CSS file to be placed (it’s going into the assets/css/compiled/ folder of your Hugo project).

+

The config file will automatically inspect all the content and layouts in your project as well as all those in the theme and build a new CSS file that contains all the CSS required for your website. Due to the way Hugo handles file hierarchy, this file in your project will now automatically override the one that comes with the theme.

+

Each time you make a change to your layouts and need new Tailwind CSS styles, you can simply re-run the command and generate the new CSS file. You can also add -w to the end of the command to run the JIT compiler in watch mode.

+

Make a build script #

+

To fully complete this solution, you can simplify this whole process by adding aliases for these commands, or do what I do and add a package.json to the root of your project which contains the necessary scripts…

+
// package.json
+
+{
+  "name": "my-website",
+  "version": "1.0.0",
+  "description": "",
+  "scripts": {
+    "server": "hugo server -b http://localhost -p 8000",
+    "dev": "NODE_ENV=development ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
+    "build": "NODE_ENV=production ./themes/congo/node_modules/tailwindcss/lib/cli.js -c ./themes/congo/tailwind.config.js -i ./themes/congo/assets/css/main.css -o ./assets/css/compiled/main.css --jit"
+  },
+  // and more...
+}
+

Now when you want to work on designing your site, you can invoke npm run dev and the compiler will run in watch mode. When you’re ready to deploy, run npm run build and you’ll get a clean Tailwind CSS build.

+

🙋‍♀️ If you need help, feel free to ask a question on GitHub Discussions.

-

Now whenever you make a change, the CSS files will be rebuilt automatically. This mode is useful to run when using hugo server to preview your site during development. Asset files will be minified by Hugo at site build time.

-
-
+ +

-© -2022 -Congo +© 2022 Congo contributors

-

-Powered by Hugo & Congo +

+Powered by Hugo & Congo

+
+ +
diff --git a/docs/configuration/index.html b/docs/configuration/index.html index 08576ff0..58d7d3fb 100644 --- a/docs/configuration/index.html +++ b/docs/configuration/index.html @@ -1,15 +1,14 @@ - + - + Configuration · Congo - + - - - + + @@ -19,51 +18,60 @@ - + - - + + -
+ +
-Congo +Congo
-
-
-
+
+
+
  1. -Documentation/ +Documentation/

@@ -71,7 +79,7 @@ Configuration

-
+
+ +

Congo is a highly customisable theme and uses some of the latest Hugo features to simplify how it is configured.

The theme ships with a default configuration that gets you up and running with a basic blog or static website.

@@ -89,21 +120,20 @@ Configuration

The default theme configuration is documented in each file so you can freely adjust the settings to meet your needs.

- + -As outlined in the installation instructions, you should adjust your theme configuration by modifying the files in the config/_default/ folder of your Hugo project and delete the config.toml file in your project root. +As outlined in the installation instructions, you should adjust your theme configuration by modifying the files in the config/_default/ folder of your Hugo project and delete the config.toml file in your project root.
-

Site configuration #

+

Site configuration #

Standard Hugo configuration variables are respected throughout the theme, however there are some specific things that should be configured for the best experience.

The site configuration is managed through the config/_default/config.toml file. The table below outlines all the settings that the Congo takes advantage of.

-

Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. author.name refers to [author] name).

+

Note that the variable names provided in this table use dot notation to simplify the TOML data structure (ie. outputs.home refers to [outputs] home).

- @@ -111,98 +141,196 @@ Configuration - - - - - - - - - - - - - - - - - - - - - - + - + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + - -
NameType Default Description
themestring "congo" When using Hugo Modules this config value should be removed. For all other installation types, this must be set to congo for the theme to function.
baseURLstring Not set The URL to the root of the website.
languageCodestring"en"The language of the website for site metadata purposes. It can be a top-level language (ie. en) or a sub-variant (ie. en-AU)."
defaultContentLanguagestring "en"This value determines the language of theme components."
titlestring"Congo"The title of the website. This will be displayed in the site header and footer.
copyrightstringNot setA Markdown string containing the copyright message to be displayed in the site footer. If none is provided, Congo will automatically generate a copyright string using the site title.This value determines the default language of theme components and content. Refer to the language and i18n section below for supported language codes.
enableRobotsTXTboolean true When enabled a robots.txt file will be created in the site root that allows search engines to crawl the entire site. Set to false if you wish to provide your own file.
paginate10The number of articles listed on each page of the article listing.
summaryLengthinteger 0 The number of words that are used to generate the article summary when one is not provided in the front matter. A value of 0 will use the first sentence. This value has no effect when summaries are hidden.
author.namestringNot setThe author’s name. This will be displayed in article footers, and on the homepage when the profile layout is used.
author.imagestringNot setPath to the image file of the author. The image should be a 1:1 aspect ratio and placed in the site’s static/ folder.
author.biostringNot setA Markdown string containing the author’s bio. It will be displayed in article footers.
author.linksarray of objectsNot setThe links to display alongside the author’s details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in assets/icons/.outputs.home["HTML", "RSS", "JSON"]The output formats that are generated for the site. Congo requires HTML, RSS and JSON for all theme components to work correctly.
permalinks Not set Refer to the Hugo docs for permalink configuration.
taxonomies Not set Refer to the Organising content section for taxonomy configuration.
-

Theme parameters #

+

Language and i18n #

+

Congo is optimised for full multilingual websites and theme assets are translated into several languages out of the box. The language configuration allows you to generate multiple versions of your content to provide a customised experience to your visitors in their native language.

+

The theme currently supports the following languages by default:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LanguageCode
🇬🇧 Englishen
🇨🇳 Chinesezh
🇫🇷 Frenchfr
🇩🇪 Germande
🇧🇷 Portuguese (Brazil)pt-br
🇪🇸 Spanish (Spain)es
🇹🇷 Turkishtr
+

The default translations can be overridden by creating a custom file in i18n/[code].yaml that contains the translation strings. You can also use this method to add new languages. If you’d like to share a new translation with the community, please open a pull request.

+

Configuration #

+

In order to be as flexible as possible, a language configuration file needs to be created for each language on the website. By default Congo includes an English language configuration at config/_default/languages.en.toml.

+

The default file can be used as a template to create additional languages, or renamed if you wish to author your website in a language other than English. Simply name the file using the format languages.[language-code].toml.

+
+ + + + +Note: Ensure the defaultContentLanguage parameter in the site configuration matches the language code in your language config filename. +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDefaultDescription
languageCode"en"The Hugo language code for this file. It can be a top-level language (ie. en) or a sub-variant (ie. en-au) and should match the language code in the filename. Hugo expects this value to always be in lowercase. For proper HTML compliance, set the isoCode parameter which is case-sensitive.
languageName"English"The name of the language.
displayName"EN"The name used when the language appears on the website.
isoCode"en"The ISO language code for HTML metadata purposes. It can be a top-level language (ie. en) or a sub-variant (ie. en-AU).
weight1The weight determines the order of languages when building multilingual sites.
rtlfalseWhether or not this is a RTL language. Set to true to reflow content from right-to-left. Congo fully supports using RTL and LTR languages at the same time and will dynamically adjust to both.
dateFormat"2 January 2006"How dates are formatted in this language. Refer to the Hugo docs for acceptable formats.
title"Congo"The title of the website. This will be displayed in the site header and footer.
descriptionNot setThe website description. This will be used in the site metadata.
copyrightNot setA Markdown string containing the copyright message to be displayed in the site footer. If none is provided, Congo will automatically generate a copyright string using the site title.
author.nameNot setThe author’s name. This will be displayed in article footers, and on the homepage when the profile layout is used.
author.imageNot setPath to the image file of the author. The image should be a 1:1 aspect ratio and placed in the site’s assets/ folder.
author.headlineNot setA Markdown string containing the author’s headline. It will be displayed on the profile homepage under the author’s name.
author.bioNot setA Markdown string containing the author’s bio. It will be displayed in article footers.
author.linksNot setThe links to display alongside the author’s details. The config file contains example links which can simply be uncommented to enable. The order that the links are displayed is determined by the order they appear in the array. Custom links can be added by providing corresponding SVG icon assets in assets/icons/.
+

Theme parameters #

Congo provides a large number of configuration parameters that control how the theme functions. The table below outlines every available parameter in the config/_default/params.toml file.

Many of the article defaults here can be overridden on a per article basis by specifying it in the front matter. Refer to the Front Matter section for further details.

- @@ -210,251 +338,287 @@ Configuration - - - - - + + + - - + + + + + + - + + + + + + + + + + + - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - + + + + + - + + + + + + + + + + - - - + + + + + - - - - - - - - - -
NameType Default Description
colorSchemestring "congo" The theme colour scheme to use. Valid values are congo (default), avocado, ocean, fire and slate. Refer to the Colour Schemes section for more details.
darkModeboolean or string"auto"The preferred theme appearance for dark mode. Set to true to force dark appearance or false to force light appearance. Using "auto" will defer to the user’s operating system preference.defaultAppearance"light"The default theme appearance, either light or dark.
darkTogglebooleanautoSwitchAppearancetrueWhether the theme appearance automatically switches based upon the visitor’s operating system preference. Set to false to force the site to always use the defaultAppearance.
showAppearanceSwitcher falseWhen darkMode is set to "auto", this parameter determines whether or not to show the appearance toggle in the site footer. The browser’s local storage is used to persist the user’s preference.Whether or not to show the appearance switcher in the site footer. The browser’s local storage is used to persist the visitor’s preference.
enableSearchfalseWhether site search is enabled. Set to true to enable search functionality. Note that the search feature depends on the outputs.home setting in the site configuration being set correctly.
enableCodeCopyfalseWhether copy-to-clipboard buttons are enabled for <code> blocks.
logostring Not set The relative path to the site logo file within the assets/ folder. The logo file should be provided at 2x resolution and supports any image dimensions.
descriptionstringNot setThe description of the website for metadata purposes.
mainSectionsarray of strings Not set The sections that should be displayed in the recent articles list. If not provided the section with the greatest number of articles is used.
robotsstring Not set String that indicates how robots should handle your site. If set, it will be output in the page head. Refer to Google’s docs for valid values.
showScrollToToptrueWhen set to true the scroll to top arrow is displayed.
homepage.layoutstring "page" The layout of the homepage. Valid values are page, profile or custom. When set to custom, you must provide your own layout by creating a /layouts/partials/home/custom.html file. Refer to the Homepage Layout section for more details.
homepage.showRecentboolean false Whether or not to display the recent articles list on the homepage.
article.showDateboolean true Whether or not article dates are displayed.
article.showDateUpdatedboolean false Whether or not the dates articles were updated are displayed.
article.dateFormatstring"2 January 2006"How article dates are formatted. Refer to the Hugo docs for acceptable formats.
article.showAuthorboolean true Whether or not the author box is displayed in the article footer.
article.showBreadcrumbsboolean false Whether or not breadcrumbs are displayed in the article header.
article.showDraftLabelboolean true Whether or not the draft indicator is shown next to articles when site is built with --buildDrafts.
article.showEditboolean false Whether or not the link to edit the article content should be displayed.
article.editURLstring Not set When article.showEdit is active, the URL for the edit link.
article.editAppendPathboolean true When article.showEdit is active, whether or not the path to the current article should be appended to the URL set at article.editURL.
article.showHeadingAnchorsboolean true Whether or not heading anchor links are displayed alongside headings within articles.
article.showPaginationboolean true Whether or not the next/previous article links are displayed in the article footer.
article.invertPaginationfalseWhether or not to flip the direction of the next/previous article links.
article.showReadingTimeboolean true Whether or not article reading times are displayed.
article.showTableOfContentsfalseWhether or not the table of contents is displayed on articles.
article.showTaxonomiesfalseWhether or not the taxonomies related to this article are displayed.
article.showWordCountboolean false Whether or not article word counts are displayed.
article.sharingLinksarray of strings Not set Which sharing links to display at the end of each article. When not provided, or set to false no links will be displayed.
list.showBreadcrumbsboolean false Whether or not breadcrumbs are displayed in the header on list pages.
list.showTableOfContentsfalseWhether or not the table of contents is displayed on list pages.
list.showSummaryboolean false Whether or not article summaries are displayed on list pages. If a summary is not provided in the front matter, one will be auto generated using the summaryLength parameter in the site configuration.
list.groupByYearboolean true Whether or not articles are grouped by year on list pages.
sitemap.excludedKindsarray of strings ["taxonomy", "term"] Kinds of content that should be excluded from the generated /sitemap.xml file. Refer to the Hugo docs for acceptable values.
taxonomy.showTermCountboolean true Whether or not the number of articles within a taxonomy term is displayed on the taxonomy listing.
fathomAnalytics.sitestring Not set The site code generated by Fathom Analytics for the website. Refer to the Analytics docs for more details.
fathomAnalytics.domainstring Not set If using a custom domain with Fathom Analytics, provide it here to serve script.js from the custom domain.
verification.googlestring Not set The site verification string provided by Google to be included in the site metadata.
verification.bingstring Not set The site verification string provided by Bing to be included in the site metadata.
verification.pintereststring Not set The site verification string provided by Pinterest to be included in the site metadata.
verification.yandexstring Not set The site verification string provided by Yandex to be included in the site metadata.
+
-
-
+ +

-© -2022 -Congo +© 2022 Congo contributors

-

-Powered by Hugo & Congo +

+Powered by Hugo & Congo

+
+ +
diff --git a/docs/content-examples/index.html b/docs/content-examples/index.html new file mode 100644 index 00000000..0191d5d5 --- /dev/null +++ b/docs/content-examples/index.html @@ -0,0 +1,459 @@ + + + + + +Content Examples · Congo + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+Congo +
+ +
+
+
+
+
    + +
  1. +Documentation/ +
  2. + +
+

+Content Examples +

+
+
+9 mins· + + + + + + +
+
+
+
+ +
+

If you’ve been reading the documentation in order, you should now know about all the features and configurations available in Congo. This page is designed to pull everything together and offer some worked examples that you might like to use in your Hugo project.

+
+ + + + +Tip: If you’re new to Hugo, be sure to check out the official docs to learn more about the concept of page bundles and resources. +
+

The examples on this page can all be adapted to different scenarios but hopefully give you some ideas about how to approach formatting a particular content item for your individual project.

+

Branch pages #

+

Branch page bundles in Hugo cover items like the homepage, section listings, and taxonomy pages. The important thing to remember about branch bundles is that the filename for this content type is _index.md.

+

Congo will honour the front matter parameters specified in branch pages and these will override the default settings for that particular page. For example, setting the title parameter in a branch page will allow overriding the page title.

+

Homepage #

+ + + + + + + + + + + + + + + + + +
Layout:layouts/index.html
Content:content/_index.md
+

The homepage in Congo is special in that it’s overarching design is controlled by the homepage layout config parameter. You can learn more about this in the Homepage Layout section.

+

If you want to add custom content to this page, you simply need to create a content/_index.md file. Anything in this file will then be included in your homepage.

+

Example:

+
---
+title: "Welcome to Congo!"
+description: "This is a demo of adding content to the homepage."
+---
+Welcome to my website! I'm really happy you stopped by.
+

This example sets a custom title and adds some additional text to the body of the page. Any Markdown formatted text is acceptable, including shortcodes, images and links.

+

List pages #

+ + + + + + + + + + + + + + + + + +
Layout:layouts/_default/list.html
Content:content/../_index.md
+

List pages group all the pages within into a section and provide a way for visitors to reach each page. A blog or portfolio are examples of a list page as they group together posts or projects.

+

Creating a list page is as simple as making a sub-directory in the content folder. For example, to create a “Projects” section, you would create content/projects/. Then create a Markdown file for each of your projects.

+

A list page will be generated by default, however to customise the content, you should also create an _index.md page in this new directory.

+
.
+└── content
+    └── projects
+        ├── _index.md          # /projects
+        ├── first-project.md   # /projects/first-project
+        └── another-project
+            ├── index.md       # /projects/another-project
+            └── project.jpg
+

Hugo will generate URLs for the pages in your projects folder accordingly.

+

Just like the homepage, content in the _index.md file will be output into the generated list index. Congo will then list any pages in this section below the content.

+

Example:

+
---
+title: "Projects"
+description: "Learn about some of my projects."
+cascade:
+  showReadingTime: false
+---
+This section contains all my current projects.
+

In this example, the special cascade parameter is being used to hide the reading time on any sub-pages within this section. By doing this, any project pages will not have their reading time showing. This is a great way to override default theme parameters for an entire section without having to include them in every individual page.

+

The samples section of this site is an example of a list page.

+

Taxonomy pages #

+ + + + + + + + + + + + + + + + + + + + + +
List layout:layouts/_default/taxonomy.html
Term layout:layouts/_default/term.html
Content:content/../_index.md
+

Taxonomy pages come in two forms - taxonomy lists and taxonomy terms. Lists display a listing of each of the terms within a given taxonomy, while terms display a list of pages that are related to a given term.

+

The terminology can get a little confusing so let’s explore an example using a taxonomy named animals.

+

Firstly, to use taxonomies in Hugo, they have to be configured. This is done by creating a config file at config/_default/taxonomies.toml and defining the taxonomy name.

+
# config/_default/taxonomies.toml
+
+animal = "animals"
+

Hugo expects taxonomies to be listed using their singular and plural forms, so we add the singular animal equals the plural animals to create our example taxonomy.

+

Now that our animals taxonomy exists, it needs to be added to individual content items. It’s as simple as inserting it into the front matter:

+
---
+title: "Into the Lion's Den"
+description: "This week we're learning about lions."
+animals: ["lion", "cat"]
+---
+

This has now created two terms within our animals taxonomy - lion and cat.

+

Although it’s not obvious at this point, Hugo will now be generating list and term pages for this new taxonomy. By default the listing can be accessed at /animals/ and the term pages can be found at /animals/lion/ and /animals/cat/.

+

The list page will list all the terms contained within the taxonomy. In this example, navigating to /animals/ will show a page that has links for “lion” and “cat” which take visitors to the individual term pages.

+

The term pages will list all the pages contained within that term. These term lists are essentially the same as normal list pages and behave in much the same way.

+

In order to add custom content to taxonomy pages, simply create _index.md files in the content folder using the taxonomy name as the sub-directory name.

+
.
+└── content
+    └── animals
+        ├── _index.md       # /animals
+        └── lion
+            └── _index.md   # /animals/lion
+

Anything in these content files will now be placed onto the generated taxonomy pages. As with other content, the front matter variables can be used to override defaults. In this way you could have a tag named lion but override the title to be “Lion”.

+

To see how this looks in reality, check out the tags taxonomy listing on this site.

+

Leaf pages #

+ + + + + + + + + + + + + + + + + + + + + +
Layout:layouts/_default/single.html
Content (standalone):content/../page-name.md
Content (bundled):content/../page-name/index.md
+

Leaf pages in Hugo are basically standard content pages. They are defined as pages that don’t contain any sub-pages. These could be things like an about page, or an individual blog post that lives in the blog section of the website.

+

The most important thing to remember about leaf pages is that unlike branch pages, leaf pages should be named index.md without an underscore. Leaf pages are also special in that they can be grouped together at the top level of the section and named with a unique name.

+
.
+└── content
+    └── blog
+        ├── first-post.md     # /blog/first-post
+        ├── second-post.md    # /blog/second-post
+        └── third-post
+            ├── index.md      # /blog/third-post
+            └── image.jpg
+

When including assets in a page, like an image, a page bundle should be used. Page bundles are created using a sub-directory with an index.md file. Grouping the assets with the content in its own directory is important as many of the shortcodes and other theme logic assumes that resources are bundled alongside pages.

+

Example:

+
---
+title: "My First Blog Post"
+date: 2022-01-25
+description: "Welcome to my blog!"
+summary: "Learn more about me and why I am starting this blog."
+tags: ["welcome", "new", "about", "first"]
+---
+_This_ is the content of my blog post.
+

Leaf pages have a wide variety of front matter parameters that can be used to customise how they are displayed.

+ +

Congo has a special feature that allows links to external pages to appear alongside articles in the article listings. This is useful if you have content on third party websites like Medium, or research papers that you’d like to link to, without replicating the content in your Hugo site.

+

In order to create an external link article, some special front matter needs to be set:

+
---
+title: "My Medium post"
+date: 2022-01-25
+externalUrl: "https://medium.com/"
+summary: "I wrote a post on Medium."
+showReadingTime: false
+_build:
+  render: "false"
+  list: "local"
+---
+

Along with the normal front matter parameters like title and summary, the externalUrl parameter is used to tell Congo that this is not an ordinary article. The URL provided here will be where visitors are directed when they select this article.

+

Additionally, we use a special Hugo front matter parameter _build to prevent a normal page for this content being generated - there’s no point generating a page since we’re linking to an external URL!

+

The theme includes an archetype to make generating these external link articles simple. Just specify -k external when making new content.

+
hugo new -k external posts/my-post.md
+

Custom layouts #

+

One of the benefits of Hugo is that it makes it easy to create custom layouts for the whole site, individual sections or pages.

+

Layouts follow all the normal Hugo templating rules and more information is available in the official Hugo docs.

+

Overriding default layouts #

+

Each of the content types discussed above lists the layout file that is used to generate each type of page. If this file is created in your local project it will override the theme template and thus can be used to customise the default style of the website.

+

For example, creating a layouts/_default/single.html file will allow the layout of leaf pages to be completely customised.

+

Custom section layouts #

+

It is also simple to create custom layouts for individual content sections. This is useful when you want to make a section that lists a certain type of content using a particular style.

+

Let’s step through an example that creates a custom “Projects” page that lists projects using a special layout.

+

In order to do this, structure your content using the normal Hugo content rules and create a section for your projects. Additionally, create a new layout for the projects section by using the same directory name as the content and adding a list.html file.

+
.
+└── content
+│   └── projects
+│       ├── _index.md
+│       ├── first-project.md
+│       └── second-project.md
+└── layouts
+    └── projects
+        └── list.html
+

This list.html file will now override the default list template, but only for the projects section. Before we look at this file, lets first look at the individual project files.

+
---
+title: "Congo"
+date: 2021-08-11
+icon: "github"
+description: "A theme for Hugo built with Tailwind CSS."
+topics: ["Hugo", "Web", "Tailwind"]
+externalUrl: "https://github.com/jpanther/congo/"
+---
+

In this example we are assigning some metadata for each project that we can then use in our list template. There’s no page content, but there’s nothing stopping you from including it. It’s your own custom template after all!

+

With the projects defined, now we can create a list template that outputs the details of each project.

+
{{ define "main" }}
+  <section class="mt-8">
+    {{ range .Pages }}
+      <article class="pb-6">
+        <a class="flex" href="{{ .Params.externalUrl }}">
+          <div class="mr-3 text-3xl text-neutral-300">
+            <span class="relative inline-block align-text-bottom">
+              {{ partial "icon.html" .Params.icon }}
+            </span>
+          </div>
+          <div>
+            <h3 class="flex text-xl font-semibold">
+              {{ .Title }}
+            </h3>
+            <p class="text-sm text-neutral-400">
+              {{ .Description }}
+            </p>
+          </div>
+        </a>
+      </article>
+    {{ end }}
+  </section>
+{{ end }}
+

Although this is quite a straightforward example, you can see that it steps through each of the pages in this section (ie. each project), and then outputs HTML links to each project alongside an icon. The metadata in the front matter for each project is used to determine which information is displayed.

+

Keep in mind that you’ll need to ensure the relevant styles and classes are available, which may require the Tailwind CSS to be recompiled. This is discussed in more detail in the Advanced Customisation section.

+

When making custom templates like this one, it’s always easiest to take a look at how the default Congo template works and then use that as a guide. Remember, the Hugo docs are a great resource to learn more about creating templates too.

+
+
+ +
+ +
+ +
+
+
+

+© 2022 Congo contributors +

+

+Powered by Hugo & Congo +

+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/docs/front-matter/index.html b/docs/front-matter/index.html index cfad3132..804890ab 100644 --- a/docs/front-matter/index.html +++ b/docs/front-matter/index.html @@ -1,15 +1,14 @@ - + - + Front Matter · Congo - + - - - + + @@ -19,51 +18,60 @@ - + - - + + -
+ +
-
-
-
+
+
+
  1. -Documentation/ +Documentation/

@@ -81,176 +89,217 @@ Front Matter

-
+
+

In addition to the default Hugo front matter parameters, Congo adds a number of additional options to customise the presentation of individual articles. All the available theme front matter parameters are listed below.

Front matter parameter default values are inherited from the theme’s base configuration, so you only need to specify these parameters in your front matter when you want to override the default.

- + + + + + - - - - - - - - - - - - - - + + + + + - + + + + + + + + + + - - - -
NameType Default Description
titleNot setThe name of the article.
descriptionstring Not set The text description for the article. It is used in the HTML metadata.
externalUrlstring Not set If this article is published on a third-party website, the URL to this article. Providing a URL will prevent a content page being generated and any references to this article will link directly to the third-party website.
editURLstring article.editURL When showEdit is active, the URL for the edit link.
editAppendPathboolean article.editAppendPath When showEdit is active, whether or not the path to the current article should be appended to the URL set at editURL.
groupByYearboolean list.groupByYear Whether or not articles are grouped by year on list pages.
menustring or array Not set When a value is provided, a link to this article will appear in the named menus. Valid values are main or footer.
robotsstring Not set String that indicates how robots should handle this article. If set, it will be output in the page head. Refer to Google’s docs for valid values.
sharingLinksarray of strings article.sharingLinks Which sharing links to display at the end of this article. When not provided, or set to false no links will be displayed.
showAuthorboolean article.showAuthor Whether or not the author box is displayed in the article footer.
showDateboolean article.showDate Whether or not the article date is displayed. The date is set using the date parameter.
showDateUpdatedboolean article.showDateUpdated Whether or not the date the article was updated is displayed. The date is set using the lastmod parameter.
showEditboolean article.showEdit Whether or not the link to edit the article content should be displayed.
showHeadingAnchorsboolean article.showHeadingAnchors Whether or not heading anchor links are displayed alongside headings within this article.
showPaginationboolean article.showPagination Whether or not the next/previous article links are displayed in the article footer.
invertPaginationarticle.invertPaginationWhether or not to flip the direction of the next/previous article links.
showReadingTimeboolean article.showReadingTime Whether or not the article reading time is displayed.
showTaxonomiesarticle.showTaxonomiesWhether or not the taxonomies that relate to this article are displayed.
showTableOfContentsarticle.showTableOfContentsWhether or not the table of contents is displayed on this article.
showWordCountboolean article.showWordCount Whether or not the article word count is displayed.
showSummaryboolean list.showSummary Whether or not the article summary should be displayed on list pages.
summarystring Auto generated using summaryLength (see site configuration) When showSummary is enabled, this is the Markdown string to be used as the summary for this article.
xmlboolean true unless excluded by sitemap.excludedKinds Whether or not this article is included in the generated /sitemap.xml file.
+
-
-
+ +

-© -2022 -Congo +© 2022 Congo contributors

-

-Powered by Hugo & Congo +

+Powered by Hugo & Congo

+
+ +
diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html index 1679fd8f..4029fcc2 100644 --- a/docs/getting-started/index.html +++ b/docs/getting-started/index.html @@ -1,15 +1,14 @@ - + - + Getting Started · Congo - + - - - + + @@ -19,51 +18,60 @@ - + - - + + -
+ +
-
-
-
+
+
+
  1. -Documentation/ +Documentation/

@@ -71,7 +79,7 @@ Getting Started

-
+
+ +
- + -This section assumes you have already installed the Congo theme. +This section assumes you have already installed the Congo theme.

The config files that ship with Congo contain all of the possible settings that the theme recognises. By default, many of these are commented out but you can simply uncomment them to activate or change a specific feature.

-

There are a few things you should set in config.toml for a new installation:

+

Basic configuration #

+

Before creating any content, there are a few things you should set for a new installation. Starting in the config.toml file, set the baseURL and languageCode parameters. The languageCode should be set to the main language that you will be using to author your content.

# config/_default/config.toml
 
 baseURL = "https://your_domain.com"
-languageCode = "en-AU"
+languageCode = "en"
+

The next step is to configure the language settings. Although Congo supports multilingual setups, for now, just configure the main language.

+

Locate the languages.en.toml file in the config folder. If your main language is English you can use this file as is. Otherwise, rename it so that it includes the correct language code in the filename. For example, for French, rename the file to languages.fr.toml.

+
+ + + + +Note that the language code in the language config filename should match the languageCode setting in config.toml. +
+
# config/_default/languages.en.toml
+
 title = "My awesome website"
 
 [author]
 name = "My name"
 image = "img/author.jpg"
+headline = "A generally awesome human"
 bio = "A little bit about me"
 links = [
   { twitter = "https://twitter.com/username" }
 ]
-

The [author] configuration determines how the author information is displayed on the website. The image should be placed in the site’s static/ folder. Links will be displayed in the order they are listed.

-

Further detail about these configuration options is covered in the Configuration section.

-

Colour schemes #

+

The [author] configuration determines how the author information is displayed on the website. The image should be placed in the site’s assets/ folder. Links will be displayed in the order they are listed.

+

If you need extra detail, further information about each of these configuration options, is covered in the Configuration section.

+

Colour schemes #

Congo ships with a number of colour schemes out of the box. To change the scheme, simply set the colorScheme theme parameter. Valid options are congo (default), avocado, fire, ocean and slate.

# config/_default/params.toml
 
 colorScheme = "congo"
 

Congo defines a three-colour palette that is used throughout the theme. Each main colour contains ten shades which are based upon the colours that are included in Tailwind.

-

Congo (default) #

+

Congo (default) #

-

Avocado #

+

Avocado #

-

Fire #

+

Fire #

-

Ocean #

+

Ocean #

-

Slate #

+

Slate #

- +

Although these are the default schemes, you can also create your own. Refer to the Advanced Customisation section for details.

-

Organising content #

+

Organising content #

By default, Congo doesn’t force you to use a particular content type. In doing so you are free to define your content as you wish. You might prefer pages for a static site, posts for a blog, or projects for a portfolio.

-

The same logic applies to taxonomies. Some people prefer to use tags and categories, others prefer to use topics.

-

Hugo defaults to using posts, tags and categories out of the box and this will work fine if that’s what you want. If you wish to customise this, however, you can do so by creating the following files:

+

Here’s a quick overview of a basic Congo project. All content is placed within the content folder:

+
.
+├── assets
+│   └── img
+│       └── author.jpg
+├── config
+│   └── _default
+├── content
+│   ├── _index.md
+│   ├── about.md
+│   └── posts
+│       ├── _index.md
+│       ├── first-post.md
+│       └── another-post
+│           ├── aardvark.jpg
+│           └── index.md
+└── themes
+    └── congo
+

It’s important to have a firm grasp of how Hugo expects content to be organised as the theme is designed to take full advantage of Hugo page bundles. Be sure to read the official Hugo docs for more information.

+

Congo is also flexible when it comes to taxonomies. Some people prefer to use tags and categories to group their content, others prefer to use topics.

+

Hugo defaults to using posts, tags and categories out of the box and this will work fine if that’s what you want. If you wish to customise this, however, you can do so by creating a taxonomies.toml configuation file:

# config/_default/taxonomies.toml
 
 topic = "topics"
 

This will replace the default tags and categories with topics. Refer to the Hugo Taxonomy docs for more information on naming taxonomies.

-

When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections.

- +

When you create a new taxonomy, you will need to adjust the navigation links on the website to point to the correct sections, which is covered below.

+

Congo has two menus that can be customised to suit the content and layout of your site. The main menu appears in the site header and the footer menu appears at the bottom of the page just above the copyright notice.

Both menus are configured in the menus.toml file.

# config/_default/menus.toml
@@ -174,49 +247,89 @@ Getting Started
 

The pageRef parameter allows you to easily reference Hugo content pages and taxonomies. It is the quickest way to configure the menu as you can simply refer to any Hugo content item and it will automatically build the correct link. To link to external URLs, the url parameter can be used.

Menu links will be sorted from lowest to highest weight, and then alphabetically by name.

Both menus are completely optional and can be commented out if not required. Use the template provided in the file as a guide.

-

Detailed configuration #

+

Detailed configuration #

The steps above are the bare minimum configuration. If you now run hugo server you will be presented with a blank Congo website. Detailed configuration is covered in the Configuration section.

+
-
-
+ +

-© -2022 -Congo +© 2022 Congo contributors

-

-Powered by Hugo & Congo +

+Powered by Hugo & Congo

+
+ +
diff --git a/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_1024x0_resize_q75_box.jpg b/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_1024x0_resize_q75_box.jpg new file mode 100644 index 00000000..2f737aaf Binary files /dev/null and b/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_1024x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_1320x0_resize_q75_box.jpg b/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_1320x0_resize_q75_box.jpg new file mode 100644 index 00000000..3cdf64a8 Binary files /dev/null and b/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_1320x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_330x0_resize_q75_box.jpg b/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_330x0_resize_q75_box.jpg new file mode 100644 index 00000000..3604c0ff Binary files /dev/null and b/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_330x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_660x0_resize_q75_box.jpg b/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_660x0_resize_q75_box.jpg new file mode 100644 index 00000000..c729ee2f Binary files /dev/null and b/docs/homepage-layout/home-page_hu9ebf2dc0eb5e596beb284e744e4eca5b_246440_660x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_1024x0_resize_q75_box.jpg b/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_1024x0_resize_q75_box.jpg new file mode 100644 index 00000000..b4b351af Binary files /dev/null and b/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_1024x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_1320x0_resize_q75_box.jpg b/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_1320x0_resize_q75_box.jpg new file mode 100644 index 00000000..09e6a7c6 Binary files /dev/null and b/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_1320x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_330x0_resize_q75_box.jpg b/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_330x0_resize_q75_box.jpg new file mode 100644 index 00000000..24824608 Binary files /dev/null and b/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_330x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_660x0_resize_q75_box.jpg b/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_660x0_resize_q75_box.jpg new file mode 100644 index 00000000..9a1946ad Binary files /dev/null and b/docs/homepage-layout/home-profile-list_huf797f5adbd488711c27909ebe8ed8db6_105595_660x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_1024x0_resize_q75_box.jpg b/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_1024x0_resize_q75_box.jpg new file mode 100644 index 00000000..5027d2c4 Binary files /dev/null and b/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_1024x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_1320x0_resize_q75_box.jpg b/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_1320x0_resize_q75_box.jpg new file mode 100644 index 00000000..abcf9865 Binary files /dev/null and b/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_1320x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_330x0_resize_q75_box.jpg b/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_330x0_resize_q75_box.jpg new file mode 100644 index 00000000..239d9897 Binary files /dev/null and b/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_330x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_660x0_resize_q75_box.jpg b/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_660x0_resize_q75_box.jpg new file mode 100644 index 00000000..7b35e24c Binary files /dev/null and b/docs/homepage-layout/home-profile_hueedbd6540c5e7a1ab659695612c95805_79548_660x0_resize_q75_box.jpg differ diff --git a/docs/homepage-layout/index.html b/docs/homepage-layout/index.html index 50183466..d338037f 100644 --- a/docs/homepage-layout/index.html +++ b/docs/homepage-layout/index.html @@ -1,15 +1,14 @@ - + - + Homepage Layout · Congo - + - - - + + @@ -19,51 +18,60 @@ - + - - + + -
+ +
-
-
-
+
+
+
  1. -Documentation/ +Documentation/

@@ -81,70 +89,154 @@ Homepage Layout

-
+
+
+
+
+ +Table of Contents + + +
+
+
+

Congo provides a fully flexible homepage layout. There are two main templates to choose from with additional settings to adjust the design. Alternatively, you can also provide your own template and have complete control over the homepage content.

The layout of the homepage is controlled by the homepage.layout setting in the params.toml configuration file. Additionally, all layouts have the option to include a listing of recent articles.

-

Page layout #

+

Page layout #

The default layout is the page layout. It’s simply a normal content page that displays your Markdown content. It’s great for static websites and provides a lot of flexibility.

-

Profile layout

+

+

+Screenshot of homepage layout +
+
+

To enable the page layout, set homepage.layout = "page" in the params.toml configuration file.

-

Profile layout #

+

Profile layout #

The profile layout is great for personal websites and blogs. It puts the author’s details front and centre by providing an image and links to social profiles.

-

Profile layout

-

The author information is provided in the config.toml configuration file. Refer to the Getting Started and Site Configuration sections for parameter details.

+

+

+Screenshot of profile layout +
+
+

+

The author information is provided in the languages configuration file. Refer to the Getting Started and Language Configuration sections for parameter details.

Additionally, any Markdown content that is provided in the homepage content will be placed below the author profile. This allows extra flexibility for displaying a bio or other custom content using shortcodes.

To enable the profile layout, set homepage.layout = "profile" in the params.toml configuration file.

-

Custom layout #

+

Custom layout #

If the built-in homepage layouts aren’t sufficient for your needs, you have the option to provide your own custom layout. This allows you to have total control over the page content and essentially gives you a blank slate to work with.

To enable the custom layout, set homepage.layout = "custom" in the params.toml configuration file.

With the configuration value set, create a new custom.html file and place it in layouts/partials/home/custom.html. Now whatever is in the custom.html file will be placed in the content area of the site homepage. You may use whatever HTML, Tailwind, or Hugo templating functions you wish to define your layout.

To include recent articles on the custom layout, use the recent-articles.html partial.

As an example, the homepage on this site uses the custom layout to allow toggling between the profile and page layouts. Visit the GitHub repo to see how it works.

-

Recent articles #

+

Recent articles #

All homepage layouts have the option of displaying recent articles below the main page content. To enable this, simply set the homepage.showRecent setting to true in the params.toml configuration file.

-

Profile layout with recent articles

+

+

+Profile layout with recent articles +
+
+

The articles listed in this section are derived from the homepage.mainSections setting which allows for whatever content types you are using on your website. For instance, if you had content sections for posts and projects you could set this setting to ["posts", "projects"] and all the articles in these two sections would be used to populate the recent list. The theme expects this setting to be an array so if you only use one section for all your content, you should set this accordingly: ["blog"].

+
-
-
+ +

-© -2022 -Congo +© 2022 Congo contributors

-

-Powered by Hugo & Congo +

+Powered by Hugo & Congo

+
+ +
diff --git a/docs/hosting-deployment/index.html b/docs/hosting-deployment/index.html index 743b3631..c16d08de 100644 --- a/docs/hosting-deployment/index.html +++ b/docs/hosting-deployment/index.html @@ -1,15 +1,14 @@ - + - + Hosting & Deployment · Congo - + - - - + + @@ -18,52 +17,61 @@ - - + + - - + + -
+ +
-
-
-
+
+
+
  1. -Documentation/ +Documentation/

@@ -81,7 +89,27 @@ Hosting & Deployment

-
+
+
+
+
+ +Table of Contents + + +
+
+
+

There are many ways to deploy your Hugo website built with Congo. The theme is designed to be flexible in almost any deployment scenario.

Congo is built using relative URLs throughout the theme. This enables sites to easily be deployed to sub-folders and hosts like GitHub Pages. There’s usually no special configuration required for this to work as long as the baseURL parameter has been configured in the config.toml file.

The official Hugo Hosting and Deployment docs are the best place to learn how to deploy your site. The sections below contain some specific theme configuration details that can help you deploy smoothly with certain providers.

@@ -93,7 +121,7 @@ Hosting & Deployment
  • Shared hosting, VPS or private web server

  • -

    GitHub Pages #

    +

    GitHub Pages #

    GitHub allows hosting on GitHub Pages using Actions. To enable this functionality, enable Pages on your repo and create a new Actions workflow to build and deploy your site.

    The file needs to be in YAML format, placed within the .github/workflows/ directory of your GitHub repository and named with a .yml extension.

    # .github/workflows/gh-pages.yml
    @@ -136,7 +164,7 @@ Hosting & Deployment
     
    Screen capture of GitHub Pages source

    Once the settings are configured, re-run the action and the site should build and deploy correctly. You can consult the actions log to check everything deployed successfully.

    -

    Netlify #

    +

    Netlify #

    To deploy to Netlify, create a new continuous deployment site and link it to your source code. The build settings can be left blank in the Netlify UI. You will only need to configure the domain you’ll be using.

    Screen capture of Netlify build settings
    @@ -157,27 +185,29 @@ Hosting & Deployment HUGO_ENV = "production"

    This configuration assumes you are deploying Congo as a Hugo module. If you have installed the theme using another method, change the build command to simply hugo --gc --minify -b $URL.

    When you push the config file to your repo, Netlify should automatically deploy your site. You can check the deploy logs in the Netlify UI to check for any errors.

    -

    Render #

    +

    Render #

    Deploying to Render is very straightforward and all configuration is via the Render UI.

    Create a new Static Site and link it to your project’s code repository. Then simply configure the build command to be hugo --gc --minify and publish directory to be public.

    Screen capture of Render settings

    The site will automatically build and deploy whenever you push a change to your repo.

    -

    Shared hosting, VPS or private web server #

    +

    Shared hosting, VPS or private web server #

    Using traditional web hosting, or deploying to your own web server, is as simple as building your Hugo site and transferring the files to your host.

    Make sure that the baseURL parameter in config.toml is set to the full URL to the root of your website (including any sub domains or sub-folders).

    Then build your site using hugo and copy the contents of the output directory to the root of your web server and you will be ready to go. By default, the output directory is named public.

    If you need a hosting provider, check out Vultr or DigitalOcean. Signing up using these affiliate links will give you up to $100 in free credit so you can try the service.

    +
    -
    -
    + +

    -© -2022 -Congo +© 2022 Congo contributors

    -

    -Powered by Hugo & Congo +

    +Powered by Hugo & Congo

    +
    + +
    diff --git a/docs/index.html b/docs/index.html index 7a960104..9d90d448 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,16 +1,15 @@ - + - + Documentation · Congo - + - - - + + @@ -18,114 +17,81 @@ - + - + -
    + +
    -
    +
    -
    -

    Documentation

    -
    +

    Documentation

    +
    +
    +
    +
    Simple, yet powerful. Learn how to use Congo and its features.
    -
    +

    +

    +Screenshots of Congo on an iPhone, iPad and MacBook +
    +

    This section contains everything you need to know about Congo. If you’re new, check out the Installation guide to begin or visit the Samples section to see what Congo can do.


    +
    - -
    - - - - - - + + + + + + + +
    +

    +Hosting & Deployment

    @@ -164,18 +200,50 @@ Simple, yet powerful. Learn how to use Congo and its features.
    -