Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 20 additions & 8 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -300,8 +300,10 @@
.tech-tags, .fit-tags { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.tech-tag { background: #f3f4f6; color: #4b5563; font-size: 0.7rem; font-weight: 600; padding: 0.4rem 0.8rem; border-radius: 0.5rem; border: 1px solid #e5e7eb; }
.fit-tag { background: #eff6ff; color: #2563eb; font-size: 0.7rem; font-weight: 600; padding: 0.4rem 0.8rem; border-radius: 0.5rem; border: 1px solid #dbeafe; }
.mentor-link-chip { display:inline-flex; align-items:center; gap:.45rem; background:#fff7ed; color:#9d4300; border:1px solid #fed7aa; border-radius:999px; padding:.45rem .75rem; font-size:.75rem; font-weight:700; }
.mentor-handle-chip { display:inline-flex; align-items:center; gap:.35rem; background:#f3f4f6; color:#374151; border:1px solid #e5e7eb; border-radius:999px; padding:.4rem .7rem; font-size:.75rem; font-weight:600; }
.mentor-link-chip { display:inline-flex; align-items:center; gap:.45rem; background:#fff7ed; color:#9d4300; border:1px solid #fed7aa; border-radius:999px; padding:.45rem .75rem; font-size:.75rem; font-weight:700; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); }
.mentor-link-chip:hover { transform: translateY(-1px) scale(1.03); background: #ffedd5; border-color: #fb923c; box-shadow: 0 4px 12px rgba(249, 115, 22, 0.2); }
.mentor-handle-chip { display:inline-flex; align-items:center; gap:.35rem; background:#f3f4f6; color:#374151; border:1px solid #e5e7eb; border-radius:999px; padding:.4rem .7rem; font-size:.75rem; font-weight:600; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); }
.mentor-handle-chip:hover { transform: translateY(-1px) scale(1.03); background: #e5e7eb; border-color: #9ca3af; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); }
.mentor-card { background:#ffffff; border:1px solid #e5e7eb; border-radius:1rem; padding:1.25rem; box-shadow:0 1px 2px rgba(15,23,42,.04); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); }
.mentor-card:hover , .mentor-empty:hover { box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); transform: translateY(-4px); border-color: #d1d5db; }
.mentor-empty { background:#ffffff; border:1px solid #e5e7eb; border-radius:1rem; padding:2rem; text-align:center; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); }
Expand Down Expand Up @@ -433,8 +435,6 @@
.proposal-preview blockquote { border-left: 4px solid #ddd; padding-left: 1rem; color: #666; margin-bottom: 1rem; }
.proposal-preview a { color: #f97316; text-decoration: underline; }
.proposal-preview-error { color: #ba1a1a; font-size: 0.875rem; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }

/* Custom Scrollbar for Modal */
.modal::-webkit-scrollbar { width: 6px; }
.modal::-webkit-scrollbar-track { background: transparent; }
Expand Down Expand Up @@ -560,8 +560,10 @@
/* Dark mode - Tech tags */
.dark .tech-tag { background: #27272a; color: #d4d4d8; border-color: #3f3f46; }
.dark .fit-tag { background: #1e293b; color: #93c5fd; border-color: #334155; }
.dark .mentor-link-chip { background: rgba(124,45,18,0.72); color: #fff7ed; border-color: rgba(251,146,60,0.45); }
.dark .mentor-handle-chip { background: #27272a; color: #d4d4d8; border-color: #3f3f46; }
.dark .mentor-link-chip { background: rgba(124,45,18,0.72); color: #fff7ed; border-color: rgba(251,146,60,0.45); transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); }
.dark .mentor-link-chip:hover { transform: translateY(-1px) scale(1.03); background: rgba(194,65,12,0.8); border-color: rgba(251,146,60,0.7); box-shadow: 0 4px 16px rgba(249, 115, 22, 0.3); }
.dark .mentor-handle-chip { background: #27272a; color: #d4d4d8; border-color: #3f3f46; transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1); }
.dark .mentor-handle-chip:hover { transform: translateY(-1px) scale(1.03); background: #3f3f46; border-color: #71717a; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3); }
.dark .mentor-card, .dark .mentor-empty { background:#18181b; border-color:#3f3f46; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); }
.dark .mentor-card:hover, .dark .mentor-empty:hover { box-shadow: 0 12px 20px -5px rgba(0, 0, 0, 0.5), 0 8px 10px -6px rgba(0, 0, 0, 0.5); transform: translateY(-4px); border-color: #52525b; background: #27272a; }

Expand Down Expand Up @@ -3651,7 +3653,12 @@
if (!orgName) return;
if (shouldAdd) bookmarkedSet.add(orgName);
else bookmarkedSet.delete(orgName);
localStorage.setItem('bookmarks', JSON.stringify([...bookmarkedSet]));
try {
localStorage.setItem('bookmarks', JSON.stringify([...bookmarkedSet]));
} catch (e) {
alert('Could not save bookmark due to storage limits. Please free up some space in your browser settings.');
return;
}
refreshOrgGridAfterBookmarkChange();
renderWatchlist();
updateAIInsights();
Expand Down Expand Up @@ -3685,7 +3692,12 @@
if (!bookmarkedSet.size) return;
if (!confirm(`Remove all ${bookmarkedSet.size} bookmarked organization(s)? This cannot be undone.`)) return;
bookmarkedSet.clear();
localStorage.setItem('bookmarks', JSON.stringify([]));
try {
localStorage.setItem('bookmarks', JSON.stringify([]));
} catch (e) {
alert('Could not clear bookmarks due to storage limits.');
return;
}

Check warning on line 3700 in index.html

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Handle this exception or don't catch it at all.

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ7o_z4B7OhcC_V_Mj82&open=AZ7o_z4B7OhcC_V_Mj82&pullRequest=1932
applyFilters();
renderWatchlist();
updateAIInsights();
Expand Down Expand Up @@ -4467,9 +4479,9 @@
document.getElementById('mActivity').className = 'gh-stat-item text-green-400';

btn.textContent = 'Stats Updated!';
} catch (e) {
btn.textContent = 'Error';
} finally {

Check warning on line 4484 in index.html

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Handle this exception or don't catch it at all.

See more on https://sonarcloud.io/project/issues?id=S3DFX-CYBER_GSoC-Org-Finder-&issues=AZ7o_z4B7OhcC_V_Mj83&open=AZ7o_z4B7OhcC_V_Mj83&pullRequest=1932
setTimeout(() => {
btn.textContent = 'Fetch Live Stats';
btn.disabled = false;
Expand Down
7 changes: 1 addition & 6 deletions src/components/footer.html
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ <h3 class="text-xs font-bold uppercase tracking-widest text-zinc-900 dark:text-z
<!-- Social Links and Privacy link -->
<div class="flex items-center gap-4 flex-wrap justify-center">
<a class="text-xs font-bold uppercase tracking-widest text-zinc-500 hover:text-primary dark:text-zinc-400 transition-colors mr-2"
href="privacy.html">Privacy Policy</a>
href="privacy.html" target="_blank" rel="noopener noreferrer">Privacy Policy</a>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Unrelated behavior change: Privacy Policy link opens in new tab, which is out of scope for a back-to-top duplication fix.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/components/footer.html, line 113:

<comment>Unrelated behavior change: `Privacy Policy` link opens in new tab, which is out of scope for a back-to-top duplication fix.</comment>

<file context>
@@ -110,7 +110,7 @@ <h3 class="text-xs font-bold uppercase tracking-widest text-zinc-900 dark:text-z
     <div class="flex items-center gap-4 flex-wrap justify-center">
       <a class="text-xs font-bold uppercase tracking-widest text-zinc-500 hover:text-primary dark:text-zinc-400 transition-colors mr-2"
-        href="privacy.html">Privacy Policy</a>
+        href="privacy.html" target="_blank" rel="noopener noreferrer">Privacy Policy</a>
       <a class="social-link github" href="https://github.com/S3DFX-CYBER/GSoC-Org-Finder-" target="_blank"
         rel="noopener noreferrer" aria-label="GitHub Repository">
</file context>
Suggested change
href="privacy.html" target="_blank" rel="noopener noreferrer">Privacy Policy</a>
href="privacy.html">Privacy Policy</a>

<a class="social-link github" href="https://github.com/S3DFX-CYBER/GSoC-Org-Finder-" target="_blank"
rel="noopener noreferrer" aria-label="GitHub Repository">
<svg class="w-5 h-5 fill-current" viewBox="0 0 24 24">
Expand Down Expand Up @@ -142,8 +142,3 @@ <h3 class="text-xs font-bold uppercase tracking-widest text-zinc-900 dark:text-z
</div>
</div>
</footer>

<!-- Floating Back to Top Button -->
<button id="back-to-top-btn" aria-label="Back to top" class="transition-all">
<span class="material-symbols-outlined">arrow_upward</span>
</button>
2 changes: 1 addition & 1 deletion src/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -946,7 +946,7 @@ function renderCompare() {
item.className = 'bg-white dark:bg-zinc-900 rounded-xl p-4 border border-zinc-100 dark:border-zinc-800';
item.innerHTML = safeHTML`
<div class="w-10 h-10 rounded-lg bg-orange-100 dark:bg-orange-950/40 flex items-center justify-center mx-auto mb-3 overflow-hidden">
<img src="${logoUrl}" data-org-name="${org.name}" class="w-full h-full object-contain" />
<img src="${logoUrl}" data-org-name="${org.name}" alt="${org.name} logo" class="w-full h-full object-contain" />

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Out-of-scope change: the only edit in this file adds an alt attribute to an image in renderCompare(), which is unrelated to the PR purpose of removing a duplicate back-to-top button. Unrelated edits should be moved to a separate PR.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/js/app.js, line 949:

<comment>Out-of-scope change: the only edit in this file adds an `alt` attribute to an image in `renderCompare()`, which is unrelated to the PR purpose of removing a duplicate back-to-top button. Unrelated edits should be moved to a separate PR.</comment>

<file context>
@@ -946,7 +946,7 @@ function renderCompare() {
     item.innerHTML = safeHTML`
       <div class="w-10 h-10 rounded-lg bg-orange-100 dark:bg-orange-950/40 flex items-center justify-center mx-auto mb-3 overflow-hidden">
-        <img src="${logoUrl}" data-org-name="${org.name}" class="w-full h-full object-contain" />
+        <img src="${logoUrl}" data-org-name="${org.name}" alt="${org.name} logo" class="w-full h-full object-contain" />
       </div>
       <p class="font-bold text-sm truncate">${org.name}</p>
</file context>

</div>
<p class="font-bold text-sm truncate">${org.name}</p>
<p class="text-[10px] text-zinc-500 dark:text-zinc-400 font-label uppercase mt-1">${String(org.years)}y · ${org.competition}</p>
Expand Down
15 changes: 0 additions & 15 deletions src/js/footer.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,6 @@ document.addEventListener('DOMContentLoaded', () => {
});

function initFooter() {
const backToTopBtn = document.getElementById('back-to-top-btn');
if (backToTopBtn) {
window.addEventListener('scroll', () => {
if (window.scrollY > 300) {
backToTopBtn.classList.add('show');
} else {
backToTopBtn.classList.remove('show');
}
}, { passive: true });

backToTopBtn.addEventListener('click', () => {
window.scrollTo({ top: 0, behavior: 'smooth' });
});
}

updateFooterStats();
}

Expand Down
55 changes: 4 additions & 51 deletions src/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -521,49 +521,12 @@ body{background:var(--bg);color:var(--ink);font-family:'Plus Jakarta Sans',sans-
}

.social-link.twitter:hover {
background: #1DA1F2;
border-color: #1DA1F2;
box-shadow: 0 0 12px rgba(29, 161, 242, 0.5);
background: #000000;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Out-of-scope style change: Twitter hover branding color changed from #1DA1F2 to #000000 in a PR scoped to removing a duplicate back-to-top button. Please remove this unrelated change or move it to a separate PR.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At src/styles.css, line 524:

<comment>Out-of-scope style change: Twitter hover branding color changed from #1DA1F2 to #000000 in a PR scoped to removing a duplicate back-to-top button. Please remove this unrelated change or move it to a separate PR.</comment>

<file context>
@@ -521,49 +521,12 @@ body{background:var(--bg);color:var(--ink);font-family:'Plus Jakarta Sans',sans-
-  background: #1DA1F2;
-  border-color: #1DA1F2;
-  box-shadow: 0 0 12px rgba(29, 161, 242, 0.5);
+  background: #000000;
+  border-color: #000000;
+  box-shadow: 0 0 12px rgba(0, 0, 0, 0.5);
</file context>

border-color: #000000;
box-shadow: 0 0 12px rgba(0, 0, 0, 0.5);
}

#back-to-top-btn {
position: fixed;
bottom: 24px;
right: 24px;
width: 44px;
height: 44px;
border-radius: 50%;
background: var(--orange);
color: white;
border: none;
box-shadow: 0 4px 14px rgba(244, 107, 14, 0.4);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
z-index: 90;
opacity: 0;
visibility: hidden;
transform: translateY(10px) scale(0.9);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

#back-to-top-btn.show {
opacity: 1;
visibility: visible;
transform: translateY(0) scale(1);
}

#back-to-top-btn:hover {
background: var(--orange-deep);
transform: translateY(-3px) scale(1.05);
box-shadow: 0 6px 20px rgba(244, 107, 14, 0.6);
}

#back-to-top-btn:focus-visible {
outline: 2px solid var(--orange);
outline-offset: 2px;
}
[data-theme="dark"] select option{background:#1A1108;color:var(--ink)}

/* ── SKELETON CARDS ── */
Expand Down Expand Up @@ -902,15 +865,5 @@ body{background:var(--bg);color:var(--ink);font-family:'Plus Jakarta Sans',sans-
background: #18181b;
color: #a1a1aa;
}
.privacy-page #back-to-top-btn {
background: #f97316;
box-shadow: 0 4px 14px rgba(249, 115, 22, 0.4);
}
.privacy-page #back-to-top-btn:hover {
background: #ea580c;
box-shadow: 0 6px 20px rgba(249, 115, 22, 0.6);
}
.privacy-page #back-to-top-btn:focus-visible {
outline-color: #f97316;
}


Loading