diff --git a/public/assets/css/theme-neogothic.css b/public/assets/css/theme-neogothic.css index a8c7910..d81458f 100644 --- a/public/assets/css/theme-neogothic.css +++ b/public/assets/css/theme-neogothic.css @@ -1,4 +1,4 @@ -@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;700&family=JetBrains+Mono:wght@300;400;700&family=Playfair+Display:wght@400;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Cinzel:wght@400;500;600;700&family=JetBrains+Mono:ital,wght@0,300;0,400;0,500;1,400&display=swap'); gitea-theme-meta-info { --theme-display-name: "neogothic"; @@ -6,213 +6,246 @@ gitea-theme-meta-info { :root { --is-dark-theme: true; - --color-primary: #00f0ff; - --color-primary-dark-1: #33f3ff; - --color-primary-dark-2: #66f6ff; - --color-primary-dark-3: #99f9ff; - --color-primary-dark-4: #ccfcff; - --color-primary-light-1: #00c0cc; - --color-primary-light-2: #009099; - --color-primary-light-3: #006066; - --color-primary-light-4: #003844; - --color-primary-alpha-10: rgba(0, 240, 255, 0.1); - --color-primary-alpha-20: rgba(0, 240, 255, 0.2); - --color-primary-alpha-30: rgba(0, 240, 255, 0.3); - --color-primary-alpha-40: rgba(0, 240, 255, 0.4); - --color-primary-alpha-50: rgba(0, 240, 255, 0.5); - --color-primary-alpha-60: rgba(0, 240, 255, 0.6); + --color-primary: #8A9299; + --color-primary-dark-1: #A3ABB2; + --color-primary-dark-2: #BCC3C9; + --color-primary-dark-3: #D5DADF; + --color-primary-dark-4: #EEF0F2; + --color-primary-light-1: #6B757D; + --color-primary-light-2: #4E5962; + --color-primary-light-3: #3A434A; + --color-primary-light-4: #272E33; + --color-primary-alpha-10: rgba(138, 146, 153, 0.10); + --color-primary-alpha-20: rgba(138, 146, 153, 0.20); + --color-primary-alpha-30: rgba(138, 146, 153, 0.30); + --color-primary-alpha-40: rgba(138, 146, 153, 0.40); + --color-primary-alpha-50: rgba(138, 146, 153, 0.50); + --color-primary-alpha-60: rgba(138, 146, 153, 0.60); - --color-body: #050505; - --color-box-body: rgba(10, 10, 10, 0.8); - --color-box-header: rgba(5, 5, 5, 0.9); - --color-footer: #050505; - --color-navbar: rgba(5, 5, 5, 0.95); - --color-menu: #0a0a0a; - --color-card: rgba(10, 10, 10, 0.6); + --color-accent: #A89064; + --color-accent-alpha-20: rgba(168, 144, 100, 0.20); + --color-accent-alpha-40: rgba(168, 144, 100, 0.40); - --color-text: #e0e0e0; - --color-text-light: #c0c0c0; - --color-text-light-2: #a0a0a0; - --color-text-light-3: #808080; - --color-link: #00f0ff; - --color-link-hover: #66f6ff; + --color-body: #0A0B0D; + --color-box-body: rgba(14, 16, 19, 0.88); + --color-box-header: rgba(10, 12, 14, 0.94); + --color-footer: #08090B; + --color-navbar: rgba(8, 9, 11, 0.97); + --color-menu: #0D0E11; + --color-card: rgba(14, 16, 19, 0.75); - --color-border: #333333; - --color-border-secondary: #222222; - --color-secondary: #222222; - --color-secondary-alpha-6: rgba(34, 34, 34, 0.6); + --color-text: #E2E4E6; + --color-text-light: #9BA0A5; + --color-text-light-2: #6D7378; + --color-text-light-3: #484D52; + --color-link: #A3ABB2; + --color-link-hover: #D5DADF; - --color-input-background: #000000; - --color-input-text: #e0e0e0; - --color-input-border: #333333; - --color-input-border-hover: #00f0ff; + --color-border: #1E2227; + --color-border-secondary: #151719; + --color-secondary: #151719; + --color-secondary-alpha-6: rgba(21, 23, 25, 0.6); + + --color-input-background: #0C0D10; + --color-input-text: #E2E4E6; + --color-input-border: #1E2227; + --color-input-border-hover: #8A9299; --color-code-bg: #1e1f22; --color-code-sidebar-bg: #2b2d30; --color-editor-line-number: #4b5059; - --fonts-proportional: 'JetBrains Mono', 'Fira Code', monospace; - --fonts-monospace: 'JetBrains Mono', 'Fira Code', monospace; - --fonts-regular: 'JetBrains Mono', 'Fira Code', monospace; - --font-family-header: 'Cinzel', 'Playfair Display', serif; + --fonts-proportional: 'JetBrains Mono', monospace; + --fonts-monospace: 'JetBrains Mono', monospace; + --fonts-regular: 'JetBrains Mono', monospace; + --font-family-header: 'Cinzel', serif; + + --transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1); + --transition-base: 0.25s cubic-bezier(0.4, 0, 0.2, 1); + --transition-slow: 0.4s cubic-bezier(0.4, 0, 0.2, 1); } body { background-color: var(--color-body); + background-image: + radial-gradient(ellipse 80% 50% at 50% -20%, rgba(138, 146, 153, 0.03) 0%, transparent 50%), + linear-gradient(180deg, var(--color-body) 0%, #080909 100%); + background-attachment: fixed; color: var(--color-text); font-family: var(--fonts-regular); + font-weight: 400; + font-size: 13px; + letter-spacing: 0.01em; -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } h1, h2, h3, h4, h5, h6, .ui.header { font-family: var(--font-family-header) !important; - font-weight: 400; - letter-spacing: 0.05em; + font-weight: 500; + letter-spacing: 0.12em; text-transform: uppercase; color: var(--color-text); } +h1, .ui.header.large { font-size: 1.8em; } +h2 { font-size: 1.4em; } +h3 { font-size: 1.15em; } + +a { + color: var(--color-link); + text-decoration: none; + transition: color var(--transition-fast); +} + +a:hover { + color: var(--color-link-hover); +} + * { border-radius: 0px !important; } .ui.menu, .ui.secondary.menu, .following.bar { background: var(--color-navbar) !important; - border-bottom: 1px solid var(--color-primary-alpha-30); - backdrop-filter: blur(10px); + border-bottom: 1px solid var(--color-border); + backdrop-filter: blur(16px) saturate(180%); + -webkit-backdrop-filter: blur(16px) saturate(180%); } .ui.secondary.menu .item { color: var(--color-text-light); font-family: var(--fonts-monospace); text-transform: uppercase; - font-size: 0.9em; + font-size: 0.8em; + font-weight: 400; + letter-spacing: 0.1em; border: none !important; - margin: 0 5px; + margin: 0 4px; + padding: 14px 8px; + transition: color var(--transition-base); + position: relative; +} + +.ui.secondary.menu .item::after { + content: ''; + position: absolute; + bottom: 0; + left: 50%; + width: 0; + height: 1px; + background: var(--color-primary); + transition: all var(--transition-base); + transform: translateX(-50%); +} + +.ui.secondary.menu .item:hover { + color: var(--color-text); +} + +.ui.secondary.menu .item:hover::after { + width: 100%; } .ui.secondary.menu .active.item { - color: var(--color-primary); + color: var(--color-text) !important; background: transparent !important; - box-shadow: inset 0 -2px 0 0 var(--color-primary) !important; border: none !important; } +.ui.secondary.menu .active.item::after { + width: 100%; + background: var(--color-accent); + height: 2px; +} + .ui.container.fluid.padded { - border-bottom: 1px solid var(--color-border); - background: linear-gradient(180deg, rgba(5,5,5,0) 0%, rgba(0,240,255,0.05) 100%); + border-bottom: 1px solid var(--color-border); + background: transparent; } .ui.button, .ui.basic.button { - background: rgba(0, 0, 0, 0.5); + background: var(--color-primary-light-4); border: 1px solid var(--color-primary-alpha-50); - color: var(--color-primary); + color: var(--color-text); font-family: var(--fonts-monospace); text-transform: uppercase; - letter-spacing: 1px; - transition: all 0.2s ease; + letter-spacing: 0.08em; + font-size: 0.85em; + transition: all var(--transition-base); box-shadow: none !important; } .ui.button:hover { - background: var(--color-primary-alpha-20); - color: #fff; border-color: var(--color-primary); - box-shadow: 0 0 10px var(--color-primary-alpha-40) !important; + color: var(--color-text); + background: var(--color-primary-alpha-30); } .ui.primary.button, .ui.green.button, .ui.blue.button { - background: var(--color-primary) !important; - color: #000 !important; + background: linear-gradient(180deg, var(--color-primary) 0%, var(--color-primary-light-1) 100%) !important; + color: var(--color-body) !important; border: 1px solid var(--color-primary); - font-weight: 700; + font-weight: 500; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08) !important; } .ui.primary.button:hover { - background: #33f3ff !important; - box-shadow: 0 0 15px var(--color-primary) !important; + background: linear-gradient(180deg, var(--color-primary-dark-1) 0%, var(--color-primary) 100%) !important; + border-color: var(--color-primary-dark-1); } .ui.buttons { - display: inline-flex !important; - overflow: visible !important; - background: transparent !important; - border: none !important; - box-shadow: none !important; - margin: 0 !important; + gap: 0 !important; } .ui.buttons > .button, .ui.buttons > .ui.button { margin: 0 !important; - margin-left: -1px !important; - z-index: 1; - position: relative; - border: 1px solid var(--color-primary-alpha-50) !important; - box-shadow: none !important; - flex-shrink: 0; + font-size: 0.85rem !important; + background: transparent !important; + border: 1px solid var(--color-border) !important; + color: var(--color-text-light) !important; } -.ui.buttons > .button:first-child, -.ui.buttons > .ui.button:first-child { - margin-left: 0 !important; +.ui.buttons > .button:not(:first-child), +.ui.buttons > .ui.button:not(:first-child) { + margin-left: -1px !important; } .ui.buttons > .button:hover, -.ui.buttons > .button:active, -.ui.buttons > .button.active, -.ui.buttons > .ui.button:hover, -.ui.buttons > .ui.button:active, -.ui.buttons > .ui.button.active { - z-index: 10; - border: 1px solid var(--color-primary) !important; - box-shadow: none !important; +.ui.buttons > .ui.button:hover { + z-index: 2; + border-color: var(--color-primary) !important; + color: var(--color-text) !important; } -.ui.vertical.buttons { - display: inline-flex !important; - flex-direction: column !important; - overflow: visible !important; - background: transparent !important; - border: none !important; - box-shadow: none !important; +.ui.buttons .button.active, +.ui.button.active { + background: var(--color-primary-alpha-20) !important; + color: var(--color-text) !important; + border-color: var(--color-primary) !important; + z-index: 3; } -.ui.vertical.buttons > .button, -.ui.vertical.buttons > .ui.button { - margin: 0 !important; - margin-top: -1px !important; - margin-left: 0 !important; - z-index: 1; - position: relative; - border: 1px solid var(--color-primary-alpha-50) !important; -} - -.ui.vertical.buttons > .button:first-child, -.ui.vertical.buttons > .ui.button:first-child { - margin-top: 0 !important; -} - -.ui.vertical.buttons > .button:hover, -.ui.vertical.buttons > .button:active, -.ui.vertical.buttons > .button.active, -.ui.vertical.buttons > .ui.button:hover, -.ui.vertical.buttons > .ui.button:active, -.ui.vertical.buttons > .ui.button.active { - z-index: 10; - border: 1px solid var(--color-primary) !important; -} - -.ui.input input, .ui.form input[type="text"], .ui.form input[type="email"], .ui.form input[type="password"] { - background: transparent !important; +.ui.input input, +.ui.form input[type="text"], +.ui.form input[type="email"], +.ui.form input[type="password"], +.ui.form textarea { + background: var(--color-input-background) !important; border: 1px solid var(--color-border) !important; color: var(--color-text) !important; - padding: 10px 10px 10px 10px !important; + padding: 12px 14px !important; + font-family: var(--fonts-regular); + font-size: 0.95em; + transition: all var(--transition-base); } .ui.icon.input > i.icon { - color: var(--color-primary); - opacity: 0.8; + color: var(--color-text-light-2); + opacity: 1; + transition: color var(--transition-base); } .ui.icon.input input { @@ -221,23 +254,42 @@ h1, h2, h3, h4, h5, h6, .ui.header { .ui.left.icon.input input { padding-left: 2.67142857em !important; - padding-right: 10px !important; + padding-right: 14px !important; } -.ui.input input:focus, .ui.form input:focus { +.ui.input input:focus, +.ui.form input:focus, +.ui.form textarea:focus { border-color: var(--color-primary) !important; + box-shadow: 0 0 0 1px var(--color-primary-alpha-30) !important; + outline: none; +} + +.ui.input:focus-within > i.icon { + color: var(--color-primary); +} + +.ui.input input::placeholder, +.ui.form input::placeholder, +.ui.form textarea::placeholder { + color: var(--color-text-light-3); + font-style: italic; + font-weight: 300; } .ui.card, .ui.segment, .ui.attached.segment { background: var(--color-box-body) !important; border: 1px solid var(--color-border); - backdrop-filter: blur(10px); - box-shadow: none !important; + backdrop-filter: blur(8px); + -webkit-backdrop-filter: blur(8px); + box-shadow: + 0 4px 24px rgba(0, 0, 0, 0.25), + inset 0 1px 0 rgba(255, 255, 255, 0.02) !important; } .ui.header.segment, .ui.top.attached.header { - background: var(--color-box-header) !important; - border-bottom: 1px solid var(--color-border); + background: var(--color-box-header) !important; + border-bottom: 1px solid var(--color-border); } .ui.segment.code-view, .view-code, pre, code, .chroma { @@ -247,40 +299,40 @@ h1, h2, h3, h4, h5, h6, .ui.header { } .lines-num { - background-color: var(--color-code-sidebar-bg) !important; - color: var(--color-editor-line-number) !important; + background-color: var(--color-code-sidebar-bg) !important; + color: var(--color-editor-line-number) !important; } .file-view.code-view table, .file-view.code-view tbody, .file-view.code-view tr { - background: transparent !important; - background-color: transparent !important; - border-collapse: collapse !important; - border-spacing: 0 !important; - border: 0 !important; - border-bottom: 0 !important; - border-bottom-color: transparent !important; + background: transparent !important; + background-color: transparent !important; + border-collapse: collapse !important; + border-spacing: 0 !important; + border: 0 !important; + border-bottom: 0 !important; + border-bottom-color: transparent !important; } .file-view.code-view .lines-num, td.lines-num { - background: var(--color-code-sidebar-bg) !important; - background-color: var(--color-code-sidebar-bg) !important; + background: var(--color-code-sidebar-bg) !important; + background-color: var(--color-code-sidebar-bg) !important; } .file-view.code-view .lines-code, .file-view.code-view .lines-code.chroma, td.lines-code, td.lines-code.chroma { - background: var(--color-code-bg) !important; - background-color: var(--color-code-bg) !important; + background: var(--color-code-bg) !important; + background-color: var(--color-code-bg) !important; } .lines-code.chroma span, .chroma span { - background: transparent !important; - background-color: transparent !important; + background: transparent !important; + background-color: transparent !important; } .chroma .k, .chroma .kd, .chroma .kn, .chroma .kp, .chroma .kr, .chroma .kt { color: #cf8e6d !important; } @@ -302,22 +354,56 @@ td.lines-code.chroma { .chroma .nn { color: #bcbec4 !important; } .ui.table { - background: transparent; - border: 1px solid var(--color-border); + background: transparent; + border: 1px solid var(--color-border); } .ui.table thead th { - background: rgba(255,255,255,0.05); - color: var(--color-text); - border-bottom: 1px solid var(--color-primary-alpha-30); + background: rgba(138, 146, 153, 0.04); + color: var(--color-text-light); + border-bottom: 1px solid var(--color-border); + font-family: var(--fonts-regular); + text-transform: uppercase; + letter-spacing: 0.08em; + font-size: 0.75em; + font-weight: 500; + padding: 14px 12px; } .ui.table tbody tr { - border-bottom: 1px solid var(--color-border-secondary); + border-bottom: 1px solid var(--color-border-secondary); + transition: background var(--transition-fast); +} + +.ui.table tbody tr:hover { + background: rgba(138, 146, 153, 0.03); +} + +.ui.table td { + padding: 12px; +} + +.file-view.code-view td.lines-num { + padding: 0 8px !important; + text-align: right !important; +} + +.file-view.code-view td.lines-code { + padding: 0 1px 0 5px !important; } .ui.label { - background: transparent; - border: 1px solid var(--color-border); - color: var(--color-text-light); + background: transparent; + border: 1px solid var(--color-border); + color: var(--color-text-light); + font-family: var(--fonts-monospace); + font-size: 0.75em; + letter-spacing: 0.05em; + padding: 5px 10px; +} + +.ui.label.primary, .ui.label.blue { + background: var(--color-primary-alpha-20); + border-color: var(--color-primary-alpha-40); + color: var(--color-primary-dark-2); } .ui.popup, @@ -328,7 +414,9 @@ td.lines-code.chroma { background: var(--color-menu) !important; color: var(--color-text) !important; border: 1px solid var(--color-border) !important; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.5) !important; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4) !important; + font-family: var(--fonts-regular); + font-size: 0.85em; } .tippy-content { @@ -345,47 +433,30 @@ td.lines-code.chroma { border: 1px solid var(--color-border) !important; } -.ui.dropdown .menu, -.ui.selection.dropdown .menu, -.ui.active.dropdown .menu, -.ui.visible.dropdown > .menu { +.ui.dropdown .menu { background: var(--color-menu) !important; border: 1px solid var(--color-border) !important; - z-index: 1000 !important; - position: absolute !important; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); } -.ui.dropdown .menu > .item, -.ui.selection.dropdown .menu > .item { +.ui.dropdown .menu > .item { background: transparent !important; color: var(--color-text) !important; border-top: 1px solid var(--color-border-secondary) !important; + padding: 10px 14px !important; } .ui.dropdown .menu > .item:first-child { border-top: none !important; } -.ui.dropdown .menu > .item:hover, -.ui.dropdown .menu > .item.selected, -.ui.dropdown .menu > .item.active { - background: var(--color-primary-alpha-20) !important; - color: var(--color-primary) !important; -} - -.ui.dropdown { - position: relative; - z-index: 10; -} - -.ui.dropdown.active, -.ui.dropdown.visible { - z-index: 1001 !important; +.ui.dropdown .menu > .item:hover { + background: var(--color-primary-alpha-10) !important; } footer { - background: var(--color-footer) !important; - border-top: 1px solid var(--color-border); + background: var(--color-footer) !important; + border-top: 1px solid var(--color-border); } .theme-selector-footer { @@ -405,15 +476,15 @@ footer { border: 1px solid var(--color-border) !important; color: var(--color-text) !important; min-width: 100px !important; - padding: 3px 6px !important; - font-size: 0.8em !important; + padding: 4px 8px !important; + font-size: 0.75em !important; height: auto !important; min-height: unset !important; } .theme-selector-footer .ui.button { - padding: 3px 8px !important; - font-size: 0.75em !important; + padding: 4px 10px !important; + font-size: 0.7em !important; margin: 0 !important; } @@ -422,17 +493,220 @@ footer { height: 8px; } ::-webkit-scrollbar-track { - background: #2b2d30; + background: transparent; } ::-webkit-scrollbar-thumb { - background: #4b5059; - border: 1px solid #2b2d30; + background: var(--color-border); + border: 2px solid transparent; + background-clip: content-box; } ::-webkit-scrollbar-thumb:hover { - background: #548af7; + background: var(--color-primary-light-2); + background-clip: content-box; +} + +::-webkit-scrollbar-corner { + background: transparent; } ::selection { - background: #2e436e; - color: #bcbec4; + background: rgba(138, 146, 153, 0.35); + color: var(--color-text); +} + +::-moz-selection { + background: rgba(138, 146, 153, 0.35); + color: var(--color-text); +} + +.ui.loader::before { + border-color: var(--color-border) !important; +} + +.ui.loader::after { + border-color: var(--color-primary) transparent transparent !important; +} + +.ui.message { + background: var(--color-box-body) !important; + border: 1px solid var(--color-border); + color: var(--color-text); + box-shadow: none !important; +} + +.ui.negative.message, +.ui.error.message { + background: rgba(139, 58, 58, 0.15) !important; + border-color: rgba(139, 58, 58, 0.4); + color: #E07070; +} + +.ui.positive.message, +.ui.success.message { + background: rgba(88, 139, 58, 0.15) !important; + border-color: rgba(88, 139, 58, 0.4); + color: #7CB05C; +} + +.ui.warning.message { + background: rgba(168, 144, 100, 0.15) !important; + border-color: rgba(168, 144, 100, 0.4); + color: var(--color-accent); +} + +.repository .repo-header { + background: transparent !important; +} + +.repository .ui.secondary.menu, +.repository .ui.tabular.menu, +.repository .ui.menu { + background: transparent !important; + border-bottom: 1px solid var(--color-border); + backdrop-filter: none !important; +} + +.issue.is-open .issue-state-label { + background: rgba(88, 139, 58, 0.2) !important; + color: #7CB05C !important; +} + +.issue.is-closed .issue-state-label { + background: rgba(139, 58, 58, 0.2) !important; + color: #E07070 !important; +} + +.heatmap rect { + rx: 0 !important; + ry: 0 !important; +} + +.heatmap .ContributionCalendar-day[data-level="0"] { fill: var(--color-border-secondary) !important; } +.heatmap .ContributionCalendar-day[data-level="1"] { fill: rgba(138, 146, 153, 0.25) !important; } +.heatmap .ContributionCalendar-day[data-level="2"] { fill: rgba(138, 146, 153, 0.45) !important; } +.heatmap .ContributionCalendar-day[data-level="3"] { fill: rgba(138, 146, 153, 0.65) !important; } +.heatmap .ContributionCalendar-day[data-level="4"] { fill: var(--color-primary) !important; } + +.ui.modal { + background: var(--color-box-body) !important; + border: 1px solid var(--color-border); + box-shadow: 0 16px 64px rgba(0, 0, 0, 0.5) !important; +} + +.ui.modal > .header { + background: var(--color-box-header) !important; + border-bottom: 1px solid var(--color-border); + color: var(--color-text) !important; + font-family: var(--font-family-header); + letter-spacing: 0.1em; + text-transform: uppercase; +} + +.ui.modal > .content { + background: transparent !important; + color: var(--color-text); +} + +.ui.modal > .actions { + background: var(--color-box-header) !important; + border-top: 1px solid var(--color-border); +} + +.ui.dimmer { + background: rgba(0, 0, 0, 0.75) !important; + backdrop-filter: blur(4px); + -webkit-backdrop-filter: blur(4px); +} + +.ui.avatar, +.avatar, +img.avatar { + border: 1px solid var(--color-border) !important; +} + +.file-tree-item:hover { + background: var(--color-primary-alpha-10) !important; +} + +.file-tree-item.selected { + background: var(--color-primary-alpha-20) !important; +} + +.diff-file-header { + background: var(--color-box-header) !important; + border-bottom: 1px solid var(--color-border); +} + +.add-code, .diff-line-add { + background: rgba(88, 139, 58, 0.12) !important; +} + +.del-code, .diff-line-del { + background: rgba(139, 58, 58, 0.12) !important; +} + +.ui.tabular.menu { + border-bottom: 1px solid var(--color-border); +} + +.ui.tabular.menu .item { + border: none !important; + background: transparent !important; + color: var(--color-text-light); + padding: 12px 16px; + margin-bottom: -1px; +} + +.ui.tabular.menu .item:hover { + color: var(--color-text); +} + +.ui.tabular.menu .active.item { + background: transparent !important; + color: var(--color-text) !important; + border-bottom: 2px solid var(--color-accent) !important; +} + +#portfolio-controls, +#portfolio-controls *, +.portfolio-card, +.portfolio-card * { + border-radius: 0px !important; +} + +.portfolio-card { + overflow: visible; + z-index: 1; + --glow-color: var(--color-primary); + transition: border-color 0.5s cubic-bezier(0.4, 0, 0.2, 1); + transform: none !important; +} + +.portfolio-card::before { + content: ''; + position: absolute; + inset: 0; + background: var(--glow-color, var(--color-primary)); + opacity: 0; + filter: blur(12px); + z-index: -1; + transition: opacity 0.6s cubic-bezier(0.4, 0, 0.2, 1); + pointer-events: none; +} + +.portfolio-card:hover { + transform: none !important; + box-shadow: none !important; + border-color: var(--color-secondary) !important; +} + +.portfolio-card:hover::before { + opacity: 0.25; +} + +.portfolio-card .card-content, +.portfolio-card .card-footer { + background: var(--color-box-body); + position: relative; + z-index: 1; } diff --git a/templates/custom/portfolio.tmpl b/templates/custom/portfolio.tmpl index d525124..16927a4 100644 --- a/templates/custom/portfolio.tmpl +++ b/templates/custom/portfolio.tmpl @@ -72,7 +72,6 @@ margin-bottom: 2rem; background: var(--color-box-header); padding: 1rem; - border-radius: 4px; border: 1px solid var(--color-secondary); } @@ -126,14 +125,14 @@ .portfolio-card { background-color: var(--color-box-body); border: 1px solid var(--color-secondary); - border-radius: 6px; display: flex; flex-direction: column; height: 380px; position: relative; - transition: transform 0.2s, border-color 0.2s, box-shadow 0.2s; + transition: transform 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease; overflow: hidden; text-decoration: none !important; + cursor: pointer; } .portfolio-card:hover { @@ -434,16 +433,18 @@ document.addEventListener('DOMContentLoaded', async () => { filteredItems.forEach(item => { const card = document.createElement('div'); card.className = 'portfolio-card'; - + const langColor = getLangColor(item.language); - - card.style.setProperty('--hover-color', langColor); - card.addEventListener('mouseenter', () => { - card.style.borderColor = langColor; - }); - card.addEventListener('mouseleave', () => { - card.style.borderColor = 'var(--color-secondary)'; - }); + + const hexToRgb = (hex) => { + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + return result ? + `${parseInt(result[1], 16)}, ${parseInt(result[2], 16)}, ${parseInt(result[3], 16)}` : + '138, 146, 153'; + }; + + card.style.setProperty('--glow-color', langColor); + card.style.setProperty('--glow-rgb', hexToRgb(langColor)); let linksHtml = ''; linksHtml += `git`;