feat: port docs layout

See #3010
This commit is contained in:
George Cushen committed 2024-02-17 21:29:18 +00:00
1 parent 5ab1d19b01
commit ae7f0c5979
24 files changed
+434 -64

No files matched your search

@@ -1,2 +1,3 @@
@import "biography.css";
@import "skills.css";
@import "navbar.css";
@@ -1,5 +1,7 @@
@import "page.css";
@import "task-list.css";
@import "copy.css";
@import "sidebar.css";
@import "sidebar-left.css";
@import "charts.css";
@import "steps.css";
@import "cards.css";
@@ -0,0 +1,43 @@
:root {
--hb-cols: 2;
}
.hb-cards {
grid-template-columns: repeat(auto-fill, minmax(max(250px, calc((100% - 1rem * 2) / var(--hb-cols))), 1fr));
}
.hb-card {
@apply flex flex-col justify-start overflow-hidden rounded-lg border border-gray-200 text-current no-underline dark:shadow-none hover:shadow-gray-100 dark:hover:shadow-none shadow-gray-100 active:shadow-sm active:shadow-gray-200 transition-all duration-200;
@apply hover:border-gray-300 bg-transparent shadow-sm dark:border-neutral-800 hover:bg-slate-50 hover:shadow-md dark:hover:border-neutral-700 dark:hover:bg-neutral-900;
}
.hb-card-title {
@apply flex font-semibold items-start gap-2 text-gray-700 hover:text-gray-900 dark:text-neutral-200 dark:hover:text-neutral-50 items-center;
}
.hb-card-subtitle {
@apply line-clamp-3 text-sm font-normal text-gray-500 dark:text-gray-400 px-4 mb-4 mt-2;
}
.hb-card:hover svg {
color: currentcolor;
}
.hb-card svg {
width: 1.5rem;
color: #0003;
transition: color 0.3s ease;
}
.hb-card p {
margin-top: 0.5rem;
}
.dark .hb-card svg {
color: #fff6;
}
.dark .hb-card:hover svg {
color: currentcolor;
}
@@ -0,0 +1,70 @@
@media (max-width: 767px) {
.hb-sidebar-container {
@apply fixed top-0 w-full bottom-0 z-[15] pt-[calc(var(--navbar-height))] overscroll-contain bg-white dark:bg-slate-700;
contain: layout style;
backface-visibility: hidden;
transition: transform 0.8s cubic-bezier(0.52, 0.16, 0.04, 1);
will-change: transform, opacity;
}
}
.hb-sidebar-container {
@apply flex flex-col print:hidden md:top-16 md:shrink-0 md:w-64 md:self-start;
li > div {
@apply h-0;
}
li.open > div {
@apply h-auto pt-1;
}
li.open > a > span > svg > path {
@apply rotate-90;
}
}
.hb-sidebar-list {
@apply relative flex flex-col gap-1 before:absolute before:inset-y-1 before:w-px before:bg-gray-200 before:content-[""] ltr:ml-3 ltr:pl-3 ltr:before:left-0 rtl:mr-3 rtl:pr-3 rtl:before:right-0 dark:before:bg-neutral-800;
}
.hb-scrollbar {
@apply overflow-y-auto overflow-x-hidden p-4 grow md:h-[calc(100vh-var(--navbar-height)-var(--menu-height))];
scrollbar-width: thin;
scrollbar-color: oklch(55.55% 0 0 / 40%) transparent;
scrollbar-gutter: stable;
&::-webkit-scrollbar {
@apply w-3 h-3;
}
&::-webkit-scrollbar-track {
@apply bg-transparent;
}
&::-webkit-scrollbar-thumb {
@apply rounded-[10px];
}
&:hover::-webkit-scrollbar-thumb {
border: 3px solid transparent;
background-color: var(--tw-shadow-color);
background-clip: content-box;
@apply shadow-neutral-500/20 hover:shadow-neutral-500/40;
}
}
.hb-docs-link {
@apply flex rounded px-2 py-1.5 text-sm transition-colors [word-break:break-word] cursor-pointer [-webkit-tap-highlight-color:transparent] [-webkit-touch-callout:none] gap-2 before:opacity-25 before:content-['#'] text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-primary-100/5 dark:hover:text-gray-50;
}
.hb-sidebar-mobile-menu {
@apply fixed inset-0 z-10 bg-black/80 dark:bg-black/60 hidden [transition:background-color_1.5s_ease];
}
.hb-sidebar-mobile-toc {
@apply flex flex-col gap-1 relative before:absolute before:inset-y-1 before:w-px before:bg-gray-200 before:content-[""] dark:before:bg-neutral-800 ltr:pl-3 ltr:before:left-0 rtl:pr-3 rtl:before:right-0 ltr:ml-3 rtl:mr-3;
}
.hb-sidebar-custom-link {
@apply flex items-center justify-between gap-2 cursor-pointer rounded px-2 py-1.5 text-sm transition-colors [-webkit-tap-highlight-color:transparent] [-webkit-touch-callout:none] [word-break:break-word];
}
@@ -1,46 +0,0 @@
@media (max-width: 767px) {
.hb-sidebar-container {
@apply fixed top-0 w-full bottom-0 z-[15] pt-[calc(var(--navbar-height))] overscroll-contain bg-white dark:bg-slate-700;
contain: layout style;
backface-visibility: hidden;
transition: transform 0.8s cubic-bezier(0.52, 0.16, 0.04, 1);
will-change: transform, opacity;
}
}
.hb-sidebar-container {
li > div {
@apply h-0;
}
li.open > div {
@apply h-auto pt-1;
}
li.open > a > span > svg > path {
@apply rotate-90;
}
}
.hb-scrollbar {
scrollbar-width: thin;
scrollbar-color: oklch(55.55% 0 0 / 40%) transparent;
scrollbar-gutter: stable;
&::-webkit-scrollbar {
@apply w-3 h-3;
}
&::-webkit-scrollbar-track {
@apply bg-transparent;
}
&::-webkit-scrollbar-thumb {
@apply rounded-[10px];
}
&:hover::-webkit-scrollbar-thumb {
border: 3px solid transparent;
background-color: var(--tw-shadow-color);
background-clip: content-box;
@apply shadow-neutral-500/20 hover:shadow-neutral-500/40;
}
}
@@ -0,0 +1,16 @@
.hb-steps {
@apply ml-4 mb-12 pl-6 border-l border-gray-200 dark:border-neutral-800 [counter-reset:hb_step];
}
.hb-steps h3 {
counter-increment: hb-step;
&::before {
@apply absolute w-[33px] h-[33px];
@apply rounded-full border-4 border-white dark:border-slate-300;
@apply bg-gray-100 dark:bg-neutral-800;
@apply text-neutral-400 text-base font-normal text-center -indent-px;
@apply mt-[3px] ml-[-41px];
content: counter(hb-step);
}
}
+1 -1
View File
@@ -71,5 +71,5 @@
*/
.powered-by a {
@apply underline text-blue-600 hover:text-blue-800
@apply underline text-blue-600 hover:text-blue-800 dark:text-blue-300 dark:hover:text-blue-200;
}
@@ -3,7 +3,6 @@
/*! Hugo Blox Components | https://hugoblox.com */
@import "main.css";
@import "nav.css";
@import "./components/all.css";
@import "./blox/all.css";
@import "chroma.css";
+2 -2
View File
@@ -1,2 +1,2 @@
/*! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com*/*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter var,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;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;-webkit-font-feature-settings:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{opacity:1;color:#9ca3af}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-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}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-ms-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;Line truncated
/*! Hugo Blox Components | https://hugoblox.com */:root{--color-neutral-50:250 250 250;--color-neutral-100:245 245 245;--color-neutral-200:229 229 229;--color-neutral-300:212 212 212;--color-neutral-400:163 163 163;--color-neutral-500:115 115 115;--color-neutral-600:82 82 82;--color-neutral-700:64 64 64;--color-neutral-800:38 38 38;--color-neutral-900:23 23 23;--color-neutral-950:10 10 10;--color-secondary-50:250 250 250;--color-secondary-100:244 244 245;--color-secondary-200:228 228 231;--color-secondary-300:212 212 216;--color-secondary-400:161 161 170;--color-secondary-500:113 113 122;--color-secondary-600:82 82 91;--color-secondary-700:63 63 70;--color-secondary-800:39 39 42;--color-secondary-900:24 24 27;--color-secondary-950:9 9 11}.hbb-section{padding-top:6rem;padding-bottom:6rem}.home-section-bg{position:absolute;top:0;left:0;height:100%;width:100%;z-index:-1}.home-section-bg.bg-image{background-position:50%;background-repeat:no-repeat;background-size:cover}.bg-video{position:absolute;top:0;max-height:none}.bg-video.flip{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.parallax{background-attachment:fixed}.powered-by a{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity));text-decoration-line:underline}.powered-by a:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.navbar{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{font-size:1.25rem;line-height:1.75rem;font-weight:600;--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}:is(.dark .navbar-brand){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.navbar-brand svg{height:1em;max-width:100%}.navbar-brand img,.navbar-brand svg{display:inline-block;max-height:100%;width:auto}input#nav-toggle:checked+label #show-button{display:none}input#nav-toggle:checked+label #hide-button,input#nav-toggle:checked~#nav-menu{display:block}#site-header.header{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding-top:.75rem;padding-bottom:.75rem;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);-webkit-box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark #site-header.header){--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}.navbar-nav{text-align:center}@media (min-width:1024px){.navbar-nav{text-align:left}}.nav-link{display:block;padding:.75rem;font-weight:600;-webkit-transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,-webkit-box-shadow,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-box-shadow,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.nav-link:hover{--tw-text-opacity:1;color:rgb(var(--color-primary-700)/var(--tw-text-opacity))}:is(.dark .nav-link){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .nav-link:hover){--tw-text-opacity:1;color:rgb(var(--color-primary-300)/var(--tw-text-opacity))}@media (min-width:1024px){.nav-link{padding:.75rem .5rem}}.nav-dropdown{margin-right:0}.nav-dropdown>svg{pointer-events:none}.nav-dropdown.active .nav-dropdown-list{display:block}.nav-dropdown-list{z-index:10;display:none;min-width:180px;border-radius:.25rem;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding-top:1rem;padding-bottom:1rem;--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);-webkit-box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .nav-dropdown-list){--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity))}@media (min-width:1024px){.nav-dropdown-list{visibility:hidden;position:absolute;display:block;opacity:0}}.nav-dropdown-item{padding-left:1rem;padding-right:1rem}:is(.dark .nav-dLine truncated
/*! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com*/*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter var,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;-webkit-font-feature-settings:normal;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;-webkit-font-feature-settings:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{opacity:1;color:#9ca3af}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-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}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-ms-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;Line truncated
/*! Hugo Blox Components | https://hugoblox.com */:root{--color-neutral-50:250 250 250;--color-neutral-100:245 245 245;--color-neutral-200:229 229 229;--color-neutral-300:212 212 212;--color-neutral-400:163 163 163;--color-neutral-500:115 115 115;--color-neutral-600:82 82 82;--color-neutral-700:64 64 64;--color-neutral-800:38 38 38;--color-neutral-900:23 23 23;--color-neutral-950:10 10 10;--color-secondary-50:250 250 250;--color-secondary-100:244 244 245;--color-secondary-200:228 228 231;--color-secondary-300:212 212 216;--color-secondary-400:161 161 170;--color-secondary-500:113 113 122;--color-secondary-600:82 82 91;--color-secondary-700:63 63 70;--color-secondary-800:39 39 42;--color-secondary-900:24 24 27;--color-secondary-950:9 9 11}.hbb-section{padding-top:6rem;padding-bottom:6rem}.home-section-bg{position:absolute;top:0;left:0;height:100%;width:100%;z-index:-1}.home-section-bg.bg-image{background-position:50%;background-repeat:no-repeat;background-size:cover}.bg-video{position:absolute;top:0;max-height:none}.bg-video.flip{-webkit-transform:rotateY(180deg);transform:rotateY(180deg)}.parallax{background-attachment:fixed}.powered-by a{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity));text-decoration-line:underline}.powered-by a:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}:is(.dark .powered-by a){--tw-text-opacity:1;color:rgb(147 197 253/var(--tw-text-opacity))}:is(.dark .powered-by a:hover){--tw-text-opacity:1;color:rgb(191 219 254/var(--tw-text-opacity))}.page-wrapper{min-height:100vh;display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:100%}.page-footer,.page-header{-ms-flex-negative:0;flex-shrink:0}.page-body{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.article-header{position:relative;clear:both}.article-banner{width:100%;height:260px;-o-object-fit:cover;object-fit:cover}.featured-image-wrapper{position:relative;padding-left:0;padding-right:0}.featured-image{position:relative;width:100%;display:block;margin:0 auto}.article-header-caption{position:absolute;bottom:0;right:0;margin:0 auto;padding:2px 5px;color:#fff;font-size:.7em;background:#000;text-align:right;z-index:5;opacity:.65;border-radius:5px 0 0}@media (min-width:64em){.article-header-caption{padding:5px 10px}}.article-header-caption a{color:#fff;text-decoration:none}#page-bg{position:fixed;left:0;right:0;height:100%;width:100%;z-index:-1;display:block}ul.task-list{list-style:none}ul.task-list li input[type=checkbox]{margin-right:.5rem}ul.task-list input[type=checkbox]:checked{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:1em;height:1em;border:none;background:initial;position:relative}ul.task-list input[type=checkbox]:not(:checked){width:.9em;height:.9em}ul.task-list input[type=checkbox]:checked:after{content:"✅"}.highlight{position:relative;z-index:0}.highlight:hover>.copy-button{visibility:visible}.copy-button{visibility:hidden;position:absolute;right:0;top: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:rgb(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:rgb(var(--color-neutral-700)/var(--tw-text-opacity));opacity:.9}:is(.dark .copy-button){--tw-bg-opacity:1;background-color:rgb(var(--color-neutral-600)/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(var(--color-neutral-200)/var(--tw-text-opacity))}.copy-button:active,.copy-button:active:hover,.copy-button:focus,.copy-button:hover{--tw-bg-opacity:1;background-color:rgb(var(--color-primary-100)/var(--tw-bg-opacity))}:is(.dark .copy-button:active),:is(.dark .copy-button:active:hover),:is(.dark .copy-button:focus),:is(.dark .copy-button:hover){--tw-bg-opacity:1;background-color:rgb(var(--color-primary-600)/var(--tw-bg-opacity))}@media (max-width:767px){.hb-sidebar-container{position:fixed;top:0;bottom:0;z-index:15;width:100%;-ms-scroll-chaining:none;overscroll-behavior:contain;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding-top:calc(var(--navbar-height))}.hb-sidebar-container,:is(.dark .hb-sidebar-container){--tw-bg-opacity:1}:is(.dark .hb-sidebar-container){background-color:rgb(51 65 85/var(--tw-bg-opacity))}.hb-sidebar-container{contain:layout style;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .8s cubic-bezier(.52,.16,.04,1);transition:-webkit-transform .8s cubic-bezier(.52,.16,.04,1);transition:transform .8s cubic-bezier(.52,.16,.04,1);transition:transform .8s cubic-bezier(.52,.16,.04,1),-webkit-transform .8s cubic-bezier(.52,.16,.04,1);will-change:transform,opacity}}.hb-sidebar-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flLine truncated
@@ -4,6 +4,8 @@ const applyScrollPadding = () => {
const header = document.querySelector('.page-header');
let position = header.getBoundingClientRect();
document.documentElement.style.scrollPaddingTop = position.height.toString() + 'px';
const r = document.querySelector(':root');
r.style.setProperty('--navbar-height', position.height.toString() + 'px');
};
window.addEventListener("DOMContentLoaded", () => {
@@ -0,0 +1,66 @@
document.addEventListener("DOMContentLoaded", function () {
const buttons = document.querySelectorAll("[data-hb-sidebar-toggle]");
buttons.forEach(function (button) {
button.addEventListener("click", function (e) {
e.preventDefault();
const parent = button.parentElement.parentElement;
if (parent) {
parent.classList.toggle("open")
}
});
});
});
// Hamburger menu for mobile navigation
document.addEventListener('DOMContentLoaded', function () {
const menu = document.querySelector('#nav-toggle');
const overlay = document.querySelector('.hb-sidebar-mobile-menu');
const sidebarContainer = document.querySelector('.hb-sidebar-container');
if (!overlay){
return;
}
// Initialize the overlay
const overlayClasses = ['fixed', 'z-10', 'inset-0', 'bg-black/80', 'dark:bg-black/60'];
overlay.classList.add('bg-transparent');
overlay.classList.remove("hidden", ...overlayClasses);
function toggleMenu() {
// Toggle the hamburger menu
// See `hb-nav.js` - it handles the default behavior (irrespective of if sidebar is shown).
// When menu is open, show the navigation sidebar
sidebarContainer.classList.toggle('max-md:[transform:translate3d(0,-100%,0)]');
sidebarContainer.classList.toggle('max-md:[transform:translate3d(0,0,0)]');
// When menu is open, prevent body from scrolling
document.body.classList.toggle('overflow-hidden');
document.body.classList.toggle('md:overflow-auto');
}
menu.addEventListener('click', (e) => {
console.debug("Hamburger clicked.");
e.preventDefault();
toggleMenu();
if (overlay.classList.contains('bg-transparent')) {
// Show overlay
overlay.classList.add(...overlayClasses);
overlay.classList.remove('bg-transparent');
} else {
// Hide overlay
overlay.classList.remove(...overlayClasses);
overlay.classList.add('bg-transparent');
}
});
overlay.addEventListener('click', (e) => {
e.preventDefault();
toggleMenu();
// Hide overlay
overlay.classList.remove(...overlayClasses);
overlay.classList.add('bg-transparent');
});
});
@@ -1,6 +1,6 @@
{{ define "main" }}
<div class="mx-auto flex max-w-screen-xl">
{{ partial "components/sidebar.html" (dict "context" . "disable" true "empty" true) }}
{{ partial "components/sidebar.html" (dict "context" . "no_sidebar" true) }}
{{ partial "components/toc.html" . }}
<article class="w-full break-words flex min-h-[calc(100vh-var(--navbar-height))] min-w-0 justify-center pb-8 pr-[calc(env(safe-area-inset-right)-1.5rem)]">
<main class="w-full min-w-0 max-w-6xl px-6 pt-4 md:px-12">
@@ -0,0 +1,3 @@
{{- define "main" -}}
{{ partial "docs_layout.html" . }}
{{- end -}}
@@ -0,0 +1,3 @@
{{- define "main" -}}
{{ partial "docs_layout.html" . }}
{{- end -}}
@@ -7,7 +7,7 @@
{{ $block := .wcBlock }}
<div class="relative isolate px-6 pt-14 lg:px-8">
<div class="mx-auto max-w-2xl py-32 sm:py-48 lg:py-56">
<div class="mx-auto max-w-2xl {{if not ($block.design.no_padding | default false) }}py-32 sm:py-48 lg:py-56{{end}}">
{{ if $block.content.announcement.text }}
{{ $announcement := $block.content.announcement }}
@@ -1,12 +1,145 @@
{{- $is_disabled := .disable | default false -}}
{{- $is_empty := .empty | default false -}}
{{- $context := .context -}}
{{- $sidebar_class := cond $is_disabled (cond $is_empty "md:hidden xl:block" "md:hidden") "md:sticky" -}}
{{- $no_sidebar := .no_sidebar | default true -}}
{{- $pad_sidebar := true -}}
{{- $sidebar_dynamic_class := cond $no_sidebar (cond $pad_sidebar "md:hidden xl:block" "md:hidden") "md:sticky" -}}
<div class="hidden mobile-menu-overlay [transition:background-color_1.5s_ease] fixed inset-0 z-10 bg-black/80 dark:bg-black/60"></div>
{{- $root_section := cond (eq site.Home.Type "docs") site.Home $context.FirstSection -}}
{{- $page_url := $context.RelPermalink -}}
<aside class="hb-sidebar-container flex flex-col print:hidden md:top-16 md:shrink-0 md:w-64 md:self-start max-md:[transform:translate3d(0,-100%,0)] {{ $sidebar_class }}">
<div class="hb-scrollbar overflow-y-auto overflow-x-hidden p-4 grow md:h-[calc(100vh-var(--navbar-height)-var(--menu-height))]">
<div class="max-xl:hidden h-0 w-64 shrink-0"></div>
<div class="hb-sidebar-mobile-menu"></div>
<!-- Explicit `transform` class as we toggle it in JS -->
<aside class="hb-sidebar-container max-md:[transform:translate3d(0,-100%,0)] {{ $sidebar_dynamic_class }}">
<!-- Search bar on small screen -->
<div class="px-4 pt-4 md:hidden">
<!-- Currently, use the navbar search button instead -->
{{/* partial "search.html" */}}
</div>
<div class="hb-scrollbar">
<ul class="flex flex-col gap-1 md:hidden">
<!-- Navigation links -->
{{ template "menu-links" (dict "context" site.Home "pageURL" $page_url "page" $context "toc" true) -}}
{{ template "custom-menu-links" }}
</ul>
<!-- Sidebar on large screen -->
{{- if $no_sidebar -}}
<div class="max-xl:hidden h-0 w-64 shrink-0"></div>
{{- else -}}
<ul class="flex flex-col gap-1 max-md:hidden">
{{ template "menu-links" (dict "context" $root_section "page" $context "pageURL" $page_url) }}
{{ template "custom-menu-links" }}
</ul>
{{ end -}}
</div>
</aside>
{{- define "menu-links" -}}
{{ template "link-tree" (dict "context" .context "level" 0 "page" .page "pageURL" .pageURL "toc" (.toc | default false)) }}
{{- end -}}
{{- define "link-tree" -}}
{{- if ge .level 4 -}}
{{- return -}}
{{- end -}}
{{- $context := .context -}}
{{- $page := .page }}
{{- $page_url := .page.RelPermalink -}}
{{- $level := .level -}}
{{- $toc := .toc | default false -}}
{{- with $items := union .context.RegularPages .context.Sections -}}
{{- $items = where $items "Params.sidebar.hidden" "!=" true -}}
{{- if eq $level 0 -}}
{{- range $items.ByWeight }}
{{- $active := eq $page_url .RelPermalink -}}
{{- $is_expanded := or (.Params.sidebar.open) (.IsAncestor $page) $active | default false }}
<li class="{{ if $is_expanded }}open{{ end }}">
{{- template "custom-menu-link" dict "context" . "active" $active "title" .LinkTitle "link" .RelPermalink -}}
{{- if and $toc $active -}}
{{- template "mobile-toc" dict "page" . -}}
{{- end -}}
{{- template "link-tree" dict "context" . "page" $page "pageURL" $page_url "level" (add $level 1) "toc" $toc -}}
</li>
{{- end -}}
{{- else -}}
<div class="ltr:pr-0 overflow-hidden">
<ul class="hb-sidebar-list">
{{- range $items.ByWeight }}
{{- $active := eq $page_url .RelPermalink -}}
{{- $is_expanded := or (.Params.sidebar.open) (.IsAncestor $page) $active | default false }}
{{- $title := .LinkTitle | default .File.BaseFileName -}}
<li class="flex flex-col {{ if $is_expanded }}open{{ end }}">
{{- template "custom-menu-link" dict "context" . "active" $active "title" $title "link" .RelPermalink -}}
{{- if and $toc $active -}}
{{ template "mobile-toc" dict "page" . }}
{{- end }}
{{ template "link-tree" dict "context" . "page" $page "pageURL" $page_url "level" (add $level 1) "toc" $toc }}
</li>
{{- end -}}
</ul>
</div>
{{- end -}}
{{- end }}
{{- end -}}
{{- define "mobile-toc" -}}
{{ $page := .page }}
{{ with $page.Fragments.Headings }}
<ul class="hb-sidebar-mobile-toc">
{{- range . }}
{{- with .Headings }}
{{- range . -}}
<li>
<a
href="#{{ anchorize .ID }}"
class="hb-docs-link"
>
{{- .Title -}}
</a>
</li>
{{ end -}}
{{ end -}}
{{ end -}}
</ul>
{{ end }}
{{- end -}}
{{- define "custom-menu-links" -}}
{{- range site.Menus.sidebar -}}
{{- $name := .Name -}}
{{ if eq .Params.type "separator" }}
<li class="[word-break:break-word] mt-5 mb-2 px-2 py-1.5 text-sm font-semibold text-gray-900 first:mt-0 dark:text-gray-100 cursor-default">
<span>{{ $name }}</span>
</li>
{{ else }}
<li>{{ template "custom-menu-link" dict "active" false "title" $name "link" (.URL | relLangURL) }}</li>
{{ end }}
{{- end -}}
{{- end -}}
{{- define "custom-menu-link" -}}
{{- $is_external := strings.HasPrefix .link "http" -}}
{{- $open := .open | default false -}}
<a
class="hb-sidebar-custom-link
{{- if .active }}
sidebar-active-item bg-primary-100 font-semibold text-primary-800 dark:bg-primary-300 dark:text-primary-900
{{- else }}
text-gray-500 hover:bg-gray-100 hover:text-gray-900 dark:text-gray-300 dark:hover:bg-primary-100/5 dark:hover:text-gray-50
{{- end -}}"
href="{{ .link }}"
{{ if $is_external }}target="_blank" rel="noreferer"{{ end }}
>
{{- .title -}}
{{- with .context }}
{{- if or .RegularPages .Sections }}
<span data-hb-sidebar-toggle>
<svg fill="none" viewBox="0 0 24 24" stroke="currentColor" class="h-[18px] min-w-[18px] rounded-sm p-0.5 hover:bg-gray-800/5 dark:hover:bg-gray-100/5"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" class="origin-center transition-transform rtl:-rotate-180"></path></svg>
</span>
{{- end }}
{{ end -}}
</a>
{{- end -}}
@@ -0,0 +1,20 @@
<div class="mx-auto flex max-w-screen-xl">
{{ partial "components/sidebar.html" (dict "context" . "no_sidebar" false) }}
{{ partial "components/toc.html" . }}
<article class="flex w-full min-w-0 min-h-[calc(100vh-var(--navbar-height))] justify-center break-words pb-8 pr-[calc(env(safe-area-inset-right)-1.5rem)]">
<main class="prose prose-slate lg:prose-xl dark:prose-invert w-full min-w-0 max-w-6xl px-6 pt-4 md:px-12">
<div class="mb-1">
{{ partial "components/breadcrumb.html" . }}
</div>
<div class="content">
<h1>{{ .Title }}</h1>
{{ .Content }}
</div>
{{ partial "components/last-edited.html" . }}
{{ partial "components/next-in-series.html" . }}
{{ partial "comments.html" . }}
</main>
</article>
</div>
@@ -253,7 +253,8 @@
{{- $js_theme := resources.Get "js/hb-theme.js" | resources.Minify -}}
{{- $js_lang := resources.Get "js/hb-i18n.js" | resources.Minify -}}
{{- $js_nav := resources.Get "js/hb-nav.js" | resources.Minify -}}
{{ $js_bundle := slice $js_bundle_head $js_academic $js_theme $js_lang $js_nav | resources.Concat (printf "js/hugo-blox-%s.min.js" .Lang) }}
{{- $js_sidebar := resources.Get "js/hb-sidebar.js" | resources.Minify -}}
{{ $js_bundle := slice $js_bundle_head $js_academic $js_theme $js_lang $js_nav $js_sidebar | resources.Concat (printf "js/hugo-blox-%s.min.js" .Lang) }}
{{- if hugo.IsProduction -}}
{{ $js_bundle = $js_bundle | fingerprint "sha256" }}
{{- end -}}
@@ -1,9 +1,16 @@
{{ $item := .item }}
{{ $link := $item.RelPermalink }}
{{ $target := "" }}
{{ if $item.Params.external_link }}
{{ $link = $item.Params.external_link }}
{{ $target = "target=\"_blank\" rel=\"noopener\"" }}
{{ end }}
{{ $resource := partial "functions/get_featured_image.html" $item }}
{{ $anchor := $item.Params.image.focal_point | default "Center" }}
<a href="{{ $item.RelPermalink }}" class="mb-5">
<a href="{{ $link }}" {{ $target | safeHTMLAttr }} class="mb-5">
<div class="md:flex">
<div class="md:flex-shrink-0 overflow-hidden">
{{ with $resource }}
@@ -0,0 +1,35 @@
{{/*
Docs: https://docs.hugoblox.com/content/writing-markdown-latex/
*/}}
{{- $url := .Get "url" -}}
{{- $is_external := strings.HasPrefix $url "http" -}}
{{- $url = cond (strings.HasPrefix $url "/") ($url | relURL) $url -}}
{{- $icon := .Get "icon" -}}
{{- $title := .Get "title" -}}
{{- $subtitle := .Get "subtitle" -}}
<a
class="hb-card group"
{{- if $url -}}
href="{{ $url }}" {{ with $is_external }}target="_blank" rel="noreferrer"{{ end -}}
{{- end -}}
>
{{/* Adjust padding depending on content */}}
{{- $padding := "p-4" -}}
{{- with $subtitle -}}
{{- $padding = "pt-4 px-4" -}}
{{- end -}}
<span class="hb-card-title {{ $padding }}">
{{- with $icon }}
{{ partial "functions/get_icon" (dict "name" $icon "attributes" "style=\"height: 1em; width: 1em;\"") -}}
{{- end -}}
{{- $title -}}
</span>
{{- with $subtitle -}}
<div class="hb-card-subtitle">{{- $subtitle | markdownify -}}</div>
{{- end -}}
</a>
@@ -0,0 +1,9 @@
{{/*
Docs: https://docs.hugoblox.com/content/writing-markdown-latex/
*/}}
{{ $col_count := .Get "cols" | default "1" }}
<div class="hb-cards mt-4 grid gap-4 not-prose" style="--hb-cols: {{ $col_count }};">
{{ .Inner }}
</div>
@@ -11,9 +11,12 @@
Additional style for <details> tag.
*/}}
{{- $title := .Get "text" | default "" -}}
{{- $id := printf "spoiler-%d" .Ordinal -}}
<details class="spoiler {{ .Get "class" }}" {{ with .Get "style" }}style="{{ . | safeCSS }}"{{ end }} id="{{$id}}">
<summary>{{ .Get "text" | markdownify | emojify }}</summary>
<p>{{ .Inner | markdownify | emojify }}</p>
<summary class="cursor-pointer">{{ $title }}</summary>
<div class="rounded-lg bg-neutral-50 dark:bg-neutral-800 p-2">
{{ .InnerDeindent | markdownify }}
</div>
</details>
@@ -0,0 +1,3 @@
<div class="hb-steps">
{{- .Inner -}}
</div>