jspaint/styles/themes/modern.css

546 lines
13 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

:root {
--theme-loaded: "modern.css";
--Hilight: #0178d7;
--HilightText: #ffffff;
--WindowText: #000000;
--ButtonText: #000000;
}
body {
font-family: Roboto, sans-serif;
font-size: 15px;
}
.canvas-area > canvas {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACAQMAAABIeJ9nAAAABlBMVEW9vb3///8EwsWUAAAADElEQVQI12NoYHAAAAHEAMFJRSpJAAAAAElFTkSuQmCC") repeat;
/* 16px is a common grid size, but that gives 8px grid cells, and our max zoom is 8x */
/*background-size: 16px;*/
background-size: 8px;
}
@media (resolution: 1x), (resolution: 2x), (min-resolution: 3x) {
.canvas-area canvas,
.selection canvas,
.selection img {
image-rendering: -moz-crisp-edges;
image-rendering: crisp-edges;
image-rendering: pixelated;
}
}
.disable-aa-for-things-at-main-canvas-scale .main-canvas,
.disable-aa-for-things-at-main-canvas-scale .selection canvas {
image-rendering: -moz-crisp-edges;
image-rendering: crisp-edges;
image-rendering: pixelated;
}
.selection:after,
.textbox:after {
content: '';
position: absolute;
left: 0px;
top: 0px;
right: 0px;
bottom: 0px;
outline: 1px dashed black;
box-shadow: 0 0 0 1px white;
}
.canvas-area .handle {
background: #000080;
}
.useless-handle {
background: #fff;
box-shadow: 1px 1px 0 #000080 inset;
}
.resize-ghost {
outline: 1px dotted #ccc;
mix-blend-mode: difference;
}
.window {
--window-frame-color: #3f51b5;
}
.window:not(.focused) {
--window-frame-color: #9396a5;
}
.window:not(.maximized) {
border: 4px solid var(--window-frame-color);
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
.window,
.menu-popup {
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12);
}
.menu-popup {
border-radius: 2px;
}
.window-titlebar {
background: var(--window-frame-color);
color: white;
padding-left: 8px;
padding-right: 8px;
border-bottom: 4px solid var(--window-frame-color);
}
.tool-window .window-titlebar {
padding: 5px;
}
.window-title-area {
padding: 8px;
}
.window-content {
padding: 16px;
background: white;
color: black;
border-bottom-left-radius: 2px;
border-bottom-right-radius: 2px;
}
.component-window .window-content {
padding: 0;
}
.component-window .component {
padding: 4px 8px;
}
.window-button {
border: 0;
background: none;
color: transparent;
transform: scale(1.5);
font-size: 1px;
border-radius: 50%;
width: 17px;
height: 17px;
margin-left: 10px;
position: relative;
}
.window-button:hover {
background: rgba(255, 255, 255, 0.2);
}
.window-button:hover:active {
background: rgba(255, 255, 255, 0.5);
}
.os-window .window-button {
transform: scale(1.8);
}
.window-button::after {
color: white;
font-size: 15px;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
text-align: center;
}
.window-close-button::after {
content: "×";
}
.window-minimize-button::after {
content: "-";
}
.window-maximize-button::after {
content: "+";
}
.menus {
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.26);
}
.eye-gaze-mode .menu-button {
height: 3rem;
line-height: 3rem;
}
.menu-button,
.menu-item {
outline: 0;
}
.menu-button {
/*padding: 16px;*/
padding: 3px 7px 5px 7px;
margin-top: 2px;
border: 1px solid transparent;
}
.menu-button:hover {
background: #eeeeee;
}
.menu-button:active,
.menu-button.active {
background: #e5e5e5;
}
.menu-item:hover {
background: #eeeeee;
}
.menu-item:active,
.menu-item.active {
background: #e5e5e5;
}
.menu-popup {
background: white;
padding: 8px 0;
}
/*.menu-item {
padding: 6px 10px 6px 30px;
}*/
.menu-item td {
/*height: 32px;*/
height: 27px;
padding: 0;
}
.menu-item td:first-child {
padding-left: 16px;
}
.menu-item td:last-child {
padding-right: 16px;
}
.menu-item[disabled] {
color: #bdbdbd;
}
.menu-item.active {
background: #eeeeee;
}
.menu-hr {
/*height: 32px;*/
margin-top: 6px;
margin-bottom: 6px;
border: 0;
border-bottom: 1px solid rgba(0, 0, 0, 0.12);
}
.menu-item .menu-item-checkbox-area {
padding-right: 8px;
}
.menu-item .menu-item-shortcut {
padding-left: 16px;
}
/* Menu item SVG for checkboxes and submenu indicators, copy pasted from OS-GUI's CSS */
/* Note: viewBox is needed for scaling the SVG, used in Eye Gaze Mode */
/* spell-checker: disable */
.menu-item-checkbox-area::after {
-webkit-mask-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg' style='fill:currentColor;display:inline-block;vertical-align:middle' %3E%3Cpath d='M5 7v3l2 2 5-5V4L7 9Z'/%3E%3C/svg%3E");
mask-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg' style='fill:currentColor;display:inline-block;vertical-align:middle' %3E%3Cpath d='M5 7v3l2 2 5-5V4L7 9Z'/%3E%3C/svg%3E");
}
.menu-item-checkbox-area.radio::after {
-webkit-mask-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg' style='fill:currentColor;display:inline-block;vertical-align:middle' %3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");
mask-image: url("data:image/svg+xml,%3Csvg width='16' height='16' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg' style='fill:currentColor;display:inline-block;vertical-align:middle' %3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");
}
.has-submenu .menu-item-submenu-area::after {
-webkit-mask-image: url("data:image/svg+xml, %3Csvg width='16' height='16' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg' style='fill:currentColor;display:inline-block;vertical-align:middle' %3E%3Cpath d='m6 4 4 4-4 4z'/%3E%3C/svg%3E");
mask-image: url("data:image/svg+xml, %3Csvg width='16' height='16' viewBox='0 0 16 16' xmlns='http://www.w3.org/2000/svg' style='fill:currentColor;display:inline-block;vertical-align:middle' %3E%3Cpath d='m6 4 4 4-4 4z'/%3E%3C/svg%3E");
}
/* spell-checker: ensable */
.has-submenu .menu-item-submenu-area.point-right::after {
transform: scaleX(-1);
}
.menu-item-checkbox-area::after,
.menu-item-submenu-area::after {
content: "";
display: block;
width: 16px;
height: 16px;
/* no background means it's invisible by default here (masking transparent gives transparent, i.e. nothing) */
}
.menu-item[aria-checked=true] .menu-item-checkbox-area::after,
.menu-item.has-submenu .menu-item-submenu-area::after {
/* makes it visible */
background: currentColor;
}
.color-selection {
width: 18px;
height: 18px;
}
.color-button, /* this outer one is only for detection for the hover halo in eye gaze mode */
.edit-colors-window .swatch, /* this outer one is only for detection for the hover halo in eye gaze mode */
.color-button canvas,
.color-selection canvas,
.edit-colors-window .swatch canvas,
.color-button:after,
.color-selection:after,
.edit-colors-window .swatch:after {
border-radius: 3px;
position: relative;
}
.color-button::after,
.color-selection::after,
.edit-colors-window .swatch::after {
content: '';
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5) inset;
}
.eye-gaze-mode .colors-component.tall {
width: 53px;
}
.eye-gaze-mode .colors-component.tall .color-button {
margin-left: 1px;
}
.edit-colors-window .inset-shallow {
border: 1px solid rgba(0, 0, 0, 0.5);
border-radius: 3px;
}
.edit-colors-window .swatch {
width: 20px;
height: 17px;
}
.edit-colors-window .swatch:focus::after {
outline-offset: 3px;
}
/* @TODO: modern style (this is copied straight from classic.css) */
.font-box .toggle:enabled > .icon {
-webkit-mask-image: url("../../images/text-tools.png");
-webkit-mask-position: calc(-16px * var(--icon-index)) 0;
mask-image: url("../../images/text-tools.png");
mask-position: calc(-16px * var(--icon-index)) 0;
background-color: currentColor;
}
.font-box .toggle:disabled > .icon {
background-image: url("../../images/text-tools.png");
background-position: calc(-16px * var(--icon-index)) 0;
filter: saturate(0%) opacity(50%); /* fallback */
filter: url("#disabled-inset-filter-2");
}
/* @TODO: padding/margin on the top at least when in the sidebar */
.tools {
width: 50px;
}
.tool {
border: 0;
background: 0;
width: 24px;
height: 24px;
}
.tool.selected {
background: rgba(0, 0, 0, 0.24);
}
.toggle.selected {
box-shadow: 0px -2px 1px 0px blue;
}
.tool-icon,
.tool-icon.use-svg { /* specificity needed for overriding classic theme; SVG is not supported yet for this theme */
background-image: url("../../images/modern/tools.png");
background-repeat: no-repeat;
background-position: calc(-16px * var(--icon-index)) 0;
}
/* .tool-icon.use-svg {
background-image: url("../../images/modern/tools.svg");
background-position: calc(-16px * (var(--icon-index) * 2 + 1)) -16px;
} */
.eye-gaze-mode .tool-icon.use-svg {
background-image: url("../../images/classic/tools.svg");
background-position: calc(-16px * (var(--icon-index) * 2 + 1)) -16px;
}
.tool-options {
/* the layout currently depends on the exact pixel width (specifically the brush tool options) */
border: 1px solid rgba(0, 0, 0, 0.24);
}
.magnification-option {
/* background-image: url("../../images/options-magnification.png"); */
background-image: url("../../images/options-magnification.svg");
}
/* .magnification-option.use-svg {
background-image: url("../../images/options-magnification.svg");
} */
.transparent-mode-option {
background-image: url("../../images/modern/options-transparency.png");
}
.eye-gaze-mode .eye-gaze-mode-undo-button .button-icon {
background: url(../../images/classic/undo.svg);
}
.eye-gaze-mode .toggle-dwell-clicking .button-icon {
background: url(../../images/classic/eye-gaze-pause.svg);
}
.eye-gaze-mode.eye-gaze-mode-paused .toggle-dwell-clicking .button-icon {
background: url(../../images/classic/eye-gaze-unpause.svg);
}
.menus,
.component-area,
.status-area {
background: #fff;
}
.status-field {
height: 1.5rem;
line-height: 1.5rem;
}
.status-text {
padding-left: 8px;
}
body,
.canvas-area {
background: #7b7b7b;
/*background: #e9e9e9;*/
}
.canvas-area {
padding: 8px;
border: 1px solid gray;
}
.component-ghost {
border-radius: 2px;
transition: border-radius .2s ease, border-width .2s ease, opacity .2s ease;
outline: 0;
}
/* NOTE: copy/pasted from classic.css */
/* @TODO: actually show a preview of the component itself when dragging for the modern theme */
/* @TODO: cursor maybe? just when already dragging? */
.component-ghost.dock {
border: 1px solid #2196f3;
animation: squish 0.7s ease infinite;
}
@keyframes squish {
0% {
transform: scale(90%, 110%);
}
50% {
transform: scale(110%, 90%);
}
100% {
transform: scale(90%, 110%);
}
}
.component-ghost:not(.dock) {
border: 4px solid #2196f3;
opacity: 0.3;
animation: bobble 1s ease-in-out infinite;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
@keyframes bobble {
0% {
transform: scale(95%);
}
50% {
transform: scale(105%);
}
100% {
transform: scale(95%);
}
}
@media (prefers-reduced-motion) {
.component-ghost {
animation: none !important;
}
}
.resize-ghost.thick:after,
.resize-ghost.thick:before {
content: '';
position: absolute; left: 0; right: 0; top: 0; bottom: 0;
outline: 1px dotted #ccc;
}
.resize-ghost.thick:after {
outline-offset: 1px;
}
.resize-ghost.thick:before {
outline-offset: 2px;
}
:root {
/* for disabled button icon effect */
--ButtonHilight: #fff;
--ButtonShadow: #aaa;
}
.help-window .resizer {
background-color: #aaa !important;
border: 0 !important;
box-shadow: none !important;
}
.help-window .toolbar button {
width: 60px;
height: 42px;
margin-left: 2px;
margin-right: 0;
margin-top: 2px;
margin-bottom: 1px;
border-width: 1px; /* or else it's like 17px in Firefox?? and totally screws up the icons */
}
.help-window .window-content {
padding: 0;
}
.help-window iframe {
border: 0;
/* @TODO ideally, apply a padding: 16px on the body in the iframe, except for on the landing page (which has a background) */
}
.help-window ul.contents {
padding: 16px;
border-right: 1px solid rgba(128, 128, 128, 0.5);
}
.help-window .item {
font-family: 'Segoe UI', sans-serif;
font-size: 12px;
padding: 0 2px;
}
.help-window .item:hover {
text-decoration: underline;
color: #1976D2;
cursor: pointer;
}
.help-window li:before {
/* @TODO: more modern icons */
background-image: url("../../images/help-icons.png");
}
.help-window .item.selected {
/* @TODO: separate .help-window .contents.focused .item.selected */
background-color: #2196f3;
color: white;
}
/* ::selection {
background-color: #2196f3;
color: white;
} */
.history-view {
background: white;
color: black;
}
input:invalid {
box-shadow: 0 0 0 2px red;
}
.partial-url-label {
opacity: 0.6;
}
input:disabled + label {
color: gray;
}
details {
border: 1px solid gray;
}
summary {
background-color: #dfdfdf;
color: black;
padding: 3px;
padding-left: 7px;
}
details[open] > summary {
border-bottom: 1px solid gray;
}
details,
summary {
border-top-left-radius: 3px;
border-top-right-radius: 3px;
}
details:not([open]),
details:not([open]) > summary {
border-bottom-left-radius: 3px;
border-bottom-right-radius: 3px;
}