├── .github ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── License.md ├── README.md ├── Release_Notes.html ├── SECURITY.md ├── _htmresc ├── mini-st.css └── st_logo.png ├── st7735.c ├── st7735.h ├── st7735_reg.c └── st7735_reg.h /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 'Bug report' 3 | about: 'Create a report to help us improve the quality of our software' 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | --- 8 | 9 | **Caution** 10 | 11 | The Issues are strictly limited for the reporting of problem encountered with the software provided in this project. 12 | For any other problem related to the STM32 product, the performance, the hardware characteristics and boards, the tools the environment in general, please post your report to the **ST Community** in the STM32 MCUs dedicated [page](https://community.st.com/s/group/0F90X000000AXsASAW/stm32-mcus). 13 | 14 | **Describe the set-up** 15 | 16 | * The board (either ST RPN reference or your custom board) 17 | * IDE or at least the compiler and its version 18 | 19 | **Describe the bug (skip if none)** 20 | 21 | A clear and concise description of what the bug is. 22 | 23 | **How to reproduce the bug (skip if none)** 24 | 25 | 1. Indicate the global behavior of your application project 26 | 2. List the modules that you suspect to be the cause of the problem (Drivers, BSP, MW...) 27 | 3. Describe the use case that generates the problem 28 | 4. How we can reproduce the problem 29 | 30 | 31 | **Additional context** 32 | 33 | If you have a first analysis, an enhancement, a fix or a patch, thank you to share your proposal. 34 | 35 | **Screenshots** 36 | 37 | If applicable, add screenshots to help explain your problem. 38 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## IMPORTANT INFORMATION 2 | 3 | Pull-requests are **not** accepted on this repository. Please use issues to report any bug or request. 4 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team via this [link](https://www.st.com/content/st_com/en/contact-us.html). 59 | All complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 1.4, 71 | available [here](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html). 72 | 73 | For answers to common questions about this code of conduct, see the [FAQ section](https://www.contributor-covenant.org/faq). 74 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Contributing guide 2 | 3 | This document serves as a checklist before contributing to this repository. 4 | It includes links to read up on if topics are unclear to you. 5 | 6 | This guide mainly focuses on steps to be followed to submit an issue or a pull-request. 7 | 8 | ### 1. Before opening an issue 9 | 10 | To report a bug or a request please file an issue in the right repository 11 | (example for [st7735](https://github.com/STMicroelectronics/st7735/issues/new/choose)). 12 | 13 | Please check the following boxes before posting an issue: 14 | - [ ] `Make sure you are using the latest commit (major releases are tagged, but corrections are available as new commits).` 15 | - [ ] `Make sure your issue is a question/feedback/suggestions RELATED TO the software provided in this repository.` Otherwise, it should be submitted to the ST Community under the MCU topic [page](https://community.st.com/s/group/0F90X000000AXsASAW/stm32-mcus). 16 | - [ ] `Make sure your issue is not already reported/fixed on GitHub or discussed on a previous issue.` Please refer to this [dashboard](https://github.com/orgs/STMicroelectronics/projects/2) for the list of issues and pull-requests. Do not forget to browse into the **closed** issues. 17 | 18 | ### 2. Posting the issue 19 | When you have checked the previous boxes. You will find two templates (Bug Report or Other Issue) available in the **Issues** tab of the repository. 20 | 21 | ### 3. Pull Requests 22 | Pull-requests are **not** accepted on this repository. Please use **issues** to report any bug or request. 23 | 24 | ### 4. How to proceed 25 | 26 | * We recommend to engage first a communication thru an issue, in order to present your proposal. Just to confirm that it corresponds to STMicroelectronics domain or scope. 27 | * Then fork the project to your GitHub account to further develop your contribution. Please use the latest commit version. 28 | * Please, submit one Pull Request for one new feature or proposal. This will ease the analysis and the final merge if accepted. 29 | -------------------------------------------------------------------------------- /License.md: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2018 STMicroelectronics 2 | 3 | This software component is licensed by STMicroelectronics under the **BSD-3-Clause** license. You may not use this software except in compliance with this license. You may obtain a copy of the license [here](https://opensource.org/licenses/BSD-3-Clause). 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BSP ST7735 Component 2 | 3 | ## Overview 4 | 5 | **STM32Cube** is an STMicroelectronics original initiative to ease the developers life by reducing efforts, time and cost. 6 | 7 | **STM32Cube** covers the overall STM32 products portfolio. It includes a comprehensive embedded software platform delivered for each STM32 series. 8 | * The CMSIS modules (core and device) corresponding to the ARM(tm) core implemented in this STM32 product. 9 | * The STM32 HAL-LL drivers, an abstraction layer offering a set of APIs ensuring maximized portability across the STM32 portfolio. 10 | * The BSP drivers of each evaluation, demonstration or nucleo board provided for this STM32 series. 11 | * A consistent set of middleware components such as RTOS, USB, FatFS, graphics, touch sensing library... 12 | * A full set of software projects (basic examples, applications, and demonstrations) for each board provided for this STM32 series. 13 | 14 | Two models of publication are proposed for the STM32Cube embedded software: 15 | * The monolithic **MCU Package**: all STM32Cube software modules of one STM32 series are present (Drivers, Middleware, Projects, Utilities) in the repository (usual name **STM32Cubexx**, xx corresponding to the STM32 series). 16 | * The **MCU component**: each STM32Cube software module being part of the STM32Cube MCU Package, is delivered as an individual repository, allowing the user to select and get only the required software functions. 17 | 18 | ## Description 19 | 20 | This **st7735** MCU component repository is one element **common to all** STM32Cube MCU embedded software packages, providing the **ST7735** BSP LCD component part. 21 | 22 | ## License 23 | 24 | Copyright (c) 2018 STMicroelectronics 25 | 26 | This software component is licensed by STMicroelectronics under the **BSD-3-Clause** license. You may not use this software except in compliance with this license. You may obtain a copy of the license [here](https://opensource.org/licenses/BSD-3-Clause). 27 | 28 | ## Release note 29 | 30 | Details about the content of this release are available in the release note [here](https://htmlpreview.github.io/?https://github.com/STMicroelectronics/st7735/blob/main/Release_Notes.html). 31 | 32 | ## Compatibility information 33 | 34 | Please refer to the repository of the BSP **board** driver you are using to know which version of this BSP component driver to use. It is **crucial** that you use a consistent set of versions. 35 | 36 | ## Troubleshooting 37 | 38 | If you have any issue with the **software content** of this repository, you can file an issue [here](https://github.com/STMicroelectronics/st7735/issues/new/choose). 39 | 40 | For any other question related to the product, the tools, the environment, you can submit a topic to the [ST Community](https://community.st.com/s/). 41 | -------------------------------------------------------------------------------- /Release_Notes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Release Notes for ST7735 Component Driver 8 | 14 | 15 | 18 | 19 | 20 |
21 |
22 |
23 |
24 |
25 |

Release Notes for ST7735 Component Driver

26 |

Copyright © 2014 STMicroelectronics
27 |

28 | 29 |
30 |
31 |
32 |

License

33 | This software component is licensed by ST under BSD 3-Clause license, the “License”; You may not use this component except in compliance with the License. You may obtain a copy of the License at: 34 |
35 | https://opensource.org/licenses/BSD-3-Clause 36 |
37 |

Purpose

38 |

This driver provides a set of functions needed to drive ST7735, LCD component

39 |
40 |
41 |

Update History

42 |
43 | 44 |
45 |

Main Changes

46 |
    47 |
  • Update st_logo.png inclusion path in Release notes.
  • 48 |
49 |
50 |
51 |
52 | 53 |
54 |

Main Changes

55 |
    56 |
  • Update license path to BSD-3
  • 57 |
58 |
59 |
60 |
61 | 62 |
63 |

Main Changes

64 |
    65 |
  • First Official release of component drivers for ST7735 in line with STM32Cube BSP drivers development guidelines (UM2298)
  • 66 |
67 |

Backward Compatibility

68 |
    69 |
  • This version breaks the compatibility with previous versions
  • 70 |
71 |

Dependencies

72 |
    73 |
  • This software release is compatible with BSP Common V6.0.0 or above
  • 74 |
75 |
76 |
77 |
78 | 79 |
80 |

Main Changes

81 |
    82 |
  • Update comments to be used for PDSC generation
  • 83 |
84 |
85 |
86 |
87 | 88 |
89 |

Main Changes

90 |
    91 |
  • st7735.h: change “" by”/" in the include path to fix compilation issues under Linux.
  • 92 |
93 |
94 |
95 |
96 | 97 |
98 |

Main Changes

99 |
    100 |
  • LCD Component driver update in order to harmonize all LCD controllers Link usage (Change LCD_IO_WriteData to LCD_IO_WriteMultipleData)
  • 101 |
102 |
103 |
104 |
105 | 106 |
107 |

Main Changes

108 |
    109 |
  • First official release of ST7735 LCD driver
  • 110 |
111 |
112 |
113 |
114 |
115 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Report potential product security vulnerabilities 2 | 3 | ST places a high priority on security, and our Product Security Incident 4 | Response Team (PSIRT) is committed to rapidly addressing potential security 5 | vulnerabilities affecting our products. PSIRT's long history and vast experience 6 | in security allows ST to perform clear analyses and provide appropriate guidance 7 | on mitigations and solutions when applicable. 8 | 9 | If you wish to report potential security vulnerabilities regarding our products, 10 | **please do not report them through public GitHub issues.** Instead, we 11 | encourage you to report them to our ST PSIRT following the process described at: 12 | **https://www.st.com/content/st_com/en/security/report-vulnerabilities.html** 13 | 14 | ### IMPORTANT - READ CAREFULLY: 15 | 16 | STMicroelectronics International N.V., on behalf of itself, its affiliates and 17 | subsidiaries, (collectively “ST”) takes all potential security vulnerability 18 | reports or other related communications (“Report(s)”) seriously. In order to 19 | review Your Report (the terms “You” and “Yours” include your employer, and all 20 | affiliates, subsidiaries and related persons or entities) and take actions as 21 | deemed appropriate, ST requires that we have the rights and Your permission to 22 | do so. 23 | 24 | As such, by submitting Your Report to ST, You agree that You have the right to 25 | do so, and You grant to ST the rights to use the Report for purposes related to 26 | security vulnerability analysis, testing, correction, patching, reporting and 27 | any other related purpose or function. 28 | 29 | By submitting Your Report, You agree that ST’s 30 | [Privacy Policy](https://www.st.com/content/st_com/en/common/privacy-portal.html) 31 | applies to all related communications. 32 | -------------------------------------------------------------------------------- /_htmresc/mini-st.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /* 3 | Flavor name: Default (mini-default) 4 | Author: Angelos Chalaris (chalarangelo@gmail.com) 5 | Maintainers: Angelos Chalaris 6 | mini.css version: v3.0.0-alpha.3 7 | */ 8 | /* 9 | Browsers resets and base typography. 10 | */ 11 | /* Core module CSS variable definitions */ 12 | :root { 13 | --fore-color: #111; 14 | --secondary-fore-color: #444; 15 | --back-color: #f8f8f8; 16 | --secondary-back-color: #f0f0f0; 17 | --blockquote-color: #f57c00; 18 | --pre-color: #1565c0; 19 | --border-color: #aaa; 20 | --secondary-border-color: #ddd; 21 | --heading-ratio: 1.19; 22 | --universal-margin: 0.5rem; 23 | --universal-padding: 0.125rem; 24 | --universal-border-radius: 0.125rem; 25 | --a-link-color: #0277bd; 26 | --a-visited-color: #01579b; } 27 | 28 | html { 29 | font-size: 14px; } 30 | 31 | a, b, del, em, i, ins, q, span, strong, u { 32 | font-size: 1em; } 33 | 34 | html, * { 35 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, sans-serif; 36 | line-height: 1.4; 37 | -webkit-text-size-adjust: 100%; } 38 | 39 | * { 40 | font-size: 1rem; } 41 | 42 | body { 43 | margin: 0; 44 | color: var(--fore-color); 45 | background: var(--back-color); } 46 | 47 | details { 48 | display: block; } 49 | 50 | summary { 51 | display: list-item; } 52 | 53 | abbr[title] { 54 | border-bottom: none; 55 | text-decoration: underline dotted; } 56 | 57 | input { 58 | overflow: visible; } 59 | 60 | img { 61 | max-width: 100%; 62 | height: auto; } 63 | 64 | h1, h2, h3, h4, h5, h6 { 65 | line-height: 1.2; 66 | margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); 67 | font-weight: 500; } 68 | h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { 69 | color: var(--secondary-fore-color); 70 | display: block; 71 | margin-top: -0.25rem; } 72 | 73 | h1 { 74 | font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio) * var(--heading-ratio)); } 75 | 76 | h2 { 77 | font-size: calc(1rem * var(--heading-ratio) * var(--heading-ratio); ); 78 | background: var(--mark-back-color); 79 | font-weight: 600; 80 | padding: 0.1em 0.5em 0.2em 0.5em; 81 | color: var(--mark-fore-color); } 82 | 83 | h3 { 84 | font-size: calc(1rem * var(--heading-ratio)); 85 | padding-left: calc(2 * var(--universal-margin)); 86 | /* background: var(--border-color); */ 87 | } 88 | 89 | h4 { 90 | font-size: 1rem;); 91 | padding-left: calc(4 * var(--universal-margin)); } 92 | 93 | h5 { 94 | font-size: 1rem; } 95 | 96 | h6 { 97 | font-size: calc(1rem / var(--heading-ratio)); } 98 | 99 | p { 100 | margin: var(--universal-margin); } 101 | 102 | ol, ul { 103 | margin: var(--universal-margin); 104 | padding-left: calc(6 * var(--universal-margin)); } 105 | 106 | b, strong { 107 | font-weight: 700; } 108 | 109 | hr { 110 | box-sizing: content-box; 111 | border: 0; 112 | line-height: 1.25em; 113 | margin: var(--universal-margin); 114 | height: 0.0625rem; 115 | background: linear-gradient(to right, transparent, var(--border-color) 20%, var(--border-color) 80%, transparent); } 116 | 117 | blockquote { 118 | display: block; 119 | position: relative; 120 | font-style: italic; 121 | color: var(--secondary-fore-color); 122 | margin: var(--universal-margin); 123 | padding: calc(3 * var(--universal-padding)); 124 | border: 0.0625rem solid var(--secondary-border-color); 125 | border-left: 0.375rem solid var(--blockquote-color); 126 | border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } 127 | blockquote:before { 128 | position: absolute; 129 | top: calc(0rem - var(--universal-padding)); 130 | left: 0; 131 | font-family: sans-serif; 132 | font-size: 3rem; 133 | font-weight: 700; 134 | content: "\201c"; 135 | color: var(--blockquote-color); } 136 | blockquote[cite]:after { 137 | font-style: normal; 138 | font-size: 0.75em; 139 | font-weight: 700; 140 | content: "\a— " attr(cite); 141 | white-space: pre; } 142 | 143 | code, kbd, pre, samp { 144 | font-family: Menlo, Consolas, monospace; 145 | font-size: 0.85em; } 146 | 147 | code { 148 | background: var(--secondary-back-color); 149 | border-radius: var(--universal-border-radius); 150 | padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } 151 | 152 | kbd { 153 | background: var(--fore-color); 154 | color: var(--back-color); 155 | border-radius: var(--universal-border-radius); 156 | padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } 157 | 158 | pre { 159 | overflow: auto; 160 | background: var(--secondary-back-color); 161 | padding: calc(1.5 * var(--universal-padding)); 162 | margin: var(--universal-margin); 163 | border: 0.0625rem solid var(--secondary-border-color); 164 | border-left: 0.25rem solid var(--pre-color); 165 | border-radius: 0 var(--universal-border-radius) var(--universal-border-radius) 0; } 166 | 167 | sup, sub, code, kbd { 168 | line-height: 0; 169 | position: relative; 170 | vertical-align: baseline; } 171 | 172 | small, sup, sub, figcaption { 173 | font-size: 0.75em; } 174 | 175 | sup { 176 | top: -0.5em; } 177 | 178 | sub { 179 | bottom: -0.25em; } 180 | 181 | figure { 182 | margin: var(--universal-margin); } 183 | 184 | figcaption { 185 | color: var(--secondary-fore-color); } 186 | 187 | a { 188 | text-decoration: none; } 189 | a:link { 190 | color: var(--a-link-color); } 191 | a:visited { 192 | color: var(--a-visited-color); } 193 | a:hover, a:focus { 194 | text-decoration: underline; } 195 | 196 | /* 197 | Definitions for the grid system, cards and containers. 198 | */ 199 | .container { 200 | margin: 0 auto; 201 | padding: 0 calc(1.5 * var(--universal-padding)); } 202 | 203 | .row { 204 | box-sizing: border-box; 205 | display: flex; 206 | flex: 0 1 auto; 207 | flex-flow: row wrap; } 208 | 209 | .col-sm, 210 | [class^='col-sm-'], 211 | [class^='col-sm-offset-'], 212 | .row[class*='cols-sm-'] > * { 213 | box-sizing: border-box; 214 | flex: 0 0 auto; 215 | padding: 0 calc(var(--universal-padding) / 2); } 216 | 217 | .col-sm, 218 | .row.cols-sm > * { 219 | max-width: 100%; 220 | flex-grow: 1; 221 | flex-basis: 0; } 222 | 223 | .col-sm-1, 224 | .row.cols-sm-1 > * { 225 | max-width: 8.3333333333%; 226 | flex-basis: 8.3333333333%; } 227 | 228 | .col-sm-offset-0 { 229 | margin-left: 0; } 230 | 231 | .col-sm-2, 232 | .row.cols-sm-2 > * { 233 | max-width: 16.6666666667%; 234 | flex-basis: 16.6666666667%; } 235 | 236 | .col-sm-offset-1 { 237 | margin-left: 8.3333333333%; } 238 | 239 | .col-sm-3, 240 | .row.cols-sm-3 > * { 241 | max-width: 25%; 242 | flex-basis: 25%; } 243 | 244 | .col-sm-offset-2 { 245 | margin-left: 16.6666666667%; } 246 | 247 | .col-sm-4, 248 | .row.cols-sm-4 > * { 249 | max-width: 33.3333333333%; 250 | flex-basis: 33.3333333333%; } 251 | 252 | .col-sm-offset-3 { 253 | margin-left: 25%; } 254 | 255 | .col-sm-5, 256 | .row.cols-sm-5 > * { 257 | max-width: 41.6666666667%; 258 | flex-basis: 41.6666666667%; } 259 | 260 | .col-sm-offset-4 { 261 | margin-left: 33.3333333333%; } 262 | 263 | .col-sm-6, 264 | .row.cols-sm-6 > * { 265 | max-width: 50%; 266 | flex-basis: 50%; } 267 | 268 | .col-sm-offset-5 { 269 | margin-left: 41.6666666667%; } 270 | 271 | .col-sm-7, 272 | .row.cols-sm-7 > * { 273 | max-width: 58.3333333333%; 274 | flex-basis: 58.3333333333%; } 275 | 276 | .col-sm-offset-6 { 277 | margin-left: 50%; } 278 | 279 | .col-sm-8, 280 | .row.cols-sm-8 > * { 281 | max-width: 66.6666666667%; 282 | flex-basis: 66.6666666667%; } 283 | 284 | .col-sm-offset-7 { 285 | margin-left: 58.3333333333%; } 286 | 287 | .col-sm-9, 288 | .row.cols-sm-9 > * { 289 | max-width: 75%; 290 | flex-basis: 75%; } 291 | 292 | .col-sm-offset-8 { 293 | margin-left: 66.6666666667%; } 294 | 295 | .col-sm-10, 296 | .row.cols-sm-10 > * { 297 | max-width: 83.3333333333%; 298 | flex-basis: 83.3333333333%; } 299 | 300 | .col-sm-offset-9 { 301 | margin-left: 75%; } 302 | 303 | .col-sm-11, 304 | .row.cols-sm-11 > * { 305 | max-width: 91.6666666667%; 306 | flex-basis: 91.6666666667%; } 307 | 308 | .col-sm-offset-10 { 309 | margin-left: 83.3333333333%; } 310 | 311 | .col-sm-12, 312 | .row.cols-sm-12 > * { 313 | max-width: 100%; 314 | flex-basis: 100%; } 315 | 316 | .col-sm-offset-11 { 317 | margin-left: 91.6666666667%; } 318 | 319 | .col-sm-normal { 320 | order: initial; } 321 | 322 | .col-sm-first { 323 | order: -999; } 324 | 325 | .col-sm-last { 326 | order: 999; } 327 | 328 | @media screen and (min-width: 500px) { 329 | .col-md, 330 | [class^='col-md-'], 331 | [class^='col-md-offset-'], 332 | .row[class*='cols-md-'] > * { 333 | box-sizing: border-box; 334 | flex: 0 0 auto; 335 | padding: 0 calc(var(--universal-padding) / 2); } 336 | 337 | .col-md, 338 | .row.cols-md > * { 339 | max-width: 100%; 340 | flex-grow: 1; 341 | flex-basis: 0; } 342 | 343 | .col-md-1, 344 | .row.cols-md-1 > * { 345 | max-width: 8.3333333333%; 346 | flex-basis: 8.3333333333%; } 347 | 348 | .col-md-offset-0 { 349 | margin-left: 0; } 350 | 351 | .col-md-2, 352 | .row.cols-md-2 > * { 353 | max-width: 16.6666666667%; 354 | flex-basis: 16.6666666667%; } 355 | 356 | .col-md-offset-1 { 357 | margin-left: 8.3333333333%; } 358 | 359 | .col-md-3, 360 | .row.cols-md-3 > * { 361 | max-width: 25%; 362 | flex-basis: 25%; } 363 | 364 | .col-md-offset-2 { 365 | margin-left: 16.6666666667%; } 366 | 367 | .col-md-4, 368 | .row.cols-md-4 > * { 369 | max-width: 33.3333333333%; 370 | flex-basis: 33.3333333333%; } 371 | 372 | .col-md-offset-3 { 373 | margin-left: 25%; } 374 | 375 | .col-md-5, 376 | .row.cols-md-5 > * { 377 | max-width: 41.6666666667%; 378 | flex-basis: 41.6666666667%; } 379 | 380 | .col-md-offset-4 { 381 | margin-left: 33.3333333333%; } 382 | 383 | .col-md-6, 384 | .row.cols-md-6 > * { 385 | max-width: 50%; 386 | flex-basis: 50%; } 387 | 388 | .col-md-offset-5 { 389 | margin-left: 41.6666666667%; } 390 | 391 | .col-md-7, 392 | .row.cols-md-7 > * { 393 | max-width: 58.3333333333%; 394 | flex-basis: 58.3333333333%; } 395 | 396 | .col-md-offset-6 { 397 | margin-left: 50%; } 398 | 399 | .col-md-8, 400 | .row.cols-md-8 > * { 401 | max-width: 66.6666666667%; 402 | flex-basis: 66.6666666667%; } 403 | 404 | .col-md-offset-7 { 405 | margin-left: 58.3333333333%; } 406 | 407 | .col-md-9, 408 | .row.cols-md-9 > * { 409 | max-width: 75%; 410 | flex-basis: 75%; } 411 | 412 | .col-md-offset-8 { 413 | margin-left: 66.6666666667%; } 414 | 415 | .col-md-10, 416 | .row.cols-md-10 > * { 417 | max-width: 83.3333333333%; 418 | flex-basis: 83.3333333333%; } 419 | 420 | .col-md-offset-9 { 421 | margin-left: 75%; } 422 | 423 | .col-md-11, 424 | .row.cols-md-11 > * { 425 | max-width: 91.6666666667%; 426 | flex-basis: 91.6666666667%; } 427 | 428 | .col-md-offset-10 { 429 | margin-left: 83.3333333333%; } 430 | 431 | .col-md-12, 432 | .row.cols-md-12 > * { 433 | max-width: 100%; 434 | flex-basis: 100%; } 435 | 436 | .col-md-offset-11 { 437 | margin-left: 91.6666666667%; } 438 | 439 | .col-md-normal { 440 | order: initial; } 441 | 442 | .col-md-first { 443 | order: -999; } 444 | 445 | .col-md-last { 446 | order: 999; } } 447 | @media screen and (min-width: 1280px) { 448 | .col-lg, 449 | [class^='col-lg-'], 450 | [class^='col-lg-offset-'], 451 | .row[class*='cols-lg-'] > * { 452 | box-sizing: border-box; 453 | flex: 0 0 auto; 454 | padding: 0 calc(var(--universal-padding) / 2); } 455 | 456 | .col-lg, 457 | .row.cols-lg > * { 458 | max-width: 100%; 459 | flex-grow: 1; 460 | flex-basis: 0; } 461 | 462 | .col-lg-1, 463 | .row.cols-lg-1 > * { 464 | max-width: 8.3333333333%; 465 | flex-basis: 8.3333333333%; } 466 | 467 | .col-lg-offset-0 { 468 | margin-left: 0; } 469 | 470 | .col-lg-2, 471 | .row.cols-lg-2 > * { 472 | max-width: 16.6666666667%; 473 | flex-basis: 16.6666666667%; } 474 | 475 | .col-lg-offset-1 { 476 | margin-left: 8.3333333333%; } 477 | 478 | .col-lg-3, 479 | .row.cols-lg-3 > * { 480 | max-width: 25%; 481 | flex-basis: 25%; } 482 | 483 | .col-lg-offset-2 { 484 | margin-left: 16.6666666667%; } 485 | 486 | .col-lg-4, 487 | .row.cols-lg-4 > * { 488 | max-width: 33.3333333333%; 489 | flex-basis: 33.3333333333%; } 490 | 491 | .col-lg-offset-3 { 492 | margin-left: 25%; } 493 | 494 | .col-lg-5, 495 | .row.cols-lg-5 > * { 496 | max-width: 41.6666666667%; 497 | flex-basis: 41.6666666667%; } 498 | 499 | .col-lg-offset-4 { 500 | margin-left: 33.3333333333%; } 501 | 502 | .col-lg-6, 503 | .row.cols-lg-6 > * { 504 | max-width: 50%; 505 | flex-basis: 50%; } 506 | 507 | .col-lg-offset-5 { 508 | margin-left: 41.6666666667%; } 509 | 510 | .col-lg-7, 511 | .row.cols-lg-7 > * { 512 | max-width: 58.3333333333%; 513 | flex-basis: 58.3333333333%; } 514 | 515 | .col-lg-offset-6 { 516 | margin-left: 50%; } 517 | 518 | .col-lg-8, 519 | .row.cols-lg-8 > * { 520 | max-width: 66.6666666667%; 521 | flex-basis: 66.6666666667%; } 522 | 523 | .col-lg-offset-7 { 524 | margin-left: 58.3333333333%; } 525 | 526 | .col-lg-9, 527 | .row.cols-lg-9 > * { 528 | max-width: 75%; 529 | flex-basis: 75%; } 530 | 531 | .col-lg-offset-8 { 532 | margin-left: 66.6666666667%; } 533 | 534 | .col-lg-10, 535 | .row.cols-lg-10 > * { 536 | max-width: 83.3333333333%; 537 | flex-basis: 83.3333333333%; } 538 | 539 | .col-lg-offset-9 { 540 | margin-left: 75%; } 541 | 542 | .col-lg-11, 543 | .row.cols-lg-11 > * { 544 | max-width: 91.6666666667%; 545 | flex-basis: 91.6666666667%; } 546 | 547 | .col-lg-offset-10 { 548 | margin-left: 83.3333333333%; } 549 | 550 | .col-lg-12, 551 | .row.cols-lg-12 > * { 552 | max-width: 100%; 553 | flex-basis: 100%; } 554 | 555 | .col-lg-offset-11 { 556 | margin-left: 91.6666666667%; } 557 | 558 | .col-lg-normal { 559 | order: initial; } 560 | 561 | .col-lg-first { 562 | order: -999; } 563 | 564 | .col-lg-last { 565 | order: 999; } } 566 | /* Card component CSS variable definitions */ 567 | :root { 568 | --card-back-color: #f8f8f8; 569 | --card-fore-color: #111; 570 | --card-border-color: #ddd; } 571 | 572 | .card { 573 | display: flex; 574 | flex-direction: column; 575 | justify-content: space-between; 576 | align-self: center; 577 | position: relative; 578 | width: 100%; 579 | background: var(--card-back-color); 580 | color: var(--card-fore-color); 581 | border: 0.0625rem solid var(--card-border-color); 582 | border-radius: var(--universal-border-radius); 583 | margin: var(--universal-margin); 584 | overflow: hidden; } 585 | @media screen and (min-width: 320px) { 586 | .card { 587 | max-width: 320px; } } 588 | .card > .sectione { 589 | background: var(--card-back-color); 590 | color: var(--card-fore-color); 591 | box-sizing: border-box; 592 | margin: 0; 593 | border: 0; 594 | border-radius: 0; 595 | border-bottom: 0.0625rem solid var(--card-border-color); 596 | padding: var(--universal-padding); 597 | width: 100%; } 598 | .card > .sectione.media { 599 | height: 200px; 600 | padding: 0; 601 | -o-object-fit: cover; 602 | object-fit: cover; } 603 | .card > .sectione:last-child { 604 | border-bottom: 0; } 605 | 606 | /* 607 | Custom elements for card elements. 608 | */ 609 | @media screen and (min-width: 240px) { 610 | .card.small { 611 | max-width: 240px; } } 612 | @media screen and (min-width: 480px) { 613 | .card.large { 614 | max-width: 480px; } } 615 | .card.fluid { 616 | max-width: 100%; 617 | width: auto; } 618 | 619 | .card.warning { 620 | /* --card-back-color: #ffca28; */ 621 | --card-back-color: #e5b8b7; 622 | --card-border-color: #e8b825; } 623 | 624 | .card.error { 625 | --card-back-color: #b71c1c; 626 | --card-fore-color: #f8f8f8; 627 | --card-border-color: #a71a1a; } 628 | 629 | .card > .sectione.dark { 630 | --card-back-color: #e0e0e0; } 631 | 632 | .card > .sectione.double-padded { 633 | padding: calc(1.5 * var(--universal-padding)); } 634 | 635 | /* 636 | Definitions for forms and input elements. 637 | */ 638 | /* Input_control module CSS variable definitions */ 639 | :root { 640 | --form-back-color: #f0f0f0; 641 | --form-fore-color: #111; 642 | --form-border-color: #ddd; 643 | --input-back-color: #f8f8f8; 644 | --input-fore-color: #111; 645 | --input-border-color: #ddd; 646 | --input-focus-color: #0288d1; 647 | --input-invalid-color: #d32f2f; 648 | --button-back-color: #e2e2e2; 649 | --button-hover-back-color: #dcdcdc; 650 | --button-fore-color: #212121; 651 | --button-border-color: transparent; 652 | --button-hover-border-color: transparent; 653 | --button-group-border-color: rgba(124, 124, 124, 0.54); } 654 | 655 | form { 656 | background: var(--form-back-color); 657 | color: var(--form-fore-color); 658 | border: 0.0625rem solid var(--form-border-color); 659 | border-radius: var(--universal-border-radius); 660 | margin: var(--universal-margin); 661 | padding: calc(2 * var(--universal-padding)) var(--universal-padding); } 662 | 663 | fieldset { 664 | border: 0.0625rem solid var(--form-border-color); 665 | border-radius: var(--universal-border-radius); 666 | margin: calc(var(--universal-margin) / 4); 667 | padding: var(--universal-padding); } 668 | 669 | legend { 670 | box-sizing: border-box; 671 | display: table; 672 | max-width: 100%; 673 | white-space: normal; 674 | font-weight: 700; 675 | padding: calc(var(--universal-padding) / 2); } 676 | 677 | label { 678 | padding: calc(var(--universal-padding) / 2) var(--universal-padding); } 679 | 680 | .input-group { 681 | display: inline-block; } 682 | .input-group.fluid { 683 | display: flex; 684 | align-items: center; 685 | justify-content: center; } 686 | .input-group.fluid > input { 687 | max-width: 100%; 688 | flex-grow: 1; 689 | flex-basis: 0px; } 690 | @media screen and (max-width: 499px) { 691 | .input-group.fluid { 692 | align-items: stretch; 693 | flex-direction: column; } } 694 | .input-group.vertical { 695 | display: flex; 696 | align-items: stretch; 697 | flex-direction: column; } 698 | .input-group.vertical > input { 699 | max-width: 100%; 700 | flex-grow: 1; 701 | flex-basis: 0px; } 702 | 703 | [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { 704 | height: auto; } 705 | 706 | [type="search"] { 707 | -webkit-appearance: textfield; 708 | outline-offset: -2px; } 709 | 710 | [type="search"]::-webkit-search-cancel-button, 711 | [type="search"]::-webkit-search-decoration { 712 | -webkit-appearance: none; } 713 | 714 | input:not([type]), [type="text"], [type="email"], [type="number"], [type="search"], 715 | [type="password"], [type="url"], [type="tel"], [type="checkbox"], [type="radio"], textarea, select { 716 | box-sizing: border-box; 717 | background: var(--input-back-color); 718 | color: var(--input-fore-color); 719 | border: 0.0625rem solid var(--input-border-color); 720 | border-radius: var(--universal-border-radius); 721 | margin: calc(var(--universal-margin) / 2); 722 | padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } 723 | 724 | input:not([type="button"]):not([type="submit"]):not([type="reset"]):hover, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus, textarea:hover, textarea:focus, select:hover, select:focus { 725 | border-color: var(--input-focus-color); 726 | box-shadow: none; } 727 | input:not([type="button"]):not([type="submit"]):not([type="reset"]):invalid, input:not([type="button"]):not([type="submit"]):not([type="reset"]):focus:invalid, textarea:invalid, textarea:focus:invalid, select:invalid, select:focus:invalid { 728 | border-color: var(--input-invalid-color); 729 | box-shadow: none; } 730 | input:not([type="button"]):not([type="submit"]):not([type="reset"])[readonly], textarea[readonly], select[readonly] { 731 | background: var(--secondary-back-color); } 732 | 733 | select { 734 | max-width: 100%; } 735 | 736 | option { 737 | overflow: hidden; 738 | text-overflow: ellipsis; } 739 | 740 | [type="checkbox"], [type="radio"] { 741 | -webkit-appearance: none; 742 | -moz-appearance: none; 743 | appearance: none; 744 | position: relative; 745 | height: calc(1rem + var(--universal-padding) / 2); 746 | width: calc(1rem + var(--universal-padding) / 2); 747 | vertical-align: text-bottom; 748 | padding: 0; 749 | flex-basis: calc(1rem + var(--universal-padding) / 2) !important; 750 | flex-grow: 0 !important; } 751 | [type="checkbox"]:checked:before, [type="radio"]:checked:before { 752 | position: absolute; } 753 | 754 | [type="checkbox"]:checked:before { 755 | content: '\2713'; 756 | font-family: sans-serif; 757 | font-size: calc(1rem + var(--universal-padding) / 2); 758 | top: calc(0rem - var(--universal-padding)); 759 | left: calc(var(--universal-padding) / 4); } 760 | 761 | [type="radio"] { 762 | border-radius: 100%; } 763 | [type="radio"]:checked:before { 764 | border-radius: 100%; 765 | content: ''; 766 | top: calc(0.0625rem + var(--universal-padding) / 2); 767 | left: calc(0.0625rem + var(--universal-padding) / 2); 768 | background: var(--input-fore-color); 769 | width: 0.5rem; 770 | height: 0.5rem; } 771 | 772 | :placeholder-shown { 773 | color: var(--input-fore-color); } 774 | 775 | ::-ms-placeholder { 776 | color: var(--input-fore-color); 777 | opacity: 0.54; } 778 | 779 | button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { 780 | border-style: none; 781 | padding: 0; } 782 | 783 | button, html [type="button"], [type="reset"], [type="submit"] { 784 | -webkit-appearance: button; } 785 | 786 | button { 787 | overflow: visible; 788 | text-transform: none; } 789 | 790 | button, [type="button"], [type="submit"], [type="reset"], 791 | a.button, label.button, .button, 792 | a[role="button"], label[role="button"], [role="button"] { 793 | display: inline-block; 794 | background: var(--button-back-color); 795 | color: var(--button-fore-color); 796 | border: 0.0625rem solid var(--button-border-color); 797 | border-radius: var(--universal-border-radius); 798 | padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); 799 | margin: var(--universal-margin); 800 | text-decoration: none; 801 | cursor: pointer; 802 | transition: background 0.3s; } 803 | button:hover, button:focus, [type="button"]:hover, [type="button"]:focus, [type="submit"]:hover, [type="submit"]:focus, [type="reset"]:hover, [type="reset"]:focus, 804 | a.button:hover, 805 | a.button:focus, label.button:hover, label.button:focus, .button:hover, .button:focus, 806 | a[role="button"]:hover, 807 | a[role="button"]:focus, label[role="button"]:hover, label[role="button"]:focus, [role="button"]:hover, [role="button"]:focus { 808 | background: var(--button-hover-back-color); 809 | border-color: var(--button-hover-border-color); } 810 | 811 | input:disabled, input[disabled], textarea:disabled, textarea[disabled], select:disabled, select[disabled], button:disabled, button[disabled], .button:disabled, .button[disabled], [role="button"]:disabled, [role="button"][disabled] { 812 | cursor: not-allowed; 813 | opacity: 0.75; } 814 | 815 | .button-group { 816 | display: flex; 817 | border: 0.0625rem solid var(--button-group-border-color); 818 | border-radius: var(--universal-border-radius); 819 | margin: var(--universal-margin); } 820 | .button-group > button, .button-group [type="button"], .button-group > [type="submit"], .button-group > [type="reset"], .button-group > .button, .button-group > [role="button"] { 821 | margin: 0; 822 | max-width: 100%; 823 | flex: 1 1 auto; 824 | text-align: center; 825 | border: 0; 826 | border-radius: 0; 827 | box-shadow: none; } 828 | .button-group > :not(:first-child) { 829 | border-left: 0.0625rem solid var(--button-group-border-color); } 830 | @media screen and (max-width: 499px) { 831 | .button-group { 832 | flex-direction: column; } 833 | .button-group > :not(:first-child) { 834 | border: 0; 835 | border-top: 0.0625rem solid var(--button-group-border-color); } } 836 | 837 | /* 838 | Custom elements for forms and input elements. 839 | */ 840 | button.primary, [type="button"].primary, [type="submit"].primary, [type="reset"].primary, .button.primary, [role="button"].primary { 841 | --button-back-color: #1976d2; 842 | --button-fore-color: #f8f8f8; } 843 | button.primary:hover, button.primary:focus, [type="button"].primary:hover, [type="button"].primary:focus, [type="submit"].primary:hover, [type="submit"].primary:focus, [type="reset"].primary:hover, [type="reset"].primary:focus, .button.primary:hover, .button.primary:focus, [role="button"].primary:hover, [role="button"].primary:focus { 844 | --button-hover-back-color: #1565c0; } 845 | 846 | button.secondary, [type="button"].secondary, [type="submit"].secondary, [type="reset"].secondary, .button.secondary, [role="button"].secondary { 847 | --button-back-color: #d32f2f; 848 | --button-fore-color: #f8f8f8; } 849 | button.secondary:hover, button.secondary:focus, [type="button"].secondary:hover, [type="button"].secondary:focus, [type="submit"].secondary:hover, [type="submit"].secondary:focus, [type="reset"].secondary:hover, [type="reset"].secondary:focus, .button.secondary:hover, .button.secondary:focus, [role="button"].secondary:hover, [role="button"].secondary:focus { 850 | --button-hover-back-color: #c62828; } 851 | 852 | button.tertiary, [type="button"].tertiary, [type="submit"].tertiary, [type="reset"].tertiary, .button.tertiary, [role="button"].tertiary { 853 | --button-back-color: #308732; 854 | --button-fore-color: #f8f8f8; } 855 | button.tertiary:hover, button.tertiary:focus, [type="button"].tertiary:hover, [type="button"].tertiary:focus, [type="submit"].tertiary:hover, [type="submit"].tertiary:focus, [type="reset"].tertiary:hover, [type="reset"].tertiary:focus, .button.tertiary:hover, .button.tertiary:focus, [role="button"].tertiary:hover, [role="button"].tertiary:focus { 856 | --button-hover-back-color: #277529; } 857 | 858 | button.inverse, [type="button"].inverse, [type="submit"].inverse, [type="reset"].inverse, .button.inverse, [role="button"].inverse { 859 | --button-back-color: #212121; 860 | --button-fore-color: #f8f8f8; } 861 | button.inverse:hover, button.inverse:focus, [type="button"].inverse:hover, [type="button"].inverse:focus, [type="submit"].inverse:hover, [type="submit"].inverse:focus, [type="reset"].inverse:hover, [type="reset"].inverse:focus, .button.inverse:hover, .button.inverse:focus, [role="button"].inverse:hover, [role="button"].inverse:focus { 862 | --button-hover-back-color: #111; } 863 | 864 | button.small, [type="button"].small, [type="submit"].small, [type="reset"].small, .button.small, [role="button"].small { 865 | padding: calc(0.5 * var(--universal-padding)) calc(0.75 * var(--universal-padding)); 866 | margin: var(--universal-margin); } 867 | 868 | button.large, [type="button"].large, [type="submit"].large, [type="reset"].large, .button.large, [role="button"].large { 869 | padding: calc(1.5 * var(--universal-padding)) calc(2 * var(--universal-padding)); 870 | margin: var(--universal-margin); } 871 | 872 | /* 873 | Definitions for navigation elements. 874 | */ 875 | /* Navigation module CSS variable definitions */ 876 | :root { 877 | --header-back-color: #f8f8f8; 878 | --header-hover-back-color: #f0f0f0; 879 | --header-fore-color: #444; 880 | --header-border-color: #ddd; 881 | --nav-back-color: #f8f8f8; 882 | --nav-hover-back-color: #f0f0f0; 883 | --nav-fore-color: #444; 884 | --nav-border-color: #ddd; 885 | --nav-link-color: #0277bd; 886 | --footer-fore-color: #444; 887 | --footer-back-color: #f8f8f8; 888 | --footer-border-color: #ddd; 889 | --footer-link-color: #0277bd; 890 | --drawer-back-color: #f8f8f8; 891 | --drawer-hover-back-color: #f0f0f0; 892 | --drawer-border-color: #ddd; 893 | --drawer-close-color: #444; } 894 | 895 | header { 896 | height: 3.1875rem; 897 | background: var(--header-back-color); 898 | color: var(--header-fore-color); 899 | border-bottom: 0.0625rem solid var(--header-border-color); 900 | padding: calc(var(--universal-padding) / 4) 0; 901 | white-space: nowrap; 902 | overflow-x: auto; 903 | overflow-y: hidden; } 904 | header.row { 905 | box-sizing: content-box; } 906 | header .logo { 907 | color: var(--header-fore-color); 908 | font-size: 1.75rem; 909 | padding: var(--universal-padding) calc(2 * var(--universal-padding)); 910 | text-decoration: none; } 911 | header button, header [type="button"], header .button, header [role="button"] { 912 | box-sizing: border-box; 913 | position: relative; 914 | top: calc(0rem - var(--universal-padding) / 4); 915 | height: calc(3.1875rem + var(--universal-padding) / 2); 916 | background: var(--header-back-color); 917 | line-height: calc(3.1875rem - var(--universal-padding) * 1.5); 918 | text-align: center; 919 | color: var(--header-fore-color); 920 | border: 0; 921 | border-radius: 0; 922 | margin: 0; 923 | text-transform: uppercase; } 924 | header button:hover, header button:focus, header [type="button"]:hover, header [type="button"]:focus, header .button:hover, header .button:focus, header [role="button"]:hover, header [role="button"]:focus { 925 | background: var(--header-hover-back-color); } 926 | 927 | nav { 928 | background: var(--nav-back-color); 929 | color: var(--nav-fore-color); 930 | border: 0.0625rem solid var(--nav-border-color); 931 | border-radius: var(--universal-border-radius); 932 | margin: var(--universal-margin); } 933 | nav * { 934 | padding: var(--universal-padding) calc(1.5 * var(--universal-padding)); } 935 | nav a, nav a:visited { 936 | display: block; 937 | color: var(--nav-link-color); 938 | border-radius: var(--universal-border-radius); 939 | transition: background 0.3s; } 940 | nav a:hover, nav a:focus, nav a:visited:hover, nav a:visited:focus { 941 | text-decoration: none; 942 | background: var(--nav-hover-back-color); } 943 | nav .sublink-1 { 944 | position: relative; 945 | margin-left: calc(2 * var(--universal-padding)); } 946 | nav .sublink-1:before { 947 | position: absolute; 948 | left: calc(var(--universal-padding) - 1 * var(--universal-padding)); 949 | top: -0.0625rem; 950 | content: ''; 951 | height: 100%; 952 | border: 0.0625rem solid var(--nav-border-color); 953 | border-left: 0; } 954 | nav .sublink-2 { 955 | position: relative; 956 | margin-left: calc(4 * var(--universal-padding)); } 957 | nav .sublink-2:before { 958 | position: absolute; 959 | left: calc(var(--universal-padding) - 3 * var(--universal-padding)); 960 | top: -0.0625rem; 961 | content: ''; 962 | height: 100%; 963 | border: 0.0625rem solid var(--nav-border-color); 964 | border-left: 0; } 965 | 966 | footer { 967 | background: var(--footer-back-color); 968 | color: var(--footer-fore-color); 969 | border-top: 0.0625rem solid var(--footer-border-color); 970 | padding: calc(2 * var(--universal-padding)) var(--universal-padding); 971 | font-size: 0.875rem; } 972 | footer a, footer a:visited { 973 | color: var(--footer-link-color); } 974 | 975 | header.sticky { 976 | position: -webkit-sticky; 977 | position: sticky; 978 | z-index: 1101; 979 | top: 0; } 980 | 981 | footer.sticky { 982 | position: -webkit-sticky; 983 | position: sticky; 984 | z-index: 1101; 985 | bottom: 0; } 986 | 987 | .drawer-toggle:before { 988 | display: inline-block; 989 | position: relative; 990 | vertical-align: bottom; 991 | content: '\00a0\2261\00a0'; 992 | font-family: sans-serif; 993 | font-size: 1.5em; } 994 | @media screen and (min-width: 500px) { 995 | .drawer-toggle:not(.persistent) { 996 | display: none; } } 997 | 998 | [type="checkbox"].drawer { 999 | height: 1px; 1000 | width: 1px; 1001 | margin: -1px; 1002 | overflow: hidden; 1003 | position: absolute; 1004 | clip: rect(0 0 0 0); 1005 | -webkit-clip-path: inset(100%); 1006 | clip-path: inset(100%); } 1007 | [type="checkbox"].drawer + * { 1008 | display: block; 1009 | box-sizing: border-box; 1010 | position: fixed; 1011 | top: 0; 1012 | width: 320px; 1013 | height: 100vh; 1014 | overflow-y: auto; 1015 | background: var(--drawer-back-color); 1016 | border: 0.0625rem solid var(--drawer-border-color); 1017 | border-radius: 0; 1018 | margin: 0; 1019 | z-index: 1110; 1020 | right: -320px; 1021 | transition: right 0.3s; } 1022 | [type="checkbox"].drawer + * .drawer-close { 1023 | position: absolute; 1024 | top: var(--universal-margin); 1025 | right: var(--universal-margin); 1026 | z-index: 1111; 1027 | width: 2rem; 1028 | height: 2rem; 1029 | border-radius: var(--universal-border-radius); 1030 | padding: var(--universal-padding); 1031 | margin: 0; 1032 | cursor: pointer; 1033 | transition: background 0.3s; } 1034 | [type="checkbox"].drawer + * .drawer-close:before { 1035 | display: block; 1036 | content: '\00D7'; 1037 | color: var(--drawer-close-color); 1038 | position: relative; 1039 | font-family: sans-serif; 1040 | font-size: 2rem; 1041 | line-height: 1; 1042 | text-align: center; } 1043 | [type="checkbox"].drawer + * .drawer-close:hover, [type="checkbox"].drawer + * .drawer-close:focus { 1044 | background: var(--drawer-hover-back-color); } 1045 | @media screen and (max-width: 320px) { 1046 | [type="checkbox"].drawer + * { 1047 | width: 100%; } } 1048 | [type="checkbox"].drawer:checked + * { 1049 | right: 0; } 1050 | @media screen and (min-width: 500px) { 1051 | [type="checkbox"].drawer:not(.persistent) + * { 1052 | position: static; 1053 | height: 100%; 1054 | z-index: 1100; } 1055 | [type="checkbox"].drawer:not(.persistent) + * .drawer-close { 1056 | display: none; } } 1057 | 1058 | /* 1059 | Definitions for the responsive table component. 1060 | */ 1061 | /* Table module CSS variable definitions. */ 1062 | :root { 1063 | --table-border-color: #aaa; 1064 | --table-border-separator-color: #666; 1065 | --table-head-back-color: #e6e6e6; 1066 | --table-head-fore-color: #111; 1067 | --table-body-back-color: #f8f8f8; 1068 | --table-body-fore-color: #111; 1069 | --table-body-alt-back-color: #eee; } 1070 | 1071 | table { 1072 | border-collapse: separate; 1073 | border-spacing: 0; 1074 | : margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); 1075 | display: flex; 1076 | flex: 0 1 auto; 1077 | flex-flow: row wrap; 1078 | padding: var(--universal-padding); 1079 | padding-top: 0; 1080 | margin: calc(1.5 * var(--universal-margin)) var(--universal-margin); } 1081 | table caption { 1082 | font-size: 1.25 * rem; 1083 | margin: calc(2 * var(--universal-margin)) 0; 1084 | max-width: 100%; 1085 | flex: 0 0 100%; 1086 | text-align: left;} 1087 | table thead, table tbody { 1088 | display: flex; 1089 | flex-flow: row wrap; 1090 | border: 0.0625rem solid var(--table-border-color); } 1091 | table thead { 1092 | z-index: 999; 1093 | border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; 1094 | border-bottom: 0.0625rem solid var(--table-border-separator-color); } 1095 | table tbody { 1096 | border-top: 0; 1097 | margin-top: calc(0 - var(--universal-margin)); 1098 | border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } 1099 | table tr { 1100 | display: flex; 1101 | padding: 0; } 1102 | table th, table td { 1103 | padding: calc(0.5 * var(--universal-padding)); 1104 | font-size: 0.9rem; } 1105 | table th { 1106 | text-align: left; 1107 | background: var(--table-head-back-color); 1108 | color: var(--table-head-fore-color); } 1109 | table td { 1110 | background: var(--table-body-back-color); 1111 | color: var(--table-body-fore-color); 1112 | border-top: 0.0625rem solid var(--table-border-color); } 1113 | 1114 | table:not(.horizontal) { 1115 | overflow: auto; 1116 | max-height: 850px; } 1117 | table:not(.horizontal) thead, table:not(.horizontal) tbody { 1118 | max-width: 100%; 1119 | flex: 0 0 100%; } 1120 | table:not(.horizontal) tr { 1121 | flex-flow: row wrap; 1122 | flex: 0 0 100%; } 1123 | table:not(.horizontal) th, table:not(.horizontal) td { 1124 | flex: 1 0 0%; 1125 | overflow: hidden; 1126 | text-overflow: ellipsis; } 1127 | table:not(.horizontal) thead { 1128 | position: sticky; 1129 | top: 0; } 1130 | table:not(.horizontal) tbody tr:first-child td { 1131 | border-top: 0; } 1132 | 1133 | table.horizontal { 1134 | border: 0; } 1135 | table.horizontal thead, table.horizontal tbody { 1136 | border: 0; 1137 | flex-flow: row nowrap; } 1138 | table.horizontal tbody { 1139 | overflow: auto; 1140 | justify-content: space-between; 1141 | flex: 1 0 0; 1142 | margin-left: calc( 4 * var(--universal-margin)); 1143 | padding-bottom: calc(var(--universal-padding) / 4); } 1144 | table.horizontal tr { 1145 | flex-direction: column; 1146 | flex: 1 0 auto; } 1147 | table.horizontal th, table.horizontal td { 1148 | width: 100%; 1149 | border: 0; 1150 | border-bottom: 0.0625rem solid var(--table-border-color); } 1151 | table.horizontal th:not(:first-child), table.horizontal td:not(:first-child) { 1152 | border-top: 0; } 1153 | table.horizontal th { 1154 | text-align: right; 1155 | border-left: 0.0625rem solid var(--table-border-color); 1156 | border-right: 0.0625rem solid var(--table-border-separator-color); } 1157 | table.horizontal thead tr:first-child { 1158 | padding-left: 0; } 1159 | table.horizontal th:first-child, table.horizontal td:first-child { 1160 | border-top: 0.0625rem solid var(--table-border-color); } 1161 | table.horizontal tbody tr:last-child td { 1162 | border-right: 0.0625rem solid var(--table-border-color); } 1163 | table.horizontal tbody tr:last-child td:first-child { 1164 | border-top-right-radius: 0.25rem; } 1165 | table.horizontal tbody tr:last-child td:last-child { 1166 | border-bottom-right-radius: 0.25rem; } 1167 | table.horizontal thead tr:first-child th:first-child { 1168 | border-top-left-radius: 0.25rem; } 1169 | table.horizontal thead tr:first-child th:last-child { 1170 | border-bottom-left-radius: 0.25rem; } 1171 | 1172 | @media screen and (max-width: 499px) { 1173 | table, table.horizontal { 1174 | border-collapse: collapse; 1175 | border: 0; 1176 | width: 100%; 1177 | display: table; } 1178 | table thead, table th, table.horizontal thead, table.horizontal th { 1179 | border: 0; 1180 | height: 1px; 1181 | width: 1px; 1182 | margin: -1px; 1183 | overflow: hidden; 1184 | padding: 0; 1185 | position: absolute; 1186 | clip: rect(0 0 0 0); 1187 | -webkit-clip-path: inset(100%); 1188 | clip-path: inset(100%); } 1189 | table tbody, table.horizontal tbody { 1190 | border: 0; 1191 | display: table-row-group; } 1192 | table tr, table.horizontal tr { 1193 | display: block; 1194 | border: 0.0625rem solid var(--table-border-color); 1195 | border-radius: var(--universal-border-radius); 1196 | background: #fafafa; 1197 | padding: var(--universal-padding); 1198 | margin: var(--universal-margin); 1199 | margin-bottom: calc(2 * var(--universal-margin)); } 1200 | table th, table td, table.horizontal th, table.horizontal td { 1201 | width: auto; } 1202 | table td, table.horizontal td { 1203 | display: block; 1204 | border: 0; 1205 | text-align: right; } 1206 | table td:before, table.horizontal td:before { 1207 | content: attr(data-label); 1208 | float: left; 1209 | font-weight: 600; } 1210 | table th:first-child, table td:first-child, table.horizontal th:first-child, table.horizontal td:first-child { 1211 | border-top: 0; } 1212 | table tbody tr:last-child td, table.horizontal tbody tr:last-child td { 1213 | border-right: 0; } } 1214 | :root { 1215 | --table-body-alt-back-color: #eee; } 1216 | 1217 | table tr:nth-of-type(2n) > td { 1218 | background: var(--table-body-alt-back-color); } 1219 | 1220 | @media screen and (max-width: 500px) { 1221 | table tr:nth-of-type(2n) { 1222 | background: var(--table-body-alt-back-color); } } 1223 | :root { 1224 | --table-body-hover-back-color: #90caf9; } 1225 | 1226 | table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { 1227 | background: var(--table-body-hover-back-color); } 1228 | 1229 | @media screen and (max-width: 500px) { 1230 | table.hoverable tr:hover, table.hoverable tr:hover > td, table.hoverable tr:focus, table.hoverable tr:focus > td { 1231 | background: var(--table-body-hover-back-color); } } 1232 | /* 1233 | Definitions for contextual background elements, toasts and tooltips. 1234 | */ 1235 | /* Contextual module CSS variable definitions */ 1236 | :root { 1237 | --mark-back-color: #0277bd; 1238 | --mark-fore-color: #fafafa; } 1239 | 1240 | mark { 1241 | background: var(--mark-back-color); 1242 | color: var(--mark-fore-color); 1243 | font-size: 0.95em; 1244 | line-height: 1em; 1245 | border-radius: var(--universal-border-radius); 1246 | padding: calc(var(--universal-padding) / 4) calc(var(--universal-padding) / 2); } 1247 | mark.inline-block { 1248 | display: inline-block; 1249 | font-size: 1em; 1250 | line-height: 1.5; 1251 | padding: calc(var(--universal-padding) / 2) var(--universal-padding); } 1252 | 1253 | :root { 1254 | --toast-back-color: #424242; 1255 | --toast-fore-color: #fafafa; } 1256 | 1257 | .toast { 1258 | position: fixed; 1259 | bottom: calc(var(--universal-margin) * 3); 1260 | left: 50%; 1261 | transform: translate(-50%, -50%); 1262 | z-index: 1111; 1263 | color: var(--toast-fore-color); 1264 | background: var(--toast-back-color); 1265 | border-radius: calc(var(--universal-border-radius) * 16); 1266 | padding: var(--universal-padding) calc(var(--universal-padding) * 3); } 1267 | 1268 | :root { 1269 | --tooltip-back-color: #212121; 1270 | --tooltip-fore-color: #fafafa; } 1271 | 1272 | .tooltip { 1273 | position: relative; 1274 | display: inline-block; } 1275 | .tooltip:before, .tooltip:after { 1276 | position: absolute; 1277 | opacity: 0; 1278 | clip: rect(0 0 0 0); 1279 | -webkit-clip-path: inset(100%); 1280 | clip-path: inset(100%); 1281 | transition: all 0.3s; 1282 | z-index: 1010; 1283 | left: 50%; } 1284 | .tooltip:not(.bottom):before, .tooltip:not(.bottom):after { 1285 | bottom: 75%; } 1286 | .tooltip.bottom:before, .tooltip.bottom:after { 1287 | top: 75%; } 1288 | .tooltip:hover:before, .tooltip:hover:after, .tooltip:focus:before, .tooltip:focus:after { 1289 | opacity: 1; 1290 | clip: auto; 1291 | -webkit-clip-path: inset(0%); 1292 | clip-path: inset(0%); } 1293 | .tooltip:before { 1294 | content: ''; 1295 | background: transparent; 1296 | border: var(--universal-margin) solid transparent; 1297 | left: calc(50% - var(--universal-margin)); } 1298 | .tooltip:not(.bottom):before { 1299 | border-top-color: #212121; } 1300 | .tooltip.bottom:before { 1301 | border-bottom-color: #212121; } 1302 | .tooltip:after { 1303 | content: attr(aria-label); 1304 | color: var(--tooltip-fore-color); 1305 | background: var(--tooltip-back-color); 1306 | border-radius: var(--universal-border-radius); 1307 | padding: var(--universal-padding); 1308 | white-space: nowrap; 1309 | transform: translateX(-50%); } 1310 | .tooltip:not(.bottom):after { 1311 | margin-bottom: calc(2 * var(--universal-margin)); } 1312 | .tooltip.bottom:after { 1313 | margin-top: calc(2 * var(--universal-margin)); } 1314 | 1315 | :root { 1316 | --modal-overlay-color: rgba(0, 0, 0, 0.45); 1317 | --modal-close-color: #444; 1318 | --modal-close-hover-color: #f0f0f0; } 1319 | 1320 | [type="checkbox"].modal { 1321 | height: 1px; 1322 | width: 1px; 1323 | margin: -1px; 1324 | overflow: hidden; 1325 | position: absolute; 1326 | clip: rect(0 0 0 0); 1327 | -webkit-clip-path: inset(100%); 1328 | clip-path: inset(100%); } 1329 | [type="checkbox"].modal + div { 1330 | position: fixed; 1331 | top: 0; 1332 | left: 0; 1333 | display: none; 1334 | width: 100vw; 1335 | height: 100vh; 1336 | background: var(--modal-overlay-color); } 1337 | [type="checkbox"].modal + div .card { 1338 | margin: 0 auto; 1339 | max-height: 50vh; 1340 | overflow: auto; } 1341 | [type="checkbox"].modal + div .card .modal-close { 1342 | position: absolute; 1343 | top: 0; 1344 | right: 0; 1345 | width: 1.75rem; 1346 | height: 1.75rem; 1347 | border-radius: var(--universal-border-radius); 1348 | padding: var(--universal-padding); 1349 | margin: 0; 1350 | cursor: pointer; 1351 | transition: background 0.3s; } 1352 | [type="checkbox"].modal + div .card .modal-close:before { 1353 | display: block; 1354 | content: '\00D7'; 1355 | color: var(--modal-close-color); 1356 | position: relative; 1357 | font-family: sans-serif; 1358 | font-size: 1.75rem; 1359 | line-height: 1; 1360 | text-align: center; } 1361 | [type="checkbox"].modal + div .card .modal-close:hover, [type="checkbox"].modal + div .card .modal-close:focus { 1362 | background: var(--modal-close-hover-color); } 1363 | [type="checkbox"].modal:checked + div { 1364 | display: flex; 1365 | flex: 0 1 auto; 1366 | z-index: 1200; } 1367 | [type="checkbox"].modal:checked + div .card .modal-close { 1368 | z-index: 1211; } 1369 | 1370 | :root { 1371 | --collapse-label-back-color: #e8e8e8; 1372 | --collapse-label-fore-color: #212121; 1373 | --collapse-label-hover-back-color: #f0f0f0; 1374 | --collapse-selected-label-back-color: #ececec; 1375 | --collapse-border-color: #ddd; 1376 | --collapse-content-back-color: #fafafa; 1377 | --collapse-selected-label-border-color: #0277bd; } 1378 | 1379 | .collapse { 1380 | width: calc(100% - 2 * var(--universal-margin)); 1381 | opacity: 1; 1382 | display: flex; 1383 | flex-direction: column; 1384 | margin: var(--universal-margin); 1385 | border-radius: var(--universal-border-radius); } 1386 | .collapse > [type="radio"], .collapse > [type="checkbox"] { 1387 | height: 1px; 1388 | width: 1px; 1389 | margin: -1px; 1390 | overflow: hidden; 1391 | position: absolute; 1392 | clip: rect(0 0 0 0); 1393 | -webkit-clip-path: inset(100%); 1394 | clip-path: inset(100%); } 1395 | .collapse > label { 1396 | flex-grow: 1; 1397 | display: inline-block; 1398 | height: 1.5rem; 1399 | cursor: pointer; 1400 | transition: background 0.3s; 1401 | color: var(--collapse-label-fore-color); 1402 | background: var(--collapse-label-back-color); 1403 | border: 0.0625rem solid var(--collapse-border-color); 1404 | padding: calc(1.5 * var(--universal-padding)); } 1405 | .collapse > label:hover, .collapse > label:focus { 1406 | background: var(--collapse-label-hover-back-color); } 1407 | .collapse > label + div { 1408 | flex-basis: auto; 1409 | height: 1px; 1410 | width: 1px; 1411 | margin: -1px; 1412 | overflow: hidden; 1413 | position: absolute; 1414 | clip: rect(0 0 0 0); 1415 | -webkit-clip-path: inset(100%); 1416 | clip-path: inset(100%); 1417 | transition: max-height 0.3s; 1418 | max-height: 1px; } 1419 | .collapse > :checked + label { 1420 | background: var(--collapse-selected-label-back-color); 1421 | border-bottom-color: var(--collapse-selected-label-border-color); } 1422 | .collapse > :checked + label + div { 1423 | box-sizing: border-box; 1424 | position: relative; 1425 | width: 100%; 1426 | height: auto; 1427 | overflow: auto; 1428 | margin: 0; 1429 | background: var(--collapse-content-back-color); 1430 | border: 0.0625rem solid var(--collapse-border-color); 1431 | border-top: 0; 1432 | padding: var(--universal-padding); 1433 | clip: auto; 1434 | -webkit-clip-path: inset(0%); 1435 | clip-path: inset(0%); 1436 | max-height: 850px; } 1437 | .collapse > label:not(:first-of-type) { 1438 | border-top: 0; } 1439 | .collapse > label:first-of-type { 1440 | border-radius: var(--universal-border-radius) var(--universal-border-radius) 0 0; } 1441 | .collapse > label:last-of-type:not(:first-of-type) { 1442 | border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } 1443 | .collapse > label:last-of-type:first-of-type { 1444 | border-radius: var(--universal-border-radius); } 1445 | .collapse > :checked:last-of-type:not(:first-of-type) + label { 1446 | border-radius: 0; } 1447 | .collapse > :checked:last-of-type + label + div { 1448 | border-radius: 0 0 var(--universal-border-radius) var(--universal-border-radius); } 1449 | 1450 | /* 1451 | Custom elements for contextual background elements, toasts and tooltips. 1452 | */ 1453 | mark.secondary { 1454 | --mark-back-color: #d32f2f; } 1455 | 1456 | mark.tertiary { 1457 | --mark-back-color: #308732; } 1458 | 1459 | mark.tag { 1460 | padding: calc(var(--universal-padding)/2) var(--universal-padding); 1461 | border-radius: 1em; } 1462 | 1463 | /* 1464 | Definitions for progress elements and spinners. 1465 | */ 1466 | /* Progess module CSS variable definitions */ 1467 | :root { 1468 | --progress-back-color: #ddd; 1469 | --progress-fore-color: #555; } 1470 | 1471 | progress { 1472 | display: block; 1473 | vertical-align: baseline; 1474 | -webkit-appearance: none; 1475 | -moz-appearance: none; 1476 | appearance: none; 1477 | height: 0.75rem; 1478 | width: calc(100% - 2 * var(--universal-margin)); 1479 | margin: var(--universal-margin); 1480 | border: 0; 1481 | border-radius: calc(2 * var(--universal-border-radius)); 1482 | background: var(--progress-back-color); 1483 | color: var(--progress-fore-color); } 1484 | progress::-webkit-progress-value { 1485 | background: var(--progress-fore-color); 1486 | border-top-left-radius: calc(2 * var(--universal-border-radius)); 1487 | border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } 1488 | progress::-webkit-progress-bar { 1489 | background: var(--progress-back-color); } 1490 | progress::-moz-progress-bar { 1491 | background: var(--progress-fore-color); 1492 | border-top-left-radius: calc(2 * var(--universal-border-radius)); 1493 | border-bottom-left-radius: calc(2 * var(--universal-border-radius)); } 1494 | progress[value="1000"]::-webkit-progress-value { 1495 | border-radius: calc(2 * var(--universal-border-radius)); } 1496 | progress[value="1000"]::-moz-progress-bar { 1497 | border-radius: calc(2 * var(--universal-border-radius)); } 1498 | progress.inline { 1499 | display: inline-block; 1500 | vertical-align: middle; 1501 | width: 60%; } 1502 | 1503 | :root { 1504 | --spinner-back-color: #ddd; 1505 | --spinner-fore-color: #555; } 1506 | 1507 | @keyframes spinner-donut-anim { 1508 | 0% { 1509 | transform: rotate(0deg); } 1510 | 100% { 1511 | transform: rotate(360deg); } } 1512 | .spinner { 1513 | display: inline-block; 1514 | margin: var(--universal-margin); 1515 | border: 0.25rem solid var(--spinner-back-color); 1516 | border-left: 0.25rem solid var(--spinner-fore-color); 1517 | border-radius: 50%; 1518 | width: 1.25rem; 1519 | height: 1.25rem; 1520 | animation: spinner-donut-anim 1.2s linear infinite; } 1521 | 1522 | /* 1523 | Custom elements for progress bars and spinners. 1524 | */ 1525 | progress.primary { 1526 | --progress-fore-color: #1976d2; } 1527 | 1528 | progress.secondary { 1529 | --progress-fore-color: #d32f2f; } 1530 | 1531 | progress.tertiary { 1532 | --progress-fore-color: #308732; } 1533 | 1534 | .spinner.primary { 1535 | --spinner-fore-color: #1976d2; } 1536 | 1537 | .spinner.secondary { 1538 | --spinner-fore-color: #d32f2f; } 1539 | 1540 | .spinner.tertiary { 1541 | --spinner-fore-color: #308732; } 1542 | 1543 | /* 1544 | Definitions for icons - powered by Feather (https://feathericons.com/). 1545 | */ 1546 | span[class^='icon-'] { 1547 | display: inline-block; 1548 | height: 1em; 1549 | width: 1em; 1550 | vertical-align: -0.125em; 1551 | background-size: contain; 1552 | margin: 0 calc(var(--universal-margin) / 4); } 1553 | span[class^='icon-'].secondary { 1554 | -webkit-filter: invert(25%); 1555 | filter: invert(25%); } 1556 | span[class^='icon-'].inverse { 1557 | -webkit-filter: invert(100%); 1558 | filter: invert(100%); } 1559 | 1560 | span.icon-alert { 1561 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='8' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='16' x2='12' y2='16'%3E%3C/line%3E%3C/svg%3E"); } 1562 | span.icon-bookmark { 1563 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z'%3E%3C/path%3E%3C/svg%3E"); } 1564 | span.icon-calendar { 1565 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='18' height='18' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='16' y1='2' x2='16' y2='6'%3E%3C/line%3E%3Cline x1='8' y1='2' x2='8' y2='6'%3E%3C/line%3E%3Cline x1='3' y1='10' x2='21' y2='10'%3E%3C/line%3E%3C/svg%3E"); } 1566 | span.icon-credit { 1567 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='1' y='4' width='22' height='16' rx='2' ry='2'%3E%3C/rect%3E%3Cline x1='1' y1='10' x2='23' y2='10'%3E%3C/line%3E%3C/svg%3E"); } 1568 | span.icon-edit { 1569 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 14.66V20a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h5.34'%3E%3C/path%3E%3Cpolygon points='18 2 22 6 12 16 8 16 8 12 18 2'%3E%3C/polygon%3E%3C/svg%3E"); } 1570 | span.icon-link { 1571 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6'%3E%3C/path%3E%3Cpolyline points='15 3 21 3 21 9'%3E%3C/polyline%3E%3Cline x1='10' y1='14' x2='21' y2='3'%3E%3C/line%3E%3C/svg%3E"); } 1572 | span.icon-help { 1573 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3'%3E%3C/path%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='17' x2='12' y2='17'%3E%3C/line%3E%3C/svg%3E"); } 1574 | span.icon-home { 1575 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z'%3E%3C/path%3E%3Cpolyline points='9 22 9 12 15 12 15 22'%3E%3C/polyline%3E%3C/svg%3E"); } 1576 | span.icon-info { 1577 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'%3E%3C/circle%3E%3Cline x1='12' y1='16' x2='12' y2='12'%3E%3C/line%3E%3Cline x1='12' y1='8' x2='12' y2='8'%3E%3C/line%3E%3C/svg%3E"); } 1578 | span.icon-lock { 1579 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='11' width='18' height='11' rx='2' ry='2'%3E%3C/rect%3E%3Cpath d='M7 11V7a5 5 0 0 1 10 0v4'%3E%3C/path%3E%3C/svg%3E"); } 1580 | span.icon-mail { 1581 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z'%3E%3C/path%3E%3Cpolyline points='22,6 12,13 2,6'%3E%3C/polyline%3E%3C/svg%3E"); } 1582 | span.icon-location { 1583 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z'%3E%3C/path%3E%3Ccircle cx='12' cy='10' r='3'%3E%3C/circle%3E%3C/svg%3E"); } 1584 | span.icon-phone { 1585 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z'%3E%3C/path%3E%3C/svg%3E"); } 1586 | span.icon-rss { 1587 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 11a9 9 0 0 1 9 9'%3E%3C/path%3E%3Cpath d='M4 4a16 16 0 0 1 16 16'%3E%3C/path%3E%3Ccircle cx='5' cy='19' r='1'%3E%3C/circle%3E%3C/svg%3E"); } 1588 | span.icon-search { 1589 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); } 1590 | span.icon-settings { 1591 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='3'%3E%3C/circle%3E%3Cpath d='M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z'%3E%3C/path%3E%3C/svg%3E"); } 1592 | span.icon-share { 1593 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='18' cy='5' r='3'%3E%3C/circle%3E%3Ccircle cx='6' cy='12' r='3'%3E%3C/circle%3E%3Ccircle cx='18' cy='19' r='3'%3E%3C/circle%3E%3Cline x1='8.59' y1='13.51' x2='15.42' y2='17.49'%3E%3C/line%3E%3Cline x1='15.41' y1='6.51' x2='8.59' y2='10.49'%3E%3C/line%3E%3C/svg%3E"); } 1594 | span.icon-cart { 1595 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9' cy='21' r='1'%3E%3C/circle%3E%3Ccircle cx='20' cy='21' r='1'%3E%3C/circle%3E%3Cpath d='M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6'%3E%3C/path%3E%3C/svg%3E"); } 1596 | span.icon-upload { 1597 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'%3E%3C/path%3E%3Cpolyline points='17 8 12 3 7 8'%3E%3C/polyline%3E%3Cline x1='12' y1='3' x2='12' y2='15'%3E%3C/line%3E%3C/svg%3E"); } 1598 | span.icon-user { 1599 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2'%3E%3C/path%3E%3Ccircle cx='12' cy='7' r='4'%3E%3C/circle%3E%3C/svg%3E"); } 1600 | 1601 | /* 1602 | Definitions for utilities and helper classes. 1603 | */ 1604 | /* Utility module CSS variable definitions */ 1605 | :root { 1606 | --generic-border-color: rgba(0, 0, 0, 0.3); 1607 | --generic-box-shadow: 0 0.25rem 0.25rem 0 rgba(0, 0, 0, 0.125), 0 0.125rem 0.125rem -0.125rem rgba(0, 0, 0, 0.25); } 1608 | 1609 | .hidden { 1610 | display: none !important; } 1611 | 1612 | .visually-hidden { 1613 | position: absolute !important; 1614 | width: 1px !important; 1615 | height: 1px !important; 1616 | margin: -1px !important; 1617 | border: 0 !important; 1618 | padding: 0 !important; 1619 | clip: rect(0 0 0 0) !important; 1620 | -webkit-clip-path: inset(100%) !important; 1621 | clip-path: inset(100%) !important; 1622 | overflow: hidden !important; } 1623 | 1624 | .bordered { 1625 | border: 0.0625rem solid var(--generic-border-color) !important; } 1626 | 1627 | .rounded { 1628 | border-radius: var(--universal-border-radius) !important; } 1629 | 1630 | .circular { 1631 | border-radius: 50% !important; } 1632 | 1633 | .shadowed { 1634 | box-shadow: var(--generic-box-shadow) !important; } 1635 | 1636 | .responsive-margin { 1637 | margin: calc(var(--universal-margin) / 4) !important; } 1638 | @media screen and (min-width: 500px) { 1639 | .responsive-margin { 1640 | margin: calc(var(--universal-margin) / 2) !important; } } 1641 | @media screen and (min-width: 1280px) { 1642 | .responsive-margin { 1643 | margin: var(--universal-margin) !important; } } 1644 | 1645 | .responsive-padding { 1646 | padding: calc(var(--universal-padding) / 4) !important; } 1647 | @media screen and (min-width: 500px) { 1648 | .responsive-padding { 1649 | padding: calc(var(--universal-padding) / 2) !important; } } 1650 | @media screen and (min-width: 1280px) { 1651 | .responsive-padding { 1652 | padding: var(--universal-padding) !important; } } 1653 | 1654 | @media screen and (max-width: 499px) { 1655 | .hidden-sm { 1656 | display: none !important; } } 1657 | @media screen and (min-width: 500px) and (max-width: 1279px) { 1658 | .hidden-md { 1659 | display: none !important; } } 1660 | @media screen and (min-width: 1280px) { 1661 | .hidden-lg { 1662 | display: none !important; } } 1663 | @media screen and (max-width: 499px) { 1664 | .visually-hidden-sm { 1665 | position: absolute !important; 1666 | width: 1px !important; 1667 | height: 1px !important; 1668 | margin: -1px !important; 1669 | border: 0 !important; 1670 | padding: 0 !important; 1671 | clip: rect(0 0 0 0) !important; 1672 | -webkit-clip-path: inset(100%) !important; 1673 | clip-path: inset(100%) !important; 1674 | overflow: hidden !important; } } 1675 | @media screen and (min-width: 500px) and (max-width: 1279px) { 1676 | .visually-hidden-md { 1677 | position: absolute !important; 1678 | width: 1px !important; 1679 | height: 1px !important; 1680 | margin: -1px !important; 1681 | border: 0 !important; 1682 | padding: 0 !important; 1683 | clip: rect(0 0 0 0) !important; 1684 | -webkit-clip-path: inset(100%) !important; 1685 | clip-path: inset(100%) !important; 1686 | overflow: hidden !important; } } 1687 | @media screen and (min-width: 1280px) { 1688 | .visually-hidden-lg { 1689 | position: absolute !important; 1690 | width: 1px !important; 1691 | height: 1px !important; 1692 | margin: -1px !important; 1693 | border: 0 !important; 1694 | padding: 0 !important; 1695 | clip: rect(0 0 0 0) !important; 1696 | -webkit-clip-path: inset(100%) !important; 1697 | clip-path: inset(100%) !important; 1698 | overflow: hidden !important; } } 1699 | 1700 | /*# sourceMappingURL=mini-default.css.map */ 1701 | -------------------------------------------------------------------------------- /_htmresc/st_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/stm32-st7735/393aa0b5bd1a58b884d4f0ae8c5b91dde864ff75/_htmresc/st_logo.png -------------------------------------------------------------------------------- /st7735.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/stm32-st7735/393aa0b5bd1a58b884d4f0ae8c5b91dde864ff75/st7735.c -------------------------------------------------------------------------------- /st7735.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/STMicroelectronics/stm32-st7735/393aa0b5bd1a58b884d4f0ae8c5b91dde864ff75/st7735.h -------------------------------------------------------------------------------- /st7735_reg.c: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file st7735_reg.c 4 | * @author MCD Application Team 5 | * @brief This file includes the LCD driver for st7735 LCD. 6 | ****************************************************************************** 7 | * @attention 8 | * 9 | *

© Copyright (c) 2018 STMicroelectronics. 10 | * All rights reserved.

11 | * 12 | * This software component is licensed by ST under BSD 3-Clause license, 13 | * the "License"; You may not use this file except in compliance with the 14 | * License. You may obtain a copy of the License at: 15 | * opensource.org/licenses/BSD-3-Clause 16 | * 17 | ****************************************************************************** 18 | */ 19 | 20 | /* Includes ------------------------------------------------------------------*/ 21 | #include "st7735_reg.h" 22 | 23 | /** @addtogroup BSP 24 | * @{ 25 | */ 26 | 27 | /** @addtogroup Components 28 | * @{ 29 | */ 30 | 31 | /** @addtogroup ST7735_REG 32 | * @{ 33 | */ 34 | 35 | /** @addtogroup ST7735_REG_Exported_Functions 36 | * @{ 37 | */ 38 | 39 | /** 40 | * @brief Read ST7735 register 41 | * @param ctx Component context 42 | * @param reg Register to read 43 | * @param pdata data to read from the register 44 | * @retval Component status 45 | */ 46 | int32_t st7735_read_reg(st7735_ctx_t *ctx, uint8_t reg, uint8_t *pdata) 47 | { 48 | return ctx->ReadReg(ctx->handle, reg, pdata); 49 | } 50 | 51 | /** 52 | * @brief Write ST7735 register 53 | * @param ctx Component context 54 | * @param reg Register to write 55 | * @param pdata data to write to the register 56 | * @param length length of data to write to the register 57 | * @retval Component status 58 | */ 59 | int32_t st7735_write_reg(st7735_ctx_t *ctx, uint8_t reg, uint8_t *pdata, uint32_t length) 60 | { 61 | return ctx->WriteReg(ctx->handle, reg, pdata, length); 62 | } 63 | 64 | /** 65 | * @brief Send data 66 | * @param ctx Component context 67 | * @param pdata data to write 68 | * @param length length of data to write 69 | * @retval Component status 70 | */ 71 | int32_t st7735_send_data(st7735_ctx_t *ctx, uint8_t *pdata, uint32_t length) 72 | { 73 | return ctx->SendData(ctx->handle, pdata, length); 74 | } 75 | 76 | /** 77 | * @brief Recieve data 78 | * @param ctx Component context 79 | * @param pdata data to read 80 | * @param length length of data to read 81 | * @retval Component status 82 | */ 83 | int32_t st7735_recv_data(st7735_ctx_t *ctx, uint8_t *pdata, uint32_t length) 84 | { 85 | return ctx->RecvData(ctx->handle, pdata, length); 86 | } 87 | 88 | /** 89 | * @} 90 | */ 91 | 92 | /** 93 | * @} 94 | */ 95 | 96 | /** 97 | * @} 98 | */ 99 | 100 | /** 101 | * @} 102 | */ 103 | 104 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 105 | -------------------------------------------------------------------------------- /st7735_reg.h: -------------------------------------------------------------------------------- 1 | /** 2 | ****************************************************************************** 3 | * @file st7735_reg.h 4 | * @author MCD Application Team 5 | * @brief This file contains all the functions prototypes for the st7735_regs.c 6 | * driver. 7 | ****************************************************************************** 8 | * @attention 9 | * 10 | *

© Copyright (c) 2018 STMicroelectronics. 11 | * All rights reserved.

12 | * 13 | * This software component is licensed by ST under BSD 3-Clause license, 14 | * the "License"; You may not use this file except in compliance with the 15 | * License. You may obtain a copy of the License at: 16 | * opensource.org/licenses/BSD-3-Clause 17 | * 18 | ****************************************************************************** 19 | */ 20 | 21 | /* Define to prevent recursive inclusion -------------------------------------*/ 22 | #ifndef ST7735_REG_H 23 | #define ST7735_REG_H 24 | 25 | #ifdef __cplusplus 26 | extern "C" { 27 | #endif 28 | 29 | /* Includes ------------------------------------------------------------------*/ 30 | #include 31 | 32 | /** @addtogroup BSP 33 | * @{ 34 | */ 35 | 36 | /** @addtogroup Components 37 | * @{ 38 | */ 39 | 40 | /** @defgroup ST7735_REG ST7735 Registers 41 | * @{ 42 | */ 43 | 44 | /** @defgroup ST7735_REG_Exported_Constants Exported Constants 45 | * @{ 46 | */ 47 | 48 | /** 49 | * @brief ST7735 Registers 50 | */ 51 | #define ST7735_NOP 0x00U /* No Operation: NOP */ 52 | #define ST7735_SW_RESET 0x01U /* Software reset: SWRESET */ 53 | #define ST7735_READ_ID 0x04U /* Read Display ID: RDDID */ 54 | #define ST7735_READ_STATUS 0x09U /* Read Display Statu: RDDST */ 55 | #define ST7735_READ_POWER_MODE 0x0AU /* Read Display Power: RDDPM */ 56 | #define ST7735_READ_MADCTL 0x0BU /* Read Display: RDDMADCTL */ 57 | #define ST7735_READ_PIXEL_FORMAT 0x0CU /* Read Display Pixel: RDDCOLMOD */ 58 | #define ST7735_READ_IMAGE_MODE 0x0DU /* Read Display Image: RDDIM */ 59 | #define ST7735_READ_SIGNAL_MODE 0x0EU /* Read Display Signal: RDDSM */ 60 | #define ST7735_SLEEP_IN 0x10U /* Sleep in & booster off: SLPIN */ 61 | #define ST7735_SLEEP_OUT 0x11U /* Sleep out & booster on: SLPOUT */ 62 | #define ST7735_PARTIAL_DISPLAY_ON 0x12U /* Partial mode on: PTLON */ 63 | #define ST7735_NORMAL_DISPLAY_OFF 0x13U /* Partial off (Normal): NORON */ 64 | #define ST7735_DISPLAY_INVERSION_OFF 0x20U /* Display inversion off: INVOFF */ 65 | #define ST7735_DISPLAY_INVERSION_ON 0x21U /* Display inversion on: INVON */ 66 | #define ST7735_GAMMA_SET 0x26U /* Gamma curve select: GAMSET */ 67 | #define ST7735_DISPLAY_OFF 0x28U /* Display off: DISPOFF */ 68 | #define ST7735_DISPLAY_ON 0x29U /* Display on: DISPON */ 69 | #define ST7735_CASET 0x2AU /* Column address set: CASET */ 70 | #define ST7735_RASET 0x2BU /* Row address set: RASET */ 71 | #define ST7735_WRITE_RAM 0x2CU /* Memory write: RAMWR */ 72 | #define ST7735_RGBSET 0x2DU /* LUT for 4k,65k,262k color: RGBSET */ 73 | #define ST7735_READ_RAM 0x2EU /* Memory read: RAMRD */ 74 | #define ST7735_PTLAR 0x30U /* Partial start/end address set: PTLAR */ 75 | #define ST7735_TE_LINE_OFF 0x34U /* Tearing effect line off: TEOFF */ 76 | #define ST7735_TE_LINE_ON 0x35U /* Tearing effect mode set & on: TEON */ 77 | #define ST7735_MADCTL 0x36U /* Memory data access control: MADCTL */ 78 | #define ST7735_IDLE_MODE_OFF 0x38U /* Idle mode off: IDMOFF */ 79 | #define ST7735_IDLE_MODE_ON 0x39U /* Idle mode on: IDMON */ 80 | #define ST7735_COLOR_MODE 0x3AU /* Interface pixel format: COLMOD */ 81 | #define ST7735_FRAME_RATE_CTRL1 0xB1U /* In normal mode (Full colors): FRMCTR1 */ 82 | #define ST7735_FRAME_RATE_CTRL2 0xB2U /* In Idle mode (8-colors): FRMCTR2 */ 83 | #define ST7735_FRAME_RATE_CTRL3 0xB3U /* In partial mode + Full colors: FRMCTR3 */ 84 | #define ST7735_FRAME_INVERSION_CTRL 0xB4U /* Display inversion control: INVCTR */ 85 | #define ST7735_DISPLAY_SETTING 0xB6U /* Display function setting */ 86 | #define ST7735_PWR_CTRL1 0xC0U /* Power control setting: PWCTR1 */ 87 | #define ST7735_PWR_CTRL2 0xC1U /* Power control setting: PWCTR2 */ 88 | #define ST7735_PWR_CTRL3 0xC2U /* In normal mode (Full colors): PWCTR3 */ 89 | #define ST7735_PWR_CTRL4 0xC3U /* In Idle mode (8-colors): PWCTR4 */ 90 | #define ST7735_PWR_CTRL5 0xC4U /* In partial mode + Full colors: PWCTR5 */ 91 | #define ST7735_VCOMH_VCOML_CTRL1 0xC5U /* VCOM control 1: VMCTR1 */ 92 | #define ST7735_VMOF_CTRL 0xC7U /* Set VCOM offset control: VMOFCTR */ 93 | #define ST7735_WRID2 0xD1U /* Set LCM version code: WRID2 */ 94 | #define ST7735_WRID3 0xD2U /* Customer Project code: WRID3 */ 95 | #define ST7735_NV_CTRL1 0xD9U /* NVM control status: NVCTR1 */ 96 | #define ST7735_READ_ID1 0xDAU /* Read ID1: RDID1 */ 97 | #define ST7735_READ_ID2 0xDBU /* Read ID2: RDID2 */ 98 | #define ST7735_READ_ID3 0xDCU /* Read ID3: RDID3 */ 99 | #define ST7735_NV_CTRL2 0xDEU /* NVM Read Command: NVCTR2 */ 100 | #define ST7735_NV_CTRL3 0xDFU /* NVM Write Command: NVCTR3 */ 101 | #define ST7735_PV_GAMMA_CTRL 0xE0U /* Set Gamma adjustment (+ polarity): GAMCTRP1 */ 102 | #define ST7735_NV_GAMMA_CTRL 0xE1U /* Set Gamma adjustment (- polarity): GAMCTRN1 */ 103 | #define ST7735_EXT_CTRL 0xF0U /* Extension command control */ 104 | #define ST7735_PWR_CTRL6 0xFCU /* In partial mode + Idle mode: PWCTR6 */ 105 | #define ST7735_VCOM4_LEVEL 0xFFU /* VCOM 4 level control */ 106 | 107 | /** 108 | * @} 109 | */ 110 | 111 | /** @defgroup ST7735_REG_Exported_Types Exported Types 112 | * @{ 113 | */ 114 | typedef int32_t (*ST7735_Write_Func)(void *, uint8_t, uint8_t*, uint32_t); 115 | typedef int32_t (*ST7735_Read_Func) (void *, uint8_t, uint8_t*); 116 | typedef int32_t (*ST7735_Send_Func) (void *, uint8_t*, uint32_t); 117 | typedef int32_t (*ST7735_Recv_Func) (void *, uint8_t*, uint32_t); 118 | 119 | typedef struct 120 | { 121 | ST7735_Write_Func WriteReg; 122 | ST7735_Read_Func ReadReg; 123 | ST7735_Send_Func SendData; 124 | ST7735_Recv_Func RecvData; 125 | void *handle; 126 | } st7735_ctx_t; 127 | 128 | /** 129 | * @} 130 | */ 131 | 132 | /** @defgroup ST7735_REG_Exported_Functions Exported Functions 133 | * @{ 134 | */ 135 | int32_t st7735_write_reg(st7735_ctx_t *ctx, uint8_t reg, uint8_t *pdata, uint32_t length); 136 | int32_t st7735_read_reg(st7735_ctx_t *ctx, uint8_t reg, uint8_t *pdata); 137 | int32_t st7735_send_data(st7735_ctx_t *ctx, uint8_t *pdata, uint32_t length); 138 | int32_t st7735_recv_data(st7735_ctx_t *ctx, uint8_t *pdata, uint32_t length); 139 | 140 | /** 141 | * @} 142 | */ 143 | 144 | #ifdef __cplusplus 145 | } 146 | #endif 147 | 148 | #endif /* ST7735_REG_H */ 149 | 150 | /** 151 | * @} 152 | */ 153 | 154 | /** 155 | * @} 156 | */ 157 | 158 | /** 159 | * @} 160 | */ 161 | 162 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 163 | --------------------------------------------------------------------------------