Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/blog.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Otto <markd.otto@gmail.com>2022-05-13 20:38:14 +0300
committerGitHub <noreply@github.com>2022-05-13 20:38:14 +0300
commit679fbd9e086c3e01f68de0ef824c13ebcc92bfb3 (patch)
tree5cf639972d51e507de2bea444c2434d8fdbe7704
parentf5fae5d1028261481b78474a1e2144a365fc576f (diff)
Redesign the blog (#256)
* Redesign the blog * tweaks * typo * unused var * load async * Remove subnav, update sidebar to match docs sidebar * Update hero.html * Fine-tune some things, pull in Bootstrap via npm * fix markup * Remove commented out CSS * Fix layout * Drop old .embed-responsive for .ratio * Sync syntax changes * remove code comment * Fixes again * add fathom * Update to latest Bootstrap release * fix error * remove unused vars * one check * Config version Co-authored-by: XhmikosR <xhmikosr@gmail.com>
-rw-r--r--config.yml13
-rw-r--r--package-lock.json45
-rw-r--r--package.json1
-rw-r--r--src/assets/scss/_ads.scss12
-rw-r--r--src/assets/scss/_buttons.scss64
-rw-r--r--src/assets/scss/_navbar.scss101
-rw-r--r--src/assets/scss/_subnav.scss4
-rw-r--r--src/assets/scss/_syntax.scss181
-rw-r--r--src/assets/scss/_theme.scss107
-rw-r--r--src/assets/scss/_variables.scss24
-rw-r--r--src/assets/scss/style.scss134
-rw-r--r--src/layouts/_default/baseof.html18
-rw-r--r--src/layouts/_default/home.html6
-rw-r--r--src/layouts/partials/analytics.html1
-rw-r--r--src/layouts/partials/author-info.html6
-rw-r--r--src/layouts/partials/favicons.html4
-rw-r--r--src/layouts/partials/hero.html45
-rw-r--r--src/layouts/partials/icons.html19
-rw-r--r--src/layouts/partials/icons/hamburger.svg3
-rw-r--r--src/layouts/partials/navbar.html118
-rw-r--r--src/layouts/partials/scripts.html (renamed from src/layouts/partials/lazyload.html)3
-rw-r--r--src/layouts/partials/stylesheet.html2
-rw-r--r--src/layouts/partials/subnav.html8
-rw-r--r--src/layouts/partials/video.html4
-rw-r--r--src/layouts/posts/single.html4
-rw-r--r--src/static/assets/brand/bootstrap-logo-black.svg1
-rw-r--r--src/static/assets/brand/bootstrap-logo-shadow.pngbin0 -> 48625 bytes
-rw-r--r--src/static/assets/brand/bootstrap-logo-white.svg1
-rw-r--r--src/static/assets/brand/bootstrap-logo.svg1
-rw-r--r--src/static/assets/brand/bootstrap-social-logo.pngbin0 -> 145590 bytes
-rw-r--r--src/static/assets/brand/bootstrap-social.pngbin0 -> 54961 bytes
31 files changed, 576 insertions, 354 deletions
diff --git a/config.yml b/config.yml
index 1d768085..dd455549 100644
--- a/config.yml
+++ b/config.yml
@@ -74,17 +74,16 @@ module:
target: static/apple-touch-icon.png
- source: src/static/assets/img/favicons/favicon.ico
target: static/favicon.ico
+ - source: node_modules/bootstrap/scss
+ target: assets/scss/bootstrap
+ - source: node_modules/bootstrap/dist/js/bootstrap.min.js
+ target: assets/js/bootstrap.min.js
params:
- current_version: "5.1.3"
- docs_version: "5.1"
+ current_version: "5.2.0-beta1"
+ docs_version: "5.2"
description: "Official blog for the Bootstrap framework."
author: "Mark Otto"
- assets:
- css:
- # Use https://www.srihash.org to generate the hash, or use the hash from upstream
- uri: "https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css"
- sri: "sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn"
main: "https://getbootstrap.com"
github_org: "https://github.com/twbs"
repo: "https://github.com/twbs/blog"
diff --git a/package-lock.json b/package-lock.json
index ee042396..faa6bb36 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,6 +10,7 @@
"license": "MIT",
"devDependencies": {
"autoprefixer": "^10.4.7",
+ "bootstrap": "5.2.0-beta1",
"cross-env": "^7.0.3",
"find-unused-sass-variables": "^4.0.4",
"hugo-bin": "^0.86.0",
@@ -138,6 +139,17 @@
"node": ">= 8"
}
},
+ "node_modules/@popperjs/core": {
+ "version": "2.11.5",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz",
+ "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==",
+ "dev": true,
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/popperjs"
+ }
+ },
"node_modules/@sindresorhus/is": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
@@ -566,6 +578,25 @@
"safe-buffer": "^5.1.1"
}
},
+ "node_modules/bootstrap": {
+ "version": "5.2.0-beta1",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.0-beta1.tgz",
+ "integrity": "sha512-6qbgs177WZEFY4SLQUq3tEHayYG80nfDmyTpdKi0MJqRMdS+HAoq24+YKfx6wf+nHY0rx8zrh477J1lFu4WzOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/twbs"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/bootstrap"
+ }
+ ],
+ "peerDependencies": {
+ "@popperjs/core": "^2.11.5"
+ }
+ },
"node_modules/boxen": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
@@ -6710,6 +6741,13 @@
"fastq": "^1.6.0"
}
},
+ "@popperjs/core": {
+ "version": "2.11.5",
+ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz",
+ "integrity": "sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw==",
+ "dev": true,
+ "peer": true
+ },
"@sindresorhus/is": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
@@ -7016,6 +7054,13 @@
"safe-buffer": "^5.1.1"
}
},
+ "bootstrap": {
+ "version": "5.2.0-beta1",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.0-beta1.tgz",
+ "integrity": "sha512-6qbgs177WZEFY4SLQUq3tEHayYG80nfDmyTpdKi0MJqRMdS+HAoq24+YKfx6wf+nHY0rx8zrh477J1lFu4WzOA==",
+ "dev": true,
+ "requires": {}
+ },
"boxen": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
diff --git a/package.json b/package.json
index ce147e21..55325763 100644
--- a/package.json
+++ b/package.json
@@ -34,6 +34,7 @@
},
"devDependencies": {
"autoprefixer": "^10.4.7",
+ "bootstrap": "5.2.0-beta1",
"cross-env": "^7.0.3",
"find-unused-sass-variables": "^4.0.4",
"hugo-bin": "^0.86.0",
diff --git a/src/assets/scss/_ads.scss b/src/assets/scss/_ads.scss
index b460acd9..b9321c37 100644
--- a/src/assets/scss/_ads.scss
+++ b/src/assets/scss/_ads.scss
@@ -8,24 +8,24 @@
position: static;
display: block;
max-width: 400px;
- padding: 15px 15px 15px 160px;
- margin: 2rem auto 0;
+ padding: 12px 12px 12px 154px;
+ margin: 1.5rem auto 0;
overflow: hidden;
font-size: .875rem;
line-height: 1.4;
text-align: left;
- background-color: rgba(0, 0, 0, .05);
+ background-color: var(--bs-gray-100);
border-radius: .5rem;
a {
- color: rgba(255, 255, 255, .75);
+ color: var(--bs-gray-600);
text-decoration: none;
}
}
.carbon-img {
float: left;
- margin-left: -145px;
+ margin-left: -140px;
> img {
margin-bottom: 0;
@@ -35,5 +35,5 @@
.carbon-poweredby {
display: block;
margin-top: .75rem;
- color: rgba(255, 255, 255, .5) !important;
+ color: var(--bs-gray-600) !important;
}
diff --git a/src/assets/scss/_buttons.scss b/src/assets/scss/_buttons.scss
index 25bcbbd4..13bd6e48 100644
--- a/src/assets/scss/_buttons.scss
+++ b/src/assets/scss/_buttons.scss
@@ -2,36 +2,44 @@
//
// Custom buttons for the docs.
+// scss-docs-start btn-css-vars-example
.btn-bd-primary {
- font-weight: 600;
- color: $bd-purple-bright;
- border-color: $bd-purple-bright;
-
- &:hover,
- &:active {
- color: $white;
- background-color: $bd-purple-bright;
- border-color: $bd-purple-bright;
- }
-
- &:focus {
- box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25);
- }
+ --bs-btn-font-weight: 600;
+ --bs-btn-color: var(--bs-white);
+ --bs-btn-bg: var(--bd-violet);
+ --bs-btn-border-color: var(--bd-violet);
+ --bs-btn-border-radius: .5rem;
+ --bs-btn-hover-color: var(--bs-white);
+ --bs-btn-hover-bg: #{shade-color($bd-violet, 10%)};
+ --bs-btn-hover-border-color: #{shade-color($bd-violet, 10%)};
+ --bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
+ --bs-btn-active-color: var(--bs-btn-hover-color);
+ --bs-btn-active-bg: #{shade-color($bd-violet, 20%)};
+ --bs-btn-active-border-color: #{shade-color($bd-violet, 20%)};
}
+// scss-docs-end btn-css-vars-example
-.btn-bd-download {
- font-weight: 600;
- color: $bd-download;
- border-color: $bd-download;
-
- &:hover,
- &:active {
- color: $bd-dark;
- background-color: $bd-download;
- border-color: $bd-download;
- }
+.btn-bd-accent {
+ --bs-btn-font-weight: 600;
+ --bs-btn-color: var(--bd-accent);
+ --bs-btn-border-color: var(--bd-accent);
+ --bs-btn-hover-color: var(--bd-dark);
+ --bs-btn-hover-bg: var(--bd-accent);
+ --bs-btn-hover-border-color: var(--bd-accent);
+ --bs-btn-focus-shadow-rgb: var(--bd-accent-rgb);
+ --bs-btn-active-color: var(--bs-btn-hover-color);
+ --bs-btn-active-bg: var(--bs-btn-hover-bg);
+ --bs-btn-active-border-color: var(--bs-btn-hover-border-color);
+}
- &:focus {
- box-shadow: 0 0 0 3px rgba($bd-download, .25);
- }
+.btn-bd-light {
+ --bs-btn-color: var(--bs-gray-600);
+ --bs-btn-border-color: var(--bs-gray-400);
+ --bs-btn-hover-color: var(--bd-violet);
+ --bs-btn-hover-border-color: var(--bd-violet);
+ --bs-btn-active-color: var(--bd-violet);
+ --bs-btn-active-bg: var(--bs-white);
+ --bs-btn-active-border-color: var(--bd-violet);
+ --bs-btn-focus-border-color: var(--bd-violet);
+ --bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
}
diff --git a/src/assets/scss/_navbar.scss b/src/assets/scss/_navbar.scss
index a5ac281c..9e023aaa 100644
--- a/src/assets/scss/_navbar.scss
+++ b/src/assets/scss/_navbar.scss
@@ -1,46 +1,85 @@
.bd-navbar {
- min-height: 4rem;
- background-color: $bd-purple-bright;
+ padding: .75rem 0;
+ background-color: transparent;
+ background-image: linear-gradient(to bottom, rgba(var(--bd-violet-rgb), 1), rgba(var(--bd-violet-rgb), .95));
+ box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15), inset 0 -1px 0 rgba(0, 0, 0, .15);
- @media (max-width: 991.98px) {
- .navbar-nav-scroll {
- width: 100%;
- height: 2.5rem;
- margin-top: .25rem;
- overflow: hidden;
+ .navbar-toggler {
+ padding: 0;
+ margin-right: -.5rem;
+ border: 0;
- .navbar-nav {
- padding-bottom: 2rem;
- overflow-x: auto;
- white-space: nowrap;
- -webkit-overflow-scrolling: touch;
- }
+ &:first-child {
+ margin-left: -.5rem;
+ }
+
+ .bi {
+ width: 1.5rem;
+ height: 1.5rem;
+ }
+
+ &:focus {
+ box-shadow: none;
+ }
+ }
+
+ .navbar-brand {
+ transition: .2s ease-in-out transform;
+
+ &:hover {
+ transform: rotate(-5deg) scale(1.1);
}
}
- .navbar-nav {
- .nav-link {
- padding-right: .5rem;
- padding-left: .5rem;
- color: rgba($white, .85);
+ .navbar-toggler,
+ .nav-link {
+ padding-right: $spacer * .25;
+ padding-left: $spacer * .25;
+ color: rgba($white, .85);
- &.active,
- &:hover,
- &:focus {
- color: $white;
- background-color: transparent;
- }
+ &:hover,
+ &:focus {
+ color: $white;
+ }
- &.active {
- font-weight: 600;
- }
+ &.active {
+ font-weight: 600;
+ color: $white;
}
}
.navbar-nav-svg {
display: inline-block;
- width: 1rem;
- height: 1rem;
- vertical-align: text-top;
+ vertical-align: -.125rem;
+ }
+
+ .offcanvas-lg {
+ background-color: var(--bd-violet);
+ border-left: 0;
+
+ @media (max-width: 992px) {
+ box-shadow: $box-shadow-lg;
+ }
+ }
+
+ .dropdown-toggle {
+ &:focus {
+ outline: 0;
+ }
+ }
+
+ .dropdown-menu {
+ --bs-dropdown-min-width: 12rem;
+ --bs-dropdown-link-hover-bg: rgba(var(--bd-violet-rgb), .1);
+ --bs-dropdown-font-size: .875rem;
+ box-shadow: $dropdown-box-shadow;
+ }
+
+ .dropdown-item.current {
+ font-weight: 600;
+ background-image: escape-svg($dropdown-active-icon);
+ background-repeat: no-repeat;
+ background-position: right $dropdown-item-padding-x top .6rem;
+ background-size: .75rem .75rem;
}
}
diff --git a/src/assets/scss/_subnav.scss b/src/assets/scss/_subnav.scss
deleted file mode 100644
index 0c261437..00000000
--- a/src/assets/scss/_subnav.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-.bd-subnavbar {
- background-color: rgba(#fff, .75);
- box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .05), inset 0 -1px 0 rgba(0, 0, 0, .15);
-}
diff --git a/src/assets/scss/_syntax.scss b/src/assets/scss/_syntax.scss
index 89c81d13..487550bf 100644
--- a/src/assets/scss/_syntax.scss
+++ b/src/assets/scss/_syntax.scss
@@ -1,94 +1,107 @@
-// stylelint-disable comment-empty-line-before, declaration-block-single-line-max-declarations
+:root {
+ --base00: #fff;
+ --base01: #f5f5f5;
+ --base02: #c8c8fa;
+ --base03: #565c64;
+ --base04: #030303;
+ --base05: #333;
+ --base06: #fff;
+ --base07: #9a6700;
+ --base08: #bc4c00;
+ --base09: #087990;
+ --base0A: #795da3;
+ --base0B: #183691;
+ --base0C: #183691;
+ --base0D: #795da3;
+ --base0E: #a71d5d;
+ --base0F: #333;
+}
+
+.hl { background-color: var(--base02); }
+.c { color: var(--base03); }
+.err { color: var(--base08); }
+.k { color: var(--base0E); }
+.l { color: var(----base09); }
+.n { color: var(--base08); }
+.o { color: var(--base05); }
+.p { color: var(--base05); }
+.cm { color: var(--base04); }
+.cp { color: var(--base08); }
+.c1 { color: var(--base03); }
+.cs { color: var(--base04); }
+.gd { color: var(--base08); }
+.ge { font-style: italic; }
+.gh {
+ font-weight: 600;
+ color: #fff;
+}
+.gi { color: var(--bs-success); }
+.gp {
+ font-weight: 600;
+ color: var(--base04);
+}
+.gs { font-weight: 600; }
+.gu {
+ font-weight: 600;
+ color: var(--base0C);
+}
+.kc { color: var(--base0E); }
+.kd { color: var(--base0E); }
+.kn { color: var(--base0C); }
+.kp { color: var(--base0E); }
+.kr { color: var(--base0E); }
+.kt { color: var(--base0A); }
+.ld { color: var(--base0C); }
+.m { color: var(--base09); }
+.s { color: var(--base0C); }
+.na { color: var(--base0A); }
+.nb { color: var(--base05); }
+.nc { color: var(--base07); }
+.no { color: var(--base08); }
+.nd { color: var(--base07); }
+.ni { color: var(--base08); }
+.ne { color: var(--base08); }
+.nf { color: var(--base0B); }
+.nl { color: var(--base05); }
+.nn { color: var(--base0A); }
+.nx { color: var(--base0A); }
+.py { color: var(--base08); }
+.nt { color: var(--base08); }
+.nv { color: var(--base08); }
+.ow { color: var(--base0C); }
+.w { color: #fff; }
+.mf { color: var(--base09); }
+.mh { color: var(--base09); }
+.mi { color: var(--base09); }
+.mo { color: var(--base09); }
+.sb { color: var(--base0C); }
+.sc { color: #fff; }
+.sd { color: var(--base04); }
+.s2 { color: var(--base0C); }
+.se { color: var(--base09); }
+.sh { color: var(--base0C); }
+.si { color: var(--base09); }
+.sx { color: var(--base0C); }
+.sr { color: var(--base0C); }
+.s1 { color: var(--base0C); }
+.ss { color: var(--base0C); }
+.bp { color: var(--base05); }
+.vc { color: var(--base08); }
+.vg { color: var(--base08); }
+.vi { color: var(--base08); }
+.il { color: var(--base09); }
-/* Background .chroma { background-color: #f0f0f0; } */
-/* Other .chroma .x { } */
-/* Error .chroma .err { } */
-/* LineTableTD .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } */
-/* LineTable .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; } */
-/* LineHighlight .chroma .hl { display: block; width: 100%; background-color: #ffffcc; } */
-/* LineNumbersTable .chroma .lnt { margin-right: .4em; padding: 0 .4em; } */
-/* LineNumbers .chroma .ln { margin-right: .4em; padding: 0 .4em; } */
+// Color commas in rgba() values
+.m + .o { color: var(--base03); }
-/* Comment */ .chroma .c { color: #727272; }
-/* CommentHashbang */ .chroma .ch { font-style: italic; color: #60a0b0; }
-/* CommentMultiline */ .chroma .cm { color: #727272; }
-/* CommentPreproc */ .chroma .cp { color: #008085; }
-/* CommentPreprocFile */ .chroma .cpf { color: #007020; }
-/* CommentSingle */ .chroma .c1 { color: #727272; }
-/* CommentSpecial */ .chroma .cs { color: #727272; }
-/* Generic .chroma .g { } */
-/* GenericDeleted */ .chroma .gd { background-color: #fcc; border: 1px solid #c00; }
-/* GenericEmph */ .chroma .ge { font-style: italic; }
-/* GenericError */ .chroma .gr { color: #f00; }
-/* GenericHeading */ .chroma .gh { color: #030; }
-/* GenericInserted */ .chroma .gi { background-color: #cfc; border: 1px solid #0c0; }
-/* GenericOutput */ .chroma .go { color: #aaa; }
-/* GenericPrompt */ .chroma .gp { color: #009; }
-/* GenericStrong */ .chroma .gs { font-weight: 700; }
-/* GenericSubheading */ .chroma .gu { color: #030; }
-/* GenericTraceback */ .chroma .gt { color: #9c6; }
-/* GenericUnderline */ .chroma .gl { text-decoration: underline; }
-/* Keyword */ .chroma .k { color: #069; }
-/* KeywordConstant */ .chroma .kc { color: #069; }
-/* KeywordDeclaration */ .chroma .kd { color: #069; }
-/* KeywordNamespace */ .chroma .kn { color: #069; }
-/* KeywordPseudo */ .chroma .kp { color: #069; }
-/* KeywordReserved */ .chroma .kr { color: #069; }
-/* KeywordType */ .chroma .kt { color: #078; }
-/* Literal .chroma .l { } */
-/* LiteralDate .chroma .ld { color: #c24f19 } */
-/* LiteralNumber */ .chroma .m { color: #c24f19; }
-/* LiteralNumberBin */ .chroma .mb { color: #40a070; }
-/* LiteralNumberFloat */ .chroma .mf { color: #c24f19; }
-/* LiteralNumberHex */ .chroma .mh { color: #c24f19; }
-/* LiteralNumberInteger */ .chroma .mi { color: #c24f19; }
-/* LiteralNumberIntegerLong */ .chroma .il { color: #c24f19; }
-/* LiteralNumberOct */ .chroma .mo { color: #c24f19; }
-/* LiteralString */ .chroma .s { color: #d73038; }
-/* LiteralStringAffix */ .chroma .sa { color: #4070a0; }
-/* LiteralStringBacktick */ .chroma .sb { color: #c30; }
-/* LiteralStringChar */ .chroma .sc { color: #c30; }
-/* LiteralStringDelimiter */ .chroma .dl { color: #4070a0; }
-/* LiteralStringDoc */ .chroma .sd { font-style: italic; color: #c30; }
-/* LiteralStringDouble */ .chroma .s2 { color: #c30; }
-/* LiteralStringEscape */ .chroma .se { color: #c30; }
-/* LiteralStringHeredoc */ .chroma .sh { color: #c30; }
-/* LiteralStringInterpol */ .chroma .si { color: #a00; }
-/* LiteralStringOther */ .chroma .sx { color: #c30; }
-/* LiteralStringRegex */ .chroma .sr { color: #337e7e; }
-/* LiteralStringSingle */ .chroma .s1 { color: #c30; }
-/* LiteralStringSymbol */ .chroma .ss { color: #fc3; }
-/* Name .chroma .n { } */
-/* NameAttribute */ .chroma .na { color: #006ee0; }
-/* NameBuiltin */ .chroma .nb { color: #366; }
-/* NameBuiltinPseudo .chroma .bp { } */
-/* NameClass */ .chroma .nc { color: #168174; }
-/* NameConstant */ .chroma .no { color: #360; }
-/* NameDecorator */ .chroma .nd { color: #6b62de; }
-/* NameEntity */ .chroma .ni { color: #727272; }
-/* NameException */ .chroma .ne { color: #c00; }
-/* NameFunction */ .chroma .nf { color: #b715f4; }
-/* NameFunctionMagic .chroma .fm { } */
-/* NameLabel */ .chroma .nl { color: #6b62de; }
-/* NameNamespace */ .chroma .nn { color: #007ca5; }
-/* NameOther .chroma .nx { } */
-/* NameProperty .chroma .py { } */
-/* NameTag */ .chroma .nt { color: #2f6f9f; }
-/* NameVariable */ .chroma .nv { color: #033; }
-/* NameVariableClass .chroma .vc { } */
-/* NameVariableGlobal .chroma .vg { } */
-/* NameVariableInstance .chroma .vi { } */
-/* NameVariableMagic .chroma .vm { } */
-/* Operator */ .chroma .o { color: #555; }
-/* OperatorWord */ .chroma .ow { color: #000; }
-/* Punctuation .chroma .p { } */
-/* TextWhitespace */ .chroma .w { color: #bbb; }
+// Fix bash
+.language-sh .c { color: var(--base03); }
.chroma {
.language-bash,
.language-sh {
&::before {
- color: #009;
+ color: #777;
content: "$ ";
user-select: none;
}
diff --git a/src/assets/scss/_theme.scss b/src/assets/scss/_theme.scss
index 96d1f408..cae5539b 100644
--- a/src/assets/scss/_theme.scss
+++ b/src/assets/scss/_theme.scss
@@ -2,59 +2,75 @@
// Resets
//
-.embed-responsive {
+a {
+ text-decoration-color: rgba(var(--bs-primary-rgb), .25);
+ text-underline-offset: .25rem;
+
+ &:hover,
+ &:focus {
+ text-decoration-color: rgba(var(--bs-primary-rgb), .5);
+ }
+}
+
+.bi {
+ display: inline-block;
+ width: 1em;
+ height: 1em;
+ vertical-align: -.125em;
+ fill: currentColor; // stylelint-disable-line value-keyword-case
+}
+
+.sidebar-nav {
+ .nav-link {
+ padding-inline: .75rem;
+ border-radius: .5rem;
+
+ &:not(.active):hover,
+ &:not(.active):focus {
+ background-color: rgba(var(--bd-violet-rgb), .05);
+ }
+
+ &.active {
+ color: var(--bs-body-color);
+ background-color: rgba(var(--bd-violet-rgb), .1);
+ }
+ }
+}
+
+.ratio {
margin-bottom: 1rem;
+ overflow: hidden;
background-color: #000;
+ border-radius: .5rem;
.page-videos & {
margin-top: .5rem;
}
}
-.post li {
- margin-bottom: .25rem;
-}
-
//
// Header
//
.masthead {
- position: relative;
- padding: 2rem 1.25rem;
- font-weight: 300;
- color: #cdbfe3;
- text-align: center;
- text-shadow: 0 1px 0 rgba(0, 0, 0, .1);
- background-image: linear-gradient(to bottom, darken($bd-purple-bright, 10%), $bd-purple-bright);
-
- @media (min-width: 40em) {
- padding: 3rem 0 4rem;
- }
-
- a,
- h1 {
- font-weight: 400;
- color: #fff;
- }
+ overflow: hidden;
- h1 {
- margin-bottom: .25rem;
- }
-
- p {
- max-width: 640px;
- margin: 0 auto;
+ @media (min-width: 768px) {
+ position: -webkit-sticky; // stylelint-disable-line value-no-vendor-prefix
+ position: sticky;
+ top: 4rem;
}
}
-.bs-docs-booticon {
- filter:
- drop-shadow(0 .25em .25em rgba(0, 0, 0, .05))
- drop-shadow(0 .5em 1em rgba(0, 0, 0, .1))
- drop-shadow(0 .75em 1.5em rgba(0, 0, 0, .15));
+.bd-booticon {
+ margin-left: -.75rem;
transform: rotate(-5deg);
+
+ @media (max-width: 1024px) {
+ width: 128px;
+ height: auto;
+ }
}
@@ -66,10 +82,10 @@
display: inline-block;
padding: .6rem 1.2rem;
margin-right: .25rem;
- font-weight: 700;
+ font-weight: 600;
color: #fff;
- background-color: #08c;
- border-radius: .2rem;
+ background-color: var(--bs-primary);
+ border-radius: .5rem;
transition: all .2s linear;
&:hover {
@@ -94,12 +110,13 @@
.list {
padding-left: 0;
list-style: none;
-}
-.list li {
- display: block;
- margin-bottom: 5px;
-}
-.list span {
- float: right;
- color: #767676;
+
+ li {
+ display: block;
+ margin-bottom: .5rem;
+ }
+ span {
+ float: right;
+ color: #var(--bs-gray-600);
+ }
}
diff --git a/src/assets/scss/_variables.scss b/src/assets/scss/_variables.scss
index bb80af3e..cd6f8b99 100644
--- a/src/assets/scss/_variables.scss
+++ b/src/assets/scss/_variables.scss
@@ -1,9 +1,17 @@
-$white: #fff;
-$blue-500: #007bff;
-$gray-700: #495057;
-
// Local docs variables
-$bd-purple: #563d7c;
-$bd-purple-bright: lighten(saturate($bd-purple, 5%), 15%);
-$bd-dark: #2a2730;
-$bd-download: #ffe484;
+$bd-purple: #4c0bce;
+$bd-violet: lighten(saturate($bd-purple, 5%), 15%);
+$bd-accent: #ffe484;
+$dropdown-active-icon: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'><path fill='#292b2c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>");
+
+$bd-gutter-x: 3rem;
+
+:root {
+ --bd-purple: #{$bd-purple};
+ --bd-violet: #{$bd-violet};
+ --bd-accent: #{$bd-accent};
+ --bd-violet-rgb: #{to-rgb($bd-violet)};
+ --bd-accent-rgb: #{to-rgb($bd-accent)};
+ --bd-pink-rgb: #{to-rgb($pink-500)};
+ --bd-teal-rgb: #{to-rgb($teal-500)};
+}
diff --git a/src/assets/scss/style.scss b/src/assets/scss/style.scss
index 42916dc0..76d2ca87 100644
--- a/src/assets/scss/style.scss
+++ b/src/assets/scss/style.scss
@@ -1,14 +1,48 @@
-// stylelint-disable selector-max-type, selector-no-qualifying-type
-
-// Body resets
-//
-// Update the foundational and global aspects of the page.
+// stylelint-disable selector-max-type, selector-no-qualifying-type, selector-max-id
+
+@import "bootstrap/functions";
+@import "bootstrap/variables";
+@import "bootstrap/maps";
+@import "bootstrap/mixins";
+@import "bootstrap/utilities";
+@import "bootstrap/root";
+@import "bootstrap/reboot";
+@import "bootstrap/type";
+@import "bootstrap/images";
+@import "bootstrap/containers";
+@import "bootstrap/grid";
+@import "bootstrap/tables";
+// @import "bootstrap/forms";
+@import "bootstrap/buttons";
+@import "bootstrap/transitions";
+@import "bootstrap/dropdown";
+// @import "bootstrap/button-group";
+@import "bootstrap/nav";
+@import "bootstrap/navbar";
+// @import "bootstrap/card";
+// @import "bootstrap/accordion";
+// @import "bootstrap/breadcrumb";
+// @import "bootstrap/pagination";
+// @import "bootstrap/badge";
+// @import "bootstrap/alert";
+// @import "bootstrap/progress";
+// @import "bootstrap/list-group";
+@import "bootstrap/close";
+// @import "bootstrap/toasts";
+// @import "bootstrap/modal";
+// @import "bootstrap/tooltip";
+// @import "bootstrap/popover";
+// @import "bootstrap/carousel";
+// @import "bootstrap/spinners";
+@import "bootstrap/offcanvas";
+// @import "bootstrap/placeholders";
+@import "bootstrap/helpers";
+@import "bootstrap/utilities/api";
@import "variables";
@import "syntax";
@import "buttons";
@import "navbar";
-@import "subnav";
@import "footer";
@import "theme";
@import "ads";
@@ -16,15 +50,17 @@
.f0 { font-size: 3rem; }
.f2 { font-size: 2rem; }
.f3 { font-size: 1.75rem; }
+.f4 { font-size: 1.5rem; }
.f5 { font-size: 1.25rem; }
.fw-500 { font-weight: 500; }
.fw-600 { font-weight: 600; }
.highlight pre.chroma {
- padding: 1rem;
+ padding: 1.25rem;
margin: 0 0 1rem;
- background-color: #f5f5f5;
- border-radius: .25rem;
+ font-size: .875rem;
+ background-color: var(--bs-gray-100);
+ border-radius: var(--bs-border-radius);
code {
word-wrap: normal;
@@ -65,19 +101,32 @@ tbody tr:nth-child(odd) th {
background-color: #f9f9f9;
}
+.s-32 {
+ width: 32px;
+ height: 32px;
+}
// Container
//
// Center the page content.
+#content {
+ grid-template-columns: 1.15fr 3fr;
+ gap: 3rem;
+}
+
.posts-container {
max-width: 760px;
- @media (min-width: 40em) {
+ @media (min-width: 1024px) {
font-size: 18px;
}
}
+.bd-gutter {
+ --bs-gutter-x: #{$bd-gutter-x};
+}
+
// Posts and pages
//
@@ -104,9 +153,14 @@ tbody tr:nth-child(odd) th {
color: #767676;
}
-// Break long links
-.post a {
- word-break: break-word;
+.post {
+ a {
+ word-break: break-word;
+ }
+
+ li {
+ margin-bottom: .25rem;
+ }
}
// Related posts
@@ -135,7 +189,7 @@ tbody tr:nth-child(odd) th {
color: $gray-700;
}
-.post .embed-responsive {
+.post .ratio {
margin-bottom: 2rem;
}
@@ -149,7 +203,7 @@ tbody tr:nth-child(odd) th {
margin-right: -1rem;
margin-left: -1rem;
overflow: hidden; // clearfix
- color: #767676;
+ color: var(--bs-gray-600);
text-align: center;
}
@@ -158,7 +212,8 @@ tbody tr:nth-child(odd) th {
position: relative;
display: block;
padding: 1rem;
- border: 1px solid #eee;
+ text-decoration: none;
+ border: 1px solid var(--bs-gray-200);
}
.pagination-item:first-child {
margin-bottom: -1px;
@@ -168,9 +223,8 @@ tbody tr:nth-child(odd) th {
a.pagination-item:hover {
z-index: 2;
color: #fff;
- text-decoration: none;
- background-color: $blue-500;
- border-color: $blue-500;
+ background-color: var(--bs-primary);
+ border-color: var(--bs-primary);
}
@media (min-width: 30em) {
@@ -183,43 +237,13 @@ a.pagination-item:hover {
}
.pagination-item:first-child {
margin-bottom: 0;
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
+ border-top-left-radius: .5rem;
+ border-bottom-left-radius: .5rem;
}
.pagination-item:last-child {
margin-left: -1px;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- }
-}
-
-.embed-responsive {
- position: relative;
- display: block;
- height: 0;
- padding: 0;
- overflow: hidden;
-
- .no-js & {
- display: none;
- }
-
- .embed-responsive-item,
- iframe,
- embed,
- object,
- video {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- width: 100%;
- height: 100%;
- border: 0;
- }
-
- &.embed-responsive-16by9 {
- padding-bottom: 56.25%;
+ border-top-right-radius: .5rem;
+ border-bottom-right-radius: .5rem;
}
}
@@ -234,3 +258,7 @@ iframe[data-url^="https://jsbin.com"] {
margin-left: -226px;
}
}
+
+.bd-text-purple {
+ color: var(--bd-violet);
+}
diff --git a/src/layouts/_default/baseof.html b/src/layouts/_default/baseof.html
index 5a380707..9beb7502 100644
--- a/src/layouts/_default/baseof.html
+++ b/src/layouts/_default/baseof.html
@@ -4,17 +4,23 @@
{{ partial "head" . }}
</head>
<body>
+ {{ partial "icons" . }}
{{ partial "navbar" . }}
- {{ partial "hero" . }}
- {{ partial "subnav" . }}
- <div class="container">
- {{ block "main" . }}
- {{ end }}
+ <div class="container-xxl px-4 px-xxl-2">
+ <div class="d-lg-grid" id="content">
+ <div class="sidebar">
+ {{ partial "hero" . }}
+ </div>
+ <div class="main">
+ {{ block "main" . }}
+ {{ end }}
+ </div>
+ </div>
</div>
{{ partial "footer" . }}
- {{ partial "lazyload" . }}
+ {{ partial "scripts" . }}
</body>
</html>
diff --git a/src/layouts/_default/home.html b/src/layouts/_default/home.html
index d5d9e55a..39cc6778 100644
--- a/src/layouts/_default/home.html
+++ b/src/layouts/_default/home.html
@@ -1,5 +1,5 @@
{{ define "main" }}
-<div class="posts-container mx-auto px-3 my-5">
+<div class="posts-container mx-auto my-5">
<div class="posts">
{{ $paginator := .Paginate (where site.RegularPages "Type" "posts") }}
{{- range $i, $page := $paginator.Pages -}}
@@ -7,8 +7,8 @@
{{- $lazyload := cond (eq $i 0) false true -}}
<div class="post">
- <h1 class="post-title fw-500">
- <a href="{{ .RelPermalink }}">
+ <h1 class="post-title fw-600">
+ <a href="{{ .RelPermalink }}" class="text-decoration-none">
{{ .Title }}
</a>
</h1>
diff --git a/src/layouts/partials/analytics.html b/src/layouts/partials/analytics.html
index ab6e9e57..be4e9be9 100644
--- a/src/layouts/partials/analytics.html
+++ b/src/layouts/partials/analytics.html
@@ -1,3 +1,4 @@
+<script defer src="https://cdn.usefathom.com/script.js" data-site="ITUSEYJG"></script>
<script>
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-146052-12', 'getbootstrap.com');
diff --git a/src/layouts/partials/author-info.html b/src/layouts/partials/author-info.html
index 0ef3940d..650c5e4c 100644
--- a/src/layouts/partials/author-info.html
+++ b/src/layouts/partials/author-info.html
@@ -6,13 +6,13 @@
<a class="d-flex align-items-center text-muted text-decoration-none" href="https://github.com/{{ $author }}" target="_blank" rel="noopener">
{{ $avatar_width := 32 -}}
{{- $avatar_width_2x := mul $avatar_width 2 -}}
- <img class="mb-0 mr-2" srcset="https://github.com/{{ $author }}.png?size={{ $avatar_width }}, https://github.com/{{ $author }}.png?size={{ $avatar_width_2x }} 2x"
+ <img class="mb-0 me-2 rounded-2" srcset="https://github.com/{{ $author }}.png?size={{ $avatar_width }}, https://github.com/{{ $author }}.png?size={{ $avatar_width_2x }} 2x"
src="https://github.com/{{ $author }}.png?size={{ $avatar_width }}"
alt="" width="{{ $avatar_width }}" height="{{ $avatar_width }}"{{ if eq .lazyload true }} loading="lazy"{{ end }}>
<span>@{{ $author }}</span>
</a>
- <span class="d-flex align-items-center ml-3" title="{{ $date | dateFormat "Mon, 02 Jan 2006 15:04:00 -0700" }}">
- {{ partial "icons/calendar-event.svg" (dict "class" "mr-2" "width" "24" "height" "24") }}
+ <span class="d-flex align-items-center ms-3" title="{{ $date | dateFormat "Mon, 02 Jan 2006 15:04:00 -0700" }}">
+ {{ partial "icons/calendar-event.svg" (dict "class" "me-2" "width" "24" "height" "24") }}
{{ $date | dateFormat "January 02, 2006" }}
</span>
</div>
diff --git a/src/layouts/partials/favicons.html b/src/layouts/partials/favicons.html
index 420c3805..520b61a1 100644
--- a/src/layouts/partials/favicons.html
+++ b/src/layouts/partials/favicons.html
@@ -3,6 +3,6 @@
<link rel="icon" href="/assets/img/favicons/favicon-32x32.png" sizes="32x32" type="image/png">
<link rel="icon" href="/assets/img/favicons/favicon-16x16.png" sizes="16x16" type="image/png">
<link rel="manifest" href="/assets/img/favicons/manifest.json">
-<link rel="mask-icon" href="/assets/img/favicons/safari-pinned-tab.svg" color="#7952b3">
+<link rel="mask-icon" href="/assets/img/favicons/safari-pinned-tab.svg" color="#712cf9">
<link rel="icon" href="/assets/img/favicons/favicon.ico">
-<meta name="theme-color" content="#7952b3">
+<meta name="theme-color" content="#712cf9">
diff --git a/src/layouts/partials/hero.html b/src/layouts/partials/hero.html
index 26591f70..da4118c5 100644
--- a/src/layouts/partials/hero.html
+++ b/src/layouts/partials/hero.html
@@ -1,13 +1,36 @@
-<div class="masthead bg-light">
- <div class="container">
- <a href="/" aria-label="Bootstrap">
- {{ partial "icons/bootstrap-white-fill.svg" (dict "class" "bs-docs-booticon mb-3" "width" "90" "height" "72") }}
- <h1 class="f2">The Bootstrap Blog</h1>
- </a>
- <p class="f5">
- News and announcements for all things <a href="{{ .Site.Params.main }}/" title="Visit the Bootstrap docs">Bootstrap</a>, including new releases, <a href="{{ .Site.Params.themes }}" title="Browse the official Bootstrap themes">Bootstrap Themes</a>, and <a href="{{ .Site.Params.icons }}" title="Official open source Bootstrap Icons">Bootstrap Icons</a>.
- </p>
-
- {{ partial "carbonads" }}
+<div class="masthead py-5">
+ <div class="mb-4 text-center text-lg-start">
+ <a class="flex-shrink-0 mb-lg-3 link-dark text-decoration-none" href="/" aria-label="Bootstrap">
+ <img src="/assets/brand/bootstrap-logo-shadow.png" width="200" height="165" alt="Bootstrap" class="bd-booticon d-block mx-auto mb-3 mx-lg-0">
+ </a>
+ <div class="ms-3 ms-lg-0">
+ <h1 class="mb-1 mb-lg-2 f1 fw-600">The Bootstrap Blog</h1>
+ <p class="col-sm-8 col-lg-12 mx-auto mb-0 mb-lg-4">
+ News and announcements for all things <a href="{{ .Site.Params.main }}/" title="Visit the Bootstrap docs">Bootstrap</a>,
+ including new releases, <a href="{{ .Site.Params.themes }}" title="Browse the official Bootstrap themes">Bootstrap Themes</a>,
+ and <a href="{{ .Site.Params.icons }}" title="Official open source Bootstrap Icons">Bootstrap Icons</a>.
+ </p>
+ </div>
</div>
+
+ <nav class="nav nav-pills justify-content-center flex-lg-column justify-content-lg-start gap-1 sidebar-nav">
+ <a class="nav-link d-flex align-items-center{{ if .IsHome }} active fw-600{{ else }} text-dark{{ end }}" href="/">
+ <svg class="bi me-2 f5 bd-text-purple"><use xlink:href="#file-earmark-richtext"></use></svg>
+ All posts
+ </a>
+ <a class="nav-link d-flex align-items-center{{ if eq .Page.Title "Archive" }} active fw-600{{ else }} text-dark{{ end }}" href="/archive/">
+ <svg class="bi me-2 f5 text-primary"><use xlink:href="#archive"></use></svg>
+ Archive
+ </a>
+ <a class="nav-link d-flex align-items-center{{ if eq .Page.Title "Videos" }} active fw-600{{ else }} text-dark{{ end }}" href="/videos/">
+ <svg class="bi me-2 f5 text-info"><use xlink:href="#film"></use></svg>
+ Videos
+ </a>
+ <a class="nav-link d-flex align-items-center text-dark" href="{{ absURL "/feed.xml" }}">
+ <svg class="bi me-2 f5 text-warning"><use xlink:href="#rss"></use></svg>
+ Subscribe
+ </a>
+ </nav>
+
+ {{ partial "carbonads" }}
</div>
diff --git a/src/layouts/partials/icons.html b/src/layouts/partials/icons.html
new file mode 100644
index 00000000..722a8ab8
--- /dev/null
+++ b/src/layouts/partials/icons.html
@@ -0,0 +1,19 @@
+<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
+ <symbol id="archive" viewBox="0 0 16 16">
+ <path d="M0 2a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1v7.5a2.5 2.5 0 0 1-2.5 2.5h-9A2.5 2.5 0 0 1 1 12.5V5a1 1 0 0 1-1-1V2zm2 3v7.5A1.5 1.5 0 0 0 3.5 14h9a1.5 1.5 0 0 0 1.5-1.5V5H2zm13-3H1v2h14V2zM5 7.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5z"/>
+ </symbol>
+ <symbol id="file-earmark-richtext" viewBox="0 0 16 16">
+ <path d="M14 4.5V14a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2h5.5L14 4.5zm-3 0A1.5 1.5 0 0 1 9.5 3V1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V4.5h-2z"/>
+ <path d="M4.5 12.5A.5.5 0 0 1 5 12h3a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm0-2A.5.5 0 0 1 5 10h6a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm1.639-3.708 1.33.886 1.854-1.855a.25.25 0 0 1 .289-.047l1.888.974V8.5a.5.5 0 0 1-.5.5H5a.5.5 0 0 1-.5-.5V8s1.54-1.274 1.639-1.208zM6.25 6a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5z"/>
+ </symbol>
+ <symbol id="film" viewBox="0 0 16 16">
+ <path d="M0 1a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V1zm4 0v6h8V1H4zm8 8H4v6h8V9zM1 1v2h2V1H1zm2 3H1v2h2V4zM1 7v2h2V7H1zm2 3H1v2h2v-2zm-2 3v2h2v-2H1zM15 1h-2v2h2V1zm-2 3v2h2V4h-2zm2 3h-2v2h2V7zm-2 3v2h2v-2h-2zm2 3h-2v2h2v-2z"/>
+ </symbol>
+ <symbol id="rss" viewBox="0 0 16 16">
+ <path d="M14 1a1 1 0 0 1 1 1v12a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1h12zM2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2z"/>
+ <path d="M5.5 12a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0zm-3-8.5a1 1 0 0 1 1-1c5.523 0 10 4.477 10 10a1 1 0 1 1-2 0 8 8 0 0 0-8-8 1 1 0 0 1-1-1zm0 4a1 1 0 0 1 1-1 6 6 0 0 1 6 6 1 1 0 1 1-2 0 4 4 0 0 0-4-4 1 1 0 0 1-1-1z"/>
+ </symbol>
+ <symbol id="three-dots" viewBox="0 0 16 16">
+ <path d="M3 9.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3zm5 0a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3z"/>
+ </symbol>
+</svg>
diff --git a/src/layouts/partials/icons/hamburger.svg b/src/layouts/partials/icons/hamburger.svg
new file mode 100644
index 00000000..955d8a65
--- /dev/null
+++ b/src/layouts/partials/icons/hamburger.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} fill="currentColor" viewBox="0 0 16 16">
+ <path fill-rule="evenodd" d="M2.5 11.5A.5.5 0 0 1 3 11h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm0-4A.5.5 0 0 1 3 3h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5z"/>
+</svg>
diff --git a/src/layouts/partials/navbar.html b/src/layouts/partials/navbar.html
index 179e2e03..5b67a20c 100644
--- a/src/layouts/partials/navbar.html
+++ b/src/layouts/partials/navbar.html
@@ -1,58 +1,70 @@
-<header class="navbar navbar-expand navbar-dark flex-column flex-md-row bd-navbar px-0">
- <div class="container flex-wrap flex-md-nowrap py-0 px-3">
- <a class="navbar-brand py-0 mr-0 mr-md-2" href="/" aria-label="Bootstrap">
- {{ partial "icons/bootstrap-white-fill.svg" (dict "class" "d-block" "width" "40" "height" "32") }}
+<header class="navbar navbar-expand-lg navbar-dark bd-navbar sticky-top">
+ <nav class="container-xxl bd-gutter flex-wrap flex-lg-nowrap" aria-label="Main navigation">
+ <div class="d-lg-none" style="width: 2.25rem;"></div>
+
+ <a class="navbar-brand p-0 me-0 me-lg-2" href="/" aria-label="Bootstrap">
+ {{ partial "icons/bootstrap-white-fill.svg" (dict "class" "d-block my-1" "width" "40" "height" "32") }}
</a>
- <div class="navbar-nav-scroll order-3 order-md-0 d-flex justify-content-center justify-content-md-start">
- <ul class="navbar-nav bd-navbar-nav flex-row">
- <li class="nav-item">
- <a class="nav-link " href="{{ .Site.Params.main }}/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Bootstrap');">Home</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="{{ .Site.Params.main }}/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Docs');" target="_blank" rel="noopener">Docs</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="{{ .Site.Params.main }}/docs/{{ .Site.Params.docs_version }}/examples/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Examples');" target="_blank" rel="noopener">Examples</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="{{ .Site.Params.icons }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Icons');" target="_blank" rel="noopener">Icons</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="{{ .Site.Params.themes }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Themes');" target="_blank" rel="noopener">Themes</a>
- </li>
- <li class="nav-item">
- <a class="nav-link" href="{{ .Site.Params.expo }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Expo');" target="_blank" rel="noopener">Expo</a>
- </li>
- <li class="nav-item">
- <a class="nav-link active" href="{{ .Site.Params.blog }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Blog');" target="_blank" rel="noopener">Blog</a>
- </li>
- </ul>
- </div>
+ <button class="navbar-toggler d-flex d-lg-none order-3 p-2" type="button" data-bs-toggle="offcanvas" data-bs-target="#bdNavbar" aria-controls="bdNavbar" aria-expanded="false" aria-label="Toggle navigation">
+ <svg class="bi" width="24" height="24" aria-hidden="true"><use xlink:href="#three-dots"></use></svg>
+ </button>
+
+ <div class="offcanvas-lg offcanvas-end flex-grow-1" id="bdNavbar" aria-labelledby="bdNavbarOffcanvasLabel">
+ <div class="offcanvas-header px-4 pb-0">
+ <h5 class="offcanvas-title text-white" id="bdNavbarOffcanvasLabel">Bootstrap</h5>
+ <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas" aria-label="Close" data-bs-target="#bdNavbar"></button>
+ </div>
- <ul class="navbar-nav ml-sm-auto">
- <li class="nav-item">
- <a class="nav-link p-2" href="{{ .Site.Params.github_org }}" target="_blank" rel="noopener" aria-label="GitHub">
- {{ partial "icons/github.svg" (dict "class" "navbar-nav-svg" "width" "36" "height" "36") }}
- </a>
- </li>
- <li class="nav-item">
- <a class="nav-link p-2" href="https://twitter.com/{{ .Site.Social.twitter }}" target="_blank" rel="noopener" aria-label="Twitter">
- {{ partial "icons/twitter.svg" (dict "class" "navbar-nav-svg" "width" "36" "height" "36") }}
- </a>
- </li>
- <li class="nav-item">
- <a class="nav-link p-2" href="{{ .Site.Params.slack }}" target="_blank" rel="noopener" aria-label="Slack">
- {{ partial "icons/slack.svg" (dict "class" "navbar-nav-svg" "width" "36" "height" "36") }}
- </a>
- </li>
- <li class="nav-item">
- <a class="nav-link p-2" href="{{ .Site.Params.opencollective }}" target="_blank" rel="noopener" aria-label="Open Collective">
- {{ partial "icons/opencollective.svg" (dict "class" "navbar-nav-svg" "width" "36" "height" "36") }}
- </a>
- </li>
- </ul>
+ <div class="offcanvas-body p-4 pt-0 p-lg-0">
+ <hr class="d-lg-none text-white-50">
+ <ul class="navbar-nav flex-row flex-wrap bd-navbar-nav">
+ <li class="nav-item col-6 col-lg-auto">
+ <a class="nav-link py-2 px-0 px-lg-2" href="{{ .Site.Params.main }}/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Docs');">Docs</a>
+ </li>
+ <li class="nav-item col-6 col-lg-auto">
+ <a class="nav-link py-2 px-0 px-lg-2" href="{{ .Site.Params.main }}/docs/{{ .Site.Params.docs_version }}/examples/" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Examples');">Examples</a>
+ </li>
+ <li class="nav-item col-6 col-lg-auto">
+ <a class="nav-link py-2 px-0 px-lg-2" href="{{ .Site.Params.icons }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Icons');" target="_blank" rel="noopener">Icons</a>
+ </li>
+ <li class="nav-item col-6 col-lg-auto">
+ <a class="nav-link py-2 px-0 px-lg-2" href="{{ .Site.Params.themes }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Themes');" target="_blank" rel="noopener">Themes</a>
+ </li>
+ <li class="nav-item col-6 col-lg-auto">
+ <a class="nav-link py-2 px-0 px-lg-2 active" href="{{ .Site.Params.blog }}" onclick="ga('send', 'event', 'Navbar', 'Community links', 'Blog');" rel="noopener">Blog</a>
+ </li>
+ </ul>
- <a class="btn btn-bd-download d-none d-lg-inline-block mb-3 mb-md-0 ml-md-3" href="{{ .Site.Params.main }}/docs/{{ .Site.Params.docs_version }}/getting-started/download/">Download</a>
- </div>
+ <hr class="d-lg-none text-white-50">
+
+ <ul class="navbar-nav flex-row flex-wrap ms-md-auto">
+ <li class="nav-item col-6 col-lg-auto">
+ <a class="nav-link py-2 px-0 px-lg-2" href="{{ .Site.Params.github_org }}" target="_blank" rel="noopener">
+ {{ partial "icons/github.svg" (dict "class" "navbar-nav-svg" "width" "16" "height" "16") }}
+ <small class="d-lg-none ms-2">GitHub</small>
+ </a>
+ </li>
+ <li class="nav-item col-6 col-lg-auto">
+ <a class="nav-link py-2 px-0 px-lg-2" href="https://twitter.com/{{ .Site.Params.twitter }}" target="_blank" rel="noopener">
+ {{ partial "icons/twitter.svg" (dict "class" "navbar-nav-svg" "width" "16" "height" "16") }}
+ <small class="d-lg-none ms-2">Twitter</small>
+ </a>
+ </li>
+ <li class="nav-item col-6 col-lg-auto">
+ <a class="nav-link py-2 px-0 px-lg-2" href="{{ .Site.Params.slack }}" target="_blank" rel="noopener">
+ {{ partial "icons/slack.svg" (dict "class" "navbar-nav-svg" "width" "16" "height" "16") }}
+ <small class="d-lg-none ms-2">Slack</small>
+ </a>
+ </li>
+ <li class="nav-item col-6 col-lg-auto">
+ <a class="nav-link py-2 px-0 px-lg-2" href="{{ .Site.Params.opencollective }}" target="_blank" rel="noopener">
+ {{ partial "icons/opencollective.svg" (dict "class" "navbar-nav-svg" "width" "16" "height" "16") }}
+ <small class="d-lg-none ms-2">Open Collective</small>
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </nav>
</header>
diff --git a/src/layouts/partials/lazyload.html b/src/layouts/partials/scripts.html
index 306a2881..1a2ae702 100644
--- a/src/layouts/partials/lazyload.html
+++ b/src/layouts/partials/scripts.html
@@ -1,3 +1,6 @@
+{{ $bootstrapJs := resources.Get "/js/bootstrap.min.js" }}
+<script src="{{ $bootstrapJs.Permalink | relURL }}"></script>
+
<script>
(function(w, d) {
var b = d.getElementsByTagName('body')[0];
diff --git a/src/layouts/partials/stylesheet.html b/src/layouts/partials/stylesheet.html
index 1dbfd152..3fe0eea9 100644
--- a/src/layouts/partials/stylesheet.html
+++ b/src/layouts/partials/stylesheet.html
@@ -1,5 +1,3 @@
-<link href="{{ .Site.Params.assets.css.uri }}" rel="stylesheet" {{ printf "integrity=%q" .Site.Params.assets.css.sri | safeHTMLAttr }} crossorigin="anonymous">
-
{{- $targetDocsCssPath := "/assets/css/style.css" -}}
{{- $sassOptions := dict "targetPath" $targetDocsCssPath "outputStyle" "expanded" "precision" 6 -}}
{{- $postcssOptions := dict "use" "autoprefixer" "noMap" true -}}
diff --git a/src/layouts/partials/subnav.html b/src/layouts/partials/subnav.html
index c5b51f3f..e824c27f 100644
--- a/src/layouts/partials/subnav.html
+++ b/src/layouts/partials/subnav.html
@@ -1,10 +1,10 @@
<nav class="bd-subnavbar pt-2 pb-3 pb-md-2">
<div class="container d-flex align-items-md-center py-2">
<nav class="nav mx-auto">
- <a class="text-dark py-1 mr-3{{ if .IsHome }} fw-600 text-decoration-none{{ end }}" href="/">All posts</a>
- <a class="text-dark py-1 mr-3{{ if eq .Page.Title "Archive" }} fw-600 text-decoration-none{{ end }}" href="/archive/">Archive</a>
- <a class="text-dark py-1 mr-3{{ if eq .Page.Title "Videos" }} fw-600 text-decoration-none{{ end }}" href="/videos/">Videos</a>
- <a class="text-dark py-1" href="{{ absURL "/feed.xml" }}">Subscribe</a>
+ <a class="nav-link text-dark py-1{{ if .IsHome }} fw-600{{ end }}" href="/">All posts</a>
+ <a class="nav-link text-dark py-1{{ if eq .Page.Title "Archive" }} fw-600{{ end }}" href="/archive/">Archive</a>
+ <a class="nav-link text-dark py-1{{ if eq .Page.Title "Videos" }} fw-600{{ end }}" href="/videos/">Videos</a>
+ <a class="nav-link text-dark py-1" href="{{ absURL "/feed.xml" }}">Subscribe</a>
</nav>
</div>
</nav>
diff --git a/src/layouts/partials/video.html b/src/layouts/partials/video.html
index bfc2b1cc..b1a053e4 100644
--- a/src/layouts/partials/video.html
+++ b/src/layouts/partials/video.html
@@ -4,6 +4,6 @@
{{- $video := .context.Params.video -}}
{{- $video_start := .context.Params.video_start -}}
-<div class="embed-responsive embed-responsive-16by9">
- <iframe class="embed-responsive-item{{ if eq $lazyload true }} lazy{{ end }}" {{ if eq $lazyload true }}data-src{{ else }}src{{ end }}="https://www.youtube-nocookie.com/embed/{{ $video }}?rel=0{{ with $video_start }}&amp;start={{ . }}{{ end }}" title="YouTube Video" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" width="760" height="570" allowfullscreen></iframe>
+<div class="ratio ratio-16x9">
+ <iframe {{ if eq $lazyload true }}class="lazy" data-src{{ else }}src{{ end }}="https://www.youtube-nocookie.com/embed/{{ $video }}?rel=0{{ with $video_start }}&amp;start={{ . }}{{ end }}" title="YouTube Video" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" width="760" height="570" allowfullscreen></iframe>
</div>
diff --git a/src/layouts/posts/single.html b/src/layouts/posts/single.html
index bdf93030..cc47a3fc 100644
--- a/src/layouts/posts/single.html
+++ b/src/layouts/posts/single.html
@@ -1,7 +1,7 @@
{{ define "main" }}
-<div class="posts-container px-3 mx-auto my-5">
+<div class="posts-container mx-auto my-5">
<div class="post">
- <h1 class="post-title fw-500">{{ .Page.Title }}</h1>
+ <h1 class="post-title fw-600">{{ .Page.Title }}</h1>
{{ partial "author-info" (dict "context" .) -}}
{{- if .Page.Params.video -}}
diff --git a/src/static/assets/brand/bootstrap-logo-black.svg b/src/static/assets/brand/bootstrap-logo-black.svg
new file mode 100644
index 00000000..31e66e1e
--- /dev/null
+++ b/src/static/assets/brand/bootstrap-logo-black.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="512" height="408"><path d="M106.342 0c-29.214 0-50.827 25.58-49.86 53.32.927 26.647-.278 61.165-8.966 89.31C38.802 170.862 24.07 188.707 0 191v26c24.069 2.293 38.802 20.138 47.516 48.37 8.688 28.145 9.893 62.663 8.965 89.311C55.515 382.42 77.128 408 106.342 408h299.353c29.214 0 50.827-25.58 49.861-53.319-.928-26.648.277-61.166 8.964-89.311 8.715-28.232 23.411-46.077 47.48-48.37v-26c-24.069-2.293-38.765-20.138-47.48-48.37-8.687-28.145-9.892-62.663-8.964-89.31C456.522 25.58 434.909 0 405.695 0H106.342zm236.559 251.102c0 38.197-28.501 61.355-75.798 61.355h-87.202a2 2 0 01-2-2v-213a2 2 0 012-2h86.74c39.439 0 65.322 21.354 65.322 54.138 0 23.008-17.409 43.61-39.594 47.219v1.203c30.196 3.309 50.532 24.212 50.532 53.085zm-84.58-128.125h-45.91v64.814h38.669c29.888 0 46.373-12.03 46.373-33.535 0-20.151-14.174-31.279-39.132-31.279zm-45.91 90.53v71.431h47.605c31.12 0 47.605-12.482 47.605-35.941 0-23.46-16.947-35.49-49.608-35.49h-45.602z"/></svg> \ No newline at end of file
diff --git a/src/static/assets/brand/bootstrap-logo-shadow.png b/src/static/assets/brand/bootstrap-logo-shadow.png
new file mode 100644
index 00000000..3643b912
--- /dev/null
+++ b/src/static/assets/brand/bootstrap-logo-shadow.png
Binary files differ
diff --git a/src/static/assets/brand/bootstrap-logo-white.svg b/src/static/assets/brand/bootstrap-logo-white.svg
new file mode 100644
index 00000000..f73d7ca2
--- /dev/null
+++ b/src/static/assets/brand/bootstrap-logo-white.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="512" height="408" fill="#fff"><path d="M106.342 0c-29.214 0-50.827 25.58-49.86 53.32.927 26.647-.278 61.165-8.966 89.31C38.802 170.862 24.07 188.707 0 191v26c24.069 2.293 38.802 20.138 47.516 48.37 8.688 28.145 9.893 62.663 8.965 89.311C55.515 382.42 77.128 408 106.342 408h299.353c29.214 0 50.827-25.58 49.861-53.319-.928-26.648.277-61.166 8.964-89.311 8.715-28.232 23.411-46.077 47.48-48.37v-26c-24.069-2.293-38.765-20.138-47.48-48.37-8.687-28.145-9.892-62.663-8.964-89.31C456.522 25.58 434.909 0 405.695 0H106.342zm236.559 251.102c0 38.197-28.501 61.355-75.798 61.355h-87.202a2 2 0 01-2-2v-213a2 2 0 012-2h86.74c39.439 0 65.322 21.354 65.322 54.138 0 23.008-17.409 43.61-39.594 47.219v1.203c30.196 3.309 50.532 24.212 50.532 53.085zm-84.58-128.125h-45.91v64.814h38.669c29.888 0 46.373-12.03 46.373-33.535 0-20.151-14.174-31.279-39.132-31.279zm-45.91 90.53v71.431h47.605c31.12 0 47.605-12.482 47.605-35.941 0-23.46-16.947-35.49-49.608-35.49h-45.602z"/></svg> \ No newline at end of file
diff --git a/src/static/assets/brand/bootstrap-logo.svg b/src/static/assets/brand/bootstrap-logo.svg
new file mode 100644
index 00000000..f0189652
--- /dev/null
+++ b/src/static/assets/brand/bootstrap-logo.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="512" height="408"><defs><linearGradient id="bs-logo-a" x1="76.079" x2="523.48" y1="10.798" y2="365.945" gradientUnits="userSpaceOnUse"><stop stop-color="#9013fe"/><stop offset="1" stop-color="#6610f2"/></linearGradient><linearGradient id="bs-logo-b" x1="193.508" x2="293.514" y1="109.74" y2="278.872" gradientUnits="userSpaceOnUse"><stop stop-color="#fff"/><stop offset="1" stop-color="#f1e5fc"/></linearGradient><filter xmlns="http://www.w3.org/2000/svg" id="bs-logo-c" width="197" height="249" x="161.901" y="83.457" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0"/><feOffset dy="4"/><feGaussianBlur stdDeviation="8"/><feColorMatrix values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.15 0"/><feBlend in2="BackgroundImageFix" result="effect1_dropShadow"/><feBlend in="SourceGraphic" in2="effect1_dropShadow" result="shape"/></filter></defs><path fill="url(#bs-logo-a)" d="M56.481 53.32C55.515 25.58 77.128 0 106.342 0h299.353c29.214 0 50.827 25.58 49.861 53.32-.928 26.647.277 61.165 8.964 89.31 8.715 28.232 23.411 46.077 47.48 48.37v26c-24.069 2.293-38.765 20.138-47.48 48.37-8.687 28.145-9.892 62.663-8.964 89.311.966 27.739-20.647 53.319-49.861 53.319H106.342c-29.214 0-50.827-25.58-49.86-53.319.927-26.648-.278-61.166-8.966-89.311C38.802 237.138 24.07 219.293 0 217v-26c24.069-2.293 38.802-20.138 47.516-48.37 8.688-28.145 9.893-62.663 8.965-89.31z"/><path fill="url(#bs-logo-b)" filter="url(#bs-logo-c)" stroke="#fff" d="M267.103 312.457c47.297 0 75.798-23.158 75.798-61.355 0-28.873-20.336-49.776-50.532-53.085v-1.203c22.185-3.609 39.594-24.211 39.594-47.219 0-32.783-25.882-54.138-65.322-54.138h-88.74v217h89.202zm-54.692-189.48h45.911c24.958 0 39.131 11.128 39.131 31.279 0 21.505-16.484 33.535-46.372 33.535h-38.67v-64.814zm0 161.961v-71.431h45.602c32.661 0 49.608 12.03 49.608 35.49 0 23.459-16.484 35.941-47.605 35.941h-47.605z"/></svg>
diff --git a/src/static/assets/brand/bootstrap-social-logo.png b/src/static/assets/brand/bootstrap-social-logo.png
new file mode 100644
index 00000000..9dbb732a
--- /dev/null
+++ b/src/static/assets/brand/bootstrap-social-logo.png
Binary files differ
diff --git a/src/static/assets/brand/bootstrap-social.png b/src/static/assets/brand/bootstrap-social.png
new file mode 100644
index 00000000..c7adc6f8
--- /dev/null
+++ b/src/static/assets/brand/bootstrap-social.png
Binary files differ