This commit is contained in:
2026-11-11 16:07:24 -08:00
parent 7968973574
commit e4b19d1696
6 changed files with 915 additions and 5 deletions

649
cdn-cgi/styles/main.css Normal file
View File

@@ -0,0 +1,649 @@
.container {
width: 100%
}
.bg-white {
--bg-opacity: 1;
background-color: #fff;
background-color: rgba(255, 255, 255, var(--bg-opacity))
}
.bg-center {
background-position: 50%
}
.bg-no-repeat {
background-repeat: no-repeat
}
.border-gray-300 {
--border-opacity: 1;
border-color: #ebebeb;
border-color: rgba(235, 235, 235, var(--border-opacity))
}
.rounded {
border-radius: .25rem
}
.border-solid {
border-style: solid
}
.border-0 {
border-width: 0
}
.border {
border-width: 1px
}
.border-t {
border-top-width: 1px
}
.cursor-pointer {
cursor: pointer
}
.block {
display: block
}
.inline-block {
display: inline-block
}
.table {
display: table
}
.hidden {
display: none
}
.float-left {
float: left
}
.clearfix:after {
content: "";
display: table;
clear: both
}
.font-mono {
font-family: monaco, courier, monospace
}
.font-light {
font-weight: 300
}
.font-normal {
font-weight: 400
}
.font-semibold {
font-weight: 600
}
.h-12 {
height: 3rem
}
.h-20 {
height: 5rem
}
.text-13 {
font-size: 13px
}
.text-15 {
font-size: 15px
}
.text-60 {
font-size: 60px
}
.text-2xl {
font-size: 1.5rem
}
.text-3xl {
font-size: 1.875rem
}
.leading-tight {
line-height: 1.25
}
.leading-normal {
line-height: 1.5
}
.leading-relaxed {
line-height: 1.625
}
.leading-1\.3 {
line-height: 1.3
}
.my-8 {
margin-top: 2rem;
margin-bottom: 2rem
}
.mx-auto {
margin-left: auto;
margin-right: auto
}
.mr-2 {
margin-right: .5rem
}
.mb-2 {
margin-bottom: .5rem
}
.mt-3 {
margin-top: .75rem
}
.mb-4 {
margin-bottom: 1rem
}
.ml-4 {
margin-left: 1rem
}
.mt-6 {
margin-top: 1.5rem
}
.mb-6 {
margin-bottom: 1.5rem
}
.mb-8 {
margin-bottom: 2rem
}
.mb-10 {
margin-bottom: 2.5rem
}
.ml-10 {
margin-left: 2.5rem
}
.mb-15 {
margin-bottom: 3.75rem
}
.-ml-6 {
margin-left: -1.5rem
}
.overflow-hidden {
overflow: hidden
}
.p-0 {
padding: 0
}
.py-2 {
padding-top: .5rem;
padding-bottom: .5rem
}
.px-4 {
padding-left: 1rem;
padding-right: 1rem
}
.py-8 {
padding-top: 2rem;
padding-bottom: 2rem
}
.py-10 {
padding-top: 2.5rem;
padding-bottom: 2.5rem
}
.py-15 {
padding-top: 3.75rem;
padding-bottom: 3.75rem
}
.pr-6 {
padding-right: 1.5rem
}
.pt-10 {
padding-top: 2.5rem
}
.absolute {
position: absolute
}
.relative {
position: relative
}
.left-1\/2 {
left: 50%
}
.-bottom-4 {
bottom: -1rem
}
.resize {
resize: both
}
.text-center {
text-align: center
}
.text-black-dark {
--text-opacity: 1;
color: #404040;
color: rgba(64, 64, 64, var(--text-opacity))
}
.text-gray-600 {
--text-opacity: 1;
color: #999;
color: rgba(153, 153, 153, var(--text-opacity))
}
.text-red-error {
--text-opacity: 1;
color: #bd2426;
color: rgba(189, 36, 38, var(--text-opacity))
}
.text-green-success {
--text-opacity: 1;
color: #9bca3e;
color: rgba(155, 202, 62, var(--text-opacity))
}
.antialiased {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale
}
.truncate {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap
}
.w-12 {
width: 3rem
}
.w-240 {
width: 60rem
}
.w-1\/2 {
width: 50%
}
.w-1\/3 {
width: 33.333333%
}
.w-full {
width: 100%
}
.transition {
-webkit-transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, -webkit-transform;
transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, -webkit-transform;
transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform;
transition-property: background-color, border-color, color, fill, stroke, opacity, box-shadow, transform, -webkit-transform
}
body,
html {
--text-opacity: 1;
color: #404040;
color: rgba(64, 64, 64, var(--text-opacity));
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-family: system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;
font-size: 16px
}
*,
body,
html {
margin: 0;
padding: 0
}
* {
box-sizing: border-box
}
a {
--text-opacity: 1;
color: #2f7bbf;
color: rgba(47, 123, 191, var(--text-opacity));
text-decoration: none;
-webkit-transition-property: all;
transition-property: all;
-webkit-transition-duration: .15s;
transition-duration: .15s;
-webkit-transition-timing-function: cubic-bezier(0, 0, .2, 1);
transition-timing-function: cubic-bezier(0, 0, .2, 1)
}
a:hover {
--text-opacity: 1;
color: #f68b1f;
color: rgba(246, 139, 31, var(--text-opacity))
}
img {
display: block;
width: 100%;
height: auto
}
#what-happened-section p {
font-size: 15px;
line-height: 1.5
}
strong {
font-weight: 600
}
.bg-gradient-gray {
background-image: -webkit-linear-gradient(top, #dedede, #ebebeb 3%, #ebebeb 97%, #dedede)
}
.cf-error-source:after {
position: absolute;
--bg-opacity: 1;
background-color: #fff;
background-color: rgba(255, 255, 255, var(--bg-opacity));
width: 2.5rem;
height: 2.5rem;
--transform-translate-x: 0;
--transform-translate-y: 0;
--transform-rotate: 0;
--transform-skew-x: 0;
--transform-skew-y: 0;
--transform-scale-x: 1;
--transform-scale-y: 1;
-webkit-transform: translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));
-ms-transform: translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));
transform: translateX(var(--transform-translate-x)) translateY(var(--transform-translate-y)) rotate(var(--transform-rotate)) skewX(var(--transform-skew-x)) skewY(var(--transform-skew-y)) scaleX(var(--transform-scale-x)) scaleY(var(--transform-scale-y));
--transform-rotate: 45deg;
content: "";
bottom: -1.75rem;
left: 50%;
margin-left: -1.25rem;
box-shadow: 0 0 4px 4px #dedede
}
@media screen and (max-width:720px) {
.cf-error-source:after {
display: none
}
}
.cf-icon-browser {
background-image: url(/cdn-cgi/images/cf-icon-browser.png)
}
.cf-icon-cloud {
background-image: url(/cdn-cgi/images/cf-icon-cloud.png)
}
.cf-icon-server {
background-image: url(/cdn-cgi/images/cf-icon-server.png)
}
.cf-icon-ok {
background-image: url(/cdn-cgi/images/cf-icon-ok.png)
}
.cf-icon-error {
background-image: url(/cdn-cgi/images/cf-icon-error.png)
}
#cf-wrapper .feedback-hidden {
display: none
}
#cf-wrapper .feedback-success {
min-height: 33px;
line-height: 33px
}
#cf-wrapper .cf-button {
color: #0051c3;
font-size: 13px;
border-color: #0045a6;
-webkit-transition-timing-function: ease;
transition-timing-function: ease;
-webkit-transition-duration: .2s;
transition-duration: .2s;
-webkit-transition-property: background-color, border-color, color;
transition-property: background-color, border-color, color
}
#cf-wrapper .cf-button:hover {
color: #fff;
background-color: #003681
}
.cf-error-footer .hidden {
display: none
}
.cf-error-footer .cf-footer-ip-reveal-btn {
-webkit-appearance: button;
-moz-appearance: button;
appearance: button;
text-decoration: none;
background: none;
color: inherit;
border: none;
padding: 0;
font: inherit;
cursor: pointer;
color: #0051c3;
-webkit-transition: color .15s ease;
transition: color .15s ease
}
.cf-error-footer .cf-footer-ip-reveal-btn:hover {
color: #ee730a
}
.code-label {
background-color: #d9d9d9;
color: #313131;
font-weight: 500;
border-radius: 1.25rem;
font-size: .75rem;
line-height: 4.5rem;
padding: .25rem .5rem;
height: 4.5rem;
white-space: nowrap;
vertical-align: middle
}
@media (max-width:639px) {
.sm\:block {
display: block
}
.sm\:hidden {
display: none
}
.sm\:mb-1 {
margin-bottom: .25rem
}
.sm\:mb-2 {
margin-bottom: .5rem
}
.sm\:py-4 {
padding-top: 1rem;
padding-bottom: 1rem
}
.sm\:px-8 {
padding-left: 2rem;
padding-right: 2rem
}
.sm\:text-left {
text-align: left
}
}
@media (max-width:720px) {
.md\:border-gray-400 {
--border-opacity: 1;
border-color: #dedede;
border-color: rgba(222, 222, 222, var(--border-opacity))
}
.md\:border-solid {
border-style: solid
}
.md\:border-0 {
border-width: 0
}
.md\:border-b {
border-bottom-width: 1px
}
.md\:block {
display: block
}
.md\:inline-block {
display: inline-block
}
.md\:hidden {
display: none
}
.md\:float-none {
float: none
}
.md\:text-3xl {
font-size: 1.875rem
}
.md\:m-0 {
margin: 0
}
.md\:mt-0 {
margin-top: 0
}
.md\:mb-2 {
margin-bottom: .5rem
}
.md\:p-0 {
padding: 0
}
.md\:py-8 {
padding-top: 2rem;
padding-bottom: 2rem
}
.md\:px-8 {
padding-left: 2rem;
padding-right: 2rem
}
.md\:pr-0 {
padding-right: 0
}
.md\:pb-10 {
padding-bottom: 2.5rem
}
.md\:top-0 {
top: 0
}
.md\:right-0 {
right: 0
}
.md\:left-auto {
left: auto
}
.md\:text-left {
text-align: left
}
.md\:w-full {
width: 100%
}
}
@media (max-width:1023px) {
.lg\:text-sm {
font-size: .875rem
}
.lg\:text-2xl {
font-size: 1.5rem
}
.lg\:text-4xl {
font-size: 2.25rem
}
.lg\:leading-relaxed {
line-height: 1.625
}
.lg\:px-8 {
padding-left: 2rem;
padding-right: 2rem
}
.lg\:pt-6 {
padding-top: 1.5rem
}
.lg\:w-full {
width: 100%
}
}

253
down.html Normal file
View File

@@ -0,0 +1,253 @@
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="robots" content="noindex, nofollow">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Unavailable For Legal Reasons</title>
<link rel="stylesheet" href="/cdn-cgi/styles/main.css">
<script>
(function () {
const state = {
errorCode: null,
rayId: null,
timestamp: null,
ip: null
};
function getRayId() {
const candidates = [
document.querySelector('[data-ray-id]')?.dataset.rayId,
document.querySelector('meta[name="cf-ray"]')?.content
];
for (const value of candidates) {
if (value && /^[a-f0-9-]+$/i.test(value)) {
return value;
}
}
return null;
}
function getTimestamp() {
const candidates = [
document.querySelector('[data-timestamp]')?.dataset.timestamp,
document.querySelector('meta[name="cf-timestamp"]')?.content
];
for (const value of candidates) {
if (value && !Number.isNaN(Date.parse(value))) {
return new Date(value);
}
}
return new Date();
}
function setText(id, value, fallback = 'Unavailable') {
const element = document.getElementById(id);
if (element) element.textContent = value || fallback;
}
function initialize() {
const heading = document.querySelector('h1');
const errorMatch = heading?.textContent.match(/\b\d{3}\b/);
state.errorCode = errorMatch ? errorMatch[0] : null;
state.rayId = getRayId();
state.timestamp = getTimestamp();
setText('error-code', state.errorCode, '');
setText('ray-id', state.rayId);
setText('timestamp', state.timestamp.toISOString().replace('T', ' ').replace(/\.\d{3}Z$/, ' UTC'));
if (!state.errorCode) {
document.getElementById('error-code').hidden = true;
}
if (!state.rayId) {
document.getElementById('ray-information').hidden = true;
}
if (document.querySelector('title')) {
document.title = document.querySelector('h2')?.textContent.trim() || 'Unavailable';
}
}
async function getVisitorIP() {
const ipElement = document.getElementById('cf-footer-ip');
const revealButton = document.getElementById('cf-footer-ip-reveal');
const container = document.getElementById('cf-footer-item-ip');
try {
const response = await fetch('https://api.ipify.org?format=json', {
cache: 'no-store'
});
if (!response.ok) throw new Error('IP lookup failed');
const data = await response.json();
if (!data.ip) throw new Error('IP address unavailable');
ipElement.textContent = data.ip;
ipElement.classList.add('hidden');
revealButton.hidden = false;
container.classList.remove('hidden');
revealButton.onclick = function () {
ipElement.classList.remove('hidden');
revealButton.hidden = true;
};
} catch (error) {
container.classList.add('hidden');
console.error('Unable to retrieve visitor IP:', error);
}
}
function sendFeedback(helpful) {
const survey = document.getElementById('error-feedback-survey');
const success = document.getElementById('error-feedback-success');
if (!survey || !success) return;
survey.classList.add('feedback-hidden');
success.classList.remove('feedback-hidden');
}
document.addEventListener('DOMContentLoaded', function () {
initialize();
getVisitorIP();
const feedback = document.getElementById('error-feedback');
const yes = document.getElementById('feedback-button-yes');
const no = document.getElementById('feedback-button-no');
const reveal = document.getElementById('cf-footer-ip-reveal');
if (feedback && yes && no && 'classList' in feedback) {
feedback.classList.remove('feedback-hidden');
yes.addEventListener('click', () => sendFeedback(true));
no.addEventListener('click', () => sendFeedback(false));
}
if (reveal) {
reveal.addEventListener('click', function () {
reveal.hidden = true;
document.getElementById('cf-footer-ip').classList.remove('hidden');
});
}
});
})();
</script>
</head>
<body>
<div id="cf-wrapper">
<div class="cf-alert cf-alert-error cf-cookie-error hidden" id="cookie-alert" data-translate="enable_cookies">
Please enable cookies.
</div>
<div id="cf-error-details" class="p-0">
<header class="mx-auto pt-10 lg:pt-6 lg:px-8 w-240 lg:w-full mb-15 antialiased">
<h1
class="inline-block md:block mr-2 md:mb-2 font-light text-60 md:text-3xl text-black-dark leading-tight">
<span data-translate="error">Error 451</span>
</h1>
<span id="ray-information"
class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed">
Ray ID: <span id="ray-id"></span>
</span>
<span class="inline-block md:block heading-ray-id font-mono text-15 lg:text-sm lg:leading-relaxed"
id="timestamp"></span>
<h2 class="text-gray-600 leading-1.3 text-3xl lg:text-2xl font-light">
Unavailable For Legal Reasons
</h2>
</header>
<section class="w-240 lg:w-full mx-auto mb-8 lg:px-8">
<div id="what-happened-section" class="w-1/2 md:w-full">
<h2 class="text-3xl leading-tight font-normal mb-4 text-black-dark antialiased"
data-translate="what_happened">
What happened?
</h2>
<p>This website is unavailable for legal reasons.</p>
</div>
</section>
<div class="feedback-hidden py-8 text-center" id="error-feedback">
<div id="error-feedback-survey" class="footer-line-wrapper">
Was this page helpful?
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded"
id="feedback-button-yes" type="button">
Yes
</button>
<button class="border border-solid bg-white cf-button cursor-pointer ml-4 px-4 py-2 rounded"
id="feedback-button-no" type="button">
No
</button>
</div>
<div class="feedback-success feedback-hidden" id="error-feedback-success">
Thank you for your feedback!
</div>
</div>
<div
class="cf-error-footer cf-wrapper w-240 lg:w-full py-10 sm:py-4 sm:px-8 mx-auto text-center sm:text-left border-solid border-0 border-t border-gray-300">
<p class="text-13">
<span class="cf-footer-item sm:block sm:mb-1">
Cloudflare Ray ID:
<strong class="font-semibold" id="footer-ray-id">Unavailable</strong>
</span>
<span class="cf-footer-separator sm:hidden">&bull;</span>
<span id="cf-footer-item-ip" class="cf-footer-item hidden sm:block sm:mb-1">
Your IP:
<button type="button" id="cf-footer-ip-reveal" class="cf-footer-ip-reveal-btn">
Click to reveal
</button>
<span class="hidden" id="cf-footer-ip"></span>
</span>
<span class="cf-footer-separator sm:hidden">&bull;</span>
<span class="cf-footer-item sm:block sm:mb-1">
<span>Performance &amp; security by</span>
<a rel="noopener noreferrer" href="https://www.cloudflare.com/5xx-error-landing" id="brand_link"
target="_blank">
Cloudflare
</a>
</span>
</p>
</div>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', function () {
const ray = document.getElementById('ray-id');
const footerRay = document.getElementById('footer-ray-id');
if (ray && footerRay && ray.textContent.trim()) {
footerRay.textContent = ray.textContent;
}
});
</script>
<div id="ts-blocks" hidden></div>
</body>
</html>

View File

@@ -4,8 +4,6 @@
<img class="vyla-banner" src="/src/assets/images/android-tv/site-preview.png" alt="A collage of films and shows available through a Vyla experience" loading="lazy" fetchpriority="low" />
## Vyla TV
**Vyla TV** is an Android TV streaming app built with Jetpack Compose and ExoPlayer that lets you browse and watch movies and TV shows from TMDB.
## Downloads

View File

@@ -575,7 +575,7 @@ main.prose img:hover {
}
.st-card {
border-radius: 20px;
border-radius: 25px;
background: var(--hover-bg);
overflow: hidden;
}
@@ -681,7 +681,6 @@ label.st-row {
border: none;
border-radius: 50%;
background: var(--sw, var(--hover-bg));
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.2);
cursor: pointer;
transition: transform 0.15s ease, box-shadow 0.15s ease;
}

View File

@@ -243,7 +243,6 @@
}
.st-theme.on {
border-color: var(--text);
background: var(--hover-bg);
color: var(--text);
font-weight: 600;

View File

@@ -1674,6 +1674,17 @@ function buildSearch() {
var lightboxScale = 1;
var activeOriginImg = null;
function bindLightboxClicks() {
document.addEventListener("click", function (e) {
if (!(e.target instanceof HTMLImageElement)) return;
var img = e.target;
if (!img.closest("main.prose")) return;
if (img.closest("a")) return;
e.preventDefault();
openLightbox(img);
});
}
function initLightbox() {
if (document.getElementById("image-lightbox")) return;
var lb = document.createElement("div");
@@ -1922,6 +1933,7 @@ document.addEventListener("DOMContentLoaded", function () {
buildSettings();
initEasterEggs();
initContribSheet();
bindLightboxClicks();
loadPage();
window.addEventListener("popstate", loadPage);