diff --git a/public/css/main-site.css b/public/css/main-site.css index 0880e21..9f7b016 100644 --- a/public/css/main-site.css +++ b/public/css/main-site.css @@ -7,7 +7,8 @@ font-style: normal; } -html, body { +html, +body { margin: 0; padding: 0; background: none; @@ -27,9 +28,17 @@ body { } @keyframes bgShift { - 0% { background-position: 0% 50%; } - 50% { background-position: 100% 50%; } - 100% { background-position: 0% 50%; } + 0% { + background-position: 0% 50%; + } + + 50% { + background-position: 100% 50%; + } + + 100% { + background-position: 0% 50%; + } } /* Custom Scrollbar Styles */ @@ -77,22 +86,27 @@ body { transform: translate(0); text-shadow: 0 0 8px rgba(20, 184, 166, 0.5); } + 20% { transform: translate(-2px, 2px); text-shadow: 0 0 8px rgba(20, 184, 166, 0.5), 2px 0 #3b82f6; } + 40% { transform: translate(2px, -2px); text-shadow: 0 0 8px rgba(20, 184, 166, 0.5), -2px 0 #14b8a6; } + 60% { transform: translate(-2px, 0); text-shadow: 0 0 8px rgba(20, 184, 166, 0.5), 2px 0 #3b82f6; } + 80% { transform: translate(2px, 0); text-shadow: 0 0 8px rgba(20, 184, 166, 0.5), -2px 0 #14b8a6; } + 100% { transform: translate(0); text-shadow: 0 0 8px rgba(20, 184, 166, 0.5); @@ -133,9 +147,12 @@ body { } @keyframes floatSection { - 0%, 100% { + + 0%, + 100% { box-shadow: 0 6px 25px rgba(0, 0, 0, 0.4), inset 0 0 15px rgba(255, 255, 255, 0.08); } + 50% { box-shadow: 0 8px 30px rgba(0, 0, 0, 0.5), inset 0 0 18px rgba(255, 255, 255, 0.1); } @@ -198,9 +215,12 @@ body { } @keyframes neonPulse { - 0%, 100% { + + 0%, + 100% { filter: brightness(1); } + 50% { filter: brightness(1.2); } @@ -210,9 +230,11 @@ body { 0% { background-position: 0% 50%; } + 50% { background-position: 100% 50%; } + 100% { background-position: 0% 50%; } @@ -304,6 +326,7 @@ body { opacity: 0; transform: scale(0.95); } + to { opacity: 1; transform: scale(1); @@ -319,8 +342,7 @@ body { overflow: hidden; } -.feature-card:hover { -} +.feature-card:hover {} .feature-card::before { content: ''; @@ -369,13 +391,25 @@ body { } @keyframes fadeInOut { - 0%, 100% { opacity: 0; } - 50% { opacity: 0.8; } + + 0%, + 100% { + opacity: 0; + } + + 50% { + opacity: 0.8; + } } @keyframes float { - 0% { transform: translateY(0); } - 100% { transform: translateY(-100vh); } + 0% { + transform: translateY(0); + } + + 100% { + transform: translateY(-100vh); + } } .particle.fade-out { @@ -383,8 +417,13 @@ body { } @keyframes fadeOut { - 0% { opacity: 0.8; } - 100% { opacity: 0; } + 0% { + opacity: 0.8; + } + + 100% { + opacity: 0; + } } .header-bg { @@ -569,28 +608,36 @@ footer a:hover { .hero-bg { min-height: 500px; } + .hero-bg iframe { min-height: 500px; } + .btn-minecraft { padding: 12px 26px; font-size: 0.9rem; } + .minecraft-font.text-5xl { font-size: 2.5rem; } + .minecraft-font.text-4xl { font-size: 2rem; } + .minecraft-font.text-3xl { font-size: 1.75rem; } + .feature-card { padding: 1.5rem; } + .nav-btn { display: none; } + .hamburger { display: flex; } @@ -600,22 +647,47 @@ footer a:hover { .hero-bg { min-height: 400px; } + .hero-bg iframe { min-height: 400px; } + .minecraft-font.text-5xl { font-size: 2rem; } + .minecraft-font.text-4xl { font-size: 1.75rem; } + .minecraft-font.text-3xl { font-size: 1.5rem; } + .mobile-nav-container ul li a, .mobile-nav-container ul li button { font-size: 1rem; padding: 0.75rem; width: 180px; } + + /* In main-site.css */ + #particles-js { + position: fixed !important; + top: 0 !important; + left: 0 !important; + width: 100vw !important; + height: 100vh !important; + z-index: 0; + overflow: hidden; + pointer-events: none; + } + + #particles-js canvas.particles-js-canvas-el { + width: 100vw !important; + height: 100vh !important; + position: absolute; + top: 0; + left: 0; + } } \ No newline at end of file diff --git a/public/css/main-site.min.css b/public/css/main-site.min.css index 7f6d18c..33b1fc6 100644 --- a/public/css/main-site.min.css +++ b/public/css/main-site.min.css @@ -67,9 +67,11 @@ --radius-md: 0.375rem; --radius-lg: 0.5rem; --radius-xl: 0.75rem; + --radius-2xl: 1rem; --ease-out: cubic-bezier(0, 0, 0.2, 1); --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); --animate-spin: spin 1s linear infinite; + --blur-sm: 8px; --blur-xl: 24px; --default-transition-duration: 150ms; --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); @@ -226,6 +228,9 @@ .pointer-events-none { pointer-events: none; } + .visible { + visibility: visible; + } .absolute { position: absolute; } @@ -403,6 +408,15 @@ .max-h-\[calc\(95vh-10rem\)\] { max-height: calc(95vh - 10rem); } + .min-h-\[32px\] { + min-height: 32px; + } + .min-h-\[36px\] { + min-height: 36px; + } + .min-h-\[40px\] { + min-height: 40px; + } .min-h-full { min-height: 100%; } @@ -442,6 +456,21 @@ .max-w-7xl { max-width: var(--container-7xl); } + .max-w-\[80\%\] { + max-width: 80%; + } + .max-w-\[85\%\] { + max-width: 85%; + } + .max-w-\[90\%\] { + max-width: 90%; + } + .max-w-\[95\%\] { + max-width: 95%; + } + .max-w-\[98\%\] { + max-width: 98%; + } .max-w-\[150px\] { max-width: 150px; } @@ -486,6 +515,9 @@ .cursor-not-allowed { cursor: not-allowed; } + .cursor-pointer { + cursor: pointer; + } .resize { resize: both; } @@ -595,6 +627,9 @@ .rounded { border-radius: 0.25rem; } + .rounded-2xl { + border-radius: var(--radius-2xl); + } .rounded-full { border-radius: calc(infinity * 1px); } @@ -659,6 +694,18 @@ .bg-black { background-color: var(--color-black); } + .bg-black\/30 { + background-color: color-mix(in srgb, #000 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 30%, transparent); + } + } + .bg-black\/50 { + background-color: color-mix(in srgb, #000 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-black) 50%, transparent); + } + } .bg-black\/75 { background-color: color-mix(in srgb, #000 75%, transparent); @supports (color: color-mix(in lab, red, red)) { @@ -692,6 +739,30 @@ background-color: color-mix(in oklab, var(--color-gray-800) 40%, transparent); } } + .bg-gray-800\/50 { + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 50%, transparent); + } + } + .bg-gray-800\/60 { + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 60%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 60%, transparent); + } + } + .bg-gray-800\/70 { + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 70%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 70%, transparent); + } + } + .bg-gray-800\/80 { + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 80%, transparent); + } + } .bg-gray-900 { background-color: var(--color-gray-900); } @@ -745,6 +816,9 @@ .p-1 { padding: calc(var(--spacing) * 1); } + .p-1\.5 { + padding: calc(var(--spacing) * 1.5); + } .p-2 { padding: calc(var(--spacing) * 2); } @@ -968,6 +1042,10 @@ --tw-ease: var(--ease-out); transition-timing-function: var(--ease-out); } + .outline-none { + --tw-outline-style: none; + outline-style: none; + } .hover\:bg-blue-700 { &:hover { @media (hover: hover) { @@ -1055,6 +1133,13 @@ } } } + .hover\:text-gray-300 { + &:hover { + @media (hover: hover) { + color: var(--color-gray-300); + } + } + } .hover\:text-red-700 { &:hover { @media (hover: hover) { @@ -1667,6 +1752,23 @@ footer a:hover { padding: 0.75rem; width: 180px; } + #particles-js { + position: fixed !important; + top: 0 !important; + left: 0 !important; + width: 100vw !important; + height: 100vh !important; + z-index: 0; + overflow: hidden; + pointer-events: none; + } + #particles-js canvas.particles-js-canvas-el { + width: 100vw !important; + height: 100vh !important; + position: absolute; + top: 0; + left: 0; + } } @property --tw-translate-x { syntax: "*"; diff --git a/public/css/style.css b/public/css/style.css index 86ae4cc..19087b3 100644 --- a/public/css/style.css +++ b/public/css/style.css @@ -40,30 +40,24 @@ } .xterm { - /* Ensure terminal container respects parent dimensions */ width: 100%; height: 100%; padding: 8px; - /* Add padding for better text spacing */ box-sizing: border-box; - /* Prevent padding from causing overflow */ } - /* Viewport styling for scrollbars */ .xterm .xterm-viewport { overflow-y: auto; scrollbar-width: thin; scrollbar-color: #4b5563 #1f2937; } - /* Webkit scrollbar styling */ .xterm .xterm-viewport::-webkit-scrollbar { width: 8px; } .xterm .xterm-viewport::-webkit-scrollbar-track { background: #1f2937; - /* Match terminal background for consistency */ } .xterm .xterm-viewport::-webkit-scrollbar-thumb { @@ -73,28 +67,20 @@ .xterm .xterm-viewport::-webkit-scrollbar-thumb:hover { background: #6b7280; - /* Slightly lighter on hover for feedback */ } - /* Ensure screen fits container */ .xterm .xterm-screen { width: 100% !important; height: 100% !important; - /* Ensure full height usage */ } - /* Improve text rendering */ .xterm .xterm-char { line-height: 1.2; - /* Adjust line height for better text alignment */ } - /* Prevent text overflow */ .xterm .xterm-rows { overflow: hidden; - /* Prevent horizontal overflow */ white-space: pre-wrap; - /* Allow text wrapping if needed */ } #app { @@ -138,19 +124,44 @@ } .modal { - @apply fixed inset-0 bg-black/75 flex items-center justify-center z-[1000]; + @apply fixed inset-0 bg-black/30 flex items-center justify-center z-[1000] backdrop-blur-sm; } .modal-content { - @apply bg-gray-800 p-6 rounded-lg w-full max-w-xl relative max-h-[80vh] overflow-y-auto; + @apply bg-gray-800/60 p-6 rounded-2xl w-full max-w-xl relative max-h-[80vh] overflow-y-auto; + backdrop-filter: blur(12px); + border: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: 0 4px 24px rgba(0, 0, 0, 0.25); scrollbar-width: thin; scrollbar-color: #4B5563 #1F2937; } - @media (max-width: 640px) { - .holesail-output-mobile-hidden { - display: none; - } + .modal-content input, + .modal-content textarea, + .modal-content select { + @apply bg-gray-800/50 text-white p-2 rounded-lg w-full; + backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); + transition: border-color 0.2s ease, box-shadow 0.2s ease; + } + + .modal-content input:focus, + .modal-content textarea:focus, + .modal-content select:focus { + @apply outline-none border-blue-400; + box-shadow: 0 0 8px rgba(59, 130, 246, 0.5); + } + + .modal-content input::placeholder, + .modal-content textarea::placeholder { + @apply text-gray-300 opacity-70; + } + + .modal-content .item-entry input { + @apply bg-gray-800/50 text-white p-2 rounded-lg w-full sm:w-auto; + backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.15); } .modal-content::-webkit-scrollbar { @@ -158,7 +169,7 @@ } .modal-content::-webkit-scrollbar-track { - @apply bg-gray-800; + @apply bg-gray-800/40; } .modal-content::-webkit-scrollbar-thumb { @@ -170,7 +181,13 @@ } .modal-close { - @apply absolute top-2 right-2 bg-transparent border-none text-white text-xl cursor-pointer; + @apply absolute top-2 right-2 bg-transparent border-none text-white text-xl cursor-pointer hover:text-gray-300 transition-colors; + } + + @media (max-width: 640px) { + .holesail-output-mobile-hidden { + display: none; + } } .control-btn { @@ -192,21 +209,67 @@ } #notificationContainer { - @apply fixed bottom-4 right-4 z-[1000] flex flex-col-reverse gap-2; + @apply fixed bottom-4 right-4 z-[1000] flex flex-col-reverse gap-3; } .notification { - @apply bg-gray-800 p-3 rounded-lg text-white flex items-center gap-2 shadow-lg; - max-width: 90%; + @apply bg-gray-800/70 text-white p-3 rounded-lg flex items-center gap-2 shadow-lg; + backdrop-filter: blur(12px); + border: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25); + max-width: min(90%, 400px); + min-height: 48px; + max-height: 200px; + overflow-y: auto; + white-space: normal; + word-break: break-word; font-size: 0.875rem; + animation: slideIn 0.3s ease-out; + transition: transform 0.2s ease, opacity 0.2s ease, box-shadow 0.2s ease; + } + + .notification:hover { + @apply transform scale-105; + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3); } .notification.success { - @apply bg-green-600; + @apply bg-green-600/20; + border: 1px solid rgba(34, 197, 94, 0.2); + backdrop-filter: blur(12px); } .notification.error { - @apply bg-red-600; + @apply bg-red-600/20; + border: 1px solid rgba(239, 68, 68, 0.2); + backdrop-filter: blur(12px); + } + + .notification::-webkit-scrollbar { + width: 6px; + } + + .notification::-webkit-scrollbar-track { + @apply bg-gray-800/40; + } + + .notification::-webkit-scrollbar-thumb { + @apply bg-gray-600 rounded; + } + + .notification::-webkit-scrollbar-thumb:hover { + @apply bg-gray-500; + } + + @keyframes slideIn { + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0); + opacity: 1; + } } #dockerLogsTerminal { @@ -426,7 +489,13 @@ } .modal-content { - @apply p-4 max-w-[95%]; + @apply p-4 max-w-[95%] rounded-xl; + } + + .modal-content input, + .modal-content textarea, + .modal-content select { + @apply p-2 text-sm; } .section-bg .grid { @@ -460,7 +529,7 @@ } .notification { - @apply text-sm p-2 max-w-[80%]; + @apply p-2 text-sm max-w-[80%] min-h-[40px] max-h-[180px]; } h1 { @@ -508,7 +577,13 @@ } .modal-content { - @apply p-3 max-w-[95%]; + @apply p-3 max-w-[95%] rounded-xl; + } + + .modal-content input, + .modal-content textarea, + .modal-content select { + @apply p-1 text-xs; } canvas { @@ -534,7 +609,7 @@ } .notification { - @apply text-xs p-1 max-w-[90%]; + @apply p-2 text-xs max-w-[85%] min-h-[36px] max-h-[160px]; } h1 { @@ -560,13 +635,42 @@ } } +.bg-gray-700 { + background-color: #151d31; +} + +#particles-js { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 0; + pointer-events: none; +} + +#particles-js canvas { + display: block; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} + @media (max-width: 480px) { .section-bg { @apply p-2; } .modal-content { - @apply p-2 max-w-[98%]; + @apply p-2 max-w-[98%] rounded-xl; + } + + .modal-content input, + .modal-content textarea, + .modal-content select { + @apply p-1 text-xs; } canvas { @@ -592,7 +696,7 @@ } .notification { - @apply text-xs p-1 max-w-[95%]; + @apply p-1.5 text-xs max-w-[90%] min-h-[32px] max-h-[140px]; } h1 { @@ -616,4 +720,23 @@ .control-btn { @apply px-2 py-1 text-xs; } + + #particles-js { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 0; + pointer-events: none; + } + + #particles-js canvas { + display: block; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + } } \ No newline at end of file diff --git a/public/css/style.min.css b/public/css/style.min.css index 961934d..3147e99 100644 --- a/public/css/style.min.css +++ b/public/css/style.min.css @@ -67,9 +67,11 @@ --radius-md: 0.375rem; --radius-lg: 0.5rem; --radius-xl: 0.75rem; + --radius-2xl: 1rem; --ease-out: cubic-bezier(0, 0, 0.2, 1); --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); --animate-spin: spin 1s linear infinite; + --blur-sm: 8px; --blur-xl: 24px; --default-transition-duration: 150ms; --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); @@ -1070,10 +1072,13 @@ display: flex; align-items: center; justify-content: center; - background-color: color-mix(in srgb, #000 75%, transparent); + background-color: color-mix(in srgb, #000 30%, transparent); @supports (color: color-mix(in lab, red, red)) { - background-color: color-mix(in oklab, var(--color-black) 75%, transparent); + background-color: color-mix(in oklab, var(--color-black) 30%, transparent); } + --tw-backdrop-blur: blur(var(--blur-sm)); + -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); + backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,); } .modal-content { position: relative; @@ -1081,22 +1086,65 @@ width: 100%; max-width: var(--container-xl); overflow-y: auto; - border-radius: var(--radius-lg); - background-color: var(--color-gray-800); + border-radius: var(--radius-2xl); + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 60%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 60%, transparent); + } padding: calc(var(--spacing) * 6); + backdrop-filter: blur(12px); + border: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: 0 4px 24px rgba(0, 0, 0, 0.25); scrollbar-width: thin; scrollbar-color: #4B5563 #1F2937; } - @media (max-width: 640px) { - .holesail-output-mobile-hidden { - display: none; + .modal-content input, .modal-content textarea, .modal-content select { + width: 100%; + border-radius: var(--radius-lg); + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 50%, transparent); } + padding: calc(var(--spacing) * 2); + color: var(--color-white); + backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); + transition: border-color 0.2s ease, box-shadow 0.2s ease; + } + .modal-content input:focus, .modal-content textarea:focus, .modal-content select:focus { + border-color: var(--color-blue-400); + --tw-outline-style: none; + outline-style: none; + box-shadow: 0 0 8px rgba(59, 130, 246, 0.5); + } + .modal-content input::placeholder, .modal-content textarea::placeholder { + color: var(--color-gray-300); + opacity: 70%; + } + .modal-content .item-entry input { + width: 100%; + border-radius: var(--radius-lg); + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 50%, transparent); + } + padding: calc(var(--spacing) * 2); + color: var(--color-white); + @media (width >= 40rem) { + width: auto; + } + backdrop-filter: blur(8px); + border: 1px solid rgba(255, 255, 255, 0.15); } .modal-content::-webkit-scrollbar { width: calc(var(--spacing) * 2); } .modal-content::-webkit-scrollbar-track { - background-color: var(--color-gray-800); + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 40%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 40%, transparent); + } } .modal-content::-webkit-scrollbar-thumb { border-radius: 0.25rem; @@ -1116,6 +1164,19 @@ font-size: var(--text-xl); line-height: var(--tw-leading, var(--text-xl--line-height)); color: var(--color-white); + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + &:hover { + @media (hover: hover) { + color: var(--color-gray-300); + } + } + } + @media (max-width: 640px) { + .holesail-output-mobile-hidden { + display: none; + } } .control-btn { border-radius: 0.25rem; @@ -1156,26 +1217,83 @@ z-index: 1000; display: flex; flex-direction: column-reverse; - gap: calc(var(--spacing) * 2); + gap: calc(var(--spacing) * 3); } .notification { display: flex; align-items: center; gap: calc(var(--spacing) * 2); border-radius: var(--radius-lg); - background-color: var(--color-gray-800); + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 70%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 70%, transparent); + } padding: calc(var(--spacing) * 3); color: var(--color-white); --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); - max-width: 90%; + backdrop-filter: blur(12px); + border: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25); + max-width: min(90%, 400px); + min-height: 48px; + max-height: 200px; + overflow-y: auto; + white-space: normal; + word-break: break-word; font-size: 0.875rem; + animation: slideIn 0.3s ease-out; + transition: transform 0.2s ease, opacity 0.2s ease, box-shadow 0.2s ease; + } + .notification:hover { + --tw-scale-x: 105%; + --tw-scale-y: 105%; + --tw-scale-z: 105%; + scale: var(--tw-scale-x) var(--tw-scale-y); + transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); + box-shadow: 0 6px 20px rgba(0, 0, 0, 0.3); } .notification.success { - background-color: var(--color-green-600); + background-color: color-mix(in srgb, oklch(62.7% 0.194 149.214) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-green-600) 20%, transparent); + } + border: 1px solid rgba(34, 197, 94, 0.2); + backdrop-filter: blur(12px); } .notification.error { - background-color: var(--color-red-600); + background-color: color-mix(in srgb, oklch(57.7% 0.245 27.325) 20%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-red-600) 20%, transparent); + } + border: 1px solid rgba(239, 68, 68, 0.2); + backdrop-filter: blur(12px); + } + .notification::-webkit-scrollbar { + width: 6px; + } + .notification::-webkit-scrollbar-track { + background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 40%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-800) 40%, transparent); + } + } + .notification::-webkit-scrollbar-thumb { + border-radius: 0.25rem; + background-color: var(--color-gray-600); + } + .notification::-webkit-scrollbar-thumb:hover { + background-color: var(--color-gray-500); + } + @keyframes slideIn { + from { + transform: translateX(100%); + opacity: 0; + } + to { + transform: translateX(0); + opacity: 1; + } } #dockerLogsTerminal { box-sizing: border-box; @@ -1536,8 +1654,14 @@ } .modal-content { max-width: 95%; + border-radius: var(--radius-xl); padding: calc(var(--spacing) * 4); } + .modal-content input, .modal-content textarea, .modal-content select { + padding: calc(var(--spacing) * 2); + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } .section-bg .grid { grid-template-columns: repeat(1, minmax(0, 1fr)); } @@ -1567,6 +1691,8 @@ line-height: var(--tw-leading, var(--text-sm--line-height)); } .notification { + max-height: 180px; + min-height: 40px; max-width: 80%; padding: calc(var(--spacing) * 2); font-size: var(--text-sm); @@ -1614,8 +1740,14 @@ } .modal-content { max-width: 95%; + border-radius: var(--radius-xl); padding: calc(var(--spacing) * 3); } + .modal-content input, .modal-content textarea, .modal-content select { + padding: calc(var(--spacing) * 1); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } canvas { max-width: 100px; } @@ -1638,8 +1770,10 @@ line-height: var(--tw-leading, var(--text-xs--line-height)); } .notification { - max-width: 90%; - padding: calc(var(--spacing) * 1); + max-height: 160px; + min-height: 36px; + max-width: 85%; + padding: calc(var(--spacing) * 2); font-size: var(--text-xs); line-height: var(--tw-leading, var(--text-xs--line-height)); } @@ -1666,14 +1800,40 @@ line-height: var(--tw-leading, var(--text-xs--line-height)); } } +.bg-gray-700 { + background-color: #151d31; +} +#particles-js { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 0; + pointer-events: none; +} +#particles-js canvas { + display: block; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; +} @media (max-width: 480px) { .section-bg { padding: calc(var(--spacing) * 2); } .modal-content { max-width: 98%; + border-radius: var(--radius-xl); padding: calc(var(--spacing) * 2); } + .modal-content input, .modal-content textarea, .modal-content select { + padding: calc(var(--spacing) * 1); + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } canvas { max-width: 80px; } @@ -1696,8 +1856,10 @@ line-height: var(--tw-leading, var(--text-xs--line-height)); } .notification { - max-width: 95%; - padding: calc(var(--spacing) * 1); + max-height: 140px; + min-height: 32px; + max-width: 90%; + padding: calc(var(--spacing) * 1.5); font-size: var(--text-xs); line-height: var(--tw-leading, var(--text-xs--line-height)); } @@ -1723,6 +1885,23 @@ font-size: var(--text-xs); line-height: var(--tw-leading, var(--text-xs--line-height)); } + #particles-js { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 0; + pointer-events: none; + } + #particles-js canvas { + display: block; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + } } @property --tw-rotate-x { syntax: "*"; @@ -1975,6 +2154,21 @@ syntax: "*"; inherits: false; } +@property --tw-scale-x { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-y { + syntax: "*"; + inherits: false; + initial-value: 1; +} +@property --tw-scale-z { + syntax: "*"; + inherits: false; + initial-value: 1; +} @property --tw-translate-x { syntax: "*"; inherits: false; @@ -2056,9 +2250,12 @@ --tw-backdrop-sepia: initial; --tw-duration: initial; --tw-ease: initial; + --tw-scale-x: 1; + --tw-scale-y: 1; + --tw-scale-z: 1; --tw-translate-x: 0; --tw-translate-y: 0; --tw-translate-z: 0; } } -} \ No newline at end of file +} diff --git a/public/index.html b/public/index.html index 24831a9..8359686 100644 --- a/public/index.html +++ b/public/index.html @@ -54,12 +54,6 @@ - -
-
-
-
-
@@ -553,6 +547,7 @@

+ diff --git a/public/js/app.js b/public/js/app.js index f63df6f..b211d6f 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -2442,58 +2442,135 @@ document.addEventListener('DOMContentLoaded', () => { observer.observe(section); }); -// const PARTICLE_POOL_SIZE = 50; -// const particlePool = []; -// const activeParticles = new Set(); +particlesJS("particles-js", { + "particles": { + "number": { + "value": 30, + "density": { + "enable": true, + "value_area": 800 + } + }, + "color": { + "value": ["#14b8a6", "#3b82f6"] // Mimics gradient by alternating colors + }, + "shape": { + "type": "circle", // Matches border-radius: 50% + "stroke": { + "width": 0, + "color": "#000000" + } + }, + "opacity": { + "value": 0.9, // Matches box-shadow opacity + "random": true, + "anim": { + "enable": true, // Mimics fadeInOut animation + "speed": 1, // Slower for smooth fade + "opacity_min": 0, // Fades to fully transparent + "sync": false + } + }, + "size": { + "value": 8, // Default size (matches 8px) + "random": true, // Allows some particles to be larger (up to 12px) + "anim": { + "enable": true, + "speed": 4, + "size_min": 4, // Smaller sizes for variation + "sync": false + } + }, + "line_linked": { + "enable": false // No lines needed per CSS + }, + "move": { + "enable": true, + "speed": 2, // Mimics float animation + "direction": "none", + "random": true, + "straight": false, + "out_mode": "out", + "bounce": false, + "attract": { + "enable": false + } + } + }, + "interactivity": { + "detect_on": "canvas", + "events": { + "onhover": { + "enable": true, + "mode": "repulse" + }, + "onclick": { + "enable": true, + "mode": "push" + }, + "resize": true + }, + "modes": { + "repulse": { + "distance": 100, + "duration": 0.4 + }, + "push": { + "particles_nb": 4 + } + } + }, + "retina_detect": true +}); -// function createParticleElement() { -// const particle = document.createElement('div'); -// particle.classList.add('particle'); -// if (Math.random() > 0.6) particle.classList.add('large'); -// return particle; -// } +// Custom logic for glow effect +document.addEventListener('DOMContentLoaded', () => { + const pJS = window.pJSDom[0].pJS; + const targetElements = document.querySelectorAll('.feature-card, .nav-btn, .btn-minecraft'); -// function initializeParticlePool() { -// for (let i = 0; i < PARTICLE_POOL_SIZE; i++) { -// particlePool.push(createParticleElement()); -// } -// } + // Function to check if a particle is behind or near an element + function checkParticleProximity() { + targetElements.forEach(element => { + const rect = element.getBoundingClientRect(); + let hasGlow = false; -// function resetParticle(particle) { -// particle.style.left = `${Math.random() * 100}%`; -// particle.style.top = `${Math.random() * 100}%`; -// particle.style.animationDelay = `${Math.random() * 8}s`; -// particle.style.animationDuration = `${8 + Math.random() * 6}s`; -// particle.classList.remove('fade-out'); -// return particle; -// } + pJS.particles.array.forEach(particle => { + const particleX = particle.x + pJS.canvas.el.offsetLeft; + const particleY = particle.y + pJS.canvas.el.offsetTop; + const buffer = 20; // Buffer zone around element for glow trigger -// function spawnParticle() { -// if (particlePool.length === 0 || activeParticles.size >= PARTICLE_POOL_SIZE) return; + // Check if particle is within or near the element's bounding box + if ( + particleX >= rect.left - buffer && + particleX <= rect.right + buffer && + particleY >= rect.top - buffer && + particleY <= rect.bottom + buffer + ) { + hasGlow = true; + } + }); -// const particle = resetParticle(particlePool.pop()); -// if (!particle.parentNode) document.body.appendChild(particle); -// activeParticles.add(particle); + // Apply or remove glow effect + if (hasGlow) { + element.classList.add('glow-effect'); + element.classList.remove('no-glow'); + } else { + element.classList.remove('glow-effect'); + element.classList.add('no-glow'); + } + }); + } -// setTimeout(() => { -// particle.classList.add('fade-out'); -// setTimeout(() => { -// activeParticles.delete(particle); -// particlePool.push(particle); -// }, 500); -// }, 14000); -// } + // Run proximity check in a separate animation loop + function animateGlowEffect() { + checkParticleProximity(); + requestAnimationFrame(animateGlowEffect); + } -// function animate() { -// if (Math.random() < 0.1) spawnParticle(); // Reduced spawn frequency -// requestAnimationFrame(animate); -// } + // Start the animation loop + animateGlowEffect(); +}); -// // Initialize and start -// setTimeout(() => { -// initializeParticlePool(); -// animate(); -// }, 500); }); \ No newline at end of file diff --git a/public/test.html b/public/test.html new file mode 100644 index 0000000..5fa6cff --- /dev/null +++ b/public/test.html @@ -0,0 +1,558 @@ + + + + + + + + My-MC Panel + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

+ My-MC Panel

+

Manage Your Minecraft Server

+
+ + +
+
+ +
+ + + +
+ + + + + + + + + + + + + + +
+
+
+

Server Status

+
+
+

User: Loading...

+

Status: Loading...

+
+
+
+ +

Memory

+

0%

+
+
+ +

CPU

+

0%

+
+
+
+
+ + + +
+
+ + +
+
+
+
+
+ +
+

Server Logs

+
+
+ +
+

Player Management

+

Connected Players:
Loading...

+
+ +
+

Server Console

+
+ + +
+

+            
+ + + +
+

Mod Management

+
+
+ + + +
+
+
+ +

Installed Mods

+
+ + +
+
+
+
+ +
+

Server Links

+
+ +
+

Connection Link

+

+ Link Not Created + +

+ +
+ +
+

Geyser Link

+

+ Link Not Created + +

+ +
+ +
+

SFTP Link

+

+ Link Not Created + +

+ +
+
+
+ +
+

Website

+

+ Loading... +

+
+ +
+

BlueMap

+

+ Loading... +

+
+ +
+

Advanced Log

+

+ Loading... +

+
+
+
+
+
+

Holesail Keys

+ +
+
+
+
+

Minecraft Key:

+

Not Loaded

+

Port: 127.0.0.1:25565

+
+ +
+
+
+

Geyser Key:

+

Not Loaded

+

Port: 127.0.0.1:19132

+
+ +
+
+
+

SFTP Key:

+

Not Loaded

+

Port: 127.0.0.1:22

+
+ +
+
+
+ + +
+ +
+ + + + + + + + + + + \ No newline at end of file