update 2025-01-14 09:22:34
This commit is contained in:
parent
f6dae5254d
commit
6e82afc48b
|
@ -603,6 +603,180 @@ $razordVersion = getRazordVersion();
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal fade" id="colorModal" tabindex="-1" aria-labelledby="colorModalLabel" aria-hidden="true" data-bs-backdrop="static" data-bs-keyboard="false">
|
||||
<div class="modal-dialog modal-lg">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<h5 class="modal-title" id="colorModalLabel">选择主题颜色</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form method="POST" action="theme.php" id="themeForm" enctype="multipart/form-data">
|
||||
<div class="mb-3">
|
||||
<label for="primaryColor" class="form-label">主色:</label>
|
||||
<input type="color" class="form-control" name="primaryColor" id="primaryColor" value="#ffcc00">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="secondaryColor" class="form-label">副色:</label>
|
||||
<input type="color" class="form-control" name="secondaryColor" id="secondaryColor" value="#00ffff">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="bodyBgColor" class="form-label">背景色:</label>
|
||||
<input type="color" class="form-control" name="bodyBgColor" id="bodyBgColor" value="#087990">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="bodyColor" class="form-label">文本颜色:</label>
|
||||
<input type="color" class="form-control" name="bodyColor" id="bodyColor" value="#ffff00">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="infoBgSubtle" class="form-label">信息背景色:</label>
|
||||
<input type="color" class="form-control" name="infoBgSubtle" id="infoBgSubtle" value="#6A5ACD">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="primaryBorderSubtle" class="form-label">主边框颜色:</label>
|
||||
<input type="color" class="form-control" name="primaryBorderSubtle" id="primaryBorderSubtle" value="#87ceeb">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="tertiaryColor" class="form-label">文本字体颜色2:</label>
|
||||
<input type="color" class="form-control" name="tertiaryColor" id="tertiaryColor" value="#00ff00">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="tertiaryRgbColor" class="form-label">文本字体颜色3:</label>
|
||||
<input type="color" class="form-control" name="tertiaryRgbColor" id="tertiaryRgbColor" value="#1e90ff">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="heading1Color" class="form-label">标题颜色1:</label>
|
||||
<input type="color" class="form-control" name="heading1Color" id="heading1Color" value="#00a2e8">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="heading2Color" class="form-label">标题颜色2:</label>
|
||||
<input type="color" class="form-control" name="heading2Color" id="heading2Color" value="#00a2e8">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="heading3Color" class="form-label">标题颜色3:</label>
|
||||
<input type="color" class="form-control" name="heading3Color" id="heading3Color" value="#ffcc00">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="heading4Color" class="form-label">标题颜色4:</label>
|
||||
<input type="color" class="form-control" name="heading4Color" id="heading4Color" value="#ff4500">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="heading5Color" class="form-label">标题颜色5:</label>
|
||||
<input type="color" class="form-control" name="heading5Color" id="heading5Color" value="#7d5fff">
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="heading6Color" class="form-label">标题颜色6:</label>
|
||||
<input type="color" class="form-control" name="heading6Color" id="heading6Color" value="#00ffff">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-success">保存主题</button>
|
||||
<button type="button" class="btn btn-info" id="resetButton">恢复默认值</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mb-3">
|
||||
<h2 class="mb-4">上传背景图片</h2>
|
||||
<form method="POST" action="theme.php" enctype="multipart/form-data">
|
||||
<input type="file" class="form-control mb-3" name="imageFile" id="imageFile">
|
||||
<button type="submit" class="btn btn-success" id="submitBtn">上传图片</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<h2>上传的图片文件</h2>
|
||||
<table class="table table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>文件名</th>
|
||||
<th>文件大小</th>
|
||||
<th>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$picturesDir = $_SERVER['DOCUMENT_ROOT'] . '/nekobox/assets/Pictures/';
|
||||
if (is_dir($picturesDir)) {
|
||||
$files = array_diff(scandir($picturesDir), array('..', '.'));
|
||||
foreach ($files as $file) {
|
||||
$filePath = $picturesDir . $file;
|
||||
if (is_file($filePath)) {
|
||||
$fileSize = filesize($filePath);
|
||||
echo "<tr>
|
||||
<td>$file</td>
|
||||
<td>" . formatSize($fileSize) . "</td>
|
||||
<td><a href='?delete=$file' class='btn btn-danger btn-sm'>删除</a></td>
|
||||
</tr>";
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php
|
||||
if (isset($_GET['delete'])) {
|
||||
$fileToDelete = $_GET['delete'];
|
||||
$filePath = $picturesDir . $fileToDelete;
|
||||
if (file_exists($filePath)) {
|
||||
unlink($filePath);
|
||||
echo '<script>window.location.href = "settings.php";</script>';
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
function formatSize($size) {
|
||||
if ($size >= 1073741824) {
|
||||
return number_format($size / 1073741824, 2) . ' GB';
|
||||
} elseif ($size >= 1048576) {
|
||||
return number_format($size / 1048576, 2) . ' MB';
|
||||
} elseif ($size >= 1024) {
|
||||
return number_format($size / 1024, 2) . ' KB';
|
||||
} else {
|
||||
return $size . ' bytes';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
const colorInputs = document.querySelectorAll('input[type="color"]');
|
||||
|
||||
colorInputs.forEach(input => {
|
||||
if (localStorage.getItem(input.name)) {
|
||||
input.value = localStorage.getItem(input.name);
|
||||
}
|
||||
|
||||
input.addEventListener('input', function() {
|
||||
localStorage.setItem(input.name, input.value);
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById('resetButton').addEventListener('click', function() {
|
||||
document.getElementById('primaryColor').value = '#ffcc00';
|
||||
document.getElementById('secondaryColor').value = '#00ffff';
|
||||
document.getElementById('bodyBgColor').value = '#087990';
|
||||
document.getElementById('bodyColor').value = '#ffff00';
|
||||
document.getElementById('infoBgSubtle').value = '#6A5ACD';
|
||||
document.getElementById('primaryBorderSubtle').value = '#87ceeb';
|
||||
document.getElementById('tertiaryColor').value = '#00ff00';
|
||||
document.getElementById('tertiaryRgbColor').value = '#1e90ff';
|
||||
document.getElementById('heading1Color').value = '#00a2e8';
|
||||
document.getElementById('heading2Color').value = '#00a2e8';
|
||||
document.getElementById('heading3Color').value = '#ffcc00';
|
||||
document.getElementById('heading4Color').value = '#ff4500';
|
||||
document.getElementById('heading5Color').value = '#7d5fff';
|
||||
document.getElementById('heading6Color').value = '#00ffff';
|
||||
|
||||
localStorage.clear();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#colorModal">
|
||||
主题编辑器
|
||||
</button>
|
||||
<style>
|
||||
@media (max-width: 767px) {
|
||||
.table td {
|
||||
|
|
|
@ -0,0 +1,407 @@
|
|||
<?php
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$primaryColor = $_POST['primaryColor'] ?? '#ffcc00';
|
||||
$secondaryColor = $_POST['secondaryColor'] ?? '#00ffff';
|
||||
$bodyBgColor = $_POST['bodyBgColor'] ?? '#087990';
|
||||
$bodyColor = $_POST['bodyColor'] ?? '#ffff00';
|
||||
$infoBgSubtle = $_POST['infoBgSubtle'] ?? '#6A5ACD';
|
||||
$primaryBorderSubtle = $_POST['primaryBorderSubtle'] ?? '#87ceeb';
|
||||
$tertiaryColor = $_POST['tertiaryColor'] ?? '#00ff00';
|
||||
$tertiaryRgbColor = $_POST['tertiaryRgbColor'] ?? '#1e90ff';
|
||||
$heading1Color = $_POST['heading1Color'] ?? '#00a2e8';
|
||||
$heading2Color = $_POST['heading2Color'] ?? '#00a2e8';
|
||||
$heading3Color = $_POST['heading3Color'] ?? '#ffcc00';
|
||||
$heading4Color = $_POST['heading4Color'] ?? '#ff4500';
|
||||
$heading5Color = $_POST['heading5Color'] ?? '#7d5fff';
|
||||
$heading6Color = $_POST['heading6Color'] ?? '#00ffff';
|
||||
|
||||
$uploadedImagePath = '';
|
||||
if (isset($_FILES['imageFile']) && $_FILES['imageFile']['error'] === UPLOAD_ERR_OK) {
|
||||
$targetDir = $_SERVER['DOCUMENT_ROOT'] . '/nekobox/assets/Pictures/';
|
||||
if (!file_exists($targetDir)) {
|
||||
mkdir($targetDir, 0777, true);
|
||||
}
|
||||
$targetFile = $targetDir . basename($_FILES['imageFile']['name']);
|
||||
if (move_uploaded_file($_FILES['imageFile']['tmp_name'], $targetFile)) {
|
||||
$uploadedImagePath = '/nekobox/assets/Pictures/' . basename($_FILES['imageFile']['name']);
|
||||
}
|
||||
}
|
||||
|
||||
$cssContent = "
|
||||
|
||||
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;700&family=Noto+Serif+SC:wght@400;700&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&family=Roboto:wght@400;700&family=Cinzel+Decorative:wght@700;900&display=swap');
|
||||
|
||||
[data-bs-theme=transparent] {
|
||||
color-scheme: dark;
|
||||
--bs-primary: $primaryColor;
|
||||
--bs-secondary: $secondaryColor;
|
||||
--bs-body-bg: $bodyBgColor;
|
||||
--bs-body-color: $bodyColor;
|
||||
--bs-info-bg-subtle: $infoBgSubtle;
|
||||
|
||||
--bs-primary-border-subtle: $primaryBorderSubtle;
|
||||
--bs-tertiary: $tertiaryColor;
|
||||
--bs-tertiary-rgb: $tertiaryRgbColor;
|
||||
--bs-tertiary-color: $primaryColor;
|
||||
--bs-tertiary-color-rgb: $secondaryColor;
|
||||
|
||||
--bs-heading-1: $heading1Color;
|
||||
--bs-heading-2: $heading2Color;
|
||||
--bs-heading-3: $heading3Color;
|
||||
--bs-heading-4: $heading4Color;
|
||||
--bs-heading-5: $heading5Color;
|
||||
--bs-heading-6: $heading6Color;
|
||||
|
||||
--bs-heading-font-family: 'Montserrat', sans-serif;
|
||||
--bs-heading-font-weight: 700;
|
||||
--bs-heading-letter-spacing: 0.05em;
|
||||
--bs-heading-text-transform: uppercase;
|
||||
|
||||
--bs-shadow-light: 0 4px 8px rgba(255, 0, 124, 0.4);
|
||||
--bs-shadow-medium: 0 8px 16px rgba(0, 255, 133, 0.3);
|
||||
--bs-shadow-heavy: 0 12px 24px rgba(125, 95, 255, 0.5);
|
||||
|
||||
--bs-btn-color: #fff;
|
||||
--bs-btn-hover-color: #fff;
|
||||
--bs-btn-active-color: #fff;
|
||||
--bs-btn-disabled-color: #fff;
|
||||
--bs-body-font-family: 'Avant Garde', Avantgarde, 'Century Gothic', CenturyGothic, AppleGothic, sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: var(--bs-body-bg);
|
||||
color: var(--bs-body-color);
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
text-rendering: optimizeLegibility;
|
||||
" . ($uploadedImagePath ? "background-image: url('$uploadedImagePath'); background-repeat: no-repeat; background-position: center center; background-attachment: fixed; background-size: cover;" : "") . "
|
||||
}
|
||||
|
||||
h1 { color: var(--bs-heading-1); }
|
||||
h2 { color: var(--bs-heading-2); }
|
||||
h3 { color: var(--bs-heading-3); }
|
||||
h4 { color: var(--bs-heading-4); }
|
||||
h5 { color: var(--bs-heading-5); }
|
||||
h6 { color: var(--bs-heading-6); }
|
||||
|
||||
input::placeholder { color: #ffffff !important; }
|
||||
.table, .form-control, .card, button, label, li, td, th, blockquote, q, code, pre {
|
||||
background-color: transparent;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
background-color: transparent;
|
||||
border-color: #000000;
|
||||
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.table { --bs-table-bg: transparent; }
|
||||
.table thead th {
|
||||
color: var(--bs-tertiary-color) !important;
|
||||
background-color: var(--bs-tertiary-color-rgb) !important;
|
||||
}
|
||||
table td:nth-child(1) {
|
||||
color: var(--bs-tertiary) !important;
|
||||
}
|
||||
table td:nth-child(2) {
|
||||
color: var(--bs-tertiary-rgb) !important;
|
||||
}
|
||||
|
||||
button {
|
||||
background-color: var(--bs-primary);
|
||||
border: 1px solid rgba(255, 255, 255, 0.5);
|
||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.08);
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.btn-warning {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.btn-warning:hover, .btn-warning:focus, .btn-warning:active {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.btn-info {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.btn-info:hover,
|
||||
.btn-info:focus,
|
||||
.btn-info:active {
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
button, .btn-warning, .btn-info, .card, .modal-content { transition: transform 0.2s ease, box-shadow 0.2s ease; }
|
||||
button:active, .btn-warning:active, .btn-info:active, .card:active, .modal-content:active { transform: translateY(-6px); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); }
|
||||
button:hover, .btn-warning:hover, .btn-info:hover, .card:hover, .modal-content:hover { transform: translateY(-6px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); }
|
||||
a.btn { transition: transform 0.2s ease, box-shadow 0.2s ease; }
|
||||
a.btn:active { transform: translateY(-5px); box-shadow: 0 12px 24px rgba(0, 0, 0, 0.3); }
|
||||
a.btn:hover { transform: translateY(-3px); box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2); }
|
||||
a.btn i { margin-right: 8px; }
|
||||
button:hover { background-color: var(--bs-primary); }
|
||||
button:disabled { background-color: rgba(128, 128, 128, 0.5); color: rgba(255, 255, 255, 0.5); }
|
||||
|
||||
.card { box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1), 0 6px 20px rgba(0, 0, 0, 0.1); }
|
||||
|
||||
.modal-content { color: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1); }
|
||||
.modal-header { color: #fff; border-bottom: 1px solid #ccc; }
|
||||
.modal-title { font-size: 1.25rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; }
|
||||
.modal-body { color: #fff; }
|
||||
button.btn-close { color: #000 !important; }
|
||||
button.btn-close:hover { color: #333 !important; }
|
||||
|
||||
.form-group button { box-shadow: 0 2px 8px rgba(0, 123, 255, 0.2); }
|
||||
.form-group button:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(0, 123, 255, 0.3); }
|
||||
|
||||
.container-sm.container-bg.callout a { color: var(--bs-primary); font-weight: 500; text-transform: uppercase; letter-spacing: 0.5px; padding: 0.5rem 1rem; margin: 0 0.25rem; position: relative; transition: all var(--bs-transition-speed); text-decoration: none; }
|
||||
.container-sm.container-bg.callout a::after { content: ''; position: absolute; bottom: 0; left: 0; width: 100%; height: 2px; background-color: var(--bs-primary); transform: scaleX(0); transition: transform var(--bs-transition-speed); }
|
||||
.container-sm.container-bg.callout a:hover, .container-sm.container-bg.callout a:focus, .container-sm.container-bg.callout a.active { color: var(--bs-secondary); } .container-sm.container-bg.callout a:hover::after, .container-sm.container-bg.callout a:focus::after, .container-sm.container-bg.callout a.active::after { transform: scaleX(1); }
|
||||
|
||||
.royal-style { font-family: 'Cinzel Decorative', cursive; font-weight: 900; font-size: 80px; color: var(--bs-primary); text-shadow: 2px 2px 4px rgba(142, 68, 173, 0.7); letter-spacing: 4px; text-align: center; margin-top: 20px; }
|
||||
.royal-style:hover { transform: skew(-5deg); }
|
||||
@media (max-width: 991.98px) { .container-sm.container-bg.callout { flex-direction: column; align-items: center; } .container-sm.container-bg.callout a { margin: 0.5rem 0; } }
|
||||
h1 { color: var(--bs-heading-1); font-size: 2.5rem; }
|
||||
h2 { color: var(--bs-heading-2); font-size: 2rem; }
|
||||
h3 { color: var(--bs-heading-3); font-size: 1.75rem; }
|
||||
h4 { color: var(--bs-heading-4); font-size: 1.5rem; }
|
||||
h5 { color: var(--bs-heading-5); font-size: 1.25rem; }
|
||||
h6 { color: var(--bs-heading-6); font-size: 1rem; }
|
||||
h1:hover, h2:hover, h3:hover, h4:hover, h5:hover, h6:hover { text-shadow: 2px 2px 4px rgba(0,0,0,0.1); transition: all 0.3s ease; }
|
||||
.text-3d { display: inline-block; transition: transform 0.5s, text-shadow 0.5s; text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.2), 2px 2px 1px rgba(0, 0, 0, 0.15), 3px 3px 1px rgba(0, 0, 0, 0.1); }
|
||||
.text-3d:hover { transform: rotateY(15deg) rotateX(15deg); text-shadow: 3px 3px 1px rgba(0, 0, 0, 0.3), 4px 4px 2px rgba(0, 0, 0, 0.25), 5px 5px 3px rgba(0, 0, 0, 0.2); }
|
||||
.card { border-radius: 12px; overflow: hidden; box-shadow: var(--bs-shadow-medium); }
|
||||
.card-header { background-color: var(--bs-primary); color: #fff; }
|
||||
.royal-style { font-family: 'Cinzel Decorative', cursive; font-weight: 900; font-size: 80px; color: var(--bs-primary); text-shadow: 2px 2px 4px rgba(142, 68, 173, 0.7), 0 0 20px rgba(142, 68, 173, 0.3); letter-spacing: 4px; text-align: center; margin-top: 20px; transition: all var(-- bs-transition-speed); }
|
||||
.royal-style:hover { transform: skew(-5deg); text-shadow: 3px 3px 6px rgba(0,0,0,0.2); }
|
||||
@media (max-width: 991.98px) {
|
||||
.container-sm.container-bg.callout {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.container-sm.container-bg.callout a {
|
||||
margin: 0.5rem 0;
|
||||
}
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
font-family: var(--bs-heading-font-family);
|
||||
font-weight: var(--bs-heading-font-weight);
|
||||
letter-spacing: var(--bs-heading-letter-spacing);
|
||||
text-transform: var(--bs-heading-text-transform);
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: var(--bs-heading-1);
|
||||
font-size: 2.5rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: var(--bs-secondary);
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
color: #9c27b0;
|
||||
font-size: 1.75rem;
|
||||
}
|
||||
|
||||
h4 {
|
||||
color: #9c27b0;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
h5 {
|
||||
color: #673ab7;
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
h6 {
|
||||
color: #e91e63;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
h1:hover, h2:hover, h3:hover, h4:hover, h5:hover, h6:hover {
|
||||
text-shadow: 2px 2px 4px rgba(0,0,0,0.1);
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.text-3d {
|
||||
display: inline-block;
|
||||
transition: transform 0.5s, text-shadow 0.5s;
|
||||
text-shadow:
|
||||
1px 1px 1px rgba(0, 0, 0, 0.2),
|
||||
2px 2px 1px rgba(0, 0, 0, 0.15),
|
||||
3px 3px 1px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.text-3d:hover {
|
||||
transform: rotateY(15deg) rotateX(15deg);
|
||||
text-shadow:
|
||||
3px 3px 1px rgba(0, 0, 0, 0.3),
|
||||
4px 4px 2px rgba(0, 0, 0, 0.25),
|
||||
5px 5px 3px rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
|
||||
.card {
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
box-shadow: var(--bs-shadow-medium);
|
||||
}
|
||||
|
||||
.card-header {
|
||||
background-color: var(--bs-primary);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.royal-style {
|
||||
font-family: 'Cinzel Decorative', cursive;
|
||||
font-weight: 900;
|
||||
font-size: 80px;
|
||||
color: var(--bs-primary);
|
||||
text-shadow:
|
||||
2px 2px 4px rgba(142, 68, 173, 0.7),
|
||||
0 0 20px rgba(142, 68, 173, 0.3);
|
||||
letter-spacing: 4px;
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
transition: all var(--bs-transition-speed);
|
||||
}
|
||||
|
||||
.royal-style:hover {
|
||||
transform: skew(-5deg);
|
||||
text-shadow: 3px 3px 6px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
|
||||
@media (max-width: 767px) {
|
||||
body {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
h1 { font-size: 2rem; }
|
||||
h2 { font-size: 1.75rem; }
|
||||
h3 { font-size: 1.5rem; }
|
||||
h4 { font-size: 1.25rem; }
|
||||
h5 { font-size: 1.1rem; }
|
||||
h6 { font-size: 1rem; }
|
||||
|
||||
.royal-style {
|
||||
font-size: 40px;
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: 8px 16px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.table-3d {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.table-3d td,
|
||||
.table-3d th {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.container-bg {
|
||||
padding: 1rem;
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
@media (max-width: 575px) {
|
||||
.container-sm.container-bg.callout {
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.container-sm.container-bg.callout a {
|
||||
margin: 0.25rem 0;
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 992px) {
|
||||
.container-sm.container-bg.callout {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.container-sm.container-bg.callout a {
|
||||
margin: 0 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.row.justify-content-md-center .col.input-group.mb-3.justify-content-md-center {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.row.justify-content-md-center .col.input-group.mb-3.justify-content-md-center .btn-info {
|
||||
width: auto;
|
||||
min-width: 200px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn-info,
|
||||
.btn-success,
|
||||
.btn-danger {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.btn-info:hover,
|
||||
.btn-success:hover,
|
||||
.btn-danger:hover,
|
||||
.btn-info:focus,
|
||||
.btn-success:focus,
|
||||
.btn-danger:focus {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.btn {
|
||||
font-size: 10px;
|
||||
}
|
||||
}
|
||||
";
|
||||
|
||||
$filePath = $_SERVER['DOCUMENT_ROOT'] . '/nekobox/assets/theme/transparent.css';
|
||||
file_put_contents($filePath, $cssContent);
|
||||
echo "<script>
|
||||
alert('自定义主题颜色已更新,名称为 transparent.css ,清除浏览器缓存已应用主题 !');
|
||||
window.location.href = 'settings.php';
|
||||
</script>";
|
||||
} else {
|
||||
echo "<script>alert('没有接收到数据。');</script>";
|
||||
}
|
||||
|
||||
if (isset($_GET['delete'])) {
|
||||
$fileToDelete = $_GET['delete'];
|
||||
$filePath = $picturesDir . $fileToDelete;
|
||||
if (file_exists($filePath)) {
|
||||
unlink($filePath);
|
||||
|
||||
$cssFilePath = $_SERVER['DOCUMENT_ROOT'] . '/nekobox/assets/theme/transparent.css';
|
||||
if (file_exists($cssFilePath)) {
|
||||
$cssContent = file_get_contents($cssFilePath);
|
||||
$cssContent = preg_replace('/background-image: url\(.*?\);.*?background-size: cover;/', '', $cssContent);
|
||||
file_put_contents($cssFilePath, $cssContent);
|
||||
}
|
||||
|
||||
echo "<script>
|
||||
alert('图片已删除!');
|
||||
window.location.href = 'settings.php';
|
||||
</script>";
|
||||
exit;
|
||||
}
|
||||
}
|
||||
?>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -30,8 +30,8 @@
|
|||
name="theme-color"
|
||||
content="#FFFFFF"
|
||||
/>
|
||||
<script type="module" crossorigin src="./assets/index-DtINbTFY.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-D89mDC6o.css">
|
||||
<script type="module" crossorigin src="./assets/index-0PmD-pCq.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="./assets/index-D0PuVjwC.css">
|
||||
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
|
|
@ -1 +1 @@
|
|||
if(!self.define){let e,i={};const s=(s,n)=>(s=new URL(s+".js",n).href,i[s]||new Promise((i=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=i,document.head.appendChild(e)}else e=s,importScripts(s),i()})).then((()=>{let e=i[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e})));self.define=(n,r)=>{const f=e||("document"in self?document.currentScript.src:"")||location.href;if(i[f])return;let o={};const d=e=>s(e,f),t={module:{uri:f},exports:o,require:d};i[f]=Promise.all(n.map((e=>t[e]||d(e)))).then((e=>(r(...e),o)))}}define(["./workbox-3e8df8c8"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-D89mDC6o.css",revision:null},{url:"assets/index-DtINbTFY.js",revision:null},{url:"index.html",revision:"67f50dee51eadc375b79572e23a38e38"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"7f1c4521acc10694fefef8f72dd2ea5f"},{url:"pwa-192x192.png",revision:"021df52501f4357c03eebd808f40dc6a"},{url:"pwa-512x512.png",revision:"d2f759aaabcb2c44ff52b27fde3de6e0"},{url:"pwa-maskable-192x192.png",revision:"7cd11dc5f0490b349d23eef5591d10e5"},{url:"pwa-maskable-512x512.png",revision:"8c97dc367a85a5a1eba523b24f79d03b"},{url:"manifest.webmanifest",revision:"c452912633990899ffe790f985ad0db9"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
|
||||
if(!self.define){let e,i={};const s=(s,n)=>(s=new URL(s+".js",n).href,i[s]||new Promise((i=>{if("document"in self){const e=document.createElement("script");e.src=s,e.onload=i,document.head.appendChild(e)}else e=s,importScripts(s),i()})).then((()=>{let e=i[s];if(!e)throw new Error(`Module ${s} didn’t register its module`);return e})));self.define=(n,r)=>{const f=e||("document"in self?document.currentScript.src:"")||location.href;if(i[f])return;let c={};const d=e=>s(e,f),o={module:{uri:f},exports:c,require:d};i[f]=Promise.all(n.map((e=>o[e]||d(e)))).then((e=>(r(...e),c)))}}define(["./workbox-3e8df8c8"],(function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"assets/index-0PmD-pCq.js",revision:null},{url:"assets/index-D0PuVjwC.css",revision:null},{url:"index.html",revision:"52366c25823272eeba3fdc1c7a82f1ed"},{url:"registerSW.js",revision:"402b66900e731ca748771b6fc5e7a068"},{url:"favicon.svg",revision:"7f1c4521acc10694fefef8f72dd2ea5f"},{url:"pwa-192x192.png",revision:"021df52501f4357c03eebd808f40dc6a"},{url:"pwa-512x512.png",revision:"d2f759aaabcb2c44ff52b27fde3de6e0"},{url:"pwa-maskable-192x192.png",revision:"7cd11dc5f0490b349d23eef5591d10e5"},{url:"pwa-maskable-512x512.png",revision:"8c97dc367a85a5a1eba523b24f79d03b"},{url:"manifest.webmanifest",revision:"c452912633990899ffe790f985ad0db9"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}));
|
||||
|
|
|
@ -1 +1 @@
|
|||
v1.49.0
|
||||
v1.49.1
|
Loading…
Reference in New Issue