bsc

Comprehensive codebase and coursework for the 4-year B.Sc. Computer Science Honours degree (WBSU)

git clone https://github.com/notamitgamer/bsc.git
· rebuilt hourlyOpen on GitHub
commit 82bb92c3975fb6eee58f81ec9180b5412d9d7add
parent da187b8c426831c8b9f1c8ef1d8c693d939d90e6
Author: Amit Dutta <mail@amit.is-a.dev>
Date:   Sat, 26 Sep 2026 19:55:32 +0530

Refactor DocFooterExtra.vue for structure and style

Refactor footer component for improved structure and styling consistency. Update links, headings, and CSS classes for better readability and maintainability.
Diffstat:
Mdocs/.vitepress/theme/components/DocFooterExtra.vue | 231++++++++++++++++++-------------------------------------------------------------
1 file changed, 53 insertions(+), 178 deletions(-)

diff --git a/docs/.vitepress/theme/components/DocFooterExtra.vue b/docs/.vitepress/theme/components/DocFooterExtra.vue @@ -18,34 +18,28 @@ /> </div> - <!-- Top Action & Meta Row --> + <!-- Top Row --> <div class="footer-top-row"> - <div class="top-row-left"> - <a - href="https://github.com/notamitgamer/bsc" - target="_blank" - rel="noopener noreferrer" - class="gh-mark" - aria-label="View BSc Repository on GitHub" - > - <svg viewBox="0 0 16 16" width="22" height="22" fill="currentColor"> - <path - d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27 c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z" - /> - </svg> - </a> - <span class="repo-badge"> - <span class="badge-dot"></span> - <code>main</code> • bsc-v2026 - </span> - </div> + <a + href="https://github.com/notamitgamer/bsc" + target="_blank" + rel="noopener noreferrer" + class="gh-mark" + aria-label="View BSc Repository on GitHub" + > + <svg viewBox="0 0 16 16" width="20" height="20" fill="currentColor"> + <path + d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27 c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8Z" + /> + </svg> + </a> <button class="back-to-top" type="button" @click="scrollTop"> Back to top <svg viewBox="0 0 16 16" - width="14" - height="14" + width="13" + height="13" fill="none" stroke="currentColor" stroke-width="2" @@ -59,59 +53,40 @@ </button> </div> - <!-- M3 Bento Grid Columns --> + <!-- Plain Corporate Columns --> <div class="footer-columns"> - <div class="footer-card"> - <div class="card-header"> - <svg class="card-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2"> - <path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7" stroke-linecap="round" stroke-linejoin="round"/> - <path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" stroke-linecap="round" stroke-linejoin="round"/> - </svg> - <span class="col-title">Help Improve</span> - </div> + <div class="col"> + <h3 class="col-title">Help Improve</h3> <p class="col-text"> - Spotted a typo, broken snippet, or missing lab note? Contributions are welcome. + Spotted an error, outdated syllabus item, or missing code? All coursework documentation is open source. </p> <a href="https://github.com/notamitgamer/bsc/issues/new/choose" target="_blank" rel="noopener noreferrer" - class="m3-tonal-btn" + class="col-link" > - Suggest an edit + Suggest an edit &rarr; </a> </div> - <div class="footer-card"> - <div class="card-header"> - <svg class="card-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2"> - <polyline points="16 18 22 12 16 6" stroke-linecap="round" stroke-linejoin="round"/> - <polyline points="8 6 2 12 8 18" stroke-linecap="round" stroke-linejoin="round"/> - </svg> - <span class="col-title">Automation & Scripts</span> - </div> + <div class="col"> + <h3 class="col-title">Automation & Scripts</h3> <p class="col-text"> - Want to inspect or modify the underlying scrapers, parsers, and generators? + Review, run, or patch the Markdown scrapers, syllabus crawlers, and generator pipelines. </p> <a href="https://github.com/notamitgamer/bsc/tree/main/utils/bsc_md" target="_blank" rel="noopener noreferrer" - class="m3-tonal-btn" + class="col-link" > - View scripts + View scripts repository &rarr; </a> </div> - <div class="footer-card"> - <div class="card-header"> - <svg class="card-icon" viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2"> - <circle cx="12" cy="12" r="10" stroke-linecap="round" stroke-linejoin="round"/> - <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" stroke-linecap="round" stroke-linejoin="round"/> - <line x1="12" y1="17" x2="12.01" y2="17" stroke-linecap="round" stroke-linejoin="round"/> - </svg> - <span class="col-title">Community & Support</span> - </div> + <div class="col"> + <h3 class="col-title">Community & Support</h3> <ul class="help-links"> <li> <a @@ -119,7 +94,7 @@ target="_blank" rel="noopener noreferrer" > - Ask a question &rarr; + Ask a question </a> </li> <li> @@ -128,17 +103,17 @@ target="_blank" rel="noopener noreferrer" > - Report an issue &rarr; + Report an issue </a> </li> <li> - <a href="/changelog">Changelog & revision history &rarr;</a> + <a href="/changelog">Changelog</a> </li> </ul> </div> </div> - <!-- Copyright & Legal Bottom Bar --> + <!-- Corporate Legal Bottom Bar --> <div class="footer-bottom-bar"> <div class="copyright-line"> <span>&copy; 2025–2026 </span> @@ -241,7 +216,6 @@ onUnmounted(() => { box-sizing: border-box; } -/* Dynamically matches VitePress home layout width */ .doc-footer-extra.is-home { max-width: 1152px; padding-left: 64px; @@ -306,55 +280,19 @@ onUnmounted(() => { display: block; } -/* Top Meta Row */ +/* Top Action Row */ .footer-top-row { display: flex; align-items: center; justify-content: space-between; - padding: 0.9rem 0; + padding: 0.85rem 0; border-bottom: 1px solid var(--vp-c-divider); color: var(--vp-c-text-2); } -.top-row-left { - display: flex; - align-items: center; - gap: 12px; -} - .gh-mark { color: var(--vp-c-text-2); display: flex; - transition: color 0.2s ease; -} - -.gh-mark:hover { - color: var(--vp-c-text-1); -} - -.repo-badge { - display: inline-flex; - align-items: center; - gap: 6px; - font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, monospace; - font-size: 11.5px; - background: var(--vp-c-bg-soft); - border: 1px solid var(--vp-c-divider); - padding: 2px 8px; - border-radius: 6px; - color: var(--vp-c-text-2); -} - -.repo-badge code { - color: var(--vp-c-text-1); - font-weight: 600; -} - -.badge-dot { - width: 6px; - height: 6px; - border-radius: 50%; - background: var(--vp-c-brand-1, #10b981); } .back-to-top { @@ -367,18 +305,13 @@ onUnmounted(() => { font-size: 13px; cursor: pointer; font-weight: 500; - transition: color 0.2s ease; } -.back-to-top:hover { - color: var(--vp-c-brand-1); -} - -/* Bento Surface Columns */ +/* Plain Corporate Columns */ .footer-columns { display: grid; grid-template-columns: repeat(3, 1fr); - gap: 1.25rem; + gap: 2rem; padding: 1.75rem 0; border-bottom: 1px solid var(--vp-c-divider); } @@ -386,72 +319,35 @@ onUnmounted(() => { @media (max-width: 768px) { .footer-columns { grid-template-columns: 1fr; - gap: 1rem; + gap: 1.5rem; } } -.footer-card { - background: var(--vp-c-bg-soft); - border: 1px solid var(--vp-c-divider); - border-radius: 12px; - padding: 1.2rem; +.col { display: flex; flex-direction: column; - justify-content: space-between; - transition: border-color 0.2s ease, transform 0.2s ease; -} - -.footer-card:hover { - border-color: var(--vp-c-brand-1); - transform: translateY(-2px); -} - -.card-header { - display: flex; - align-items: center; - gap: 8px; - margin-bottom: 0.5rem; -} - -.card-icon { - color: var(--vp-c-brand-1); } .col-title { - font-size: 13.5px; + font-size: 13px; font-weight: 600; + letter-spacing: 0.02em; color: var(--vp-c-text-1); - margin: 0; + margin: 0 0 0.5rem; } .col-text { - font-size: 12.5px; + font-size: 13px; color: var(--vp-c-text-2); - line-height: 1.5; - margin: 0 0 1rem; + line-height: 1.55; + margin: 0 0 0.75rem; } -/* Material Design 3 Tonal Button */ -.m3-tonal-btn { - display: inline-flex; - align-items: center; - justify-content: center; - width: fit-content; - border-radius: 20px; - padding: 0.35rem 0.95rem; - font-size: 12.5px; +.col-link { + font-size: 13px; font-weight: 500; - background: var(--vp-c-default-soft); - color: var(--vp-c-text-1); - border: 1px solid transparent; - text-decoration: none; - transition: all 0.2s ease; -} - -.m3-tonal-btn:hover { - background: var(--vp-c-brand-soft); color: var(--vp-c-brand-1); - border-color: var(--vp-c-brand-1); + text-decoration: none; } .help-links { @@ -464,24 +360,19 @@ onUnmounted(() => { } .help-links a { - font-size: 12.5px; + font-size: 13px; color: var(--vp-c-text-2); text-decoration: none; - transition: color 0.2s ease; -} - -.help-links a:hover { - color: var(--vp-c-brand-1); } -/* Footer Bottom Bar */ +/* Plain Bottom Legal Bar */ .footer-bottom-bar { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.75rem; - padding: 1.2rem 0; + padding: 1.25rem 0; font-size: 12.5px; color: var(--vp-c-text-3, var(--vp-c-text-2)); } @@ -494,15 +385,9 @@ onUnmounted(() => { } .author-link { - font-weight: 600; + font-weight: 500; color: var(--vp-c-text-1); text-decoration: none; - transition: color 0.2s ease; -} - -.author-link:hover { - color: var(--vp-c-brand-1); - text-decoration: underline; } .license-sep { @@ -514,25 +399,15 @@ onUnmounted(() => { color: var(--vp-c-text-2); text-decoration: underline; text-underline-offset: 2px; - transition: color 0.2s ease; -} - -.license-link:hover { - color: var(--vp-c-brand-1); } .bottom-links { display: flex; - gap: 1.2rem; + gap: 1.25rem; } .bottom-links a { color: inherit; text-decoration: none; - transition: color 0.2s ease; -} - -.bottom-links a:hover { - color: var(--vp-c-brand-1); } </style>