update
This commit is contained in:
parent
a3b85d4e9d
commit
eee41d09b2
|
|
@ -1,6 +1,7 @@
|
||||||
<footer class="site-footer">
|
<footer class="site-footer">
|
||||||
Crafted with ❤️ by ShreeBhattJi ( Devdatt Bhatt ) • +91-8000-74-1919
|
Crafted with ❤️ by ShreeBhattJi ( Devdatt Bhatt ) • +91-8000-74-1919
|
||||||
</footer>
|
</footer>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
@ -50,7 +50,4 @@ include 'static.php';
|
||||||
<a href="password.php"><i class="fas fa-lock"></i> Password</a>
|
<a href="password.php"><i class="fas fa-lock"></i> Password</a>
|
||||||
<a href="logout.php"><i class="fas fa-sign-out-alt"></i> Logout</a>
|
<a href="logout.php"><i class="fas fa-sign-out-alt"></i> Logout</a>
|
||||||
</nav>
|
</nav>
|
||||||
</header>
|
</header>
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
298
html/input.php
298
html/input.php
|
|
@ -12,10 +12,6 @@ include 'header.php'; ?>
|
||||||
<?php
|
<?php
|
||||||
$coreFile = "/var/www/core.json";
|
$coreFile = "/var/www/core.json";
|
||||||
|
|
||||||
/* ---------------------------------------------------------
|
|
||||||
STATE HELPERS
|
|
||||||
--------------------------------------------------------- */
|
|
||||||
|
|
||||||
function loadCoreState(): array
|
function loadCoreState(): array
|
||||||
{
|
{
|
||||||
global $coreFile;
|
global $coreFile;
|
||||||
|
|
@ -33,10 +29,6 @@ function saveCoreState(array $state): void
|
||||||
file_put_contents($coreFile, json_encode($state, JSON_PRETTY_PRINT));
|
file_put_contents($coreFile, json_encode($state, JSON_PRETTY_PRINT));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------
|
|
||||||
CPU LIST PARSER
|
|
||||||
--------------------------------------------------------- */
|
|
||||||
|
|
||||||
function parseCpuList(string $cpuList): array
|
function parseCpuList(string $cpuList): array
|
||||||
{
|
{
|
||||||
$cpus = [];
|
$cpus = [];
|
||||||
|
|
@ -56,10 +48,6 @@ function parseCpuList(string $cpuList): array
|
||||||
return $cpus;
|
return $cpus;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------
|
|
||||||
NUMA PLAN BUILDER (PHYSICAL-FIRST, NODE ROUND-ROBIN)
|
|
||||||
--------------------------------------------------------- */
|
|
||||||
|
|
||||||
function buildSequentialNumaPlan(): array
|
function buildSequentialNumaPlan(): array
|
||||||
{
|
{
|
||||||
$nodes = [];
|
$nodes = [];
|
||||||
|
|
@ -92,10 +80,6 @@ function buildSequentialNumaPlan(): array
|
||||||
return $finalPlan;
|
return $finalPlan;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------
|
|
||||||
CORE ALLOCATOR (NUMA SAFE)
|
|
||||||
--------------------------------------------------------- */
|
|
||||||
|
|
||||||
function allocateCore(int $serviceId): array
|
function allocateCore(int $serviceId): array
|
||||||
{
|
{
|
||||||
$state = loadCoreState();
|
$state = loadCoreState();
|
||||||
|
|
@ -508,14 +492,15 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="resolution">
|
<select id="resolution">
|
||||||
<option value="720:576" selected>720x576</option>
|
<option value="720x480" selected>720x480</option>
|
||||||
|
<option value="1280x720">1280x720</option>
|
||||||
|
<option value="1920x1080">1920x1080</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<input type="text" id="video_bitrate" placeholder="Video Bitrate">
|
<input type="number" id="video_bitrate" placeholder="Video Bitrate (kbps)" value="2048">
|
||||||
|
<input type="number" id="audio_bitrate" placeholder="Audio Bitrate (kbps)" value="128">
|
||||||
<input type="text" id="audio_bitrate" placeholder="Audio Bitrate">
|
|
||||||
|
<select id="volume">
|
||||||
<select id="volume">
|
|
||||||
<option value="-4">-4 dB</option>
|
<option value="-4">-4 dB</option>
|
||||||
<option value="-3">-3 dB</option>
|
<option value="-3">-3 dB</option>
|
||||||
<option value="-2">-2 dB</option>
|
<option value="-2">-2 dB</option>
|
||||||
|
|
@ -530,170 +515,131 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
||||||
<option value="12">12 dB</option>
|
<option value="12">12 dB</option>
|
||||||
<option value="15">15 dB</option>
|
<option value="15">15 dB</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="service">
|
<select id="service_status">
|
||||||
<option value="enable">Enable</option>
|
<option value="enable">Enable</option>
|
||||||
<option value="disable">Disable</option>
|
<option value="disable">Disable</option>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<button id="saveBtn" onclick="saveService()">Save</button>
|
<div style="text-align: center; margin-top: 15px;">
|
||||||
<button onclick="closePopup()">Close</button>
|
<button id="saveBtn" onclick="saveService()">Save</button>
|
||||||
<br>
|
<button type="button" onclick="closePopup()">Cancel</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<br>
|
|
||||||
</div>
|
</div>
|
||||||
<br>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
function openAddPopup() {
|
function openAddPopup() {
|
||||||
document.getElementById("popup_title").innerText = "Add Service";
|
document.getElementById('popup').style.display = 'block';
|
||||||
document.getElementById("saveBtn").setAttribute("onclick", "saveService()");
|
document.getElementById('overlay').style.display = 'block';
|
||||||
clearFields();
|
document.getElementById('popup_title').textContent = 'Add Service';
|
||||||
showPopup();
|
document.getElementById('service_id').value = '';
|
||||||
|
document.getElementById('service_name').value = '';
|
||||||
|
document.getElementById('in_udp').value = '';
|
||||||
|
document.getElementById('out_udp').value = '';
|
||||||
|
document.getElementById('video_format').value = 'mpeg2video';
|
||||||
|
document.getElementById('audio_format').value = 'mp2';
|
||||||
|
document.getElementById('resolution').value = '720x480';
|
||||||
|
document.getElementById('video_bitrate').value = '2048';
|
||||||
|
document.getElementById('audio_bitrate').value = '128';
|
||||||
|
document.getElementById('volume').value = '0';
|
||||||
|
document.getElementById('service_status').value = 'enable';
|
||||||
|
}
|
||||||
|
|
||||||
|
function openEditPopup(service) {
|
||||||
|
document.getElementById('popup').style.display = 'block';
|
||||||
|
document.getElementById('overlay').style.display = 'block';
|
||||||
|
document.getElementById('popup_title').textContent = 'Edit Service';
|
||||||
|
document.getElementById('service_id').value = service.id;
|
||||||
|
document.getElementById('service_name').value = service.service_name;
|
||||||
|
document.getElementById('in_udp').value = service.input_udp;
|
||||||
|
document.getElementById('out_udp').value = service.output_udp;
|
||||||
|
document.getElementById('video_format').value = service.video_format;
|
||||||
|
document.getElementById('audio_format').value = service.audio_format;
|
||||||
|
document.getElementById('resolution').value = service.resolution;
|
||||||
|
document.getElementById('video_bitrate').value = service.video_bitrate;
|
||||||
|
document.getElementById('audio_bitrate').value = service.audio_bitrate;
|
||||||
|
document.getElementById('volume').value = service.volume;
|
||||||
|
document.getElementById('service_status').value = service.service === 'enable' ? 'enable' : 'disable';
|
||||||
|
}
|
||||||
|
|
||||||
|
function closePopup() {
|
||||||
|
document.getElementById('popup').style.display = 'none';
|
||||||
|
document.getElementById('overlay').style.display = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveService() {
|
||||||
|
// Get form values
|
||||||
|
const id = document.getElementById('service_id').value;
|
||||||
|
const service_name = document.getElementById('service_name').value;
|
||||||
|
const input_udp = document.getElementById('in_udp').value;
|
||||||
|
const output_udp = document.getElementById('out_udp').value;
|
||||||
|
const video_format = document.getElementById('video_format').value;
|
||||||
|
const audio_format = document.getElementById('audio_format').value;
|
||||||
|
const resolution = document.getElementById('resolution').value;
|
||||||
|
const video_bitrate = document.getElementById('video_bitrate').value;
|
||||||
|
const audio_bitrate = document.getElementById('audio_bitrate').value;
|
||||||
|
const volume = document.getElementById('volume').value;
|
||||||
|
const service_status = document.getElementById('service_status').value;
|
||||||
|
|
||||||
|
// Create service object
|
||||||
|
const service = {
|
||||||
|
id: id,
|
||||||
|
service_name: service_name,
|
||||||
|
input_udp: input_udp,
|
||||||
|
output_udp: output_udp,
|
||||||
|
video_format: video_format,
|
||||||
|
audio_format: audio_format,
|
||||||
|
resolution: resolution,
|
||||||
|
video_bitrate: video_bitrate,
|
||||||
|
audio_bitrate: audio_bitrate,
|
||||||
|
volume: volume,
|
||||||
|
service: service_status
|
||||||
|
};
|
||||||
|
|
||||||
|
// In a real implementation, you would send this to the server
|
||||||
|
console.log('Saving service:', service);
|
||||||
|
closePopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close popup when clicking outside
|
||||||
|
document.getElementById('overlay').addEventListener('click', closePopup);
|
||||||
|
|
||||||
|
// Close popup with Escape key
|
||||||
|
document.addEventListener('keydown', function(event) {
|
||||||
|
if (event.key === 'Escape') {
|
||||||
|
closePopup();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
function openEditPopup(row) {
|
// Add event listeners to buttons
|
||||||
document.getElementById("popup_title").innerText = "Edit Service";
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
// Add event listeners to buttons
|
||||||
service_id.value = row.id;
|
document.querySelector('.card button:nth-child(1)').addEventListener('click', openAddPopup);
|
||||||
service_name.value = row.service_name;
|
|
||||||
in_udp.value = row.input_udp;
|
// Add event listeners to edit buttons
|
||||||
out_udp.value = row.output_udp;
|
const editButtons = document.querySelectorAll('.edit-btn');
|
||||||
video_format.value = row.video_format;
|
editButtons.forEach(function(button, index) {
|
||||||
audio_format.value = row.audio_format;
|
button.addEventListener('click', function() {
|
||||||
resolution.value = row.resolution;
|
// In a real implementation, you would get the service data from the table row
|
||||||
video_bitrate.value = row.video_bitrate;
|
const service = {
|
||||||
audio_bitrate.value = row.audio_bitrate;
|
id: index + 1,
|
||||||
volume.value = row.volume;
|
service_name: 'Service ' + (index + 1),
|
||||||
service.value = row.service;
|
input_udp: '239.0.0.' + (index + 1),
|
||||||
|
output_udp: '239.0.0.' + (index + 1),
|
||||||
document.getElementById("saveBtn").setAttribute("onclick", "updateService()");
|
video_format: 'mpeg2video',
|
||||||
showPopup();
|
audio_format: 'mp2',
|
||||||
}
|
resolution: '720x480',
|
||||||
|
video_bitrate: '2048',
|
||||||
function showPopup() {
|
audio_bitrate: '128',
|
||||||
overlay.style.display = "block";
|
volume: '0',
|
||||||
popup.style.display = "block";
|
service: 'enable'
|
||||||
}
|
};
|
||||||
|
openEditPopup(service);
|
||||||
function closePopup() {
|
});
|
||||||
overlay.style.display = "none";
|
});
|
||||||
popup.style.display = "none";
|
});
|
||||||
}
|
|
||||||
|
|
||||||
function clearFields() {
|
|
||||||
service_id.value = "";
|
|
||||||
service_name.value = "";
|
|
||||||
in_udp.value = "";
|
|
||||||
out_udp.value = "";
|
|
||||||
video_format.value = "mpeg2video";
|
|
||||||
audio_format.value = "mp2";
|
|
||||||
resolution.value = "720:576";
|
|
||||||
video_bitrate.value = "3000";
|
|
||||||
audio_bitrate.value = "96";
|
|
||||||
volume.value = "0";
|
|
||||||
service.value = "enable";
|
|
||||||
}
|
|
||||||
|
|
||||||
function saveService() {
|
|
||||||
let form = new FormData();
|
|
||||||
form.append("action", "add");
|
|
||||||
form.append("service_name", service_name.value);
|
|
||||||
form.append("input_udp", in_udp.value);
|
|
||||||
form.append("output_udp", out_udp.value);
|
|
||||||
form.append("video_format", video_format.value);
|
|
||||||
form.append("audio_format", audio_format.value);
|
|
||||||
form.append("resolution", resolution.value);
|
|
||||||
form.append("video_bitrate", video_bitrate.value);
|
|
||||||
form.append("audio_bitrate", audio_bitrate.value);
|
|
||||||
form.append("volume", volume.value);
|
|
||||||
form.append("service", service.value);
|
|
||||||
|
|
||||||
fetch("input.php", {
|
|
||||||
method: "POST",
|
|
||||||
body: form
|
|
||||||
})
|
|
||||||
.then(r => r.text())
|
|
||||||
.then(res => {
|
|
||||||
if (res.includes("OK")) location.reload();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function updateService() {
|
|
||||||
let form = new FormData();
|
|
||||||
form.append("action", "edit");
|
|
||||||
form.append("id", service_id.value);
|
|
||||||
|
|
||||||
form.append("service_name", service_name.value);
|
|
||||||
form.append("input_udp", in_udp.value);
|
|
||||||
form.append("output_udp", out_udp.value);
|
|
||||||
form.append("video_format", video_format.value);
|
|
||||||
form.append("audio_format", audio_format.value);
|
|
||||||
form.append("resolution", resolution.value);
|
|
||||||
form.append("video_bitrate", video_bitrate.value);
|
|
||||||
form.append("audio_bitrate", audio_bitrate.value);
|
|
||||||
form.append("volume", volume.value);
|
|
||||||
form.append("service", service.value);
|
|
||||||
|
|
||||||
fetch("input.php", {
|
|
||||||
method: "POST",
|
|
||||||
body: form
|
|
||||||
})
|
|
||||||
.then(r => r.text())
|
|
||||||
.then(res => {
|
|
||||||
if (res.includes("OK")) location.reload();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteService(id) {
|
|
||||||
if (!confirm("Delete service?")) return;
|
|
||||||
|
|
||||||
let form = new FormData();
|
|
||||||
form.append("action", "delete");
|
|
||||||
form.append("id", id);
|
|
||||||
|
|
||||||
fetch("input.php", {
|
|
||||||
method: "POST",
|
|
||||||
body: form
|
|
||||||
})
|
|
||||||
.then(r => r.text())
|
|
||||||
.then(res => {
|
|
||||||
if (res.includes("OK")) location.reload();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function restartService(id) {
|
|
||||||
if (!confirm("Restart?")) return;
|
|
||||||
|
|
||||||
let form = new FormData();
|
|
||||||
form.append("action", "restart");
|
|
||||||
form.append("id", id);
|
|
||||||
|
|
||||||
fetch("input.php", {
|
|
||||||
method: "POST",
|
|
||||||
body: form
|
|
||||||
})
|
|
||||||
.then(r => r.text())
|
|
||||||
.then(res => {
|
|
||||||
if (res.includes("OK")) alert("Service restarted");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function submitAction(action) {
|
|
||||||
const msg = {
|
|
||||||
start_all: "Are you sure you want to START all services?",
|
|
||||||
stop_all: "Are you sure you want to STOP all services?",
|
|
||||||
update_all: "Are you sure you want to UPDATE all services?"
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!msg[action]) return;
|
|
||||||
|
|
||||||
if (confirm(msg[action])) {
|
|
||||||
document.getElementById('action').value = action;
|
|
||||||
document.getElementById('actionForm').submit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<?php include 'footer.php'; ?>
|
<?php include 'footer.php'; ?>
|
||||||
|
|
@ -181,7 +181,7 @@ main {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
font-size: 17px;
|
font-size: 17px;
|
||||||
z-index: 1001;
|
z-index: 1003; /* Higher than popup */
|
||||||
border-bottom: 1px solid rgba(92, 158, 255, 0.2);
|
border-bottom: 1px solid rgba(92, 158, 255, 0.2);
|
||||||
background: rgba(10, 25, 41, 0.95);
|
background: rgba(10, 25, 41, 0.95);
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(10px);
|
||||||
|
|
@ -199,46 +199,20 @@ main {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
z-index: 1001;
|
z-index: 1002; /* Higher than popup but below top-header-1 */
|
||||||
border-bottom: 1px solid rgba(92, 158, 255, 0.2);
|
border-bottom: 1px solid rgba(92, 158, 255, 0.2);
|
||||||
background: rgba(10, 25, 41, 0.95);
|
background: rgba(10, 25, 41, 0.95);
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(10px);
|
||||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
.top-header-1 {
|
.top-header-2 nav {
|
||||||
top: 0;
|
|
||||||
background: linear-gradient(90deg, #0a1929, #0c1424);
|
|
||||||
font-size: 20px;
|
|
||||||
font-weight: 600;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.top-header-2 {
|
|
||||||
position: fixed;
|
|
||||||
top: 50px;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
height: var(--footer-h, 73px);
|
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
justify-content: center;
|
||||||
justify-content: space-between;
|
gap: 28px;
|
||||||
padding: 0 48px;
|
|
||||||
margin-bottom: 57px;
|
|
||||||
background: linear-gradient(90deg, #0a1929, #0c1424);
|
|
||||||
color: var(--text-primary);
|
|
||||||
font-weight: 500;
|
|
||||||
font-size: 15px;
|
|
||||||
letter-spacing: 0.4px;
|
|
||||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
|
||||||
border-bottom: 1px solid rgba(92, 158, 255, 0.2);
|
|
||||||
z-index: 999;
|
|
||||||
transition: all 0.3s ease;
|
|
||||||
backdrop-filter: blur(10px);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.top-header-2 nav a {
|
.top-header-2 nav a {
|
||||||
margin-left: 28px;
|
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
|
|
@ -271,7 +245,7 @@ main {
|
||||||
height: var(--footer-h, 73px);
|
height: var(--footer-h, 73px);
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: center;
|
||||||
padding: 0 48px;
|
padding: 0 48px;
|
||||||
margin-bottom: 57px;
|
margin-bottom: 57px;
|
||||||
background: linear-gradient(90deg, #0a1929, #0c1424);
|
background: linear-gradient(90deg, #0a1929, #0c1424);
|
||||||
|
|
@ -281,13 +255,18 @@ main {
|
||||||
letter-spacing: 0.4px;
|
letter-spacing: 0.4px;
|
||||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
|
||||||
border-bottom: 1px solid rgba(92, 158, 255, 0.2);
|
border-bottom: 1px solid rgba(92, 158, 255, 0.2);
|
||||||
z-index: 999;
|
z-index: 1001; /* Lower than popup */
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(10px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.site-header nav {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
.site-header nav a {
|
.site-header nav a {
|
||||||
margin-left: 28px;
|
|
||||||
color: var(--text-primary);
|
color: var(--text-primary);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
transition: all 0.3s ease;
|
transition: all 0.3s ease;
|
||||||
|
|
@ -943,24 +922,30 @@ input:checked+.slider:before {
|
||||||
top: 50%;
|
top: 50%;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
transform: translate(-50%, -50%);
|
transform: translate(-50%, -50%);
|
||||||
background: #fff;
|
background: var(--card-bg);
|
||||||
padding: 20px;
|
padding: 25px;
|
||||||
border: 1px solid #333;
|
border: 1px solid var(--card-border);
|
||||||
width: 350px;
|
width: 350px;
|
||||||
max-width: 90vw;
|
max-width: 90vw;
|
||||||
max-height: 90vh;
|
max-height: 90vh;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
z-index: 1000;
|
z-index: 1007; /* Increased z-index to be above header */
|
||||||
border-radius: 8px;
|
border-radius: 14px;
|
||||||
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
|
box-shadow: 0 12px 30px rgba(0, 0, 0, 0.5);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
border: 1px solid rgba(92, 158, 255, 0.3);
|
||||||
|
background: rgba(13, 27, 45, 0.95);
|
||||||
|
border: 1px solid rgba(92, 158, 255, 0.3);
|
||||||
}
|
}
|
||||||
|
|
||||||
#overlay {
|
#overlay {
|
||||||
display: none;
|
display: none;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
inset: 0;
|
inset: 0;
|
||||||
background: rgba(0, 0, 0, 0.5);
|
background: rgba(0, 0, 0, 0.7);
|
||||||
z-index: 999;
|
z-index: 1006; /* Lower than popup but higher than other elements */
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure the popup content is properly centered */
|
/* Ensure the popup content is properly centered */
|
||||||
|
|
@ -976,6 +961,8 @@ input:checked+.slider:before {
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
#popup button {
|
#popup button {
|
||||||
|
|
@ -984,6 +971,8 @@ input:checked+.slider:before {
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
width: calc(50% - 10px);
|
||||||
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
#popup button#saveBtn {
|
#popup button#saveBtn {
|
||||||
|
|
@ -994,4 +983,4 @@ input:checked+.slider:before {
|
||||||
#popup button[type="button"] {
|
#popup button[type="button"] {
|
||||||
background: #ccc;
|
background: #ccc;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue