flnxi-Wu/app/globals.css
WuYongJie d1c6efc79d
Some checks failed
CI Check / check (push) Has been cancelled
feat: NAS 部署与 Harbor 推送流程
2025-12-03 14:39:06 +08:00

207 lines
4.6 KiB
CSS

@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--foreground-rgb: 0, 0, 0;
--background-start-rgb: 250, 250, 250;
--background-end-rgb: 255, 255, 255;
}
html {
color-scheme: light;
}
@media (prefers-color-scheme: dark) {
:root {
--foreground-rgb: 255, 255, 255;
--background-start-rgb: 18, 18, 18;
--background-end-rgb: 0, 0, 0;
}
html {
color-scheme: dark;
}
}
body {
color: rgb(var(--foreground-rgb));
background: linear-gradient(
to bottom,
transparent,
rgb(var(--background-end-rgb))
)
rgb(var(--background-start-rgb));
}
/* Apple-style button */
.btn-apple {
@apply px-6 py-2.5 rounded-apple font-medium transition-all duration-200 shadow-apple hover:shadow-apple-lg;
}
.btn-primary {
@apply btn-apple bg-slate-900 dark:bg-slate-700 text-white hover:bg-slate-800 dark:hover:bg-slate-600 active:scale-95;
}
.btn-secondary {
@apply btn-apple bg-slate-200 dark:bg-slate-700 text-slate-900 dark:text-slate-200 hover:bg-slate-300 dark:hover:bg-slate-600 active:scale-95;
}
/* 滑块样式 */
.slider::-webkit-slider-thumb {
appearance: none;
width: 18px;
height: 18px;
border-radius: 50%;
background: #3b82f6;
cursor: pointer;
border: 2px solid #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.slider::-moz-range-thumb {
width: 18px;
height: 18px;
border-radius: 50%;
background: #3b82f6;
cursor: pointer;
border: 2px solid #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.slider:focus {
outline: none;
}
.slider:focus::-webkit-slider-thumb {
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);
}
.slider:focus::-moz-range-thumb {
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);
}
.btn-danger {
@apply btn-apple bg-red-600 dark:bg-red-700 text-white hover:bg-red-700 dark:hover:bg-red-600 active:scale-95;
}
/* Apple-style input */
.input-apple {
@apply w-full px-4 py-3 rounded-apple border border-slate-300 dark:border-slate-600 dark:bg-slate-800 dark:text-white focus:border-slate-900 dark:focus:border-slate-400 focus:ring-2 focus:ring-slate-200 dark:focus:ring-slate-600 outline-none transition-all;
}
/* Apple-style card */
.card-apple {
@apply bg-white dark:bg-slate-800 rounded-apple shadow-apple hover:shadow-apple-lg transition-all duration-300 border border-transparent dark:border-slate-700;
}
/* Scrollbar styling (light & dark) */
*::-webkit-scrollbar {
width: 10px;
height: 10px;
}
*::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.04);
border-radius: 999px;
}
*::-webkit-scrollbar-thumb {
background: rgba(107, 114, 128, 0.6);
border-radius: 999px;
border: 2px solid transparent;
background-clip: content-box;
}
@media (prefers-color-scheme: dark) {
*::-webkit-scrollbar-track {
background: rgba(255, 255, 255, 0.06);
}
*::-webkit-scrollbar-thumb {
background: rgba(148, 163, 184, 0.7);
border-color: rgba(15, 23, 42, 0.9);
}
}
body {
scrollbar-width: thin;
scrollbar-color: rgba(107, 114, 128, 0.6) transparent;
}
@media (prefers-color-scheme: dark) {
body {
scrollbar-color: rgba(148, 163, 184, 0.7) rgba(15, 23, 42, 0.9);
}
}
@keyframes modal-overlay-apple {
0% {
opacity: 0;
backdrop-filter: blur(0px);
}
100% {
opacity: 1;
backdrop-filter: blur(25px);
}
}
@keyframes modal-content-apple {
0% {
opacity: 0;
transform: translateY(28px) scale(0.92);
filter: blur(12px);
}
55% {
opacity: 1;
transform: translateY(-4px) scale(1.02);
filter: blur(0px);
}
100% {
opacity: 1;
transform: translateY(0) scale(1);
}
}
.modal-overlay-apple {
animation: modal-overlay-apple 0.35s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}
.modal-content-apple {
position: relative;
animation: modal-content-apple 0.45s cubic-bezier(0.16, 1, 0.3, 1) forwards;
transform-origin: top center;
box-shadow:
0 28px 80px rgba(15, 23, 42, 0.22),
0 6px 24px rgba(15, 23, 42, 0.12);
}
.dark .modal-content-apple {
box-shadow:
0 32px 110px rgba(0, 0, 0, 0.8),
0 10px 30px rgba(0, 0, 0, 0.5);
}
.modal-content-apple::after {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
border: 1px solid rgba(255, 255, 255, 0.65);
box-shadow:
inset 0 0 0 0.5px rgba(255, 255, 255, 0.35),
0 1px 0 rgba(15, 23, 42, 0.08);
pointer-events: none;
}
.dark .modal-content-apple::after {
border-color: rgba(255, 255, 255, 0.18);
box-shadow:
inset 0 0 0 0.5px rgba(255, 255, 255, 0.08),
0 1px 0 rgba(0, 0, 0, 0.4);
}
/* Material 预览弹窗现在重新使用统一 UI Modal 样式,
不再需要单独的溢出与尺寸覆盖规则。 */