From cfc422b30d0fcffa908011d304d1ab3e916f3f08 Mon Sep 17 00:00:00 2001 From: DeathByDenim Date: Fri, 26 May 2023 11:30:43 -0400 Subject: [PATCH] First website draft --- _config.yml | 20 + _data/events.yml | 99 + _data/games.yml | 118 ++ _includes/event.html | 29 + _includes/nav.html | 28 + _layouts/default.html | 18 + _layouts/help.html | 15 + _layouts/post.html | 8 + _posts/2023-05-24-onFOSS-Next-Gen.md | 47 + _sass/base.scss | 71 + _sass/bootstrap/_accordion.scss | 149 ++ _sass/bootstrap/_alert.scss | 71 + _sass/bootstrap/_badge.scss | 38 + _sass/bootstrap/_breadcrumb.scss | 40 + _sass/bootstrap/_button-group.scss | 142 ++ _sass/bootstrap/_buttons.scss | 207 +++ _sass/bootstrap/_card.scss | 234 +++ _sass/bootstrap/_carousel.scss | 226 +++ _sass/bootstrap/_close.scss | 40 + _sass/bootstrap/_containers.scss | 41 + _sass/bootstrap/_dropdown.scss | 249 +++ _sass/bootstrap/_forms.scss | 9 + _sass/bootstrap/_functions.scss | 302 +++ _sass/bootstrap/_grid.scss | 33 + _sass/bootstrap/_helpers.scss | 10 + _sass/bootstrap/_images.scss | 42 + _sass/bootstrap/_list-group.scss | 192 ++ _sass/bootstrap/_maps.scss | 54 + _sass/bootstrap/_mixins.scss | 43 + _sass/bootstrap/_modal.scss | 237 +++ _sass/bootstrap/_nav.scss | 172 ++ _sass/bootstrap/_navbar.scss | 278 +++ _sass/bootstrap/_offcanvas.scss | 144 ++ _sass/bootstrap/_pagination.scss | 109 ++ _sass/bootstrap/_placeholders.scss | 51 + _sass/bootstrap/_popover.scss | 196 ++ _sass/bootstrap/_progress.scss | 59 + _sass/bootstrap/_reboot.scss | 610 ++++++ _sass/bootstrap/_root.scss | 73 + _sass/bootstrap/_spinners.scss | 85 + _sass/bootstrap/_tables.scss | 164 ++ _sass/bootstrap/_toasts.scss | 73 + _sass/bootstrap/_tooltip.scss | 120 ++ _sass/bootstrap/_transitions.scss | 27 + _sass/bootstrap/_type.scss | 106 ++ _sass/bootstrap/_utilities.scss | 647 +++++++ _sass/bootstrap/_variables.scss | 1634 +++++++++++++++++ _sass/bootstrap/bootstrap-grid.scss | 64 + _sass/bootstrap/bootstrap-reboot.scss | 9 + _sass/bootstrap/bootstrap-utilities.scss | 18 + _sass/bootstrap/bootstrap.scss | 51 + _sass/bootstrap/forms/_floating-labels.scss | 75 + _sass/bootstrap/forms/_form-check.scss | 175 ++ _sass/bootstrap/forms/_form-control.scss | 194 ++ _sass/bootstrap/forms/_form-range.scss | 91 + _sass/bootstrap/forms/_form-select.scss | 71 + _sass/bootstrap/forms/_form-text.scss | 11 + _sass/bootstrap/forms/_input-group.scss | 132 ++ _sass/bootstrap/forms/_labels.scss | 36 + _sass/bootstrap/forms/_validation.scss | 12 + _sass/bootstrap/helpers/_clearfix.scss | 3 + _sass/bootstrap/helpers/_color-bg.scss | 10 + _sass/bootstrap/helpers/_colored-links.scss | 12 + _sass/bootstrap/helpers/_position.scss | 36 + _sass/bootstrap/helpers/_ratio.scss | 26 + _sass/bootstrap/helpers/_stacks.scss | 15 + _sass/bootstrap/helpers/_stretched-link.scss | 15 + _sass/bootstrap/helpers/_text-truncation.scss | 7 + _sass/bootstrap/helpers/_visually-hidden.scss | 8 + _sass/bootstrap/helpers/_vr.scss | 8 + _sass/bootstrap/mixins/_alert.scss | 15 + _sass/bootstrap/mixins/_backdrop.scss | 14 + _sass/bootstrap/mixins/_banner.scss | 9 + _sass/bootstrap/mixins/_border-radius.scss | 78 + _sass/bootstrap/mixins/_box-shadow.scss | 18 + _sass/bootstrap/mixins/_breakpoints.scss | 127 ++ _sass/bootstrap/mixins/_buttons.scss | 70 + _sass/bootstrap/mixins/_caret.scss | 64 + _sass/bootstrap/mixins/_clearfix.scss | 9 + _sass/bootstrap/mixins/_color-scheme.scss | 7 + _sass/bootstrap/mixins/_container.scss | 11 + _sass/bootstrap/mixins/_deprecate.scss | 10 + _sass/bootstrap/mixins/_forms.scss | 152 ++ _sass/bootstrap/mixins/_gradients.scss | 47 + _sass/bootstrap/mixins/_grid.scss | 151 ++ _sass/bootstrap/mixins/_image.scss | 16 + _sass/bootstrap/mixins/_list-group.scss | 24 + _sass/bootstrap/mixins/_lists.scss | 7 + _sass/bootstrap/mixins/_pagination.scss | 10 + _sass/bootstrap/mixins/_reset-text.scss | 17 + _sass/bootstrap/mixins/_resize.scss | 6 + _sass/bootstrap/mixins/_table-variants.scss | 24 + _sass/bootstrap/mixins/_text-truncate.scss | 8 + _sass/bootstrap/mixins/_transition.scss | 26 + _sass/bootstrap/mixins/_utilities.scss | 97 + _sass/bootstrap/mixins/_visually-hidden.scss | 29 + _sass/bootstrap/scss/_accordion.scss | 149 ++ _sass/bootstrap/scss/_alert.scss | 71 + _sass/bootstrap/scss/_badge.scss | 38 + _sass/bootstrap/scss/_breadcrumb.scss | 40 + _sass/bootstrap/scss/_button-group.scss | 142 ++ _sass/bootstrap/scss/_buttons.scss | 207 +++ _sass/bootstrap/scss/_card.scss | 234 +++ _sass/bootstrap/scss/_carousel.scss | 226 +++ _sass/bootstrap/scss/_close.scss | 40 + _sass/bootstrap/scss/_containers.scss | 41 + _sass/bootstrap/scss/_dropdown.scss | 249 +++ _sass/bootstrap/scss/_forms.scss | 9 + _sass/bootstrap/scss/_functions.scss | 302 +++ _sass/bootstrap/scss/_grid.scss | 33 + _sass/bootstrap/scss/_helpers.scss | 10 + _sass/bootstrap/scss/_images.scss | 42 + _sass/bootstrap/scss/_list-group.scss | 192 ++ _sass/bootstrap/scss/_maps.scss | 54 + _sass/bootstrap/scss/_mixins.scss | 43 + _sass/bootstrap/scss/_modal.scss | 237 +++ _sass/bootstrap/scss/_nav.scss | 172 ++ _sass/bootstrap/scss/_navbar.scss | 278 +++ _sass/bootstrap/scss/_offcanvas.scss | 144 ++ _sass/bootstrap/scss/_pagination.scss | 109 ++ _sass/bootstrap/scss/_placeholders.scss | 51 + _sass/bootstrap/scss/_popover.scss | 196 ++ _sass/bootstrap/scss/_progress.scss | 59 + _sass/bootstrap/scss/_reboot.scss | 610 ++++++ _sass/bootstrap/scss/_root.scss | 73 + _sass/bootstrap/scss/_spinners.scss | 85 + _sass/bootstrap/scss/_tables.scss | 164 ++ _sass/bootstrap/scss/_toasts.scss | 73 + _sass/bootstrap/scss/_tooltip.scss | 120 ++ _sass/bootstrap/scss/_transitions.scss | 27 + _sass/bootstrap/scss/_type.scss | 106 ++ _sass/bootstrap/scss/_utilities.scss | 647 +++++++ _sass/bootstrap/scss/_variables.scss | 1634 +++++++++++++++++ _sass/bootstrap/scss/bootstrap-grid.scss | 64 + _sass/bootstrap/scss/bootstrap-reboot.scss | 9 + _sass/bootstrap/scss/bootstrap-utilities.scss | 18 + _sass/bootstrap/scss/bootstrap.scss | 51 + .../scss/forms/_floating-labels.scss | 75 + _sass/bootstrap/scss/forms/_form-check.scss | 175 ++ _sass/bootstrap/scss/forms/_form-control.scss | 194 ++ _sass/bootstrap/scss/forms/_form-range.scss | 91 + _sass/bootstrap/scss/forms/_form-select.scss | 71 + _sass/bootstrap/scss/forms/_form-text.scss | 11 + _sass/bootstrap/scss/forms/_input-group.scss | 132 ++ _sass/bootstrap/scss/forms/_labels.scss | 36 + _sass/bootstrap/scss/forms/_validation.scss | 12 + _sass/bootstrap/scss/helpers/_clearfix.scss | 3 + _sass/bootstrap/scss/helpers/_color-bg.scss | 10 + .../scss/helpers/_colored-links.scss | 12 + _sass/bootstrap/scss/helpers/_position.scss | 36 + _sass/bootstrap/scss/helpers/_ratio.scss | 26 + _sass/bootstrap/scss/helpers/_stacks.scss | 15 + .../scss/helpers/_stretched-link.scss | 15 + .../scss/helpers/_text-truncation.scss | 7 + .../scss/helpers/_visually-hidden.scss | 8 + _sass/bootstrap/scss/helpers/_vr.scss | 8 + _sass/bootstrap/scss/mixins/_alert.scss | 15 + _sass/bootstrap/scss/mixins/_backdrop.scss | 14 + _sass/bootstrap/scss/mixins/_banner.scss | 9 + .../bootstrap/scss/mixins/_border-radius.scss | 78 + _sass/bootstrap/scss/mixins/_box-shadow.scss | 18 + _sass/bootstrap/scss/mixins/_breakpoints.scss | 127 ++ _sass/bootstrap/scss/mixins/_buttons.scss | 70 + _sass/bootstrap/scss/mixins/_caret.scss | 64 + _sass/bootstrap/scss/mixins/_clearfix.scss | 9 + .../bootstrap/scss/mixins/_color-scheme.scss | 7 + _sass/bootstrap/scss/mixins/_container.scss | 11 + _sass/bootstrap/scss/mixins/_deprecate.scss | 10 + _sass/bootstrap/scss/mixins/_forms.scss | 152 ++ _sass/bootstrap/scss/mixins/_gradients.scss | 47 + _sass/bootstrap/scss/mixins/_grid.scss | 151 ++ _sass/bootstrap/scss/mixins/_image.scss | 16 + _sass/bootstrap/scss/mixins/_list-group.scss | 24 + _sass/bootstrap/scss/mixins/_lists.scss | 7 + _sass/bootstrap/scss/mixins/_pagination.scss | 10 + _sass/bootstrap/scss/mixins/_reset-text.scss | 17 + _sass/bootstrap/scss/mixins/_resize.scss | 6 + .../scss/mixins/_table-variants.scss | 24 + .../bootstrap/scss/mixins/_text-truncate.scss | 8 + _sass/bootstrap/scss/mixins/_transition.scss | 26 + _sass/bootstrap/scss/mixins/_utilities.scss | 97 + .../scss/mixins/_visually-hidden.scss | 29 + _sass/bootstrap/scss/utilities/_api.scss | 47 + _sass/bootstrap/utilities/_api.scss | 47 + assets/css/help.css | 15 + assets/css/main.scss | 5 + assets/img/2023-05-24-planned-structure.svg | 456 +++++ assets/img/armagetron.png | Bin 0 -> 63793 bytes assets/img/bzflag.png | Bin 0 -> 123769 bytes assets/img/element_interface.png | Bin 0 -> 46498 bytes assets/img/hedgewars.png | Bin 0 -> 89289 bytes assets/img/help_bzflag.png | Bin 0 -> 208648 bytes assets/img/help_hedgewars.png | Bin 0 -> 37420 bytes assets/img/help_mindustry.png | Bin 0 -> 100600 bytes assets/img/help_minetest.png | Bin 0 -> 26750 bytes assets/img/help_openhv.png | Bin 0 -> 63127 bytes assets/img/help_openspades.png | Bin 0 -> 97536 bytes assets/img/help_shatteredparadise.png | Bin 0 -> 159565 bytes assets/img/help_supertuxkart.png | Bin 0 -> 62813 bytes assets/img/help_teeworlds_name.png | Bin 0 -> 158862 bytes assets/img/help_teeworlds_server.png | Bin 0 -> 72364 bytes assets/img/help_ufoai.png | Bin 0 -> 108610 bytes assets/img/help_ufoai_connect.png | Bin 0 -> 45955 bytes assets/img/help_unvanquished.png | Bin 0 -> 23170 bytes assets/img/help_xonotic.png | Bin 0 -> 168868 bytes assets/img/icon.svg | 93 + assets/img/lix.png | Bin 0 -> 16471 bytes assets/img/mindustry.png | Bin 0 -> 107819 bytes assets/img/minetest.png | Bin 0 -> 127084 bytes assets/img/movim_interface.png | Bin 0 -> 37806 bytes assets/img/movim_interface2.png | Bin 0 -> 24182 bytes assets/img/mumble_interface.png | Bin 0 -> 46522 bytes assets/img/odamex.png | Bin 0 -> 159042 bytes assets/img/openhv.png | Bin 0 -> 166280 bytes assets/img/opensoldat.png | Bin 0 -> 97173 bytes assets/img/openspades.png | Bin 0 -> 66820 bytes assets/img/shatteredparadise.png | Bin 0 -> 194467 bytes assets/img/supertuxkart.png | Bin 0 -> 137722 bytes assets/img/supertuxparty.png | Bin 0 -> 119535 bytes assets/img/teeworlds.png | Bin 0 -> 51799 bytes assets/img/ufoai.png | Bin 0 -> 167275 bytes assets/img/unvanquished.png | Bin 0 -> 129022 bytes assets/img/xonotic.png | Bin 0 -> 179091 bytes assets/js/terminalcolors.js | 117 ++ help.html | 91 + help_armagetron.html | 19 + help_bzflag.html | 18 + help_hedgewars.html | 34 + help_lix.html | 17 + help_mindustry.html | 22 + help_minetest.html | 19 + help_odamex.html | 17 + help_openhv.html | 30 + help_opensoldat.html | 20 + help_openspades.html | 53 + help_shatteredparadise.html | 30 + help_supertuxkart.html | 28 + help_supertuxparty.html | 4 + help_teeworlds.html | 17 + help_ufoai.html | 25 + help_unvanquished.html | 20 + help_xonotic.html | 28 + index.html | 62 + news.html | 21 + resources.html | 32 + schedule.html | 18 + tournament.html | 52 + 247 files changed, 19974 insertions(+) create mode 100644 _config.yml create mode 100644 _data/events.yml create mode 100644 _data/games.yml create mode 100644 _includes/event.html create mode 100644 _includes/nav.html create mode 100644 _layouts/default.html create mode 100644 _layouts/help.html create mode 100644 _layouts/post.html create mode 100644 _posts/2023-05-24-onFOSS-Next-Gen.md create mode 100644 _sass/base.scss create mode 100644 _sass/bootstrap/_accordion.scss create mode 100644 _sass/bootstrap/_alert.scss create mode 100644 _sass/bootstrap/_badge.scss create mode 100644 _sass/bootstrap/_breadcrumb.scss create mode 100644 _sass/bootstrap/_button-group.scss create mode 100644 _sass/bootstrap/_buttons.scss create mode 100644 _sass/bootstrap/_card.scss create mode 100644 _sass/bootstrap/_carousel.scss create mode 100644 _sass/bootstrap/_close.scss create mode 100644 _sass/bootstrap/_containers.scss create mode 100644 _sass/bootstrap/_dropdown.scss create mode 100644 _sass/bootstrap/_forms.scss create mode 100644 _sass/bootstrap/_functions.scss create mode 100644 _sass/bootstrap/_grid.scss create mode 100644 _sass/bootstrap/_helpers.scss create mode 100644 _sass/bootstrap/_images.scss create mode 100644 _sass/bootstrap/_list-group.scss create mode 100644 _sass/bootstrap/_maps.scss create mode 100644 _sass/bootstrap/_mixins.scss create mode 100644 _sass/bootstrap/_modal.scss create mode 100644 _sass/bootstrap/_nav.scss create mode 100644 _sass/bootstrap/_navbar.scss create mode 100644 _sass/bootstrap/_offcanvas.scss create mode 100644 _sass/bootstrap/_pagination.scss create mode 100644 _sass/bootstrap/_placeholders.scss create mode 100644 _sass/bootstrap/_popover.scss create mode 100644 _sass/bootstrap/_progress.scss create mode 100644 _sass/bootstrap/_reboot.scss create mode 100644 _sass/bootstrap/_root.scss create mode 100644 _sass/bootstrap/_spinners.scss create mode 100644 _sass/bootstrap/_tables.scss create mode 100644 _sass/bootstrap/_toasts.scss create mode 100644 _sass/bootstrap/_tooltip.scss create mode 100644 _sass/bootstrap/_transitions.scss create mode 100644 _sass/bootstrap/_type.scss create mode 100644 _sass/bootstrap/_utilities.scss create mode 100644 _sass/bootstrap/_variables.scss create mode 100644 _sass/bootstrap/bootstrap-grid.scss create mode 100644 _sass/bootstrap/bootstrap-reboot.scss create mode 100644 _sass/bootstrap/bootstrap-utilities.scss create mode 100644 _sass/bootstrap/bootstrap.scss create mode 100644 _sass/bootstrap/forms/_floating-labels.scss create mode 100644 _sass/bootstrap/forms/_form-check.scss create mode 100644 _sass/bootstrap/forms/_form-control.scss create mode 100644 _sass/bootstrap/forms/_form-range.scss create mode 100644 _sass/bootstrap/forms/_form-select.scss create mode 100644 _sass/bootstrap/forms/_form-text.scss create mode 100644 _sass/bootstrap/forms/_input-group.scss create mode 100644 _sass/bootstrap/forms/_labels.scss create mode 100644 _sass/bootstrap/forms/_validation.scss create mode 100644 _sass/bootstrap/helpers/_clearfix.scss create mode 100644 _sass/bootstrap/helpers/_color-bg.scss create mode 100644 _sass/bootstrap/helpers/_colored-links.scss create mode 100644 _sass/bootstrap/helpers/_position.scss create mode 100644 _sass/bootstrap/helpers/_ratio.scss create mode 100644 _sass/bootstrap/helpers/_stacks.scss create mode 100644 _sass/bootstrap/helpers/_stretched-link.scss create mode 100644 _sass/bootstrap/helpers/_text-truncation.scss create mode 100644 _sass/bootstrap/helpers/_visually-hidden.scss create mode 100644 _sass/bootstrap/helpers/_vr.scss create mode 100644 _sass/bootstrap/mixins/_alert.scss create mode 100644 _sass/bootstrap/mixins/_backdrop.scss create mode 100644 _sass/bootstrap/mixins/_banner.scss create mode 100644 _sass/bootstrap/mixins/_border-radius.scss create mode 100644 _sass/bootstrap/mixins/_box-shadow.scss create mode 100644 _sass/bootstrap/mixins/_breakpoints.scss create mode 100644 _sass/bootstrap/mixins/_buttons.scss create mode 100644 _sass/bootstrap/mixins/_caret.scss create mode 100644 _sass/bootstrap/mixins/_clearfix.scss create mode 100644 _sass/bootstrap/mixins/_color-scheme.scss create mode 100644 _sass/bootstrap/mixins/_container.scss create mode 100644 _sass/bootstrap/mixins/_deprecate.scss create mode 100644 _sass/bootstrap/mixins/_forms.scss create mode 100644 _sass/bootstrap/mixins/_gradients.scss create mode 100644 _sass/bootstrap/mixins/_grid.scss create mode 100644 _sass/bootstrap/mixins/_image.scss create mode 100644 _sass/bootstrap/mixins/_list-group.scss create mode 100644 _sass/bootstrap/mixins/_lists.scss create mode 100644 _sass/bootstrap/mixins/_pagination.scss create mode 100644 _sass/bootstrap/mixins/_reset-text.scss create mode 100644 _sass/bootstrap/mixins/_resize.scss create mode 100644 _sass/bootstrap/mixins/_table-variants.scss create mode 100644 _sass/bootstrap/mixins/_text-truncate.scss create mode 100644 _sass/bootstrap/mixins/_transition.scss create mode 100644 _sass/bootstrap/mixins/_utilities.scss create mode 100644 _sass/bootstrap/mixins/_visually-hidden.scss create mode 100644 _sass/bootstrap/scss/_accordion.scss create mode 100644 _sass/bootstrap/scss/_alert.scss create mode 100644 _sass/bootstrap/scss/_badge.scss create mode 100644 _sass/bootstrap/scss/_breadcrumb.scss create mode 100644 _sass/bootstrap/scss/_button-group.scss create mode 100644 _sass/bootstrap/scss/_buttons.scss create mode 100644 _sass/bootstrap/scss/_card.scss create mode 100644 _sass/bootstrap/scss/_carousel.scss create mode 100644 _sass/bootstrap/scss/_close.scss create mode 100644 _sass/bootstrap/scss/_containers.scss create mode 100644 _sass/bootstrap/scss/_dropdown.scss create mode 100644 _sass/bootstrap/scss/_forms.scss create mode 100644 _sass/bootstrap/scss/_functions.scss create mode 100644 _sass/bootstrap/scss/_grid.scss create mode 100644 _sass/bootstrap/scss/_helpers.scss create mode 100644 _sass/bootstrap/scss/_images.scss create mode 100644 _sass/bootstrap/scss/_list-group.scss create mode 100644 _sass/bootstrap/scss/_maps.scss create mode 100644 _sass/bootstrap/scss/_mixins.scss create mode 100644 _sass/bootstrap/scss/_modal.scss create mode 100644 _sass/bootstrap/scss/_nav.scss create mode 100644 _sass/bootstrap/scss/_navbar.scss create mode 100644 _sass/bootstrap/scss/_offcanvas.scss create mode 100644 _sass/bootstrap/scss/_pagination.scss create mode 100644 _sass/bootstrap/scss/_placeholders.scss create mode 100644 _sass/bootstrap/scss/_popover.scss create mode 100644 _sass/bootstrap/scss/_progress.scss create mode 100644 _sass/bootstrap/scss/_reboot.scss create mode 100644 _sass/bootstrap/scss/_root.scss create mode 100644 _sass/bootstrap/scss/_spinners.scss create mode 100644 _sass/bootstrap/scss/_tables.scss create mode 100644 _sass/bootstrap/scss/_toasts.scss create mode 100644 _sass/bootstrap/scss/_tooltip.scss create mode 100644 _sass/bootstrap/scss/_transitions.scss create mode 100644 _sass/bootstrap/scss/_type.scss create mode 100644 _sass/bootstrap/scss/_utilities.scss create mode 100644 _sass/bootstrap/scss/_variables.scss create mode 100644 _sass/bootstrap/scss/bootstrap-grid.scss create mode 100644 _sass/bootstrap/scss/bootstrap-reboot.scss create mode 100644 _sass/bootstrap/scss/bootstrap-utilities.scss create mode 100644 _sass/bootstrap/scss/bootstrap.scss create mode 100644 _sass/bootstrap/scss/forms/_floating-labels.scss create mode 100644 _sass/bootstrap/scss/forms/_form-check.scss create mode 100644 _sass/bootstrap/scss/forms/_form-control.scss create mode 100644 _sass/bootstrap/scss/forms/_form-range.scss create mode 100644 _sass/bootstrap/scss/forms/_form-select.scss create mode 100644 _sass/bootstrap/scss/forms/_form-text.scss create mode 100644 _sass/bootstrap/scss/forms/_input-group.scss create mode 100644 _sass/bootstrap/scss/forms/_labels.scss create mode 100644 _sass/bootstrap/scss/forms/_validation.scss create mode 100644 _sass/bootstrap/scss/helpers/_clearfix.scss create mode 100644 _sass/bootstrap/scss/helpers/_color-bg.scss create mode 100644 _sass/bootstrap/scss/helpers/_colored-links.scss create mode 100644 _sass/bootstrap/scss/helpers/_position.scss create mode 100644 _sass/bootstrap/scss/helpers/_ratio.scss create mode 100644 _sass/bootstrap/scss/helpers/_stacks.scss create mode 100644 _sass/bootstrap/scss/helpers/_stretched-link.scss create mode 100644 _sass/bootstrap/scss/helpers/_text-truncation.scss create mode 100644 _sass/bootstrap/scss/helpers/_visually-hidden.scss create mode 100644 _sass/bootstrap/scss/helpers/_vr.scss create mode 100644 _sass/bootstrap/scss/mixins/_alert.scss create mode 100644 _sass/bootstrap/scss/mixins/_backdrop.scss create mode 100644 _sass/bootstrap/scss/mixins/_banner.scss create mode 100644 _sass/bootstrap/scss/mixins/_border-radius.scss create mode 100644 _sass/bootstrap/scss/mixins/_box-shadow.scss create mode 100644 _sass/bootstrap/scss/mixins/_breakpoints.scss create mode 100644 _sass/bootstrap/scss/mixins/_buttons.scss create mode 100644 _sass/bootstrap/scss/mixins/_caret.scss create mode 100644 _sass/bootstrap/scss/mixins/_clearfix.scss create mode 100644 _sass/bootstrap/scss/mixins/_color-scheme.scss create mode 100644 _sass/bootstrap/scss/mixins/_container.scss create mode 100644 _sass/bootstrap/scss/mixins/_deprecate.scss create mode 100644 _sass/bootstrap/scss/mixins/_forms.scss create mode 100644 _sass/bootstrap/scss/mixins/_gradients.scss create mode 100644 _sass/bootstrap/scss/mixins/_grid.scss create mode 100644 _sass/bootstrap/scss/mixins/_image.scss create mode 100644 _sass/bootstrap/scss/mixins/_list-group.scss create mode 100644 _sass/bootstrap/scss/mixins/_lists.scss create mode 100644 _sass/bootstrap/scss/mixins/_pagination.scss create mode 100644 _sass/bootstrap/scss/mixins/_reset-text.scss create mode 100644 _sass/bootstrap/scss/mixins/_resize.scss create mode 100644 _sass/bootstrap/scss/mixins/_table-variants.scss create mode 100644 _sass/bootstrap/scss/mixins/_text-truncate.scss create mode 100644 _sass/bootstrap/scss/mixins/_transition.scss create mode 100644 _sass/bootstrap/scss/mixins/_utilities.scss create mode 100644 _sass/bootstrap/scss/mixins/_visually-hidden.scss create mode 100644 _sass/bootstrap/scss/utilities/_api.scss create mode 100644 _sass/bootstrap/utilities/_api.scss create mode 100644 assets/css/help.css create mode 100644 assets/css/main.scss create mode 100644 assets/img/2023-05-24-planned-structure.svg create mode 100644 assets/img/armagetron.png create mode 100644 assets/img/bzflag.png create mode 100644 assets/img/element_interface.png create mode 100644 assets/img/hedgewars.png create mode 100644 assets/img/help_bzflag.png create mode 100644 assets/img/help_hedgewars.png create mode 100644 assets/img/help_mindustry.png create mode 100644 assets/img/help_minetest.png create mode 100644 assets/img/help_openhv.png create mode 100644 assets/img/help_openspades.png create mode 100644 assets/img/help_shatteredparadise.png create mode 100644 assets/img/help_supertuxkart.png create mode 100644 assets/img/help_teeworlds_name.png create mode 100644 assets/img/help_teeworlds_server.png create mode 100644 assets/img/help_ufoai.png create mode 100644 assets/img/help_ufoai_connect.png create mode 100644 assets/img/help_unvanquished.png create mode 100644 assets/img/help_xonotic.png create mode 100644 assets/img/icon.svg create mode 100644 assets/img/lix.png create mode 100644 assets/img/mindustry.png create mode 100644 assets/img/minetest.png create mode 100644 assets/img/movim_interface.png create mode 100644 assets/img/movim_interface2.png create mode 100644 assets/img/mumble_interface.png create mode 100644 assets/img/odamex.png create mode 100644 assets/img/openhv.png create mode 100644 assets/img/opensoldat.png create mode 100644 assets/img/openspades.png create mode 100644 assets/img/shatteredparadise.png create mode 100644 assets/img/supertuxkart.png create mode 100644 assets/img/supertuxparty.png create mode 100644 assets/img/teeworlds.png create mode 100644 assets/img/ufoai.png create mode 100644 assets/img/unvanquished.png create mode 100644 assets/img/xonotic.png create mode 100644 assets/js/terminalcolors.js create mode 100644 help.html create mode 100644 help_armagetron.html create mode 100644 help_bzflag.html create mode 100644 help_hedgewars.html create mode 100644 help_lix.html create mode 100644 help_mindustry.html create mode 100644 help_minetest.html create mode 100644 help_odamex.html create mode 100644 help_openhv.html create mode 100644 help_opensoldat.html create mode 100644 help_openspades.html create mode 100644 help_shatteredparadise.html create mode 100644 help_supertuxkart.html create mode 100644 help_supertuxparty.html create mode 100644 help_teeworlds.html create mode 100644 help_ufoai.html create mode 100644 help_unvanquished.html create mode 100644 help_xonotic.html create mode 100644 index.html create mode 100644 news.html create mode 100644 resources.html create mode 100644 schedule.html create mode 100644 tournament.html diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..26b2e3b --- /dev/null +++ b/_config.yml @@ -0,0 +1,20 @@ +title: "onFOSS" +description: > + onFOSS is an online, "Free (as Freedom) and Open Source" LAN-Party. The goal is to get people together, enjoying the art of computer games and having a great time in these days. The FOSS community is a place of being open minded and acceptance to all different kinds of people with the focus of fully transparent systems and protecting individuals. So it does not matter if you are on Windows, Mac or Linux and it is also NOT necessary to have a PC MASTERRACE setup to run those games. +url: https://onfoss.org + +content: + domain_name: "onfoss.org" + play_domain_name: "play.onfoss.org" + ssl: true + +defaults: + - + scope: + path: "" + type: "posts" + values: + layout: "post" + +plugins: + - jekyll-feed diff --git a/_data/events.yml b/_data/events.yml new file mode 100644 index 0000000..2312bcd --- /dev/null +++ b/_data/events.yml @@ -0,0 +1,99 @@ +- date: 2023-05-06T12:00:00UTC + intro: "onFOSS-LAN hosted by hribhrib" + games: + - time: "12:00" + title: "Get and chill together" + - time: "13:00" + title: "OpenSpades" + - time: "14:30" + title: "Blockbomber" + - time: "15:30" + title: "Break" + - time: "16:00" + title: "Xonotic" + tournament: true + - time: "18:00" + title: "Break" + - time: "18:30" + title: "OpenHV" + - time: "20:00" + title: "Mindustry" +- date: 2022-12-17T14:00:00UTC + intro: "onFOSS-LAN hosted by DeathByDenim" + games: + - time: "14:00" + title: "Get together" + - time: "14:30" + title: "Doom (ODAMEX) XMAS mod" + - time: "15:15" + title: "Teeworlds" + - time: "16:00" + title: "OpenSpades" + - time: "17:00" + title: "Break" + - time: "18:00" + title: "Lix" + - time: "18:30" + title: "Free Play!" + extras: ["Shattered Paradise"] +- date: 2022-07-02T14:00:00UTC + intro: "onFOSS-LAN hosted by DeathByDenim" + games: + - time: "14:00" + title: "OpenSoldat" + - time: "15:00" + title: "Lix" + - time: "16:00" + title: "Teeworlds DDrace" + - time: "17:00" + title: "Free play!" + extras: ["OpenSpades", "OpenHV"] +- date: 2022-03-19T14:00:00UTC + intro: "onFOSS-LAN hosted by DeathByDenim" + games: + - time: "14:00" + title: "Armagetron Advanced" + - time: "15:00" + title: "Xonotic - Battle Royale" + - time: "16:00" + title: "Lix" + - time: "16:30" + title: "Free play!" + extras: ["Hedgewars", "SuperTuxKart (Race and Soccer modes)"] + content: | +

+ Additionally, there was a fundraiser to help the people suffering + from the war in Ukraine 🇺🇦. I matched your donation + (up to $500 total) and additionally, the government of Canada + 🇨🇦 will match mine until 18 March. So, that's triple + the value for any donation you make. It doesn't have to be to the + Canadian Red Cross, you probably have a local equivalent. +

+

+ UPDATE (2022-03-08): Canada reached the $10M already so they are not + doubling anymore. I'll still double but this means your amount won't + count as triple anymore. +

+

+ UPDATE (2022-03-13): Canada increased the limit to $30M, so + any donation you make is once again tripled. +

+

+ UPDATE (2022-03-14): Oh, never mind, this goal has already + been reached. Anyway, I'll still match what you donate! +

+

+ UPDATE (2022-03-19): Donations are closed. A total amount + of €40 was collected and the equivalent of CAD 55.64 was + donated to the Canadian Red Cross. +

+

List of donations:

+ +- date: 2022-02-12T15:00UTC + intro: "Session to test if it all works as intended" + games: + - title: "OpenSpades" + - title: "OpenHV" + - title: "Xonotic" diff --git a/_data/games.yml b/_data/games.yml new file mode 100644 index 0000000..c111e08 --- /dev/null +++ b/_data/games.yml @@ -0,0 +1,118 @@ +- name: armagetron + title: "Armagetron Advanced" + description: "Drive your lightcycle and leave a lightwall behind you. Survive as long as you can and try to make other run into walls." + download_link: "http://www.armagetronad.org/downloads.php" + has_console: true + console_output_coloring: "Terminal" + console_initial_command: "players" + console_help_link: "http://wiki.armagetronad.org/index.php?title=Console_Commands" + console_example_commands: + - ["players", "Show current players"] + - ["kick ", "Kick the player"] + - ["num_ais ", "Set the number of AIs for games with more than one player"] + - ["limit_rounds", "End the match after this number of rounds"] +- name: bzflag + title: "Bzflag" + description: "Drive around in a tank that can jump, trying to shoot your opponents while dodging their bullets." + download_link: "https://www.bzflag.org/downloads/" + has_console: true + console_output_coloring: "Terminal" + console_initial_command: "/playerlist" + console_help_link: "https://wiki.bzflag.org/Slash_Commands" + console_example_commands: + - ["/playerlist", "Display list of players"] + - ["/kick ", "Kick the player"] + - ["/gameover", "end the current game"] +- name: hedgewars + title: "Hedgewars" + description: "Worms-like game where your team of hedgehogs needs to destroy the other teams using the ludicrous arsenal at their disposal." + download_link: "https://www.hedgewars.org/download.html" +- name: lix + title: "Lix" + description: "Lemmings-like game where you need to guide your little people to safety despite their best efforts of wandering into things that will kill them." + download_link: "https://github.com/SimonN/LixD#get-lix" +- name: mindustry + title: "Mindustry" + description: "A building and tower defence game where you build up an industry and defences against ever larger waves of enemies." + download_link: "https://github.com/Anuken/Mindustry/releases" + has_console: true + console_output_coloring: "Terminal" + console_initial_command: "status" + console_help_link: "https://mindustrygame.github.io/wiki/servers/#dedicated-server-commands" + console_example_commands: + - ["status", "Display server status"] + - ["runwave", "Trigger the next wave"] + - ["kick ", "Kick a person by name"] +- name: minetest + title: "Minetest (Blockbomber)" + description: "The classic Bomberman game in 3D as a mod for Minetest" + download_link: "https://www.minetest.net/downloads/" +- name: odamex + title: "Odamex" + description: "Multiplayer-focused DOOM engine that allows deathmatch, coop, and capture the flag mode. Here we are using the Freedom assets so you don't need a copy of the original game to play." + download_link: "https://odamex.net/" +- name: openhv + title: "OpenHV" + description: "Real-time strategy game where you mine resources and build units to attack and defend." + download_link: "https://github.com/OpenHV/OpenHV/releases" +- name: openspades + title: "OpenSpades" + description: "Mix between a first person shooter and Minecraft. Build defence structures, dig many tunnels or go on the offensive." + warning: "uses potentially non-open assets. Fix is here." + download_link: "https://github.com/yvt/openspades/releases" +- name: shatteredparadise + title: "Shattered Paradise" + description: "Real-time strategy game where you mine resources and build units to attack and defend." + download_link: "https://github.com/ABrandau/Shattered-Paradise-SDK/releases" +- name: opensoldat + title: "OpenSoldat" + description: "Fast-paced 2D side-scrolling shooter game where you have a big gun and a jetpack." + download_link: "https://github.com/opensoldat/opensoldat/releases/" +- name: supertuxkart + title: "SuperTuxKart" + description: "Kart racing game where you can use the various power-ups to give yourself a boost of hinder your opponents." + download_link: "https://supertuxkart.net/Download" +- name: supertuxparty + title: "Super Tux Party" + description: "Turn-based party game where you challenge other player in real-time mini games." + download_link: "https://supertux.party/download/latest/" +- name: teeworlds + title: "Teeworlds" + description: "Fast-paced 2D side-scrolling shooter game where you have a big gun and a grappling hook." + download_link: "https://www.teeworlds.com/?page=downloads" + has_console: true + console_output_coloring: "Terminal" + console_initial_command: "status" + console_help_link: "https://www.teeworlds.com/?page=docs&wiki=server_commands" + console_example_commands: + - ["status", "Display server status"] + - ["change_map ", "Switch to "] + - ["kick ", "Kick a person by id"] +- name: ufoai + title: "UFO: Alien Invasion" + description: "Squad-based turn-based tactical strategy game in the tradition of the old X-COM PC games" + download_link: "https://ufoai.org/wiki/Download" +- name: unvanquished + title: "Unvanquished" + description: "First-person shooter of aliens vs humans. There are several classes and it's possible to build structures." + download_link: "https://unvanquished.net/download/" + has_console: true + console_output_coloring: "Daemoned" + console_initial_command: "/status" + console_help_link: "https://wiki.unvanquished.net/wiki/Server/Running#Commands" + console_example_commands: + - ["/listplayers", "List current players in-game"] + - ["/kick ", "Kick the player"] + - ["/nextmap", "Go to the next map in the rotation"] +- name: xonotic + title: "Xonotic" + description: "First-person shooter where players compete in a 3D world. It features Battle Royale mode." + download_link: "https://xonotic.org/download/" + has_console: true + console_output_coloring: "Daemoned" + console_initial_command: "who" + console_help_link: "https://gitlab.com/xonotic/xonotic/-/wikis/Basic-server-configuration" + console_example_commands: + - ["who", "List current players in-game"] + - ["kick ", "Kick the player"] + - ["gotomap ", "Go to the specified map"] diff --git a/_includes/event.html b/_includes/event.html new file mode 100644 index 0000000..b836f51 --- /dev/null +++ b/_includes/event.html @@ -0,0 +1,29 @@ +

{{ event.date | date: "%A %d %B %Y, %H:%M %Z" }}

+ + {% if event.intro %} +

{{ event.intro }}

+ {% endif %} +
    + {% for game in event.games %} + {% assign time = game.time | split: ":"%} + {% if game.time %} +
  • {{ game.time }}UTC {{ game.title }}{%if game.tournament %} Tournament{% endif %}
  • + {% else %} +
  • {{ game.title }}{%if game.tournament %} Tournament{% endif %}
  • + {% endif %} + {% if game.extras %} +
      + {% for extra in game.extras %} +
    • {{ extra }}
    • + {% endfor %} +
    + {% endif %} + {% endfor %} +
+ {{ event.content }} diff --git a/_includes/nav.html b/_includes/nav.html new file mode 100644 index 0000000..6086ca2 --- /dev/null +++ b/_includes/nav.html @@ -0,0 +1,28 @@ + diff --git a/_layouts/default.html b/_layouts/default.html new file mode 100644 index 0000000..4017ebd --- /dev/null +++ b/_layouts/default.html @@ -0,0 +1,18 @@ + + + + + onFOSS + + + + + + {% include nav.html %} + +
+ {{ content }} +
+ + + diff --git a/_layouts/help.html b/_layouts/help.html new file mode 100644 index 0000000..38cd877 --- /dev/null +++ b/_layouts/help.html @@ -0,0 +1,15 @@ +--- +layout: default +nav_pill: help +--- + + {% assign game = site.data.games | where_exp: "item", "item.name == page.game" | first %} +

{{ game.title }}

+

{{ game.description }}

+
+ Screenshot of {{ game.title }} +
+

Getting the game

+ + {{ content }} +

diff --git a/_layouts/post.html b/_layouts/post.html new file mode 100644 index 0000000..001560b --- /dev/null +++ b/_layouts/post.html @@ -0,0 +1,8 @@ +--- +layout: default +nav_pill: news +--- +

{{ page.title }}

+

{{ post.date | date_to_string }}{% if post.author %} by {{ post.author }}{% endif %}

+ +{{ content }} diff --git a/_posts/2023-05-24-onFOSS-Next-Gen.md b/_posts/2023-05-24-onFOSS-Next-Gen.md new file mode 100644 index 0000000..962e422 --- /dev/null +++ b/_posts/2023-05-24-onFOSS-Next-Gen.md @@ -0,0 +1,47 @@ +--- +layout: post +title: "onFOSS: The next generation!" +category: news +--- +The "onFOSS-LAN" started as an idea by [hribhrib](https://hribhrib.at) to host a LAN-party-like experience online. Yes, the pun with LAN instead of WAN-party was intended but didn't ripe well, however, what instead did ripe well was the whole Event! Only one year after the first public onFOSS-LAN another host joined the team: [DeathByDenim](http://jarno.ca/). Even more people got together to bring this experience to everyone that was interested in FOSS-Gaming, and group-effort hosting started to sprout, mostly by people of the [LibreGaming](https://libregaming.org/) community. + +## Rebranding +To bring the onFOSS-LAN to another level, we announce some changes! + +### Changing the name +The onFOSS-LAN will be further renamed to just "onFOSS", also to sound more modern and, furthermore, don't confuse the people with the LAN-pun anymore. Although there were heated discussions about it ;) + +### Domain onFOSS.org +One problem persisted, that all the resources and information were spread out with no common "place to go", therefore the [onFOSS.org](https://onfoss.org) Domain was acquired to bring everyone to the same point. + +### Making a brand +Also, to support the idea of bringing the people together and bring one uniform branding for every host and advertiser to be recognized, there is an effort to provide media for branding anything. For example, there will be Logos, Icons, Banner,... for everyone to use! + +## Restructuring +onFOSS.org will be the new place to go with all the information about the event and further links to all resources and communication channels. Here is a draft of the planned structure in an image: + +![Planned Structure](/assets/img/2023-05-24-planned-structure.svg){:class="img-fluid"} + +### The Main page +The main-page of [onFOSS.org](https://onfoss.org) will be there for general information, resources, lists of supporters, and further links. Also, the blog that you currently read will also be there. This site will be used for all static and general information. + +### The Live page +The famous "play." subdomain, that already was used as the landing page of a current hosted onFOSS, will be stripped down to only have relevant information about the current event like timetable and tournament info. All the redundant information will be elevated into the main page. + +## Social Platforms +Another issue was the reachability of the upcoming onFOSS events. Although, there was a XMPP/Matrix channel from provided by the community, it was hard to reach out to new people. Thanks to poVoq over at [FreeGameDev](https://freegamedev.net/) there is now a proper bridged channel which also supports IRC in addition. In addition to that, onFOSS is now providing a RSS-feed (also already this post) to build a foundation for further automation of announcements. + +### Mastodon +There will also be a onFOSS representation on a Mastodon instance (Probably: https://floss.social/) to reach out further. + +### PeerTube +There were already some videos made from footage of onFOSS events, however again, spread out and not findable anymore once one lost the link. Therefore, we happily announce an official onFOSS video channel on (TBA) + +### Unofficial +Due to RSS, the community can make automated announcements on their own that bring further visibility outside the onFOSS-bubble. For example, there is a Discord-Server just for the announcements and not bridged to the main communication channel due to privacy and proprietary concerns, but if someone prefers to get notified over there this is now also possible. + +## What now? +This is just the beginning of a new era of onFOSS and be hyped for further events! If you want to help somehow just get in contact with us, otherwise, subscribe to our many channels and stay tuned for the next Host to prepare the next event! + +## THANK YOU ALL! <3 +Concluding the first official blog-post with the most important stuff: Thank you all for supporting the event in any form, and thank you all for the numerous participants of all events! Without you people, this whole event wouldn't exist, and we wouldn't write this post here. So thank you all and see you on the next onFOSS! diff --git a/_sass/base.scss b/_sass/base.scss new file mode 100644 index 0000000..cde9996 --- /dev/null +++ b/_sass/base.scss @@ -0,0 +1,71 @@ +// Custom style matching https://onfoss.libregaming.org/ + +//$primary: darkorange; +//$secondary: red; +//$body-bg: black; +//$body-color: orange; +//$warning: yellow; +//$font-family-base: Ubuntu Mono, monospace; +//$link-color: #4FBAD5; +//$dark: darkorange; +//$nav-pills-link-active-color: darkblue; +//$nav-pills-link-active-bg: darkorange; + + +// If you want to provide the Ubuntu font, place those font files in assets/css/font + +///* ubuntu-mono-regular - latin */ +//@font-face { + //font-family: 'Ubuntu Mono'; + //font-style: normal; + //font-weight: 400; + //src: url('font/ubuntu-mono-v14-latin-regular.eot'); /* IE9 Compat Modes */ + //src: local(''), + //url('font/ubuntu-mono-v14-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + //url('font/ubuntu-mono-v14-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + //url('font/ubuntu-mono-v14-latin-regular.woff') format('woff'), /* Modern Browsers */ + //url('font/ubuntu-mono-v14-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + //url('font/ubuntu-mono-v14-latin-regular.svg#UbuntuMono') format('svg'); /* Legacy iOS */ +//} + +///* ubuntu-mono-italic - latin */ +//@font-face { + //font-family: 'Ubuntu Mono'; + //font-style: italic; + //font-weight: 400; + //src: url('font/ubuntu-mono-v14-latin-italic.eot'); /* IE9 Compat Modes */ + //src: local(''), + //url('font/ubuntu-mono-v14-latin-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + //url('font/ubuntu-mono-v14-latin-italic.woff2') format('woff2'), /* Super Modern Browsers */ + //url('font/ubuntu-mono-v14-latin-italic.woff') format('woff'), /* Modern Browsers */ + //url('font/ubuntu-mono-v14-latin-italic.ttf') format('truetype'), /* Safari, Android, iOS */ + //url('font/ubuntu-mono-v14-latin-italic.svg#UbuntuMono') format('svg'); /* Legacy iOS */ +//} + +///* ubuntu-mono-700 - latin */ +//@font-face { + //font-family: 'Ubuntu Mono'; + //font-style: normal; + //font-weight: 700; + //src: url('font/ubuntu-mono-v14-latin-700.eot'); /* IE9 Compat Modes */ + //src: local(''), + //url('font/ubuntu-mono-v14-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + //url('font/ubuntu-mono-v14-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ + //url('font/ubuntu-mono-v14-latin-700.woff') format('woff'), /* Modern Browsers */ + //url('font/ubuntu-mono-v14-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ + //url('font/ubuntu-mono-v14-latin-700.svg#UbuntuMono') format('svg'); /* Legacy iOS */ +//} + +///* ubuntu-mono-700italic - latin */ +//@font-face { + //font-family: 'Ubuntu Mono'; + //font-style: italic; + //font-weight: 700; + //src: url('font/ubuntu-mono-v14-latin-700italic.eot'); /* IE9 Compat Modes */ + //src: local(''), + //url('font/ubuntu-mono-v14-latin-700italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + //url('font/ubuntu-mono-v14-latin-700italic.woff2') format('woff2'), /* Super Modern Browsers */ + //url('font/ubuntu-mono-v14-latin-700italic.woff') format('woff'), /* Modern Browsers */ + //url('font/ubuntu-mono-v14-latin-700italic.ttf') format('truetype'), /* Safari, Android, iOS */ + //url('font/ubuntu-mono-v14-latin-700italic.svg#UbuntuMono') format('svg'); /* Legacy iOS */ +//} diff --git a/_sass/bootstrap/_accordion.scss b/_sass/bootstrap/_accordion.scss new file mode 100644 index 0000000..f09601b --- /dev/null +++ b/_sass/bootstrap/_accordion.scss @@ -0,0 +1,149 @@ +// +// Base styles +// + +.accordion { + // scss-docs-start accordion-css-vars + --#{$prefix}accordion-color: #{$accordion-color}; + --#{$prefix}accordion-bg: #{$accordion-bg}; + --#{$prefix}accordion-transition: #{$accordion-transition}; + --#{$prefix}accordion-border-color: #{$accordion-border-color}; + --#{$prefix}accordion-border-width: #{$accordion-border-width}; + --#{$prefix}accordion-border-radius: #{$accordion-border-radius}; + --#{$prefix}accordion-inner-border-radius: #{$accordion-inner-border-radius}; + --#{$prefix}accordion-btn-padding-x: #{$accordion-button-padding-x}; + --#{$prefix}accordion-btn-padding-y: #{$accordion-button-padding-y}; + --#{$prefix}accordion-btn-color: #{$accordion-button-color}; + --#{$prefix}accordion-btn-bg: #{$accordion-button-bg}; + --#{$prefix}accordion-btn-icon: #{escape-svg($accordion-button-icon)}; + --#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width}; + --#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform}; + --#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition}; + --#{$prefix}accordion-btn-active-icon: #{escape-svg($accordion-button-active-icon)}; + --#{$prefix}accordion-btn-focus-border-color: #{$accordion-button-focus-border-color}; + --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow}; + --#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x}; + --#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y}; + --#{$prefix}accordion-active-color: #{$accordion-button-active-color}; + --#{$prefix}accordion-active-bg: #{$accordion-button-active-bg}; + // scss-docs-end accordion-css-vars +} + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--#{$prefix}accordion-btn-padding-y) var(--#{$prefix}accordion-btn-padding-x); + @include font-size($font-size-base); + color: var(--#{$prefix}accordion-btn-color); + text-align: left; // Reset button style + background-color: var(--#{$prefix}accordion-btn-bg); + border: 0; + @include border-radius(0); + overflow-anchor: none; + @include transition(var(--#{$prefix}accordion-transition)); + + &:not(.collapsed) { + color: var(--#{$prefix}accordion-active-color); + background-color: var(--#{$prefix}accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--#{$prefix}accordion-border-width)) 0 var(--#{$prefix}accordion-border-color); // stylelint-disable-line function-disallowed-list + + &::after { + background-image: var(--#{$prefix}accordion-btn-active-icon); + transform: var(--#{$prefix}accordion-btn-icon-transform); + } + } + + // Accordion icon + &::after { + flex-shrink: 0; + width: var(--#{$prefix}accordion-btn-icon-width); + height: var(--#{$prefix}accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--#{$prefix}accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--#{$prefix}accordion-btn-icon-width); + @include transition(var(--#{$prefix}accordion-btn-icon-transition)); + } + + &:hover { + z-index: 2; + } + + &:focus { + z-index: 3; + border-color: var(--#{$prefix}accordion-btn-focus-border-color); + outline: 0; + box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow); + } +} + +.accordion-header { + margin-bottom: 0; +} + +.accordion-item { + color: var(--#{$prefix}accordion-color); + background-color: var(--#{$prefix}accordion-bg); + border: var(--#{$prefix}accordion-border-width) solid var(--#{$prefix}accordion-border-color); + + &:first-of-type { + @include border-top-radius(var(--#{$prefix}accordion-border-radius)); + + .accordion-button { + @include border-top-radius(var(--#{$prefix}accordion-inner-border-radius)); + } + } + + &:not(:first-of-type) { + border-top: 0; + } + + // Only set a border-radius on the last item if the accordion is collapsed + &:last-of-type { + @include border-bottom-radius(var(--#{$prefix}accordion-border-radius)); + + .accordion-button { + &.collapsed { + @include border-bottom-radius(var(--#{$prefix}accordion-inner-border-radius)); + } + } + + .accordion-collapse { + @include border-bottom-radius(var(--#{$prefix}accordion-border-radius)); + } + } +} + +.accordion-body { + padding: var(--#{$prefix}accordion-body-padding-y) var(--#{$prefix}accordion-body-padding-x); +} + + +// Flush accordion items +// +// Remove borders and border-radius to keep accordion items edge-to-edge. + +.accordion-flush { + .accordion-collapse { + border-width: 0; + } + + .accordion-item { + border-right: 0; + border-left: 0; + @include border-radius(0); + + &:first-child { border-top: 0; } + &:last-child { border-bottom: 0; } + + .accordion-button { + &, + &.collapsed { + @include border-radius(0); + } + } + } +} diff --git a/_sass/bootstrap/_alert.scss b/_sass/bootstrap/_alert.scss new file mode 100644 index 0000000..c8bc91b --- /dev/null +++ b/_sass/bootstrap/_alert.scss @@ -0,0 +1,71 @@ +// +// Base styles +// + +.alert { + // scss-docs-start alert-css-vars + --#{$prefix}alert-bg: transparent; + --#{$prefix}alert-padding-x: #{$alert-padding-x}; + --#{$prefix}alert-padding-y: #{$alert-padding-y}; + --#{$prefix}alert-margin-bottom: #{$alert-margin-bottom}; + --#{$prefix}alert-color: inherit; + --#{$prefix}alert-border-color: transparent; + --#{$prefix}alert-border: #{$alert-border-width} solid var(--#{$prefix}alert-border-color); + --#{$prefix}alert-border-radius: #{$alert-border-radius}; + // scss-docs-end alert-css-vars + + position: relative; + padding: var(--#{$prefix}alert-padding-y) var(--#{$prefix}alert-padding-x); + margin-bottom: var(--#{$prefix}alert-margin-bottom); + color: var(--#{$prefix}alert-color); + background-color: var(--#{$prefix}alert-bg); + border: var(--#{$prefix}alert-border); + @include border-radius(var(--#{$prefix}alert-border-radius)); +} + +// Headings for larger alerts +.alert-heading { + // Specified to prevent conflicts of changing $headings-color + color: inherit; +} + +// Provide class for links that match alerts +.alert-link { + font-weight: $alert-link-font-weight; +} + + +// Dismissible alerts +// +// Expand the right padding and account for the close button's positioning. + +.alert-dismissible { + padding-right: $alert-dismissible-padding-r; + + // Adjust close link position + .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: $stretched-link-z-index + 1; + padding: $alert-padding-y * 1.25 $alert-padding-x; + } +} + + +// scss-docs-start alert-modifiers +// Generate contextual modifier classes for colorizing the alert. + +@each $state, $value in $theme-colors { + $alert-background: shift-color($value, $alert-bg-scale); + $alert-border: shift-color($value, $alert-border-scale); + $alert-color: shift-color($value, $alert-color-scale); + + @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) { + $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale)); + } + .alert-#{$state} { + @include alert-variant($alert-background, $alert-border, $alert-color); + } +} +// scss-docs-end alert-modifiers diff --git a/_sass/bootstrap/_badge.scss b/_sass/bootstrap/_badge.scss new file mode 100644 index 0000000..cc3d269 --- /dev/null +++ b/_sass/bootstrap/_badge.scss @@ -0,0 +1,38 @@ +// Base class +// +// Requires one of the contextual, color modifier classes for `color` and +// `background-color`. + +.badge { + // scss-docs-start badge-css-vars + --#{$prefix}badge-padding-x: #{$badge-padding-x}; + --#{$prefix}badge-padding-y: #{$badge-padding-y}; + @include rfs($badge-font-size, --#{$prefix}badge-font-size); + --#{$prefix}badge-font-weight: #{$badge-font-weight}; + --#{$prefix}badge-color: #{$badge-color}; + --#{$prefix}badge-border-radius: #{$badge-border-radius}; + // scss-docs-end badge-css-vars + + display: inline-block; + padding: var(--#{$prefix}badge-padding-y) var(--#{$prefix}badge-padding-x); + @include font-size(var(--#{$prefix}badge-font-size)); + font-weight: var(--#{$prefix}badge-font-weight); + line-height: 1; + color: var(--#{$prefix}badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + @include border-radius(var(--#{$prefix}badge-border-radius)); + @include gradient-bg(); + + // Empty badges collapse automatically + &:empty { + display: none; + } +} + +// Quick fix for badges in buttons +.btn .badge { + position: relative; + top: -1px; +} diff --git a/_sass/bootstrap/_breadcrumb.scss b/_sass/bootstrap/_breadcrumb.scss new file mode 100644 index 0000000..b8252ff --- /dev/null +++ b/_sass/bootstrap/_breadcrumb.scss @@ -0,0 +1,40 @@ +.breadcrumb { + // scss-docs-start breadcrumb-css-vars + --#{$prefix}breadcrumb-padding-x: #{$breadcrumb-padding-x}; + --#{$prefix}breadcrumb-padding-y: #{$breadcrumb-padding-y}; + --#{$prefix}breadcrumb-margin-bottom: #{$breadcrumb-margin-bottom}; + @include rfs($breadcrumb-font-size, --#{$prefix}breadcrumb-font-size); + --#{$prefix}breadcrumb-bg: #{$breadcrumb-bg}; + --#{$prefix}breadcrumb-border-radius: #{$breadcrumb-border-radius}; + --#{$prefix}breadcrumb-divider-color: #{$breadcrumb-divider-color}; + --#{$prefix}breadcrumb-item-padding-x: #{$breadcrumb-item-padding-x}; + --#{$prefix}breadcrumb-item-active-color: #{$breadcrumb-active-color}; + // scss-docs-end breadcrumb-css-vars + + display: flex; + flex-wrap: wrap; + padding: var(--#{$prefix}breadcrumb-padding-y) var(--#{$prefix}breadcrumb-padding-x); + margin-bottom: var(--#{$prefix}breadcrumb-margin-bottom); + @include font-size(var(--#{$prefix}breadcrumb-font-size)); + list-style: none; + background-color: var(--#{$prefix}breadcrumb-bg); + @include border-radius(var(--#{$prefix}breadcrumb-border-radius)); +} + +.breadcrumb-item { + // The separator between breadcrumbs (by default, a forward-slash: "/") + + .breadcrumb-item { + padding-left: var(--#{$prefix}breadcrumb-item-padding-x); + + &::before { + float: left; // Suppress inline spacings and underlining of the separator + padding-right: var(--#{$prefix}breadcrumb-item-padding-x); + color: var(--#{$prefix}breadcrumb-divider-color); + content: var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{"/* rtl:"} var(--#{$prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{"*/"}; + } + } + + &.active { + color: var(--#{$prefix}breadcrumb-item-active-color); + } +} diff --git a/_sass/bootstrap/_button-group.scss b/_sass/bootstrap/_button-group.scss new file mode 100644 index 0000000..79b100c --- /dev/null +++ b/_sass/bootstrap/_button-group.scss @@ -0,0 +1,142 @@ +// Make the div behave like a button +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; // match .btn alignment given font-size hack above + + > .btn { + position: relative; + flex: 1 1 auto; + } + + // Bring the hover, focused, and "active" buttons to the front to overlay + // the borders properly + > .btn-check:checked + .btn, + > .btn-check:focus + .btn, + > .btn:hover, + > .btn:focus, + > .btn:active, + > .btn.active { + z-index: 1; + } +} + +// Optional: Group multiple button groups together for a toolbar +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + + .input-group { + width: auto; + } +} + +.btn-group { + @include border-radius($btn-border-radius); + + // Prevent double borders when buttons are next to each other + > :not(.btn-check:first-child) + .btn, + > .btn-group:not(:first-child) { + margin-left: -$btn-border-width; + } + + // Reset rounded corners + > .btn:not(:last-child):not(.dropdown-toggle), + > .btn.dropdown-toggle-split:first-child, + > .btn-group:not(:last-child) > .btn { + @include border-end-radius(0); + } + + // The left radius should be 0 if the button is: + // - the "third or more" child + // - the second child and the previous element isn't `.btn-check` (making it the first child visually) + // - part of a btn-group which isn't the first child + > .btn:nth-child(n + 3), + > :not(.btn-check) + .btn, + > .btn-group:not(:first-child) > .btn { + @include border-start-radius(0); + } +} + +// Sizing +// +// Remix the default button sizing classes into new ones for easier manipulation. + +.btn-group-sm > .btn { @extend .btn-sm; } +.btn-group-lg > .btn { @extend .btn-lg; } + + +// +// Split button dropdowns +// + +.dropdown-toggle-split { + padding-right: $btn-padding-x * .75; + padding-left: $btn-padding-x * .75; + + &::after, + .dropup &::after, + .dropend &::after { + margin-left: 0; + } + + .dropstart &::before { + margin-right: 0; + } +} + +.btn-sm + .dropdown-toggle-split { + padding-right: $btn-padding-x-sm * .75; + padding-left: $btn-padding-x-sm * .75; +} + +.btn-lg + .dropdown-toggle-split { + padding-right: $btn-padding-x-lg * .75; + padding-left: $btn-padding-x-lg * .75; +} + + +// The clickable button for toggling the menu +// Set the same inset shadow as the :active state +.btn-group.show .dropdown-toggle { + @include box-shadow($btn-active-box-shadow); + + // Show no shadow for `.btn-link` since it has no other button styles. + &.btn-link { + @include box-shadow(none); + } +} + + +// +// Vertical button groups +// + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; + + > .btn, + > .btn-group { + width: 100%; + } + + > .btn:not(:first-child), + > .btn-group:not(:first-child) { + margin-top: -$btn-border-width; + } + + // Reset rounded corners + > .btn:not(:last-child):not(.dropdown-toggle), + > .btn-group:not(:last-child) > .btn { + @include border-bottom-radius(0); + } + + > .btn ~ .btn, + > .btn-group:not(:first-child) > .btn { + @include border-top-radius(0); + } +} diff --git a/_sass/bootstrap/_buttons.scss b/_sass/bootstrap/_buttons.scss new file mode 100644 index 0000000..f2c4c13 --- /dev/null +++ b/_sass/bootstrap/_buttons.scss @@ -0,0 +1,207 @@ +// +// Base styles +// + +.btn { + // scss-docs-start btn-css-vars + --#{$prefix}btn-padding-x: #{$btn-padding-x}; + --#{$prefix}btn-padding-y: #{$btn-padding-y}; + --#{$prefix}btn-font-family: #{$btn-font-family}; + @include rfs($btn-font-size, --#{$prefix}btn-font-size); + --#{$prefix}btn-font-weight: #{$btn-font-weight}; + --#{$prefix}btn-line-height: #{$btn-line-height}; + --#{$prefix}btn-color: #{$body-color}; + --#{$prefix}btn-bg: transparent; + --#{$prefix}btn-border-width: #{$btn-border-width}; + --#{$prefix}btn-border-color: transparent; + --#{$prefix}btn-border-radius: #{$btn-border-radius}; + --#{$prefix}btn-hover-border-color: transparent; + --#{$prefix}btn-box-shadow: #{$btn-box-shadow}; + --#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity}; + --#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5); + // scss-docs-end btn-css-vars + + display: inline-block; + padding: var(--#{$prefix}btn-padding-y) var(--#{$prefix}btn-padding-x); + font-family: var(--#{$prefix}btn-font-family); + @include font-size(var(--#{$prefix}btn-font-size)); + font-weight: var(--#{$prefix}btn-font-weight); + line-height: var(--#{$prefix}btn-line-height); + color: var(--#{$prefix}btn-color); + text-align: center; + text-decoration: if($link-decoration == none, null, none); + white-space: $btn-white-space; + vertical-align: middle; + cursor: if($enable-button-pointers, pointer, null); + user-select: none; + border: var(--#{$prefix}btn-border-width) solid var(--#{$prefix}btn-border-color); + @include border-radius(var(--#{$prefix}btn-border-radius)); + @include gradient-bg(var(--#{$prefix}btn-bg)); + @include box-shadow(var(--#{$prefix}btn-box-shadow)); + @include transition($btn-transition); + + &:hover { + color: var(--#{$prefix}btn-hover-color); + text-decoration: if($link-hover-decoration == underline, none, null); + background-color: var(--#{$prefix}btn-hover-bg); + border-color: var(--#{$prefix}btn-hover-border-color); + } + + .btn-check + &:hover { + // override for the checkbox/radio buttons + color: var(--#{$prefix}btn-color); + background-color: var(--#{$prefix}btn-bg); + border-color: var(--#{$prefix}btn-border-color); + } + + &:focus-visible { + color: var(--#{$prefix}btn-hover-color); + @include gradient-bg(var(--#{$prefix}btn-hover-bg)); + border-color: var(--#{$prefix}btn-hover-border-color); + outline: 0; + // Avoid using mixin so we can pass custom focus shadow properly + @if $enable-shadows { + box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow); + } @else { + box-shadow: var(--#{$prefix}btn-focus-box-shadow); + } + } + + .btn-check:focus-visible + & { + border-color: var(--#{$prefix}btn-hover-border-color); + outline: 0; + // Avoid using mixin so we can pass custom focus shadow properly + @if $enable-shadows { + box-shadow: var(--#{$prefix}btn-box-shadow), var(--#{$prefix}btn-focus-box-shadow); + } @else { + box-shadow: var(--#{$prefix}btn-focus-box-shadow); + } + } + + .btn-check:checked + &, + :not(.btn-check) + &:active, + &:first-child:active, + &.active, + &.show { + color: var(--#{$prefix}btn-active-color); + background-color: var(--#{$prefix}btn-active-bg); + // Remove CSS gradients if they're enabled + background-image: if($enable-gradients, none, null); + border-color: var(--#{$prefix}btn-active-border-color); + @include box-shadow(var(--#{$prefix}btn-active-shadow)); + + &:focus-visible { + // Avoid using mixin so we can pass custom focus shadow properly + @if $enable-shadows { + box-shadow: var(--#{$prefix}btn-active-shadow), var(--#{$prefix}btn-focus-box-shadow); + } @else { + box-shadow: var(--#{$prefix}btn-focus-box-shadow); + } + } + } + + &:disabled, + &.disabled, + fieldset:disabled & { + color: var(--#{$prefix}btn-disabled-color); + pointer-events: none; + background-color: var(--#{$prefix}btn-disabled-bg); + background-image: if($enable-gradients, none, null); + border-color: var(--#{$prefix}btn-disabled-border-color); + opacity: var(--#{$prefix}btn-disabled-opacity); + @include box-shadow(none); + } +} + + +// +// Alternate buttons +// + +// scss-docs-start btn-variant-loops +@each $color, $value in $theme-colors { + .btn-#{$color} { + @if $color == "light" { + @include button-variant( + $value, + $value, + $hover-background: shade-color($value, $btn-hover-bg-shade-amount), + $hover-border: shade-color($value, $btn-hover-border-shade-amount), + $active-background: shade-color($value, $btn-active-bg-shade-amount), + $active-border: shade-color($value, $btn-active-border-shade-amount) + ); + } @else if $color == "dark" { + @include button-variant( + $value, + $value, + $hover-background: tint-color($value, $btn-hover-bg-tint-amount), + $hover-border: tint-color($value, $btn-hover-border-tint-amount), + $active-background: tint-color($value, $btn-active-bg-tint-amount), + $active-border: tint-color($value, $btn-active-border-tint-amount) + ); + } @else { + @include button-variant($value, $value); + } + } +} + +@each $color, $value in $theme-colors { + .btn-outline-#{$color} { + @include button-outline-variant($value); + } +} +// scss-docs-end btn-variant-loops + + +// +// Link buttons +// + +// Make a button look and behave like a link +.btn-link { + --#{$prefix}btn-font-weight: #{$font-weight-normal}; + --#{$prefix}btn-color: #{$btn-link-color}; + --#{$prefix}btn-bg: transparent; + --#{$prefix}btn-border-color: transparent; + --#{$prefix}btn-hover-color: #{$btn-link-hover-color}; + --#{$prefix}btn-hover-border-color: transparent; + --#{$prefix}btn-active-color: #{$btn-link-hover-color}; + --#{$prefix}btn-active-border-color: transparent; + --#{$prefix}btn-disabled-color: #{$btn-link-disabled-color}; + --#{$prefix}btn-disabled-border-color: transparent; + --#{$prefix}btn-box-shadow: none; + --#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix(color-contrast($primary), $primary, 15%))}; + + text-decoration: $link-decoration; + @if $enable-gradients { + background-image: none; + } + + &:hover, + &:focus-visible { + text-decoration: $link-hover-decoration; + } + + &:focus-visible { + color: var(--#{$prefix}btn-color); + } + + &:hover { + color: var(--#{$prefix}btn-hover-color); + } + + // No need for an active state here +} + + +// +// Button Sizes +// + +.btn-lg { + @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-border-radius-lg); +} + +.btn-sm { + @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-border-radius-sm); +} diff --git a/_sass/bootstrap/_card.scss b/_sass/bootstrap/_card.scss new file mode 100644 index 0000000..ce8c02f --- /dev/null +++ b/_sass/bootstrap/_card.scss @@ -0,0 +1,234 @@ +// +// Base styles +// + +.card { + // scss-docs-start card-css-vars + --#{$prefix}card-spacer-y: #{$card-spacer-y}; + --#{$prefix}card-spacer-x: #{$card-spacer-x}; + --#{$prefix}card-title-spacer-y: #{$card-title-spacer-y}; + --#{$prefix}card-border-width: #{$card-border-width}; + --#{$prefix}card-border-color: #{$card-border-color}; + --#{$prefix}card-border-radius: #{$card-border-radius}; + --#{$prefix}card-box-shadow: #{$card-box-shadow}; + --#{$prefix}card-inner-border-radius: #{$card-inner-border-radius}; + --#{$prefix}card-cap-padding-y: #{$card-cap-padding-y}; + --#{$prefix}card-cap-padding-x: #{$card-cap-padding-x}; + --#{$prefix}card-cap-bg: #{$card-cap-bg}; + --#{$prefix}card-cap-color: #{$card-cap-color}; + --#{$prefix}card-height: #{$card-height}; + --#{$prefix}card-color: #{$card-color}; + --#{$prefix}card-bg: #{$card-bg}; + --#{$prefix}card-img-overlay-padding: #{$card-img-overlay-padding}; + --#{$prefix}card-group-margin: #{$card-group-margin}; + // scss-docs-end card-css-vars + + position: relative; + display: flex; + flex-direction: column; + min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106 + height: var(--#{$prefix}card-height); + word-wrap: break-word; + background-color: var(--#{$prefix}card-bg); + background-clip: border-box; + border: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color); + @include border-radius(var(--#{$prefix}card-border-radius)); + @include box-shadow(var(--#{$prefix}card-box-shadow)); + + > hr { + margin-right: 0; + margin-left: 0; + } + + > .list-group { + border-top: inherit; + border-bottom: inherit; + + &:first-child { + border-top-width: 0; + @include border-top-radius(var(--#{$prefix}card-inner-border-radius)); + } + + &:last-child { + border-bottom-width: 0; + @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius)); + } + } + + // Due to specificity of the above selector (`.card > .list-group`), we must + // use a child selector here to prevent double borders. + > .card-header + .list-group, + > .list-group + .card-footer { + border-top: 0; + } +} + +.card-body { + // Enable `flex-grow: 1` for decks and groups so that card blocks take up + // as much space as possible, ensuring footers are aligned to the bottom. + flex: 1 1 auto; + padding: var(--#{$prefix}card-spacer-y) var(--#{$prefix}card-spacer-x); + color: var(--#{$prefix}card-color); +} + +.card-title { + margin-bottom: var(--#{$prefix}card-title-spacer-y); +} + +.card-subtitle { + margin-top: calc(-.5 * var(--#{$prefix}card-title-spacer-y)); // stylelint-disable-line function-disallowed-list + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link { + &:hover { + text-decoration: if($link-hover-decoration == underline, none, null); + } + + + .card-link { + margin-left: var(--#{$prefix}card-spacer-x); + } +} + +// +// Optional textual caps +// + +.card-header { + padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x); + margin-bottom: 0; // Removes the default margin-bottom of + color: var(--#{$prefix}card-cap-color); + background-color: var(--#{$prefix}card-cap-bg); + border-bottom: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color); + + &:first-child { + @include border-radius(var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius) 0 0); + } +} + +.card-footer { + padding: var(--#{$prefix}card-cap-padding-y) var(--#{$prefix}card-cap-padding-x); + color: var(--#{$prefix}card-cap-color); + background-color: var(--#{$prefix}card-cap-bg); + border-top: var(--#{$prefix}card-border-width) solid var(--#{$prefix}card-border-color); + + &:last-child { + @include border-radius(0 0 var(--#{$prefix}card-inner-border-radius) var(--#{$prefix}card-inner-border-radius)); + } +} + + +// +// Header navs +// + +.card-header-tabs { + margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list + margin-bottom: calc(-1 * var(--#{$prefix}card-cap-padding-y)); // stylelint-disable-line function-disallowed-list + margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list + border-bottom: 0; + + .nav-link.active { + background-color: var(--#{$prefix}card-bg); + border-bottom-color: var(--#{$prefix}card-bg); + } +} + +.card-header-pills { + margin-right: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list + margin-left: calc(-.5 * var(--#{$prefix}card-cap-padding-x)); // stylelint-disable-line function-disallowed-list +} + +// Card image +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--#{$prefix}card-img-overlay-padding); + @include border-radius(var(--#{$prefix}card-inner-border-radius)); +} + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch +} + +.card-img, +.card-img-top { + @include border-top-radius(var(--#{$prefix}card-inner-border-radius)); +} + +.card-img, +.card-img-bottom { + @include border-bottom-radius(var(--#{$prefix}card-inner-border-radius)); +} + + +// +// Card groups +// + +.card-group { + // The child selector allows nested `.card` within `.card-group` + // to display properly. + > .card { + margin-bottom: var(--#{$prefix}card-group-margin); + } + + @include media-breakpoint-up(sm) { + display: flex; + flex-flow: row wrap; + // The child selector allows nested `.card` within `.card-group` + // to display properly. + > .card { + // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4 + flex: 1 0 0%; + margin-bottom: 0; + + + .card { + margin-left: 0; + border-left: 0; + } + + // Handle rounded corners + @if $enable-rounded { + &:not(:last-child) { + @include border-end-radius(0); + + .card-img-top, + .card-header { + // stylelint-disable-next-line property-disallowed-list + border-top-right-radius: 0; + } + .card-img-bottom, + .card-footer { + // stylelint-disable-next-line property-disallowed-list + border-bottom-right-radius: 0; + } + } + + &:not(:first-child) { + @include border-start-radius(0); + + .card-img-top, + .card-header { + // stylelint-disable-next-line property-disallowed-list + border-top-left-radius: 0; + } + .card-img-bottom, + .card-footer { + // stylelint-disable-next-line property-disallowed-list + border-bottom-left-radius: 0; + } + } + } + } + } +} diff --git a/_sass/bootstrap/_carousel.scss b/_sass/bootstrap/_carousel.scss new file mode 100644 index 0000000..858b836 --- /dev/null +++ b/_sass/bootstrap/_carousel.scss @@ -0,0 +1,226 @@ +// Notes on the classes: +// +// 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically) +// even when their scroll action started on a carousel, but for compatibility (with Firefox) +// we're preventing all actions instead +// 2. The .carousel-item-start and .carousel-item-end is used to indicate where +// the active slide is heading. +// 3. .active.carousel-item is the current slide. +// 4. .active.carousel-item-start and .active.carousel-item-end is the current +// slide in its in-transition state. Only one of these occurs at a time. +// 5. .carousel-item-next.carousel-item-start and .carousel-item-prev.carousel-item-end +// is the upcoming slide in transition. + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; + @include clearfix(); +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + backface-visibility: hidden; + @include transition($carousel-transition); +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); +} + + +// +// Alternate transitions +// + +.carousel-fade { + .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; + } + + .carousel-item.active, + .carousel-item-next.carousel-item-start, + .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; + } + + .active.carousel-item-start, + .active.carousel-item-end { + z-index: 0; + opacity: 0; + @include transition(opacity 0s $carousel-transition-duration); + } +} + + +// +// Left/right controls for nav +// + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + // Use flex for alignment (1-3) + display: flex; // 1. allow flex styles + align-items: center; // 2. vertically center contents + justify-content: center; // 3. horizontally center contents + width: $carousel-control-width; + padding: 0; + color: $carousel-control-color; + text-align: center; + background: none; + border: 0; + opacity: $carousel-control-opacity; + @include transition($carousel-control-transition); + + // Hover/focus state + &:hover, + &:focus { + color: $carousel-control-color; + text-decoration: none; + outline: 0; + opacity: $carousel-control-hover-opacity; + } +} +.carousel-control-prev { + left: 0; + background-image: if($enable-gradients, linear-gradient(90deg, rgba($black, .25), rgba($black, .001)), null); +} +.carousel-control-next { + right: 0; + background-image: if($enable-gradients, linear-gradient(270deg, rgba($black, .25), rgba($black, .001)), null); +} + +// Icons for within +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: $carousel-control-icon-width; + height: $carousel-control-icon-width; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +/* rtl:options: { + "autoRename": true, + "stringMap":[ { + "name" : "prev-next", + "search" : "prev", + "replace" : "next" + } ] +} */ +.carousel-control-prev-icon { + background-image: escape-svg($carousel-control-prev-icon-bg); +} +.carousel-control-next-icon { + background-image: escape-svg($carousel-control-next-icon-bg); +} + +// Optional indicator pips/controls +// +// Add a container (such as a list) with the following class and add an item (ideally a focusable control, +// like a button) with data-bs-target for each slide your carousel holds. + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + // Use the .carousel-control's width as margin so we don't overlay those + margin-right: $carousel-control-width; + margin-bottom: 1rem; + margin-left: $carousel-control-width; + list-style: none; + + [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: $carousel-indicator-width; + height: $carousel-indicator-height; + padding: 0; + margin-right: $carousel-indicator-spacer; + margin-left: $carousel-indicator-spacer; + text-indent: -999px; + cursor: pointer; + background-color: $carousel-indicator-active-bg; + background-clip: padding-box; + border: 0; + // Use transparent borders to increase the hit area by 10px on top and bottom. + border-top: $carousel-indicator-hit-area-height solid transparent; + border-bottom: $carousel-indicator-hit-area-height solid transparent; + opacity: $carousel-indicator-opacity; + @include transition($carousel-indicator-transition); + } + + .active { + opacity: $carousel-indicator-active-opacity; + } +} + + +// Optional captions +// +// + +.carousel-caption { + position: absolute; + right: (100% - $carousel-caption-width) * .5; + bottom: $carousel-caption-spacer; + left: (100% - $carousel-caption-width) * .5; + padding-top: $carousel-caption-padding-y; + padding-bottom: $carousel-caption-padding-y; + color: $carousel-caption-color; + text-align: center; +} + +// Dark mode carousel + +.carousel-dark { + .carousel-control-prev-icon, + .carousel-control-next-icon { + filter: $carousel-dark-control-icon-filter; + } + + .carousel-indicators [data-bs-target] { + background-color: $carousel-dark-indicator-active-bg; + } + + .carousel-caption { + color: $carousel-dark-caption-color; + } +} diff --git a/_sass/bootstrap/_close.scss b/_sass/bootstrap/_close.scss new file mode 100644 index 0000000..a0813de --- /dev/null +++ b/_sass/bootstrap/_close.scss @@ -0,0 +1,40 @@ +// Transparent background and border properties included for button version. +// iOS requires the button element instead of an anchor tag. +// If you want the anchor version, it requires `href="#"`. +// See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile + +.btn-close { + box-sizing: content-box; + width: $btn-close-width; + height: $btn-close-height; + padding: $btn-close-padding-y $btn-close-padding-x; + color: $btn-close-color; + background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements + border: 0; // for button elements + @include border-radius(); + opacity: $btn-close-opacity; + + // Override 's hover style + &:hover { + color: $btn-close-color; + text-decoration: none; + opacity: $btn-close-hover-opacity; + } + + &:focus { + outline: 0; + box-shadow: $btn-close-focus-shadow; + opacity: $btn-close-focus-opacity; + } + + &:disabled, + &.disabled { + pointer-events: none; + user-select: none; + opacity: $btn-close-disabled-opacity; + } +} + +.btn-close-white { + filter: $btn-close-white-filter; +} diff --git a/_sass/bootstrap/_containers.scss b/_sass/bootstrap/_containers.scss new file mode 100644 index 0000000..83b3138 --- /dev/null +++ b/_sass/bootstrap/_containers.scss @@ -0,0 +1,41 @@ +// Container widths +// +// Set the container width, and override it for fixed navbars in media queries. + +@if $enable-container-classes { + // Single container class with breakpoint max-widths + .container, + // 100% wide container at all breakpoints + .container-fluid { + @include make-container(); + } + + // Responsive containers that are 100% wide until a breakpoint + @each $breakpoint, $container-max-width in $container-max-widths { + .container-#{$breakpoint} { + @extend .container-fluid; + } + + @include media-breakpoint-up($breakpoint, $grid-breakpoints) { + %responsive-container-#{$breakpoint} { + max-width: $container-max-width; + } + + // Extend each breakpoint which is smaller or equal to the current breakpoint + $extend-breakpoint: true; + + @each $name, $width in $grid-breakpoints { + @if ($extend-breakpoint) { + .container#{breakpoint-infix($name, $grid-breakpoints)} { + @extend %responsive-container-#{$breakpoint}; + } + + // Once the current breakpoint is reached, stop extending + @if ($breakpoint == $name) { + $extend-breakpoint: false; + } + } + } + } + } +} diff --git a/_sass/bootstrap/_dropdown.scss b/_sass/bootstrap/_dropdown.scss new file mode 100644 index 0000000..8899d25 --- /dev/null +++ b/_sass/bootstrap/_dropdown.scss @@ -0,0 +1,249 @@ +// The dropdown wrapper (`
`) +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; + + // Generate the caret automatically + @include caret(); +} + +// The dropdown menu +.dropdown-menu { + // scss-docs-start dropdown-css-vars + --#{$prefix}dropdown-zindex: #{$zindex-dropdown}; + --#{$prefix}dropdown-min-width: #{$dropdown-min-width}; + --#{$prefix}dropdown-padding-x: #{$dropdown-padding-x}; + --#{$prefix}dropdown-padding-y: #{$dropdown-padding-y}; + --#{$prefix}dropdown-spacer: #{$dropdown-spacer}; + @include rfs($dropdown-font-size, --#{$prefix}dropdown-font-size); + --#{$prefix}dropdown-color: #{$dropdown-color}; + --#{$prefix}dropdown-bg: #{$dropdown-bg}; + --#{$prefix}dropdown-border-color: #{$dropdown-border-color}; + --#{$prefix}dropdown-border-radius: #{$dropdown-border-radius}; + --#{$prefix}dropdown-border-width: #{$dropdown-border-width}; + --#{$prefix}dropdown-inner-border-radius: #{$dropdown-inner-border-radius}; + --#{$prefix}dropdown-divider-bg: #{$dropdown-divider-bg}; + --#{$prefix}dropdown-divider-margin-y: #{$dropdown-divider-margin-y}; + --#{$prefix}dropdown-box-shadow: #{$dropdown-box-shadow}; + --#{$prefix}dropdown-link-color: #{$dropdown-link-color}; + --#{$prefix}dropdown-link-hover-color: #{$dropdown-link-hover-color}; + --#{$prefix}dropdown-link-hover-bg: #{$dropdown-link-hover-bg}; + --#{$prefix}dropdown-link-active-color: #{$dropdown-link-active-color}; + --#{$prefix}dropdown-link-active-bg: #{$dropdown-link-active-bg}; + --#{$prefix}dropdown-link-disabled-color: #{$dropdown-link-disabled-color}; + --#{$prefix}dropdown-item-padding-x: #{$dropdown-item-padding-x}; + --#{$prefix}dropdown-item-padding-y: #{$dropdown-item-padding-y}; + --#{$prefix}dropdown-header-color: #{$dropdown-header-color}; + --#{$prefix}dropdown-header-padding-x: #{$dropdown-header-padding-x}; + --#{$prefix}dropdown-header-padding-y: #{$dropdown-header-padding-y}; + // scss-docs-end dropdown-css-vars + + position: absolute; + z-index: var(--#{$prefix}dropdown-zindex); + display: none; // none by default, but block on "open" of the menu + min-width: var(--#{$prefix}dropdown-min-width); + padding: var(--#{$prefix}dropdown-padding-y) var(--#{$prefix}dropdown-padding-x); + margin: 0; // Override default margin of ul + @include font-size(var(--#{$prefix}dropdown-font-size)); + color: var(--#{$prefix}dropdown-color); + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + list-style: none; + background-color: var(--#{$prefix}dropdown-bg); + background-clip: padding-box; + border: var(--#{$prefix}dropdown-border-width) solid var(--#{$prefix}dropdown-border-color); + @include border-radius(var(--#{$prefix}dropdown-border-radius)); + @include box-shadow(var(--#{$prefix}dropdown-box-shadow)); + + &[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--#{$prefix}dropdown-spacer); + } + + @if $dropdown-padding-y == 0 { + > .dropdown-item:first-child, + > li:first-child .dropdown-item { + @include border-top-radius(var(--#{$prefix}dropdown-inner-border-radius)); + } + > .dropdown-item:last-child, + > li:last-child .dropdown-item { + @include border-bottom-radius(var(--#{$prefix}dropdown-inner-border-radius)); + } + + } +} + +// scss-docs-start responsive-breakpoints +// We deliberately hardcode the `bs-` prefix because we check +// this custom property in JS to determine Popper's positioning + +@each $breakpoint in map-keys($grid-breakpoints) { + @include media-breakpoint-up($breakpoint) { + $infix: breakpoint-infix($breakpoint, $grid-breakpoints); + + .dropdown-menu#{$infix}-start { + --bs-position: start; + + &[data-bs-popper] { + right: auto; + left: 0; + } + } + + .dropdown-menu#{$infix}-end { + --bs-position: end; + + &[data-bs-popper] { + right: 0; + left: auto; + } + } + } +} +// scss-docs-end responsive-breakpoints + +// Allow for dropdowns to go bottom up (aka, dropup-menu) +// Just add .dropup after the standard .dropdown class and you're set. +.dropup { + .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--#{$prefix}dropdown-spacer); + } + + .dropdown-toggle { + @include caret(up); + } +} + +.dropend { + .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--#{$prefix}dropdown-spacer); + } + + .dropdown-toggle { + @include caret(end); + &::after { + vertical-align: 0; + } + } +} + +.dropstart { + .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--#{$prefix}dropdown-spacer); + } + + .dropdown-toggle { + @include caret(start); + &::before { + vertical-align: 0; + } + } +} + + +// Dividers (basically an `
`) within the dropdown +.dropdown-divider { + height: 0; + margin: var(--#{$prefix}dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--#{$prefix}dropdown-divider-bg); + opacity: 1; // Revisit in v6 to de-dupe styles that conflict with
element +} + +// Links, buttons, and more within the dropdown menu +// +// `