| /* |
| |
| //infra-sk/themes.scss is a common theme to be used across all Skia |
| infrastructure applications so that we have a consistent look and feel. |
| |
| This file consists of several different layers of styling that can be opted |
| into. |
| |
| |
| # Layer 1 |
| |
| The first layer is a consistent styling of all buttons, select controls, and |
| tables, that are applied globally. You get this just by including the |
| themes.scss file. |
| |
| |
| # Layer 2 |
| |
| The second layer is applied by adding the `body-sk` class to the <body> element |
| of a page. This layer adds a large number of semantic CSS variables, whose names |
| come from Material Design, that are to be used for styling elements. For |
| example, if you have a panel that should look like a surface then it can be |
| styled as: |
| |
| my-panel { |
| background: var(--surface); |
| color: var(--on-surface); |
| } |
| |
| These semantic colors are supplied in two sets, one for light mode and another |
| for dark mode. Dark mode is turned on by adding the `darkmode` class to an |
| element, which triggers that element and all of its children to move to |
| darkmode. |
| |
| The darkmode/lightmode is usually controlled via the `theme-chooser-sk` control |
| which toggles the `darkmode` class on the body element and persists the user's |
| choice in local storage. |
| |
| The `body-sk` class also adds more styling to many common elements such as |
| buttons, links, and other elements-sk elements. |
| |
| The Material Design pallette was created from |
| |
| https://www.figma.com/community/plugin/1020820278641129628/Material-Theme-Builder-1P |
| |
| using these two colors as the seeds: |
| |
| primary: #005db7 |
| secondary: #006e1c |
| |
| And then translate all the CSS variables it provides into the CSS variables of |
| the existing theme structure. For example: `--md-sys-color-primary-light` |
| becomes `--primary`. |
| |
| An alternate source for the algorithms used to generate the color pallette are |
| here: |
| |
| https://github.com/material-foundation/material-color-utilities |
| |
| # Layer 3 |
| |
| The third layer is applied by adding the `font-sk` class to the body element of |
| a page. This layer sets consistent font styling for a page, and adds `--font` |
| and `--mono-font` CSS variables. |
| |
| To see all of the semantic names and their values working, along with and |
| example elements in both dark and light mode, run: |
| |
| $ ./demopage.sh infra-sk/modules/theme-chooser-sk/ |
| |
| You can use the theme-chooser-sk element on that demo page to toggle between |
| dark and light modes. |
| |
| Most applications should use `app-sk` as their base element, so you can also run |
| |
| $ ./demopage.sh infra-sk/modules/app-sk/ |
| |
| to see how these styles apply to title bars and sidebars. |
| |
| */ |
| |
| @import '../elements-sk/modules/themes/themes'; |
| @import '../elements-sk/modules/styles/buttons'; |
| @import '../elements-sk/modules/styles/select'; |
| @import '../elements-sk/modules/styles/table'; |
| |
| @import 'tokens'; |
| |
| .body-sk { |
| &.font-sk, |
| & .font-sk { |
| /* Typography */ |
| --font: Roboto, Arial, 'Bitstream Vera Sans', sans-serif; |
| --mono-font: Roboto Mono, monospace; |
| |
| * { |
| font-size: 14px; |
| font-family: var(--font); |
| box-sizing: border-box; |
| } |
| |
| h1 { |
| font-size: 20px; |
| margin: 16px 0; |
| } |
| |
| h2 { |
| font-size: 18px; |
| margin: 14px 0; |
| } |
| |
| h3 { |
| font-size: 16px; |
| font-weight: 800; |
| margin: 12px 0; |
| } |
| |
| h4 { |
| font-size: 14px; |
| font-weight: 800; |
| margin: 10px 0; |
| } |
| |
| h5 { |
| font-size: 12px; |
| font-weight: 600; |
| margin: 8px 0; |
| } |
| |
| code, |
| pre { |
| font-family: var(--mono-font); |
| } |
| } |
| |
| .icon-sk { |
| font-family: 'Material Symbols Outlined'; |
| font-weight: normal; |
| font-style: normal; |
| font-size: 20px; |
| line-height: 1; |
| letter-spacing: normal; |
| text-transform: none; |
| display: inline-block; |
| white-space: nowrap; |
| word-wrap: normal; |
| direction: ltr; |
| -webkit-font-feature-settings: 'liga'; |
| -webkit-font-smoothing: antialiased; |
| width: 20px; |
| height: 20px; |
| overflow: hidden; |
| } |
| |
| .large-icon-sk { |
| @extend .icon-sk; |
| font-size: 24px; |
| width: 24px; |
| height: 24px; |
| overflow: hidden; |
| } |
| |
| --transparent-overlay: rgba(0, 0, 0, 0.5); |
| |
| --failure-alpha: rgba(217, 95, 2, 0.8); |
| --failure: rgb(217, 95, 2); |
| --on-failure: var(--on-background); |
| --on-success: var(--on-background); |
| --on-warning: var(--on-background); |
| --success-alpha: rgba(102, 166, 30, 0.3); |
| --success: rgb(102, 166, 30); |
| --warning-alpha: rgb(255, 171, 64, 0.8); |
| --warning: rgb(255, 167, 38); |
| --unexpected: rgb(117, 112, 179); |
| --unexpected-alpha: rgba(117, 112, 179, 1); |
| |
| --positive: #4caf50; |
| --negative: #f44336; |
| --untriaged: #8d6e63; |
| |
| &.darkmode, |
| & .darkmode { |
| --transparent-overlay: rgba(255, 255, 255, 0.5); |
| |
| --on-failure: var(--on-surface); |
| --on-success: var(--on-surface); |
| --on-warning: var(--on-surface); |
| } |
| |
| a:active, |
| a:visited, |
| a:link { |
| color: var(--primary); |
| } |
| |
| a:hover { |
| /* Distinguish hovering over links. */ |
| color: var(--primary-variant); |
| } |
| |
| .input-like, |
| input { |
| border: solid 1px var(--on-surface); |
| color: solid 1px var(--on-surface); |
| background: solid 1px var(--surface); |
| display: inline-block; |
| } |
| |
| .button-like, |
| button { |
| align-items: center; |
| background: transparent; |
| border-radius: 4px; |
| border: solid 1px var(--outline); |
| box-shadow: none; |
| color: var(--primary); |
| display: inline-flex; |
| fill: var(--primary); |
| font-size: 14px; |
| height: 24px; |
| justify-content: center; |
| margin: 8px 2px; |
| min-width: auto; |
| padding: 0 12px; |
| text-align: center; |
| text-transform: none; |
| |
| .icon-sk { |
| font-size: 20px; |
| } |
| |
| svg { |
| width: 20px; |
| height: 20px; |
| } |
| } |
| |
| .button-like.large, |
| button.large { |
| height: 36px; |
| padding: 0 18px; |
| |
| .icon-sk { |
| font-size: 24px; |
| } |
| |
| svg { |
| width: 24px; |
| height: 24px; |
| } |
| } |
| |
| .button-like:hover, |
| button.hover, |
| button:hover, |
| .button-like:focus, |
| button.focus, |
| button:focus { |
| opacity: 0.85; |
| outline: none; |
| background-color: var(--surface-1dp); |
| } |
| |
| .button-like:disabled, |
| button:disabled { |
| opacity: 0.85; |
| background: var(--on-disabled); |
| color: var(--disabled); |
| fill: var(--disabled); |
| } |
| |
| .button-like-action, |
| .button-like.action, |
| button.action { |
| color: var(--on-primary); |
| fill: var(--on-primary); |
| border: none; |
| background-color: var(--primary); |
| } |
| |
| .button-like.action:hover, |
| button.action.hover, |
| button.action:hover { |
| @extend .button-like-action; |
| opacity: 0.85; |
| } |
| |
| .button-like.action:disabled, |
| button.action.disabled, |
| button.action:disabled { |
| @extend .button-like-action; |
| opacity: 0.85; |
| background: var(--on-disabled); |
| color: var(--disabled); |
| fill: var(--disabled); |
| } |
| |
| multi-select-sk:focus, |
| select-sk:focus { |
| outline: dashed 1px var(--on-surface); |
| outline-offset: -4px; |
| } |
| |
| multi-select-sk { |
| border-radius: 4px; |
| border: solid 1px var(--outline); |
| background-color: var(--surface); |
| color: var(--on-surface); |
| } |
| |
| multi-select-sk > * { |
| background-color: var(--surface); |
| border: solid 1px var(--surface); |
| } |
| |
| multi-select-sk > [selected] { |
| background: var(--surface-2dp); |
| } |
| |
| multi-select-sk > :hover { |
| border: var(--surface-2dp) solid 1px; |
| } |
| |
| select, |
| select-sk { |
| border-radius: 4px; |
| border-color: var(--outline); |
| } |
| |
| select-sk, |
| select-sk > * { |
| background-color: var(--surface); |
| color: var(--on-surface); |
| } |
| |
| select-sk > [selected] { |
| background: var(--surface-2dp); |
| } |
| |
| select-sk > * { |
| border: var(--surface) solid 1px; |
| } |
| |
| select-sk > :hover { |
| border: var(--surface-2dp) solid 1px; |
| } |
| |
| select-sk > :focus { |
| background-color: var(--surface-2dp); |
| transition: background-color 0.1s cubic-bezier(0.4, 0, 0.2, 1); |
| } |
| |
| select-sk > [selected] { |
| background-color: var(--surface-2dp); |
| } |
| |
| error-toast-sk toast-sk { |
| border-radius: 4px; |
| background: var(--error-container); |
| color: var(--on-error-container); |
| fill: var(--on-error-container); |
| padding: 8px; |
| |
| button { |
| background: var(--error-container); |
| color: var(--on-error-container); |
| fill: var(--on-error-container); |
| } |
| } |
| |
| toast-sk { |
| border-radius: 4px; |
| color: var(--on-hightlight); |
| fill: var(--on-hightlight); |
| border: none; |
| background-color: var(--primary-highlight); |
| } |
| |
| error-toast-sk button { |
| margin: 0 0 0 8px; |
| padding: 4px; |
| } |
| |
| tabs-sk { |
| display: inline-flex; |
| |
| > button, |
| > .button-like { |
| border: none; |
| border-bottom: solid 4px transparent; |
| box-shadow: none; |
| border-radius: 0; |
| opacity: 0.85; |
| margin-bottom: 0px; |
| fill: var(--on-background); |
| color: var(--on-background); |
| } |
| > button.selected, |
| > .button-like.selected { |
| border-bottom: solid 4px var(--primary); |
| fill: var(--primary); |
| color: var(--primary); |
| } |
| } |
| |
| tabs-panel-sk { |
| margin-top: 0; |
| border-top: solid 1px var(--on-background); |
| } |
| |
| /* |
| This styling makes the `summary` element in a `details` element look like a |
| button. If `button` styles are updated then this styling should also be |
| updated to match. |
| */ |
| details { |
| summary { |
| @extend .button-like; |
| cursor: pointer; |
| list-style: none; |
| margin: 8px 4px 8px 0; |
| } |
| |
| summary::-webkit-details-marker { |
| display: none; |
| } |
| |
| summary:active { |
| box-shadow: none; |
| transition: box-shadow 0.2s ease-in; |
| } |
| } |
| |
| details[open] { |
| border: solid 1px var(--on-surface); |
| padding: 0 8px 16px 8px; |
| background: var(--surface); |
| margin: 8px 8px 8px 0; |
| |
| summary { |
| margin-top: 8px; |
| margin-bottom: 8px; |
| } |
| } |
| |
| details.expando { |
| display: block; |
| border: none; |
| margin: 0 8px; |
| padding: 8px; |
| background-color: var(--surface-1dp); |
| border-radius: 8px; |
| |
| summary { |
| align-items: center; |
| border: none; |
| display: flex; |
| font-weight: 500; |
| justify-content: space-between; |
| margin: 8px 0; |
| padding: 0; |
| border-radius: 0; |
| |
| expand-more-icon-sk { |
| display: inline-block; |
| } |
| |
| expand-less-icon-sk { |
| display: none; |
| } |
| } |
| } |
| |
| details.expando[open] { |
| summary { |
| expand-more-icon-sk { |
| display: none; |
| } |
| |
| expand-less-icon-sk { |
| display: inline-block; |
| } |
| } |
| } |
| |
| /* |
| The following styles are for scrollbars. There are some non-standard |
| looking styles because it is 2020 and there's still no standard way to |
| style scrollbars on a web page. |
| |
| https://caniuse.com/#feat=css-scrollbar |
| |
| There is currently an editor's draft for styling scrollbars: |
| https://drafts.csswg.org/css-scrollbars-1/, but it is only supported by |
| FireFox. So set that first. |
| */ |
| |
| * { |
| scrollbar-color: var(--surface-1dp) var(--background); |
| } |
| |
| /* Turn on a 13x13 scrollbar */ |
| ::-webkit-scrollbar { |
| width: 13px; |
| height: 13px; |
| } |
| |
| /* Turn off single button up on top and down on bottom */ |
| ::-webkit-scrollbar-button:start:decrement, |
| ::-webkit-scrollbar-button:end:increment, |
| ::-webkit-scrollbar-button:vertical:start:increment, |
| ::-webkit-scrollbar-button:vertical:end:decrement { |
| display: none; |
| } |
| |
| /* Track below and above */ |
| ::-webkit-scrollbar-track-piece { |
| background-color: var(--background); |
| border: solid 1px var(--surface-2dp); |
| } |
| |
| /* The thumb itself */ |
| ::-webkit-scrollbar-thumb { |
| border: solid 1px var(--on-surface); |
| background: var(--surface-1dp); |
| border-radius: 4px; |
| background: var(--primary); |
| color: var(--on-primary); |
| } |
| |
| /* Handle on hover */ |
| ::-webkit-scrollbar-thumb:hover { |
| background: var(--secondary); |
| } |
| |
| td { |
| font-size: 100%; |
| } |
| |
| th { |
| font-size: 100%; |
| } |
| } |