diff --git a/vue/src/assets/styles.css b/vue/src/assets/styles.css index dcbe04f..37c4a70 100644 --- a/vue/src/assets/styles.css +++ b/vue/src/assets/styles.css @@ -106,81 +106,105 @@ body { } input { - @apply text-secondary border-primary border; + color: var(--secondary); + border-color: var(--primary); + border-width: 1px; } small { - @apply text-tertiary; + color: var(--tertiary); } code { - @apply text-tertiary; + color: var(--tertiary); } ul { - @apply text-tertiary; + color: var(--tertiary); } li { - @apply text-tertiary; + color: var(--tertiary); } h1, h2, h3, h4 { - @apply m-1 font-heading text-primary; + margin: 0.25rem; + font-family: var(--font_heading); + color: var(--primary); } h3, h4 { - @apply text-lg; + font-size: 1.125rem; + line-height: 1.75rem; } h1 { - @apply text-2xl; + font-size: 1.5rem; + line-height: 2rem; } h2 { - @apply text-xl; + font-size: 1.25rem; + line-height: 1.75rem; } p { - @apply text-secondary; + color: var(--secondary); } a { - @apply text-primary bg-link text-center font-heading tracking-wide; + color: var(--primary); + background-color: var(--link); + text-align: center; + font-family: var(--font_heading); + letter-spacing: 0.025em; } input, textarea { - @apply text-primary border p-2 w-full; + color: var(--primary); + border-width: 1px; + padding: 0.5rem; + width: 100%; } input::placeholder, textarea::placeholder { - @apply text-secondary opacity-50; + color: var(--secondary); + opacity: 0.5; } table { - @apply border-primary border text-primary; + border-color: var(--primary); + border-width: 1px; + color: var(--primary); } td { - @apply gap-1; + gap: 0.25rem; } tr { - @apply border-primary border-b text-primary; + border-color: var(--primary); + border-bottom-width: 1px; + color: var(--primary); } th { - @apply pr-3 pl-3 border-r border-dotted border-tertiary; + padding-right: 0.75rem; + padding-left: 0.75rem; + border-right-width: 1px; + border-style: dotted; + border-color: var(--tertiary); } td { - @apply pr-3 pl-3; + padding-right: 0.75rem; + padding-left: 0.75rem; } /* END OF ELEMENTS */ @@ -194,47 +218,51 @@ td { /* BORDERS */ .bdr-1 { - @apply border-30; + border-width: 30px; border-image: url("/img/borders/border1.gif") 30 round; } .bdr-1-inv { - @apply border-30; + border-width: 30px; border-image: url("/img/borders/border1inv.gif") 30 round; } .bdr-2 { - @apply border-5; + border-width: 5px; border-image: url("/img/borders/border4.gif") 7 round; } .bdr-cv { - @apply border-30; + border-width: 30px; border-image: url("/img/borders/bordercv.png") 30 round; } /* A5 Page */ .a5page-landscape { - @apply m-0 box-content; + margin: 0; + box-sizing: content-box; height: 148mm; width: 210mm; } .a5page-portrait { - @apply m-0 box-content; + margin: 0; + box-sizing: content-box; width: 148mm; height: 210mm; } /* A4 Page */ .a4page-portrait { - @apply m-0 box-content; + margin: 0; + box-sizing: content-box; width: 210mm; height: 297mm; } .a4page-landscape { - @apply m-0 box-content; + margin: 0; + box-sizing: content-box; height: 210mm; width: 297mm; } @@ -279,23 +307,31 @@ td { } .tl { - @apply absolute top-0 left-0; + position: absolute; + top: 0; + left: 0; } .tr { - @apply absolute top-0 right-0; + position: absolute; + top: 0; + right: 0; } .bl { - @apply absolute bottom-0 left-0; + position: absolute; + bottom: 0; + left: 0; } .br { - @apply absolute bottom-0 right-0; + position: absolute; + bottom: 0; + right: 0; } .background { - @apply fixed; + position: fixed; } .halftone { diff --git a/vue/src/components/text/Header.vue b/vue/src/components/text/Header.vue index 47727e7..22e9fe0 100644 --- a/vue/src/components/text/Header.vue +++ b/vue/src/components/text/Header.vue @@ -1,6 +1,6 @@ -

+

Self-hosted personal website with a fully automated CI/CD pipeline. Iterated across diverse tech stacks including Svelte, React/Redux, SQLite, Rust Actix, and @@ -99,7 +102,7 @@ import Project from "./Project.vue"; Rust 2026 -

+

CLI tool for building and navigating interactive code tutorials, with version-traversal semantics inspired by Git. @@ -119,7 +122,7 @@ import Project from "./Project.vue"; Rust, Linear Algebra, Multithreading 2023 -

+

Parallelised recursive ray tracer for realistic 3D rendering. Emphasised algorithmic efficiency and low-level memory management in Rust. @@ -140,7 +143,7 @@ import Project from "./Project.vue"; Wolfram Mathematica 2024 -

+

Research project on Mobile Automata with data visualisation and academic presentation. Delivered within a tight deadline in collaboration with academic @@ -149,54 +152,49 @@ import Project from "./Project.vue"; -

-

Education

-
-
-

- - University of Leeds - -

- - BSc Computer Science with Mathematics -
    -
  • Algorithms & Data Structures I & II
  • -
  • Compiler Design and Construction
  • -
  • Formal Languages & Finite Automata
  • -
  • Graph Algorithms & Complexity Theory
  • -
  • - Machine Learning · Databases · Computer - Processors -
  • -
+ University of Leeds +
+ +
+ First Class Honours (81.1%) + Sep 2021 – Jun 2025
-
-

University of Waterloo

-
- Year abroad - 2023–2024 -
-
    -
  • Applied Cryptography
  • -
  • Introduction to Computer Graphics
  • -
  • - Introduction to Rings and Fields with - Applications -
  • -
+ BSc Computer Science with Mathematics +
    +
  • Algorithms & Data Structures I & II
  • +
  • Compiler Design and Construction
  • +
  • Formal Languages & Finite Automata
  • +
  • Graph Algorithms & Complexity Theory
  • +
  • + Machine Learning, Databases, Computer Processors +
  • +
+
+
+

University of Waterloo

+
+ Year abroad + Sep 2023 – Apr 2024
- -
+ + +
@@ -206,31 +204,43 @@ import Project from "./Project.vue";

Experience

-

- Worked at Belgrave Music Hall, - The Crown and Anchor, and - BFI Riverfront Kitchen. Developed +

+ Worked at Belgrave Music Hall, + The Crown and Anchor, and + BFI Riverfront Kitchen. Developed communication, composure under pressure, and reliability in customer-facing roles.

-
-

Interests

- -
+
+
+

Soft Skills

+ +
+
+

Interests

+ +
+
@@ -265,12 +275,11 @@ import Project from "./Project.vue"; --font-heading: big_noodle_titling; --font-text: CreatoDisplay; - --font-size-name: 2.5em; - --font-size-text: 100%; + --font-size-text: 1em; --font-size-small: 0.9em; - --font-size-heading: 2.1em; - --font-size-subheading: 1.7em; - --font-size-subsubheading: 1.4em; + --font-size-heading: 1.5em; + --font-size-subheading: 1.5em; + --font-size-subsubheading: 1.3em; } /* A4 Page */ @@ -279,7 +288,7 @@ import Project from "./Project.vue"; font-family: var(--font-text); width: 210mm; height: 297mm; - padding: 5mm; + padding: 10mm; box-sizing: border-box; background-color: var(--background); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2); @@ -290,6 +299,13 @@ import Project from "./Project.vue"; flex-direction: column; } +.name { + font-size: 2em; + font-weight: bold; + justify-content: center; + align-content: center; +} + /* Component Styling */ main { padding: 0px; @@ -299,6 +315,10 @@ main { background-color: white; } +strong { + font-weight: 900; +} + span { height: 2em; } @@ -307,11 +327,11 @@ h1, h2, h3, h4 { - margin: 0px; + margin: 0px 0px 0.2em 0px; border: none; color: var(--primary); font-family: var(--font-heading); - text-transform: capitalize; + text-transform: uppercase; } h1 { @@ -323,16 +343,20 @@ h2 { font-size: var(--font-size-subheading); } -h3 { +h3, +h4 { font-size: var(--font-size-subsubheading); } a:hover { color: var(--tertiary); } + a { background-color: transparent; color: var(--secondary); + font-family: inherit; + font-size: var(--font-size-text); } p { @@ -394,6 +418,16 @@ li { margin-bottom: 0.2em; } +p[contenteditable] { + outline: none; + cursor: text; +} + +p[contenteditable]:focus { + outline: none; + background-color: rgba(0, 0, 255, 0.05); +} + @media (max-width: 640px) { .a4page { width: 100%;