: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'); }