mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-30 02:45:13 +08:00
🌈 Sync 2026-09-24 15:19:50
This commit is contained in:
1 parent
765ac2b267
commit
87101cc7f2
126 files changed
+4403
-2879
No files matched your search
@@ -1,2 +1,2 @@
|
||||
Drop background here!
|
||||
accept jpg png gif mp4 webm
|
||||
accept jpg jpeg png gif webp mp4 webm
|
||||
@@ -33,9 +33,9 @@
|
||||
--green: #2dce89;
|
||||
--teal: #11cdef;
|
||||
--cyan: #2bffc6;
|
||||
--white: #fff;
|
||||
--gray: #8898aa;
|
||||
--gray-dark: #32325d;
|
||||
--light: #ced4da;
|
||||
--lighter: #e9ecef;
|
||||
--success: #2dce89;
|
||||
--info: #11cdef;
|
||||
@@ -44,7 +44,6 @@
|
||||
--light: #adb5bd;
|
||||
--dark: #212529;
|
||||
--default: #172b4d;
|
||||
--white: #fff;
|
||||
--darker: black;
|
||||
--background-color: #f4f5f7;
|
||||
--login-form-bg-color: rgba(244, 245, 247, 0.8);
|
||||
@@ -55,6 +54,28 @@
|
||||
--font-family-sans-serif: "Google Sans", "Microsoft Yahei", "WenQuanYi Micro Hei", "sans-serif", "Helvetica Neue", "Helvetica", "Hiragino Sans GB";
|
||||
--dropdown-arrow-icon: url("data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBmaWxsPSJjdXJyZW50Q29sb3IiIGQ9Ik01LjI5MyA5LjI5M2ExIDEgMCAwIDEgMS40MTQgMEwxMiAxNC41ODZsNS4yOTMtNS4yOTNhMSAxIDAgMSAxIDEuNDE0IDEuNDE0bC02IDZhMSAxIDAgMCAxLTEuNDE0IDBsLTYtNmExIDEgMCAwIDEgMC0xLjQxNCIvPjwvc3ZnPg==");
|
||||
}
|
||||
.visually-hidden {
|
||||
position: absolute !important;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
padding: 0;
|
||||
margin: -1px;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
white-space: nowrap;
|
||||
border: 0;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.main-left,
|
||||
.main-right,
|
||||
.main-bg,
|
||||
.darkMask,
|
||||
.login-page .input-group input,
|
||||
.login-page .input-group .border {
|
||||
transition-duration: 0.01ms !important;
|
||||
animation-duration: 0.01ms !important;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Include base and custom css
|
||||
*/
|
||||
@@ -708,7 +729,8 @@ select[multiple="multiple"] {
|
||||
}
|
||||
.login-page .video video {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
.login-page .volume-control {
|
||||
position: fixed;
|
||||
@@ -718,8 +740,13 @@ select[multiple="multiple"] {
|
||||
height: 1.5rem;
|
||||
z-index: 5000;
|
||||
cursor: pointer;
|
||||
border: 0 !important;
|
||||
background: url(../img/volume_high.svg) no-repeat center / contain;
|
||||
}
|
||||
.login-page .volume-control:focus-visible {
|
||||
outline: 2px solid var(--primary);
|
||||
outline-offset: 4px;
|
||||
}
|
||||
.login-page .volume-control.mute {
|
||||
background-image: url(../img/volume_off.svg);
|
||||
}
|
||||
@@ -732,6 +759,12 @@ select[multiple="multiple"] {
|
||||
background: url(../img/blank.png) no-repeat center / cover;
|
||||
transition: all 0.5s ease;
|
||||
}
|
||||
.login-page .main-bg img {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
.login-page .login-container {
|
||||
z-index: 10;
|
||||
margin-left: 5%;
|
||||
@@ -837,6 +870,10 @@ select[multiple="multiple"] {
|
||||
box-shadow: 0 3px 2px rgba(233, 236, 239, 0.05);
|
||||
transition: all 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55);
|
||||
}
|
||||
.login-page .login-container .login-form .form-login .input-group input:focus-visible {
|
||||
outline: 2px solid var(--primary);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
.login-page .login-container .login-form .form-login .input-group input:focus + .border {
|
||||
transform: scaleX(1);
|
||||
}
|
||||
@@ -868,10 +905,19 @@ select[multiple="multiple"] {
|
||||
box-shadow: rgba(0, 0, 0, 0.1) 0 0 50px 0;
|
||||
transition: all 0.3s ease !important;
|
||||
}
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.login-page .login-container .login-form .cbi-button-apply {
|
||||
transition-duration: 0.01ms !important;
|
||||
}
|
||||
}
|
||||
.login-page .login-container .login-form .cbi-button-apply:hover,
|
||||
.login-page .login-container .login-form .cbi-button-apply:focus {
|
||||
opacity: 0.9;
|
||||
}
|
||||
.login-page .login-container .login-form .cbi-button-apply:focus-visible {
|
||||
outline: 2px solid var(--default);
|
||||
outline-offset: 3px;
|
||||
}
|
||||
.login-page .login-container footer {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
@@ -886,11 +932,6 @@ select[multiple="multiple"] {
|
||||
line-height: 1.6rem;
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
.login-page .login-container footer .ftc {
|
||||
position: absolute;
|
||||
bottom: 30px;
|
||||
width: 100%;
|
||||
}
|
||||
.login-page .login-container footer .luci-link {
|
||||
display: block;
|
||||
}
|
||||
@@ -1280,6 +1321,13 @@ header .fill .container .flex1 .showSide {
|
||||
display: none;
|
||||
font-size: 1.4rem;
|
||||
color: #fff;
|
||||
border: 0 !important;
|
||||
background: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
header .fill .container .flex1 .showSide:focus-visible {
|
||||
outline: 2px solid currentColor;
|
||||
outline-offset: 3px;
|
||||
}
|
||||
header .fill .container .flex1 .showSide:hover {
|
||||
text-decoration: none;
|
||||
|
||||
@@ -16,6 +16,15 @@ const SlideAnimations = {
|
||||
slow: 600
|
||||
},
|
||||
|
||||
getDuration: function(duration) {
|
||||
if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches)
|
||||
return 0;
|
||||
|
||||
return typeof duration === 'string' ?
|
||||
(this.durations[duration] || this.durations.normal) :
|
||||
(duration || this.durations.normal);
|
||||
},
|
||||
|
||||
/**
|
||||
* Map to track running animations and their cleanup functions
|
||||
*/
|
||||
@@ -37,9 +46,7 @@ const SlideAnimations = {
|
||||
this.stop(element);
|
||||
|
||||
// Convert duration string to milliseconds
|
||||
const animDuration = typeof duration === 'string' ?
|
||||
this.durations[duration] || this.durations.normal :
|
||||
(duration || this.durations.normal);
|
||||
const animDuration = this.getDuration(duration);
|
||||
|
||||
// Store original styles
|
||||
const originalStyles = {
|
||||
@@ -103,9 +110,7 @@ const SlideAnimations = {
|
||||
this.stop(element);
|
||||
|
||||
// Convert duration string to milliseconds
|
||||
const animDuration = typeof duration === 'string' ?
|
||||
this.durations[duration] || this.durations.normal :
|
||||
(duration || this.durations.normal);
|
||||
const animDuration = this.getDuration(duration);
|
||||
|
||||
// Store original styles
|
||||
const originalStyles = {
|
||||
@@ -222,7 +227,7 @@ return baseclass.extend({
|
||||
}
|
||||
|
||||
// Attach event listeners for sidebar toggle functionality
|
||||
var sidebarToggle = document.querySelector('a.showSide');
|
||||
var sidebarToggle = document.querySelector('.showSide');
|
||||
var darkMask = document.querySelector('.darkMask');
|
||||
|
||||
if (sidebarToggle) {
|
||||
@@ -231,6 +236,12 @@ return baseclass.extend({
|
||||
if (darkMask) {
|
||||
darkMask.addEventListener('click', ui.createHandlerFn(this, 'handleSidebarToggle'));
|
||||
}
|
||||
document.addEventListener('keydown', function(ev) {
|
||||
if (ev.key === 'Escape' && sidebarToggle && sidebarToggle.classList.contains('active')) {
|
||||
sidebarToggle.click();
|
||||
sidebarToggle.focus();
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -415,12 +426,8 @@ return baseclass.extend({
|
||||
container.style.display = '';
|
||||
|
||||
// Recursively render nested tab menus if there's an active node
|
||||
if (activeNode) {
|
||||
var nestedTabs = this.renderTabMenu(activeNode, url + '/' + activeNode.name, currentLevel);
|
||||
if (nestedTabs.children.length > 0) {
|
||||
container.appendChild(nestedTabs);
|
||||
}
|
||||
}
|
||||
if (activeNode)
|
||||
this.renderTabMenu(activeNode, url + '/' + activeNode.name, currentLevel);
|
||||
}
|
||||
|
||||
return tabContainer;
|
||||
@@ -432,7 +439,7 @@ return baseclass.extend({
|
||||
* @param {Event} ev - Click event from sidebar toggle button or dark mask
|
||||
*/
|
||||
handleSidebarToggle: function (ev) {
|
||||
var showSideButton = document.querySelector('a.showSide');
|
||||
var showSideButton = document.querySelector('.showSide');
|
||||
var sidebar = document.querySelector('#mainmenu');
|
||||
var darkMask = document.querySelector('.darkMask');
|
||||
var scrollbarArea = document.querySelector('.main-right');
|
||||
@@ -447,12 +454,14 @@ return baseclass.extend({
|
||||
if (showSideButton.classList.contains('active')) {
|
||||
// Close sidebar
|
||||
showSideButton.classList.remove('active');
|
||||
showSideButton.setAttribute('aria-expanded', 'false');
|
||||
sidebar.classList.remove('active');
|
||||
scrollbarArea.classList.remove('active');
|
||||
darkMask.classList.remove('active');
|
||||
} else {
|
||||
// Open sidebar
|
||||
showSideButton.classList.add('active');
|
||||
showSideButton.setAttribute('aria-expanded', 'true');
|
||||
sidebar.classList.add('active');
|
||||
scrollbarArea.classList.add('active');
|
||||
darkMask.classList.add('active');
|
||||
|
||||
Reference in new issue
Block a user