├── .github └── workflows │ └── main.yml ├── .gitignore ├── Gemfile ├── LICENSE ├── _config.yml ├── _includes ├── alert.md ├── footer.md ├── head.html ├── header.md └── nav.md ├── _layouts ├── page.html └── redirect.html ├── _sass ├── bootstrap │ ├── LICENSE │ └── scss │ │ ├── _accordion.scss │ │ ├── _alert.scss │ │ ├── _badge.scss │ │ ├── _breadcrumb.scss │ │ ├── _button-group.scss │ │ ├── _buttons.scss │ │ ├── _card.scss │ │ ├── _carousel.scss │ │ ├── _close.scss │ │ ├── _containers.scss │ │ ├── _dropdown.scss │ │ ├── _forms.scss │ │ ├── _functions.scss │ │ ├── _grid.scss │ │ ├── _helpers.scss │ │ ├── _images.scss │ │ ├── _list-group.scss │ │ ├── _maps.scss │ │ ├── _mixins.scss │ │ ├── _modal.scss │ │ ├── _nav.scss │ │ ├── _navbar.scss │ │ ├── _offcanvas.scss │ │ ├── _pagination.scss │ │ ├── _placeholders.scss │ │ ├── _popover.scss │ │ ├── _progress.scss │ │ ├── _reboot.scss │ │ ├── _root.scss │ │ ├── _spinners.scss │ │ ├── _tables.scss │ │ ├── _toasts.scss │ │ ├── _tooltip.scss │ │ ├── _transitions.scss │ │ ├── _type.scss │ │ ├── _utilities.scss │ │ ├── _variables-dark.scss │ │ ├── _variables.scss │ │ ├── bootstrap-grid.scss │ │ ├── bootstrap-reboot.scss │ │ ├── bootstrap-utilities.scss │ │ ├── bootstrap.scss │ │ ├── forms │ │ ├── _floating-labels.scss │ │ ├── _form-check.scss │ │ ├── _form-control.scss │ │ ├── _form-range.scss │ │ ├── _form-select.scss │ │ ├── _form-text.scss │ │ ├── _input-group.scss │ │ ├── _labels.scss │ │ └── _validation.scss │ │ ├── helpers │ │ ├── _clearfix.scss │ │ ├── _color-bg.scss │ │ ├── _colored-links.scss │ │ ├── _focus-ring.scss │ │ ├── _icon-link.scss │ │ ├── _position.scss │ │ ├── _ratio.scss │ │ ├── _stacks.scss │ │ ├── _stretched-link.scss │ │ ├── _text-truncation.scss │ │ ├── _visually-hidden.scss │ │ └── _vr.scss │ │ ├── mixins │ │ ├── _alert.scss │ │ ├── _backdrop.scss │ │ ├── _banner.scss │ │ ├── _border-radius.scss │ │ ├── _box-shadow.scss │ │ ├── _breakpoints.scss │ │ ├── _buttons.scss │ │ ├── _caret.scss │ │ ├── _clearfix.scss │ │ ├── _color-mode.scss │ │ ├── _color-scheme.scss │ │ ├── _container.scss │ │ ├── _deprecate.scss │ │ ├── _forms.scss │ │ ├── _gradients.scss │ │ ├── _grid.scss │ │ ├── _image.scss │ │ ├── _list-group.scss │ │ ├── _lists.scss │ │ ├── _pagination.scss │ │ ├── _reset-text.scss │ │ ├── _resize.scss │ │ ├── _table-variants.scss │ │ ├── _text-truncate.scss │ │ ├── _transition.scss │ │ ├── _utilities.scss │ │ └── _visually-hidden.scss │ │ ├── utilities │ │ └── _api.scss │ │ └── vendor │ │ └── _rfs.scss ├── default.scss ├── github-dark.scss ├── jekyll-theme-cs50.scss └── page.scss ├── assets ├── @fortawesome │ └── fontawesome-free │ │ ├── css │ │ └── all.min.css │ │ └── webfonts │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.woff2 │ │ ├── fa-solid-900.woff2 │ │ └── fa-v4compatibility.woff2 ├── @iframe-resizer │ └── parent │ │ ├── LICENSE │ │ └── index.umd.js ├── @mathjax │ └── mathjax-newcm-font │ │ └── chtml │ │ ├── dynamic │ │ ├── PUA.js │ │ ├── accents-b-i.js │ │ ├── accents.js │ │ ├── arabic.js │ │ ├── arrows.js │ │ ├── braille-d.js │ │ ├── braille.js │ │ ├── calligraphic.js │ │ ├── cherokee.js │ │ ├── cyrillic-ss.js │ │ ├── cyrillic.js │ │ ├── devanagari.js │ │ ├── double-struck.js │ │ ├── fraktur.js │ │ ├── greek-ss.js │ │ ├── greek.js │ │ ├── hebrew.js │ │ ├── latin-b.js │ │ ├── latin-bi.js │ │ ├── latin-i.js │ │ ├── latin.js │ │ ├── marrows.js │ │ ├── math.js │ │ ├── monospace-ex.js │ │ ├── monospace-l.js │ │ ├── monospace.js │ │ ├── mshapes.js │ │ ├── phonetics-ss.js │ │ ├── phonetics.js │ │ ├── sans-serif-b.js │ │ ├── sans-serif-bi.js │ │ ├── sans-serif-ex.js │ │ ├── sans-serif-i.js │ │ ├── sans-serif-r.js │ │ ├── sans-serif.js │ │ ├── script.js │ │ ├── shapes.js │ │ ├── symbols-b-i.js │ │ ├── symbols.js │ │ └── variants.js │ │ └── woff2 │ │ ├── mjx-ncm-ab.woff2 │ │ ├── mjx-ncm-abi.woff2 │ │ ├── mjx-ncm-ai.woff2 │ │ ├── mjx-ncm-ar.woff2 │ │ ├── mjx-ncm-arl.woff2 │ │ ├── mjx-ncm-b.woff2 │ │ ├── mjx-ncm-be.woff2 │ │ ├── mjx-ncm-bi.woff2 │ │ ├── mjx-ncm-br.woff2 │ │ ├── mjx-ncm-brd.woff2 │ │ ├── mjx-ncm-brk.woff2 │ │ ├── mjx-ncm-c.woff2 │ │ ├── mjx-ncm-cb.woff2 │ │ ├── mjx-ncm-ch.woff2 │ │ ├── mjx-ncm-chb.woff2 │ │ ├── mjx-ncm-chbi.woff2 │ │ ├── mjx-ncm-chi.woff2 │ │ ├── mjx-ncm-cy.woff2 │ │ ├── mjx-ncm-cyb.woff2 │ │ ├── mjx-ncm-cybi.woff2 │ │ ├── mjx-ncm-cyi.woff2 │ │ ├── mjx-ncm-cyss.woff2 │ │ ├── mjx-ncm-cyssb.woff2 │ │ ├── mjx-ncm-cyssbi.woff2 │ │ ├── mjx-ncm-cyssi.woff2 │ │ ├── mjx-ncm-ds.woff2 │ │ ├── mjx-ncm-dv.woff2 │ │ ├── mjx-ncm-em.woff2 │ │ ├── mjx-ncm-f.woff2 │ │ ├── mjx-ncm-fb.woff2 │ │ ├── mjx-ncm-gk.woff2 │ │ ├── mjx-ncm-gkb.woff2 │ │ ├── mjx-ncm-gkbi.woff2 │ │ ├── mjx-ncm-gki.woff2 │ │ ├── mjx-ncm-gkss.woff2 │ │ ├── mjx-ncm-gkssb.woff2 │ │ ├── mjx-ncm-gkssbi.woff2 │ │ ├── mjx-ncm-gkssi.woff2 │ │ ├── mjx-ncm-he.woff2 │ │ ├── mjx-ncm-heb.woff2 │ │ ├── mjx-ncm-hebi.woff2 │ │ ├── mjx-ncm-hei.woff2 │ │ ├── mjx-ncm-i.woff2 │ │ ├── mjx-ncm-lb.woff2 │ │ ├── mjx-ncm-li.woff2 │ │ ├── mjx-ncm-lib.woff2 │ │ ├── mjx-ncm-lo.woff2 │ │ ├── mjx-ncm-lr.woff2 │ │ ├── mjx-ncm-lt.woff2 │ │ ├── mjx-ncm-m.woff2 │ │ ├── mjx-ncm-mar.woff2 │ │ ├── mjx-ncm-mi.woff2 │ │ ├── mjx-ncm-ml.woff2 │ │ ├── mjx-ncm-mm.woff2 │ │ ├── mjx-ncm-msh.woff2 │ │ ├── mjx-ncm-mx.woff2 │ │ ├── mjx-ncm-n.woff2 │ │ ├── mjx-ncm-ob.woff2 │ │ ├── mjx-ncm-os.woff2 │ │ ├── mjx-ncm-ph.woff2 │ │ ├── mjx-ncm-phb.woff2 │ │ ├── mjx-ncm-phbi.woff2 │ │ ├── mjx-ncm-phi.woff2 │ │ ├── mjx-ncm-phss.woff2 │ │ ├── mjx-ncm-phssb.woff2 │ │ ├── mjx-ncm-phssbi.woff2 │ │ ├── mjx-ncm-phssi.woff2 │ │ ├── mjx-ncm-pu.woff2 │ │ ├── mjx-ncm-pub.woff2 │ │ ├── mjx-ncm-pubi.woff2 │ │ ├── mjx-ncm-pui.woff2 │ │ ├── mjx-ncm-rb.woff2 │ │ ├── mjx-ncm-s.woff2 │ │ ├── mjx-ncm-s3.woff2 │ │ ├── mjx-ncm-s4.woff2 │ │ ├── mjx-ncm-s5.woff2 │ │ ├── mjx-ncm-s6.woff2 │ │ ├── mjx-ncm-s7.woff2 │ │ ├── mjx-ncm-sb.woff2 │ │ ├── mjx-ncm-sh.woff2 │ │ ├── mjx-ncm-shb.woff2 │ │ ├── mjx-ncm-shbi.woff2 │ │ ├── mjx-ncm-shi.woff2 │ │ ├── mjx-ncm-so.woff2 │ │ ├── mjx-ncm-ss.woff2 │ │ ├── mjx-ncm-ssb.woff2 │ │ ├── mjx-ncm-ssbi.woff2 │ │ ├── mjx-ncm-ssbix.woff2 │ │ ├── mjx-ncm-ssbx.woff2 │ │ ├── mjx-ncm-ssi.woff2 │ │ ├── mjx-ncm-ssix.woff2 │ │ ├── mjx-ncm-sslb.woff2 │ │ ├── mjx-ncm-ssli.woff2 │ │ ├── mjx-ncm-sslib.woff2 │ │ ├── mjx-ncm-sslr.woff2 │ │ ├── mjx-ncm-ssx.woff2 │ │ ├── mjx-ncm-sy.woff2 │ │ ├── mjx-ncm-syb.woff2 │ │ ├── mjx-ncm-sybi.woff2 │ │ ├── mjx-ncm-syi.woff2 │ │ ├── mjx-ncm-u.woff2 │ │ ├── mjx-ncm-ue.woff2 │ │ ├── mjx-ncm-v.woff2 │ │ ├── mjx-ncm-vx.woff2 │ │ └── mjx-ncm-zero.woff2 ├── @twemoji │ └── api │ │ ├── LICENSE │ │ └── dist │ │ └── twemoji.min.js ├── algolia-min.css ├── algoliasearch │ └── dist │ │ └── algoliasearch.umd.js ├── algoliasearchLite.min.js ├── bootstrap-table │ ├── LICENSE │ └── dist │ │ ├── bootstrap-table.min.css │ │ ├── bootstrap-table.min.js │ │ └── extensions │ │ └── mobile │ │ └── bootstrap-table-mobile.min.js ├── bootstrap │ ├── LICENSE │ └── dist │ │ └── js │ │ ├── bootstrap.bundle.min.js │ │ └── bootstrap.bundle.min.js.map ├── instantsearch.js │ ├── LICENSE │ └── dist │ │ ├── instantsearch.production.min.js │ │ └── instantsearch.production.min.js.map ├── instantsearch.production.min.js ├── intersection-observer │ ├── intersection-observer.js │ └── package.json ├── jekyll-theme-cs50.js ├── jquery │ ├── LICENSE.txt │ └── dist │ │ └── jquery.min.js ├── luxon │ ├── LICENSE.md │ └── build │ │ └── global │ │ └── luxon.min.js ├── mathjax │ ├── LICENSE │ ├── sre │ │ ├── mathmaps │ │ │ ├── af.json │ │ │ ├── base.json │ │ │ ├── ca.json │ │ │ ├── da.json │ │ │ ├── de.json │ │ │ ├── en.json │ │ │ ├── es.json │ │ │ ├── euro.json │ │ │ ├── fr.json │ │ │ ├── hi.json │ │ │ ├── it.json │ │ │ ├── ko.json │ │ │ ├── nb.json │ │ │ ├── nemeth.json │ │ │ ├── nn.json │ │ │ └── sv.json │ │ └── speech-worker.js │ └── tex-mml-chtml.js ├── mermaid │ ├── dist │ │ └── mermaid.min.js │ └── package.json ├── page.js ├── page.scss ├── popper.js │ └── dist │ │ └── umd │ │ └── popper.min.js ├── reset-min.css ├── scratchblocks.min.js ├── scratchblocks.min.js.map └── vanilla-lazyload │ ├── LICENSE │ └── dist │ └── lazyload.min.js ├── jekyll-theme-cs50.gemspec ├── lib ├── jekyll-theme-cs50.rb ├── jekyll-theme-cs50 │ └── constants.rb └── liquid-tag-parser.rb ├── package-lock.json └── package.json /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | on: push 2 | jobs: 3 | deploy: 4 | runs-on: ubuntu-latest 5 | steps: 6 | - name: Re-deploy dependents 7 | if: ${{ github.ref == 'refs/heads/develop' }} 8 | uses: actions/github-script@v7 9 | with: 10 | github-token: ${{ secrets.DEPLOY50_PAT }} 11 | script: | 12 | const dependents = [ 13 | ['ai', '2024/x'], 14 | ['ai', '2025/fall'], 15 | ['ap', '2024'], 16 | ['business', '2017/x'], 17 | ['business', '2025/fall'], 18 | ['cs50.tf', 'main'], 19 | ['cybersecurity', '2023/x'], 20 | ['cybersecurity', '2025/fall'], 21 | ['games', '2018/x'], 22 | ['harvard', '2025/x'], 23 | ['harvard', '2025/fall'], 24 | ['hbap.io', 'main'], 25 | ['hls', '2025/winter'], 26 | ['law', '2019/x'], 27 | ['mobile', '2018/x'], 28 | ['oxford', '2025/michaelmas'], 29 | ['python', '2022/x'], 30 | ['r', '2024/x'], 31 | ['r', '2025/fall'], 32 | ['scratch', '2024/x'], 33 | ['sql', '2024/x'], 34 | ['sql', '2025/fall'], 35 | ['technology', '2017/x'], 36 | ['web', '2020/x'], 37 | ['web', '2025/fall'] 38 | ]; 39 | for (let dependent of dependents) { 40 | await github.rest.actions.createWorkflowDispatch({ 41 | owner: 'cs50', 42 | repo: dependent[0], 43 | workflow_id: 'main.yml', 44 | ref: dependent[1] 45 | }); 46 | } 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .* 2 | !/.github/ 3 | !.gitignore 4 | 5 | *.gem 6 | 7 | # https://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/ 8 | Gemfile.lock 9 | 10 | _sass/bootstrap/* 11 | !_sass/bootstrap/LICENSE 12 | !_sass/bootstrap/scss/ 13 | 14 | _sass/primer-markdown/* 15 | !_sass/primer-markdown/LICENSE 16 | !_sass/primer-markdown/build/ 17 | _sass/primer-markdown/build/* 18 | !_sass/primer-markdown/build/build.scss 19 | 20 | _site/ 21 | 22 | assets/algoliasearch/* 23 | !assets/algoliasearch/dist/ 24 | assets/algoliasearch/dist/* 25 | !assets/algoliasearch/dist/algoliasearch.umd.js 26 | 27 | assets/bootstrap/* 28 | !assets/bootstrap/LICENSE 29 | !assets/bootstrap/dist/ 30 | assets/bootstrap/dist/* 31 | !assets/bootstrap/dist/js/ 32 | assets/bootstrap/dist/js/* 33 | !assets/bootstrap/dist/js/bootstrap.bundle.min.js 34 | !assets/bootstrap/dist/js/bootstrap.bundle.min.js.map 35 | 36 | assets/bootstrap-table/* 37 | !assets/bootstrap-table/LICENSE 38 | !assets/bootstrap-table/dist/ 39 | assets/bootstrap-table/dist/* 40 | !assets/bootstrap-table/dist/bootstrap-table.min.css 41 | !assets/bootstrap-table/dist/bootstrap-table.min.js 42 | !assets/bootstrap-table/dist/extensions/ 43 | assets/bootstrap-table/dist/extensions/* 44 | !assets/bootstrap-table/dist/extensions/mobile/ 45 | assets/bootstrap-table/dist/extensions/mobile/* 46 | !assets/bootstrap-table/dist/extensions/mobile/bootstrap-table-mobile.min.js 47 | 48 | assets/@fortawesome/* 49 | !assets/@fortawesome/fontawesome-free/ 50 | assets/@fortawesome/fontawesome-free/* 51 | !assets/@fortawesome/fontawesome-free/css/ 52 | assets/@fortawesome/fontawesome-free/css/* 53 | !assets/@fortawesome/fontawesome-free/css/all.min.css 54 | !assets/@fortawesome/fontawesome-free/webfonts/ 55 | 56 | assets/@iframe-resizer/* 57 | !assets/@iframe-resizer/parent/ 58 | assets/@iframe-resizer/parent/* 59 | !assets/@iframe-resizer/parent/index.umd.js 60 | !assets/@iframe-resizer/parent/LICENSE 61 | 62 | assets/instantsearch.js/* 63 | !assets/instantsearch.js/LICENSE 64 | !assets/instantsearch.js/dist/ 65 | assets/instantsearch.js/dist/* 66 | !assets/instantsearch.js/dist/instantsearch.production.min.js 67 | !assets/instantsearch.js/dist/instantsearch.production.min.js.map 68 | 69 | assets/intersection-observer/* 70 | !assets/intersection-observer/intersection-observer.js 71 | !assets/intersection-observer/package.json 72 | 73 | assets/jquery/* 74 | !assets/jquery/LICENSE.txt 75 | !assets/jquery/dist/ 76 | assets/jquery/dist/* 77 | !assets/jquery/dist/jquery.min.js 78 | 79 | assets/luxon/* 80 | !assets/luxon/LICENSE.md 81 | !assets/luxon/build/ 82 | assets/luxon/build/* 83 | !assets/luxon/build/global/ 84 | assets/luxon/build/global/* 85 | !assets/luxon/build/global/luxon.min.js 86 | 87 | assets/mathjax/* 88 | !assets/mathjax/LICENSE 89 | !assets/mathjax/tex-mml-chtml.js 90 | !assets/mathjax/sre/ 91 | assets/mathjax/sre/* 92 | !assets/mathjax/sre/speech-worker.js 93 | !assets/mathjax/sre/mathmaps/ 94 | assets/@mathjax/* 95 | !assets/@mathjax/mathjax-newcm-font/ 96 | assets/@mathjax/mathjax-newcm-font/* 97 | !assets/@mathjax/mathjax-newcm-font/chtml/ 98 | assets/@mathjax/mathjax-newcm-font/chtml/* 99 | !assets/@mathjax/mathjax-newcm-font/chtml/dynamic/ 100 | !assets/@mathjax/mathjax-newcm-font/chtml/woff2/ 101 | 102 | assets/mermaid/* 103 | !assets/mermaid/package.json 104 | !assets/mermaid/dist/ 105 | assets/mermaid/dist/* 106 | !assets/mermaid/dist/mermaid.min.js 107 | 108 | assets/popper.js/* 109 | !assets/popper.js/dist/ 110 | assets/popper.js/dist/* 111 | !assets/popper.js/dist/umd/ 112 | assets/popper.js/dist/umd/* 113 | !assets/popper.js/dist/umd/popper.min.js 114 | 115 | assets/@twemoji/* 116 | !assets/@twemoji/api/ 117 | assets/@twemoji/api/* 118 | !assets/@twemoji/api/LICENSE 119 | !assets/@twemoji/api/dist/ 120 | assets/@twemoji/api/dist/* 121 | !assets/@twemoji/api/dist/twemoji.min.js 122 | 123 | assets/vanilla-lazyload/* 124 | !assets/vanilla-lazyload/LICENSE 125 | !assets/vanilla-lazyload/dist/ 126 | assets/vanilla-lazyload/dist/* 127 | !assets/vanilla-lazyload/dist/lazyload.min.js 128 | 129 | node_modules/ 130 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source "https://rubygems.org" 4 | gemspec 5 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | defaults: 2 | - 3 | scope: 4 | path: "" 5 | values: 6 | layout: "page" 7 | 8 | sass: 9 | load_paths: 10 | - _sass 11 | - _sass/node_modules 12 | -------------------------------------------------------------------------------- /_includes/alert.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/_includes/alert.md -------------------------------------------------------------------------------- /_includes/footer.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/_includes/footer.md -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/_includes/head.html -------------------------------------------------------------------------------- /_includes/header.md: -------------------------------------------------------------------------------- 1 | # [{{ site.cs50.title }}](/) 2 | -------------------------------------------------------------------------------- /_includes/nav.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/_includes/nav.md -------------------------------------------------------------------------------- /_layouts/redirect.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /_sass/bootstrap/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2025 The Bootstrap Authors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | // scss-docs-start alert-css-vars 7 | --#{$prefix}alert-bg: transparent; 8 | --#{$prefix}alert-padding-x: #{$alert-padding-x}; 9 | --#{$prefix}alert-padding-y: #{$alert-padding-y}; 10 | --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom}; 11 | --#{$prefix}alert-color: inherit; 12 | --#{$prefix}alert-border-color: transparent; 13 | --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color); 14 | --#{$prefix}alert-border-radius: #{$alert-border-radius}; 15 | --#{$prefix}alert-link-color: inherit; 16 | // scss-docs-end alert-css-vars 17 | 18 | position: relative; 19 | padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x); 20 | margin-bottom: var(--#{$prefix}alert-margin-bottom); 21 | color: var(--#{$prefix}alert-color); 22 | background-color: var(--#{$prefix}alert-bg); 23 | border: var(--#{$prefix}alert-border); 24 | @include border-radius(var(--#{$prefix}alert-border-radius)); 25 | } 26 | 27 | // Headings for larger alerts 28 | .alert-heading { 29 | // Specified to prevent conflicts of changing $headings-color 30 | color: inherit; 31 | } 32 | 33 | // Provide class for links that match alerts 34 | .alert-link { 35 | font-weight: $alert-link-font-weight; 36 | color: var(--#{$prefix}alert-link-color); 37 | } 38 | 39 | 40 | // Dismissible alerts 41 | // 42 | // Expand the right padding and account for the close button's positioning. 43 | 44 | .alert-dismissible { 45 | padding-right: $alert-dismissible-padding-r; 46 | 47 | // Adjust close link position 48 | .btn-close { 49 | position: absolute; 50 | top: 0; 51 | right: 0; 52 | z-index: $stretched-link-z-index + 1; 53 | padding: $alert-padding-y * 1.25 $alert-padding-x; 54 | } 55 | } 56 | 57 | 58 | // scss-docs-start alert-modifiers 59 | // Generate contextual modifier classes for colorizing the alert 60 | @each $state in map-keys($theme-colors) { 61 | .alert-#{$state} { 62 | --#{$prefix}alert-color: var(--#{$prefix}#{$state}-text-emphasis); 63 | --#{$prefix}alert-bg: var(--#{$prefix}#{$state}-bg-subtle); 64 | --#{$prefix}alert-border-color: var(--#{$prefix}#{$state}-border-subtle); 65 | --#{$prefix}alert-link-color: var(--#{$prefix}#{$state}-text-emphasis); 66 | } 67 | } 68 | // scss-docs-end alert-modifiers 69 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | // scss-docs-start badge-css-vars 8 | --#{$prefix}badge-padding-x: #{$badge-padding-x}; 9 | --#{$prefix}badge-padding-y: #{$badge-padding-y}; 10 | @include rfs($badge-font-size, --#{$prefix}badge-font-size); 11 | --#{$prefix}badge-font-weight: #{$badge-font-weight}; 12 | --#{$prefix}badge-color: #{$badge-color}; 13 | --#{$prefix}badge-border-radius: #{$badge-border-radius}; 14 | // scss-docs-end badge-css-vars 15 | 16 | display: inline-block; 17 | padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x); 18 | @include font-size(var(--#{$prefix}badge-font-size)); 19 | font-weight: var(--#{$prefix}badge-font-weight); 20 | line-height: 1; 21 | color: var(--#{$prefix}badge-color); 22 | text-align: center; 23 | white-space: nowrap; 24 | vertical-align: baseline; 25 | @include border-radius(var(--#{$prefix}badge-border-radius)); 26 | @include gradient-bg(); 27 | 28 | // Empty badges collapse automatically 29 | &:empty { 30 | display: none; 31 | } 32 | } 33 | 34 | // Quick fix for badges in buttons 35 | .btn .badge { 36 | position: relative; 37 | top: -1px; 38 | } 39 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | // scss-docs-start breadcrumb-css-vars 3 | --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x}; 4 | --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y}; 5 | --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom}; 6 | @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size); 7 | --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg}; 8 | --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius}; 9 | --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color}; 10 | --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x}; 11 | --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color}; 12 | // scss-docs-end breadcrumb-css-vars 13 | 14 | display: flex; 15 | flex-wrap: wrap; 16 | padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x); 17 | margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom); 18 | @include font-size(var(--#{$prefix}breadcrumb-font-size)); 19 | list-style: none; 20 | background-color: var(--#{$prefix}breadcrumb-bg); 21 | @include border-radius(var(--#{$prefix}breadcrumb-border-radius)); 22 | } 23 | 24 | .breadcrumb-item { 25 | // The separator between breadcrumbs (by default, a forward-slash: "/") 26 | + .breadcrumb-item { 27 | padding-left: var(--#{$prefix}breadcrumb-item-padding-x); 28 | 29 | &::before { 30 | float: left; // Suppress inline spacings and underlining of the separator 31 | padding-right: var(--#{$prefix}breadcrumb-item-padding-x); 32 | color: var(--#{$prefix}breadcrumb-divider-color); 33 | content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{"/* rtl:"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{"*/"}; 34 | } 35 | } 36 | 37 | &.active { 38 | color: var(--#{$prefix}breadcrumb-item-active-color); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_button-group.scss: -------------------------------------------------------------------------------- 1 | // Make the div behave like a button 2 | .btn-group, 3 | .btn-group-vertical { 4 | position: relative; 5 | display: inline-flex; 6 | vertical-align: middle; // match .btn alignment given font-size hack above 7 | 8 | > .btn { 9 | position: relative; 10 | flex: 1 1 auto; 11 | } 12 | 13 | // Bring the hover, focused, and "active" buttons to the front to overlay 14 | // the borders properly 15 | > .btn-check:checked + .btn, 16 | > .btn-check:focus + .btn, 17 | > .btn:hover, 18 | > .btn:focus, 19 | > .btn:active, 20 | > .btn.active { 21 | z-index: 1; 22 | } 23 | } 24 | 25 | // Optional: Group multiple button groups together for a toolbar 26 | .btn-toolbar { 27 | display: flex; 28 | flex-wrap: wrap; 29 | justify-content: flex-start; 30 | 31 | .input-group { 32 | width: auto; 33 | } 34 | } 35 | 36 | .btn-group { 37 | @include border-radius($btn-border-radius); 38 | 39 | // Prevent double borders when buttons are next to each other 40 | > :not(.btn-check:first-child) + .btn, 41 | > .btn-group:not(:first-child) { 42 | margin-left: calc(-1 * #{$btn-border-width}); // stylelint-disable-line function-disallowed-list 43 | } 44 | 45 | // Reset rounded corners 46 | > .btn:not(:last-child):not(.dropdown-toggle), 47 | > .btn.dropdown-toggle-split:first-child, 48 | > .btn-group:not(:last-child) > .btn { 49 | @include border-end-radius(0); 50 | } 51 | 52 | // The left radius should be 0 if the button is: 53 | // - the "third or more" child 54 | // - the second child and the previous element isn't `.btn-check` (making it the first child visually) 55 | // - part of a btn-group which isn't the first child 56 | > .btn:nth-child(n + 3), 57 | > :not(.btn-check) + .btn, 58 | > .btn-group:not(:first-child) > .btn { 59 | @include border-start-radius(0); 60 | } 61 | } 62 | 63 | // Sizing 64 | // 65 | // Remix the default button sizing classes into new ones for easier manipulation. 66 | 67 | .btn-group-sm > .btn { @extend .btn-sm; } 68 | .btn-group-lg > .btn { @extend .btn-lg; } 69 | 70 | 71 | // 72 | // Split button dropdowns 73 | // 74 | 75 | .dropdown-toggle-split { 76 | padding-right: $btn-padding-x * .75; 77 | padding-left: $btn-padding-x * .75; 78 | 79 | &::after, 80 | .dropup &::after, 81 | .dropend &::after { 82 | margin-left: 0; 83 | } 84 | 85 | .dropstart &::before { 86 | margin-right: 0; 87 | } 88 | } 89 | 90 | .btn-sm + .dropdown-toggle-split { 91 | padding-right: $btn-padding-x-sm * .75; 92 | padding-left: $btn-padding-x-sm * .75; 93 | } 94 | 95 | .btn-lg + .dropdown-toggle-split { 96 | padding-right: $btn-padding-x-lg * .75; 97 | padding-left: $btn-padding-x-lg * .75; 98 | } 99 | 100 | 101 | // The clickable button for toggling the menu 102 | // Set the same inset shadow as the :active state 103 | .btn-group.show .dropdown-toggle { 104 | @include box-shadow($btn-active-box-shadow); 105 | 106 | // Show no shadow for `.btn-link` since it has no other button styles. 107 | &.btn-link { 108 | @include box-shadow(none); 109 | } 110 | } 111 | 112 | 113 | // 114 | // Vertical button groups 115 | // 116 | 117 | .btn-group-vertical { 118 | flex-direction: column; 119 | align-items: flex-start; 120 | justify-content: center; 121 | 122 | > .btn, 123 | > .btn-group { 124 | width: 100%; 125 | } 126 | 127 | > .btn:not(:first-child), 128 | > .btn-group:not(:first-child) { 129 | margin-top: calc(-1 * #{$btn-border-width}); // stylelint-disable-line function-disallowed-list 130 | } 131 | 132 | // Reset rounded corners 133 | > .btn:not(:last-child):not(.dropdown-toggle), 134 | > .btn-group:not(:last-child) > .btn { 135 | @include border-bottom-radius(0); 136 | } 137 | 138 | // The top radius should be 0 if the button is: 139 | // - the "third or more" child 140 | // - the second child and the previous element isn't `.btn-check` (making it the first child visually) 141 | // - part of a btn-group which isn't the first child 142 | > .btn:nth-child(n + 3), 143 | > :not(.btn-check) + .btn, 144 | > .btn-group:not(:first-child) > .btn { 145 | @include border-top-radius(0); 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_close.scss: -------------------------------------------------------------------------------- 1 | // Transparent background and border properties included for button version. 2 | // iOS requires the button element instead of an anchor tag. 3 | // If you want the anchor version, it requires `href="#"`. 4 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 5 | 6 | .btn-close { 7 | // scss-docs-start close-css-vars 8 | --#{$prefix}btn-close-color: #{$btn-close-color}; 9 | --#{$prefix}btn-close-bg: #{ escape-svg($btn-close-bg) }; 10 | --#{$prefix}btn-close-opacity: #{$btn-close-opacity}; 11 | --#{$prefix}btn-close-hover-opacity: #{$btn-close-hover-opacity}; 12 | --#{$prefix}btn-close-focus-shadow: #{$btn-close-focus-shadow}; 13 | --#{$prefix}btn-close-focus-opacity: #{$btn-close-focus-opacity}; 14 | --#{$prefix}btn-close-disabled-opacity: #{$btn-close-disabled-opacity}; 15 | // scss-docs-end close-css-vars 16 | 17 | box-sizing: content-box; 18 | width: $btn-close-width; 19 | height: $btn-close-height; 20 | padding: $btn-close-padding-y $btn-close-padding-x; 21 | color: var(--#{$prefix}btn-close-color); 22 | background: transparent var(--#{$prefix}btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements 23 | filter: var(--#{$prefix}btn-close-filter); 24 | border: 0; // for button elements 25 | @include border-radius(); 26 | opacity: var(--#{$prefix}btn-close-opacity); 27 | 28 | // Override 's hover style 29 | &:hover { 30 | color: var(--#{$prefix}btn-close-color); 31 | text-decoration: none; 32 | opacity: var(--#{$prefix}btn-close-hover-opacity); 33 | } 34 | 35 | &:focus { 36 | outline: 0; 37 | box-shadow: var(--#{$prefix}btn-close-focus-shadow); 38 | opacity: var(--#{$prefix}btn-close-focus-opacity); 39 | } 40 | 41 | &:disabled, 42 | &.disabled { 43 | pointer-events: none; 44 | user-select: none; 45 | opacity: var(--#{$prefix}btn-close-disabled-opacity); 46 | } 47 | } 48 | 49 | @mixin btn-close-white() { 50 | --#{$prefix}btn-close-filter: #{$btn-close-filter-dark}; 51 | } 52 | 53 | .btn-close-white { 54 | @include btn-close-white(); 55 | } 56 | 57 | :root, 58 | [data-bs-theme="light"] { 59 | --#{$prefix}btn-close-filter: #{$btn-close-filter}; 60 | } 61 | 62 | @if $enable-dark-mode { 63 | @include color-mode(dark, true) { 64 | @include btn-close-white(); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_containers.scss: -------------------------------------------------------------------------------- 1 | // Container widths 2 | // 3 | // Set the container width, and override it for fixed navbars in media queries. 4 | 5 | @if $enable-container-classes { 6 | // Single container class with breakpoint max-widths 7 | .container, 8 | // 100% wide container at all breakpoints 9 | .container-fluid { 10 | @include make-container(); 11 | } 12 | 13 | // Responsive containers that are 100% wide until a breakpoint 14 | @each $breakpoint, $container-max-width in $container-max-widths { 15 | .container-#{$breakpoint} { 16 | @extend .container-fluid; 17 | } 18 | 19 | @include media-breakpoint-up($breakpoint, $grid-breakpoints) { 20 | %responsive-container-#{$breakpoint} { 21 | max-width: $container-max-width; 22 | } 23 | 24 | // Extend each breakpoint which is smaller or equal to the current breakpoint 25 | $extend-breakpoint: true; 26 | 27 | @each $name, $width in $grid-breakpoints { 28 | @if ($extend-breakpoint) { 29 | .container#{breakpoint-infix($name, $grid-breakpoints)} { 30 | @extend %responsive-container-#{$breakpoint}; 31 | } 32 | 33 | // Once the current breakpoint is reached, stop extending 34 | @if ($breakpoint == $name) { 35 | $extend-breakpoint: false; 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_forms.scss: -------------------------------------------------------------------------------- 1 | @import "forms/labels"; 2 | @import "forms/form-text"; 3 | @import "forms/form-control"; 4 | @import "forms/form-select"; 5 | @import "forms/form-check"; 6 | @import "forms/form-range"; 7 | @import "forms/floating-labels"; 8 | @import "forms/input-group"; 9 | @import "forms/validation"; 10 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_grid.scss: -------------------------------------------------------------------------------- 1 | // Row 2 | // 3 | // Rows contain your columns. 4 | 5 | :root { 6 | @each $name, $value in $grid-breakpoints { 7 | --#{$prefix}breakpoint-#{$name}: #{$value}; 8 | } 9 | } 10 | 11 | @if $enable-grid-classes { 12 | .row { 13 | @include make-row(); 14 | 15 | > * { 16 | @include make-col-ready(); 17 | } 18 | } 19 | } 20 | 21 | @if $enable-cssgrid { 22 | .grid { 23 | display: grid; 24 | grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr); 25 | grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr); 26 | gap: var(--#{$prefix}gap, #{$grid-gutter-width}); 27 | 28 | @include make-cssgrid(); 29 | } 30 | } 31 | 32 | 33 | // Columns 34 | // 35 | // Common styles for small and large grid columns 36 | 37 | @if $enable-grid-classes { 38 | @include make-grid-columns(); 39 | } 40 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_helpers.scss: -------------------------------------------------------------------------------- 1 | @import "helpers/clearfix"; 2 | @import "helpers/color-bg"; 3 | @import "helpers/colored-links"; 4 | @import "helpers/focus-ring"; 5 | @import "helpers/icon-link"; 6 | @import "helpers/ratio"; 7 | @import "helpers/position"; 8 | @import "helpers/stacks"; 9 | @import "helpers/visually-hidden"; 10 | @import "helpers/stretched-link"; 11 | @import "helpers/text-truncation"; 12 | @import "helpers/vr"; 13 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_images.scss: -------------------------------------------------------------------------------- 1 | // Responsive images (ensure images don't scale beyond their parents) 2 | // 3 | // This is purposefully opt-in via an explicit class rather than being the default for all ``s. 4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2, 5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) 6 | // which weren't expecting the images within themselves to be involuntarily resized. 7 | // See also https://github.com/twbs/bootstrap/issues/18178 8 | .img-fluid { 9 | @include img-fluid(); 10 | } 11 | 12 | 13 | // Image thumbnails 14 | .img-thumbnail { 15 | padding: $thumbnail-padding; 16 | background-color: $thumbnail-bg; 17 | border: $thumbnail-border-width solid $thumbnail-border-color; 18 | @include border-radius($thumbnail-border-radius); 19 | @include box-shadow($thumbnail-box-shadow); 20 | 21 | // Keep them at most 100% wide 22 | @include img-fluid(); 23 | } 24 | 25 | // 26 | // Figures 27 | // 28 | 29 | .figure { 30 | // Ensures the caption's text aligns with the image. 31 | display: inline-block; 32 | } 33 | 34 | .figure-img { 35 | margin-bottom: $spacer * .5; 36 | line-height: 1; 37 | } 38 | 39 | .figure-caption { 40 | @include font-size($figure-caption-font-size); 41 | color: $figure-caption-color; 42 | } 43 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // 3 | // Used in conjunction with global variables to enable certain theme features. 4 | 5 | // Vendor 6 | @import "vendor/rfs"; 7 | 8 | // Deprecate 9 | @import "mixins/deprecate"; 10 | 11 | // Helpers 12 | @import "mixins/breakpoints"; 13 | @import "mixins/color-mode"; 14 | @import "mixins/color-scheme"; 15 | @import "mixins/image"; 16 | @import "mixins/resize"; 17 | @import "mixins/visually-hidden"; 18 | @import "mixins/reset-text"; 19 | @import "mixins/text-truncate"; 20 | 21 | // Utilities 22 | @import "mixins/utilities"; 23 | 24 | // Components 25 | @import "mixins/backdrop"; 26 | @import "mixins/buttons"; 27 | @import "mixins/caret"; 28 | @import "mixins/pagination"; 29 | @import "mixins/lists"; 30 | @import "mixins/forms"; 31 | @import "mixins/table-variants"; 32 | 33 | // Skins 34 | @import "mixins/border-radius"; 35 | @import "mixins/box-shadow"; 36 | @import "mixins/gradients"; 37 | @import "mixins/transition"; 38 | 39 | // Layout 40 | @import "mixins/clearfix"; 41 | @import "mixins/container"; 42 | @import "mixins/grid"; 43 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_offcanvas.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable function-disallowed-list 2 | 3 | %offcanvas-css-vars { 4 | // scss-docs-start offcanvas-css-vars 5 | --#{$prefix}offcanvas-zindex: #{$zindex-offcanvas}; 6 | --#{$prefix}offcanvas-width: #{$offcanvas-horizontal-width}; 7 | --#{$prefix}offcanvas-height: #{$offcanvas-vertical-height}; 8 | --#{$prefix}offcanvas-padding-x: #{$offcanvas-padding-x}; 9 | --#{$prefix}offcanvas-padding-y: #{$offcanvas-padding-y}; 10 | --#{$prefix}offcanvas-color: #{$offcanvas-color}; 11 | --#{$prefix}offcanvas-bg: #{$offcanvas-bg-color}; 12 | --#{$prefix}offcanvas-border-width: #{$offcanvas-border-width}; 13 | --#{$prefix}offcanvas-border-color: #{$offcanvas-border-color}; 14 | --#{$prefix}offcanvas-box-shadow: #{$offcanvas-box-shadow}; 15 | --#{$prefix}offcanvas-transition: #{transform $offcanvas-transition-duration ease-in-out}; 16 | --#{$prefix}offcanvas-title-line-height: #{$offcanvas-title-line-height}; 17 | // scss-docs-end offcanvas-css-vars 18 | } 19 | 20 | @each $breakpoint in map-keys($grid-breakpoints) { 21 | $next: breakpoint-next($breakpoint, $grid-breakpoints); 22 | $infix: breakpoint-infix($next, $grid-breakpoints); 23 | 24 | .offcanvas#{$infix} { 25 | @extend %offcanvas-css-vars; 26 | } 27 | } 28 | 29 | @each $breakpoint in map-keys($grid-breakpoints) { 30 | $next: breakpoint-next($breakpoint, $grid-breakpoints); 31 | $infix: breakpoint-infix($next, $grid-breakpoints); 32 | 33 | .offcanvas#{$infix} { 34 | @include media-breakpoint-down($next) { 35 | position: fixed; 36 | bottom: 0; 37 | z-index: var(--#{$prefix}offcanvas-zindex); 38 | display: flex; 39 | flex-direction: column; 40 | max-width: 100%; 41 | color: var(--#{$prefix}offcanvas-color); 42 | visibility: hidden; 43 | background-color: var(--#{$prefix}offcanvas-bg); 44 | background-clip: padding-box; 45 | outline: 0; 46 | @include box-shadow(var(--#{$prefix}offcanvas-box-shadow)); 47 | @include transition(var(--#{$prefix}offcanvas-transition)); 48 | 49 | &.offcanvas-start { 50 | top: 0; 51 | left: 0; 52 | width: var(--#{$prefix}offcanvas-width); 53 | border-right: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color); 54 | transform: translateX(-100%); 55 | } 56 | 57 | &.offcanvas-end { 58 | top: 0; 59 | right: 0; 60 | width: var(--#{$prefix}offcanvas-width); 61 | border-left: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color); 62 | transform: translateX(100%); 63 | } 64 | 65 | &.offcanvas-top { 66 | top: 0; 67 | right: 0; 68 | left: 0; 69 | height: var(--#{$prefix}offcanvas-height); 70 | max-height: 100%; 71 | border-bottom: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color); 72 | transform: translateY(-100%); 73 | } 74 | 75 | &.offcanvas-bottom { 76 | right: 0; 77 | left: 0; 78 | height: var(--#{$prefix}offcanvas-height); 79 | max-height: 100%; 80 | border-top: var(--#{$prefix}offcanvas-border-width) solid var(--#{$prefix}offcanvas-border-color); 81 | transform: translateY(100%); 82 | } 83 | 84 | &.showing, 85 | &.show:not(.hiding) { 86 | transform: none; 87 | } 88 | 89 | &.showing, 90 | &.hiding, 91 | &.show { 92 | visibility: visible; 93 | } 94 | } 95 | 96 | @if not ($infix == "") { 97 | @include media-breakpoint-up($next) { 98 | --#{$prefix}offcanvas-height: auto; 99 | --#{$prefix}offcanvas-border-width: 0; 100 | background-color: transparent !important; // stylelint-disable-line declaration-no-important 101 | 102 | .offcanvas-header { 103 | display: none; 104 | } 105 | 106 | .offcanvas-body { 107 | display: flex; 108 | flex-grow: 0; 109 | padding: 0; 110 | overflow-y: visible; 111 | // Reset `background-color` in case `.bg-*` classes are used in offcanvas 112 | background-color: transparent !important; // stylelint-disable-line declaration-no-important 113 | } 114 | } 115 | } 116 | } 117 | } 118 | 119 | .offcanvas-backdrop { 120 | @include overlay-backdrop($zindex-offcanvas-backdrop, $offcanvas-backdrop-bg, $offcanvas-backdrop-opacity); 121 | } 122 | 123 | .offcanvas-header { 124 | display: flex; 125 | align-items: center; 126 | padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x); 127 | 128 | .btn-close { 129 | padding: calc(var(--#{$prefix}offcanvas-padding-y) * .5) calc(var(--#{$prefix}offcanvas-padding-x) * .5); 130 | // Split properties to avoid invalid calc() function if value is 0 131 | margin-top: calc(-.5 * var(--#{$prefix}offcanvas-padding-y)); 132 | margin-right: calc(-.5 * var(--#{$prefix}offcanvas-padding-x)); 133 | margin-bottom: calc(-.5 * var(--#{$prefix}offcanvas-padding-y)); 134 | margin-left: auto; 135 | } 136 | } 137 | 138 | .offcanvas-title { 139 | margin-bottom: 0; 140 | line-height: var(--#{$prefix}offcanvas-title-line-height); 141 | } 142 | 143 | .offcanvas-body { 144 | flex-grow: 1; 145 | padding: var(--#{$prefix}offcanvas-padding-y) var(--#{$prefix}offcanvas-padding-x); 146 | overflow-y: auto; 147 | } 148 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_pagination.scss: -------------------------------------------------------------------------------- 1 | .pagination { 2 | // scss-docs-start pagination-css-vars 3 | --#{$prefix}pagination-padding-x: #{$pagination-padding-x}; 4 | --#{$prefix}pagination-padding-y: #{$pagination-padding-y}; 5 | @include rfs($pagination-font-size, --#{$prefix}pagination-font-size); 6 | --#{$prefix}pagination-color: #{$pagination-color}; 7 | --#{$prefix}pagination-bg: #{$pagination-bg}; 8 | --#{$prefix}pagination-border-width: #{$pagination-border-width}; 9 | --#{$prefix}pagination-border-color: #{$pagination-border-color}; 10 | --#{$prefix}pagination-border-radius: #{$pagination-border-radius}; 11 | --#{$prefix}pagination-hover-color: #{$pagination-hover-color}; 12 | --#{$prefix}pagination-hover-bg: #{$pagination-hover-bg}; 13 | --#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color}; 14 | --#{$prefix}pagination-focus-color: #{$pagination-focus-color}; 15 | --#{$prefix}pagination-focus-bg: #{$pagination-focus-bg}; 16 | --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow}; 17 | --#{$prefix}pagination-active-color: #{$pagination-active-color}; 18 | --#{$prefix}pagination-active-bg: #{$pagination-active-bg}; 19 | --#{$prefix}pagination-active-border-color: #{$pagination-active-border-color}; 20 | --#{$prefix}pagination-disabled-color: #{$pagination-disabled-color}; 21 | --#{$prefix}pagination-disabled-bg: #{$pagination-disabled-bg}; 22 | --#{$prefix}pagination-disabled-border-color: #{$pagination-disabled-border-color}; 23 | // scss-docs-end pagination-css-vars 24 | 25 | display: flex; 26 | @include list-unstyled(); 27 | } 28 | 29 | .page-link { 30 | position: relative; 31 | display: block; 32 | padding: var(--#{$prefix}pagination-padding-y) var(--#{$prefix}pagination-padding-x); 33 | @include font-size(var(--#{$prefix}pagination-font-size)); 34 | color: var(--#{$prefix}pagination-color); 35 | text-decoration: if($link-decoration == none, null, none); 36 | background-color: var(--#{$prefix}pagination-bg); 37 | border: var(--#{$prefix}pagination-border-width) solid var(--#{$prefix}pagination-border-color); 38 | @include transition($pagination-transition); 39 | 40 | &:hover { 41 | z-index: 2; 42 | color: var(--#{$prefix}pagination-hover-color); 43 | text-decoration: if($link-hover-decoration == underline, none, null); 44 | background-color: var(--#{$prefix}pagination-hover-bg); 45 | border-color: var(--#{$prefix}pagination-hover-border-color); 46 | } 47 | 48 | &:focus { 49 | z-index: 3; 50 | color: var(--#{$prefix}pagination-focus-color); 51 | background-color: var(--#{$prefix}pagination-focus-bg); 52 | outline: $pagination-focus-outline; 53 | box-shadow: var(--#{$prefix}pagination-focus-box-shadow); 54 | } 55 | 56 | &.active, 57 | .active > & { 58 | z-index: 3; 59 | color: var(--#{$prefix}pagination-active-color); 60 | @include gradient-bg(var(--#{$prefix}pagination-active-bg)); 61 | border-color: var(--#{$prefix}pagination-active-border-color); 62 | } 63 | 64 | &.disabled, 65 | .disabled > & { 66 | color: var(--#{$prefix}pagination-disabled-color); 67 | pointer-events: none; 68 | background-color: var(--#{$prefix}pagination-disabled-bg); 69 | border-color: var(--#{$prefix}pagination-disabled-border-color); 70 | } 71 | } 72 | 73 | .page-item { 74 | &:not(:first-child) .page-link { 75 | margin-left: $pagination-margin-start; 76 | } 77 | 78 | @if $pagination-margin-start == calc(-1 * #{$pagination-border-width}) { 79 | &:first-child { 80 | .page-link { 81 | @include border-start-radius(var(--#{$prefix}pagination-border-radius)); 82 | } 83 | } 84 | 85 | &:last-child { 86 | .page-link { 87 | @include border-end-radius(var(--#{$prefix}pagination-border-radius)); 88 | } 89 | } 90 | } @else { 91 | // Add border-radius to all pageLinks in case they have left margin 92 | .page-link { 93 | @include border-radius(var(--#{$prefix}pagination-border-radius)); 94 | } 95 | } 96 | } 97 | 98 | 99 | // 100 | // Sizing 101 | // 102 | 103 | .pagination-lg { 104 | @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg); 105 | } 106 | 107 | .pagination-sm { 108 | @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm); 109 | } 110 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_placeholders.scss: -------------------------------------------------------------------------------- 1 | .placeholder { 2 | display: inline-block; 3 | min-height: 1em; 4 | vertical-align: middle; 5 | cursor: wait; 6 | background-color: currentcolor; 7 | opacity: $placeholder-opacity-max; 8 | 9 | &.btn::before { 10 | display: inline-block; 11 | content: ""; 12 | } 13 | } 14 | 15 | // Sizing 16 | .placeholder-xs { 17 | min-height: .6em; 18 | } 19 | 20 | .placeholder-sm { 21 | min-height: .8em; 22 | } 23 | 24 | .placeholder-lg { 25 | min-height: 1.2em; 26 | } 27 | 28 | // Animation 29 | .placeholder-glow { 30 | .placeholder { 31 | animation: placeholder-glow 2s ease-in-out infinite; 32 | } 33 | } 34 | 35 | @keyframes placeholder-glow { 36 | 50% { 37 | opacity: $placeholder-opacity-min; 38 | } 39 | } 40 | 41 | .placeholder-wave { 42 | mask-image: linear-gradient(130deg, $black 55%, rgba(0, 0, 0, (1 - $placeholder-opacity-min)) 75%, $black 95%); 43 | mask-size: 200% 100%; 44 | animation: placeholder-wave 2s linear infinite; 45 | } 46 | 47 | @keyframes placeholder-wave { 48 | 100% { 49 | mask-position: -200% 0%; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_progress.scss: -------------------------------------------------------------------------------- 1 | // Disable animation if transitions are disabled 2 | 3 | // scss-docs-start progress-keyframes 4 | @if $enable-transitions { 5 | @keyframes progress-bar-stripes { 6 | 0% { background-position-x: var(--#{$prefix}progress-height); } 7 | } 8 | } 9 | // scss-docs-end progress-keyframes 10 | 11 | .progress, 12 | .progress-stacked { 13 | // scss-docs-start progress-css-vars 14 | --#{$prefix}progress-height: #{$progress-height}; 15 | @include rfs($progress-font-size, --#{$prefix}progress-font-size); 16 | --#{$prefix}progress-bg: #{$progress-bg}; 17 | --#{$prefix}progress-border-radius: #{$progress-border-radius}; 18 | --#{$prefix}progress-box-shadow: #{$progress-box-shadow}; 19 | --#{$prefix}progress-bar-color: #{$progress-bar-color}; 20 | --#{$prefix}progress-bar-bg: #{$progress-bar-bg}; 21 | --#{$prefix}progress-bar-transition: #{$progress-bar-transition}; 22 | // scss-docs-end progress-css-vars 23 | 24 | display: flex; 25 | height: var(--#{$prefix}progress-height); 26 | overflow: hidden; // force rounded corners by cropping it 27 | @include font-size(var(--#{$prefix}progress-font-size)); 28 | background-color: var(--#{$prefix}progress-bg); 29 | @include border-radius(var(--#{$prefix}progress-border-radius)); 30 | @include box-shadow(var(--#{$prefix}progress-box-shadow)); 31 | } 32 | 33 | .progress-bar { 34 | display: flex; 35 | flex-direction: column; 36 | justify-content: center; 37 | overflow: hidden; 38 | color: var(--#{$prefix}progress-bar-color); 39 | text-align: center; 40 | white-space: nowrap; 41 | background-color: var(--#{$prefix}progress-bar-bg); 42 | @include transition(var(--#{$prefix}progress-bar-transition)); 43 | } 44 | 45 | .progress-bar-striped { 46 | @include gradient-striped(); 47 | background-size: var(--#{$prefix}progress-height) var(--#{$prefix}progress-height); 48 | } 49 | 50 | .progress-stacked > .progress { 51 | overflow: visible; 52 | } 53 | 54 | .progress-stacked > .progress > .progress-bar { 55 | width: 100%; 56 | } 57 | 58 | @if $enable-transitions { 59 | .progress-bar-animated { 60 | animation: $progress-bar-animation-timing progress-bar-stripes; 61 | 62 | @if $enable-reduced-motion { 63 | @media (prefers-reduced-motion: reduce) { 64 | animation: none; 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_spinners.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Rotating border 3 | // 4 | 5 | .spinner-grow, 6 | .spinner-border { 7 | display: inline-block; 8 | flex-shrink: 0; 9 | width: var(--#{$prefix}spinner-width); 10 | height: var(--#{$prefix}spinner-height); 11 | vertical-align: var(--#{$prefix}spinner-vertical-align); 12 | // stylelint-disable-next-line property-disallowed-list 13 | border-radius: 50%; 14 | animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name); 15 | } 16 | 17 | // scss-docs-start spinner-border-keyframes 18 | @keyframes spinner-border { 19 | to { transform: rotate(360deg) #{"/* rtl:ignore */"}; } 20 | } 21 | // scss-docs-end spinner-border-keyframes 22 | 23 | .spinner-border { 24 | // scss-docs-start spinner-border-css-vars 25 | --#{$prefix}spinner-width: #{$spinner-width}; 26 | --#{$prefix}spinner-height: #{$spinner-height}; 27 | --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align}; 28 | --#{$prefix}spinner-border-width: #{$spinner-border-width}; 29 | --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed}; 30 | --#{$prefix}spinner-animation-name: spinner-border; 31 | // scss-docs-end spinner-border-css-vars 32 | 33 | border: var(--#{$prefix}spinner-border-width) solid currentcolor; 34 | border-right-color: transparent; 35 | } 36 | 37 | .spinner-border-sm { 38 | // scss-docs-start spinner-border-sm-css-vars 39 | --#{$prefix}spinner-width: #{$spinner-width-sm}; 40 | --#{$prefix}spinner-height: #{$spinner-height-sm}; 41 | --#{$prefix}spinner-border-width: #{$spinner-border-width-sm}; 42 | // scss-docs-end spinner-border-sm-css-vars 43 | } 44 | 45 | // 46 | // Growing circle 47 | // 48 | 49 | // scss-docs-start spinner-grow-keyframes 50 | @keyframes spinner-grow { 51 | 0% { 52 | transform: scale(0); 53 | } 54 | 50% { 55 | opacity: 1; 56 | transform: none; 57 | } 58 | } 59 | // scss-docs-end spinner-grow-keyframes 60 | 61 | .spinner-grow { 62 | // scss-docs-start spinner-grow-css-vars 63 | --#{$prefix}spinner-width: #{$spinner-width}; 64 | --#{$prefix}spinner-height: #{$spinner-height}; 65 | --#{$prefix}spinner-vertical-align: #{$spinner-vertical-align}; 66 | --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed}; 67 | --#{$prefix}spinner-animation-name: spinner-grow; 68 | // scss-docs-end spinner-grow-css-vars 69 | 70 | background-color: currentcolor; 71 | opacity: 0; 72 | } 73 | 74 | .spinner-grow-sm { 75 | --#{$prefix}spinner-width: #{$spinner-width-sm}; 76 | --#{$prefix}spinner-height: #{$spinner-height-sm}; 77 | } 78 | 79 | @if $enable-reduced-motion { 80 | @media (prefers-reduced-motion: reduce) { 81 | .spinner-border, 82 | .spinner-grow { 83 | --#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2}; 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_toasts.scss: -------------------------------------------------------------------------------- 1 | .toast { 2 | // scss-docs-start toast-css-vars 3 | --#{$prefix}toast-zindex: #{$zindex-toast}; 4 | --#{$prefix}toast-padding-x: #{$toast-padding-x}; 5 | --#{$prefix}toast-padding-y: #{$toast-padding-y}; 6 | --#{$prefix}toast-spacing: #{$toast-spacing}; 7 | --#{$prefix}toast-max-width: #{$toast-max-width}; 8 | @include rfs($toast-font-size, --#{$prefix}toast-font-size); 9 | --#{$prefix}toast-color: #{$toast-color}; 10 | --#{$prefix}toast-bg: #{$toast-background-color}; 11 | --#{$prefix}toast-border-width: #{$toast-border-width}; 12 | --#{$prefix}toast-border-color: #{$toast-border-color}; 13 | --#{$prefix}toast-border-radius: #{$toast-border-radius}; 14 | --#{$prefix}toast-box-shadow: #{$toast-box-shadow}; 15 | --#{$prefix}toast-header-color: #{$toast-header-color}; 16 | --#{$prefix}toast-header-bg: #{$toast-header-background-color}; 17 | --#{$prefix}toast-header-border-color: #{$toast-header-border-color}; 18 | // scss-docs-end toast-css-vars 19 | 20 | width: var(--#{$prefix}toast-max-width); 21 | max-width: 100%; 22 | @include font-size(var(--#{$prefix}toast-font-size)); 23 | color: var(--#{$prefix}toast-color); 24 | pointer-events: auto; 25 | background-color: var(--#{$prefix}toast-bg); 26 | background-clip: padding-box; 27 | border: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-border-color); 28 | box-shadow: var(--#{$prefix}toast-box-shadow); 29 | @include border-radius(var(--#{$prefix}toast-border-radius)); 30 | 31 | &.showing { 32 | opacity: 0; 33 | } 34 | 35 | &:not(.show) { 36 | display: none; 37 | } 38 | } 39 | 40 | .toast-container { 41 | --#{$prefix}toast-zindex: #{$zindex-toast}; 42 | 43 | position: absolute; 44 | z-index: var(--#{$prefix}toast-zindex); 45 | width: max-content; 46 | max-width: 100%; 47 | pointer-events: none; 48 | 49 | > :not(:last-child) { 50 | margin-bottom: var(--#{$prefix}toast-spacing); 51 | } 52 | } 53 | 54 | .toast-header { 55 | display: flex; 56 | align-items: center; 57 | padding: var(--#{$prefix}toast-padding-y) var(--#{$prefix}toast-padding-x); 58 | color: var(--#{$prefix}toast-header-color); 59 | background-color: var(--#{$prefix}toast-header-bg); 60 | background-clip: padding-box; 61 | border-bottom: var(--#{$prefix}toast-border-width) solid var(--#{$prefix}toast-header-border-color); 62 | @include border-top-radius(calc(var(--#{$prefix}toast-border-radius) - var(--#{$prefix}toast-border-width))); 63 | 64 | .btn-close { 65 | margin-right: calc(-.5 * var(--#{$prefix}toast-padding-x)); // stylelint-disable-line function-disallowed-list 66 | margin-left: var(--#{$prefix}toast-padding-x); 67 | } 68 | } 69 | 70 | .toast-body { 71 | padding: var(--#{$prefix}toast-padding-x); 72 | word-wrap: break-word; 73 | } 74 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_tooltip.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | .tooltip { 3 | // scss-docs-start tooltip-css-vars 4 | --#{$prefix}tooltip-zindex: #{$zindex-tooltip}; 5 | --#{$prefix}tooltip-max-width: #{$tooltip-max-width}; 6 | --#{$prefix}tooltip-padding-x: #{$tooltip-padding-x}; 7 | --#{$prefix}tooltip-padding-y: #{$tooltip-padding-y}; 8 | --#{$prefix}tooltip-margin: #{$tooltip-margin}; 9 | @include rfs($tooltip-font-size, --#{$prefix}tooltip-font-size); 10 | --#{$prefix}tooltip-color: #{$tooltip-color}; 11 | --#{$prefix}tooltip-bg: #{$tooltip-bg}; 12 | --#{$prefix}tooltip-border-radius: #{$tooltip-border-radius}; 13 | --#{$prefix}tooltip-opacity: #{$tooltip-opacity}; 14 | --#{$prefix}tooltip-arrow-width: #{$tooltip-arrow-width}; 15 | --#{$prefix}tooltip-arrow-height: #{$tooltip-arrow-height}; 16 | // scss-docs-end tooltip-css-vars 17 | 18 | z-index: var(--#{$prefix}tooltip-zindex); 19 | display: block; 20 | margin: var(--#{$prefix}tooltip-margin); 21 | @include deprecate("`$tooltip-margin`", "v5", "v5.x", true); 22 | // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. 23 | // So reset our font and text properties to avoid inheriting weird values. 24 | @include reset-text(); 25 | @include font-size(var(--#{$prefix}tooltip-font-size)); 26 | // Allow breaking very long words so they don't overflow the tooltip's bounds 27 | word-wrap: break-word; 28 | opacity: 0; 29 | 30 | &.show { opacity: var(--#{$prefix}tooltip-opacity); } 31 | 32 | .tooltip-arrow { 33 | display: block; 34 | width: var(--#{$prefix}tooltip-arrow-width); 35 | height: var(--#{$prefix}tooltip-arrow-height); 36 | 37 | &::before { 38 | position: absolute; 39 | content: ""; 40 | border-color: transparent; 41 | border-style: solid; 42 | } 43 | } 44 | } 45 | 46 | .bs-tooltip-top .tooltip-arrow { 47 | bottom: calc(-1 * var(--#{$prefix}tooltip-arrow-height)); // stylelint-disable-line function-disallowed-list 48 | 49 | &::before { 50 | top: -1px; 51 | border-width: var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list 52 | border-top-color: var(--#{$prefix}tooltip-bg); 53 | } 54 | } 55 | 56 | /* rtl:begin:ignore */ 57 | .bs-tooltip-end .tooltip-arrow { 58 | left: calc(-1 * var(--#{$prefix}tooltip-arrow-height)); // stylelint-disable-line function-disallowed-list 59 | width: var(--#{$prefix}tooltip-arrow-height); 60 | height: var(--#{$prefix}tooltip-arrow-width); 61 | 62 | &::before { 63 | right: -1px; 64 | border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height) calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0; // stylelint-disable-line function-disallowed-list 65 | border-right-color: var(--#{$prefix}tooltip-bg); 66 | } 67 | } 68 | 69 | /* rtl:end:ignore */ 70 | 71 | .bs-tooltip-bottom .tooltip-arrow { 72 | top: calc(-1 * var(--#{$prefix}tooltip-arrow-height)); // stylelint-disable-line function-disallowed-list 73 | 74 | &::before { 75 | bottom: -1px; 76 | border-width: 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list 77 | border-bottom-color: var(--#{$prefix}tooltip-bg); 78 | } 79 | } 80 | 81 | /* rtl:begin:ignore */ 82 | .bs-tooltip-start .tooltip-arrow { 83 | right: calc(-1 * var(--#{$prefix}tooltip-arrow-height)); // stylelint-disable-line function-disallowed-list 84 | width: var(--#{$prefix}tooltip-arrow-height); 85 | height: var(--#{$prefix}tooltip-arrow-width); 86 | 87 | &::before { 88 | left: -1px; 89 | border-width: calc(var(--#{$prefix}tooltip-arrow-width) * .5) 0 calc(var(--#{$prefix}tooltip-arrow-width) * .5) var(--#{$prefix}tooltip-arrow-height); // stylelint-disable-line function-disallowed-list 90 | border-left-color: var(--#{$prefix}tooltip-bg); 91 | } 92 | } 93 | 94 | /* rtl:end:ignore */ 95 | 96 | .bs-tooltip-auto { 97 | &[data-popper-placement^="top"] { 98 | @extend .bs-tooltip-top; 99 | } 100 | &[data-popper-placement^="right"] { 101 | @extend .bs-tooltip-end; 102 | } 103 | &[data-popper-placement^="bottom"] { 104 | @extend .bs-tooltip-bottom; 105 | } 106 | &[data-popper-placement^="left"] { 107 | @extend .bs-tooltip-start; 108 | } 109 | } 110 | 111 | // Wrapper for the tooltip content 112 | .tooltip-inner { 113 | max-width: var(--#{$prefix}tooltip-max-width); 114 | padding: var(--#{$prefix}tooltip-padding-y) var(--#{$prefix}tooltip-padding-x); 115 | color: var(--#{$prefix}tooltip-color); 116 | text-align: center; 117 | background-color: var(--#{$prefix}tooltip-bg); 118 | @include border-radius(var(--#{$prefix}tooltip-border-radius)); 119 | } 120 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_transitions.scss: -------------------------------------------------------------------------------- 1 | .fade { 2 | @include transition($transition-fade); 3 | 4 | &:not(.show) { 5 | opacity: 0; 6 | } 7 | } 8 | 9 | // scss-docs-start collapse-classes 10 | .collapse { 11 | &:not(.show) { 12 | display: none; 13 | } 14 | } 15 | 16 | .collapsing { 17 | height: 0; 18 | overflow: hidden; 19 | @include transition($transition-collapse); 20 | 21 | &.collapse-horizontal { 22 | width: 0; 23 | height: auto; 24 | @include transition($transition-collapse-width); 25 | } 26 | } 27 | // scss-docs-end collapse-classes 28 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/_type.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Headings 3 | // 4 | .h1 { 5 | @extend h1; 6 | } 7 | 8 | .h2 { 9 | @extend h2; 10 | } 11 | 12 | .h3 { 13 | @extend h3; 14 | } 15 | 16 | .h4 { 17 | @extend h4; 18 | } 19 | 20 | .h5 { 21 | @extend h5; 22 | } 23 | 24 | .h6 { 25 | @extend h6; 26 | } 27 | 28 | 29 | .lead { 30 | @include font-size($lead-font-size); 31 | font-weight: $lead-font-weight; 32 | } 33 | 34 | // Type display classes 35 | @each $display, $font-size in $display-font-sizes { 36 | .display-#{$display} { 37 | font-family: $display-font-family; 38 | font-style: $display-font-style; 39 | font-weight: $display-font-weight; 40 | line-height: $display-line-height; 41 | @include font-size($font-size); 42 | } 43 | } 44 | 45 | // 46 | // Emphasis 47 | // 48 | .small { 49 | @extend small; 50 | } 51 | 52 | .mark { 53 | @extend mark; 54 | } 55 | 56 | // 57 | // Lists 58 | // 59 | 60 | .list-unstyled { 61 | @include list-unstyled(); 62 | } 63 | 64 | // Inline turns list items into inline-block 65 | .list-inline { 66 | @include list-unstyled(); 67 | } 68 | .list-inline-item { 69 | display: inline-block; 70 | 71 | &:not(:last-child) { 72 | margin-right: $list-inline-padding; 73 | } 74 | } 75 | 76 | 77 | // 78 | // Misc 79 | // 80 | 81 | // Builds on `abbr` 82 | .initialism { 83 | @include font-size($initialism-font-size); 84 | text-transform: uppercase; 85 | } 86 | 87 | // Blockquotes 88 | .blockquote { 89 | margin-bottom: $blockquote-margin-y; 90 | @include font-size($blockquote-font-size); 91 | 92 | > :last-child { 93 | margin-bottom: 0; 94 | } 95 | } 96 | 97 | .blockquote-footer { 98 | margin-top: -$blockquote-margin-y; 99 | margin-bottom: $blockquote-margin-y; 100 | @include font-size($blockquote-footer-font-size); 101 | color: $blockquote-footer-color; 102 | 103 | &::before { 104 | content: "\2014\00A0"; // em dash, nbsp 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | @import "mixins/banner"; 2 | @include bsBanner(Grid); 3 | 4 | $include-column-box-sizing: true !default; 5 | 6 | @import "functions"; 7 | @import "variables"; 8 | @import "variables-dark"; 9 | @import "maps"; 10 | 11 | @import "mixins/breakpoints"; 12 | @import "mixins/container"; 13 | @import "mixins/grid"; 14 | @import "mixins/utilities"; 15 | 16 | @import "vendor/rfs"; 17 | 18 | @import "containers"; 19 | @import "grid"; 20 | 21 | @import "utilities"; 22 | // Only use the utilities we need 23 | // stylelint-disable-next-line scss/dollar-variable-default 24 | $utilities: map-get-multiple( 25 | $utilities, 26 | ( 27 | "display", 28 | "order", 29 | "flex", 30 | "flex-direction", 31 | "flex-grow", 32 | "flex-shrink", 33 | "flex-wrap", 34 | "justify-content", 35 | "align-items", 36 | "align-content", 37 | "align-self", 38 | "margin", 39 | "margin-x", 40 | "margin-y", 41 | "margin-top", 42 | "margin-end", 43 | "margin-bottom", 44 | "margin-start", 45 | "negative-margin", 46 | "negative-margin-x", 47 | "negative-margin-y", 48 | "negative-margin-top", 49 | "negative-margin-end", 50 | "negative-margin-bottom", 51 | "negative-margin-start", 52 | "padding", 53 | "padding-x", 54 | "padding-y", 55 | "padding-top", 56 | "padding-end", 57 | "padding-bottom", 58 | "padding-start", 59 | ) 60 | ); 61 | 62 | @import "utilities/api"; 63 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | @import "mixins/banner"; 2 | @include bsBanner(Reboot); 3 | 4 | @import "functions"; 5 | @import "variables"; 6 | @import "variables-dark"; 7 | @import "maps"; 8 | @import "mixins"; 9 | @import "root"; 10 | @import "reboot"; 11 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/bootstrap-utilities.scss: -------------------------------------------------------------------------------- 1 | @import "mixins/banner"; 2 | @include bsBanner(Utilities); 3 | 4 | // Configuration 5 | @import "functions"; 6 | @import "variables"; 7 | @import "variables-dark"; 8 | @import "maps"; 9 | @import "mixins"; 10 | @import "utilities"; 11 | 12 | // Layout & components 13 | @import "root"; 14 | 15 | // Helpers 16 | @import "helpers"; 17 | 18 | // Utilities 19 | @import "utilities/api"; 20 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/bootstrap.scss: -------------------------------------------------------------------------------- 1 | @import "mixins/banner"; 2 | @include bsBanner(""); 3 | 4 | 5 | // scss-docs-start import-stack 6 | // Configuration 7 | @import "functions"; 8 | @import "variables"; 9 | @import "variables-dark"; 10 | @import "maps"; 11 | @import "mixins"; 12 | @import "utilities"; 13 | 14 | // Layout & components 15 | @import "root"; 16 | @import "reboot"; 17 | @import "type"; 18 | @import "images"; 19 | @import "containers"; 20 | @import "grid"; 21 | @import "tables"; 22 | @import "forms"; 23 | @import "buttons"; 24 | @import "transitions"; 25 | @import "dropdown"; 26 | @import "button-group"; 27 | @import "nav"; 28 | @import "navbar"; 29 | @import "card"; 30 | @import "accordion"; 31 | @import "breadcrumb"; 32 | @import "pagination"; 33 | @import "badge"; 34 | @import "alert"; 35 | @import "progress"; 36 | @import "list-group"; 37 | @import "close"; 38 | @import "toasts"; 39 | @import "modal"; 40 | @import "tooltip"; 41 | @import "popover"; 42 | @import "carousel"; 43 | @import "spinners"; 44 | @import "offcanvas"; 45 | @import "placeholders"; 46 | 47 | // Helpers 48 | @import "helpers"; 49 | 50 | // Utilities 51 | @import "utilities/api"; 52 | // scss-docs-end import-stack 53 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/forms/_floating-labels.scss: -------------------------------------------------------------------------------- 1 | .form-floating { 2 | position: relative; 3 | 4 | > .form-control, 5 | > .form-control-plaintext, 6 | > .form-select { 7 | height: $form-floating-height; 8 | min-height: $form-floating-height; 9 | line-height: $form-floating-line-height; 10 | } 11 | 12 | > label { 13 | position: absolute; 14 | top: 0; 15 | left: 0; 16 | z-index: 2; 17 | max-width: 100%; 18 | height: 100%; // allow textareas 19 | padding: $form-floating-padding-y $form-floating-padding-x; 20 | overflow: hidden; 21 | color: rgba(var(--#{$prefix}body-color-rgb), #{$form-floating-label-opacity}); 22 | text-align: start; 23 | text-overflow: ellipsis; 24 | white-space: nowrap; 25 | pointer-events: none; 26 | border: $input-border-width solid transparent; // Required for aligning label's text with the input as it affects inner box model 27 | transform-origin: 0 0; 28 | @include transition($form-floating-transition); 29 | } 30 | 31 | > .form-control, 32 | > .form-control-plaintext { 33 | padding: $form-floating-padding-y $form-floating-padding-x; 34 | 35 | &::placeholder { 36 | color: transparent; 37 | } 38 | 39 | &:focus, 40 | &:not(:placeholder-shown) { 41 | padding-top: $form-floating-input-padding-t; 42 | padding-bottom: $form-floating-input-padding-b; 43 | } 44 | // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped 45 | &:-webkit-autofill { 46 | padding-top: $form-floating-input-padding-t; 47 | padding-bottom: $form-floating-input-padding-b; 48 | } 49 | } 50 | 51 | > .form-select { 52 | padding-top: $form-floating-input-padding-t; 53 | padding-bottom: $form-floating-input-padding-b; 54 | padding-left: $form-floating-padding-x; 55 | } 56 | 57 | > .form-control:focus, 58 | > .form-control:not(:placeholder-shown), 59 | > .form-control-plaintext, 60 | > .form-select { 61 | ~ label { 62 | transform: $form-floating-label-transform; 63 | } 64 | } 65 | // Duplicated because `:-webkit-autofill` invalidates other selectors when grouped 66 | > .form-control:-webkit-autofill { 67 | ~ label { 68 | transform: $form-floating-label-transform; 69 | } 70 | } 71 | > textarea:focus, 72 | > textarea:not(:placeholder-shown) { 73 | ~ label::after { 74 | position: absolute; 75 | inset: $form-floating-padding-y ($form-floating-padding-x * .5); 76 | z-index: -1; 77 | height: $form-floating-label-height; 78 | content: ""; 79 | background-color: $input-bg; 80 | @include border-radius($input-border-radius); 81 | } 82 | } 83 | > textarea:disabled ~ label::after { 84 | background-color: $input-disabled-bg; 85 | } 86 | 87 | > .form-control-plaintext { 88 | ~ label { 89 | border-width: $input-border-width 0; // Required to properly position label text - as explained above 90 | } 91 | } 92 | 93 | > :disabled ~ label, 94 | > .form-control:disabled ~ label { // Required for `.form-control`s because of specificity 95 | color: $form-floating-label-disabled-color; 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/forms/_form-range.scss: -------------------------------------------------------------------------------- 1 | // Range 2 | // 3 | // Style range inputs the same across browsers. Vendor-specific rules for pseudo 4 | // elements cannot be mixed. As such, there are no shared styles for focus or 5 | // active states on prefixed selectors. 6 | 7 | .form-range { 8 | width: 100%; 9 | height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2); 10 | padding: 0; // Need to reset padding 11 | appearance: none; 12 | background-color: transparent; 13 | 14 | &:focus { 15 | outline: 0; 16 | 17 | // Pseudo-elements must be split across multiple rulesets to have an effect. 18 | // No box-shadow() mixin for focus accessibility. 19 | &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; } 20 | &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; } 21 | } 22 | 23 | &::-moz-focus-outer { 24 | border: 0; 25 | } 26 | 27 | &::-webkit-slider-thumb { 28 | width: $form-range-thumb-width; 29 | height: $form-range-thumb-height; 30 | margin-top: ($form-range-track-height - $form-range-thumb-height) * .5; // Webkit specific 31 | appearance: none; 32 | @include gradient-bg($form-range-thumb-bg); 33 | border: $form-range-thumb-border; 34 | @include border-radius($form-range-thumb-border-radius); 35 | @include box-shadow($form-range-thumb-box-shadow); 36 | @include transition($form-range-thumb-transition); 37 | 38 | &:active { 39 | @include gradient-bg($form-range-thumb-active-bg); 40 | } 41 | } 42 | 43 | &::-webkit-slider-runnable-track { 44 | width: $form-range-track-width; 45 | height: $form-range-track-height; 46 | color: transparent; // Why? 47 | cursor: $form-range-track-cursor; 48 | background-color: $form-range-track-bg; 49 | border-color: transparent; 50 | @include border-radius($form-range-track-border-radius); 51 | @include box-shadow($form-range-track-box-shadow); 52 | } 53 | 54 | &::-moz-range-thumb { 55 | width: $form-range-thumb-width; 56 | height: $form-range-thumb-height; 57 | appearance: none; 58 | @include gradient-bg($form-range-thumb-bg); 59 | border: $form-range-thumb-border; 60 | @include border-radius($form-range-thumb-border-radius); 61 | @include box-shadow($form-range-thumb-box-shadow); 62 | @include transition($form-range-thumb-transition); 63 | 64 | &:active { 65 | @include gradient-bg($form-range-thumb-active-bg); 66 | } 67 | } 68 | 69 | &::-moz-range-track { 70 | width: $form-range-track-width; 71 | height: $form-range-track-height; 72 | color: transparent; 73 | cursor: $form-range-track-cursor; 74 | background-color: $form-range-track-bg; 75 | border-color: transparent; // Firefox specific? 76 | @include border-radius($form-range-track-border-radius); 77 | @include box-shadow($form-range-track-box-shadow); 78 | } 79 | 80 | &:disabled { 81 | pointer-events: none; 82 | 83 | &::-webkit-slider-thumb { 84 | background-color: $form-range-thumb-disabled-bg; 85 | } 86 | 87 | &::-moz-range-thumb { 88 | background-color: $form-range-thumb-disabled-bg; 89 | } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/forms/_form-select.scss: -------------------------------------------------------------------------------- 1 | // Select 2 | // 3 | // Replaces the browser default select with a custom one, mostly pulled from 4 | // https://primer.github.io/. 5 | 6 | .form-select { 7 | --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator)}; 8 | 9 | display: block; 10 | width: 100%; 11 | padding: $form-select-padding-y $form-select-indicator-padding $form-select-padding-y $form-select-padding-x; 12 | font-family: $form-select-font-family; 13 | @include font-size($form-select-font-size); 14 | font-weight: $form-select-font-weight; 15 | line-height: $form-select-line-height; 16 | color: $form-select-color; 17 | appearance: none; 18 | background-color: $form-select-bg; 19 | background-image: var(--#{$prefix}form-select-bg-img), var(--#{$prefix}form-select-bg-icon, none); 20 | background-repeat: no-repeat; 21 | background-position: $form-select-bg-position; 22 | background-size: $form-select-bg-size; 23 | border: $form-select-border-width solid $form-select-border-color; 24 | @include border-radius($form-select-border-radius, 0); 25 | @include box-shadow($form-select-box-shadow); 26 | @include transition($form-select-transition); 27 | 28 | &:focus { 29 | border-color: $form-select-focus-border-color; 30 | outline: 0; 31 | @if $enable-shadows { 32 | @include box-shadow($form-select-box-shadow, $form-select-focus-box-shadow); 33 | } @else { 34 | // Avoid using mixin so we can pass custom focus shadow properly 35 | box-shadow: $form-select-focus-box-shadow; 36 | } 37 | } 38 | 39 | &[multiple], 40 | &[size]:not([size="1"]) { 41 | padding-right: $form-select-padding-x; 42 | background-image: none; 43 | } 44 | 45 | &:disabled { 46 | color: $form-select-disabled-color; 47 | background-color: $form-select-disabled-bg; 48 | border-color: $form-select-disabled-border-color; 49 | } 50 | 51 | // Remove outline from select box in FF 52 | &:-moz-focusring { 53 | color: transparent; 54 | text-shadow: 0 0 0 $form-select-color; 55 | } 56 | } 57 | 58 | .form-select-sm { 59 | padding-top: $form-select-padding-y-sm; 60 | padding-bottom: $form-select-padding-y-sm; 61 | padding-left: $form-select-padding-x-sm; 62 | @include font-size($form-select-font-size-sm); 63 | @include border-radius($form-select-border-radius-sm); 64 | } 65 | 66 | .form-select-lg { 67 | padding-top: $form-select-padding-y-lg; 68 | padding-bottom: $form-select-padding-y-lg; 69 | padding-left: $form-select-padding-x-lg; 70 | @include font-size($form-select-font-size-lg); 71 | @include border-radius($form-select-border-radius-lg); 72 | } 73 | 74 | @if $enable-dark-mode { 75 | @include color-mode(dark) { 76 | .form-select { 77 | --#{$prefix}form-select-bg-img: #{escape-svg($form-select-indicator-dark)}; 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/forms/_form-text.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Form text 3 | // 4 | 5 | .form-text { 6 | margin-top: $form-text-margin-top; 7 | @include font-size($form-text-font-size); 8 | font-style: $form-text-font-style; 9 | font-weight: $form-text-font-weight; 10 | color: $form-text-color; 11 | } 12 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/forms/_input-group.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .input-group { 6 | position: relative; 7 | display: flex; 8 | flex-wrap: wrap; // For form validation feedback 9 | align-items: stretch; 10 | width: 100%; 11 | 12 | > .form-control, 13 | > .form-select, 14 | > .form-floating { 15 | position: relative; // For focus state's z-index 16 | flex: 1 1 auto; 17 | width: 1%; 18 | min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size 19 | } 20 | 21 | // Bring the "active" form control to the top of surrounding elements 22 | > .form-control:focus, 23 | > .form-select:focus, 24 | > .form-floating:focus-within { 25 | z-index: 5; 26 | } 27 | 28 | // Ensure buttons are always above inputs for more visually pleasing borders. 29 | // This isn't needed for `.input-group-text` since it shares the same border-color 30 | // as our inputs. 31 | .btn { 32 | position: relative; 33 | z-index: 2; 34 | 35 | &:focus { 36 | z-index: 5; 37 | } 38 | } 39 | } 40 | 41 | 42 | // Textual addons 43 | // 44 | // Serves as a catch-all element for any text or radio/checkbox input you wish 45 | // to prepend or append to an input. 46 | 47 | .input-group-text { 48 | display: flex; 49 | align-items: center; 50 | padding: $input-group-addon-padding-y $input-group-addon-padding-x; 51 | @include font-size($input-font-size); // Match inputs 52 | font-weight: $input-group-addon-font-weight; 53 | line-height: $input-line-height; 54 | color: $input-group-addon-color; 55 | text-align: center; 56 | white-space: nowrap; 57 | background-color: $input-group-addon-bg; 58 | border: $input-border-width solid $input-group-addon-border-color; 59 | @include border-radius($input-border-radius); 60 | } 61 | 62 | 63 | // Sizing 64 | // 65 | // Remix the default form control sizing classes into new ones for easier 66 | // manipulation. 67 | 68 | .input-group-lg > .form-control, 69 | .input-group-lg > .form-select, 70 | .input-group-lg > .input-group-text, 71 | .input-group-lg > .btn { 72 | padding: $input-padding-y-lg $input-padding-x-lg; 73 | @include font-size($input-font-size-lg); 74 | @include border-radius($input-border-radius-lg); 75 | } 76 | 77 | .input-group-sm > .form-control, 78 | .input-group-sm > .form-select, 79 | .input-group-sm > .input-group-text, 80 | .input-group-sm > .btn { 81 | padding: $input-padding-y-sm $input-padding-x-sm; 82 | @include font-size($input-font-size-sm); 83 | @include border-radius($input-border-radius-sm); 84 | } 85 | 86 | .input-group-lg > .form-select, 87 | .input-group-sm > .form-select { 88 | padding-right: $form-select-padding-x + $form-select-indicator-padding; 89 | } 90 | 91 | 92 | // Rounded corners 93 | // 94 | // These rulesets must come after the sizing ones to properly override sm and lg 95 | // border-radius values when extending. They're more specific than we'd like 96 | // with the `.input-group >` part, but without it, we cannot override the sizing. 97 | 98 | // stylelint-disable-next-line no-duplicate-selectors 99 | .input-group { 100 | &:not(.has-validation) { 101 | > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), 102 | > .dropdown-toggle:nth-last-child(n + 3), 103 | > .form-floating:not(:last-child) > .form-control, 104 | > .form-floating:not(:last-child) > .form-select { 105 | @include border-end-radius(0); 106 | } 107 | } 108 | 109 | &.has-validation { 110 | > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), 111 | > .dropdown-toggle:nth-last-child(n + 4), 112 | > .form-floating:nth-last-child(n + 3) > .form-control, 113 | > .form-floating:nth-last-child(n + 3) > .form-select { 114 | @include border-end-radius(0); 115 | } 116 | } 117 | 118 | $validation-messages: ""; 119 | @each $state in map-keys($form-validation-states) { 120 | $validation-messages: $validation-messages + ":not(." + unquote($state) + "-tooltip)" + ":not(." + unquote($state) + "-feedback)"; 121 | } 122 | 123 | > :not(:first-child):not(.dropdown-menu)#{$validation-messages} { 124 | margin-left: calc(-1 * #{$input-border-width}); // stylelint-disable-line function-disallowed-list 125 | @include border-start-radius(0); 126 | } 127 | 128 | > .form-floating:not(:first-child) > .form-control, 129 | > .form-floating:not(:first-child) > .form-select { 130 | @include border-start-radius(0); 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/forms/_labels.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // 4 | 5 | .form-label { 6 | margin-bottom: $form-label-margin-bottom; 7 | @include font-size($form-label-font-size); 8 | font-style: $form-label-font-style; 9 | font-weight: $form-label-font-weight; 10 | color: $form-label-color; 11 | } 12 | 13 | // For use with horizontal and inline forms, when you need the label (or legend) 14 | // text to align with the form controls. 15 | .col-form-label { 16 | padding-top: add($input-padding-y, $input-border-width); 17 | padding-bottom: add($input-padding-y, $input-border-width); 18 | margin-bottom: 0; // Override the `` default 19 | @include font-size(inherit); // Override the `` default 20 | font-style: $form-label-font-style; 21 | font-weight: $form-label-font-weight; 22 | line-height: $input-line-height; 23 | color: $form-label-color; 24 | } 25 | 26 | .col-form-label-lg { 27 | padding-top: add($input-padding-y-lg, $input-border-width); 28 | padding-bottom: add($input-padding-y-lg, $input-border-width); 29 | @include font-size($input-font-size-lg); 30 | } 31 | 32 | .col-form-label-sm { 33 | padding-top: add($input-padding-y-sm, $input-border-width); 34 | padding-bottom: add($input-padding-y-sm, $input-border-width); 35 | @include font-size($input-font-size-sm); 36 | } 37 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/forms/_validation.scss: -------------------------------------------------------------------------------- 1 | // Form validation 2 | // 3 | // Provide feedback to users when form field values are valid or invalid. Works 4 | // primarily for client-side validation via scoped `:invalid` and `:valid` 5 | // pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for 6 | // server-side validation. 7 | 8 | // scss-docs-start form-validation-states-loop 9 | @each $state, $data in $form-validation-states { 10 | @include form-validation-state($state, $data...); 11 | } 12 | // scss-docs-end form-validation-states-loop 13 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_clearfix.scss: -------------------------------------------------------------------------------- 1 | .clearfix { 2 | @include clearfix(); 3 | } 4 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_color-bg.scss: -------------------------------------------------------------------------------- 1 | // All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251 2 | @each $color, $value in $theme-colors { 3 | .text-bg-#{$color} { 4 | color: color-contrast($value) if($enable-important-utilities, !important, null); 5 | background-color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}bg-opacity, 1)) if($enable-important-utilities, !important, null); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_colored-links.scss: -------------------------------------------------------------------------------- 1 | // All-caps `RGBA()` function used because of this Sass bug: https://github.com/sass/node-sass/issues/2251 2 | @each $color, $value in $theme-colors { 3 | .link-#{$color} { 4 | color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null); 5 | text-decoration-color: RGBA(var(--#{$prefix}#{$color}-rgb), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null); 6 | 7 | @if $link-shade-percentage != 0 { 8 | &:hover, 9 | &:focus { 10 | $hover-color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)); 11 | color: RGBA(#{to-rgb($hover-color)}, var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null); 12 | text-decoration-color: RGBA(to-rgb($hover-color), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null); 13 | } 14 | } 15 | } 16 | } 17 | 18 | // One-off special link helper as a bridge until v6 19 | .link-body-emphasis { 20 | color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, 1)) if($enable-important-utilities, !important, null); 21 | text-decoration-color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-underline-opacity, 1)) if($enable-important-utilities, !important, null); 22 | 23 | @if $link-shade-percentage != 0 { 24 | &:hover, 25 | &:focus { 26 | color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-opacity, .75)) if($enable-important-utilities, !important, null); 27 | text-decoration-color: RGBA(var(--#{$prefix}emphasis-color-rgb), var(--#{$prefix}link-underline-opacity, .75)) if($enable-important-utilities, !important, null); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_focus-ring.scss: -------------------------------------------------------------------------------- 1 | .focus-ring:focus { 2 | outline: 0; 3 | // By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values 4 | box-shadow: var(--#{$prefix}focus-ring-x, 0) var(--#{$prefix}focus-ring-y, 0) var(--#{$prefix}focus-ring-blur, 0) var(--#{$prefix}focus-ring-width) var(--#{$prefix}focus-ring-color); 5 | } 6 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_icon-link.scss: -------------------------------------------------------------------------------- 1 | .icon-link { 2 | display: inline-flex; 3 | gap: $icon-link-gap; 4 | align-items: center; 5 | text-decoration-color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, .5)); 6 | text-underline-offset: $icon-link-underline-offset; 7 | backface-visibility: hidden; 8 | 9 | > .bi { 10 | flex-shrink: 0; 11 | width: $icon-link-icon-size; 12 | height: $icon-link-icon-size; 13 | fill: currentcolor; 14 | @include transition($icon-link-icon-transition); 15 | } 16 | } 17 | 18 | .icon-link-hover { 19 | &:hover, 20 | &:focus-visible { 21 | > .bi { 22 | transform: var(--#{$prefix}icon-link-transform, $icon-link-icon-transform); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_position.scss: -------------------------------------------------------------------------------- 1 | // Shorthand 2 | 3 | .fixed-top { 4 | position: fixed; 5 | top: 0; 6 | right: 0; 7 | left: 0; 8 | z-index: $zindex-fixed; 9 | } 10 | 11 | .fixed-bottom { 12 | position: fixed; 13 | right: 0; 14 | bottom: 0; 15 | left: 0; 16 | z-index: $zindex-fixed; 17 | } 18 | 19 | // Responsive sticky top and bottom 20 | @each $breakpoint in map-keys($grid-breakpoints) { 21 | @include media-breakpoint-up($breakpoint) { 22 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 23 | 24 | .sticky#{$infix}-top { 25 | position: sticky; 26 | top: 0; 27 | z-index: $zindex-sticky; 28 | } 29 | 30 | .sticky#{$infix}-bottom { 31 | position: sticky; 32 | bottom: 0; 33 | z-index: $zindex-sticky; 34 | } 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_ratio.scss: -------------------------------------------------------------------------------- 1 | // Credit: Nicolas Gallagher and SUIT CSS. 2 | 3 | .ratio { 4 | position: relative; 5 | width: 100%; 6 | 7 | &::before { 8 | display: block; 9 | padding-top: var(--#{$prefix}aspect-ratio); 10 | content: ""; 11 | } 12 | 13 | > * { 14 | position: absolute; 15 | top: 0; 16 | left: 0; 17 | width: 100%; 18 | height: 100%; 19 | } 20 | } 21 | 22 | @each $key, $ratio in $aspect-ratios { 23 | .ratio-#{$key} { 24 | --#{$prefix}aspect-ratio: #{$ratio}; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_stacks.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start stacks 2 | .hstack { 3 | display: flex; 4 | flex-direction: row; 5 | align-items: center; 6 | align-self: stretch; 7 | } 8 | 9 | .vstack { 10 | display: flex; 11 | flex: 1 1 auto; 12 | flex-direction: column; 13 | align-self: stretch; 14 | } 15 | // scss-docs-end stacks 16 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_stretched-link.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Stretched link 3 | // 4 | 5 | .stretched-link { 6 | &::#{$stretched-link-pseudo-element} { 7 | position: absolute; 8 | top: 0; 9 | right: 0; 10 | bottom: 0; 11 | left: 0; 12 | z-index: $stretched-link-z-index; 13 | content: ""; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_text-truncation.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Text truncation 3 | // 4 | 5 | .text-truncate { 6 | @include text-truncate(); 7 | } 8 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_visually-hidden.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Visually hidden 3 | // 4 | 5 | .visually-hidden, 6 | .visually-hidden-focusable:not(:focus):not(:focus-within) { 7 | @include visually-hidden(); 8 | } 9 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/helpers/_vr.scss: -------------------------------------------------------------------------------- 1 | .vr { 2 | display: inline-block; 3 | align-self: stretch; 4 | width: $vr-border-width; 5 | min-height: 1em; 6 | background-color: currentcolor; 7 | opacity: $hr-opacity; 8 | } 9 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | @include deprecate("`alert-variant()`", "v5.3.0", "v6.0.0"); 2 | 3 | // scss-docs-start alert-variant-mixin 4 | @mixin alert-variant($background, $border, $color) { 5 | --#{$prefix}alert-color: #{$color}; 6 | --#{$prefix}alert-bg: #{$background}; 7 | --#{$prefix}alert-border-color: #{$border}; 8 | --#{$prefix}alert-link-color: #{shade-color($color, 20%)}; 9 | 10 | @if $enable-gradients { 11 | background-image: var(--#{$prefix}gradient); 12 | } 13 | 14 | .alert-link { 15 | color: var(--#{$prefix}alert-link-color); 16 | } 17 | } 18 | // scss-docs-end alert-variant-mixin 19 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_backdrop.scss: -------------------------------------------------------------------------------- 1 | // Shared between modals and offcanvases 2 | @mixin overlay-backdrop($zindex, $backdrop-bg, $backdrop-opacity) { 3 | position: fixed; 4 | top: 0; 5 | left: 0; 6 | z-index: $zindex; 7 | width: 100vw; 8 | height: 100vh; 9 | background-color: $backdrop-bg; 10 | 11 | // Fade for backdrop 12 | &.fade { opacity: 0; } 13 | &.show { opacity: $backdrop-opacity; } 14 | } 15 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_banner.scss: -------------------------------------------------------------------------------- 1 | @mixin bsBanner($file) { 2 | /*! 3 | * Bootstrap #{$file} v5.3.8 (https://getbootstrap.com/) 4 | * Copyright 2011-2025 The Bootstrap Authors 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | } 8 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_border-radius.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-disallowed-list 2 | // Single side border-radius 3 | 4 | // Helper function to replace negative values with 0 5 | @function valid-radius($radius) { 6 | $return: (); 7 | @each $value in $radius { 8 | @if type-of($value) == number { 9 | $return: append($return, max($value, 0)); 10 | } @else { 11 | $return: append($return, $value); 12 | } 13 | } 14 | @return $return; 15 | } 16 | 17 | // scss-docs-start border-radius-mixins 18 | @mixin border-radius($radius: $border-radius, $fallback-border-radius: false) { 19 | @if $enable-rounded { 20 | border-radius: valid-radius($radius); 21 | } 22 | @else if $fallback-border-radius != false { 23 | border-radius: $fallback-border-radius; 24 | } 25 | } 26 | 27 | @mixin border-top-radius($radius: $border-radius) { 28 | @if $enable-rounded { 29 | border-top-left-radius: valid-radius($radius); 30 | border-top-right-radius: valid-radius($radius); 31 | } 32 | } 33 | 34 | @mixin border-end-radius($radius: $border-radius) { 35 | @if $enable-rounded { 36 | border-top-right-radius: valid-radius($radius); 37 | border-bottom-right-radius: valid-radius($radius); 38 | } 39 | } 40 | 41 | @mixin border-bottom-radius($radius: $border-radius) { 42 | @if $enable-rounded { 43 | border-bottom-right-radius: valid-radius($radius); 44 | border-bottom-left-radius: valid-radius($radius); 45 | } 46 | } 47 | 48 | @mixin border-start-radius($radius: $border-radius) { 49 | @if $enable-rounded { 50 | border-top-left-radius: valid-radius($radius); 51 | border-bottom-left-radius: valid-radius($radius); 52 | } 53 | } 54 | 55 | @mixin border-top-start-radius($radius: $border-radius) { 56 | @if $enable-rounded { 57 | border-top-left-radius: valid-radius($radius); 58 | } 59 | } 60 | 61 | @mixin border-top-end-radius($radius: $border-radius) { 62 | @if $enable-rounded { 63 | border-top-right-radius: valid-radius($radius); 64 | } 65 | } 66 | 67 | @mixin border-bottom-end-radius($radius: $border-radius) { 68 | @if $enable-rounded { 69 | border-bottom-right-radius: valid-radius($radius); 70 | } 71 | } 72 | 73 | @mixin border-bottom-start-radius($radius: $border-radius) { 74 | @if $enable-rounded { 75 | border-bottom-left-radius: valid-radius($radius); 76 | } 77 | } 78 | // scss-docs-end border-radius-mixins 79 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_box-shadow.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | @if $enable-shadows { 3 | $result: (); 4 | $has-single-value: false; 5 | $single-value: null; 6 | 7 | @each $value in $shadow { 8 | @if $value != null { 9 | @if $value == none or $value == initial or $value == inherit or $value == unset { 10 | $has-single-value: true; 11 | $single-value: $value; 12 | } @else { 13 | $result: append($result, $value, "comma"); 14 | } 15 | } 16 | } 17 | 18 | @if $has-single-value { 19 | box-shadow: $single-value; 20 | } @else if (length($result) > 0) { 21 | box-shadow: $result; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_breakpoints.scss: -------------------------------------------------------------------------------- 1 | // Breakpoint viewport sizes and media queries. 2 | // 3 | // Breakpoints are defined as a map of (name: minimum width), order from small to large: 4 | // 5 | // (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px) 6 | // 7 | // The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default. 8 | 9 | // Name of the next breakpoint, or null for the last breakpoint. 10 | // 11 | // >> breakpoint-next(sm) 12 | // md 13 | // >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)) 14 | // md 15 | // >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl)) 16 | // md 17 | @function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) { 18 | $n: index($breakpoint-names, $name); 19 | @if not $n { 20 | @error "breakpoint `#{$name}` not found in `#{$breakpoints}`"; 21 | } 22 | @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null); 23 | } 24 | 25 | // Minimum breakpoint width. Null for the smallest (first) breakpoint. 26 | // 27 | // >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)) 28 | // 576px 29 | @function breakpoint-min($name, $breakpoints: $grid-breakpoints) { 30 | $min: map-get($breakpoints, $name); 31 | @return if($min != 0, $min, null); 32 | } 33 | 34 | // Maximum breakpoint width. 35 | // The maximum value is reduced by 0.02px to work around the limitations of 36 | // `min-` and `max-` prefixes and viewports with fractional widths. 37 | // See https://www.w3.org/TR/mediaqueries-4/#mq-min-max 38 | // Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari. 39 | // See https://bugs.webkit.org/show_bug.cgi?id=178261 40 | // 41 | // >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)) 42 | // 767.98px 43 | @function breakpoint-max($name, $breakpoints: $grid-breakpoints) { 44 | $max: map-get($breakpoints, $name); 45 | @return if($max and $max > 0, $max - .02, null); 46 | } 47 | 48 | // Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front. 49 | // Useful for making responsive utilities. 50 | // 51 | // >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)) 52 | // "" (Returns a blank string) 53 | // >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)) 54 | // "-sm" 55 | @function breakpoint-infix($name, $breakpoints: $grid-breakpoints) { 56 | @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}"); 57 | } 58 | 59 | // Media of at least the minimum breakpoint width. No query for the smallest breakpoint. 60 | // Makes the @content apply to the given breakpoint and wider. 61 | @mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) { 62 | $min: breakpoint-min($name, $breakpoints); 63 | @if $min { 64 | @media (min-width: $min) { 65 | @content; 66 | } 67 | } @else { 68 | @content; 69 | } 70 | } 71 | 72 | // Media of at most the maximum breakpoint width. No query for the largest breakpoint. 73 | // Makes the @content apply to the given breakpoint and narrower. 74 | @mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) { 75 | $max: breakpoint-max($name, $breakpoints); 76 | @if $max { 77 | @media (max-width: $max) { 78 | @content; 79 | } 80 | } @else { 81 | @content; 82 | } 83 | } 84 | 85 | // Media that spans multiple breakpoint widths. 86 | // Makes the @content apply between the min and max breakpoints 87 | @mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) { 88 | $min: breakpoint-min($lower, $breakpoints); 89 | $max: breakpoint-max($upper, $breakpoints); 90 | 91 | @if $min != null and $max != null { 92 | @media (min-width: $min) and (max-width: $max) { 93 | @content; 94 | } 95 | } @else if $max == null { 96 | @include media-breakpoint-up($lower, $breakpoints) { 97 | @content; 98 | } 99 | } @else if $min == null { 100 | @include media-breakpoint-down($upper, $breakpoints) { 101 | @content; 102 | } 103 | } 104 | } 105 | 106 | // Media between the breakpoint's minimum and maximum widths. 107 | // No minimum for the smallest breakpoint, and no maximum for the largest one. 108 | // Makes the @content apply only to the given breakpoint, not viewports any wider or narrower. 109 | @mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) { 110 | $min: breakpoint-min($name, $breakpoints); 111 | $next: breakpoint-next($name, $breakpoints); 112 | $max: breakpoint-max($next, $breakpoints); 113 | 114 | @if $min != null and $max != null { 115 | @media (min-width: $min) and (max-width: $max) { 116 | @content; 117 | } 118 | } @else if $max == null { 119 | @include media-breakpoint-up($name, $breakpoints) { 120 | @content; 121 | } 122 | } @else if $min == null { 123 | @include media-breakpoint-down($next, $breakpoints) { 124 | @content; 125 | } 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_buttons.scss: -------------------------------------------------------------------------------- 1 | // Button variants 2 | // 3 | // Easily pump out default styles, as well as :hover, :focus, :active, 4 | // and disabled options for all buttons 5 | 6 | // scss-docs-start btn-variant-mixin 7 | @mixin button-variant( 8 | $background, 9 | $border, 10 | $color: color-contrast($background), 11 | $hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)), 12 | $hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)), 13 | $hover-color: color-contrast($hover-background), 14 | $active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)), 15 | $active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)), 16 | $active-color: color-contrast($active-background), 17 | $disabled-background: $background, 18 | $disabled-border: $border, 19 | $disabled-color: color-contrast($disabled-background) 20 | ) { 21 | --#{$prefix}btn-color: #{$color}; 22 | --#{$prefix}btn-bg: #{$background}; 23 | --#{$prefix}btn-border-color: #{$border}; 24 | --#{$prefix}btn-hover-color: #{$hover-color}; 25 | --#{$prefix}btn-hover-bg: #{$hover-background}; 26 | --#{$prefix}btn-hover-border-color: #{$hover-border}; 27 | --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))}; 28 | --#{$prefix}btn-active-color: #{$active-color}; 29 | --#{$prefix}btn-active-bg: #{$active-background}; 30 | --#{$prefix}btn-active-border-color: #{$active-border}; 31 | --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow}; 32 | --#{$prefix}btn-disabled-color: #{$disabled-color}; 33 | --#{$prefix}btn-disabled-bg: #{$disabled-background}; 34 | --#{$prefix}btn-disabled-border-color: #{$disabled-border}; 35 | } 36 | // scss-docs-end btn-variant-mixin 37 | 38 | // scss-docs-start btn-outline-variant-mixin 39 | @mixin button-outline-variant( 40 | $color, 41 | $color-hover: color-contrast($color), 42 | $active-background: $color, 43 | $active-border: $color, 44 | $active-color: color-contrast($active-background) 45 | ) { 46 | --#{$prefix}btn-color: #{$color}; 47 | --#{$prefix}btn-border-color: #{$color}; 48 | --#{$prefix}btn-hover-color: #{$color-hover}; 49 | --#{$prefix}btn-hover-bg: #{$active-background}; 50 | --#{$prefix}btn-hover-border-color: #{$active-border}; 51 | --#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)}; 52 | --#{$prefix}btn-active-color: #{$active-color}; 53 | --#{$prefix}btn-active-bg: #{$active-background}; 54 | --#{$prefix}btn-active-border-color: #{$active-border}; 55 | --#{$prefix}btn-active-shadow: #{$btn-active-box-shadow}; 56 | --#{$prefix}btn-disabled-color: #{$color}; 57 | --#{$prefix}btn-disabled-bg: transparent; 58 | --#{$prefix}btn-disabled-border-color: #{$color}; 59 | --#{$prefix}gradient: none; 60 | } 61 | // scss-docs-end btn-outline-variant-mixin 62 | 63 | // scss-docs-start btn-size-mixin 64 | @mixin button-size($padding-y, $padding-x, $font-size, $border-radius) { 65 | --#{$prefix}btn-padding-y: #{$padding-y}; 66 | --#{$prefix}btn-padding-x: #{$padding-x}; 67 | @include rfs($font-size, --#{$prefix}btn-font-size); 68 | --#{$prefix}btn-border-radius: #{$border-radius}; 69 | } 70 | // scss-docs-end btn-size-mixin 71 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_caret.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start caret-mixins 2 | @mixin caret-down($width: $caret-width) { 3 | border-top: $width solid; 4 | border-right: $width solid transparent; 5 | border-bottom: 0; 6 | border-left: $width solid transparent; 7 | } 8 | 9 | @mixin caret-up($width: $caret-width) { 10 | border-top: 0; 11 | border-right: $width solid transparent; 12 | border-bottom: $width solid; 13 | border-left: $width solid transparent; 14 | } 15 | 16 | @mixin caret-end($width: $caret-width) { 17 | border-top: $width solid transparent; 18 | border-right: 0; 19 | border-bottom: $width solid transparent; 20 | border-left: $width solid; 21 | } 22 | 23 | @mixin caret-start($width: $caret-width) { 24 | border-top: $width solid transparent; 25 | border-right: $width solid; 26 | border-bottom: $width solid transparent; 27 | } 28 | 29 | @mixin caret( 30 | $direction: down, 31 | $width: $caret-width, 32 | $spacing: $caret-spacing, 33 | $vertical-align: $caret-vertical-align 34 | ) { 35 | @if $enable-caret { 36 | &::after { 37 | display: inline-block; 38 | margin-left: $spacing; 39 | vertical-align: $vertical-align; 40 | content: ""; 41 | @if $direction == down { 42 | @include caret-down($width); 43 | } @else if $direction == up { 44 | @include caret-up($width); 45 | } @else if $direction == end { 46 | @include caret-end($width); 47 | } 48 | } 49 | 50 | @if $direction == start { 51 | &::after { 52 | display: none; 53 | } 54 | 55 | &::before { 56 | display: inline-block; 57 | margin-right: $spacing; 58 | vertical-align: $vertical-align; 59 | content: ""; 60 | @include caret-start($width); 61 | } 62 | } 63 | 64 | &:empty::after { 65 | margin-left: 0; 66 | } 67 | } 68 | } 69 | // scss-docs-end caret-mixins 70 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start clearfix 2 | @mixin clearfix() { 3 | &::after { 4 | display: block; 5 | clear: both; 6 | content: ""; 7 | } 8 | } 9 | // scss-docs-end clearfix 10 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_color-mode.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start color-mode-mixin 2 | @mixin color-mode($mode: light, $root: false) { 3 | @if $color-mode-type == "media-query" { 4 | @if $root == true { 5 | @media (prefers-color-scheme: $mode) { 6 | :root { 7 | @content; 8 | } 9 | } 10 | } @else { 11 | @media (prefers-color-scheme: $mode) { 12 | @content; 13 | } 14 | } 15 | } @else { 16 | [data-bs-theme="#{$mode}"] { 17 | @content; 18 | } 19 | } 20 | } 21 | // scss-docs-end color-mode-mixin 22 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_color-scheme.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start mixin-color-scheme 2 | @mixin color-scheme($name) { 3 | @media (prefers-color-scheme: #{$name}) { 4 | @content; 5 | } 6 | } 7 | // scss-docs-end mixin-color-scheme 8 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_container.scss: -------------------------------------------------------------------------------- 1 | // Container mixins 2 | 3 | @mixin make-container($gutter: $container-padding-x) { 4 | --#{$prefix}gutter-x: #{$gutter}; 5 | --#{$prefix}gutter-y: 0; 6 | width: 100%; 7 | padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list 8 | padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list 9 | margin-right: auto; 10 | margin-left: auto; 11 | } 12 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_deprecate.scss: -------------------------------------------------------------------------------- 1 | // Deprecate mixin 2 | // 3 | // This mixin can be used to deprecate mixins or functions. 4 | // `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to 5 | // some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap) 6 | @mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) { 7 | @if ($enable-deprecation-messages != false and $ignore-warning != true) { 8 | @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}."; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_forms.scss: -------------------------------------------------------------------------------- 1 | // This mixin uses an `if()` technique to be compatible with Dart Sass 2 | // See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details 3 | 4 | // scss-docs-start form-validation-mixins 5 | @mixin form-validation-state-selector($state) { 6 | @if ($state == "valid" or $state == "invalid") { 7 | .was-validated #{if(&, "&", "")}:#{$state}, 8 | #{if(&, "&", "")}.is-#{$state} { 9 | @content; 10 | } 11 | } @else { 12 | #{if(&, "&", "")}.is-#{$state} { 13 | @content; 14 | } 15 | } 16 | } 17 | 18 | @mixin form-validation-state( 19 | $state, 20 | $color, 21 | $icon, 22 | $tooltip-color: color-contrast($color), 23 | $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity), 24 | $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity), 25 | $border-color: $color 26 | ) { 27 | .#{$state}-feedback { 28 | display: none; 29 | width: 100%; 30 | margin-top: $form-feedback-margin-top; 31 | @include font-size($form-feedback-font-size); 32 | font-style: $form-feedback-font-style; 33 | color: $color; 34 | } 35 | 36 | .#{$state}-tooltip { 37 | position: absolute; 38 | top: 100%; 39 | z-index: 5; 40 | display: none; 41 | max-width: 100%; // Contain to parent when possible 42 | padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x; 43 | margin-top: .1rem; 44 | @include font-size($form-feedback-tooltip-font-size); 45 | line-height: $form-feedback-tooltip-line-height; 46 | color: $tooltip-color; 47 | background-color: $tooltip-bg-color; 48 | @include border-radius($form-feedback-tooltip-border-radius); 49 | } 50 | 51 | @include form-validation-state-selector($state) { 52 | ~ .#{$state}-feedback, 53 | ~ .#{$state}-tooltip { 54 | display: block; 55 | } 56 | } 57 | 58 | .form-control { 59 | @include form-validation-state-selector($state) { 60 | border-color: $border-color; 61 | 62 | @if $enable-validation-icons { 63 | padding-right: $input-height-inner; 64 | background-image: escape-svg($icon); 65 | background-repeat: no-repeat; 66 | background-position: right $input-height-inner-quarter center; 67 | background-size: $input-height-inner-half $input-height-inner-half; 68 | } 69 | 70 | &:focus { 71 | border-color: $border-color; 72 | @if $enable-shadows { 73 | @include box-shadow($input-box-shadow, $focus-box-shadow); 74 | } @else { 75 | // Avoid using mixin so we can pass custom focus shadow properly 76 | box-shadow: $focus-box-shadow; 77 | } 78 | } 79 | } 80 | } 81 | 82 | // stylelint-disable-next-line selector-no-qualifying-type 83 | textarea.form-control { 84 | @include form-validation-state-selector($state) { 85 | @if $enable-validation-icons { 86 | padding-right: $input-height-inner; 87 | background-position: top $input-height-inner-quarter right $input-height-inner-quarter; 88 | } 89 | } 90 | } 91 | 92 | .form-select { 93 | @include form-validation-state-selector($state) { 94 | border-color: $border-color; 95 | 96 | @if $enable-validation-icons { 97 | &:not([multiple]):not([size]), 98 | &:not([multiple])[size="1"] { 99 | --#{$prefix}form-select-bg-icon: #{escape-svg($icon)}; 100 | padding-right: $form-select-feedback-icon-padding-end; 101 | background-position: $form-select-bg-position, $form-select-feedback-icon-position; 102 | background-size: $form-select-bg-size, $form-select-feedback-icon-size; 103 | } 104 | } 105 | 106 | &:focus { 107 | border-color: $border-color; 108 | @if $enable-shadows { 109 | @include box-shadow($form-select-box-shadow, $focus-box-shadow); 110 | } @else { 111 | // Avoid using mixin so we can pass custom focus shadow properly 112 | box-shadow: $focus-box-shadow; 113 | } 114 | } 115 | } 116 | } 117 | 118 | .form-control-color { 119 | @include form-validation-state-selector($state) { 120 | @if $enable-validation-icons { 121 | width: add($form-color-width, $input-height-inner); 122 | } 123 | } 124 | } 125 | 126 | .form-check-input { 127 | @include form-validation-state-selector($state) { 128 | border-color: $border-color; 129 | 130 | &:checked { 131 | background-color: $color; 132 | } 133 | 134 | &:focus { 135 | box-shadow: $focus-box-shadow; 136 | } 137 | 138 | ~ .form-check-label { 139 | color: $color; 140 | } 141 | } 142 | } 143 | .form-check-inline .form-check-input { 144 | ~ .#{$state}-feedback { 145 | margin-left: .5em; 146 | } 147 | } 148 | 149 | .input-group { 150 | > .form-control:not(:focus), 151 | > .form-select:not(:focus), 152 | > .form-floating:not(:focus-within) { 153 | @include form-validation-state-selector($state) { 154 | @if $state == "valid" { 155 | z-index: 3; 156 | } @else if $state == "invalid" { 157 | z-index: 4; 158 | } 159 | } 160 | } 161 | } 162 | } 163 | // scss-docs-end form-validation-mixins 164 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_gradients.scss: -------------------------------------------------------------------------------- 1 | // Gradients 2 | 3 | // scss-docs-start gradient-bg-mixin 4 | @mixin gradient-bg($color: null) { 5 | background-color: $color; 6 | 7 | @if $enable-gradients { 8 | background-image: var(--#{$prefix}gradient); 9 | } 10 | } 11 | // scss-docs-end gradient-bg-mixin 12 | 13 | // scss-docs-start gradient-mixins 14 | // Horizontal gradient, from left to right 15 | // 16 | // Creates two color stops, start and end, by specifying a color and position for each color stop. 17 | @mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) { 18 | background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); 19 | } 20 | 21 | // Vertical gradient, from top to bottom 22 | // 23 | // Creates two color stops, start and end, by specifying a color and position for each color stop. 24 | @mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: null, $end-percent: null) { 25 | background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); 26 | } 27 | 28 | @mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) { 29 | background-image: linear-gradient($deg, $start-color, $end-color); 30 | } 31 | 32 | @mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) { 33 | background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color); 34 | } 35 | 36 | @mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) { 37 | background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color); 38 | } 39 | 40 | @mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) { 41 | background-image: radial-gradient(circle, $inner-color, $outer-color); 42 | } 43 | 44 | @mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) { 45 | background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent); 46 | } 47 | // scss-docs-end gradient-mixins 48 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_grid.scss: -------------------------------------------------------------------------------- 1 | // Grid system 2 | // 3 | // Generate semantic grid columns with these mixins. 4 | 5 | @mixin make-row($gutter: $grid-gutter-width) { 6 | --#{$prefix}gutter-x: #{$gutter}; 7 | --#{$prefix}gutter-y: 0; 8 | display: flex; 9 | flex-wrap: wrap; 10 | // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed 11 | margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list 12 | margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list 13 | margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list 14 | } 15 | 16 | @mixin make-col-ready() { 17 | // Add box sizing if only the grid is loaded 18 | box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null); 19 | // Prevent columns from becoming too narrow when at smaller grid tiers by 20 | // always setting `width: 100%;`. This works because we set the width 21 | // later on to override this initial width. 22 | flex-shrink: 0; 23 | width: 100%; 24 | max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid 25 | padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list 26 | padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list 27 | margin-top: var(--#{$prefix}gutter-y); 28 | } 29 | 30 | @mixin make-col($size: false, $columns: $grid-columns) { 31 | @if $size { 32 | flex: 0 0 auto; 33 | width: percentage(divide($size, $columns)); 34 | 35 | } @else { 36 | flex: 1 1 0; 37 | max-width: 100%; 38 | } 39 | } 40 | 41 | @mixin make-col-auto() { 42 | flex: 0 0 auto; 43 | width: auto; 44 | } 45 | 46 | @mixin make-col-offset($size, $columns: $grid-columns) { 47 | $num: divide($size, $columns); 48 | margin-left: if($num == 0, 0, percentage($num)); 49 | } 50 | 51 | // Row columns 52 | // 53 | // Specify on a parent element(e.g., .row) to force immediate children into NN 54 | // number of columns. Supports wrapping to new lines, but does not do a Masonry 55 | // style grid. 56 | @mixin row-cols($count) { 57 | > * { 58 | flex: 0 0 auto; 59 | width: percentage(divide(1, $count)); 60 | } 61 | } 62 | 63 | // Framework grid generation 64 | // 65 | // Used only by Bootstrap to generate the correct number of grid classes given 66 | // any value of `$grid-columns`. 67 | 68 | @mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) { 69 | @each $breakpoint in map-keys($breakpoints) { 70 | $infix: breakpoint-infix($breakpoint, $breakpoints); 71 | 72 | @include media-breakpoint-up($breakpoint, $breakpoints) { 73 | // Provide basic `.col-{bp}` classes for equal-width flexbox columns 74 | .col#{$infix} { 75 | flex: 1 0 0; 76 | } 77 | 78 | .row-cols#{$infix}-auto > * { 79 | @include make-col-auto(); 80 | } 81 | 82 | @if $grid-row-columns > 0 { 83 | @for $i from 1 through $grid-row-columns { 84 | .row-cols#{$infix}-#{$i} { 85 | @include row-cols($i); 86 | } 87 | } 88 | } 89 | 90 | .col#{$infix}-auto { 91 | @include make-col-auto(); 92 | } 93 | 94 | @if $columns > 0 { 95 | @for $i from 1 through $columns { 96 | .col#{$infix}-#{$i} { 97 | @include make-col($i, $columns); 98 | } 99 | } 100 | 101 | // `$columns - 1` because offsetting by the width of an entire row isn't possible 102 | @for $i from 0 through ($columns - 1) { 103 | @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-0 104 | .offset#{$infix}-#{$i} { 105 | @include make-col-offset($i, $columns); 106 | } 107 | } 108 | } 109 | } 110 | 111 | // Gutters 112 | // 113 | // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns. 114 | @each $key, $value in $gutters { 115 | .g#{$infix}-#{$key}, 116 | .gx#{$infix}-#{$key} { 117 | --#{$prefix}gutter-x: #{$value}; 118 | } 119 | 120 | .g#{$infix}-#{$key}, 121 | .gy#{$infix}-#{$key} { 122 | --#{$prefix}gutter-y: #{$value}; 123 | } 124 | } 125 | } 126 | } 127 | } 128 | 129 | @mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) { 130 | @each $breakpoint in map-keys($breakpoints) { 131 | $infix: breakpoint-infix($breakpoint, $breakpoints); 132 | 133 | @include media-breakpoint-up($breakpoint, $breakpoints) { 134 | @if $columns > 0 { 135 | @for $i from 1 through $columns { 136 | .g-col#{$infix}-#{$i} { 137 | grid-column: auto / span $i; 138 | } 139 | } 140 | 141 | // Start with `1` because `0` is an invalid value. 142 | // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible. 143 | @for $i from 1 through ($columns - 1) { 144 | .g-start#{$infix}-#{$i} { 145 | grid-column-start: $i; 146 | } 147 | } 148 | } 149 | } 150 | } 151 | } 152 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | 10 | @mixin img-fluid { 11 | // Part 1: Set a maximum relative to the parent 12 | max-width: 100%; 13 | // Part 2: Override the height to auto, otherwise images will be stretched 14 | // when setting a width and height attribute on the img element. 15 | height: auto; 16 | } 17 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | @include deprecate("`list-group-item-variant()`", "v5.3.0", "v6.0.0"); 2 | 3 | // List Groups 4 | 5 | // scss-docs-start list-group-mixin 6 | @mixin list-group-item-variant($state, $background, $color) { 7 | .list-group-item-#{$state} { 8 | color: $color; 9 | background-color: $background; 10 | 11 | &.list-group-item-action { 12 | &:hover, 13 | &:focus { 14 | color: $color; 15 | background-color: shade-color($background, 10%); 16 | } 17 | 18 | &.active { 19 | color: $white; 20 | background-color: $color; 21 | border-color: $color; 22 | } 23 | } 24 | } 25 | } 26 | // scss-docs-end list-group-mixin 27 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | 3 | // Unstyled keeps list items block level, just removes default browser padding and list-style 4 | @mixin list-unstyled { 5 | padding-left: 0; 6 | list-style: none; 7 | } 8 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | // scss-docs-start pagination-mixin 4 | @mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) { 5 | --#{$prefix}pagination-padding-x: #{$padding-x}; 6 | --#{$prefix}pagination-padding-y: #{$padding-y}; 7 | @include rfs($font-size, --#{$prefix}pagination-font-size); 8 | --#{$prefix}pagination-border-radius: #{$border-radius}; 9 | } 10 | // scss-docs-end pagination-mixin 11 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size or overflow-wrap / word-wrap. 4 | font-style: normal; 5 | font-weight: $font-weight-normal; 6 | line-height: $line-height-base; 7 | text-align: left; // Fallback for where `start` is not supported 8 | text-align: start; 9 | text-decoration: none; 10 | text-shadow: none; 11 | text-transform: none; 12 | letter-spacing: normal; 13 | word-break: normal; 14 | white-space: normal; 15 | word-spacing: normal; 16 | line-break: auto; 17 | } 18 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 5 | resize: $direction; // Options: horizontal, vertical, both 6 | } 7 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_table-variants.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start table-variant 2 | @mixin table-variant($state, $background) { 3 | .table-#{$state} { 4 | $color: color-contrast(opaque($body-bg, $background)); 5 | $hover-bg: mix($color, $background, percentage($table-hover-bg-factor)); 6 | $striped-bg: mix($color, $background, percentage($table-striped-bg-factor)); 7 | $active-bg: mix($color, $background, percentage($table-active-bg-factor)); 8 | $table-border-color: mix($color, $background, percentage($table-border-factor)); 9 | 10 | --#{$prefix}table-color: #{$color}; 11 | --#{$prefix}table-bg: #{$background}; 12 | --#{$prefix}table-border-color: #{$table-border-color}; 13 | --#{$prefix}table-striped-bg: #{$striped-bg}; 14 | --#{$prefix}table-striped-color: #{color-contrast($striped-bg)}; 15 | --#{$prefix}table-active-bg: #{$active-bg}; 16 | --#{$prefix}table-active-color: #{color-contrast($active-bg)}; 17 | --#{$prefix}table-hover-bg: #{$hover-bg}; 18 | --#{$prefix}table-hover-color: #{color-contrast($hover-bg)}; 19 | 20 | color: var(--#{$prefix}table-color); 21 | border-color: var(--#{$prefix}table-border-color); 22 | } 23 | } 24 | // scss-docs-end table-variant 25 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_text-truncate.scss: -------------------------------------------------------------------------------- 1 | // Text truncate 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-truncate() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_transition.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-disallowed-list 2 | @mixin transition($transition...) { 3 | @if length($transition) == 0 { 4 | $transition: $transition-base; 5 | } 6 | 7 | @if length($transition) > 1 { 8 | @each $value in $transition { 9 | @if $value == null or $value == none { 10 | @warn "The keyword 'none' or 'null' must be used as a single argument."; 11 | } 12 | } 13 | } 14 | 15 | @if $enable-transitions { 16 | @if nth($transition, 1) != null { 17 | transition: $transition; 18 | } 19 | 20 | @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none { 21 | @media (prefers-reduced-motion: reduce) { 22 | transition: none; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_utilities.scss: -------------------------------------------------------------------------------- 1 | // Utility generator 2 | // Used to generate utilities & print utilities 3 | @mixin generate-utility($utility, $infix: "", $is-rfs-media-query: false) { 4 | $values: map-get($utility, values); 5 | 6 | // If the values are a list or string, convert it into a map 7 | @if type-of($values) == "string" or type-of(nth($values, 1)) != "list" { 8 | $values: zip($values, $values); 9 | } 10 | 11 | @each $key, $value in $values { 12 | $properties: map-get($utility, property); 13 | 14 | // Multiple properties are possible, for example with vertical or horizontal margins or paddings 15 | @if type-of($properties) == "string" { 16 | $properties: append((), $properties); 17 | } 18 | 19 | // Use custom class if present 20 | $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1)); 21 | $property-class: if($property-class == null, "", $property-class); 22 | 23 | // Use custom CSS variable name if present, otherwise default to `class` 24 | $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class)); 25 | 26 | // State params to generate pseudo-classes 27 | $state: if(map-has-key($utility, state), map-get($utility, state), ()); 28 | 29 | $infix: if($property-class == "" and str-slice($infix, 1, 1) == "-", str-slice($infix, 2), $infix); 30 | 31 | // Don't prefix if value key is null (e.g. with shadow class) 32 | $property-class-modifier: if($key, if($property-class == "" and $infix == "", "", "-") + $key, ""); 33 | 34 | @if map-get($utility, rfs) { 35 | // Inside the media query 36 | @if $is-rfs-media-query { 37 | $val: rfs-value($value); 38 | 39 | // Do not render anything if fluid and non fluid values are the same 40 | $value: if($val == rfs-fluid-value($value), null, $val); 41 | } 42 | @else { 43 | $value: rfs-fluid-value($value); 44 | } 45 | } 46 | 47 | $is-css-var: map-get($utility, css-var); 48 | $is-local-vars: map-get($utility, local-vars); 49 | $is-rtl: map-get($utility, rtl); 50 | 51 | @if $value != null { 52 | @if $is-rtl == false { 53 | /* rtl:begin:remove */ 54 | } 55 | 56 | @if $is-css-var { 57 | .#{$property-class + $infix + $property-class-modifier} { 58 | --#{$prefix}#{$css-variable-name}: #{$value}; 59 | } 60 | 61 | @each $pseudo in $state { 62 | .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} { 63 | --#{$prefix}#{$css-variable-name}: #{$value}; 64 | } 65 | } 66 | } @else { 67 | .#{$property-class + $infix + $property-class-modifier} { 68 | @each $property in $properties { 69 | @if $is-local-vars { 70 | @each $local-var, $variable in $is-local-vars { 71 | --#{$prefix}#{$local-var}: #{$variable}; 72 | } 73 | } 74 | #{$property}: $value if($enable-important-utilities, !important, null); 75 | } 76 | } 77 | 78 | @each $pseudo in $state { 79 | .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} { 80 | @each $property in $properties { 81 | @if $is-local-vars { 82 | @each $local-var, $variable in $is-local-vars { 83 | --#{$prefix}#{$local-var}: #{$variable}; 84 | } 85 | } 86 | #{$property}: $value if($enable-important-utilities, !important, null); 87 | } 88 | } 89 | } 90 | } 91 | 92 | @if $is-rtl == false { 93 | /* rtl:end:remove */ 94 | } 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/mixins/_visually-hidden.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Hide content visually while keeping it accessible to assistive technologies 4 | // 5 | // See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/ 6 | // See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/ 7 | 8 | @mixin visually-hidden() { 9 | width: 1px !important; 10 | height: 1px !important; 11 | padding: 0 !important; 12 | margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686 13 | overflow: hidden !important; 14 | clip: rect(0, 0, 0, 0) !important; 15 | white-space: nowrap !important; 16 | border: 0 !important; 17 | 18 | // Fix for positioned table caption that could become anonymous cells 19 | &:not(caption) { 20 | position: absolute !important; 21 | } 22 | 23 | // Fix to prevent overflowing children to become focusable 24 | * { 25 | overflow: hidden !important; 26 | } 27 | } 28 | 29 | // Use to only display content when it's focused, or one of its child elements is focused 30 | // (i.e. when focus is within the element/container that the class was applied to) 31 | // 32 | // Useful for "Skip to main content" links; see https://www.w3.org/WAI/WCAG22/Techniques/general/G1.html 33 | 34 | @mixin visually-hidden-focusable() { 35 | &:not(:focus):not(:focus-within) { 36 | @include visually-hidden(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /_sass/bootstrap/scss/utilities/_api.scss: -------------------------------------------------------------------------------- 1 | // Loop over each breakpoint 2 | @each $breakpoint in map-keys($grid-breakpoints) { 3 | 4 | // Generate media query if needed 5 | @include media-breakpoint-up($breakpoint) { 6 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 7 | 8 | // Loop over each utility property 9 | @each $key, $utility in $utilities { 10 | // The utility can be disabled with `false`, thus check if the utility is a map first 11 | // Only proceed if responsive media queries are enabled or if it's the base media query 12 | @if type-of($utility) == "map" and (map-get($utility, responsive) or $infix == "") { 13 | @include generate-utility($utility, $infix); 14 | } 15 | } 16 | } 17 | } 18 | 19 | // RFS rescaling 20 | @media (min-width: $rfs-mq-value) { 21 | @each $breakpoint in map-keys($grid-breakpoints) { 22 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 23 | 24 | @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) { 25 | // Loop over each utility property 26 | @each $key, $utility in $utilities { 27 | // The utility can be disabled with `false`, thus check if the utility is a map first 28 | // Only proceed if responsive media queries are enabled or if it's the base media query 29 | @if type-of($utility) == "map" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == "") { 30 | @include generate-utility($utility, $infix, true); 31 | } 32 | } 33 | } 34 | } 35 | } 36 | 37 | 38 | // Print utilities 39 | @media print { 40 | @each $key, $utility in $utilities { 41 | // The utility can be disabled with `false`, thus check if the utility is a map first 42 | // Then check if the utility needs print styles 43 | @if type-of($utility) == "map" and map-get($utility, print) == true { 44 | @include generate-utility($utility, "-print"); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /_sass/default.scss: -------------------------------------------------------------------------------- 1 | pre { line-height: 125%; } 2 | td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } 3 | span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } 4 | td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 5 | span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } 6 | .highlight .hll { background-color: #ffffcc } 7 | .highlight { background: #f8f8f8; } 8 | .highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ 9 | .highlight .err { border: 1px solid #F00 } /* Error */ 10 | .highlight .k { color: #008000; font-weight: bold } /* Keyword */ 11 | .highlight .o { color: #666 } /* Operator */ 12 | .highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ 13 | .highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ 14 | .highlight .cp { color: #9C6500 } /* Comment.Preproc */ 15 | .highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ 16 | .highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ 17 | .highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ 18 | .highlight .gd { color: #A00000 } /* Generic.Deleted */ 19 | .highlight .ge { font-style: italic } /* Generic.Emph */ 20 | .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ 21 | .highlight .gr { color: #E40000 } /* Generic.Error */ 22 | .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ 23 | .highlight .gi { color: #008400 } /* Generic.Inserted */ 24 | .highlight .go { color: #717171 } /* Generic.Output */ 25 | .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ 26 | .highlight .gs { font-weight: bold } /* Generic.Strong */ 27 | .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ 28 | .highlight .gt { color: #04D } /* Generic.Traceback */ 29 | .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ 30 | .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ 31 | .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ 32 | .highlight .kp { color: #008000 } /* Keyword.Pseudo */ 33 | .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ 34 | .highlight .kt { color: #B00040 } /* Keyword.Type */ 35 | .highlight .m { color: #666 } /* Literal.Number */ 36 | .highlight .s { color: #BA2121 } /* Literal.String */ 37 | .highlight .na { color: #687822 } /* Name.Attribute */ 38 | .highlight .nb { color: #008000 } /* Name.Builtin */ 39 | .highlight .nc { color: #00F; font-weight: bold } /* Name.Class */ 40 | .highlight .no { color: #800 } /* Name.Constant */ 41 | .highlight .nd { color: #A2F } /* Name.Decorator */ 42 | .highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ 43 | .highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ 44 | .highlight .nf { color: #00F } /* Name.Function */ 45 | .highlight .nl { color: #767600 } /* Name.Label */ 46 | .highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */ 47 | .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ 48 | .highlight .nv { color: #19177C } /* Name.Variable */ 49 | .highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */ 50 | .highlight .w { color: #BBB } /* Text.Whitespace */ 51 | .highlight .mb { color: #666 } /* Literal.Number.Bin */ 52 | .highlight .mf { color: #666 } /* Literal.Number.Float */ 53 | .highlight .mh { color: #666 } /* Literal.Number.Hex */ 54 | .highlight .mi { color: #666 } /* Literal.Number.Integer */ 55 | .highlight .mo { color: #666 } /* Literal.Number.Oct */ 56 | .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ 57 | .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ 58 | .highlight .sc { color: #BA2121 } /* Literal.String.Char */ 59 | .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ 60 | .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ 61 | .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ 62 | .highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ 63 | .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ 64 | .highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ 65 | .highlight .sx { color: #008000 } /* Literal.String.Other */ 66 | .highlight .sr { color: #A45A77 } /* Literal.String.Regex */ 67 | .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ 68 | .highlight .ss { color: #19177C } /* Literal.String.Symbol */ 69 | .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ 70 | .highlight .fm { color: #00F } /* Name.Function.Magic */ 71 | .highlight .vc { color: #19177C } /* Name.Variable.Class */ 72 | .highlight .vg { color: #19177C } /* Name.Variable.Global */ 73 | .highlight .vi { color: #19177C } /* Name.Variable.Instance */ 74 | .highlight .vm { color: #19177C } /* Name.Variable.Magic */ 75 | .highlight .il { color: #666 } /* Literal.Number.Integer.Long */ 76 | -------------------------------------------------------------------------------- /assets/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@fortawesome/fontawesome-free/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /assets/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@fortawesome/fontawesome-free/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /assets/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@fortawesome/fontawesome-free/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /assets/@fortawesome/fontawesome-free/webfonts/fa-v4compatibility.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@fortawesome/fontawesome-free/webfonts/fa-v4compatibility.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/arabic.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const c=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","arabic",c({AB:{normal:{126464:[.791,-.013,.21],126465:[.453,.07,.825,{ic:.061}],126466:[.518,.455,.864],126467:[.48,-.113,.348],126468:[.488,-.152,.279],126469:[.354,.186,.547],126470:[.583,.271,.656],126471:[.518,.455,.886],126472:[.851,-.075,.813],126473:[.555,.328,.833],126474:[.881,-.062,.65],126475:[.788,.158,.563,{ic:.018}],126476:[.466,.444,.442],126477:[.716,.044,.567,{ic:.025}],126478:[.35,.172,.806,{ic:.023}],126479:[.744,.446,.83,{ic:.13}],126480:[.76,-.078,1.008,{ic:.016}],126481:[.396,.186,1.057,{ic:.02}],126482:[.567,.137,.588,{ic:.019}],126483:[.36,.271,.625],126484:[.695,.172,.83,{ic:.017}],126485:[.537,-.078,.888,{ic:.026}],126486:[.65,-.078,.882,{ic:.022}],126487:[.819,.455,.911,{ic:.001}],126488:[.671,-.099,.385],126489:[.546,.216,1.047,{ic:.02}],126490:[.851,-.075,.789],126491:[.915,.457,.907,{ic:.107}],126492:[.453,-.078,.794],126493:[.492,.044,.567,{ic:.025}],126494:[.579,-.078,.871],126495:[.364,.137,.575,{ic:.036}],126496:[.589,-.15,.359],126497:[.488,.041,.279],126498:[.49,-.05,.793],126500:[.638,-.15,.586],126503:[.49,-.152,.743],126505:[.488,.04,.319],126506:[.964,-.152,.794],126507:[.961,-.148,.353],126508:[.529,-.152,.459],126509:[.704,-.152,.268],126510:[.434,-.152,.575],126511:[.632,-.146,.521,{ic:.041}],126512:[.828,-.15,.359],126513:[.433,-.1,.643],126514:[.846,-.15,.352],126516:[.733,-.152,.583],126517:[.697,-.152,.286],126518:[.799,-.152,.29],126519:[.757,-.152,.803],126521:[.624,-.1,.669],126523:[.859,-.146,.516,{ic:.046}],126530:[.548,.422,.792],126535:[.548,.422,.792],126537:[.555,.328,.947],126539:[.788,.158,.726],126541:[.567,.081,.715],126542:[.375,.154,.988],126543:[.744,.424,.785],126545:[.457,.125,1.23],126546:[.608,.123,.805],126548:[.679,.154,1.003],126551:[.794,.422,.776],126553:[.645,.135,1.226],126555:[.901,.424,.85],126557:[.462,.081,.723],126559:[.378,.123,.795],126561:[.93,-.031,.484],126562:[.936,-.129,.936],126564:[.936,-.225,.773],126567:[.936,-.225,.889],126568:[1.005,-.219,.865],126569:[.93,-.022,.511],126570:[1.034,-.219,1],126572:[.933,-.222,.655],126573:[.93,-.219,.448,{ic:.022}],126574:[.936,-.225,.771],126575:[.936,-.226,.718,{ic:.054}],126576:[.933,-.221,.502,{ic:.002}],126577:[.935,-.17,.858],126578:[.933,-.221,.527],126580:[.936,-.225,.778],126581:[.93,-.219,.52],126582:[.93,-.219,.507],126583:[.936,-.225,.947],126585:[.935,-.17,.863],126586:[1.005,-.219,.905],126587:[.936,-.226,.744,{ic:.028}],126588:[.93,-.219,.489],126590:[.933,-.221,.527],126591:[.456,.013,.905],126592:[.831,-.057,.29],126593:[.456,.139,.905],126594:[.518,.567,.823],126595:[.48,-.056,.355],126596:[.601,-.055,.668],126597:[.354,.238,.599],126598:[.547,.342,.59],126599:[.518,.567,.835],126600:[.885,-.003,.871],126601:[.555,.328,.795],126603:[.816,.208,.567],126604:[.436,.478,.363],126605:[.705,.118,.571],126606:[.35,.27,.826],126607:[.744,.551,.831],126608:[.731,.013,.937],126609:[.396,.281,1.054],126610:[.567,.231,.603],126611:[.36,.342,.59],126612:[.674,.27,.826],126613:[.583,.013,.905],126614:[.674,.013,.905],126615:[.831,.567,.823],126616:[.71,-.056,.355],126617:[.607,.281,1.054],126618:[.885,-.003,.811,{ic:.029}],126619:[.932,.551,.831],126625:[.453,.07,.825,{ic:.061}],126626:[.518,.455,.864],126627:[.48,-.113,.348],126629:[.354,.186,.547],126630:[.583,.271,.656],126631:[.518,.455,.886],126632:[.851,-.075,.813],126633:[.555,.328,.833],126635:[.788,.158,.563,{ic:.018}],126636:[.466,.444,.442],126637:[.716,.044,.567,{ic:.025}],126638:[.35,.172,.806,{ic:.023}],126639:[.744,.446,.83,{ic:.13}],126640:[.76,-.078,1.008,{ic:.016}],126641:[.396,.186,1.057,{ic:.02}],126642:[.567,.137,.588,{ic:.019}],126643:[.36,.271,.625],126644:[.695,.172,.83,{ic:.017}],126645:[.537,-.078,.888,{ic:.026}],126646:[.65,-.078,.882,{ic:.022}],126647:[.819,.455,.911,{ic:.001}],126648:[.671,-.113,.385],126649:[.546,.186,1.047,{ic:.03}],126650:[.851,-.075,.789],126651:[.915,.446,.907,{ic:.053}],126704:[.515,.012,1.368,{sk:-.058}],126705:[.509,.025,1.771]}},ABB:{bold:{}},ABI:{italic:{}},ABBI:{"bold-italic":{}}},"NCM"),{},["MJX-NCM-AB","MJX-NCM-ABB","MJX-NCM-ABI","MJX-NCM-ABBI"]);MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/arabic","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/calligraphic.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const s=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","calligraphic",s({C:{"-tex-calligraphic":{65:[.694,.015,.857,{sk:.274}],66:[.713,.001,.778,{sk:.174}],67:[.697,.015,.654,{sk:.135}],68:[.717,-.004,.871,{sk:.06}],69:[.702,.012,.613,{sk:.143}],70:[.699,.015,.904,{sk:.212}],71:[.697,.13,.685,{sk:.164}],72:[.69,.008,1.065,{sk:.163}],73:[.685,.014,.62,{sk:.159}],74:[.692,.129,.698,{sk:.219}],75:[.69,.012,.989,{sk:.173}],76:[.685,.009,.77,{sk:.208}],77:[.699,.013,1.149,{sk:.128}],78:[.706,.009,1.007,{sk:.121}],79:[.686,.018,.699,{sk:.114}],80:[.71,.011,.763,{sk:.163}],81:[.694,.025,.716,{sk:.124}],82:[.712,.006,.818,{sk:.191}],83:[.702,.012,.625,{sk:.139}],84:[.694,.006,.776,{sk:.112}],85:[.7,.016,.744,{sk:.06}],86:[.709,.01,.71,{sk:.042}],87:[.703,.006,1.028,{sk:.087}],88:[.706,.009,.87,{sk:.121}],89:[.703,.136,.628,{sk:.083}],90:[.696,.011,.726,{sk:.089}]}},CB:{"-tex-bold-calligraphic":{65:[.711,.017,.969,{sk:.283}],66:[.727,.001,.916,{sk:.101}],67:[.709,.015,.745,{sk:.15}],68:[.727,.001,1.007,{sk:.045}],69:[.708,.012,.705,{sk:.151}],70:[.731,.014,1.005,{sk:.151}],71:[.705,.138,.79,{sk:.177}],72:[.699,.012,1.191,{sk:.178}],73:[.703,.018,.715,{sk:.199}],74:[.701,.137,.771,{sk:.26}],75:[.709,.009,1.099,{sk:.196}],76:[.71,.012,.861,{sk:.259}],77:[.71,.017,1.284,{sk:.115}],78:[.712,.013,1.095,{sk:.139}],79:[.707,.02,.822,{sk:.183}],80:[.726,.013,.88,{sk:.126}],81:[.705,.042,.839,{sk:.138}],82:[.732,.012,.923,{sk:.133}],83:[.715,.018,.722,{sk:.141}],84:[.697,.011,.91,{sk:.144}],85:[.709,.013,.853,{sk:.07}],86:[.702,.016,.784,{sk:.035}],87:[.71,.008,1.15,{sk:.057}],88:[.712,.011,.97,{sk:.125}],89:[.709,.135,.738,{sk:.079}],90:[.705,.014,.8,{sk:.133}]}}},"NCM"));MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/calligraphic","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/devanagari.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const d=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","devanagari",d({DV:{normal:{2304:[.906,-.683,0,{dx:.044}],2305:[.896,-.683,0,{dx:.028}],2306:[.828,-.718,0,{dx:.147}],2307:[.493,-.054,.252],2308:[1.003,.091,.917],2309:[.68,.091,.917],2310:[.68,.091,1.22],2311:[.68,.227,.72],2312:[.968,.227,.72],2313:[.68,0,.705],2314:[.68,0,.915],2315:[.68,.091,1.042],2316:[.68,.078,1.042],2317:[.922,.151,.709],2318:[1.003,.151,.709],2319:[.68,.151,.709],2320:[1.033,.151,.709],2321:[.922,.091,1.139],2322:[1.003,.091,1.22],2323:[1.033,.091,1.22],2324:[1.033,.091,1.219],2325:[.68,.092,1.041],2326:[.68,.088,.994],2327:[.68,.091,.787],2328:[.68,.088,.869],2329:[.68,.007,.788,{ic:.066}],2330:[.68,.088,.894],2331:[.68,-.008,.861],2332:[.68,.091,.921],2333:[.68,.227,.994],2334:[.68,.088,1.07],2335:[.68,-.043,.735],2336:[.68,-.043,.808],2337:[.68,.007,.788],2338:[.68,-.043,.731],2339:[.68,.088,.922],2340:[.68,.088,.793],2341:[.704,.088,.764],2342:[.68,.033,.68],2343:[.68,.088,.715],2344:[.68,.091,.789],2345:[.68,.091,.789],2346:[.68,.088,.784],2347:[.68,.088,1.025],2348:[.68,.088,.79],2349:[.704,.088,.774],2350:[.68,.088,.774],2351:[.68,.088,.787],2352:[.68,.015,.623],2353:[.68,.015,.623],2354:[.68,.088,.929],2355:[.68,-.063,.979],2356:[.68,.089,.979,{ic:.002}],2357:[.68,.088,.79],2358:[.68,.091,.865],2359:[.68,.088,.784],2360:[.68,.088,.892],2361:[.68,.173,.715],2362:[1.009,-.609,0,{dx:.128}],2363:[1.009,.088,.301,{ic:.066}],2364:[-.081,.204,0,{dx:.277}],2365:[.68,-.08,.435],2366:[.68,.088,.301,{ic:.066}],2367:[.978,.088,.301,{ic:.384}],2368:[.977,.088,.279,{ic:.066}],2369:[.038,.288,0,{dx:.232}],2370:[.024,.314,0,{dx:.074}],2371:[.032,.309,0,{dx:.166}],2372:[.065,.372,0,{dx:.16}],2373:[.922,-.749,0,{dx:0}],2374:[1.003,-.632,0,{dx:.223}],2375:[1.033,-.664,0,{dx:.178}],2376:[1.033,-.664,0,{dx:.184}],2377:[.922,.088,.301,{ic:.066}],2378:[1.003,.088,.301,{ic:.066}],2379:[1.033,.088,.301,{ic:.066}],2380:[1.033,.088,.301,{ic:.066}],2381:[-.024,.309,0,{dx:-.011}],2382:[.68,.088,.26,{ic:.066}],2383:[1.096,.088,.3,{ic:.066}],2384:[.865,-.081,.984],2385:[1.077,-.681,0,{dx:.138}],2386:[-.085,.153,0,{dx:.263}],2387:[.971,-.733,0,{dx:.178}],2388:[.971,-.733,0,{dx:.081}],2389:[1.028,-.737,0,{dx:.039}],2390:[-.048,.221,0,{dx:.328}],2391:[-.048,.388,0,{dx:.328}],2392:[.68,.092,1.041],2393:[.68,.088,.994],2394:[.68,.091,.787],2395:[.68,.091,.921],2396:[.68,.173,.788],2397:[.68,.148,.731],2398:[.68,.088,1.025],2399:[.68,.088,.787],2400:[.68,.088,1.043],2401:[.68,.258,1.042],2402:[.029,.344,0,{dx:.072}],2403:[.029,.431,0,{dx:.074}],2404:[.786,.036,.311],2405:[.786,.036,.498],2406:[.541,-.149,.487],2407:[.68,.025,.409],2408:[.68,.025,.481],2409:[.68,.025,.481],2410:[.67,.002,.646],2411:[.679,.013,.523],2412:[.68,.046,.464],2413:[.661,-.029,.685],2414:[.67,0,.454],2415:[.68,.017,.404],2416:[.437,-.155,.427],2417:[.704,-.582,.338],2418:[.922,.091,.917],2419:[1.009,.091,.917],2420:[1.009,.091,1.139],2421:[1.096,.091,1.138],2422:[.68,.221,.917],2423:[.68,.388,.917],2424:[.68,.028,.765],2425:[.68,.183,.921],2426:[.68,.088,.787],2427:[.68,.091,.8],2428:[.68,.091,.921],2429:[.689,.018,.522],2430:[.68,.173,.788],2431:[.68,.088,.79]}},DVB:{bold:{}},DVI:{italic:{}},DVBI:{"bold-italic":{}}},"NCM"),{},["MJX-NCM-DV","MJX-NCM-DVB","MJX-NCM-DVI","MJX-NCM-DVBI"]);MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/devanagari","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/double-struck.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const s=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","double-struck",s({DS:{normal:{8450:[.704,.019,.722,{sk:.036}],8461:[.685,0,.777,{sk:.011}],8469:[.685,.019,.722,{sk:.022}],8473:[.685,0,.611,{sk:.028}],8474:[.704,.179,.777],8477:[.685,0,.722],8484:[.685,0,.666,{sk:.057}],8508:[.431,0,.517],8509:[.431,.216,.472],8510:[.683,0,.611,{sk:.061}],8511:[.683,0,.667,{sk:.028}],8512:[.683,0,.667,{sk:.021}],8517:[.683,0,.694,{sk:.074}],8518:[.694,.022,.5,{ic:.048,sk:.051}],8519:[.453,.022,.472,{sk:.056}],8520:[.691,0,.279,{ic:.053,sk:.071}],8521:[.691,.216,.379,{ic:.063,sk:.117}],120120:[.704,0,.722,{sk:-.014}],120121:[.685,0,.666],120123:[.685,0,.722,{sk:-.02}],120124:[.685,0,.666],120125:[.685,0,.611,{sk:.03}],120126:[.704,.019,.777],120128:[.685,0,.388],120129:[.685,.075,.5,{sk:.055}],120130:[.685,0,.777,{sk:.015}],120131:[.685,0,.666,{sk:-.148}],120132:[.685,0,.944,{sk:.073}],120134:[.704,.019,.777],120138:[.704,.012,.555,{sk:-.013}],120139:[.685,0,.666],120140:[.685,.019,.722,{sk:.053}],120141:[.685,.019,.722,{sk:.072}],120142:[.685,.019,1,{sk:.048}],120143:[.685,0,.722,{sk:.026}],120144:[.685,0,.722,{sk:.038}],120146:[.453,.022,.5],120147:[.694,.022,.628,{sk:-.169}],120148:[.453,.022,.472],120149:[.694,.022,.5,{sk:.17}],120150:[.453,.022,.472],120151:[.716,0,.389,{sk:.028}],120152:[.453,.216,.5,{sk:-.013}],120153:[.694,0,.572,{sk:-.147}],120154:[.691,0,.279],120155:[.691,.216,.389,{sk:.057}],120156:[.694,0,.544,{sk:-.054}],120157:[.694,0,.279],120158:[.453,0,.722,{sk:.061}],120159:[.453,0,.572,{sk:.06}],120160:[.453,.022,.472],120161:[.453,.194,.628,{sk:.076}],120162:[.453,.194,.5,{sk:-.012}],120163:[.453,0,.544],120164:[.453,.022,.389],120165:[.694,.022,.417,{sk:-.059}],120166:[.431,.022,.528,{sk:.051}],120167:[.431,0,.472,{sk:.051}],120168:[.431,0,.667,{sk:.033}],120169:[.431,0,.472,{sk:.015}],120170:[.431,.216,.472,{sk:.062}],120171:[.431,0,.472,{sk:.038}],120792:[.666,.022,.556],120793:[.644,0,.556],120794:[.666,0,.556],120795:[.666,.022,.556],120796:[.644,0,.556,{sk:.117}],120797:[.644,.022,.556],120798:[.666,.022,.556],120799:[.644,0,.556,{sk:.031}],120800:[.666,.022,.556],120801:[.666,.022,.556]},"double-struck":{305:[.431,0,.279],567:[.431,.216,.389,{sk:.054}]}}},"NCM"));MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/double-struck","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/fraktur.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const s=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","fraktur",s({F:{normal:{120068:[.698,.029,.717,{sk:.085}],120069:[.691,.027,.904,{sk:.032}],8493:[.687,.024,.612,{ic:.001,sk:.064}],120071:[.69,.027,.831],120072:[.687,.024,.662,{sk:.027}],120073:[.686,.155,.611,{ic:.011,sk:.062}],120074:[.695,.025,.785,{sk:-.038}],8460:[.668,.133,.72,{sk:.02}],8465:[.686,.027,.554,{sk:.138}],120077:[.686,.139,.552,{sk:.084}],120078:[.681,.027,.668,{ic:.022,sk:.074}],120079:[.686,.027,.666,{sk:.073}],120080:[.692,.029,1.049,{sk:.138}],120081:[.686,.031,.832,{sk:.121}],120082:[.729,.027,.828,{sk:.048}],120083:[.692,.22,.823,{sk:.102}],120084:[.729,.069,.828,{sk:.042}],8476:[.686,.029,.828,{sk:.08}],120086:[.689,.027,.828,{sk:.017}],120087:[.71,.027,.669,{ic:.007,sk:.032}],120088:[.698,.029,.645,{ic:.021,sk:.013}],120089:[.686,.027,.831,{sk:.061}],120090:[.687,.028,1.046,{ic:.011,sk:.117}],120091:[.69,.027,.719,{sk:.049}],120092:[.687,.219,.834,{sk:.057}],8488:[.729,.139,.602,{sk:.015}],120094:[.472,.037,.5],120095:[.687,.032,.513,{sk:-.096}],120096:[.466,.03,.389,{sk:.025}],120097:[.612,.035,.498],120098:[.468,.032,.4],120099:[.679,.239,.329,{sk:.029}],120100:[.471,.209,.503,{sk:.013}],120101:[.69,.199,.521,{sk:-.117}],120102:[.677,.023,.279],120103:[.675,.203,.28,{sk:-.01}],120104:[.687,.027,.389,{sk:-.042}],120105:[.687,.022,.279,{sk:.025}],120106:[.476,.028,.766,{sk:.022}],120107:[.476,.025,.526],120108:[.482,.029,.488,{sk:.014}],120109:[.539,.215,.5,{sk:.024}],120110:[.481,.225,.489],120111:[.476,.022,.389,{ic:.007}],120112:[.48,.031,.442],120113:[.642,.022,.333,{ic:.016,sk:-.015}],120114:[.476,.027,.517],120115:[.533,.029,.511,{sk:.029}],120116:[.533,.029,.773,{sk:.026}],120117:[.474,.188,.388,{sk:.01}],120118:[.524,.22,.498,{sk:.015}],120119:[.472,.215,.39,{sk:-.01}]},fraktur:{305:[.477,.023,.279,{sk:-.019}],567:[.476,.203,.28]}},FB:{normal:{120172:[.688,.031,.847,{sk:.082}],120173:[.685,.031,1.043],120174:[.677,.032,.723,{ic:.006,sk:.218}],120175:[.685,.029,.981,{sk:-.033}],120176:[.687,.029,.782,{sk:.207}],120177:[.684,.147,.721,{ic:.013,sk:-.078}],120178:[.692,.027,.927,{sk:.17}],120179:[.684,.127,.85,{sk:.071}],120180:[.683,.025,.654,{sk:.073}],120181:[.681,.142,.652,{sk:-.059}],120182:[.682,.026,.789,{ic:.024,sk:.126}],120183:[.684,.028,.786,{sk:.126}],120184:[.686,.033,1.239,{sk:.038}],120185:[.681,.033,.982,{sk:.024}],120186:[.726,.029,.976,{sk:-.087}],120187:[.685,.223,.977,{sk:.013}],120188:[.726,.082,.976,{sk:-.087}],120189:[.689,.029,.977,{sk:.011}],120190:[.685,.031,.978],120191:[.691,.03,.789,{ic:.009,sk:.153}],120192:[.689,.039,.85,{ic:.021,sk:.104}],120193:[.687,.029,.981],120194:[.682,.03,1.235,{ic:.005,sk:.022}],120195:[.682,.035,.849,{sk:.064}],120196:[.689,.214,.983],120197:[.718,.137,.726,{sk:-.169}],120198:[.472,.032,.602,{sk:.087}],120199:[.691,.032,.589],120200:[.473,.026,.463,{sk:.081}],120201:[.632,.029,.588,{sk:-.105}],120202:[.471,.028,.471,{sk:.048}],120203:[.681,.242,.387,{sk:.072}],120204:[.473,.208,.594,{sk:.111}],120205:[.687,.203,.615,{sk:-.097}],120206:[.686,.026,.331],120207:[.683,.207,.331],120208:[.683,.025,.464,{sk:-.017}],120209:[.682,.024,.336,{sk:.125}],120210:[.476,.031,.921,{sk:-.056}],120211:[.474,.028,.653,{sk:-.071}],120212:[.482,.034,.609,{sk:.029}],120213:[.558,.208,.603,{sk:-.124}],120214:[.485,.212,.595,{sk:.112}],120215:[.473,.026,.459,{sk:.013}],120216:[.48,.035,.522],120217:[.654,.027,.393,{ic:.014,sk:.085}],120218:[.473,.035,.588,{ic:.016,sk:.011}],120219:[.546,.028,.604,{sk:-.142}],120220:[.549,.033,.917,{sk:-.296}],120221:[.471,.188,.458,{sk:.026}],120222:[.559,.222,.589,{sk:-.127}],120223:[.472,.215,.461]},"bold-fraktur":{305:[.478,.026,.331,{sk:-.025}],567:[.483,.207,.331,{sk:-.015}]}}},"NCM"));MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/fraktur","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/marrows.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const t=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","marrows",t({MAR:{normal:{129024:[.359,-.141,1],129025:[.692,.192,.5],129026:[.359,-.141,1],129027:[.692,.192,.5],129028:[.4,-.1,1],129029:[.692,.192,.5],129030:[.4,-.1,1],129031:[.692,.192,.5],129032:[.44,-.06,1],129033:[.692,.192,.5],129034:[.44,-.06,1],129035:[.692,.192,.5],129040:[.358,-.142,1],129041:[.692,.192,.5],129042:[.358,-.142,1],129043:[.692,.192,.5],129044:[.378,-.122,1],129045:[.692,.192,.5],129046:[.378,-.122,1],129047:[.692,.192,.5],129048:[.422,-.078,1],129049:[.692,.192,.5],129050:[.422,-.078,1],129051:[.692,.192,.5],129052:[.452,-.048,1],129053:[.691,.191,.5],129054:[.452,-.048,1],129055:[.691,.191,.5],129056:[.359,-.141,1],129057:[.692,.192,.5],129058:[.359,-.141,1],129059:[.692,.192,.5],129060:[.359,-.141,1],129061:[.692,.192,.5],129062:[.359,-.141,1],129063:[.692,.192,.5],129064:[.359,-.141,1],129065:[.692,.192,.5],129066:[.359,-.141,1],129067:[.692,.192,.5],129068:[.359,-.141,1],129069:[.692,.192,.5],129070:[.359,-.141,1],129071:[.692,.192,.5],129072:[.359,-.141,1],129073:[.692,.192,.5],129074:[.359,-.141,1],129075:[.692,.192,.5],129076:[.394,-.106,.702],129077:[.533,.033,.702],129078:[.394,-.106,.702],129079:[.533,.033,.702],129080:[.359,-.141,.52],129081:[.452,-.048,.52],129082:[.359,-.141,.52],129083:[.452,-.048,.52],129084:[.359,-.141,.44],129085:[.412,-.088,.44],129086:[.359,-.141,.44],129087:[.412,-.088,.44],129088:[.422,-.078,.452],129089:[.421,-.079,.452],129090:[.422,-.078,.452],129091:[.421,-.079,.452],129092:[.422,-.078,.532],129093:[.461,-.039,.532],129094:[.422,-.078,.532],129095:[.461,-.039,.532],129104:[.445,-.055,1],129105:[.692,.192,.528],129106:[.445,-.055,1],129107:[.692,.192,.528],129108:[.568,.071,1],129109:[.571,.071,.528,{ic:.057}],129110:[.571,.068,1],129111:[.571,.071,.528,{ic:.057}],129112:[.445,-.055,1.068],129113:[.726,.226,.61],129120:[.517,.008,1],129121:[.687,.188,.646],129122:[.517,.008,1],129123:[.687,.188,.646],129124:[.564,.068,1],129125:[.567,.069,.646],129126:[.569,.064,1],129127:[.567,.065,.646],129128:[.51,.01,1],129129:[.692,.192,.646],129130:[.51,.01,1],129131:[.692,.192,.646],129132:[.568,.071,1],129133:[.568,.071,.646],129134:[.571,.068,1],129135:[.571,.068,.646],129136:[.511,.011,1],129137:[.692,.192,.666],129138:[.511,.011,1],129139:[.692,.192,.666],129140:[.568,.079,1],129141:[.568,.079,.666],129142:[.579,.068,1],129143:[.579,.068,.666],129144:[.51,.01,1],129145:[.692,.192,.684],129146:[.51,.01,1],129147:[.692,.192,.684],129148:[.568,.085,1],129149:[.568,.084,.684],129150:[.585,.068,1],129151:[.584,.068,.684],129152:[.511,.011,1],129153:[.692,.192,.676],129154:[.511,.011,1],129155:[.692,.192,.676],129156:[.568,.092,1],129157:[.568,.092,.676],129158:[.592,.068,1],129159:[.591,.068,.676,{ic:.003}],129168:[.362,-.142,.324],129169:[.35,-.148,.324],129170:[.362,-.138,.324],129171:[.352,-.15,.324],129172:[.452,-.048,.438],129173:[.406,-.094,.438],129174:[.452,-.048,.438],129175:[.406,-.094,.438],129176:[.359,-.141,.971],129177:[.67,.17,.375],129178:[.359,-.141,.971],129179:[.67,.17,.375],129180:[.291,-.211,.72],129181:[.291,-.211,.48],129182:[.291,-.211,.36],129183:[.291,-.211,.24],129184:[.492,.078,1.026],129185:[.492,.078,1.026],129186:[.492,.078,1.026],129187:[.492,.078,1.026],129188:[.501,.05,1.053],129189:[.501,.058,1.053],129190:[.492,.048,1.061],129191:[.492,.048,1.061],129192:[.492,.078,1.026],129193:[.492,.078,1.026],129194:[.492,.078,1.026],129195:[.492,.078,1.026],129196:[.341,-.105,.654],129197:[.341,-.105,.474],129200:[.714,.204,1],129201:[.757,.144,.618,{ic:.044}]}}},"NCM"),{},["MJX-NCM-MAR"]);MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/marrows","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/monospace.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const s=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","monospace",s({M:{normal:{120432:[.623,0,.525],120433:[.611,0,.525,{sk:-.073}],120434:[.622,.011,.525,{sk:.1}],120435:[.611,0,.525,{sk:-.098}],120436:[.611,0,.525],120437:[.611,0,.525],120438:[.622,.011,.525,{sk:.072}],120439:[.611,0,.525],120440:[.611,0,.525],120441:[.611,.011,.525,{sk:.085}],120442:[.611,0,.525],120443:[.611,0,.525,{sk:-.11}],120444:[.611,0,.525],120445:[.611,0,.525],120446:[.622,.011,.525],120447:[.611,0,.525,{sk:-.07}],120448:[.622,.139,.525],120449:[.611,.011,.525,{sk:-.097}],120450:[.622,.011,.525,{sk:.046}],120451:[.611,0,.525],120452:[.611,.011,.525],120453:[.611,.008,.525],120454:[.611,.008,.525],120455:[.611,0,.525],120456:[.611,0,.525],120457:[.611,0,.525],120458:[.44,.006,.525,{sk:-.048}],120459:[.611,.006,.525,{sk:-.172}],120460:[.44,.006,.525,{sk:.043}],120461:[.611,.006,.525,{sk:.088}],120462:[.44,.006,.525],120463:[.617,0,.525,{sk:.077}],120464:[.442,.229,.525,{sk:.07}],120465:[.611,0,.525,{sk:-.172}],120466:[.605,0,.525],120467:[.605,.228,.525,{sk:.057}],120468:[.611,0,.525,{sk:-.169}],120469:[.611,0,.525,{sk:-.085}],120470:[.437,0,.525,{sk:-.052}],120471:[.437,0,.525,{sk:-.071}],120472:[.44,.006,.525],120473:[.437,.222,.525,{sk:-.074}],120474:[.437,.222,.525,{ic:.012,sk:.044}],120475:[.437,0,.525,{sk:-.018}],120476:[.44,.006,.525,{sk:.04}],120477:[.554,.006,.525,{sk:-.074}],120478:[.431,.006,.525,{sk:-.043}],120479:[.431,.004,.525],120480:[.431,.004,.525],120481:[.431,0,.525],120482:[.431,.228,.525],120483:[.431,0,.525],120822:[.622,.011,.525],120823:[.622,0,.525,{sk:.015}],120824:[.622,0,.525,{sk:-.011}],120825:[.622,.011,.525,{sk:-.015}],120826:[.623,0,.525,{sk:.06}],120827:[.611,.011,.525],120828:[.622,.011,.525,{sk:.054}],120829:[.627,.011,.525,{sk:-.184}],120830:[.622,.011,.525],120831:[.622,.011,.525]},monospace:{305:[.431,0,.525],567:[.431,.228,.525],32:[0,0,.525],33:[.622,0,.525],34:[.622,-.328,.525],35:[.611,0,.525],36:[.694,.083,.525],37:[.694,.083,.525],38:[.622,.011,.525],39:[.622,-.328,.525],40:[.694,.082,.525],41:[.694,.082,.525],42:[.521,-.09,.525],43:[.531,-.081,.525],44:[.125,.139,.525],45:[.341,-.271,.525],46:[.125,0,.525],47:[.694,.083,.525],58:[.431,0,.525],59:[.431,.139,.525],60:[.556,-.056,.525],61:[.417,-.195,.525],62:[.556,-.056,.525],63:[.617,0,.525],64:[.617,.006,.525],91:[.694,.083,.525],92:[.694,.083,.525],93:[.694,.083,.525],94:[.626,-.479,.525],95:[-.097,.167,.525],96:[.622,-.488,.525],123:[.694,.083,.525],124:[.694,.083,.525],125:[.694,.083,.525],126:[.366,-.246,.525],160:[0,0,.525],163:[.611,.011,.525],165:[.611,0,.525],167:[.622,.122,.525],168:[.6,-.51,.525],172:[.417,-.195,.525],175:[.577,-.514,.525],176:[.611,-.319,.525],177:[.45,0,.525],180:[.622,-.488,.525],181:[.43,.222,.525],182:[.694,.194,.525],183:[.368,-.243,.525],215:[.475,-.137,.525],240:[.611,.006,.525],247:[.58,-.031,.525],710:[.624,-.487,.525],711:[.623,-.486,.525],728:[.612,-.499,.525],729:[.605,-.505,.525],730:[.651,-.471,.525],732:[.615,-.495,.525],768:[.622,-.488,.272],769:[.622,-.488,.272],770:[.624,-.487,0,{dx:.262}],771:[.615,-.495,0,{dx:.262}],772:[.587,-.524,0,{dx:.262}],773:[.622,-.552,.525],774:[.612,-.499,0,{dx:.262}],775:[.605,-.505,0,{dx:.262}],776:[.6,-.51,0,{dx:.263}],778:[.651,-.471,.525],780:[.623,-.486,0,{dx:.262}],913:[.623,0,.525],914:[.611,0,.525],915:[.611,0,.525],916:[.623,0,.525],917:[.611,0,.525],918:[.611,0,.525],919:[.611,0,.525],920:[.622,.011,.525],921:[.611,0,.525],922:[.611,0,.525],923:[.623,0,.525],924:[.611,0,.525],925:[.611,0,.525],926:[.611,0,.525],927:[.622,.011,.525],928:[.611,0,.525],929:[.611,0,.525],931:[.611,0,.525],932:[.611,0,.525],933:[.622,0,.525],934:[.611,0,.525],935:[.611,0,.525],936:[.611,0,.525],937:[.622,0,.525],945:[.436,.005,.525,{ic:.001}],946:[.644,.233,.525],947:[.436,.177,.525],948:[.634,.005,.525],949:[.442,.011,.525],950:[.65,.133,.525],951:[.442,.233,.525],952:[.644,.005,.525],953:[.436,.005,.525],954:[.444,.014,.525],955:[.641,.005,.525],956:[.441,.227,.525],957:[.439,.005,.525],958:[.65,.133,.525],959:[.436,.005,.525],960:[.43,.005,.525],961:[.436,.222,.525],962:[.436,.111,.525],963:[.436,.005,.525],964:[.43,.005,.525],965:[.441,.005,.525],966:[.442,.233,.525],967:[.437,.229,.525],968:[.65,.233,.525],969:[.441,.005,.525],977:[.644,.005,.525],978:[.622,0,.525],981:[.64,.233,.525],982:[.441,.005,.525],1008:[.452,.032,.525],1009:[.436,.222,.525],1012:[.622,.011,.525],1013:[.436,.005,.525],1014:[.436,.005,.525],8208:[.341,-.271,.525],8209:[.341,-.271,.525],8210:[.246,-.185,.525],8211:[.341,-.271,.525],8212:[.341,-.271,.525],8214:[.694,.083,.525],8216:[.681,-.372,.525],8217:[.611,-.302,.525],8220:[.622,-.328,.525],8221:[.622,-.328,.525],8224:[.705,.216,.525],8225:[.705,.205,.525],8230:[.125,0,.525],8260:[.626,.015,.525],8364:[.622,.011,.525],8486:[.622,0,.525],8487:[.612,.01,.525],8592:[.481,-.131,.525],8593:[.611,0,.525],8594:[.481,-.131,.525],8595:[.611,0,.525],8722:[.341,-.271,.525],8734:[.435,.004,.525]}}},"NCM"));MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/monospace","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/mshapes.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const c=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","mshapes",c({MSH:{normal:{128896:[.498,-.002,.356],128897:[.379,-.121,.356,{ic:.072}],128898:[.498,-.002,.356],128899:[.379,-.121,.356,{ic:.072}],128900:[.308,-.192,.278],128901:[.592,.092,.796],128902:[.592,.092,.796],128903:[.592,.092,.796],128904:[.592,.092,.796],128905:[.592,.092,.796],128906:[.592,.092,.778],128907:[.592,.092,.778],128908:[.337,-.161,.316],128909:[.367,-.131,.316],128910:[.686,.18,1.024],128911:[.586,.08,1.024],128912:[.586,.08,1.024],128913:[.586,.08,1.024],128914:[.586,.08,1.024],128915:[.586,.08,1.024],128916:[.586,.08,1.024],128917:[.586,.08,1.024],128918:[.586,.08,1.024],128919:[.344,-.155,.316],128920:[.372,-.125,.316],128921:[.415,-.084,.316,{ic:.007}],128922:[.714,.21,1.024],128923:[.714,.21,1.024],128924:[.714,.21,1.024],128925:[.356,-.142,.316],128926:[.371,-.124,.316],128927:[.414,-.084,.316],128928:[.715,.21,1.024],128929:[.583,.083,.778],128930:[.583,.083,.778],128931:[.583,.083,.778],128932:[.583,.083,.778],128933:[.583,.083,.778],128934:[.583,.083,.778],128935:[.583,.083,.778],128936:[.494,-.006,.778],128937:[.502,.045,.778],128938:[.507,.007,.778],128939:[.514,.014,.778],128940:[.521,.021,.778],128941:[.528,.028,.778],128942:[.535,.035,.778],128943:[.48,-.015,.5],128944:[.48,-.013,.5],128945:[.48,-.011,.5],128946:[.48,-.01,.5],128947:[.48,-.009,.5],128948:[.48,-.008,.5],128949:[.462,-.039,.5],128950:[.462,-.039,.5],128951:[.462,-.039,.5],128952:[.462,-.039,.5],128953:[.462,-.039,.5],128954:[.462,-.039,.5],128955:[.462,-.039,.5],128956:[.462,-.039,.5],128957:[.462,-.039,.5],128958:[.462,-.039,.5],128959:[.462,-.039,.5],128960:[.509,-.13,.5],128961:[.547,-.115,.5,{ic:.001}],128962:[.566,-.107,.5,{ic:.017}],128963:[.566,-.107,.5,{ic:.017}],128964:[.509,.029,.5,{ic:.019}],128965:[.547,.067,.5,{ic:.057}],128966:[.566,.086,.5,{ic:.076}],128967:[.566,.086,.5,{ic:.076}],128968:[.566,.086,.5,{ic:.076}],128969:[.527,.016,.62],128970:[.524,.013,.625],128971:[.586,.042,.64],128972:[.628,.084,.64],128973:[.628,.084,.64],128974:[.632,.047,.792],128975:[.674,.089,.792],128976:[.694,.109,.792],128977:[.694,.109,.792],128978:[.586,.042,.64],128979:[.628,.083,.64,{ic:.037}],128980:[.628,.083,.754],128981:[.445,-.055,.5],128982:[.445,-.055,.5],128983:[.445,-.055,.5],128984:[.445,-.055,.5],128992:[.592,.092,.796],128993:[.585,.099,.796],128994:[.625,.126,.796],128995:[.625,.126,.796],128996:[.592,.092,.796],128997:[.583,.083,.778],128998:[.583,.083,.778],128999:[.583,.083,.778],129e3:[.583,.083,.778],129001:[.583,.083,.778],129002:[.583,.083,.778],129003:[.583,.083,.778]}}},"NCM"),{},["MJX-NCM-MSH"]);MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/mshapes","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/script.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const s=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","script",s({S:{normal:{119964:[.674,.015,.855,{sk:.364}],8492:[.687,.015,.95,{sk:.324}],119966:[.687,.015,.797,{sk:.275}],119967:[.687,.015,.885,{sk:.285}],8496:[.687,.015,.75,{sk:.244}],8497:[.68,0,.919,{sk:.21}],119970:[.687,.015,.773,{sk:.237}],8459:[.687,.015,.997,{sk:.224}],8464:[.675,.015,.897,{sk:.26}],119973:[.674,.177,.802,{sk:.229}],119974:[.687,.015,1.009,{sk:.28}],8466:[.687,.015,.946,{sk:.349}],8499:[.674,.015,1.072,{sk:.326}],119977:[.687,.015,.97,{sk:.228}],119978:[.68,.015,.692,{sk:.172}],119979:[.687,.015,.91,{sk:.28}],119980:[.68,.038,.692,{sk:.146}],8475:[.687,.015,.944,{sk:.255}],119982:[.68,.015,.743,{sk:.183}],119983:[.687,.015,.912,{sk:.2}],119984:[.687,.015,.842,{sk:.15}],119985:[.687,.015,.932,{sk:.212}],119986:[.687,.015,1.078,{sk:.229}],119987:[.687,.015,.891,{sk:.165}],119988:[.687,.226,.926,{sk:.191}],119989:[.687,.015,.932,{sk:.144}],119990:[.441,.011,.819,{sk:.083}],119991:[.687,.012,.58,{sk:.197}],119992:[.441,.011,.662,{sk:.151}],119993:[.687,.011,.845,{sk:.359}],8495:[.441,.011,.627,{sk:.086}],119995:[.687,.209,.685,{sk:.239}],8458:[.441,.219,.738,{sk:.103}],119997:[.687,.011,.753,{sk:.136}],119998:[.653,.011,.496,{sk:.194}],119999:[.653,.219,.73,{sk:.311}],12e4:[.687,.011,.726,{sk:.144}],120001:[.687,.011,.579,{sk:.21}],120002:[.441,.011,1.038,{sk:.088}],120003:[.441,.011,.761,{sk:.098}],8500:[.441,.011,.697],120005:[.441,.209,.773,{sk:.1}],120006:[.441,.209,.78,{sk:.103}],120007:[.444,0,.58,{sk:.114}],120008:[.531,.011,.515,{sk:.111}],120009:[.658,.011,.551,{sk:.141}],120010:[.424,.011,.753,{sk:.054}],120011:[.441,.011,.618,{sk:.08}],120012:[.441,.011,.888,{sk:.119}],120013:[.441,.011,.752,{sk:.095}],120014:[.424,.219,.658,{sk:.095}],120015:[.478,.011,.691,{sk:.069}],8467:[.705,.012,.417,{sk:.102}],8472:[.453,.216,.636]},script:{}},SB:{normal:{120016:[.699,.021,.984,{sk:.37}],120017:[.699,.021,1.06,{sk:.268}],120018:[.699,.021,.912,{sk:.28}],120019:[.699,.021,.991,{sk:.243}],120020:[.699,.021,.826,{sk:.238}],120021:[.699,.021,1.042,{sk:.232}],120022:[.699,.021,.834,{sk:.237}],120023:[.699,.021,1.171,{sk:.288}],120024:[.699,.021,.997,{sk:.291}],120025:[.699,.224,.906,{sk:.237}],120026:[.699,.021,1.154,{sk:.349}],120027:[.699,.021,1.036,{sk:.374}],120028:[.699,.021,1.3,{sk:.35}],120029:[.699,.021,1.095,{sk:.28}],120030:[.699,.021,.809,{sk:.147}],120031:[.699,.021,1.025,{sk:.247}],120032:[.699,.052,.809,{sk:.147}],120033:[.699,.021,1.048,{sk:.234}],120034:[.699,.021,.816,{sk:.205}],120035:[.699,.021,1.03,{sk:.21}],120036:[.699,.021,.964,{sk:.15}],120037:[.699,.021,1.04,{sk:.262}],120038:[.699,.021,1.32,{sk:.289}],120039:[.699,.021,1.033,{sk:.15}],120040:[.699,.224,.989,{sk:.172}],120041:[.699,.021,.996,{sk:.179}],120042:[.462,.014,.942,{sk:.114}],120043:[.699,.014,.646,{sk:.198}],120044:[.462,.014,.764,{sk:.174}],120045:[.699,.014,.949,{sk:.369}],120046:[.462,.014,.726,{sk:.161}],120047:[.699,.205,.768,{sk:.229}],120048:[.462,.224,.819,{sk:.145}],120049:[.699,.014,.838,{sk:.139}],120050:[.698,.014,.558,{sk:.191}],120051:[.698,.223,.84,{sk:.34}],120052:[.699,.014,.81,{sk:.151}],120053:[.699,.014,.65,{sk:.201}],120054:[.462,.014,1.137,{sk:.12}],120055:[.462,.014,.851,{sk:.12}],120056:[.462,.014,.848,{sk:.148}],120057:[.462,.205,.885,{sk:.093}],120058:[.462,.205,.913,{sk:.104}],120059:[.462,0,.677,{sk:.126}],120060:[.557,.014,.562,{sk:.094}],120061:[.669,.014,.618,{sk:.169}],120062:[.45,.014,.842,{sk:.073}],120063:[.458,.014,.732,{sk:.099}],120064:[.458,.014,1.012,{sk:.147}],120065:[.462,.014,.82,{sk:.084}],120066:[.45,.224,.784,{sk:.114}],120067:[.493,.014,.782,{sk:.053}]},"bold-script":{}}},"NCM"));MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/script","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/dynamic/variants.js: -------------------------------------------------------------------------------- 1 | (()=>{"use strict";const t=MathJax._.output.chtml.DynamicFonts.AddFontIds;MathJax._.output.fonts["mathjax-newcm"].chtml_ts.MathJaxNewcmFont.dynamicSetup("","variants",t({VX:{"-tex-variant":{34:[.549,-.096,.647],39:[.549,-.096,.407],42:[.462,-.039,.5],96:[.549,-.096,.407],126:[.116,.002,.556,{ic:.001}],170:[.448,.143,.5,{c:"a\u0332"}],176:[.445,-.055,.5],178:[.666,0,.5,{sk:-.01}],179:[.666,.022,.5],185:[.666,0,.5],186:[.448,.143,.5,{c:"o\u0332"}],8212:[.278,-.256,.667],8289:[.64,.24,.96],8304:[.666,.022,.5],8305:[.657,0,.278],8308:[.677,0,.5,{sk:.103}],8309:[.666,.022,.5],8310:[.666,.022,.5,{sk:.068}],8311:[.676,.022,.5,{sk:-.147}],8312:[.666,.022,.5,{sk:.011}],8313:[.666,.022,.5],8314:[.583,.083,.778],8315:[.27,-.23,.778],8316:[.367,-.133,.778],8317:[.748,.248,.389],8318:[.748,.248,.389],8319:[.442,0,.556,{sk:.013}],8320:[.666,.022,.5],8321:[.666,0,.5],8322:[.666,0,.5,{sk:-.01}],8323:[.666,.022,.5],8324:[.677,0,.5,{sk:.103}],8325:[.666,.022,.5],8326:[.666,.022,.5,{sk:.068}],8327:[.676,.022,.5,{sk:-.147}],8328:[.666,.022,.5,{sk:.011}],8329:[.666,.022,.5],8330:[.583,.083,.778],8331:[.27,-.23,.778],8332:[.367,-.133,.778],8333:[.748,.248,.389],8334:[.748,.248,.389]}}},"NCM"),{},["MJX-NCM-VX"]);MathJax.loader&&MathJax.loader.checkVersion("[mathjax-newcm]/chtml/dynamic/variants","4.0.0","dynamic-font")})(); -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ab.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ab.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-abi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-abi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ai.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ai.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ar.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ar.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-arl.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-arl.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-b.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-b.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-be.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-be.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-bi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-bi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-br.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-br.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-brd.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-brd.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-brk.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-brk.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-c.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-c.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ch.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ch.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-chb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-chb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-chbi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-chbi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-chi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-chi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cy.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cy.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cybi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cybi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyss.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyss.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyssb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyssb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyssbi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyssbi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyssi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-cyssi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ds.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ds.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-dv.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-dv.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-em.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-em.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-f.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-f.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-fb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-fb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gk.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gk.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkbi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkbi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gki.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gki.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkss.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkss.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkssb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkssb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkssbi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkssbi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkssi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-gkssi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-he.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-he.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-heb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-heb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-hebi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-hebi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-hei.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-hei.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-i.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-i.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-li.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-li.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lib.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lib.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lo.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lo.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lr.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lr.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lt.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-lt.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-m.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-m.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-mar.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-mar.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-mi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-mi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ml.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ml.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-mm.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-mm.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-msh.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-msh.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-mx.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-mx.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-n.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-n.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ob.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ob.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-os.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-os.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ph.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ph.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phbi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phbi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phss.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phss.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phssb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phssb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phssbi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phssbi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phssi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-phssi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-pu.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-pu.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-pub.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-pub.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-pubi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-pubi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-pui.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-pui.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-rb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-rb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s3.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s3.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s4.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s4.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s5.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s5.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s6.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s6.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s7.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-s7.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sh.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sh.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-shb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-shb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-shbi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-shbi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-shi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-shi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-so.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-so.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ss.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ss.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssbi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssbi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssbix.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssbix.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssbx.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssbx.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssix.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssix.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sslb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sslb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssli.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssli.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sslib.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sslib.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sslr.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sslr.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssx.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ssx.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sy.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sy.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-syb.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-syb.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sybi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-sybi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-syi.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-syi.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-u.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-u.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ue.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-ue.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-v.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-v.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-vx.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-vx.woff2 -------------------------------------------------------------------------------- /assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-zero.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs50/jekyll-theme-cs50/04ed1d3133f43664224db485c808fd2667e6f844/assets/@mathjax/mathjax-newcm-font/chtml/woff2/mjx-ncm-zero.woff2 -------------------------------------------------------------------------------- /assets/@twemoji/api/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022–present Jason Sofonia & Justine De Caires 4 | Copyright (c) 2014–2021 Twitter 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /assets/bootstrap-table/LICENSE: -------------------------------------------------------------------------------- 1 | (The MIT License) 2 | 3 | Copyright (c) 2012-2019 Zhixin Wen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /assets/bootstrap/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2025 The Bootstrap Authors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /assets/instantsearch.js/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015-present Algolia, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /assets/intersection-observer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "intersection-observer", 3 | "version": "0.12.2", 4 | "description": "A polyfill for IntersectionObserver", 5 | "keywords": [ 6 | "Intersection", 7 | "Observer" 8 | ], 9 | "main": "intersection-observer.js", 10 | "author": { 11 | "name": "Philip Walton", 12 | "email": "philip@philipwalton.com", 13 | "url": "http://philipwalton.com" 14 | }, 15 | "license": "Apache-2.0", 16 | "repository": { 17 | "type": "git", 18 | "url": "https://github.com/GoogleChromeLabs/intersection-observer.git" 19 | }, 20 | "bugs": { 21 | "url": "https://github.com/GoogleChromeLabs/intersection-observer/issues" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /assets/jquery/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright OpenJS Foundation and other contributors, https://openjsf.org/ 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /assets/luxon/LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright 2019 JS Foundation and other contributors 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /assets/mermaid/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mermaid", 3 | "version": "11.11.0", 4 | "description": "Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.", 5 | "type": "module", 6 | "module": "./dist/mermaid.core.mjs", 7 | "types": "./dist/mermaid.d.ts", 8 | "exports": { 9 | ".": { 10 | "types": "./dist/mermaid.d.ts", 11 | "import": "./dist/mermaid.core.mjs", 12 | "default": "./dist/mermaid.core.mjs" 13 | }, 14 | "./*": "./*" 15 | }, 16 | "keywords": [ 17 | "diagram", 18 | "markdown", 19 | "flowchart", 20 | "sequence diagram", 21 | "gantt", 22 | "class diagram", 23 | "git graph", 24 | "mindmap", 25 | "packet diagram", 26 | "c4 diagram", 27 | "er diagram", 28 | "pie chart", 29 | "pie diagram", 30 | "quadrant chart", 31 | "requirement diagram", 32 | "graph" 33 | ], 34 | "repository": { 35 | "type": "git", 36 | "url": "https://github.com/mermaid-js/mermaid" 37 | }, 38 | "author": "Knut Sveidqvist", 39 | "license": "MIT", 40 | "standard": { 41 | "ignore": [ 42 | "**/parser/*.js", 43 | "dist/**/*.js", 44 | "cypress/**/*.js" 45 | ], 46 | "globals": [ 47 | "page" 48 | ] 49 | }, 50 | "dependencies": { 51 | "@braintree/sanitize-url": "^7.0.4", 52 | "@iconify/utils": "^3.0.1", 53 | "@types/d3": "^7.4.3", 54 | "cytoscape": "^3.29.3", 55 | "cytoscape-cose-bilkent": "^4.1.0", 56 | "cytoscape-fcose": "^2.2.0", 57 | "d3": "^7.9.0", 58 | "d3-sankey": "^0.12.3", 59 | "dagre-d3-es": "7.0.11", 60 | "dayjs": "^1.11.13", 61 | "dompurify": "^3.2.5", 62 | "katex": "^0.16.22", 63 | "khroma": "^2.1.0", 64 | "lodash-es": "^4.17.21", 65 | "marked": "^15.0.7", 66 | "roughjs": "^4.6.6", 67 | "stylis": "^4.3.6", 68 | "ts-dedent": "^2.2.0", 69 | "uuid": "^11.1.0", 70 | "@mermaid-js/parser": "^0.6.2" 71 | }, 72 | "devDependencies": { 73 | "@adobe/jsonschema2md": "^8.0.2", 74 | "@iconify/types": "^2.0.0", 75 | "@types/cytoscape": "^3.21.9", 76 | "@types/cytoscape-fcose": "^2.2.4", 77 | "@types/d3-sankey": "^0.12.4", 78 | "@types/d3-scale": "^4.0.9", 79 | "@types/d3-scale-chromatic": "^3.1.0", 80 | "@types/d3-selection": "^3.0.11", 81 | "@types/d3-shape": "^3.1.7", 82 | "@types/jsdom": "^21.1.7", 83 | "@types/katex": "^0.16.7", 84 | "@types/lodash-es": "^4.17.12", 85 | "@types/micromatch": "^4.0.9", 86 | "@types/stylis": "^4.2.7", 87 | "@types/uuid": "^10.0.0", 88 | "ajv": "^8.17.1", 89 | "canvas": "^3.1.0", 90 | "chokidar": "3.6.0", 91 | "concurrently": "^9.1.2", 92 | "csstree-validator": "^4.0.1", 93 | "globby": "^14.0.2", 94 | "jison": "^0.4.18", 95 | "js-base64": "^3.7.7", 96 | "jsdom": "^26.1.0", 97 | "json-schema-to-typescript": "^15.0.4", 98 | "micromatch": "^4.0.8", 99 | "path-browserify": "^1.0.1", 100 | "prettier": "^3.5.2", 101 | "remark": "^15.0.1", 102 | "remark-frontmatter": "^5.0.0", 103 | "remark-gfm": "^4.0.1", 104 | "rimraf": "^6.0.1", 105 | "start-server-and-test": "^2.0.10", 106 | "type-fest": "^4.35.0", 107 | "typedoc": "^0.28.9", 108 | "typedoc-plugin-markdown": "^4.8.0", 109 | "typescript": "~5.7.3", 110 | "unist-util-flatmap": "^1.0.0", 111 | "unist-util-visit": "^5.0.0", 112 | "vitepress": "^1.0.2", 113 | "vitepress-plugin-search": "1.0.4-alpha.22" 114 | }, 115 | "files": [ 116 | "dist/", 117 | "README.md" 118 | ], 119 | "publishConfig": { 120 | "access": "public" 121 | }, 122 | "scripts": { 123 | "clean": "rimraf dist", 124 | "dev": "pnpm -w dev", 125 | "docs:code": "typedoc src/defaultConfig.ts src/config.ts src/mermaid.ts && prettier --write ./src/docs/config/setup", 126 | "docs:build": "rimraf ../../docs && pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts", 127 | "docs:verify": "pnpm docs:code && pnpm docs:spellcheck && tsx scripts/docs.cli.mts --verify", 128 | "docs:pre:vitepress": "pnpm --filter ./src/docs prefetch && rimraf src/vitepress && pnpm docs:code && tsx scripts/docs.cli.mts --vitepress && pnpm --filter ./src/vitepress install --no-frozen-lockfile --ignore-scripts", 129 | "docs:build:vitepress": "pnpm docs:pre:vitepress && (cd src/vitepress && pnpm run build) && cpy --flat src/docs/landing/ ./src/vitepress/.vitepress/dist/landing", 130 | "docs:dev": "pnpm docs:pre:vitepress && concurrently \"pnpm --filter ./src/vitepress dev\" \"tsx scripts/docs.cli.mts --watch --vitepress\"", 131 | "docs:dev:docker": "pnpm docs:pre:vitepress && concurrently \"pnpm --filter ./src/vitepress dev:docker\" \"tsx scripts/docs.cli.mts --watch --vitepress\"", 132 | "docs:serve": "pnpm docs:build:vitepress && vitepress serve src/vitepress", 133 | "docs:spellcheck": "cspell \"src/docs/**/*.md\"", 134 | "docs:release-version": "tsx scripts/update-release-version.mts", 135 | "docs:verify-version": "tsx scripts/update-release-version.mts --verify", 136 | "types:build-config": "tsx scripts/create-types-from-json-schema.mts", 137 | "types:verify-config": "tsx scripts/create-types-from-json-schema.mts --verify", 138 | "checkCircle": "npx madge --circular ./src" 139 | } 140 | } -------------------------------------------------------------------------------- /assets/page.js: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | /* theme */ 5 | -------------------------------------------------------------------------------- /assets/page.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @import "page.scss"; 5 | -------------------------------------------------------------------------------- /assets/reset-min.css: -------------------------------------------------------------------------------- 1 | .ais-Breadcrumb-list,.ais-CurrentRefinements-list,.ais-HierarchicalMenu-list,.ais-Hits-list,.ais-InfiniteHits-list,.ais-InfiniteResults-list,.ais-Menu-list,.ais-NumericMenu-list,.ais-Pagination-list,.ais-RatingMenu-list,.ais-RefinementList-list,.ais-Results-list,.ais-ToggleRefinement-list{margin:0;padding:0;list-style:none}.ais-ClearRefinements-button,.ais-CurrentRefinements-delete,.ais-CurrentRefinements-reset,.ais-GeoSearch-redo,.ais-GeoSearch-reset,.ais-HierarchicalMenu-showMore,.ais-InfiniteHits-loadMore,.ais-InfiniteHits-loadPrevious,.ais-InfiniteResults-loadMore,.ais-Menu-showMore,.ais-RangeInput-submit,.ais-RefinementList-showMore,.ais-SearchBox-reset,.ais-SearchBox-submit,.ais-VoiceSearch-button{padding:0;overflow:visible;font:inherit;line-height:normal;color:inherit;background:none;border:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ais-ClearRefinements-button::-moz-focus-inner,.ais-CurrentRefinements-delete::-moz-focus-inner,.ais-CurrentRefinements-reset::-moz-focus-inner,.ais-GeoSearch-redo::-moz-focus-inner,.ais-GeoSearch-reset::-moz-focus-inner,.ais-HierarchicalMenu-showMore::-moz-focus-inner,.ais-InfiniteHits-loadMore::-moz-focus-inner,.ais-InfiniteHits-loadPrevious::-moz-focus-inner,.ais-InfiniteResults-loadMore::-moz-focus-inner,.ais-Menu-showMore::-moz-focus-inner,.ais-RangeInput-submit::-moz-focus-inner,.ais-RefinementList-showMore::-moz-focus-inner,.ais-SearchBox-reset::-moz-focus-inner,.ais-SearchBox-submit::-moz-focus-inner,.ais-VoiceSearch-button::-moz-focus-inner{padding:0;border:0}.ais-ClearRefinements-button[disabled],.ais-CurrentRefinements-delete[disabled],.ais-CurrentRefinements-reset[disabled],.ais-GeoSearch-redo[disabled],.ais-GeoSearch-reset[disabled],.ais-HierarchicalMenu-showMore[disabled],.ais-InfiniteHits-loadMore[disabled],.ais-InfiniteHits-loadPrevious[disabled],.ais-InfiniteResults-loadMore[disabled],.ais-Menu-showMore[disabled],.ais-RangeInput-submit[disabled],.ais-RefinementList-showMore[disabled],.ais-SearchBox-reset[disabled],.ais-SearchBox-submit[disabled],.ais-VoiceSearch-button[disabled]{cursor:default}.ais-Breadcrumb-item,.ais-Breadcrumb-list,.ais-Pagination-list,.ais-PoweredBy,.ais-RangeInput-form,.ais-RatingMenu-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ais-GeoSearch,.ais-GeoSearch-map{height:100%}.ais-HierarchicalMenu-list .ais-HierarchicalMenu-list{margin-left:1em}.ais-PoweredBy-logo{display:block;height:1.2em;width:auto}.ais-RatingMenu-starIcon{display:block;width:20px;height:20px}.ais-SearchBox-input::-ms-clear,.ais-SearchBox-input::-ms-reveal{display:none;width:0;height:0}.ais-SearchBox-input::-webkit-search-cancel-button,.ais-SearchBox-input::-webkit-search-decoration,.ais-SearchBox-input::-webkit-search-results-button,.ais-SearchBox-input::-webkit-search-results-decoration{display:none}.ais-RangeSlider .rheostat{overflow:visible;margin-top:40px;margin-bottom:40px}.ais-RangeSlider .rheostat-background{height:6px;top:0;width:100%}.ais-RangeSlider .rheostat-handle{margin-left:-12px;top:-7px}.ais-RangeSlider .rheostat-background{position:relative;background-color:#fff;border:1px solid #aaa}.ais-RangeSlider .rheostat-progress{position:absolute;top:1px;height:4px;background-color:#333}.rheostat-handle{position:relative;z-index:1;width:20px;height:20px;background-color:#fff;border:1px solid #333;border-radius:50%;cursor:-webkit-grab;cursor:grab}.rheostat-marker{margin-left:-1px;position:absolute;width:1px;height:5px;background-color:#aaa}.rheostat-marker--large{height:9px}.rheostat-value{padding-top:15px}.rheostat-tooltip,.rheostat-value{margin-left:50%;position:absolute;text-align:center;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.rheostat-tooltip{top:-22px} -------------------------------------------------------------------------------- /assets/vanilla-lazyload/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2015 Andrea Verlicchi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /jekyll-theme-cs50.gemspec: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require File.expand_path("../lib/jekyll-theme-cs50/constants", __FILE__) 4 | 5 | Gem::Specification.new do |spec| 6 | 7 | spec.authors = ["CS50"] 8 | spec.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r!^(_layouts|_includes|_sass|assets|lib|node_modules)/|LICENSE.txt$!i) } 9 | spec.homepage = "https://cs50.harvard.edu/" 10 | spec.license = "MIT" 11 | spec.name = "jekyll-theme-cs50" 12 | spec.summary = "This is CS50's theme for Jekyll." 13 | spec.version = "1.1.0" 14 | 15 | spec.add_runtime_dependency "base64" 16 | spec.add_runtime_dependency "bigdecimal" 17 | spec.add_runtime_dependency "csv" 18 | spec.add_runtime_dependency "deep_merge", "1.2.2" 19 | spec.add_runtime_dependency "jekyll", "4.3.4" 20 | spec.add_runtime_dependency "jekyll-sass-converter", "2.2.0" # https://github.com/jekyll/jekyll-sass-converter#dropped-support-of-importing-files-with-the-same-filename-as-their-parent-file 21 | spec.add_runtime_dependency "logger" 22 | spec.add_runtime_dependency "sanitize", "6.1.3" 23 | 24 | CS50::PLUGINS.each do |gem, version| 25 | spec.add_runtime_dependency gem, version 26 | end 27 | 28 | end 29 | -------------------------------------------------------------------------------- /lib/jekyll-theme-cs50/constants.rb: -------------------------------------------------------------------------------- 1 | module CS50 2 | 3 | PLUGINS = { 4 | "jekyll-algolia" => "1.7.1", 5 | "jekyll-default-layout" => "0.1.5", 6 | "jekyll-optional-front-matter" => "0.3.2", 7 | "jekyll-redirect-from" => "0.16.0", 8 | "jekyll-titles-from-headings" => "0.5.3" 9 | }.freeze 10 | 11 | DEFAULTS = { 12 | "cs50" => { 13 | "local" => { 14 | "day" => "numeric", 15 | "hour" => "numeric", 16 | "minute" => "numeric", 17 | "month" => "long", 18 | "timeZoneName" => "short", 19 | "weekday" => "long", 20 | "year" => "numeric" 21 | }, 22 | "locale" => "en", 23 | "tz" => "America/New_York" 24 | }, 25 | "exclude" => [ 26 | "Gemfile", 27 | "Gemfile.lock", 28 | "vendor" 29 | ], 30 | "include" => [ 31 | "license.md" # For OCW 32 | ], 33 | "optional_front_matter" => { 34 | "remove_originals" => true 35 | }, 36 | "plugins" => CS50::PLUGINS.keys 37 | }.freeze 38 | 39 | OVERRIDES = { 40 | "kramdown" => { 41 | "gfm_quirks" => "paragraph_end", 42 | "hard_wrap" => false, 43 | "input" => "GFM", 44 | "math_engine" => "mathjax", 45 | "syntax_highlighter" => "rouge", 46 | "template" => "" 47 | }, 48 | "markdown" => "kramdown", 49 | "permalink" => "pretty", 50 | "redirect_from" => { 51 | "json" => false 52 | }, 53 | "sass" => { 54 | "style" => "compressed" 55 | }, 56 | "theme" => "jekyll-theme-cs50" 57 | }.freeze 58 | 59 | end 60 | -------------------------------------------------------------------------------- /lib/liquid-tag-parser.rb: -------------------------------------------------------------------------------- 1 | # Avoids `cannot load such file -- liquid-tag-parser` 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "algoliasearch": "5.37.0", 4 | "bootstrap": "5.3.8", 5 | "bootstrap-table": "1.24.2", 6 | "@fortawesome/fontawesome-free": "7.0.1", 7 | "@iframe-resizer/parent": "5.5.6", 8 | "instantsearch.js": "4.80.0", 9 | "intersection-observer": "0.12.2", 10 | "jquery": "3.7.1", 11 | "luxon": "3.7.2", 12 | "mathjax": "4.0.0", 13 | "@mathjax/mathjax-newcm-font": "4.0.0", 14 | "mermaid": "11.11.0", 15 | "@twemoji/api": "16.0.1", 16 | "vanilla-lazyload": "19.1.3" 17 | }, 18 | "scripts": { 19 | "install": "cp -r node_modules/algoliasearch node_modules/bootstrap node_modules/bootstrap-table node_modules/@fortawesome node_modules/@iframe-resizer node_modules/instantsearch.js node_modules/intersection-observer node_modules/jquery node_modules/luxon node_modules/mathjax node_modules/@mathjax node_modules/mermaid node_modules/@twemoji node_modules/vanilla-lazyload assets/ && wget https://scratchblocks.github.io/js/scratchblocks-v3.6.4-min.js -O assets/scratchblocks.min.js && wget https://scratchblocks.github.io/js/scratchblocks-v3.6.4-min.js.map -O assets/scratchblocks.min.js.map && cp -r node_modules/bootstrap _sass/ && pygmentize -S default -f html -a .highlight > _sass/default.scss && pygmentize -S github-dark -f html -a .highlight > _sass/github-dark.scss", 20 | "preinstall": "rm -rf _sass/_default.scss _sass/bootstrap _sass/github-dark.scss assets/algoliasearch assets/bootstrap assets/bootstrap-table assets/@fortawesome assets/@iframe-resizer assets/instantsearch.js assets/intersection-observer assets/jquery assets/luxon assets/mathjax assets/@mathjax assets/mermaid assets/@twemoji assets/vanilla-lazyload assets/scratchblocks.min.js assets/scratchblocks.min.js.map", 21 | "postinstall": "rm -rf node_modules" 22 | } 23 | } 24 | --------------------------------------------------------------------------------