Cat-Printer/www/main.css

611 lines
15 KiB
CSS

:root {
--font-size: 1.2rem;
/* --dpi-zoom: 0.96; */
--deco-size: calc(var(--font-size) / 2);
--line-height: calc(var(--font-size) / 2 * 3);
--compact-menu-height: 2em;
--span: 8px;
--span-half: calc(var(--span) / 2);
--span-double: calc(var(--span) * 2);
--border: 1px;
--border-double: calc(var(--border) * 2);
--paper-width: 384px;
--anim-time: 0.5s;
--fore-color: #111;
--back-color: #eee;
--canvas-back: #fff;
--curve: cubic-bezier(.08,.82,.17,1);
--panel-height: 20em;
--target-color: rgba(0, 255, 255, 0.2);
--notice-wait: rgba(0, 128, 255, 0.2);
--notice-note: rgba(0, 255, 0, 0.2);
--notice-warn: rgba(255, 128, 0, 0.2);
--notice-error: rgba(255, 0, 0, 0.2);
--shade: rgba(238, 238, 238, 0.5);
}
body {
border: none;
background-color: var(--back-color);
color: var(--fore-color);
font-size: var(--font-size);
line-height: var(--line-height);
font-family: 'Noto Sans', 'Segoe UI', sans-serif;
overflow: auto;
margin: 1em 0;
user-select: none;
}
h1, h2 {
font-weight: normal;
margin: var(--span-half) 0;
}
h1 { font-size: 1.5em; }
h2 { font-size: 1.2em; }
a:link, a:visited {
color: #33f;
}
a:hover, a:active {
color: #22f;
}
a+a {
margin-left: var(--font-size);
}
.center {
text-align: center;
}
button, input, select, textarea, label {
font: inherit;
color: var(--fore-color);
/* background-color: var(--back-color); */
background-color: transparent;
display: inline-block;
}
select[multiple] {
width: 8em;
padding: var(--border);
margin: var(--span-half) var(--span);
}
button, input[type="number"], input[type="text"], select {
margin: var(--span-half) var(--span);
border: var(--border) solid var(--fore-color);
padding: var(--span-half) var(--span);
transition: all var(--anim-time) var(--curve);
cursor: pointer;
min-width: 6em;
line-height: calc(var(--font-size) + var(--span));
}
input[type="number"], input[type="text"] {
width: 6em;
cursor: text;
}
button:hover {
margin: 0;
padding: var(--span) calc(var(--span-double));
min-width: calc(6em + var(--span-double));
}
button:active {
box-shadow: 0 0 var(--span) inset var(--fore-color);
}
@keyframes notice-fade {
to { background-color: transparent; border-color: transparent; }
}
@keyframes notice-wait {
50% { background-color: transparent; border-color: transparent; }
}
#notice {
min-height: var(--font-size);
margin: var(--span-half) 0;
}
#notice span {
display: block;
}
#notice .note {
background-color: var(--notice-note);
animation: notice-fade 1s ease-out 1s 1 forwards;
}
#notice .wait {
background-color: var(--notice-wait);
animation: notice-wait 2s ease-in-out 0s infinite forwards;
}
#notice .warn {
background-color: var(--notice-warn);
animation: notice-fade 1s ease-out 1s 1 forwards;
}
#notice .error {
background-color: var(--notice-error);
animation: notice-fade 1s ease-out 1s 1 forwards;
}
#button-exit {
background-color: var(--notice-warn);
}
.noscript {
margin: var(--span-double);
text-align: center;
background-color: var(--notice-error);
display: block;
}
main, header, footer {
max-width: 45em;
margin: 1em auto;
display: flex;
flex-direction: row;
}
main>.canvas-side {
flex-grow: 0;
margin: 0 auto;
height: 100%;
overflow: auto;
text-align: center;
min-width: calc(var(--paper-width) + var(--border-double) + var(--span-double));
}
main>.menu-side {
flex-grow: 1;
position: sticky;
top: 0;
height: 100%;
/* overflow: auto; */
margin: var(--span);
min-width: 12em;
}
main>.menu-side>.menu {
border: var(--border) solid var(--fore-color);
border-bottom: none;
margin-top: var(--span);
}
.compact-menu {
display: flex;
flex-direction: row;
justify-content: space-around;
background-color: var(--back-color);
}
.compact-button {
width: max-content;
height: var(--compact-menu-height);
flex-grow: 1;
line-height: var(--compact-menu-height);
text-align: center;
cursor: pointer;
border: none;
border-top: var(--border) solid var(--fore-color);
border-bottom: var(--border) solid transparent;
padding: 0;
margin: 0;
}
.compact-button:hover {
margin: 0;
padding: 0 var(--span) calc(var(--span-double));
min-width: 6em;
}
.compact-button.active {
border: var(--border) solid var(--fore-color);
border-top: var(--border) solid transparent;
}
canvas#preview, canvas#control-canvas, #control-document {
border: var(--border) solid var(--fore-color);
background-color: var(--canvas-back);
width: var(--paper-width);
display: inline-block;
}
#control-document {
font: initial;
font-size: 16px;
font-family: 'Unifont';
text-align: initial;
color: #000;
}
#control-document.normal-font {
font-family: inherit;
font-size: inherit;
}
canvas#preview {
z-index: 0;
}
canvas#control-canvas,
#control-document {
position: absolute;
opacity: 0;
transition: opacity var(--anim-time) var(--curve);
z-index: 1;
}
canvas#control-canvas:hover,
#control-document:hover {
opacity: 1;
}
canvas#control-canvas.disabled,
#control-document.disabled {
display: none;
}
p {
margin: var(--span) 0;
}
.panel {
overflow: hidden;
height: 0;
}
.panel.active {
height: calc(var(--panel-height) - var(--compact-menu-height));
padding: var(--span-double) var(--span);
box-sizing: border-box;
/* overflow-y: scroll; */
}
.panel.sub.active {
height: calc(var(--panel-height) / 2);
}
input[type="range"] {
width: 10em;
vertical-align: middle;
content: attr(value);
}
@keyframes hint {
0% { box-shadow: 0 0 var(--span-) inset transparent; }
50% { box-shadow: 0 0 var(--span) inset var(--fore-color); }
100% { box-shadow: 0 0 var(--span) inset transparent; }
}
.hint {
animation: hint 3s ease-out 0.1s infinite;
}
.hidden {
/* visibility: hidden; */
height: 0;
overflow: hidden;
opacity: 0;
pointer-events: none;
}
#hidden, .hard-hidden {
display: none;
}
#error-record {
font-family: 'DejaVu Sans Mono', 'Consolas', monospace;
width: 100%;
font-size: 1rem;
overflow: auto;
white-space: pre;
height: calc(var(--panel-height) - var(--border-double) * 4);
}
.table-wrap {
overflow-x: auto;
width: 100%;
}
table#jslicense-labels1 {
min-width: 40em;
}
table#jslicense-labels1 td {
padding: var(--span-half) var(--span);
}
*:target {
background-color: var(--target-color);
}
dl {
margin: var(--span) 0;
display: block;
}
dd { display: inline; }
dd+dd { margin-left: var(--font-size); }
hr {
border: none;
border-top: var(--border) solid var(--fore-color);
}
iframe#frame {
width: 100%;
height: 12em;
border: none;
background-color: transparent;
}
.blank {
height: 0em;
}
.shade {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: var(--back-color);
opacity: 0.95;
z-index: -1;
}
#dialog {
position: fixed;
width: 100%;
top: 16%;
text-align: center;
z-index: 2;
opacity: 2;
transition: opacity var(--anim-time) var(--curve);
}
#dialog>.content {
max-width: 100%;
width: 40em;
margin: auto;
box-sizing: border-box;
border: var(--border) solid var(--fore-color);
transition: transform var(--anim-time) var(--curve);
transform-origin: center 33%;
}
#dialog.hidden {
opacity: 0;
height: unset;
}
#dialog.hidden>.content {
transform: scaleY(0);
}
#dialog-content {
/* height: 12em; */
max-height: 640px;
margin: auto;
padding: var(--span);
padding-bottom: 0;
display: flex;
flex-direction: column;
justify-content: center;
}
#dialog-choices {
margin: auto;
padding: var(--span);
padding-top: 0;
}
#choice-input {
max-width: 100%;
width: 16em;
}
#accessibility {
text-align: initial;
display: flex;
flex-direction: row;
}
#accessibility>*:nth-child(1) {
flex-grow: 1;
}
#select-language {
width: calc(100% - var(--span-double));
height: 8em;
border: var(--border) solid var(--fore-color);
padding: var(--span);
margin: 0 var(--span);
box-sizing: border-box;
}
#select-language option {
cursor: pointer;
}
#select-language option:hover {
text-decoration: underline;
}
#accessibility>*:nth-child(2) {
flex-grow: 1;
white-space: nowrap;
}
@keyframes jump {
0% { transform: translateY(0); }
50% { transform: translateY(var(--font-size)); }
100% { transform: translateY(0); }
}
#loading-screen {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: var(--back-color);
display: flex;
flex-direction: column;
justify-content: center;
text-align: center;
z-index: 1;
opacity: 1;
transition: opacity var(--anim-time) var(--curve);
}
.logo {
background-image: url('icon.svg');
background-position: center;
background-repeat: no-repeat;
background-size: contain;
width: 80%;
max-width: 16em;
height: 80%;
max-height: 16em;
margin: 0 auto;
}
#loading-screen.hidden {
opacity: 0;
}
#loading-screen>.dots {
display: flex;
flex-direction: row;
justify-content: center;
}
#loading-screen>.dots>span {
display: inline-block;
width: var(--font-size);
height: var(--font-size);
margin: var(--font-size);
background-color: var(--fore-color);
border-radius: calc(var(--font-size) / 2);
animation: jump 1s ease 0s infinite;
}
#loading-screen>.dots>span:nth-child(1) { animation-delay: 0s; }
#loading-screen>.dots>span:nth-child(2) { animation-delay: 0.3s; }
#loading-screen>.dots>span:nth-child(3) { animation-delay: 0.6s; }
#keyboard-shortcuts-layer {
position: fixed;
top: 0;
left: 0;
width: 100%;
overflow: visible;
pointer-events: all;
z-index: 2;
}
#keyboard-shortcuts-layer span {
display: inline-block;
position: absolute;
/* border: var(--border) dotted var(--fore-color); */
background-color: var(--shade);
padding: var(--span-half) var(--span);
white-space: pre;
line-height: 1em;
font-family: 'DejaVu Sans Mono', 'Consolas', monospace;
transform: translate(-1em, calc(var(--font-size) * -1));
}
a {
transition: all var(--anim-time) ease-out;
}
@keyframes delay-scrollable {
from { overflow: hidden; }
to { overflow: auto; }
}
@media (max-height: 520px) {
body, main { margin: 0 auto; }
}
@media (max-width: 767.5px) {
/* My test shows it's Just 768 fit best */
:root {
--panel-height: 16em;
--font-size: 1em;
}
main {
flex-direction: column;
}
#title { display: none; }
main>.canvas-side {
min-width: unset;
width: 100%;
overflow-x: hidden;
overflow-y: auto;
position: fixed;
top: calc(var(--line-height) + var(--span));
height: calc(100% - var(--panel-height) - var(--compact-menu-height));
z-index: 0;
}
main>.canvas-side>.buttons,
main>.menu-side>.buttons {
position: sticky;
bottom: var(--compact-menu-height);
width: 100%;
z-index: 1;
}
main>.canvas-side>.buttons button,
main>.menu-side>.buttons button {
background-color: var(--back-color);
}
main>.menu-side {
overflow-x: hidden;
overflow-y: auto;
position: fixed;
background-color: var(--back-color);
top: unset;
bottom: 0;
left: 0;
height: var(--panel-height);
margin: 0;
width: 100%;
box-sizing: border-box;
}
main>.menu-side>.menu {
height: calc(var(--panel-height) - var(--compact-menu-height));
margin: 0;
}
#notice {
position: fixed;
top: 0;
width: 100%;
}
main>.menu-side>.compact-menu {
position: fixed;
bottom: 0;
width: 100%;
z-index: 0;
}
.blank {
height: var(--compact-menu-height);
}
}
@media (max-width: 384px) {
canvas#preview, canvas#control-canvas, #control-document {
width: 100%;
box-sizing: border-box;
}
}
/* @media (min-resolution: 120dpi) {
:root { --font-size: calc(1.2rem * var(--dpi-zoom)); }
}
@media (min-resolution: 144dpi) {
:root { --font-size: calc(1.2rem * var(--dpi-zoom) * var(--dpi-zoom)); }
} */
@media (prefers-color-scheme: dark) {
:root { --fore-color: #eee; --back-color: #333; --shade: rgba(51, 51, 51, 0.5); }
body, .shade { transition: background-color calc(var(--anim-time) * 2) ease-in; }
a:link, a:visited { color: #66f; }
a:hover, a:active { color: #77f; }
canvas#preview, canvas#control-canvas,
#control-document, .logo { filter: brightness(0.6); }
}
/* so silly... */
body.dark { --fore-color: #eee; --back-color: #333; --shade: rgba(51, 51, 51, 0.5); }
body.dark, .shade { transition: background-color calc(var(--anim-time) * 2) ease-in; }
body.dark a:link, body.dark a:visited { color: #66f; }
body.dark a:hover, body.dark a:active { color: #77f; }
body.dark canvas#preview, body.dark canvas#control-canvas,
body.dark #control-document, body.dark .logo { filter: brightness(0.6); }
@media (prefers-reduced-motion) {
body *,
body *::before,
body *::after {
transition-duration: 0ms !important;
transition: none;
animation-timing-function: steps(1);
animation-duration: 0ms !important;
}
}
/* but i have no way... */
body.no-animation *,
body.no-animation *::before,
body.no-animation *::after {
transition-duration: 0ms !important;
transition: none;
animation-timing-function: steps(1);
animation-duration: 0ms !important;
}
body.large-font,
#large-font+label {
font-size: calc(var(--font-size) * 1.2);
line-height: calc(var(--line-height) * 1.2);
}
body.force-rtl,
#force-rtl+label {
direction: rtl;
}
.force-ltr {
direction: ltr;
}
body.high-contrast {
--border: 2px;
--fore-color: #fff;
--back-color: #000;
--target-color: transparent;
--notice-wait: transparent;
--notice-note: transparent;
--notice-warn: transparent;
--notice-error: transparent;
--shade: rgba(0, 0, 0, 0.8);
transition-duration: 0s;
}
body.high-contrast .shade { transition-duration: 0s; opacity: 1; }
/* body.high-contrast * { background-color: var(--back-color); } */
body.high-contrast .logo, canvas { filter: unset !important; }
body.high-contrast #notice * { border: var(--border) dashed var(--fore-color); }
body.high-contrast a:any-link { color: #00f; }
@font-face {
font-family: 'Unifont';
src: local('Unifont') url('unifont.ttf') url('unifont.otf');
}