diff --git a/assets/js/obs.js b/assets/js/obs.js index 7ce28c25..0e4f9ac3 100644 --- a/assets/js/obs.js +++ b/assets/js/obs.js @@ -62,3 +62,18 @@ function initSliders() { } } document.addEventListener('DOMContentLoaded', initSliders) + +////////////////////////////////////////////// + +function initTocHide() { + // Fix to hide TOC menu when clicking a link inside -- not easy with native HTML + // without making an ugly DOM. + + const main = document.getElementById('mobile-menu-main') + for (const item of Array.from(document.querySelectorAll('aside.toc a'))) { + item.addEventListener('click', () => { + main.checked = true + }) + } +} +document.addEventListener('DOMContentLoaded', initTocHide) diff --git a/assets/scss/_nav.scss b/assets/scss/_nav.scss deleted file mode 100644 index 2b7b87b9..00000000 --- a/assets/scss/_nav.scss +++ /dev/null @@ -1,421 +0,0 @@ -// -// Main navbar -// - -.td-navbar-cover { - @include media-breakpoint-up(md) { - background: transparent !important; - - .nav-link { - text-shadow: 1px 1px 2px $dark; - } - } - - &.navbar-bg-onscroll .nav-link { - text-shadow: none; - } -} - -.navbar-bg-onscroll { - background: $primary !important; - opacity: inherit; -} - -.td-navbar { - @extend .navbar; - - background: $primary; - min-height: 4rem; - margin: 0; - z-index: 32; - - .navbar-brand { - text-transform: none; - - &__name { - font-weight: $font-weight-bold; - } - - svg { - display: inline-block; - margin: 0 10px; - height: 30px; - } - } - - .navbar-nav { - padding-top: $spacer * 0.5; - white-space: nowrap; - } - - .nav-link { - text-transform: none; - font-weight: $font-weight-bold; - } - - // For .td-search__input styling, see _search.scss - - .dropdown { - min-width: 100px; - } - - @include media-breakpoint-up(md) { - position: fixed; - top: 0; - width: 100%; - - .nav-item { - padding-inline-end: $spacer * 0.5; - } - - .navbar-nav { - padding-top: 0 !important; - } - } - - @include media-breakpoint-down(lg) { - .td-navbar-nav-scroll { - max-width: 100%; - height: 2.5rem; - overflow: hidden; - font-size: 0.9rem; - } - - .navbar-brand { - margin-right: 0; - } - - .navbar-nav { - padding-bottom: 2rem; - overflow-x: auto; - } - } -} - -// Icons -#main_navbar { - li i { - padding-right: 0.5em; - - &:before { - display: inline-block; - text-align: center; - min-width: 1em; - } - } - .alert { - background-color: inherit; - padding: 0; - color: $secondary; - border: 0; - font-weight: inherit; - - &:before { - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - font-family: $font-awesome-font-name; - font-weight: 900; - content: "\f0d9"; - padding-left: 0.5em; - padding-right: 0.5em; - } - } -} - -// Foldable sidebar menu -nav.foldable-nav { - td-section-nav { - position: relative; - } - - td-section-nav label { - margin-bottom: 0; - width: 100%; - } - - .td-sidebar-nav__section, - .with-child ul { - list-style: none; - padding: 0; - margin: 0; - } - - .ul-1 > li { - padding-left: 1.5em; - } - - ul.foldable { - display: none; - } - - input:checked ~ ul.foldable { - display: block; - } - - input[type="checkbox"] { - display: none; - } - - .with-child, - .without-child { - position: relative; - padding-left: 1.5em; - } - - .ul-1 .with-child > label:before { - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - -webkit-font-smoothing: antialiased; - font-family: $font-awesome-font-name; - font-weight: 900; - content: "\f0da"; - position: absolute; - left: 0.1em; - padding-left: 0.4em; - padding-right: 0.4em; - font-size: 1em; - color: $gray-900; - transition: all 0.5s; - &:hover { - transform: rotate(90deg); - } - } - - .ul-1 .with-child > input:checked ~ label:before { - color: $primary; - transform: rotate(90deg); - transition: transform 0.5s; - } - - .with-child ul { - margin-top: 0.1em; - } -} - -@media (hover: hover) and (pointer: fine) { - nav.foldable-nav { - .ul-1 .with-child > label:hover:before { - color: $primary; - transition: color 0.3s; - } - - .ul-1 .with-child > input:checked ~ label:hover:before { - color: $primary; - transition: color 0.3s; - } - } -} - - -/* -This file was taken under apache license from https://github.com/SeleniumHQ/seleniumhq.github.io/commit/abbba6c20e14c27eb7003999a3e084b5a733fe71#diff-f6622ba22bb7f8310f9c41e73bdf83f441d53360b0b5cf100595cdcd3caa7850 -The initial commit was made without modifications - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2024 Software Freedom Conservancy (SFC) - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - */ diff --git a/assets/scss/_styles_project.scss b/assets/scss/_styles_project.scss deleted file mode 100644 index 38865d99..00000000 --- a/assets/scss/_styles_project.scss +++ /dev/null @@ -1,632 +0,0 @@ -@import "./_variables_project.scss"; -@import "nav"; - - -body { - line-height: 1.7em; -} - -.award { - width: 250px; - transform: rotate(0deg) translate(0,-50pt); - align: left; -} -.td-content { - max-width: 60rem; -} - -.btn { - border-radius: 0.2rem; - - &-lg { - border-radius: 0.4rem; - } - - &-sm { - border-radius: 0.2rem; - } -} - -.btn-outline-light:hover { - background-color: #f1f1f6; - border-color: #f1f1f6; -} - -.youtube-video-wrapper { - display: block; - position: relative; - padding-bottom: 56.25%; - height: 0; - overflow: hidden; - width: 100%; - background: #000; - margin: 3rem 0; - - iframe { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: 100; - background: transparent; - } - - img { - object-fit: cover; - display: block; - left: 0; - bottom: 0; - margin: 0 auto; - max-width: 100%; - width: 100%; - position: absolute; - right: 0; - top: 0; - border: none; - height: auto; - cursor: pointer; - -webkit-transition: 0.4s all; - -moz-transition: 0.4s all; - transition: 0.4s all; - } - - &:hover img { - -webkit-filter: brightness(75%); - } - - .play { - height: 72px; - width: 72px; - left: 50%; - top: 50%; - margin-left: -36px; - margin-top: -36px; - position: absolute; - background: url("../images/play.png") no-repeat; - z-index: 1; - cursor: pointer; - } - - .comment { - left: 50%; - top: 50%; - transform: translate(-50%, 50px); - position: absolute; - z-index: 1; - cursor: pointer; - color: white; - } -} - -.ideal-image-slider { - max-width: 60rem; - margin: 2rem 0; -} - -.slider.small { - max-width: 30rem; -} - -.print-only .noprint, -.noprint .print-only { - display: none; -} - -pre { - max-width: 100%; -} - - -@media print { - html, - body { - font-size: 10pt; - min-width: 0 !important; - } - - .noprint { - display: none; - } - - .td-main main { - max-width: 100% !important; - flex: 1 1 0; - } - - .td-content { - max-width: 100%; - // columns: 2; - column-gap: 4rem; - font-size: 1rem; - - p, ul, ol, .alert { - line-height: 1.7em; - font-size: 1em; - } - - > h1, - > h2, - > h3, - > p, - > ul, - > ol, - > .alert, - > .highlight, - > .lead, - > dl dd, - > pre, - .footnotes, - > blockquote { - // column-span: all; - max-width: 100%; - } - - li { - margin-bottom: 0 !important; - } - - h2 { - font-size: 1.6em; - column-span: all; - // page-break-before: always; - } - h3 { - font-size: 1.3em; - } - - .print-figures { - counter-reset: step-figure; - margin: 1rem 0; - display: grid; - grid-template-columns: 1fr 1fr; - gap: 0.5rem; - } - - figure, .card { - // display: block; - position: relative; - // width: calc(50% - 0.25rem - 2px); - vertical-align: top; - margin: 0; - padding: 0 !important; - border: 1px solid black; - border-radius: 2mm; - overflow: hidden; - - break-inside: avoid; - counter-increment: step-figure; - figcaption, .card-body { - position: relative; - margin: 0; - padding: 0.2rem 0.5rem !important; - border-top: inherit; - } - } - - // .card { - // padding: 0 !important; - // border: 1px solid black; - // border-radius: 2mm; - // break-inside: avoid; - // overflow: hidden; - // - // .card-body { - // - // } - // } - - .section-index, - // "Last changed" row - > .text-muted:last-child { - display: none; - } - - // Uncomment this to print without figures and images - // .card, .print-figures, img { - // display: none; - // } - - .alert { - border-width: 2px; - break-inside: avoid; - } - - > table { - margin: 1rem auto; - break-inside: avoid; - - td, thead th { - border: 1px solid black; - padding: 0.25rem 0.75rem; - } - } - } -} - -@media screen { - .print-only { - display: none; - } -} - -#td-cover-block-0 { - background-position: center; -} - -.container { - figure { - img { - max-width: 100%; - } - } -} - -.homepage-container { - font-size: 13pt; -} - -.lead { - font-weight: 500; -} - -.donations { - background: white; - color: #212730; - border: 1px solid #ddd; - border-radius: 4px; - padding: 1rem 2rem; - display: inline-block; - margin: 1rem auto; -} - -.accordion .card-header { - cursor: pointer; - transition: background 0.1s; - - &:hover { - background-color: #fff; - } -} - -.alert.alert-info, -.alert.alert-warning, -.alert.alert-success { - border: 0; - border-radius: 4px; - font-size: 1rem; - - .alert-heading { - font-size: 1.2rem; - } - - @media print { - border-width: 2px; - border-style: solid; - } -} - -.alert.alert-info { - background: #e1f5fe; - border-color: #1e88e5; - - .alert-heading { - color: #1e88e5; - } -} - -.alert.alert-warning { - background: #ffe7e4; - border-color: #ed6a5a; - - .alert-heading { - color: #ed6a5a; - } -} - -.alert.alert-success { - background: #ccefc6; - border-color: #199f67; - - .alert-heading { - color: #199f67; - } -} - - -.alert > ul:last-child, -.alert > p:last-child { - margin-bottom: 0; -} - -.dropdown-item { - padding-left: 1rem; - - &:active, - &.active { - background: none; - font-weight: bold; - } -} - -.td-content, -.content { - blockquote { - padding: 0.5rem 1.5rem; - margin-left: 1rem; - border-left: 4px solid #ddd; - color: #777; - } -} - -.td-sidebar-nav { - padding: 1rem; - font-family: "Open Sans"; - - ul { - list-style: none; - padding: 0; - margin: 0; - - ul ul { - padding-left: 1.5rem; - } - - li { - margin-bottom: 2px; - } - } - - & > ul > li { - margin-bottom: 1rem; - - & > a { - font-weight: 700; - text-transform: uppercase; - } - } - - a { - display: block; - color: inherit; - border-radius: 3px; - padding: 0.25rem 0.75rem; - - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - - &:hover { - color: inherit; - background: #f6f6f6; - } - - &.current-page { - font-weight: 700; - color: $link-color; - } - } -} - -@media (min-width: 768px) { - - .td-page-meta { - top: 4rem; - position: sticky; - } - .td-sidebar-nav { - // max-height: calc(100vh - 64px); - max-height: none; - overflow: initial; - } - - .td-sidebar__inner { - height: auto; - min-height: calc(100vh - 128px); - } - - .td-docs .td-main { - display: flex; - - .td-sidebar { - max-width: 20rem; - min-width: 15rem; - flex: 1 1 0; - margin-right: 2rem; - } - - .td-toc { - order:2; - .td-toc { - top: 4rem; - position: sticky; - border-left: solid; - border-left-width: 1pt; - border-left-color: rgb(222, 226, 230); - max-width: 20rem; - min-width: 12rem; - flex: 1 1 0; - margin-left: 2rem; - padding: 1rem; - line-height: 1.2; - - #TableOfContents a { - color: inherit; - &:hover { - color: #72A1E5; - } - } - - li ul { - margin-bottom: 0.5em; - } - - li li { - margin-left: 1.5em; - font-size: 0.9em; - list-style: inherit; - display: list-item; - } - li ul { - list-style: decimal; - } - } - } - - > main { - flex: 4 4 0; - } - } -} - -.feature-icon { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - font-size: 200px; - opacity: 0.06; - pointer-events: none; -} - -.feature-cell { - display: flex; - flex-direction: column; -} - -address { - padding-left: 2rem; - font-size: 1.1em; - line-height: 1.5em; - font-weight: 100; -} - -footer { - background: $primary; - color: white; - font-size: 0.8rem; - min-height: 0; - flex: 0 0 auto; - padding: 1rem 0; -} - -.footer-copyright { - line-height: 1.5em; -} - - -.print-qr-link { - border: 1px solid black; - background: white; - - display: none; - @media print { - display: flex; - } - align-items: center; - overflow: hidden; - padding: 1mm; - padding-left: 4mm; - - img { - width: 3cm; - flex: 0 0 auto; - } - - p { - flex: 1 1 0; - margin: 0; - padding: 0; - font-size: 11pt; - overflow: hidden; - word-wrap: break-word; - } - - a { - color: inherit; - display: block; - text-decoration: inherit; - font-weight: bold; - font-family: $font-family-monospace; - white-space: wrap; - letter-spacing: -0.5pt; - } -} - -@page { - size: A4 portrait; - margin: 0.6in; -} - -.td-default main section.device-types-row { - background: #F8F8F8; - padding: 0; -} - -.device-type-cell { - text-align: center; - padding-block: 4rem; - display: flex; - flex-direction: column; - - .label { - order: -2; - height: 40px; - align-self: center; - display: flex; - justify-content: center; - align-items: center; - padding: 0 1.5rem; - border-radius: 1000px; - margin-bottom: 1rem; - background: #EEE; - text-transform: uppercase; - letter-spacing: 0.7pt; - font-weight: 700; - font-size: 80%; - } - - h4 { - order: -1; - } - - &.light { - background: #FFF; - } - - img { - margin-block: 1rem; - width: 70%; - height: 200px; - object-fit: contain; - align-self: center; - } - - h4 > span { - display: block; - font-size: 120%; - opacity: 0.5; - margin-top: 0.2rem; - } - - &.construction { - .label { - background: #ffd600; - } - img { - opacity: 0.3; - } - } - - &.recommended { - .label { - background: #0029a7; - color: white; - } - } - - ul { - text-align: left; - // align-self: center; - } -} diff --git a/assets/scss/baseline.scss b/assets/scss/baseline.scss new file mode 100644 index 00000000..d18be2b5 --- /dev/null +++ b/assets/scss/baseline.scss @@ -0,0 +1,193 @@ +* { + box-sizing: border-box; +} + +html, body { + line-height: 1.7; + font-family: $font-family-base; + padding: 0; + margin: 0; +} + +.content-grid { + --padding-inline: 1rem; + --content-max-width: 140ch; + + display: grid; + grid-template-columns: + [full-width-start] #{"minmax(var(--padding-inline), 1fr)"} + [content-start] + #{"repeat(12, [col-start] calc(min(100% - (var(--padding-inline) * 2), var(--content-max-width)) / 12 - var(--padding-inline)) [col-end] var(--padding-inline) )"} + [content-end] + #{"minmax(var(--padding-inline), 1fr) [full-width-end]"}; +} + +.content-grid > :not(.full-width), +.full-width > :not(.full-width) { + grid-column: content; +} + +.content-grid > .full-width { + grid-column: full-width; +} + +.content-grid .content-grid { + display: grid; + grid-template-columns: inherit; +} + +a { + text-decoration: none; + + &, &:visited { + color: $link-color; + } + + &:hover { + color: $link-color-light; + } +} + +h1, h2, h3, h4, h5, h6 { + font-weight: 500; + line-height: 1.2em; + + &:first-child { + margin-block-start: 0; + } +} + +h1 { + font-size: 2.3rem; +} + +h2 { + font-size: 1.9rem; +} + +h3 { + font-size: 1.5rem; +} + +h4, h5, h6 { + font-weight: 700; +} +h4 { + font-size: 1.3rem; +} + +h5 { + font-size: 1.15rem; +} + +h6 { + font-size: 1rem; +} + +section { + padding-block: 4rem; + min-width: 0; +} + +figure { + text-align: center; + > a > img { + max-width: 100%; + } +} + +section.arrow { + position: relative; +} + +section.arrow::after { + --width: 3rem; + --height: 2.5rem; + + left: 50%; + margin-left: #{"calc(-1 * var(--width))"}; + bottom: #{"calc(-1 * var(--height))"}; + border-style: solid; + border-width: var(--height) var(--width) 0; + border-color: $primary transparent transparent transparent; + z-index: 3; + position: absolute; + content: ""; +} + +.docs { + .docs-footer { + font-size: $font-size-small; + } +} + +pre { + max-width: 100%; +} + +blockquote { + padding: 0.5rem 1.5rem; + margin-left: 1rem; + border-left: 0.25rem solid #ddd; + color: #777; +} + +table { + border-collapse: collapse; + margin-block: 2rem; +} + +td, th { + padding: 0.25rem 0.5rem; + border: 1px solid $primary-1; + border-width: 1px 0; + vertical-align: top; +} + +th { + text-align: left; + border-width: 2px 0; +} +tr:last-child td { + border-bottom-width: 2px; +} + +.table-wide { + overflow: auto; + + table { + width: 100%; + min-width: 60ch; + } +} + +.breadcrumb { + list-style: none; + display: flex; + flex-wrap: wrap; + padding: 0; + font-size: $font-size-small; + + li { + display: inline-block; + + &.active { + font-weight: 500; + } + + &:not(:last-child)::after { + display: inline-block; + content: '/'; + scale: 1.2; + opacity: 0.5; + margin-inline: 0.5rem; + } + } +} + +address { + padding-left: 2rem; + font-size: 1.1em; + line-height: 1.5em; + font-weight: 100; +} diff --git a/assets/scss/dark.scss b/assets/scss/dark.scss new file mode 100644 index 00000000..f94f30a4 --- /dev/null +++ b/assets/scss/dark.scss @@ -0,0 +1,40 @@ +// Dark mode, as detected by the media query + +:root { + --border-color: rgba(0, 0, 0, 0.1); + --background: #FFFFFF; + --foreground: #101010; + --background-1: #f1f1f6; + --background-2: #e9e9e9; + + --dark-text: #101010; + + --faq-question-color: #c1ebfb; +} + +@media (prefers-color-scheme: dark) { + :root { + --border-color: rgba(255, 255, 255, 0.2); + --background: #101010; + --background-1: #303030; + --background-2: #505050; + --foreground: #FFFFFF; + --faq-question-color: #07445d; + color-scheme: dark; + color: var(--foreground); + background: var(--background); + } + + .alert-info { + background: adjust-color(blue, $alpha: -0.8); + } + + .alert-warning { + background: adjust-color(red, $alpha: -0.8); + } + + .alert-success { + background: adjust-color(green, $alpha: -0.8); + } + +} diff --git a/assets/scss/features.scss b/assets/scss/features.scss new file mode 100644 index 00000000..0a97241e --- /dev/null +++ b/assets/scss/features.scss @@ -0,0 +1,588 @@ +// Big intro text in a page or article + +.lead { + font-weight: 500; + font-size: 1.15rem; +} + +// Donations IBAN box + +.donations { + background: white; + color: #212730; + border: 1px solid #ddd; + border-radius: 0.25rem; + padding: 1rem 2rem; + display: inline-block; + margin: 1rem auto; +} + +// Feature boxes + +.feature-cell { + display: flex; + flex-direction: column; + position: relative; + + @media ($media-mobile) { + & + & { + margin-block-start: 2rem; + } + } + + .button { + margin-top: auto; + align-self: flex-start; + } + + h3 { + margin-block: 0; + } + + > .inline-svg { + position: absolute; + left: 50%; + top: 50%; + translate: -50% -50%; + width: 60%; + height: auto; + opacity: 0.06; + pointer-events: none; + } +} + +// Buttons + +.button { + background: var(--background-1); + box-shadow: $border-color 0 0.25rem; + border: 1px solid $border-color; + + &, &:visited, &:hover { + color: var(--foreground); + } + + &:hover { + background: var(--background); + } + + .primary &, .primary-1 &, .stage & { + background: rgba(255, 255, 255, 0.7); + box-shadow: rgba(0, 0, 0, 0.6) 0 0.25rem; + border: none; + + &, &:visited, &:hover { + color: var(--dark-text); + } + + &:hover { + background: white; + } + } + + text-decoration: none; + padding: 0.4em 1.25em 0.3em; + border-radius: 0.25rem; + font-weight: 500; + + @media (prefers-reduced-motion: no-preference) { + transition: all 0.25s ease-out; + + &:hover { + transform: translateY(-0.15rem); + } + } +} + +.action-buttons { + display: flex; + gap: 1em; + margin-block-start: 2rem; + flex-wrap: wrap; + align-items: center; + justify-content: center; +} + + +// Alerts + +.alert { + border: 0; + border-radius: 0.25rem; + font-size: 1rem; + padding: 1rem; + margin-block: 1rem; + + .alert-heading { + margin: 0; + margin-block-end: 0.5rem; + font-size: 1.15rem; + font-weight: 500; + } + + @media print { + border-width: 2px; + border-style: solid; + } +} + +.alert-info { + background: #e1f5fe; + border-color: #1e88e5; + + .alert-heading { + color: #1e88e5; + } +} + +.alert-warning { + background: #ffe7e4; + border-color: #ed6a5a; + + .alert-heading { + color: #ed6a5a; + } +} + +.alert-success { + background: #ccefc6; + border-color: #199f67; + + .alert-heading { + color: #199f67; + } +} + +.alert > ul:last-child, +.alert > p:last-child { + margin-bottom: 0; +} + +// Image slider + +.ideal-image-slider { + max-width: 60rem; + margin: 2rem 0; +} + +.slider.small { + max-width: 30rem; +} + +// Youtube video embed + +.youtube-video-wrapper { + display: block; + position: relative; + padding-bottom: 56.25%; + height: 0; + overflow: hidden; + width: 100%; + background: #000; + margin: 1rem 0; + + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 100; + background: transparent; + } + + img { + object-fit: cover; + display: block; + left: 0; + bottom: 0; + margin: 0 auto; + max-width: 100%; + width: 100%; + position: absolute; + right: 0; + top: 0; + border: none; + height: auto; + cursor: pointer; + -webkit-transition: 0.4s all; + -moz-transition: 0.4s all; + transition: 0.4s all; + } + + &:hover img { + -webkit-filter: brightness(75%); + } + + .play { + height: 5rem; + width: 5rem; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + position: absolute; + background: url("../images/play.png") no-repeat; + background-size: 100%; + z-index: 1; + cursor: pointer; + } + + .comment { + left: 50%; + top: 50%; + transform: translate(-50%, 3rem); + position: absolute; + z-index: 1; + cursor: pointer; + color: white; + text-align: center; + text-shadow: 0 0 0.25rem black; + font-weight: 500; + } +} + +// Main stage on home page + +.stage { + position: relative; + overflow: clip; + + &::before { + content: ''; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + background: $primary; + z-index: -1; + } + &::after { + content: ''; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + background: url('/featured-background.jpg'); + background-position: center; + background-size: cover; + z-index: -1; + filter: blur(3px); + scale: 1.01; + + @media (prefers-reduced-motion: no-preference) { + animation: stage-scroll-effect linear; + animation-duration: 1ms; + animation-timeline: view(); + animation-range: exit #{"-"}$menu-height; + } + } + + height: 66vh; + position: relative; + margin: 0; + + display: flex !important; + flex-direction: column; + align-items: center; + justify-content: center; + color: white; + gap: 1em; + text-align: center; + padding-inline: 1rem; + + > h2 { + font-size: #{"min(max(1.5rem, 4.5vw), 4rem)"}; + font-weight: 300; + margin: 0; + text-shadow: 0 0 1rem black; + + @media ($media-mobile) { + font-weight: 500; + } + } + + > p { + font-size: #{"min(max(1rem, 1.5vw), 1.5rem)"}; + font-weight: 500; + margin: 0; + text-shadow: 0 0 5px black; + } + + // Special banderole on the stage + .banderole { + display: block; + position: absolute; + left: 0; + top: 0; + z-index: 100; + width: #{"min(50vw, 25ch)"}; + padding: 0; + transform-origin: 33% 33%; + + @media (prefers-reduced-motion: no-preference) { + opacity: 0.8; + transition: all 0.5s; + + &:hover { + scale: 1.1; + opacity: 1; + } + } + + > img { + width: 100%; + margin: 0; + } + } +} + +@keyframes stage-scroll-effect { + from {} + to {opacity: 0; scale: 1.2; translate: 0 20%;} +} + +// Special device variants page + +.device-types-row { + background: #F8F8F8; + padding: 0; +} + +.device-type-cell { + text-align: center; + padding-block: 4rem; + display: flex; + flex-direction: column; + + .label { + order: -2; + height: 2rem; + align-self: center; + display: flex; + justify-content: center; + align-items: center; + padding: 0 1.5rem; + border-radius: 1000px; + margin-bottom: 1rem; + background: #EEE; + text-transform: uppercase; + letter-spacing: 0.7pt; + font-weight: 700; + font-size: 80%; + } + + h4 { + order: -1; + } + + &.light { + background: #FFF; + } + + img { + margin-block: 1rem; + width: 70%; + height: 8rem; + object-fit: contain; + align-self: center; + } + + h4 > span { + display: block; + font-size: 120%; + opacity: 0.5; + margin-top: 0.2rem; + } + + &.construction { + .label { + background: #ffd600; + } + img { + opacity: 0.3; + } + } + + &.recommended { + .label { + background: #0029a7; + color: white; + } + } + + ul { + text-align: left; + // align-self: center; + } + + .button { + margin-top: auto; + align-self: center; + } +} + +// Resistors + +.resistor { + font-size: $font-size-small; + text-align: center; + svg { + display: block; + margin: 0 auto 0.5rem; + } +} + +// Buttons on bottom of blog entry to move around + +.blog-pager { + margin-block-start: 4rem; + font-size: 0.8rem; + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; +} + +// Blog entry list + +ul.blog-posts, +ul.section-index { + list-style: none; + padding: 0; + + display: grid; + grid-template-columns: 1fr; + gap: 2rem; + + > li { + border: 1px solid $border-color; + border-radius: 0.25rem; + padding: 1rem; + min-width: 0; + overflow: hidden; + + h5 { + font-size: 1.2rem; + font-weight: bold; + margin-block-start: 0; + margin-block-end: 0; + } + } +} + +time { + font-weight: 700; +} + +@media ($media-desktop) { + ul.blog-posts, + ul.section-index { + grid-template-columns: 1fr 1fr; + } + +} + +ul.blog-posts > li > h5 > a { + color: inherit; +} + +.blog-post { + time + h1 { + margin-top: 0; + } +} + +// Icons + +.inline-svg { + display: inline-block; + height: 1rem; + aspect-ratio: 1; + translate: 0 15%; + + svg { + margin: 0; + padding: 0; + width: 100%; + height: 100%; + } +} + +// FAQ + +// @media ($media-desktop) { +// .faq-list { +// display: grid; +// gap: 4rem; +// grid-template-columns: 1fr 1fr; +// } +// } + +.faq-entry { + --size: 1rem; // triangle + + margin-block: 1rem; + + &.single { + margin-block: 4rem; + } + + .question { + background: var(--faq-question-color); + padding: 1rem 2rem; + border-radius: 1rem 1rem 1rem 0; + margin: 0; + margin-left: var(--size); + margin-right: #{"min(10%, 5rem)"}; + margin-block-end: 0.5rem; + font-size: inherit; + font-weight: 500; + color: inherit; + position: relative; + + a { + color: inherit; + } + + &::after { + position: absolute; + content: ""; + left: 0; + bottom: 0; + transform: translate(-100%, 0); + border-style: solid; + border-width: var(--size) var(--size) 0; + border-color: transparent var(--faq-question-color) transparent transparent; + z-index: 3; + } + } + + .response { + p, ul { + background: var(--background-1); + padding: 1rem 2rem; + border-radius: 1rem 1rem 0 1rem; + margin-left: #{"min(10%, 5rem)"}; + margin-right: var(--size); + margin-block: 0.25rem; + position: relative; + + &::after { + position: absolute; + content: ""; + right: 0; + bottom: 0; + transform: translate(100%, 0); + border-style: solid; + border-width: 0 var(--size) var(--size) 0; + border-color: transparent transparent var(--background-1) transparent; + z-index: 3; + } + } + ul { + padding-left: 4rem; + } + } +} diff --git a/assets/scss/layout.scss b/assets/scss/layout.scss new file mode 100644 index 00000000..6ddae528 --- /dev/null +++ b/assets/scss/layout.scss @@ -0,0 +1,382 @@ + +#header { + background: $primary; + color: white; + display: flex; + align-items: center; + height: $menu-height; + padding: 0 1rem; + position: sticky; + top: 0; + z-index: 10000; + + .site-title { + color: inherit; + white-space: nowrap; + text-decoration: none; + font-weight: 500; + font-size: 1.3rem; + // text-transform: uppercase; + } + + .site-icon { + margin-right: 1rem; + display: block; + padding: 0; + + svg { + width: 3rem; + height: 3rem; + margin: 0; + display: block; + align-self: center; + } + } + + nav.menu { + margin-inline-start: auto; + display: flex; + align-self: stretch; + align-items: stretch; + + > ul { + list-style: none; + display: flex; + align-items: stretch; + padding: 0; + margin: 0; + + > li { + position: relative; + display: flex; + align-items: stretch; + + > a, span { + font-weight: 500; + align-self: stretch; + display: flex; + align-items: center; + padding: 0 1rem; + text-decoration: none; + color: inherit; + font-weight: 500; + font-size: 1.15rem; + cursor: pointer; + } + + > ul { + display: none; + position: absolute; + right: 0; + top: 100%; + background: $primary-1; + margin: 0; + padding: 0.5rem 0; + + > li { + display: block; + white-space: nowrap; + + > a, > span { + color: inherit; + display: block; + text-decoration: none; + padding: 0.25rem 2rem 0.25rem 1rem; + + &:hover, &:focus-within { + background: $primary-2; + } + } + } + } + + &:focus-within, &:hover { + > ul { + display: block; + } + + > a, span { + background: $primary-1; + } + } + } + } + } +} + +nav.sidebar { + padding: 1rem; + font-family: "Open Sans"; + + ul { + list-style: none; + padding: 0; + margin: 0; + + ul ul { + padding-left: 1.5rem; + } + + li { + margin-bottom: 2px; + } + } + + & > ul > li { + margin-bottom: 1rem; + + & > a { + font-weight: 700; + text-transform: uppercase; + } + } + + a { + display: block; + color: inherit; + border-radius: 0.25rem; + padding: 0.25rem 0.75rem; + + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + text-decoration: none; + + &:hover { + color: inherit; + background: var(--background-1); // #f6f6f6; + } + + &.current-page { + font-weight: 700; + color: $link-color; + } + } +} + +aside.toc { + padding: 1rem; + + h6 { + margin: 0; + font-weight: 700; + text-transform: uppercase; + padding: 0.25rem 0.75rem; + line-height: inherit; + } + + ul { + padding-left: 3ch; + // margin: 0; + list-style: decimal; + } + + ul ul { + padding-left: 0; + list-style: decimal; + margin-bottom: 0.5em; + } + + li li { + margin-left: 1.5em; + font-size: 0.9em; + list-style: inherit; + display: list-item; + } +} + +@media screen { + footer { + background: $primary; + color: white; + font-size: $font-size-small; + min-height: 0; + flex: 0 0 auto; + padding: 1rem 0; + } +} + +footer { + ul { + list-style: none; + padding: 0; + margin: 0; + margin-top: auto; + } + + a { + &, &:visited, &:hover { + color: inherit; + } + &:hover { + text-decoration: underline; + } + } +} + +@media ($media-mobile) { + #header { + position: relative; + min-width: 0; + + > nav.menu > ul { + flex-wrap: wrap-reverse; + > li { + position: initial; + + > a, > span { + font-size: $font-size-small; + white-space: nowrap; + } + + > ul { + position: absolute; + top: 100%; + left: 0; + right: 0; + bottom: initial; + } + } + } + } + + .site-title { + display: none; + } + + #header nav.menu > ul > li:first-child { + display: none; + } + + .docs { + aside.toc, + aside.sidebar { + overflow: auto; + position: absolute; + width: 100%; + background: var(--background); + display: none; + z-index: 1; + + height: #{"calc(100vh - "} $menu-height #{" - "} $submenu-height #{")"}; + box-shadow: 0 1rem 1rem -0.5rem rgba(0, 0, 0, 0.1); + border-bottom: 1px solid $border-color; + } + + > main { + padding: 1rem; + min-width: 0; + } + } + + ul.blog-posts { + grid-template-columns: 1fr; + } +} + +@media ($media-desktop) { + .content-grid > section.narrow { + grid-column: col-start 3 / col-end 10; + } + + .docs { + display: grid; + grid-column: full-width; + grid-template-columns: 20rem 1fr 20rem; + grid-template-areas: "left center right"; + gap: 2rem; + position: relative; + + aside.sidebar { + grid-area: left; + } + + aside.toc { + grid-area: right; + } + + > main { + max-width: 100ch; + min-width: 0x; + padding-bottom: 4rem; + } + } + + + .columns-2 { + > :nth-child(2n + 1) { grid-column: col-start 1 / col-end 6; } + > :nth-child(2n + 2) { grid-column: col-start 7 / col-end 12; } + } + + .columns-3 { + > :nth-child(3n + 1) { grid-column: col-start 1 / col-end 4; } + > :nth-child(3n + 2) { grid-column: col-start 5 / col-end 8; } + > :nth-child(3n + 3) { grid-column: col-start 9 / col-end 12; } + } +} + +section.primary { + background: $primary; + color: white; +} + +section.primary-1 { + background: $primary-1; + color: white; +} + +// Sidebar and TOC on mobile + +input[name='mobile-menu'] { + display: none; +} + +.mobile-menu-toggles-row { + display: none; +} + +@media ($media-mobile) { + .mobile-menu-toggles-row { + background: var(--background-1); + + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + padding: 0 1rem; + height: $submenu-height; + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + + .inline-svg { height: 1rem; } + label { + flex: 1 1 auto; + white-space: nowrap; + overflow: hidden; + flex-shrink: 1; + text-overflow: ellipsis; + &[class^="toc-"] { + direction: rtl; + text-align: right; + + .docs:not(:has(aside.toc)) & { + display: none; + } + } + } + + .sidebar-show { display: none; } + .toc-show { display: none; } + } + + #mobile-menu-sidebar:checked ~ { + .mobile-menu-toggles-row .sidebar-show { display: block; } + .mobile-menu-toggles-row .sidebar-hide { display: none; } + aside.sidebar { display: block; } + } + + #mobile-menu-toc:checked ~ { + .mobile-menu-toggles-row .toc-show { display: block; } + .mobile-menu-toggles-row .toc-hide { display: none; } + aside.toc { display: block; } + } +} diff --git a/assets/scss/main.scss b/assets/scss/main.scss new file mode 100644 index 00000000..86505917 --- /dev/null +++ b/assets/scss/main.scss @@ -0,0 +1,7 @@ +@import "variables.scss"; +@import "baseline.scss"; +@import "layout.scss"; +@import "features.scss"; +@import "dark.scss"; +@import "print.scss"; +@import "slider.scss"; diff --git a/assets/scss/print.scss b/assets/scss/print.scss new file mode 100644 index 00000000..9d229de5 --- /dev/null +++ b/assets/scss/print.scss @@ -0,0 +1,153 @@ +@page { + size: A4 portrait; + margin: 0.6in; +} + +@media screen { + .print-only { + display: none; + } +} + +.print-only .noprint, +.noprint .print-only { + display: none; +} + + +@media print { + html, + body { + font-size: 9pt; + line-height: 1.4; + min-width: 0 !important; + } + + h1, h2 { + break-after: avoid; + } + + .noprint, + .mobile-sidebar-toggle-label, + .blog-pager, + .breadcrumb, + .section-index, + .docs-footer { + display: none !important; + } + + .docs { + display: block; + > aside { display: none; } + > main { max-width: none; } + } + + #header { + display: none !important; + } + + .content-grid { + display: block; + } + + .docs > main { + .print-figures { + counter-reset: step-figure; + margin: 1rem 0; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 3mm; + align-items: flex-start; + } + + figure { + position: relative; + vertical-align: top; + margin: 0; + padding: 0 !important; + break-inside: avoid; + counter-increment: step-figure; + text-align: left; + + img { + width: 100%; + padding: 0; + margin: 0; + display: block; + aspect-ratio: 4/3; + object-fit: cover; + } + + figcaption { + position: relative; + margin: 0; + padding: 0.2rem 0.5rem !important; + border-top: inherit; + } + } + + // top-level imgproc, without slider + > figure { + max-width: 50%; + margin-inline: auto; + } + + + .alert { + border-width: 2px; + break-inside: avoid; + padding: 2mm; + background: none; + } + + table { + margin: 1rem auto; + break-inside: avoid; + + td, thead th { + border: 1px solid black; + padding: 0.25rem 0.75rem; + } + } + } +} + +.print-qr-link { + border: 1px solid black; + background: white; + display: none; + width: fit-content; + @media print { + display: flex; + } + align-items: center; + overflow: hidden; + padding: 1mm; + padding-left: 4mm; + margin-block: 1rem; + margin-inline: auto; + + img { + width: 3cm; + flex: 0 0 auto; + } + + p { + flex: 0 1 auto; + margin: 0; + padding: 0; + font-size: 11pt; + overflow: hidden; + word-wrap: break-word; + } + + a { + color: inherit; + display: block; + text-decoration: inherit; + font-weight: bold; + font-family: $font-family-monospace; + white-space: wrap; + letter-spacing: -0.5pt; + } +} diff --git a/assets/scss/rtl/_main.scss b/assets/scss/rtl/_main.scss deleted file mode 100644 index 4391c470..00000000 --- a/assets/scss/rtl/_main.scss +++ /dev/null @@ -1 +0,0 @@ -// Empty file to disable docsy's RTL styles which pull in a lot of remote resources. diff --git a/assets/scss/slider.scss b/assets/scss/slider.scss new file mode 100644 index 00000000..76e92836 --- /dev/null +++ b/assets/scss/slider.scss @@ -0,0 +1,62 @@ +html body { + .ideal-image-slider { + border-radius: 0.5rem; + } + + .iis-slide { + border-radius: 0.5rem; + } + + .iis-bullet-nav { + top: 1rem; + right: 1rem; + z-index: 15; + opacity: 1; + width: auto; + height: auto; + bottom: auto; + transition: all 0.1s; + } + + .iis-bullet-nav a { + display: inline-block; + width: 1.2rem; + height: 1.2rem; + border: none; + text-indent: 9999px; + margin-left: 0.5rem; + border-radius: 1000px; + cursor: pointer; + transition: all 0.1s; + background: var(--foreground); + } + + .iis-bullet-nav a:hover, + .iis-bullet-nav a.iis-bullet-active { + background: var(--background); + } + + .iis-bullet-nav a.iis-bullet-active { + transform: scale(1.4); + } + + .iis-caption { + left: 0; + bottom: 0; + right: 0; + margin: 0.25rem; + border-radius: 0.35rem; + font: inherit; + background: var(--background); + color: var(--foreground); + padding: 0.25rem 0.75rem; + } + .iis-has-bullet-nav .iis-caption { + max-width: none; + } + .iis-caption .iis-caption-content { + font-size: inherit; + line-height: inherit; + color: inherit; + } +} diff --git a/assets/scss/_variables_project.scss b/assets/scss/variables.scss similarity index 65% rename from assets/scss/_variables_project.scss rename to assets/scss/variables.scss index ff9ee783..e7e49392 100644 --- a/assets/scss/_variables_project.scss +++ b/assets/scss/variables.scss @@ -1,28 +1,30 @@ -/* +$gray-dark: #222222; +$border-color: var(--border-color); -Add styles or override variables from the theme here. +// $hue: 275deg; // lila +$hue: 197deg; // türkis +// $hue: 180deg; // blaugrün +// $hue: 0deg; // rot +// $hue: 320deg; // pink -*/ +$primary: hsl($hue, 56%, 37%); +$primary-1: hsl($hue, 65%, 50%); +$primary-2: hsl($hue, 65%, 63%); +$link-color: hsl($hue, 90%, 45%); +$link-color-light: hsl($hue, 100%, 60%); +$font-family-sans-serif: "Open Sans", Roboto, sans-serif; +$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; +$font-family-base: $font-family-sans-serif !default; -$primary: #212730; -$primary-light: #3e4a5d; -$secondary: #f1f1f6; +$font-size-small: 0.85rem; +$font-size-base: 1rem; +$menu-height: 3.75rem; +$submenu-height: 2.5rem; -// $td-sidebar-bg-color: #e9f1ff; -// $td-sidebar-border-color: #d4e4ff; -$td-sidebar-bg-color: #FFFFFF; -$td-sidebar-border-color: #d4e4ff; - -$link-color: #3489DD; - -$td-enable-google-fonts: false; - -$font-family-sans-serif: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - -// $font-size-base: 1.2rem; - -$enable-rounded: false; +$desktop-size: 1280px; +$media-mobile: screen and (max-width: ($desktop-size - 1px)); +$media-desktop: screen and (min-width: $desktop-size); // Source: https://google-webfonts-helper.herokuapp.com/fonts/open-sans?subsets=latin diff --git a/config.toml b/config.toml index 2432e58e..102ae861 100644 --- a/config.toml +++ b/config.toml @@ -1,14 +1,7 @@ baseURL = "/" title = "Goldydocs" - enableRobotsTXT = true - -# Hugo allows theme composition (and inheritance). The precedence is from left to right. -theme = ["github.com/google/docsy"] - timeout = 500000 # uh oh - -# Will give values to .Lastmod etc. enableGitInfo = true # Language settings @@ -143,8 +136,6 @@ github_branch = "main" [params.ui] # Enable to show the side bar menu in its compact state. sidebar_menu_compact = false -# Set to true to disable breadcrumb navigation. -breadcrumb_disable = false # Set to true to hide the sidebar search box (the top nav search box will still be displayed if search is enabled) sidebar_search_disable = false # Set to false if you don't want to display a logo (/assets/icons/logo.svg) in the top nav bar diff --git a/content/_index.de.html b/content/_index.de.html index ccc09302..4c1652b9 100644 --- a/content/_index.de.html +++ b/content/_index.de.html @@ -10,176 +10,97 @@ byline: "Erstellt August 2020" --- -{{< blocks/cover title="OpenBikeSensor" image_anchor="top" height="400" >}}
-Open Innovation, Open Source, Open Data, Open Science
-Der OpenBikeSensor ist ein offenes System für die
+Wir sind aktive Alltagsradler:innen, die Radfahren überall +sicherer und populärer machen möchten. Dazu forschen wir zu Überholabständen.
+ +Eine der bedrohlichsten Situationen für Radfahrende im Straßenverkehr ist das +enge Überholen durch Kraftfahrzeuge. Seit 2020 gibt es zwar den gesetzlich +vorgeschriebenen Mindestabstand von 1,5 m (außerorts 2 m) beim +Überholen von Fahrrädern, doch oft wird dieser nicht eingehalten.
+ +Grund dafür sind nicht überwiegend einzelnes Fehlverhalten der +Autofahrenden, obwohl es nach wie vor an Bewusstsein für und auch Bekanntheit +der neuen Regeln mangelt. Viel öfter sind die Platzverhältnisse und +Vekehrsführung Auslöser für Regelverstöße, sodass hier vonseiten der +Kommunen und Länder nachgebessert werden muss.
+ +Für eine gelungene Verkehrswende brauchen wir dringend Fahrradinfrastruktur, +die sich sicher anfühlt, und auch nachweislich sicherer ist. Darum haben wir es +uns zum Auftrag gemacht, Infrastruktur, die enges Überholen ermöglicht oder +begünstigt zu identifizieren und zu überprüfen. Dazu haben wir einen Sensor und +ein Portal entwickelt, mit denen wir Überholabstände messen und die Daten +einsammeln und auf einer Karte darstellen. Nur durch Messung können wir +die Überholabstände wissenschaftlich untersuchbar machen.
+ +Überall in }}">Deutschland und darüber +hinaus gibt es Wissenschaftler, Initiativen und Gruppen, die OpenBikeSensoren bauen +und betreiben und mit den entstandenen Daten forschen. Mit ihren Ergebnissen +können sie auf Politik und Verwaltung zugehen und Verbesserungen erwirken. +Im Kleinen für konkrete lokale Infrastrukturen, im Großen durch Forschungsergebnisse +für die Verkehrsplanung der Zukunft. +
+-IBAN: DE40 4306 0967 1294 8595 00 (GLS) -Kontoinhaber: OpenBikeSensor e. V. -Verwendungszweck: Spende OpenBikeSensor -- -Hier ein paar Beispiele, was wir mit Euren Spenden alles erreichen können: - -- Wir kaufen mit Mengenrabatt und reduzierten Versandkosten neue Hardware und Bauteile ein. Diese bringen wir Euch dann zu Workshops mit, welche wir veranstalten. -- Wir stellen Bausätze zusammen, damit Interessierte keine 6-8 Wochen auf Teile aus China warten müssen, sondern zügig loslegen können. -- Wir bauen Geräte, die wir für Aktionszeiträume an Engagierte ausleihen. Die Koordination übernehmen unsere Regio-Teams. -- Unsere Entwickler:innen können Hardware für Verbesserungen und Erweiterungen bestellen, ohne das Geld selbst vorschießen zu müssen. -- Wir finanzieren die IT-Infrastruktur für Ko-Kreation und Kollaboration unseres Netzwerks. - -Die Ausgaben des Vereins werden transparent gegenüber der Community kommuniziert und mit allen abgestimmt. Mehr dazu findest Du -auf den Unterseiten [des Vereins]({{< relref "verein" >}}). - -{{% /md %}} -
Deine Hilfe wird gebraucht. Egal, ob du an der Weiterentwicklung der Technik oder an der Verbreitung in deiner Stadt oder Kommune +arbeiten möchtest, mit vielen Freiwilligen kommen wir voran! Hier sind einige Vorschläge, wie du dich einbringen kannst:
+1 | Alternative A "Rotes Modul" Buck-Boost Modul for LiPo, 3.3V (Spannungsregler). Eines der verlinkten Module reicht. | - Derzeit ist kein zuverlässiger Händler für dieses Modul bekannt. Module mit Beschriftung `A1731i` auf dem sechsbeinigen Bauteil **funktionieren NICHT**. + Derzeit ist kein zuverlässiger Händler für dieses Modul bekannt. Module mit Beschriftung `A1731i` auf dem sechsbeinigen Bauteil **funktionieren NICHT**. |
amazon.de
- google Suche + google Suche |
||
+IBAN: DE40 4306 0967 1294 8595 00 (GLS) +Kontoinhaber: OpenBikeSensor e. V. +Verwendungszweck: Spende OpenBikeSensor ++ +Hier ein paar Beispiele, was wir mit Euren Spenden alles erreichen können: + +- Wir kaufen mit Mengenrabatt und reduzierten Versandkosten neue Hardware und + Bauteile ein. Diese bringen wir Euch dann zu Workshops mit, welche wir + veranstalten. +- Wir stellen Bausätze zusammen, damit Interessierte keine 6-8 Wochen auf Teile + aus China warten müssen, sondern zügig loslegen können. +- Wir bauen Geräte, die wir für Aktionszeiträume an Engagierte ausleihen. Die + Koordination übernehmen unsere Regio-Teams. +- Unsere Entwickler:innen können Hardware für Verbesserungen und Erweiterungen + bestellen, ohne das Geld selbst vorschießen zu müssen. +- Wir finanzieren die IT-Infrastruktur für Ko-Kreation und Kollaboration + unseres Netzwerks. +- Wir beauftragen Arbeiten für die Weiterentwicklung der Technik, für die sich + keine Ehrenamtlichen Entwickler:innen finden lassen. Dies kann bei bestimmten + erforderlichen Know-How oder Aufwand notwendig sein, um das Projekt + voranbringen zu können. Die Ergebnisse (Software oder Designs) werden + natürlich weiterhin frei lizensiert. + +Die Ausgaben des Vereins werden natürlich transparent gegenüber den +Vereinsmitgliedern kommuniziert und mit allen anderen in der Community +abgestimmt. +
{{ .Summary }}
+ Weiterlesen ++
- + {{ partial "fa.html" "arrow-left" }} Zurück zur FAQ
-