From e2454e1002663b9e3e28ad73e7da158683cc8b8a Mon Sep 17 00:00:00 2001 From: flashwave Date: Fri, 13 Oct 2023 19:33:34 +0000 Subject: [PATCH] Implemented build process for assets. --- .gitignore | 3 +- assets/2021.css/clock.css | 115 ++ assets/2021.css/featured.css | 60 + assets/2021.css/header.css | 0 assets/2021.css/home.css | 100 ++ assets/2021.css/index.css | 47 + assets/2021.css/main.css | 274 ++++ assets/2021.css/project.css | 126 ++ assets/2021.css/section.css | 27 + assets/2021.css/socials.css | 61 + {public/assets => assets/2021.css}/sprite.css | 0 .../assets/2021.js => assets/2021.js/main.js | 0 assets/ascii.css/main.css | 100 ++ assets/ascii.js/main.js | 75 + assets/common.css/main.css | 21 + assets/common.js/main.js | 1 + assets/whois.css/main.css | 100 ++ .../2021whois.js => assets/whois.js/main.js | 0 build.js | 68 +- makai.php | 1 + package-lock.json | 1157 ++++++++++++++++ public/assets/2021.css | 1226 ----------------- src/AssetsInfo.php | 33 + src/MakaiContext.php | 1 + templates/ascii/index.twig | 78 +- templates/master-2021.twig | 66 + templates/master.twig | 65 +- templates/whois/index.twig | 5 +- 28 files changed, 2433 insertions(+), 1377 deletions(-) create mode 100644 assets/2021.css/clock.css create mode 100644 assets/2021.css/featured.css create mode 100644 assets/2021.css/header.css create mode 100644 assets/2021.css/home.css create mode 100644 assets/2021.css/index.css create mode 100644 assets/2021.css/main.css create mode 100644 assets/2021.css/project.css create mode 100644 assets/2021.css/section.css create mode 100644 assets/2021.css/socials.css rename {public/assets => assets/2021.css}/sprite.css (100%) rename public/assets/2021.js => assets/2021.js/main.js (100%) create mode 100644 assets/ascii.css/main.css create mode 100644 assets/ascii.js/main.js create mode 100644 assets/common.css/main.css create mode 100644 assets/common.js/main.js create mode 100644 assets/whois.css/main.css rename public/assets/2021whois.js => assets/whois.js/main.js (100%) create mode 100644 package-lock.json delete mode 100644 public/assets/2021.css create mode 100644 src/AssetsInfo.php diff --git a/.gitignore b/.gitignore index 00d617b..1c93aca 100644 --- a/.gitignore +++ b/.gitignore @@ -3,5 +3,6 @@ /.debug /config/*.ini /vendor -/aaaapublic/assets +/node_modules +/public/assets /assets/current.json diff --git a/assets/2021.css/clock.css b/assets/2021.css/clock.css new file mode 100644 index 0000000..2b28305 --- /dev/null +++ b/assets/2021.css/clock.css @@ -0,0 +1,115 @@ +.clock { + width: 200px; + height: 200px; + border-radius: 100%; + border: 4px solid #c0c0c0; + overflow: hidden; + box-sizing: content-box; + filter: drop-shadow(0 1px 5px #000); +} +.clock-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #fffd; + filter: blur(20px); +} +.clock-center { + position: absolute; + top: 96px; + left: 96px; + width: 8px; + height: 8px; + background-color: #000; + border-radius: 100%; + z-index: 1000; +} +.clock-hand { + --hand-rotation: 0deg; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + transform: rotate(var(--hand-rotation)); + z-index: 900; +} +.clock-hand-display { + position: absolute; + width: 2px; + left: 99px; + height: 99px; + background-color: #000; +} +.clock-hand-hours { + z-index: 910; +} +.clock-hand-minutes { + z-index: 920; +} +.clock-hand-seconds { + z-index: 930; +} +.clock-hand-hours .clock-hand-display { + height: 70px; + margin-top: 30px; + filter: drop-shadow(0 1px 2px #000); +} +.clock-hand-minutes .clock-hand-display { + height: 80px; + margin-top: 20px; + filter: drop-shadow(0 1px 3px #000); +} +.clock-hand-seconds .clock-hand-display { + height: 100px; + margin-top: 15px; + opacity: .6; + background-color: #f00; + filter: drop-shadow(0 1px 4px #000); +} +.clock-number { + position: absolute; + top: 0; + left: 0; + z-index: 500; + width: 100px; + height: 100px; +} +.clock-number-display { + position: absolute; + width: 2px; + height: 10px; + background-color: #000; +} +.clock-number-9 .clock-number-display, +.clock-number-3 .clock-number-display { + width: 10px; + height: 2px; +} +.clock-number-6 .clock-number-display { + bottom: 0; +} +.clock-number-12 .clock-number-display { + right: 0; + height: 15px; +} +.clock-number-3 .clock-number-display { + right: 0; + bottom: 0; +} +.clock-number-12 { + left: 1px; +} +.clock-number-9 { + top: 99px; +} +.clock-number-6 { + top: 100px; + left: 99px; +} +.clock-number-3 { + top: 1px; + left: 100px; +} diff --git a/assets/2021.css/featured.css b/assets/2021.css/featured.css new file mode 100644 index 0000000..6449ca7 --- /dev/null +++ b/assets/2021.css/featured.css @@ -0,0 +1,60 @@ +.index-featured { + display: grid; + grid-template-columns: 1fr 1fr; + flex: 1 1 auto; + overflow: hidden; + margin: 5px auto; + padding: 0 10px; + margin-bottom: 0; + column-gap: 10px; + row-gap: 10px; + width: 100%; + max-width: 1000px; +} +@media(max-width: 900px) { .index-featured { grid-template-columns: 1fr; overflow: visible; } } +.index-feature { + overflow: auto; + scrollbar-width: thin; +} +.index-feature-header { + border-bottom: 1px solid #333; + display: flex; + align-items: center; +} +.index-feature-header-link { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.index-feature-header-title { + font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; + font-size: 2em; + line-height: 1.5em; + pointer-events: none; + flex: 1 1 auto; +} +.index-feature-header-more { + pointer-events: none; + flex: 0 0 auto; + margin: 0 5px; + padding: 2px 8px; + border-radius: 2em; + font-size: .9em; + line-height: 1.5em; + background-color: #1a1a1a; + transition: background-color .2s; +} +.index-feature-header-more::after { + content: " »"; +} +.index-feature-header:focus-within .index-feature-header-more, +.index-feature-header:hover .index-feature-header-more, +.index-feature-header-more:focus { + background-color: #2a2a2a; +} +.index-feature-header:active .index-feature-header-more, +.index-feature-header-more:active { + background-color: #222; +} diff --git a/assets/2021.css/header.css b/assets/2021.css/header.css new file mode 100644 index 0000000..e69de29 diff --git a/assets/2021.css/home.css b/assets/2021.css/home.css new file mode 100644 index 0000000..840b1ca --- /dev/null +++ b/assets/2021.css/home.css @@ -0,0 +1,100 @@ +.php { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + z-index: 177; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + pointer-events: none; +} +.php-search { + max-width: 600px; + width: 100%; + pointer-events: initial; +} +.php-search-input { + border: 1px solid #999; + background-color: #fff; + opacity: .5; + box-shadow: 0 2px .5em #000a, inset 0 1px 2px #000a; + transition: opacity .5s, box-shadow .5s; +} +.php-search-input:hover, +.php-search-input:focus, +.php-search-input:focus-within { + opacity: 1; + box-shadow: 0 2px 1em #000, inset 0 1px 2px #000a; +} +.php-search-input input { + border-width: 0; + background-color: transparent; + color: #000; + font-family: Tahoma, Geneva, 'Dejavu Sans', Arial, Helvetica, sans-serif; + font-size: 24px; + line-height: 35px; + width: 100%; + height: 100%; + padding: 2px 5px; +} +.php-time { + display: flex; + justify-content: center; + align-items: center; + margin: 20px auto; + width: 100%; +} +.php-time-analog { + flex: 0 0 auto; +} +.php-time-alter { + flex: 0 0 auto; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + width: 300px; + font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; + filter: drop-shadow(0 1px 5px #000); + color: transparent; +} +.php-time-digital { + font-size: 7em; + line-height: 1.5em; + display: flex; + flex: 0 0 auto; + max-width: 300px; + width: 100%; + align-items: center; + justify-content: center; +} +.php-time-date { + font-size: 2em; +} +.php-time-digital-separator { + margin-top: -4px; +} +.php-time-digital-separator-hidden { + visibility: hidden; +} +.php-time-digital-hours, +.php-time-digital-separator, +.php-date-label { + background-image: linear-gradient(180deg, #eee 0%, #ddd 50%, #ccc 50%, #aaa 100%); + background-clip: text; + -webkit-background-clip: text; +} +.php-time-digital-minutes, +.php-date-week, +.php-date-day, +.php-date-month, +.php-date-year { + background-image: linear-gradient(0deg, #281430 0%, #392540 50%, #4a3650 50%, #6c5871 100%); + background-clip: text; + -webkit-background-clip: text; +} diff --git a/assets/2021.css/index.css b/assets/2021.css/index.css new file mode 100644 index 0000000..799cf90 --- /dev/null +++ b/assets/2021.css/index.css @@ -0,0 +1,47 @@ +.index { + display: flex; + flex-direction: column; + height: 100%; + max-height: 100vh; + overflow: hidden; +} +@media(max-width: 900px) { .index { + max-height: initial; + overflow: auto; +} } + +.index-menu { + width: 100%; + display: flex; + justify-content: center; + background-image: linear-gradient(0deg, #111 0%, #222 50%, #333 50%, #555 100%); + flex: 0 0 auto; + box-shadow: 0 0 1em rgba(0, 0, 0, .8); +} +.index-menu a { + display: block; + color: #fff; + text-decoration: none; + font-size: 1.5em; + line-height: 1.2em; + padding: 5px 10px; + transition: background-color .1s; +} +.index-menu a:hover, +.index-menu a:focus { + background-color: rgba(255, 255, 255, .1); +} +.index-menu a:active { + background-color: rgba(127, 127, 127, .1); +} +@media (max-width: 600px) { + .index-menu { + flex-wrap: wrap; + } + .index-menu a { + min-width: 200px; + margin: 2px; + padding: 10px; + text-align: center; + } +} diff --git a/assets/2021.css/main.css b/assets/2021.css/main.css new file mode 100644 index 0000000..be6716f --- /dev/null +++ b/assets/2021.css/main.css @@ -0,0 +1,274 @@ +html { + scrollbar-color: #4a3650 #111; +} + +pre, code { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; +} + +/* an attempt to replicate scrollbar-color for chromosome */ +::-webkit-scrollbar { + width: 6px; + background-color: #111; +} +::-webkit-scrollbar-thumb { + background-color: #4a3650; +} +::-webkit-scrollbar-thumb:hover { + background-color: #5b4761; +} +::-webkit-scrollbar-thumb:active { + background-color: #6c5872; +} + +body { + background-color: #111; + color: #fff; + font: 12px/20px Tahoma, Geneva, 'Dejavu Sans', Arial, Helvetica, sans-serif; + display: flex; + flex-direction: column; +} + +@include sprite.css; + +.header, .footer { flex: 0 0 auto; } +.container { flex: 1 1 auto; } + +.header { + width: 100%; + height: 200px; + overflow: hidden; + transition: height .5s; +} +.header-minimal .header { + height: auto; +} +@media (max-width: 700px) { + .header { height: auto; } +} +.index .header { + height: 50vh; +} +.fullscreen-header .header { + height: 100%; +} +.header-background { + position: absolute; + top: 0; + bottom: 0; + right: 0; + left: 0; + overflow: hidden; +} +.header-background img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + object-fit: cover; + filter: blur(20px) brightness(80%); + transform: scale(1.2); + opacity: 1; + transition: opacity .5s; +} +.header-foreground { + width: 100%; + height: 100%; + display: flex; + max-width: 1200px; + margin: 0 auto; + justify-content: space-between; + align-items: flex-end; + padding: 10px; +} +.header-minimal .header-foreground { + align-items: center; +} +@media (max-width: 700px) { + .header-foreground { + justify-content: center; + align-items: center; + flex-direction: column; + } +} +.index .header-foreground { + align-items: center; + justify-content: flex-end; + flex-direction: column; +} +.header-logo { + font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; + font-size: 3em; + line-height: 1.2em; + filter: drop-shadow(0 1px 5px #000); + color: transparent; + text-decoration: none; + display: flex; + flex: 0 0 auto; +} +.index .header-logo { + font-size: 5em; +} +.header-flash { + background-image: linear-gradient(180deg, #eee 0%, #ddd 50%, #ccc 50%, #aaa 100%); + background-clip: text; + -webkit-background-clip: text; + white-space: pre; +} +.header-wave { + background-image: linear-gradient(0deg, #281430 0%, #392540 50%, #4a3650 50%, #6c5871 100%); + -webkit-background-clip: text; + white-space: pre; +} +.header-right { + display: flex; + flex-direction: column; + align-items: flex-end; +} +.header-menu { + display: flex; + justify-content: center; + flex: 0 0 auto; + margin-top: 10px; +} +.header-minimal .header-menu { + margin-top: 0; +} +.index .header-menu, +.fullscreen-header .header-menu, +.now-playing .header-menu { + display: none; +} +.header-menu a { + display: block; + color: #fff; + text-decoration: none; + font-size: 1.5em; + line-height: 1.2em; + margin: 0 2px; + padding: 5px 10px; + border-radius: 5px; + text-shadow: 0 1px 5px #000; + transition: background-color .1s; +} +.header-menu a:hover, +.header-menu a:focus { + background-color: rgba(255, 255, 255, .1); +} +.header-menu a:active { + background-color: rgba(127, 127, 127, .1); +} +@media (max-width: 800px) { + .header-menu { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + } + .header-menu a { + text-align: center; + min-width: 150px; + margin: 2px; + padding: 10px 0; + } + .header-menu :first-child { + display: none; + } +} +@media (max-width: 480px) { + .header-menu { grid-template-columns: 1fr 1fr; } +} +@media (max-width: 320px) { + .header-menu { grid-template-columns: 1fr; } +} + +.footer {} +.index .footer, +.fullscreen-header .footer, +.now-playing .footer { + display: none; +} +.footer-text { + opacity: .2; + font-size: .9em; + text-align: center; + max-width: 1200px; + margin: 5px auto; +} + +@include index.css; + +.header-now-playing { + max-height: 60px; + min-width: 300px; + max-width: 500px; + height: 100%; + background-image: linear-gradient(0deg, #111c 0%, #222c 50%, #333c 50%, #555c 100%); + box-shadow: 0 2px 1em #000; + border-radius: 5px; + overflow: hidden; + align-items: center; + bottom: 0; + padding: 5px; + display: grid; + grid-template-columns: 25px 50px 1fr; + column-gap: 5px; + transition: bottom .5s, width .2s, max-height .5s, padding .2s; +} +.header-now-playing-hidden { + bottom: -80px; + max-height: 0; + padding: 0; +} +.header-now-playing-icon img { + vertical-align: middle; +} +.header-now-playing-cover { + width: 50px; + height: 50px; +} +.header-now-playing-cover img { + width: 100%; + height: 100%; + vertical-align: middle; + object-fit: cover; +} +.header-now-playing-details { + overflow: hidden; + white-space: nowrap; +} +.header-now-playing-details a { + color: #fff; + text-decoration: none; + transition: width .2s; +} +.header-now-playing-details a:hover, +.header-now-playing-details a:focus { + text-decoration: underline; +} +.header-now-playing-title { + font-size: 1.2em; +} +.header-now-playing-title, +.header-now-playing-artist { + overflow: hidden; + text-overflow: ellipsis; +} + +.http-error { + text-align: center; +} +.http-error-head { + font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; + font-size: 2.5em; + line-height: 2em; + font-weight: 400; +} + +@include featured.css; + +@include section.css; +@include socials.css; +@include project.css; + +@include home.css; +@include clock.css; diff --git a/assets/2021.css/project.css b/assets/2021.css/project.css new file mode 100644 index 0000000..a64d73b --- /dev/null +++ b/assets/2021.css/project.css @@ -0,0 +1,126 @@ +.project { + padding: 0 10px; + /*background-color: var(--project-colour); + background-image: linear-gradient(#111e, #111e); + overflow: hidden;*/ +} +.project-content { + max-width: 1100px; + width: 100%; + margin: 1em auto; + overflow: hidden; + background-color: var(--project-colour); + background-image: linear-gradient(180deg, #555c 0, #333c 38px, #222c 38px, #111c 100%); + box-shadow: 0 2px 1em #000; + border-radius: 5px; +} +.project-languages { + font-size: 0; + line-height: 0; + display: inline-block; + font-family: Tahoma, Geneva, 'Dejavu Sans', Arial, Helvetica, sans-serif; + margin-left: 4px; +} +.project-language { + font-size: 11px; + line-height: 18px; + display: inline-block; + border-left: 4px solid var(--language-colour); + background-color: var(--language-colour); + background-image: linear-gradient(90deg, #1118, #111a); + border-radius: 4px; + overflow: hidden; + padding: 0 4px; + margin: 0 4px; + box-shadow: 0 0 1px var(--language-colour); +} +.project-details { + margin: 10px; + margin-bottom: 0; +} +.project-details h2 { + font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; + font-size: 2em; + line-height: 1em; + font-weight: 400; + margin-bottom: 5px; +} +.project-details p { + font-size: .9em; + line-height: 1.8em; +} +.project-details .project-details-summary { + font-size: 1.2em; + line-height: 1.5em; +} +.project-links { + display: flex; + margin: 0 3px; +} +.project-link { + margin: 4px 1px; + color: #fff; + text-decoration: none; + min-width: 100px; + padding: 2px 8px; + border-radius: 4px; + transition: background-color .2s; +} +.project-link:hover, +.project-link:active { + background-color: #fff2; +} +.project-link:focus { + background-color: #fff1; +} + +.index-project { + margin: 5px; + background-image: linear-gradient(180deg, #555c 0, #333c 32px, #222c 32px, #111c 100%); + box-shadow: 0 2px 5px #000; + border-radius: 5px; + overflow: hidden; +} +.index-project-anchor { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.index-project-content { + margin: 5px 8px; + margin-bottom: 0; + pointer-events: none; +} +.index-project-name { + font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; + flex: 1 1 auto; + font-size: 1.5em; + line-height: 1.5em; +} +.index-project-summary { + margin-top: 2px; +} +.index-project-links { + display: flex; + pointer-events: none; + margin: 0 3px; +} +.index-project-link { + pointer-events: initial; + margin: 4px 1px; + color: #fff; + text-decoration: none; + min-width: 100px; + padding: 2px 8px; + border-radius: 4px; + transition: background-color .2s; +} +.index-project-link:hover, +.index-project-link:focus { + background-color: #fff2; +} +.index-project-link:active { + background-color: #fff1; +} diff --git a/assets/2021.css/section.css b/assets/2021.css/section.css new file mode 100644 index 0000000..3280259 --- /dev/null +++ b/assets/2021.css/section.css @@ -0,0 +1,27 @@ +.section { + padding: 0 15px; +} +.section:not(:first-child) { + margin-top: 30px; +} +.section-content { + max-width: 1100px; + margin: 10px auto; + padding: 10px 20px; + filter: drop-shadow(0 1px 5px #000); +} +.section-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: linear-gradient(0deg, #111 0%, #222 50%, #333 50%, #555 100%); + transform: skew(-15deg); +} +.section-content h1 { + font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; + font-size: 2em; + line-height: 1em; + font-weight: 400; +} diff --git a/assets/2021.css/socials.css b/assets/2021.css/socials.css new file mode 100644 index 0000000..3d70db0 --- /dev/null +++ b/assets/2021.css/socials.css @@ -0,0 +1,61 @@ +.index-contact { + padding: 5px 15px; + overflow: auto; +} + +.socials { + max-width: 1100px; + width: 100%; + margin: 10px auto; + padding: 0 15px; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + justify-content: space-evenly; + column-gap: 10px; +} +@media(max-width: 980px) { .socials { grid-template-columns: 1fr 1fr; } } +@media(max-width: 640px) { .socials { grid-template-columns: 1fr; } } +.social { + width: 100%; + margin: 5px 0; + filter: drop-shadow(0 1px 5px #000); + cursor: pointer; + display: flex; + align-items: center; + padding: 5px; +} +.index-contact .social { + margin: 10px 0; +} +.social-background { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: linear-gradient(0deg, #1118 0%, #2228 50%, #3338 50%, #5558 100%); + transform: skew(-15deg); + background-color: var(--social-colour); +} +.social:active .social-background { + background-image: linear-gradient(0deg, #1118 0%, #2228 50%, #3338 50%, #3338 100%); +} +.social-icon { + width: 25px; + height: 25px; + margin: 3px 4px 2px 8px; + pointer-events: none; +} +.social-content { + margin: 2px 5px; + pointer-events: none; +} +.social-name { + font-size: .9em; + line-height: 1.5em; +} +.social-handle { + font-size: 1.5em; + line-height: 1.3em; + font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; +} diff --git a/public/assets/sprite.css b/assets/2021.css/sprite.css similarity index 100% rename from public/assets/sprite.css rename to assets/2021.css/sprite.css diff --git a/public/assets/2021.js b/assets/2021.js/main.js similarity index 100% rename from public/assets/2021.js rename to assets/2021.js/main.js diff --git a/assets/ascii.css/main.css b/assets/ascii.css/main.css new file mode 100644 index 0000000..e315ccc --- /dev/null +++ b/assets/ascii.css/main.css @@ -0,0 +1,100 @@ +.ascii-wrap { + margin-bottom: calc(100vh - 70px); +} +.ascii-chars { + text-align: center; + max-width: 1200px; + margin: 0 auto; +} +.ascii-char { + display: inline-flex; + flex-direction: column; + border: 2px solid #4a3650; + border-radius: 5px; + overflow: hidden; + width: 200px; + text-align: left; + margin: 2px; + background-color: #333; + cursor: pointer !important; + transition: background-color .1s; +} +.ascii-char:hover, +.ascii-char:focus { + background-color: #444; +} +.ascii-char:active { + background-color: #222; +} +.ascii-char-print { + white-space: pre; + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 2.5em; + text-align: center; + padding: 10px; + pointer-events: none; +} +.ascii-char-desc { + text-align: center; + font-size: 1.2em; + padding: 0 5px 5px; + pointer-events: none; +} +.ascii-char-misc { + display: flex; + justify-content: space-evenly; + border-top: 1px solid #4a3650; +} +.ascii-char-misc-item { + flex: 1 1 auto; + padding: 2px 5px; + transition: background-color .1s; + background-color: #444; +} +.ascii-char-misc-item:not(:last-child) { + border-right: 1px solid #4a3650; +} +.ascii-char-misc-item:hover, +.ascii-char-misc-item:focus { + background-color: #666; +} +.ascii-char-misc-item:active { + background-color: #555; +} +.ascii-char-misc-item-head { + font-variant: small-caps; +} +.ascii-char-misc-item-value { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + text-align: right; +} +.ascii-search { + padding-top: 10px; + position: sticky; + top: 0; + z-index: 1000; + background-image: linear-gradient(180deg, #4a3650 51px, transparent); +} +.ascii-search-box { + border: 1px solid #000; + border-radius: 5px; + overflow: hidden; + max-width: 1200px; + margin: 0 auto; +} +.ascii-search-box input { + border-width: 0; + background-color: #111; + color: #fff; + width: 100%; + height: 100%; + font-size: 2em; + padding: 5px; +} +.ascii-search-hint { + font-size: .9em; + padding: 0 5px; + transition: opacity .2s; + max-width: 1200px; + margin: 0 auto; +} diff --git a/assets/ascii.js/main.js b/assets/ascii.js/main.js new file mode 100644 index 0000000..9548c00 --- /dev/null +++ b/assets/ascii.js/main.js @@ -0,0 +1,75 @@ +(function() { + var chars = document.getElementsByClassName('ascii-char'), + search = document.getElementById('search'); + + function charsFilter(filter) { + if(!filter) { + for(var i = 0; i < chars.length; ++i) + chars[i].classList.remove('hidden'); + return; + } + + filter = filter.toLowerCase(); + + for(var i = 0; i < chars.length; ++i) { + var chr = chars[i], + code = (chr.dataset.keyCode || 0).toString().toLowerCase(), + print = (chr.dataset.keyPrint || "\0").toString().toLowerCase(), + desc = (chr.dataset.keyDesc || '').toString().toLowerCase(), + html = (chr.dataset.keyHtml || "\0").toString().toLowerCase(), + codeInt = parseInt(code), + isMatch = (filter === 'printable' && (codeInt > 31 && codeInt < 127)) + || (filter === 'control' && (codeInt < 32 || codeInt === 127)) + || code == filter || print == filter + || html == filter || desc.indexOf(filter) >= 0; + chr.classList[isMatch ? 'remove' : 'add']('hidden'); + } + }; + + window.addEventListener('scroll', function() { + var hidden = document.getElementsByClassName('js-hidden-on-scroll'), + invisible = document.getElementsByClassName('js-invisible-on-scroll'), + atTop = window.scrollY === 0; + + for(var i = 0; i < hidden.length; ++i) + hidden[i].classList[atTop ? 'remove' : 'add']('hidden'); + for(var i = 0; i < invisible.length; ++i) + invisible[i].classList[atTop ? 'remove' : 'add']('invisible'); + }); + search.addEventListener('keyup', function() { + location.hash = search.value.trim(); + }); + window.addEventListener('hashchange', function() { + charsFilter(decodeURIComponent((location.hash || '#').substring(1))); + }); + if(location.hash.length > 0) { + search.value = location.hash.substring(1).trim(); + charsFilter(search.value); + } + + for(var i = 0; i < chars.length; ++i) { + chars[i].addEventListener('click', function(ev) { + var target = ev.target; + + while(target !== null && typeof target.dataset.copy === 'undefined') { + target = target.parentNode || null; + + if(target.classList.contains('char')) + break; + } + + if(target === null || typeof target.dataset.copy === 'undefined') + return; + + var doCopy = function() { navigator.clipboard.writeText(target.dataset.copy); }; + + if(typeof window.mozInnerScreenX !== 'undefined') + doCopy(); + else + navigator.permissions.query({name: 'clipboard-write'}).then(function(res) { + if(res.state === 'granted' || res.state === 'prompt') + doCopy(); + }); + }); + } +})(); diff --git a/assets/common.css/main.css b/assets/common.css/main.css new file mode 100644 index 0000000..839cb4c --- /dev/null +++ b/assets/common.css/main.css @@ -0,0 +1,21 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; + position: relative; + outline-style: none; +} + +html, body { + width: 100%; + height: 100%; +} + +.hidden { + display: none !important; + visibility: hidden !important; +} + +.invisible { + opacity: 0; +} diff --git a/assets/common.js/main.js b/assets/common.js/main.js new file mode 100644 index 0000000..ddc6bba --- /dev/null +++ b/assets/common.js/main.js @@ -0,0 +1 @@ +/* common.js */ diff --git a/assets/whois.css/main.css b/assets/whois.css/main.css new file mode 100644 index 0000000..03122cf --- /dev/null +++ b/assets/whois.css/main.css @@ -0,0 +1,100 @@ +.whois-container { + max-width: 1200px; + margin: 0 auto; +} + +.whois-lookup-form { + display: flex; + border-radius: 5px; + margin: 10px; + overflow: hidden; + box-shadow: 0 1px 5px #222; + transition: opacity .2s; +} +.whois-locked .whois-lookup-form { + opacity: .5; +} +.whois-lookup-form-input { + display: block; + flex: 1 1 auto; + padding: 10px; + background-color: #212121; + background-image: linear-gradient(0deg, #262626, #202020); + border-width: 0; + color: #fff; + font-family: Tahoma, Geneva, 'Dejavu Sans', Arial, Helvetica, sans-serif; +} +.whois-lookup-form-submit { + flex: 0 0 auto; + background-color: #333333; + background-image: linear-gradient(0deg, transparent, #404040); + color: #fff; + border-width: 0; + padding: 10px; + cursor: pointer; + border-radius: 0; + transition: background-color .2s; +} +.whois-lookup-form-submit:focus, +.whois-lookup-form-submit:hover { + background-color: #3F3F3F; +} +.whois-lookup-form-submit:active { + background-color: #393939; +} + +.whois-result { + margin: 10px; + padding: 6px 10px; + white-space: pre-wrap; + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 14px; + transition: opacity .2s; + background-color: #202020; + border-radius: 5px; + box-shadow: 0 1px 5px #222; + overflow: auto; +} +.whois-locked .whois-result { + opacity: .5; +} + +.whois-result-tabs { + display: flex; + margin: 0 5px; +} +.whois-locked .whois-result-tabs { + opacity: .5; +} +.whois-result-tab { + margin: 0 5px; + padding: 6px 10px; + font-size: 14px; + transition: opacity .2s; + background-color: #202020; + border-radius: 5px; + box-shadow: 0 1px 5px #222; + opacity: .5; + cursor: pointer; + display: block; + color: #fff; + text-decoration: none; +} +.whois-result-tab:hover, +.whois-result-tab:focus { + opacity: .7; +} +.whois-result-tab-active { + opacity: 1 !important; +} +.whois-result-tab-header { + font-size: 1.3em; + line-height: 1.2em; +} +.whois-result-tab-server { + font-size: .9em; + line-height: 1.2em; + color: #888; + white-space: pre-wrap; + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; +} diff --git a/public/assets/2021whois.js b/assets/whois.js/main.js similarity index 100% rename from public/assets/2021whois.js rename to assets/whois.js/main.js diff --git a/build.js b/build.js index f148eb2..8f68a03 100644 --- a/build.js +++ b/build.js @@ -9,8 +9,6 @@ const assproc = require('./assets/assproc.js'); const rootDir = __dirname; const assetsDir = path.join(rootDir, 'assets'); -const assetsCSS = path.join(assetsDir, 'misuzu.css'); -const assetsJS = path.join(assetsDir, 'misuzu.js'); const assetsInfo = path.join(assetsDir, 'current.json'); const pubDir = path.join(rootDir, 'public'); @@ -58,30 +56,52 @@ postcssPlugins.push(require('autoprefixer')({ fs.mkdirSync(pubAssetsFull, { recursive: true }); (async () => { - const mszCssName = await assproc.process(assetsCSS, { 'prefix': '@', 'entry': 'main.css' }) - .then(output => postcss(postcssPlugins).process(output, { from: assetsCSS }).then(output => { - const mszCssName = path.join(pubAssets, util.format(pubAssetCSSFormat, 'misuzu', utils.shortHash(output.css))); - fs.writeFileSync(path.join(pubDir, mszCssName), output.css); - return mszCssName; - })); + console.log('Building assets...'); - const mszJsName = await assproc.process(assetsJS, { 'prefix': '#', 'entry': 'main.js' }) - .then(output => swc.transform(output, { - filename: 'misuzu.js', - sourceMaps: false, - isModule: false, - minify: !isDebugBuild, - jsc: swcJscOptions, - }).then(async output => { - const mszJsName = path.join(pubAssets, util.format(pubAssetJSFormat, 'misuzu', utils.shortHash(output.code))); - fs.writeFileSync(path.join(pubDir, mszJsName), output.code); - return mszJsName; - })); + const dirs = fs.readdirSync(assetsDir); + const assets = {}; - fs.writeFileSync(assetsInfo, JSON.stringify({ - mszjs: mszJsName, - mszcss: mszCssName, - })); + const _postcss = postcss(postcssPlugins); + + for(const dir of dirs) { + const dirPath = path.join(assetsDir, dir); + if(!fs.statSync(dirPath).isDirectory()) + continue; + + const parts = dir.split('.', 2); + if(parts.length < 2) + continue; + + console.log(); + console.log(dir); + + let filePath = ''; + let fileBody = ''; + + if(parts[1] === 'js') { + fileBody = await assproc.process(dirPath, { 'prefix': '#', 'entry': 'main.js' }); + fileBody = (await swc.transform(fileBody, { + filename: dir, + sourceMaps: false, + isModule: false, + minify: !isDebugBuild, + jsc: swcJscOptions, + })).code; + filePath = path.join(pubAssets, util.format(pubAssetJSFormat, parts[0], utils.shortHash(fileBody))); + } else if(parts[1] === 'css') { + fileBody = await assproc.process(dirPath, { 'prefix': '@', 'entry': 'main.css' }); + fileBody = (await _postcss.process(fileBody, { from: dir })).css; + filePath = path.join(pubAssets, util.format(pubAssetCSSFormat, parts[0], utils.shortHash(fileBody))); + } + + if(filePath !== '') { + assets[dir] = filePath; + fs.writeFileSync(path.join(pubDir, filePath), fileBody); + } else console.error(`Unknown type: ${parts[1]}`); + } + + console.log('Writing assets info...'); + fs.writeFileSync(assetsInfo, JSON.stringify(assets)); assproc.housekeep(pubAssetsFull); })(); diff --git a/makai.php b/makai.php index af8becd..97247e8 100644 --- a/makai.php +++ b/makai.php @@ -11,6 +11,7 @@ define('MKI_DIR_SRC', MKI_ROOT . '/src'); define('MKI_DIR_PUBLIC', MKI_ROOT . '/public'); define('MKI_DIR_CONFIG', MKI_ROOT . '/config'); define('MKI_DIR_TEMPLATES', MKI_ROOT . '/templates'); +define('MKI_DIR_ASSETS', MKI_ROOT . '/assets'); require_once MKI_ROOT . '/vendor/autoload.php'; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b568fa4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1157 @@ +{ + "name": "wip.flash.moe", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@swc/core": "^1.3.69", + "autoprefixer": "^10.4.14", + "cssnano": "^6.0.1", + "postcss": "^8.4.26" + } + }, + "node_modules/@swc/core": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.93.tgz", + "integrity": "sha512-690GRr1wUGmGYZHk7fUduX/JUwViMF2o74mnZYIWEcJaCcd9MQfkhsxPBtjeg6tF+h266/Cf3RPYhsFBzzxXcA==", + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.93", + "@swc/core-darwin-x64": "1.3.93", + "@swc/core-linux-arm-gnueabihf": "1.3.93", + "@swc/core-linux-arm64-gnu": "1.3.93", + "@swc/core-linux-arm64-musl": "1.3.93", + "@swc/core-linux-x64-gnu": "1.3.93", + "@swc/core-linux-x64-musl": "1.3.93", + "@swc/core-win32-arm64-msvc": "1.3.93", + "@swc/core-win32-ia32-msvc": "1.3.93", + "@swc/core-win32-x64-msvc": "1.3.93" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.93.tgz", + "integrity": "sha512-gEKgk7FVIgltnIfDO6GntyuQBBlAYg5imHpRgLxB1zSI27ijVVkksc6QwISzFZAhKYaBWIsFSVeL9AYSziAF7A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.93.tgz", + "integrity": "sha512-ZQPxm/fXdDQtn3yrYSL/gFfA8OfZ5jTi33yFQq6vcg/Y8talpZ+MgdSlYM0FkLrZdMTYYTNFiuBQuuvkA+av+Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.93.tgz", + "integrity": "sha512-OYFMMI2yV+aNe3wMgYhODxHdqUB/jrK0SEMHHS44GZpk8MuBXEF+Mcz4qjkY5Q1EH7KVQqXb/gVWwdgTHpjM2A==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.93.tgz", + "integrity": "sha512-BT4dT78odKnJMNiq5HdjBsv29CiIdcCcImAPxeFqAeFw1LL6gh9nzI8E96oWc+0lVT5lfhoesCk4Qm7J6bty8w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.93.tgz", + "integrity": "sha512-yH5fWEl1bktouC0mhh0Chuxp7HEO4uCtS/ly1Vmf18gs6wZ8DOOkgAEVv2dNKIryy+Na++ljx4Ym7C8tSJTrLw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.93.tgz", + "integrity": "sha512-OFUdx64qvrGJhXKEyxosHxgoUVgba2ztYh7BnMiU5hP8lbI8G13W40J0SN3CmFQwPP30+3oEbW7LWzhKEaYjlg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.93.tgz", + "integrity": "sha512-4B8lSRwEq1XYm6xhxHhvHmKAS7pUp1Q7E33NQ2TlmFhfKvCOh86qvThcjAOo57x8DRwmpvEVrqvpXtYagMN6Ig==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.93.tgz", + "integrity": "sha512-BHShlxtkven8ZjjvZ5QR6sC5fZCJ9bMujEkiha6W4cBUTY7ce7qGFyHmQd+iPC85d9kD/0cCiX/Xez8u0BhO7w==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.93.tgz", + "integrity": "sha512-nEwNWnz4JzYAK6asVvb92yeylfxMYih7eMQOnT7ZVlZN5ba9WF29xJ6kcQKs9HRH6MvWhz9+wRgv3FcjlU6HYA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.93", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.93.tgz", + "integrity": "sha512-jibQ0zUr4kwJaQVwgmH+svS04bYTPnPw/ZkNInzxS+wFAtzINBYcU8s2PMWbDb2NGYiRSEeoSGyAvS9H+24JFA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==" + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==" + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001547", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", + "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz", + "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==", + "dependencies": { + "cssnano-preset-default": "^6.0.1", + "lilconfig": "^2.1.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz", + "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^4.0.0", + "postcss-calc": "^9.0.0", + "postcss-colormin": "^6.0.0", + "postcss-convert-values": "^6.0.0", + "postcss-discard-comments": "^6.0.0", + "postcss-discard-duplicates": "^6.0.0", + "postcss-discard-empty": "^6.0.0", + "postcss-discard-overridden": "^6.0.0", + "postcss-merge-longhand": "^6.0.0", + "postcss-merge-rules": "^6.0.1", + "postcss-minify-font-values": "^6.0.0", + "postcss-minify-gradients": "^6.0.0", + "postcss-minify-params": "^6.0.0", + "postcss-minify-selectors": "^6.0.0", + "postcss-normalize-charset": "^6.0.0", + "postcss-normalize-display-values": "^6.0.0", + "postcss-normalize-positions": "^6.0.0", + "postcss-normalize-repeat-style": "^6.0.0", + "postcss-normalize-string": "^6.0.0", + "postcss-normalize-timing-functions": "^6.0.0", + "postcss-normalize-unicode": "^6.0.0", + "postcss-normalize-url": "^6.0.0", + "postcss-normalize-whitespace": "^6.0.0", + "postcss-ordered-values": "^6.0.0", + "postcss-reduce-initial": "^6.0.0", + "postcss-reduce-transforms": "^6.0.0", + "postcss-svgo": "^6.0.0", + "postcss-unique-selectors": "^6.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", + "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.554", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz", + "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz", + "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz", + "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", + "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", + "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", + "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz", + "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz", + "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^6.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz", + "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^4.0.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz", + "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz", + "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^4.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz", + "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^4.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz", + "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz", + "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==", + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz", + "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz", + "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz", + "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz", + "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz", + "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz", + "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz", + "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz", + "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz", + "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==", + "dependencies": { + "cssnano-utils": "^4.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz", + "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz", + "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz", + "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^3.0.2" + }, + "engines": { + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz", + "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylehacks": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", + "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/svgo": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", + "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + } + } +} diff --git a/public/assets/2021.css b/public/assets/2021.css deleted file mode 100644 index 72adf50..0000000 --- a/public/assets/2021.css +++ /dev/null @@ -1,1226 +0,0 @@ -* { - margin: 0; - padding: 0; - box-sizing: border-box; - position: relative; - outline-style: none; -} - -html, body { - width: 100%; - height: 100%; -} - -html { - scrollbar-color: #4a3650 #111; -} - -pre, code { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; -} - -.hidden { - display: none !important; - visibility: hidden !important; -} -.invisible { - opacity: 0; -} - -/* an attempt to replicate scrollbar-color for chromosome */ -::-webkit-scrollbar { - width: 6px; - background-color: #111; -} -::-webkit-scrollbar-thumb { - background-color: #4a3650; -} -::-webkit-scrollbar-thumb:hover { - background-color: #5b4761; -} -::-webkit-scrollbar-thumb:active { - background-color: #6c5872; -} - -body { - background-color: #111; - color: #fff; - font: 12px/20px Tahoma, Geneva, 'Dejavu Sans', Arial, Helvetica, sans-serif; - display: flex; - flex-direction: column; -} - -.header, .footer { flex: 0 0 auto; } -.container { flex: 1 1 auto; } - -.header { - width: 100%; - height: 200px; - overflow: hidden; - transition: height .5s; -} -.header-minimal .header { - height: auto; -} -@media (max-width: 700px) { - .header { height: auto; } -} -.index .header { - height: 50vh; -} -.fullscreen-header .header { - height: 100%; -} -.header-background { - position: absolute; - top: 0; - bottom: 0; - right: 0; - left: 0; - overflow: hidden; -} -.header-background img { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - object-fit: cover; - filter: blur(20px) brightness(80%); - transform: scale(1.2); - opacity: 1; - transition: opacity .5s; -} -.header-foreground { - width: 100%; - height: 100%; - display: flex; - max-width: 1200px; - margin: 0 auto; - justify-content: space-between; - align-items: flex-end; - padding: 10px; -} -.header-minimal .header-foreground { - align-items: center; -} -@media (max-width: 700px) { - .header-foreground { - justify-content: center; - align-items: center; - flex-direction: column; - } -} -.index .header-foreground { - align-items: center; - justify-content: flex-end; - flex-direction: column; -} -.header-logo { - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - font-size: 3em; - line-height: 1.2em; - filter: drop-shadow(0 1px 5px #000); - color: transparent; - text-decoration: none; - display: flex; - flex: 0 0 auto; -} -.index .header-logo { - font-size: 5em; -} -.header-flash { - background-image: linear-gradient(180deg, #eee 0%, #ddd 50%, #ccc 50%, #aaa 100%); - background-clip: text; - -webkit-background-clip: text; - white-space: pre; -} -.header-wave { - background-image: linear-gradient(0deg, #281430 0%, #392540 50%, #4a3650 50%, #6c5871 100%); - -webkit-background-clip: text; - white-space: pre; -} -.header-right { - display: flex; - flex-direction: column; - align-items: flex-end; -} -.header-menu { - display: flex; - justify-content: center; - flex: 0 0 auto; - margin-top: 10px; -} -.header-minimal .header-menu { - margin-top: 0; -} -.index .header-menu, -.fullscreen-header .header-menu, -.now-playing .header-menu { - display: none; -} -.header-menu a { - display: block; - color: #fff; - text-decoration: none; - font-size: 1.5em; - line-height: 1.2em; - margin: 0 2px; - padding: 5px 10px; - border-radius: 5px; - text-shadow: 0 1px 5px #000; - transition: background-color .1s; -} -.header-menu a:hover, -.header-menu a:focus { - background-color: rgba(255, 255, 255, .1); -} -.header-menu a:active { - background-color: rgba(127, 127, 127, .1); -} -@media (max-width: 800px) { - .header-menu { - display: grid; - grid-template-columns: 1fr 1fr 1fr; - } - .header-menu a { - text-align: center; - min-width: 150px; - margin: 2px; - padding: 10px 0; - } - .header-menu :first-child { - display: none; - } -} -@media (max-width: 480px) { - .header-menu { grid-template-columns: 1fr 1fr; } -} -@media (max-width: 320px) { - .header-menu { grid-template-columns: 1fr; } -} - -.footer {} -.index .footer, -.fullscreen-header .footer, -.now-playing .footer { - display: none; -} -.footer-text { - opacity: .2; - font-size: .9em; - text-align: center; - max-width: 1200px; - margin: 5px auto; -} - -.index { - display: flex; - flex-direction: column; - height: 100%; - max-height: 100vh; - overflow: hidden; -} -@media(max-width: 900px) { .index { - max-height: initial; - overflow: auto; -} } - -.index-menu { - width: 100%; - display: flex; - justify-content: center; - background-image: linear-gradient(0deg, #111 0%, #222 50%, #333 50%, #555 100%); - flex: 0 0 auto; - box-shadow: 0 0 1em rgba(0, 0, 0, .8); -} -.index-menu a { - display: block; - color: #fff; - text-decoration: none; - font-size: 1.5em; - line-height: 1.2em; - padding: 5px 10px; - transition: background-color .1s; -} -.index-menu a:hover, -.index-menu a:focus { - background-color: rgba(255, 255, 255, .1); -} -.index-menu a:active { - background-color: rgba(127, 127, 127, .1); -} -@media (max-width: 600px) { - .index-menu { - flex-wrap: wrap; - } - .index-menu a { - min-width: 200px; - margin: 2px; - padding: 10px; - text-align: center; - } -} - -.socials { - max-width: 1100px; - width: 100%; - margin: 10px auto; - padding: 0 15px; - display: grid; - grid-template-columns: 1fr 1fr 1fr; - justify-content: space-evenly; - column-gap: 10px; -} -@media(max-width: 980px) { .socials { grid-template-columns: 1fr 1fr; } } -@media(max-width: 640px) { .socials { grid-template-columns: 1fr; } } -.social { - width: 100%; - margin: 5px 0; - filter: drop-shadow(0 1px 5px #000); - cursor: pointer; - display: flex; - align-items: center; - padding: 5px; -} -.index-contact .social { - margin: 10px 0; -} -.social-background { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-image: linear-gradient(0deg, #1118 0%, #2228 50%, #3338 50%, #5558 100%); - transform: skew(-15deg); - background-color: var(--social-colour); -} -.social:active .social-background { - background-image: linear-gradient(0deg, #1118 0%, #2228 50%, #3338 50%, #3338 100%); -} -.social-icon { - width: 25px; - height: 25px; - margin: 3px 4px 2px 8px; - pointer-events: none; -} -.social-content { - margin: 2px 5px; - pointer-events: none; -} -.social-name { - font-size: .9em; - line-height: 1.5em; -} -.social-handle { - font-size: 1.5em; - line-height: 1.3em; - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; -} - -.index-featured { - display: grid; - grid-template-columns: 1fr 1fr; - flex: 1 1 auto; - overflow: hidden; - margin: 5px auto; - padding: 0 10px; - margin-bottom: 0; - column-gap: 10px; - row-gap: 10px; - width: 100%; - max-width: 1000px; -} -@media(max-width: 900px) { .index-featured { grid-template-columns: 1fr; overflow: visible; } } -.index-feature { - overflow: auto; - scrollbar-width: thin; -} -.index-feature-header { - border-bottom: 1px solid #333; - display: flex; - align-items: center; -} -.index-feature-header-link { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.index-feature-header-title { - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - font-size: 2em; - line-height: 1.5em; - pointer-events: none; - flex: 1 1 auto; -} -.index-feature-header-more { - pointer-events: none; - flex: 0 0 auto; - margin: 0 5px; - padding: 2px 8px; - border-radius: 2em; - font-size: .9em; - line-height: 1.5em; - background-color: #1a1a1a; - transition: background-color .2s; -} -.index-feature-header-more::after { - content: " »"; -} -.index-feature-header:focus-within .index-feature-header-more, -.index-feature-header:hover .index-feature-header-more, -.index-feature-header-more:focus { - background-color: #2a2a2a; -} -.index-feature-header:active .index-feature-header-more, -.index-feature-header-more:active { - background-color: #222; -} - -.index-contact { - padding: 5px 15px; - overflow: auto; -} - -.index-blog {} -.index-blog-post { - margin: 5px; - padding: 2px 5px; - background: #222; - box-shadow: 0 2px 5px #000; -} -.index-blog-post-link { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.index-blog-post-header { - display: flex; - align-items: center; - pointer-events: none; - border-bottom: 1px solid #333; -} -.index-blog-post-title { - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - flex: 1 1 auto; - font-size: 1.5em; - line-height: 1.5em; -} -.index-blog-post-published { - flex: 0 1 auto; - font-size: .9em; - line-height: 1.5em; - opacity: .5; - padding-bottom: 2px; -} -.index-blog-post-content { - pointer-events: none; - max-height: 70px; - overflow: hidden; -} -.index-blog-post-content a { - pointer-events: initial; - color: inherit; - text-decoration: underline; -} - -.header-now-playing { - max-height: 60px; - min-width: 300px; - max-width: 500px; - height: 100%; - background-image: linear-gradient(0deg, #111c 0%, #222c 50%, #333c 50%, #555c 100%); - box-shadow: 0 2px 1em #000; - border-radius: 5px; - overflow: hidden; - align-items: center; - bottom: 0; - padding: 5px; - display: grid; - grid-template-columns: 25px 50px 1fr; - column-gap: 5px; - transition: bottom .5s, width .2s, max-height .5s, padding .2s; -} -.header-now-playing-hidden { - bottom: -80px; - max-height: 0; - padding: 0; -} -.header-now-playing-icon img { - vertical-align: middle; -} -.header-now-playing-cover { - width: 50px; - height: 50px; -} -.header-now-playing-cover img { - width: 100%; - height: 100%; - vertical-align: middle; - object-fit: cover; -} -.header-now-playing-details { - overflow: hidden; - white-space: nowrap; -} -.header-now-playing-details a { - color: #fff; - text-decoration: none; - transition: width .2s; -} -.header-now-playing-details a:hover, -.header-now-playing-details a:focus { - text-decoration: underline; -} -.header-now-playing-title { - font-size: 1.2em; -} -.header-now-playing-title, -.header-now-playing-artist { - overflow: hidden; - text-overflow: ellipsis; -} - -.index-project { - margin: 5px; - background-image: linear-gradient(180deg, #555c 0, #333c 32px, #222c 32px, #111c 100%); - box-shadow: 0 2px 5px #000; - border-radius: 5px; - overflow: hidden; -} -.index-project-anchor { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.index-project-content { - margin: 5px 8px; - margin-bottom: 0; - pointer-events: none; -} -.index-project-name { - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - flex: 1 1 auto; - font-size: 1.5em; - line-height: 1.5em; -} -.index-project-summary { - margin-top: 2px; -} -.index-project-links { - display: flex; - pointer-events: none; - margin: 0 3px; -} -.index-project-link { - pointer-events: initial; - margin: 4px 1px; - color: #fff; - text-decoration: none; - min-width: 100px; - padding: 2px 8px; - border-radius: 4px; - transition: background-color .2s; -} -.index-project-link:hover, -.index-project-link:focus { - background-color: #fff2; -} -.index-project-link:active { - background-color: #fff1; -} - - -.section { - padding: 0 15px; -} -.section:not(:first-child) { - margin-top: 30px; -} -.section-content { - max-width: 1100px; - margin: 10px auto; - padding: 10px 20px; - filter: drop-shadow(0 1px 5px #000); -} -.section-background { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-image: linear-gradient(0deg, #111 0%, #222 50%, #333 50%, #555 100%); - transform: skew(-15deg); -} -.section-content h1 { - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - font-size: 2em; - line-height: 1em; - font-weight: 400; -} - -.project { - padding: 0 10px; - /*background-color: var(--project-colour); - background-image: linear-gradient(#111e, #111e); - overflow: hidden;*/ -} -.project-content { - max-width: 1100px; - width: 100%; - margin: 1em auto; - overflow: hidden; - background-color: var(--project-colour); - background-image: linear-gradient(180deg, #555c 0, #333c 38px, #222c 38px, #111c 100%); - box-shadow: 0 2px 1em #000; - border-radius: 5px; -} -.project-languages { - font-size: 0; - line-height: 0; - display: inline-block; - font-family: Tahoma, Geneva, 'Dejavu Sans', Arial, Helvetica, sans-serif; - margin-left: 4px; -} -.project-language { - font-size: 11px; - line-height: 18px; - display: inline-block; - border-left: 4px solid var(--language-colour); - background-color: var(--language-colour); - background-image: linear-gradient(90deg, #1118, #111a); - border-radius: 4px; - overflow: hidden; - padding: 0 4px; - margin: 0 4px; - box-shadow: 0 0 1px var(--language-colour); -} -.project-details { - margin: 10px; - margin-bottom: 0; -} -.project-details h2 { - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - font-size: 2em; - line-height: 1em; - font-weight: 400; - margin-bottom: 5px; -} -.project-details p { - font-size: .9em; - line-height: 1.8em; -} -.project-details .project-details-summary { - font-size: 1.2em; - line-height: 1.5em; -} -.project-links { - display: flex; - margin: 0 3px; -} -.project-link { - margin: 4px 1px; - color: #fff; - text-decoration: none; - min-width: 100px; - padding: 2px 8px; - border-radius: 4px; - transition: background-color .2s; -} -.project-link:hover, -.project-link:active { - background-color: #fff2; -} -.project-link:focus { - background-color: #fff1; -} - -.etcetera-item { - max-width: 1100px; - margin: 10px auto; - padding: 0 15px; - filter: drop-shadow(0 1px 5px #000); -} -.etcetera-item-link { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: #393939; - background-image: linear-gradient(0deg, #1118 0%, #2228 50%, #3338 50%, #5558 100%); - border-radius: 5px; - overflow: hidden; - transition: background-color .2s; -} -.etcetera-item-link:hover, -.etcetera-item-link:focus { - background-color: #555; -} -.etcetera-item-link:active { - background-color: #222; -} -.etcetera-item-content { - max-width: 1100px; - margin: 0 auto; - padding: 10px 12px; -} -.etcetera-item-content h2 { - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - font-size: 1.5em; - line-height: 1.2em; - font-weight: 400; - pointer-events: none; -} -.etcetera-item-content p { - font-size: .9em; - line-height: 1.4em; - pointer-events: none; -} - -.http-error { - text-align: center; -} -.http-error-head { - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - font-size: 2.5em; - line-height: 2em; - font-weight: 400; -} - -.related-site { - max-width: 1100px; - margin: 10px auto; - padding: 0 15px; - filter: drop-shadow(0 1px 5px #000); -} -.related-site-link { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: #393939; - background-image: linear-gradient(0deg, #1118 0%, #2228 50%, #3338 50%, #5558 100%); - border-radius: 5px; - overflow: hidden; - transition: background-color .2s; -} -.related-site-link:hover, -.related-site-link:focus { - background-color: #555; -} -.related-site-link:active { - background-color: #222; -} -.related-site-content { - max-width: 1100px; - margin: 0 auto; - padding: 10px 12px; -} -.related-site-content h2 { - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - font-size: 1.5em; - line-height: 1.2em; - font-weight: 400; - pointer-events: none; -} -.related-site-content p { - font-size: .9em; - line-height: 1.4em; - pointer-events: none; -} - -.php { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - width: 100%; - height: 100%; - z-index: 177; - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - pointer-events: none; -} -.php-search { - max-width: 600px; - width: 100%; - pointer-events: initial; -} -.php-search-input { - border: 1px solid #999; - background-color: #fff; - opacity: .5; - box-shadow: 0 2px .5em #000a, inset 0 1px 2px #000a; - transition: opacity .5s, box-shadow .5s; -} -.php-search-input:hover, -.php-search-input:focus, -.php-search-input:focus-within { - opacity: 1; - box-shadow: 0 2px 1em #000, inset 0 1px 2px #000a; -} -.php-search-input input { - border-width: 0; - background-color: transparent; - color: #000; - font-family: Tahoma, Geneva, 'Dejavu Sans', Arial, Helvetica, sans-serif; - font-size: 24px; - line-height: 35px; - width: 100%; - height: 100%; - padding: 2px 5px; -} -.php-time { - display: flex; - justify-content: center; - align-items: center; - margin: 20px auto; - width: 100%; -} -.php-time-analog { - flex: 0 0 auto; -} -.php-time-alter { - flex: 0 0 auto; - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; - width: 300px; - font-family: 'Electrolize', Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - filter: drop-shadow(0 1px 5px #000); - color: transparent; -} -.php-time-digital { - font-size: 7em; - line-height: 1.5em; - display: flex; - flex: 0 0 auto; - max-width: 300px; - width: 100%; - align-items: center; - justify-content: center; -} -.php-time-date { - font-size: 2em; -} -.php-time-digital-separator { - margin-top: -4px; -} -.php-time-digital-separator-hidden { - visibility: hidden; -} -.php-time-digital-hours, -.php-time-digital-separator, -.php-date-label { - background-image: linear-gradient(180deg, #eee 0%, #ddd 50%, #ccc 50%, #aaa 100%); - background-clip: text; - -webkit-background-clip: text; -} -.php-time-digital-minutes, -.php-date-week, -.php-date-day, -.php-date-month, -.php-date-year { - background-image: linear-gradient(0deg, #281430 0%, #392540 50%, #4a3650 50%, #6c5871 100%); - background-clip: text; - -webkit-background-clip: text; -} - -.clock { - width: 200px; - height: 200px; - border-radius: 100%; - border: 4px solid #c0c0c0; - overflow: hidden; - box-sizing: content-box; - filter: drop-shadow(0 1px 5px #000); -} -.clock-background { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: #fffd; - filter: blur(20px); -} -.clock-center { - position: absolute; - top: 96px; - left: 96px; - width: 8px; - height: 8px; - background-color: #000; - border-radius: 100%; - z-index: 1000; -} -.clock-hand { - --hand-rotation: 0deg; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - transform: rotate(var(--hand-rotation)); - z-index: 900; -} -.clock-hand-display { - position: absolute; - width: 2px; - left: 99px; - height: 99px; - background-color: #000; -} -.clock-hand-hours { - z-index: 910; -} -.clock-hand-minutes { - z-index: 920; -} -.clock-hand-seconds { - z-index: 930; -} -.clock-hand-hours .clock-hand-display { - height: 70px; - margin-top: 30px; - filter: drop-shadow(0 1px 2px #000); -} -.clock-hand-minutes .clock-hand-display { - height: 80px; - margin-top: 20px; - filter: drop-shadow(0 1px 3px #000); -} -.clock-hand-seconds .clock-hand-display { - height: 100px; - margin-top: 15px; - opacity: .6; - background-color: #f00; - filter: drop-shadow(0 1px 4px #000); -} -.clock-number { - position: absolute; - top: 0; - left: 0; - z-index: 500; - width: 100px; - height: 100px; -} -.clock-number-display { - position: absolute; - width: 2px; - height: 10px; - background-color: #000; -} -.clock-number-9 .clock-number-display, -.clock-number-3 .clock-number-display { - width: 10px; - height: 2px; -} -.clock-number-6 .clock-number-display { - bottom: 0; -} -.clock-number-12 .clock-number-display { - right: 0; - height: 15px; -} -.clock-number-3 .clock-number-display { - right: 0; - bottom: 0; -} -.clock-number-12 { - left: 1px; -} -.clock-number-9 { - top: 99px; -} -.clock-number-6 { - top: 100px; - left: 99px; -} -.clock-number-3 { - top: 1px; - left: 100px; -} - -.ob-wrapper h1 { - font-family: Verdana, 'Dejavu Sans', Arial, Helvetica, sans-serif; - font-size: 20px; - line-height: 24px; -} - -.ob-wrapper { - padding-top: 1px; - max-width: 1000px; - margin: 0 auto; - display: flex; -} -@media(max-width: 700px) { - .ob-wrapper { flex-direction: column; } -} -.ob-blog { - margin: 10px; -} -.ob-blog h1 a { - color: #fff; - text-decoration: none; -} -.ob-blog p { - font-size: 14px; - line-height: 22px; -} -.ob-blog p a { - color: #55c; - text-decoration: none; -} -.ob-blog p a:hover, -.ob-blog p a:focus { - text-decoration: underline; -} -.ob-blog p a:active { - color: #c22; -} -.ob-blog time { - font-size: 11px; -} -.ob-blog.ob-preview p { - color: #ccc; - margin: .2em 0; - font-size: 12px; - line-height: 20px; -} -.ob-blogs .ob-blog:not(:last-child) { - margin-bottom: 1.5em; -} -.ob-blog .ob-continue { - display: block; - text-align: center; - color: #fff; - text-decoration: none; - padding: 5px; - margin: 3px 0; - background-color: #161616; - border-radius: 5px; - transition: background-color .2s; -} -.ob-blog .ob-continue:hover, -.ob-blog .ob-continue:focus { - background-color: #1f1f1f; -} -.ob-blog .ob-continue:active { - background-color: #191919; -} - -.ascii-wrap { - margin-bottom: calc(100vh - 70px); -} -.ascii-chars { - text-align: center; - max-width: 1200px; - margin: 0 auto; -} -.ascii-char { - display: inline-flex; - flex-direction: column; - border: 2px solid #4a3650; - border-radius: 5px; - overflow: hidden; - width: 200px; - text-align: left; - margin: 2px; - background-color: #333; - cursor: pointer !important; - transition: background-color .1s; -} -.ascii-char:hover, -.ascii-char:focus { - background-color: #444; -} -.ascii-char:active { - background-color: #222; -} -.ascii-char-print { - white-space: pre; - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 2.5em; - text-align: center; - padding: 10px; - pointer-events: none; -} -.ascii-char-desc { - text-align: center; - font-size: 1.2em; - padding: 0 5px 5px; - pointer-events: none; -} -.ascii-char-misc { - display: flex; - justify-content: space-evenly; - border-top: 1px solid #4a3650; -} -.ascii-char-misc-item { - flex: 1 1 auto; - padding: 2px 5px; - transition: background-color .1s; - background-color: #444; -} -.ascii-char-misc-item:not(:last-child) { - border-right: 1px solid #4a3650; -} -.ascii-char-misc-item:hover, -.ascii-char-misc-item:focus { - background-color: #666; -} -.ascii-char-misc-item:active { - background-color: #555; -} -.ascii-char-misc-item-head { - font-variant: small-caps; -} -.ascii-char-misc-item-value { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - text-align: right; -} -.ascii-search { - padding-top: 10px; - position: sticky; - top: 0; - z-index: 1000; - background-image: linear-gradient(180deg, #4a3650 51px, transparent); -} -.ascii-search-box { - border: 1px solid #000; - border-radius: 5px; - overflow: hidden; - max-width: 1200px; - margin: 0 auto; -} -.ascii-search-box input { - border-width: 0; - background-color: #111; - color: #fff; - width: 100%; - height: 100%; - font-size: 2em; - padding: 5px; -} -.ascii-search-hint { - font-size: .9em; - padding: 0 5px; - transition: opacity .2s; - max-width: 1200px; - margin: 0 auto; -} - -.whois-container { - max-width: 1200px; - margin: 0 auto; -} - -.whois-lookup-form { - display: flex; - border-radius: 5px; - margin: 10px; - overflow: hidden; - box-shadow: 0 1px 5px #222; - transition: opacity .2s; -} -.whois-locked .whois-lookup-form { - opacity: .5; -} -.whois-lookup-form-input { - display: block; - flex: 1 1 auto; - padding: 10px; - background-color: #212121; - background-image: linear-gradient(0deg, #262626, #202020); - border-width: 0; - color: #fff; - font-family: Tahoma, Geneva, 'Dejavu Sans', Arial, Helvetica, sans-serif; -} -.whois-lookup-form-submit { - flex: 0 0 auto; - background-color: #333333; - background-image: linear-gradient(0deg, transparent, #404040); - color: #fff; - border-width: 0; - padding: 10px; - cursor: pointer; - border-radius: 0; - transition: background-color .2s; -} -.whois-lookup-form-submit:focus, -.whois-lookup-form-submit:hover { - background-color: #3F3F3F; -} -.whois-lookup-form-submit:active { - background-color: #393939; -} - -.whois-result { - margin: 10px; - padding: 6px 10px; - white-space: pre-wrap; - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 14px; - transition: opacity .2s; - background-color: #202020; - border-radius: 5px; - box-shadow: 0 1px 5px #222; - overflow: auto; -} -.whois-locked .whois-result { - opacity: .5; -} - -.whois-result-tabs { - display: flex; - margin: 0 5px; -} -.whois-locked .whois-result-tabs { - opacity: .5; -} -.whois-result-tab { - margin: 0 5px; - padding: 6px 10px; - font-size: 14px; - transition: opacity .2s; - background-color: #202020; - border-radius: 5px; - box-shadow: 0 1px 5px #222; - opacity: .5; - cursor: pointer; - display: block; - color: #fff; - text-decoration: none; -} -.whois-result-tab:hover, -.whois-result-tab:focus { - opacity: .7; -} -.whois-result-tab-active { - opacity: 1 !important; -} -.whois-result-tab-header { - font-size: 1.3em; - line-height: 1.2em; -} -.whois-result-tab-server { - font-size: .9em; - line-height: 1.2em; - color: #888; - white-space: pre-wrap; - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; -} diff --git a/src/AssetsInfo.php b/src/AssetsInfo.php new file mode 100644 index 0000000..c20a334 --- /dev/null +++ b/src/AssetsInfo.php @@ -0,0 +1,33 @@ +fileList); + } + + public function get(string $name): string { + return $this->fileList[$name] ?? ''; + } + + public static function fromJson(string $body): self { + $body = json_decode($body, true); + return new static($body === false ? [] : $body); + } + + public static function fromFile(string $path): self { + $body = file_get_contents($path); + if($body === false) + return new static([]); + + return self::fromJson($body); + } + + public static function fromCurrent(): self { + return self::fromFile(MKI_DIR_ASSETS . '/current.json'); + } +} diff --git a/src/MakaiContext.php b/src/MakaiContext.php index 1394b60..24e6039 100644 --- a/src/MakaiContext.php +++ b/src/MakaiContext.php @@ -60,6 +60,7 @@ final class MakaiContext { ); $this->templating->addGlobal('globals', [ 'siteInfo' => $this->siteInfo, + 'assetsInfo' => AssetsInfo::fromCurrent(), ]); } diff --git a/templates/ascii/index.twig b/templates/ascii/index.twig index 41dcdd6..31b1670 100644 --- a/templates/ascii/index.twig +++ b/templates/ascii/index.twig @@ -3,6 +3,9 @@ {% set header_title = 'flash.moe / ascii table' %} {% set header_minimal = true %} +{% set styles = styles|default([])|merge([ globals.assetsInfo.get('ascii.css') ]) %} +{% set scripts = scripts|default([])|merge([ globals.assetsInfo.get('ascii.js') ]) %} + {% set table = [ ['Null character', 'NUL'], ['Start of heading', 'SOH'], @@ -179,79 +182,6 @@ {% endfor %} - + {% endblock %} diff --git a/templates/master-2021.twig b/templates/master-2021.twig index fc530f2..134ca07 100644 --- a/templates/master-2021.twig +++ b/templates/master-2021.twig @@ -1 +1,67 @@ {% extends 'master.twig' %} + +{% set master_title = (title is defined ? (title ~ ' // ') : '') ~ 'flash.moe' %} + +{% set styles = styles|default([])|merge([ + globals.assetsInfo.get('2021.css'), + '/fonts/electrolize/style.css', + globals.assetsInfo.get('common.css'), +]) %} + +{% set scripts = scripts|default([])|merge([ + globals.assetsInfo.get('2021.js'), + globals.assetsInfo.get('common.js'), +]) %} + +{% set master_body_attrs = master_body_attrs|default([])|merge({ + 'class': html_classes({ 'index': header_is_index is defined, 'fullscreen-header': header_full is defined, 'now-playing': header_now_playing is defined, 'header-minimal': header_minimal is defined }), +}) %} + +{% block master_head %} + +{% endblock %} + +{% block master_body %} +
+
+ +
+
0 %}style="padding-bottom: {{ header_offset }}px"{% endif %}> + +
+
+
+
+
+
+ +
+
+
+
+
+
+
+ {% for link in globals.siteInfo.headerNavigation %} + {{ link.title }} + {% endfor %} +
+
+
+
+
+ {% block container %} + {% endblock %} +
+ +{% if footer_onload is defined %} + +{% endif %} +{% endblock %} diff --git a/templates/master.twig b/templates/master.twig index 7edeb4d..aa94922 100644 --- a/templates/master.twig +++ b/templates/master.twig @@ -1,56 +1,21 @@ - - {% if title is defined %}{{ title }} // {% endif %}flash.moe - - - - + + {% if master_title is defined and master_title is not empty %}{{ master_title }}{% endif %} + {% block master_head %}{% endblock %} + {% if styles is defined and styles is iterable and styles is not empty %} + {% for style in styles|reverse %} + + {% endfor %} + {% endif %} - -
-
- -
-
0 %}style="padding-bottom: {{ header_offset }}px"{% endif %}> - -
-
-
-
-
-
- -
-
-
-
-
-
-
- {% for link in globals.siteInfo.headerNavigation %} - {{ link.title }} - {% endfor %} -
-
-
-
-
- {% block container %} - {% endblock %} -
- -{% if footer_onload is defined %} - -{% endif %} - + + {% block master_body %}{% endblock %} + {% if scripts is defined and scripts is iterable and scripts is not empty %} + {% for script in scripts|reverse %} + + {% endfor %} + {% endif %} diff --git a/templates/whois/index.twig b/templates/whois/index.twig index f6d3d5a..9c410aa 100644 --- a/templates/whois/index.twig +++ b/templates/whois/index.twig @@ -6,6 +6,9 @@ {% set header_minimal = true %} {% set footer_copy_start = '2013' %} +{% set styles = styles|default([])|merge([ globals.assetsInfo.get('whois.css') ]) %} +{% set scripts = scripts|default([])|merge([ globals.assetsInfo.get('whois.js') ]) %} + {% block container %}
@@ -20,6 +23,4 @@
- - {% endblock %}