mirror of
https://github.com/markuryy/shark.git
synced 2025-12-12 11:41:02 +00:00
Add logic to find and use album cover art as a fallback when playlist cover art is missing, both for local and online playlists. Update database schema and upsert logic to store album picture URLs for online tracks. Improve UI to display fallback cover art when needed.
1 line
34 KiB
Plaintext
1 line
34 KiB
Plaintext
{"version":3,"sources":["../style.css","../variables.css"],"names":[],"mappings":"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","file":"98.css","sourcesContent":["/*! 98.css v0.1.21 - https://github.com/jdan/98.css */\n/**\n * 98-dark.css\n * Copyright (c) 2020 Jordan Scales <thatjdanisso.cool>\n * https://github.com/jdan/98.css/blob/main/LICENSE\n */\n\n@import './variables.css';\n\n@font-face {\n font-family: \"Pixelated MS Sans Serif\";\n src: url(\"fonts/converted/ms_sans_serif.woff\") format(\"woff\");\n src: url(\"fonts/converted/ms_sans_serif.woff2\") format(\"woff2\");\n font-weight: normal;\n font-style: normal;\n}\n\n@font-face {\n font-family: \"Pixelated MS Sans Serif\";\n src: url(\"fonts/converted/ms_sans_serif_bold.woff\") format(\"woff\");\n src: url(\"fonts/converted/ms_sans_serif_bold.woff2\") format(\"woff2\");\n font-weight: bold;\n font-style: normal;\n}\n\nhtml {\n color-scheme: dark;\n}\n\nbody {\n font-family: Arial;\n font-size: 12px;\n color: var(--text-color);\n background: var(--button-face);\n}\n\nbutton,\nlabel,\ninput,\nlegend,\ntextarea,\nselect,\noption,\ntable,\nul.tree-view,\n.window,\n.title-bar,\nli[role=tab] {\n font-family: \"Pixelated MS Sans Serif\", Arial;\n -webkit-font-smoothing: none;\n -moz-osx-font-smoothing: none;\n font-size: 11px;\n color: var(--text-color)\n}\n\nh1 {\n font-size: 5rem;\n}\n\nh2 {\n font-size: 2.5rem;\n}\n\nh3 {\n font-size: 2rem;\n}\n\nh4 {\n font-size: 1.5rem;\n}\n\nu {\n text-decoration: none;\n border-bottom: 0.5px solid var(--text-color);\n}\n\nbutton,\ninput[type=\"submit\"],\ninput[type=\"reset\"] {\n box-sizing: border-box;\n border: none;\n color: transparent;\n text-shadow: 0 0 var(--text-color);\n background: var(--surface);\n box-shadow: var(--border-raised-outer), var(--border-raised-inner);\n border-radius: 0;\n\n min-width: 75px;\n min-height: 23px;\n padding: 0 12px;\n}\n\nbutton.default,\ninput[type=\"submit\"].default,\ninput[type=\"reset\"].default {\n box-shadow: var(--default-button-border-raised-outer), var(--default-button-border-raised-inner);\n}\n\n.vertical-bar {\n width: 4px;\n height: 20px;\n background: #c0c0c0;\n box-shadow: var(--border-raised-outer), var(--border-raised-inner);\n}\n\nbutton:not(:disabled):active,\ninput[type=\"submit\"]:not(:disabled):active,\ninput[type=\"reset\"]:not(:disabled):active {\n box-shadow: var(--border-sunken-outer), var(--border-sunken-inner);\n text-shadow: 1px 1px var(--text-color);\n}\n\nbutton.default:not(:disabled):active,\ninput[type=\"submit\"].default:not(:disabled):active,\ninput[type=\"reset\"].default:not(:disabled):active {\n box-shadow: var(--default-button-border-sunken-outer), var(--default-button-border-sunken-inner);\n}\n\n@media (not(hover)) {\n button:not(:disabled):hover,\n input[type=\"submit\"]:not(:disabled):hover,\n input[type=\"reset\"]:not(:disabled):hover {\n box-shadow: var(--border-sunken-outer), var(--border-sunken-inner);\n }\n}\n\nbutton:focus,\ninput[type=\"submit\"]:focus,\ninput[type=\"reset\"]:focus {\n outline: 1px dotted light-dark(#000000, #ffffff);\n outline-offset: -4px;\n}\n\nbutton::-moz-focus-inner,\ninput[type=\"submit\"]::-moz-focus-inner,\ninput[type=\"reset\"]::-moz-focus-inner {\n border: 0;\n}\n\n:disabled,\n:disabled + label,\ninput[readonly],\ninput[readonly] + label {\n color: var(--button-shadow);\n}\n\nbutton:disabled,\ninput[type=\"submit\"]:disabled,\ninput[type=\"reset\"]:disabled,\n:disabled + label {\n text-shadow: 1px 1px 0 var(--button-highlight);\n}\n\n.window {\n box-shadow: var(--border-window-outer), var(--border-window-inner);\n background: var(--surface);\n padding: 3px;\n}\n\n.title-bar {\n background: linear-gradient(\n 90deg,\n var(--dialog-blue),\n var(--dialog-blue-light)\n );\n padding: 3px 2px 3px 3px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.title-bar.inactive {\n background: linear-gradient(\n 90deg,\n var(--dialog-gray),\n var(--dialog-gray-light)\n );\n}\n\n.title-bar-text {\n font-weight: bold;\n color: white;\n letter-spacing: 0;\n margin-right: 24px;\n}\n\n.title-bar-controls {\n display: flex;\n}\n\n.title-bar-controls button {\n padding: 0;\n display: block;\n min-width: 16px;\n min-height: 14px;\n}\n\n.title-bar-controls button:active {\n padding: 0;\n}\n\n.title-bar-controls button:focus {\n outline: none;\n}\n\n.title-bar-controls button[aria-label=\"Minimize\"],\n.title-bar-controls button[aria-label].minimize {\n background-image: svg-load(\"./icon/minimize.svg\");\n background-repeat: no-repeat;\n background-position: bottom 3px left 4px;\n}\n\n.title-bar-controls button[aria-label=\"Maximize\"],\n.title-bar-controls button[aria-label].maximize {\n background-image: svg-load(\"./icon/maximize.svg\");\n background-repeat: no-repeat;\n background-position: top 2px left 3px;\n}\n\n.title-bar-controls button[aria-label=\"Maximize\"]:disabled,\n.title-bar-controls button[aria-label].maximize:disabled {\n background-image: svg-load(\"./icon/maximize-disabled.svg\");\n background-repeat: no-repeat;\n background-position: top 2px left 3px;\n}\n\n.title-bar-controls button[aria-label=\"Restore\"],\n.title-bar-controls button[aria-label].restore {\n background-image: svg-load(\"./icon/restore.svg\");\n background-repeat: no-repeat;\n background-position: top 2px left 3px;\n}\n\n.title-bar-controls button[aria-label=\"Help\"],\n.title-bar-controls button[aria-label].help {\n background-image: svg-load(\"./icon/help.svg\");\n background-repeat: no-repeat;\n background-position: top 2px left 5px;\n}\n\n.title-bar-controls button[aria-label=\"Close\"],\n.title-bar-controls button[aria-label].close {\n margin-left: 2px;\n background-image: svg-load(\"./icon/close.svg\");\n background-repeat: no-repeat;\n background-position: top 3px left 4px;\n}\n\n/* prefers-color-scheme cannot be overridden by JS */\nhtml[data-dark] {\n .title-bar-controls button[aria-label=\"Minimize\"],\n .title-bar-controls button[aria-label].minimize {\n background-image: svg-load(\"./icon/dark/minimize.svg\");\n }\n\n .title-bar-controls button[aria-label=\"Maximize\"],\n .title-bar-controls button[aria-label].maximize {\n background-image: svg-load(\"./icon/dark/maximize.svg\");\n }\n\n .title-bar-controls button[aria-label=\"Maximize\"]:disabled,\n .title-bar-controls button[aria-label].maximize:disabled {\n background-image: svg-load(\"./icon/dark/maximize-disabled.svg\");\n }\n\n .title-bar-controls button[aria-label=\"Restore\"],\n .title-bar-controls button[aria-label].restore {\n background-image: svg-load(\"./icon/dark/restore.svg\");\n }\n\n .title-bar-controls button[aria-label=\"Help\"],\n .title-bar-controls button[aria-label].help {\n background-image: svg-load(\"./icon/dark/help.svg\");\n }\n\n .title-bar-controls button[aria-label=\"Close\"],\n .title-bar-controls button[aria-label].close {\n margin-left: 2px;\n background-image: svg-load(\"./icon/dark/close.svg\");\n }\n}\n\n.status-bar {\n margin: 0px 1px;\n display: flex;\n gap: 1px;\n}\n\n.status-bar-field {\n box-shadow: var(--border-status-field);\n flex-grow: 1;\n padding: 2px 3px;\n margin: 0;\n}\n\n.window-body {\n margin: var(--element-spacing);\n}\n\nfieldset {\n border-image: svg-load(\"./icon/groupbox-border.svg\") 2;\n padding: calc(2 * var(--border-width) + var(--element-spacing));\n padding-block-start: var(--element-spacing);\n margin: 0;\n}\n\nlegend {\n background: var(--surface);\n}\n\n.field-row {\n display: flex;\n align-items: center;\n}\n\n[class^=\"field-row\"] + [class^=\"field-row\"] {\n margin-top: var(--grouped-element-spacing);\n}\n\n.field-row > * + * {\n margin-left: var(--grouped-element-spacing);\n}\n\n.field-row-stacked {\n display: flex;\n flex-direction: column;\n}\n\n.field-row-stacked * + * {\n margin-top: var(--grouped-element-spacing);\n}\n\nlabel {\n display: inline-flex;\n align-items: center;\n user-select: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n margin: 0;\n background: 0;\n position: fixed;\n opacity: 0;\n border: none;\n}\n\ninput[type=\"radio\"] + label,\ninput[type=\"checkbox\"] + label {\n line-height: 13px;\n}\n\ninput[type=\"radio\"] + label {\n position: relative;\n margin-left: var(--radio-total-width);\n}\n\ninput[type=\"radio\"] + label::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: calc(-1 * (var(--radio-total-width-precalc)));\n display: inline-block;\n width: var(--radio-width);\n height: var(--radio-width);\n margin-right: var(--radio-label-spacing);\n background: svg-load(\"./icon/radio-border.svg\");\n}\n\ninput[type=\"radio\"]:active + label::before {\n background: svg-load(\"./icon/radio-border-disabled.svg\");\n}\n\nhtml[data-dark] {\n input[type=\"radio\"] + label::before {\n background: svg-load(\"./icon/dark/radio-border.svg\");\n }\n\n input[type=\"radio\"]:active + label::before {\n background: svg-load(\"./icon/dark/radio-border-disabled.svg\");\n }\n}\n\ninput[type=\"radio\"]:checked + label::after {\n content: \"\";\n display: block;\n width: var(--radio-dot-width);\n height: var(--radio-dot-width);\n top: var(--radio-dot-top);\n left: var(--radio-dot-left);\n position: absolute;\n background: svg-load(\"./icon/radio-dot.svg\");\n}\n\ninput[type=\"radio\"]:focus + label,\ninput[type=\"checkbox\"]:focus + label {\n outline: 1px dotted #000000;\n}\n\ninput[type=\"radio\"][disabled] + label::before {\n background: svg-load(\"./icon/radio-border-disabled.svg\");\n}\n\ninput[type=\"radio\"][disabled]:checked + label::after {\n background: svg-load(\"./icon/radio-dot-disabled.svg\");\n}\n\ninput[type=\"checkbox\"] + label {\n position: relative;\n margin-left: var(--checkbox-total-width);\n}\n\ninput[type=\"checkbox\"] + label::before {\n content: \"\";\n position: absolute;\n left: calc(-1 * (var(--checkbox-total-width-precalc)));\n display: inline-block;\n width: var(--checkbox-width);\n height: var(--checkbox-width);\n background: #ffffff;\n box-shadow: var(--border-field);\n margin-right: var(--radio-label-spacing);\n}\n\ninput[type=\"checkbox\"]:active + label::before {\n background: #ffffff; /* No! Always white? */\n}\n\ninput[type=\"checkbox\"]:checked + label::after {\n content: \"\";\n display: block;\n width: var(--checkmark-width);\n height: var(--checkmark-width);\n position: absolute;\n left: calc(\n -1 * (var(--checkbox-total-width-precalc)) + var(--checkmark-left)\n );\n background: svg-load(\"./icon/checkmark.svg\");\n}\n\ninput[type=\"checkbox\"][disabled] + label::before {\n background: var(--surface);\n}\n\ninput[type=\"checkbox\"][disabled]:checked + label::after {\n background: svg-load(\"./icon/checkmark-disabled.svg\");\n}\n\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"email\"],\ninput[type=\"url\"],\ninput[type=\"tel\"],\ninput[type=\"number\"],\ninput[type=\"search\"],\nselect,\ntextarea {\n padding: 3px 4px;\n border: none;\n box-shadow: var(--border-field);\n background-color: var(--button-highlight);\n box-sizing: border-box;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: 0;\n}\n\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"email\"],\ninput[type=\"url\"],\ninput[type=\"tel\"],\ninput[type=\"search\"],\nselect {\n height: 21px;\n}\ninput[type=\"number\"] {\n /* need this 1 pixel to fit the spinner controls in box */\n height: 22px;\n}\n/* clears the ‘X’ from Internet Explorer */\ninput[type=search]::-ms-clear { display: none; width : 0; height: 0; }\ninput[type=search]::-ms-reveal { display: none; width : 0; height: 0; }\n/* clears the ‘X’ from Chrome */\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-results-button,\ninput[type=\"search\"]::-webkit-search-results-decoration { display: none; }\n\ninput[type=\"text\"],\ninput[type=\"password\"],\ninput[type=\"email\"],\ninput[type=\"url\"],\ninput[type=\"tel\"],\ninput[type=\"number\"],\ninput[type=\"search\"] {\n /* For some reason descenders are getting cut off without this */\n line-height: 2;\n}\n\ninput[type=\"email\"]:disabled,\ninput[type=\"url\"]:disabled,\ninput[type=\"tel\"]:disabled,\ninput[type=\"password\"]:disabled,\ninput[type=\"text\"]:disabled,\ninput[type=\"number\"]:disabled,\ninput[type=\"search\"]:disabled,\ninput[type=\"email\"]:read-only,\ninput[type=\"url\"]:read-only,\ninput[type=\"tel\"]:read-only,\ninput[type=\"password\"]:read-only,\ninput[type=\"text\"]:read-only,\ninput[type=\"number\"]:read-only,\ninput[type=\"search\"]:read-only,\ntextarea:disabled {\n background-color: var(--surface);\n color: var(--dialog-gray);\n}\n\nselect {\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n position: relative;\n padding-right: 32px;\n background-image: svg-load(\"./icon/button-down.svg\");\n background-position: top 2px right 2px;\n background-repeat: no-repeat;\n border-radius: 0;\n}\n\nselect:focus,\ninput[type=\"text\"]:focus,\ninput[type=\"password\"]:focus,\ninput[type=\"email\"]:focus,\ninput[type=\"url\"]:focus,\ninput[type=\"tel\"]:focus,\ninput[type=\"number\"]:focus,\ninput[type=\"search\"]:focus,\ntextarea:focus {\n outline: none;\n}\n\ninput[type=\"range\"] {\n -webkit-appearance: none;\n width: 100%;\n background: transparent;\n}\n\ninput[type=\"range\"]:focus {\n outline: none;\n}\n\ninput[type=\"range\"]::-webkit-slider-thumb {\n -webkit-appearance: none;\n height: 21px;\n width: 11px;\n background: svg-load(\"./icon/indicator-horizontal.svg\");\n transform: translateY(-8px);\n box-shadow: none;\n border: none;\n}\n\ninput[type=\"range\"].has-box-indicator::-webkit-slider-thumb {\n background: svg-load(\"./icon/indicator-rectangle-horizontal.svg\");\n transform: translateY(-10px);\n}\n\ninput[type=\"range\"]::-moz-range-thumb {\n height: 21px;\n width: 11px;\n border: 0;\n border-radius: 0;\n background: svg-load(\"./icon/indicator-horizontal.svg\");\n transform: translateY(2px);\n}\n\ninput[type=\"range\"].has-box-indicator::-moz-range-thumb {\n background: svg-load(\"./icon/indicator-rectangle-horizontal.svg\");\n transform: translateY(0px);\n}\n\nhtml[data-dark] {\n input[type=\"range\"]::-webkit-slider-thumb {\n background: svg-load(\"./icon/dark/indicator-horizontal.svg\");\n }\n\n input[type=\"range\"].has-box-indicator::-webkit-slider-thumb {\n background: svg-load(\"./icon/dark/indicator-rectangle-horizontal.svg\");\n }\n\n input[type=\"range\"]::-moz-range-thumb {\n background: svg-load(\"./icon/dark/indicator-horizontal.svg\");\n }\n\n input[type=\"range\"].has-box-indicator::-moz-range-thumb {\n background: svg-load(\"./icon/dark/indicator-rectangle-horizontal.svg\");\n }\n}\n\ninput[type=\"range\"]::-webkit-slider-runnable-track {\n width: 100%;\n height: 2px;\n box-sizing: border-box;\n background: black;\n border-right: 1px solid grey;\n border-bottom: 1px solid grey;\n box-shadow: 1px 0 0 white, 1px 1px 0 white, 0 1px 0 white, -1px 0 0 darkgrey,\n -1px -1px 0 darkgrey, 0 -1px 0 darkgrey, -1px 1px 0 white, 1px -1px darkgrey;\n}\n\ninput[type=\"range\"]::-moz-range-track {\n width: 100%;\n height: 2px;\n box-sizing: border-box;\n background: black;\n border-right: 1px solid grey;\n border-bottom: 1px solid grey;\n box-shadow: 1px 0 0 white, 1px 1px 0 white, 0 1px 0 white, -1px 0 0 darkgrey,\n -1px -1px 0 darkgrey, 0 -1px 0 darkgrey, -1px 1px 0 white, 1px -1px darkgrey;\n}\n\n.is-vertical {\n display: inline-block;\n width: 4px;\n height: 150px;\n transform: translateY(50%);\n}\n\n.is-vertical > input[type=\"range\"] {\n width: 150px;\n height: 4px;\n margin: 0 calc(var(--grouped-element-spacing) + var(--range-spacing)) 0\n var(--range-spacing);\n transform-origin: left;\n transform: rotate(270deg) translateX(calc(-50% + var(--element-spacing)));\n}\n\n.is-vertical > input[type=\"range\"]::-webkit-slider-runnable-track {\n border-left: 1px solid grey;\n border-right: 0;\n border-bottom: 1px solid grey;\n box-shadow: -1px 0 0 white, -1px 1px 0 white, 0 1px 0 white, 1px 0 0 darkgrey,\n 1px -1px 0 darkgrey, 0 -1px 0 darkgrey, 1px 1px 0 white, -1px -1px darkgrey;\n}\n\n.is-vertical > input[type=\"range\"]::-moz-range-track {\n border-left: 1px solid grey;\n border-right: 0;\n border-bottom: 1px solid grey;\n box-shadow: -1px 0 0 white, -1px 1px 0 white, 0 1px 0 white, 1px 0 0 darkgrey,\n 1px -1px 0 darkgrey, 0 -1px 0 darkgrey, 1px 1px 0 white, -1px -1px darkgrey;\n}\n\n.is-vertical > input[type=\"range\"]::-webkit-slider-thumb {\n transform: translateY(-8px) scaleX(-1);\n}\n\n.is-vertical > input[type=\"range\"].has-box-indicator::-webkit-slider-thumb {\n transform: translateY(-10px) scaleX(-1);\n}\n\n.is-vertical > input[type=\"range\"]::-moz-range-thumb {\n transform: translateY(2px) scaleX(-1);\n}\n\n.is-vertical > input[type=\"range\"].has-box-indicator::-moz-range-thumb {\n transform: translateY(0px) scaleX(-1);\n}\n\nselect:focus {\n color: var(--button-highlight);\n background-color: var(--dialog-blue);\n}\nselect:focus option {\n color: #000;\n background-color: #fff;\n}\n\nselect:active {\n background-image: svg-load(\"./icon/button-down-active.svg\");\n}\n\nhtml[data-dark] {\n select:active {\n background-image: svg-load(\"./icon/dark/button-down-active.svg\");\n }\n}\n\na {\n color: var(--link-blue);\n}\n\na:focus {\n outline: 1px dotted var(--link-blue);\n}\n\nul.tree-view {\n display: block;\n background: var(--button-highlight);\n box-shadow: var(--border-field);\n padding: 6px;\n margin: 0;\n}\n\nul.tree-view li {\n list-style-type: none;\n}\n\nul.tree-view a {\n text-decoration: none;\n color: var(--text-color);\n}\n\nul.tree-view a:focus {\n background-color: var(--dialog-blue);\n color: var(--button-highlight);\n}\n\nul.tree-view ul,\nul.tree-view li {\n margin-top: 3px;\n}\n\nul.tree-view ul {\n margin-left: 16px;\n padding-left: 16px;\n /* Goes down too far */\n border-left: 1px dotted #808080;\n}\n\nul.tree-view ul > li {\n position: relative;\n}\nul.tree-view ul > li::before {\n content: \"\";\n display: block;\n position: absolute;\n left: -16px;\n top: 6px;\n width: 12px;\n border-bottom: 1px dotted #808080;\n}\n\n/* Cover the bottom of the left dotted border */\nul.tree-view ul > li:last-child::after {\n content: \"\";\n display: block;\n position: absolute;\n left: -20px;\n top: 7px;\n bottom: 0px;\n width: 8px;\n background: var(--button-highlight);\n}\n\nul.tree-view details {\n margin-top: 0;\n}\n\nul.tree-view details[open] summary {\n margin-bottom: 0;\n}\n\nul.tree-view ul details > summary:before {\n margin-left: -22px;\n position: relative;\n z-index: 1;\n}\n\nul.tree-view details > summary:before {\n text-align: center;\n display: block;\n float: left;\n content: \"+\";\n border: 1px solid #808080;\n width: 8px;\n height: 9px;\n line-height: 8px;\n margin-right: 5px;\n padding-left: 1px;\n background-color: var(--button-highlight);\n}\n\nul.tree-view details[open] > summary:before {\n content: \"-\";\n}\n\nul.tree-view details > summary::marker,\nul.tree-view details > summary::-webkit-details-marker {\n content: \"\";\n}\n\npre {\n display: block;\n background: var(--button-highlight);\n box-shadow: var(--border-field);\n padding: 12px 8px;\n margin: 0;\n}\n\ncode,\ncode * {\n font-family: monospace;\n}\n\nsummary:focus {\n outline: 1px dotted #000000;\n}\n\n::-webkit-scrollbar {\n width: 16px;\n}\n::-webkit-scrollbar:horizontal {\n height: 17px;\n}\n\n::-webkit-scrollbar-corner {\n background: var(--button-face);\n}\n\n::-webkit-scrollbar-track {\n background-image: svg-load(\"./icon/scrollbar-background.svg\");\n}\n\n::-webkit-scrollbar-thumb {\n background-color: var(--button-face);\n box-shadow: var(--border-raised-outer), var(--border-raised-inner);\n}\n\n::-webkit-scrollbar-button:horizontal:start:decrement,\n::-webkit-scrollbar-button:horizontal:end:increment,\n::-webkit-scrollbar-button:vertical:start:decrement,\n::-webkit-scrollbar-button:vertical:end:increment {\n display: block;\n}\n\n::-webkit-scrollbar-button:vertical:start {\n height: 17px;\n background-image: svg-load(\"./icon/button-up.svg\");\n}\n::-webkit-scrollbar-button:vertical:end {\n height: 17px;\n background-image: svg-load(\"./icon/button-down.svg\");\n}\n::-webkit-scrollbar-button:horizontal:start {\n width: 16px;\n background-image: svg-load(\"./icon/button-left.svg\");\n}\n::-webkit-scrollbar-button:horizontal:end {\n width: 16px;\n background-image: svg-load(\"./icon/button-right.svg\");\n}\n\nhtml[data-dark] {\n ::-webkit-scrollbar-track {\n background-image: svg-load(\"./icon/dark/scrollbar-background.svg\");\n }\n ::-webkit-scrollbar-button:vertical:start {\n background-image: svg-load(\"./icon/dark/button-up.svg\");\n }\n ::-webkit-scrollbar-button:vertical:end {\n background-image: svg-load(\"./icon/dark/button-down.svg\");\n }\n ::-webkit-scrollbar-button:horizontal:start {\n background-image: svg-load(\"./icon/dark/button-left.svg\");\n }\n ::-webkit-scrollbar-button:horizontal:end {\n background-image: svg-load(\"./icon/dark/button-right.svg\");\n }\n}\n\n.window[role=tabpanel] {\n position: relative;\n z-index: 2;\n}\n\nmenu[role=tablist] {\n position: relative;\n margin: 0 0 -2px 0;\n text-indent: 0;\n list-style-type: none;\n display: flex;\n padding-left: 3px;\n}\n\nmenu[role=tablist] > li {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n box-shadow: var(--border-tab);\n z-index: 1;\n}\n\nmenu[role=tablist] > li[aria-selected=true] {\n padding-bottom: 2px;\n margin-top: -2px;\n background-color: var(--surface);\n position: relative;\n z-index: 8;\n margin-left: -3px;\n}\n\nmenu[role=tablist] > li > a {\n display: block;\n color: var(--text-color);\n margin: 6px;\n text-decoration: none;\n}\nmenu[role=tablist] > li[aria-selected=true] > a:focus {\n outline: none;\n}\nmenu[role=tablist] > li > a:focus {\n outline: 1px dotted var(--text-color);\n}\n\nmenu[role=tablist].multirows > li {\n flex-grow: 1;\n text-align: center;\n}\n.sunken-panel {\n box-sizing: border-box;\n border: 2px groove transparent;\n border-image: svg-load(\"./icon/sunken-panel-border.svg\") 2;\n overflow: auto;\n background-color: var(--button-face);\n}\n\nhtml[data-dark] {\n .sunken-panel {\n border-image: svg-load(\"./icon/dark/sunken-panel-border.svg\") 2;\n }\n}\n\ntable {\n border-collapse: collapse;\n position: relative;\n text-align: left;\n white-space: nowrap;\n background-color: var(--button-face);\n}\n\ntable > thead > tr > * {\n position: sticky;\n top: 0;\n height: 17px;\n box-shadow: var(--border-raised-outer), var(--border-raised-inner);\n background: var(--surface);\n box-sizing: border-box;\n font-weight: normal;\n padding: 0 var(--grouped-element-spacing);\n}\n\ntable.interactive > tbody > tr {\n cursor: pointer;\n}\n\ntable > tbody > tr.highlighted {\n color: #fff;\n background-color: var(--dialog-blue);\n}\n\ntable > tbody > tr > * {\n padding: 0 var(--grouped-element-spacing);\n height: 14px;\n}\n\n.progress-indicator {\n\theight: 32px;\n\tposition: relative;\n box-shadow: var(--border-sunken-inner);\n padding: 4px 4px;\n border: none;\n box-sizing: border-box;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: 0;\n}\n\n\n.progress-indicator > .progress-indicator-bar {\n height: 100%;\n display: block;\n background-color: var(--progress-blue);\n}\n\n.progress-indicator.segmented > .progress-indicator-bar {\n width: 100%;\n background-color: transparent; /* resets the background color which is set to blue in the non-segmented selector */\n background-image: linear-gradient(\n 90deg,\n var(--progress-blue) 0 16px,\n transparent 0 2px\n );\n background-repeat: repeat;\n background-size: 18px 100%;\n}\n\n.field-border {\n background: var(--button-highlight);\n box-shadow: var(--border-field);\n padding: 2px;\n}\n\n.field-border-disabled {\n background: var(--surface);\n box-shadow: var(--border-field);\n padding: 2px;\n}\n\n.status-field-border {\n background: var(--surface);\n box-shadow: var(--border-status-field);\n padding: 1px;\n}\n",":root {\n color-scheme: light;\n &[data-dark] {\n color-scheme: dark;\n }\n\n \n /* Color */\n --text-color: light-dark(#222222, #dddddd);\n --surface: light-dark(#c0c0c0, #2b2b2b);\n --button-highlight: light-dark(#ffffff, #525252);\n --button-face: light-dark(#dfdfdf, #363636);\n --button-shadow: light-dark(#808080, #232323);\n --window-frame: light-dark(#0a0a0a, #000000);\n --dialog-blue: light-dark(#000080, #0b0b0b);\n --dialog-blue-light: light-dark(#1084d0, #5b5b5b);\n --dialog-gray: #808080;\n --dialog-gray-light: #b5b5b5;\n --link-blue: light-dark(#0000ff, #1084d0);\n --progress-blue: light-dark(#000080, #dddddd);\n\n /* Spacing */\n --element-spacing: 8px;\n --grouped-button-spacing: 4px;\n --grouped-element-spacing: 6px;\n --radio-width: 12px;\n --checkbox-width: 13px;\n --radio-label-spacing: 6px;\n --range-track-height: 4px;\n --range-spacing: 10px;\n\n /* Some detailed computations for radio buttons and checkboxes */\n --radio-total-width-precalc: var(--radio-width) + var(--radio-label-spacing);\n --radio-total-width: calc(var(--radio-total-width-precalc));\n --radio-left: calc(-1 * var(--radio-total-width-precalc));\n --radio-dot-width: 4px;\n --radio-dot-top: calc(var(--radio-width) / 2 - var(--radio-dot-width) / 2);\n --radio-dot-left: calc(\n -1 * (var(--radio-total-width-precalc)) + var(--radio-width) / 2 - var(\n --radio-dot-width\n ) / 2\n );\n\n --checkbox-total-width-precalc: var(--checkbox-width) +\n var(--radio-label-spacing);\n --checkbox-total-width: calc(var(--checkbox-total-width-precalc));\n --checkbox-left: calc(-1 * var(--checkbox-total-width-precalc));\n --checkmark-width: 7px;\n --checkmark-left: 3px;\n\n /* Borders */\n --border-width: 1px;\n --border-raised-outer: inset -1px -1px var(--window-frame),\n inset 1px 1px var(--button-highlight);\n --border-raised-inner: inset -2px -2px var(--button-shadow),\n inset 2px 2px var(--button-face);\n --border-sunken-outer: inset -1px -1px var(--button-highlight),\n inset 1px 1px var(--window-frame);\n --border-sunken-inner: inset -2px -2px var(--button-face),\n inset 2px 2px var(--button-shadow);\n --default-button-border-raised-outer: inset -2px -2px var(--window-frame), inset 1px 1px var(--window-frame);\n --default-button-border-raised-inner: inset 2px 2px var(--button-highlight), inset -3px -3px var(--button-shadow), inset 3px 3px var(--button-face);\n --default-button-border-sunken-outer: inset 2px 2px var(--window-frame), inset -1px -1px var(--window-frame);\n --default-button-border-sunken-inner: inset -2px -2px var(--button-highlight), inset 3px 3px var(--button-shadow), inset -3px -3px var(--button-face);\n\n /* Window borders flip button-face and button-highlight */\n --border-window-outer: inset -1px -1px var(--window-frame),\n inset 1px 1px var(--button-face);\n --border-window-inner: inset -2px -2px var(--button-shadow),\n inset 2px 2px var(--button-highlight);\n\n /* Field borders (checkbox, input, etc) flip window-frame and button-shadow */\n --border-field: inset -1px -1px var(--button-highlight),\n inset 1px 1px var(--button-shadow), inset -2px -2px var(--button-face),\n inset 2px 2px var(--window-frame);\n --border-status-field: inset -1px -1px var(--button-face), inset 1px 1px var(--button-shadow);\n\n /* Tabs */\n --border-tab: inset -1px 0 var(--window-frame),\n inset 1px 1px var(--button-face),\n inset -2px 0 var(--button-shadow),\n inset 2px 2px var(--button-highlight)\n}"]} |