+
+
+ Your Name*
+
+
+
+
+
+ Email Address*
+
+
+
+
+
+ Subject*
+
+
+
+
+ Message*
+
+
+
+
+
+ I acknowledge that my message is not guaranteed to be private and may be subject to Indiana mandatory reporting laws.*
+
+
+
+
+
+
+
+
+
diff --git a/_includes/components/initiative/card.html b/_includes/components/initiative/card.html
new file mode 100644
index 000000000..0985b16bf
--- /dev/null
+++ b/_includes/components/initiative/card.html
@@ -0,0 +1,54 @@
+{% assign mobile-breakpoint-above = "xl-above" %}
+{% assign mobile-breakpoint-below = "lg-below" %}
+
+{% assign initiative = include.data %}
+
+{% if initiative and initiative != nil %}
+
+
+
+
+
+
+
+
+
+
+
{{ initiative.title | escape }}
+ {% if initiative.inactive == true %}
+
+ inactive
+ {% elsif initiative.inactive != "" and initiative.inactive != nil %}
+ {{initiative.inactive}}
+ {% endif %}
+
+
{{ initiative.description }}
+
+
+ {% assign hasMembers = initiative.members != nil %}
+ {% assign hasButton = initiative.buttonText != "" and initiative.buttonText != nil and initiative.buttonLink != "" and initiative.buttonLink != nil %}
+ {% if hasMembers or hasButton %}
+
+
+ {% if hasMembers %}
+
Members
+
+ {% assign initiative_members = initiative.members | sort:"value" %}
+ {% include components/member/list.html members=initiative_members name=true rowLimit=11 shadow=false size="icon-square-3" spacing="mt-1" overlay=false %}
+
+ {% endif %}
+ {% if hasMembers and hasButton %}
+
+ {% endif %}
+ {% if hasButton %}
+
+ {% endif %}
+
+
+ {% endif %}
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/components/initiative/initiatives.html b/_includes/components/initiative/initiatives.html
new file mode 100644
index 000000000..d56d553c7
--- /dev/null
+++ b/_includes/components/initiative/initiatives.html
@@ -0,0 +1,13 @@
+
+
+
Our Initiatives
+
We take pride in the freedom our members have to pursue impactful initiatives both immediately and in the long term.
+ Some initiatives have been around for a decade or more, while others come and go as our goals evolve.
+
Check out what we've been working on!
+
+
+ {%- for initiative in site.data.initiatives -%}
+ {% include components/initiative/card.html data=initiative %}
+ {%- endfor -%}
+
+
\ No newline at end of file
diff --git a/_includes/components/member/avatar.html b/_includes/components/member/avatar.html
new file mode 100644
index 000000000..6f69d30a3
--- /dev/null
+++ b/_includes/components/member/avatar.html
@@ -0,0 +1,81 @@
+{% assign member_obj = include.member %}
+{% assign all_people = site.data.people.members | concat: site.data.people.alumni | concat: site.data.people.other %}
+{% if include.name %}
+ {% assign name = member_obj | strip %}
+ {% assign member_obj = all_people | where:"name", name | first %}
+{% endif %}
+
+{% if member_obj.name %}
+ {% assign size = include.size | default: "icon-10" %}
+
+
+
+ {% if include.overlay %}
+
+ {% endif %}
+
+
+{% else %}
+{% assign size = include.size | default: "icon-10" %}
+
+
+
+
+ {% assign image_png_path = "/assets/images/members/png/None.png" %}
+ {% assign image_webp_path = "/assets/images/members/webp/None.webp" %}
+
+
+
+
+
+ {% if include.show_name %}
+ {{ include.member }}
+ {% endif %}
+
+
+ {% if include.overlay %}
+
+ {% endif %}
+
+
+
+{% endif %}
\ No newline at end of file
diff --git a/_includes/components/member/list.html b/_includes/components/member/list.html
new file mode 100644
index 000000000..7d41051c0
--- /dev/null
+++ b/_includes/components/member/list.html
@@ -0,0 +1,10 @@
+{%- for member in include.members -%}
+ {% include components/member/avatar.html member=member name=include.name size=include.size spacing=include.spacing overlay=include.overlay shadow=include.shadow %}
+
+ {% if include.rowLimit != nil %}
+ {% assign remainder = forloop.index | modulo: include.rowLimit %}
+ {% if remainder == 0 %}
+
+ {% endif %}
+ {% endif %}
+{%- endfor -%}
diff --git a/_includes/components/member/members.html b/_includes/components/member/members.html
new file mode 100644
index 000000000..3f5a69dae
--- /dev/null
+++ b/_includes/components/member/members.html
@@ -0,0 +1,50 @@
+
+
Meet the Board
+ {% assign year = 'now' | date: "%Y" %}
+
+ {% assign month = 'now' | date: "%m" %}
+ {% if month == '01' or month == '02' or month == '03' or month == '04' or month == '05' %}
+
+
{{ year | minus:1}} – {{ year }} Members
+ {% else %}
+
{{ year }} – {{ year | plus:1 }} Members
+ {% endif %}
+
+
+ {% assign current_members = site.data.people.members | where_exp: "member", "member.class contains '' or member.class == nil" %}
+ {% assign former_members_years = site.data.people.alumni | group_by: "class" | sort: "name" | reverse %}
+ {% assign former_members = '' | split: ',' %}
+ {% for year in former_members_years %}
+ {% assign year_members = year.items | sort_natural: "name" %}
+ {% for member in year_members %}
+ {% assign former_members = former_members | push: member %}
+ {% endfor %}
+ {% endfor %}
+
+ {% include components/member/list.html members=current_members size="icon-square-10@md-below icon-square-14@lg icon-square-18@xl" spacing="mx-1@xs-below mx-4@sm mx-6@md mx-8@lg-above my-6@md-above my-3@md-below" overlay=true %}
+
+
+ {% if former_members | size %}
+
+
+
Former Members
+
A best-effort record of our {{former_members | size}} former members
+
+
+
+ Collapse Expand
+
+
+
+
+ {% endif %}
+
diff --git a/_includes/components/post.html b/_includes/components/post.html
new file mode 100644
index 000000000..6602b1025
--- /dev/null
+++ b/_includes/components/post.html
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+ {% assign categories_size = page.categories | size %}
+ {% if categories_size > 0 %}
+ {% if categories_size > 1 %}Categories{% else %}Category{% endif %}:
+ {% for category in page.categories %}
+ {{category}}
+ {% endfor %}
+
+ {% endif %}
+
+ {% include components/rating.html slug=page.slug %}
+
+
diff --git a/_includes/components/rating.html b/_includes/components/rating.html
new file mode 100644
index 000000000..e8a4d49e1
--- /dev/null
+++ b/_includes/components/rating.html
@@ -0,0 +1,42 @@
+
+
+
+
+
Was this page helpful?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Thank you for your feedback! :tada:
+
+
diff --git a/_includes/components/social.html b/_includes/components/social.html
new file mode 100644
index 000000000..4855263a1
--- /dev/null
+++ b/_includes/components/social.html
@@ -0,0 +1,25 @@
+{% if include.color == nil %}
+ {% assign include.color = "dark" %}
+{% endif %}
+
+{% if include.svg == nil %}
+ {% assign include.svg = false %}
+{% endif %}
+
+{%- for social in site.data.social_links -%}
+ {% assign social_url = social[1].url %}
+ {% assign social-brand = social[0] %}
+ {% assign social-fa-icon = social[1].fa-icon %}
+ {% if social-fa-icon == nil %}
+ {% assign social-fa-icon = social-brand %}
+ {% endif %}
+
+ {% if include.svg == true %}
+
+ {% else %}
+
+ {% endif %}
+
+
+ {% unless forloop.last %}
{% endunless %}
+{%- endfor -%}
diff --git a/_includes/footer.html b/_includes/footer.html
deleted file mode 100644
index 8149f4140..000000000
--- a/_includes/footer.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
diff --git a/_includes/head.html b/_includes/head.html
index 6a387410c..3ca783271 100644
--- a/_includes/head.html
+++ b/_includes/head.html
@@ -1,13 +1,39 @@
-
-
-
-
-
-
-
-
-
{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}
-
-
+
+
+
+
+
+
+
+
+
{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if jekyll.environment == "development" %}
+
+ {% endif %}
+
+ {% seo %}
diff --git a/_includes/header.html b/_includes/header.html
deleted file mode 100644
index e8e53a0fd..000000000
--- a/_includes/header.html
+++ /dev/null
@@ -1,24 +0,0 @@
-
diff --git a/_includes/members.html b/_includes/members.html
deleted file mode 100644
index b6c7f1138..000000000
--- a/_includes/members.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
Current USB Members
-
-
- {%- for member in site.data.members -%}
-
-
-
-
- {{ member.name }}
-
{{ member.title }}
-
{{ member.class }}
-
-
-
- {%- endfor -%}
-
-
\ No newline at end of file
diff --git a/_includes/nav/footer.html b/_includes/nav/footer.html
new file mode 100644
index 000000000..3b6dca4e7
--- /dev/null
+++ b/_includes/nav/footer.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
Purdue CS USB
+
+
Made with Jekyll
+
Designed with on Figma
+
+
+ {%- include nav/navmenu.html classes="mb-0 font-body" light=true social=true -%}
+
diff --git a/_includes/nav/header.html b/_includes/nav/header.html
new file mode 100644
index 000000000..e025617a3
--- /dev/null
+++ b/_includes/nav/header.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+ {%- include nav/navmenu.html classes="mb-0 font-h4" dark=true -%}
+
+
+ {%- include components/announcement.html -%}
+
\ No newline at end of file
diff --git a/_includes/nav/header_links.html b/_includes/nav/header_links.html
new file mode 100644
index 000000000..302c1966e
--- /dev/null
+++ b/_includes/nav/header_links.html
@@ -0,0 +1,9 @@
+{% if include.fab == true %}
+ {% assign fab_menu_class = "nav-item" %}
+{% else %}
+ {% assign fab_menu_class = "" %}
+{% endif %}
+
+{%- for link in site.data.header_links -%}
+
+{% endfor %}
\ No newline at end of file
diff --git a/_includes/nav/navmenu.html b/_includes/nav/navmenu.html
new file mode 100644
index 000000000..1b5b2d6ce
--- /dev/null
+++ b/_includes/nav/navmenu.html
@@ -0,0 +1,17 @@
+{% assign color = "light" %}
+{% if include.light == nil or include.light == false or include.dark == true %}
+ {% assign color = "dark" %}
+{% endif %}
+
+
+
+
+ {%- include nav/header_links.html classes=include.classes color=color -%}
+
+ {% if include.social == true %}
+
+ {%- include components/social.html color=color -%}
+
+ {% endif %}
+
+
\ No newline at end of file
diff --git a/_includes/nav/navmenu_mobile.html b/_includes/nav/navmenu_mobile.html
new file mode 100644
index 000000000..efa68c138
--- /dev/null
+++ b/_includes/nav/navmenu_mobile.html
@@ -0,0 +1,12 @@
+
+
+
diff --git a/_includes/nav/sidebar.html b/_includes/nav/sidebar.html
new file mode 100644
index 000000000..611bcb4fb
--- /dev/null
+++ b/_includes/nav/sidebar.html
@@ -0,0 +1,41 @@
+
+
+
diff --git a/_includes/postsidebar.html b/_includes/postsidebar.html
deleted file mode 100644
index 89d2c8286..000000000
--- a/_includes/postsidebar.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
- {%- if site.posts.size > 0 -%}
-
- {%- for post in site.posts -%}
-
-
-
-
-
-
{{ post.description }}
-
-
- {%- endfor -%}
-
- {%- endif -%}
-
\ No newline at end of file
diff --git a/_includes/social.html b/_includes/social.html
deleted file mode 100644
index fed8cd932..000000000
--- a/_includes/social.html
+++ /dev/null
@@ -1,21 +0,0 @@
-{%- assign social = site.minima.social_links -%}
-
-
- {%- for glb in social.gitlab -%}{%- if glb.username and glb.instance -%} {%- endif -%}{%- endfor -%}
- {%- if social.dribbble -%} {%- endif -%}
- {%- if social.facebook -%} {%- endif -%}
- {%- if social.flickr -%} {%- endif -%}
- {%- if social.github -%} {%- endif -%}
- {%- if social.stackoverflow -%} {%- endif -%}
- {%- if social.instagram -%} {%- endif -%}
- {%- if social.linkedin -%} {%- endif -%}
- {%- if social.pinterest -%} {%- endif -%}
- {%- for mst in social.mastodon -%}{%- if mst.username and mst.instance -%} {%- endif -%}{%- endfor -%}
- {%- if social.twitter -%} {%- endif -%}
- {%- if social.youtube -%} {%- endif -%}
- {%- if social.youtube_channel -%} {%- endif -%}
- {%- if social.telegram -%} {%- endif -%}
- {%- if social.keybase -%} {%- endif -%}
- {%- if social.microdotblog -%} {%- endif -%}
- {%- if social.devto -%} {%- endif -%}
-
\ No newline at end of file
diff --git a/_layouts/default.html b/_layouts/default.html
index 3229fb2cb..5e8c615b9 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -1,27 +1,12 @@
-
- {%- include head.html -%}
-
-
-
- {%- include header.html -%}
-
-
-
-
- {{ page.title | escape }}
-
- {{ page.description | escape }}
-
-
-
- {{ content }}
-
-
-
- {%- include footer.html -%}
-
-
-
+ {%- include head.html -%}
+
+ {%- include nav/header.html -%}
+
+ {%- include nav/navmenu_mobile.html -%}
+ {{content}}
+
+ {%- include nav/footer.html -%}
+
diff --git a/_layouts/page.html b/_layouts/page.html
deleted file mode 100644
index 37ba05be1..000000000
--- a/_layouts/page.html
+++ /dev/null
@@ -1,10 +0,0 @@
----
-layout: default
----
-
-
-
- {{ content }}
-
-
-
diff --git a/_layouts/post.html b/_layouts/post.html
index 40b8f1045..395441f8d 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -1,43 +1,16 @@
-
-
+---
+layout: default
+---
+
+
+
+
+ {% include components/post.html content=content %}
+
+
+
+ Read More Blogs
+
+
-{%- include head.html -%}
-
-
-
-
-
- {%- include header.html -%}
- {%- include postsidebar.html -%}
-
-
-
-
-
-
- {{ content }}
-
-
-
-
-
- {%- include footer.html -%}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/_layouts/wiki.html b/_layouts/wiki.html
new file mode 100644
index 000000000..edd4ac6ce
--- /dev/null
+++ b/_layouts/wiki.html
@@ -0,0 +1,16 @@
+---
+layout: default
+title: Student Wiki
+description: Locally sourced, organic wisdom. Shared by the student body, curated by USB.
+---
+
+
+
+ {%- include nav/sidebar.html limit_height=true -%}
+
+
+
+ {% include components/post.html content=content %}
+
+
+
diff --git a/_pages/404.html b/_pages/404.html
new file mode 100644
index 000000000..536929ab0
--- /dev/null
+++ b/_pages/404.html
@@ -0,0 +1,27 @@
+---
+permalink: /404.html
+---
+
+
+
It's deserted here
+
+
+
+
+
+
+
We're not sure if the page you're looking for exists, or if it ever existed for that matter.
+ Let us know if you need help.
+
+
Go Home
+
+
diff --git a/_pages/about.html b/_pages/about.html
new file mode 100644
index 000000000..a8b8a8c43
--- /dev/null
+++ b/_pages/about.html
@@ -0,0 +1,8 @@
+---
+title: About Us
+---
+
+
+ {%- include components/aboutus.html -%}
+ {%- include components/member/members.html -%}
+
\ No newline at end of file
diff --git a/_pages/apply.html b/_pages/apply.html
new file mode 100644
index 000000000..3a4506789
--- /dev/null
+++ b/_pages/apply.html
@@ -0,0 +1,6 @@
+---
+title: Apply
+redirect_from:
+ - /apply/
+redirect_to: https://forms.gle/wcq6dro8rjupKKWH7
+---
diff --git a/_pages/becomeatutor.html b/_pages/becomeatutor.html
new file mode 100644
index 000000000..0480d9e7c
--- /dev/null
+++ b/_pages/becomeatutor.html
@@ -0,0 +1,6 @@
+---
+title: CS Tutor List
+redirect_from:
+ - /becomeatutor/
+redirect_to: https://www.notionhttps://goo.gl/forms/iagngnhnrYEOHIro2
+---
\ No newline at end of file
diff --git a/_pages/blog-temp.html b/_pages/blog-temp.html
new file mode 100644
index 000000000..5e4092d81
--- /dev/null
+++ b/_pages/blog-temp.html
@@ -0,0 +1,8 @@
+---
+title: USB Blog Posts
+description: Check out what CS/DS students have to say!
+---
+
+
+ {%- include components/blog-temp/blog-posts.html -%}
+
diff --git a/_pages/blog.html b/_pages/blog.html
new file mode 100644
index 000000000..40628e919
--- /dev/null
+++ b/_pages/blog.html
@@ -0,0 +1,9 @@
+---
+layout: default
+title: Blog
+---
+
+
+
+ {%- include components/blog-temp/blog-posts.html -%}
+
diff --git a/_pages/contact.html b/_pages/contact.html
new file mode 100644
index 000000000..1f40befaf
--- /dev/null
+++ b/_pages/contact.html
@@ -0,0 +1,8 @@
+---
+title: Contact Us
+redirect_from:
+ - /help/
+---
+
+ {%- include components/contact.html -%}
+
diff --git a/_pages/forum.html b/_pages/forum.html
new file mode 100644
index 000000000..54e3db24a
--- /dev/null
+++ b/_pages/forum.html
@@ -0,0 +1,7 @@
+---
+title: Student Forum
+redirect_from:
+ - /forum/
+ - /studentforum/
+redirect_to: https://forms.gle/UU2jjon1mWkT1diG9
+---
diff --git a/_pages/initiatives.html b/_pages/initiatives.html
new file mode 100644
index 000000000..23f8a2d34
--- /dev/null
+++ b/_pages/initiatives.html
@@ -0,0 +1,8 @@
+---
+title: Initiatives
+description: Check out what USB is currently working on!
+---
+
+
+ {%- include components/initiative/initiatives.html -%}
+
diff --git a/_pages/officehours.html b/_pages/officehours.html
new file mode 100644
index 000000000..53c5b0308
--- /dev/null
+++ b/_pages/officehours.html
@@ -0,0 +1,6 @@
+---
+title: USB Office Hours
+redirect_from:
+ - /oh/
+redirect_to: https://calendar.google.com/calendar/embed?src=shkcjufcnjflfgpui0k8hiu71c%40group.calendar.google.com&ctz=America%2FIndiana%2FIndianapolis
+---
diff --git a/_pages/openletter.html b/_pages/openletter.html
new file mode 100644
index 000000000..166ca8754
--- /dev/null
+++ b/_pages/openletter.html
@@ -0,0 +1,6 @@
+---
+title: Open Letter
+redirect_from:
+ - /openletter/
+redirect_to: https://docs.google.com/document/d/e/2PACX-1vSq6MYYuEizQ5jezCUoAKHXCTR4FbhcT96NJCCYEOPN_-wOs5PO16LSPotOohXRQMsnMs0il1-42Usp/pub
+---
diff --git a/_pages/tutors.html b/_pages/tutors.html
new file mode 100644
index 000000000..e6f3722c2
--- /dev/null
+++ b/_pages/tutors.html
@@ -0,0 +1,6 @@
+---
+title: CS Tutor List
+redirect_from:
+ - /tutorlist/
+redirect_to: https://www.notion.so/usb/fc8013a0d21a4483982d126cad0c372f?v=af2d91e730de4c8d8982bd4e8d83bcc3
+---
\ No newline at end of file
diff --git a/_pages/wiki.html b/_pages/wiki.html
new file mode 100644
index 000000000..d0631de31
--- /dev/null
+++ b/_pages/wiki.html
@@ -0,0 +1,10 @@
+---
+title: Student Wiki
+description: Locally sourced, organic wisdom. Shared by the student body, curated by USB.
+---
+
+
+
+ {%- include nav/sidebar.html -%}
+
+
\ No newline at end of file
diff --git a/_plugins/cachetag.rb b/_plugins/cachetag.rb
new file mode 100644
index 000000000..024d01978
--- /dev/null
+++ b/_plugins/cachetag.rb
@@ -0,0 +1,25 @@
+module Jekyll
+ class CacheTag < Liquid::Tag
+
+ def initialize(tag_name, text, tokens)
+ super
+ @text = text
+ end
+
+ def render(context)
+ time = Time.new
+ "#{@text.strip}?cache=#{time.strftime("%-d%9N")}"
+ end
+ end
+
+ module CacheFilter
+ def cachetag(input)
+ puts "Nil cachetag input! Did you put it in quotes?" if !input
+ time = Time.new
+ "#{input.to_s.strip}?cache=#{time.strftime("%-d%9N")}"
+ end
+ end
+end
+
+Liquid::Template.register_tag('cachetag', Jekyll::CacheTag)
+Liquid::Template.register_filter(Jekyll::CacheFilter)
diff --git a/_plugins/cachify.rb b/_plugins/cachify.rb
new file mode 100644
index 000000000..e69de29bb
diff --git a/_plugins/hasasset.rb b/_plugins/hasasset.rb
new file mode 100644
index 000000000..e69de29bb
diff --git a/_posts/2020-03-04-become-uta.md b/_posts/2020-03-04-become-uta.md
deleted file mode 100644
index c1002ae29..000000000
--- a/_posts/2020-03-04-become-uta.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-layout: post
-title: "How do I become an Undergraduate Teaching Assistant?"
-description: "Get paid to help students during labs"
-author: Noah Alderton
-date: 2020-03-04 17:00:00 -0400
-categories: campus
----
-
-The process of the hiring UTAs has been standardized in the Computer Science Department. Typically, applications for the following semester are opened about a month before classes end. More information can be found here, along with additional information:
-
-[https://www.cs.purdue.edu/hiring/uta.html](https://www.cs.purdue.edu/hiring/uta.html)
\ No newline at end of file
diff --git a/_posts/2022-03-08-youbelong.md b/_posts/2022-03-08-youbelong.md
new file mode 100644
index 000000000..aafb6d523
--- /dev/null
+++ b/_posts/2022-03-08-youbelong.md
@@ -0,0 +1,29 @@
+---
+layout: post
+title: "Do I Belong?"
+description: "Self doubt: it plagues us all"
+author: Vindhya Banda
+date: 2022-03-08 09:00:00 -0400
+categories: belonging
+---
+For as long as I can remember, I was sure I would pursue a career in a technical field. Growing up in a family full of software engineers, I was familiarized with technical terminology and computers very early on. While I never really pursued computer science seriously until high school, it was definitely a subject I was fond of throughout my schooling.
+
+I was so sure that this was what I wanted to do – that is, up until I stepped into the classroom of my first official CS class in high school. At first I thought it was just because attendance was low on the first day of classes, but by the time week 2 of 11th grade rolled around I realized that I was only one of 2 other girls pursuing CS at my high school.
+
+The lack of representation made me question whether I was really cut out for the classes I was taking. Even though I would consistently be among the highest scoring students in class, there was a thought at the back of my mind that made me wonder when I would run out of “luck”. Most A+’s felt like flukes and every failed code block would reinforce my fear of not being good enough. I guess that’s quite dramatic but unfortunately it’s not something I’m concocting for a blog post. Thankfully, this attitude really began to shift when I attended Purdue.
+
+Walking into CS180, the sheer number of women in the room greatly encouraged me. It made me feel capable and the gender gap in STEM suddenly seemed far less formidable. Even when taking difficult CS courses, I felt like my struggle was not just specific to my individual experience. The representation in CS, even if it is lesser than I would hope it to be, allowed me to approach difficult concepts without feeling the need to prove my worth and letting every minor mishap be a discouragement. For the most part, I don’t think the discomfort of being a minority in tech really resurfaced until I had my first internship offer letter in hand.
+
+Confused? So was I. Getting an internship was supposed to be a happy thing, right? After a busy application season and many trying interviews, I was happy to see that all my efforts paid off. I felt so encouraged and motivated…until I was called a diversity hire. I was shocked. I thought I was past the stage of feeling insecure, I’d assumed the imposter syndrome had gone away. But at that one comment, old fears rushed back and I suddenly felt undeserving of that offer letter.
+
+Following that experience, it took me a while to straighten my shoulders and face the world confidently again. I’ll spare you the details, but it involved a lot of pep-talking, Doja Cat, and solving LeetCode to convince myself that I belong. As a woman in today’s STEM corporate landscape, you may find yourself in situations where you’ll have to remind yourself, like I had to, that you are where you are because of your hard work, and not just luck.
+
+I’m grateful that over the years I’ve had the chance to be a part of incredible organizations, like Girls Who Code and The Girl Code, who are working very hard to bridge the gender gap in computer science. While I worked as an instructor/coordinator at these organizations, I noticed that women in tech tend to question themselves and their ability far more than their male counterparts. Hopefully, this mentality will change as trends in representation shift. However, I believe that it is essential for us to encourage ourselves and lift each other up along the way.
+
+I know that this fear of not-being enough or being out of place will surely crop up again, but it is up to us on how we want to react. The world is filled with inspiring individuals who belong to underrepresented communities in the fields they shine in. I look to them for inspiration and strive to emulate their resolve while I work towards carving out my own career path. This has greatly helped me and I encourage you to do the same. To all the students who may feel out of place at Purdue CS, to you I say: you belong.
+
+Boiler Up!
+
+
+
+
diff --git a/_posts/2022-03-23-research.md b/_posts/2022-03-23-research.md
new file mode 100644
index 000000000..ae10210a4
--- /dev/null
+++ b/_posts/2022-03-23-research.md
@@ -0,0 +1,65 @@
+---
+layout: post
+title: "Getting started in Computer Science Research as an Undergraduate"
+description: "Research in the CS department isn't the easiest to get involved in, but here we answer some common questions."
+author: Simran Kadadi
+date: 2022-03-23 09:00:00 -0400
+categories: Research
+---
+Hi everyone,
+
+Research has been an extremely influential part of my undergraduate journey at Purdue. It was extremely intimidating to get involved. At first, I struggled to find meaning in my coursework during the pandemic, and I was interested in making an impact in the field of computer science. I initially approached a professor with an interest in research my freshman year as I was interested in pursuing computational biology research that would complement my computer science background. Upon asking the professor to recommend courses that would prepare me for research, he recommended that I take his class on computational genomics to further determine my interest. I continued to seek knowledge from professors and faculty to best prepare me to successfully partake in research, but there is so much to uncover, and I am still learning more every day.
+
+
+Today, I had the opportunity to ask Ms. Ranjani Rao some questions about undergraduate research about what I wish I had known before I started.
+
+Interview with Ranjani L. Rao, Purdue Undergraduate Research and Career Development Specialist
+
+Simran: Why should computer science students consider undergraduate research?
+
+Ms. Rao: First, students gain intellectual satisfaction from solving hard problems, putting their work in the classroom, seeand seeing how all concepts work in the real world. Intellectual satisfaction is tremendous because you learn a lot more. Research experience is highly valued in industry and career strategy. It also helps improve the responsibility of a person. If you participate in conferences or present your work, have the ability to improve your communication skills.
+
+Simran: What is the best way to approach professors for research?
+
+Ms. Rao: When talking to CS professors, first analyze your own background and find out what aspects of cs you are interested in. Look at if you enjoyed CS 182, data structures, math classes, there are some areas of research like machine learning or computational sciences, or engineering. If you enjoyed CS 240, C programming, CS252, systems programming, then probably research in operating systems or systems security is better for you. First, analyze your background, then go around and study faculty bios and research professors on their websites. Read papers with a professor you want to work with. Play around with software that might be useful. Do your background work and then cold email professors or talk to people in their labs or others in research. Attend meet and greets and talks held by professors in the cs dept. The theory group has cs theory meetings every week. PurPL has a series of workshops where graduate students present their work. These are great avenues to learn about the research that different professors are conducting.
+
+Simran: Do you have to have taken a course with the professor you want to do research with?
+
+Ms. Rao: It would be helpful to have taken a course with a professor. For example, if you want to do research with a professor who is specializing in networks. The ideal case is if the professor taught CS 473. It is okay if you took CS 473 with one professor, but decided to approach another in the same area. As long as you have a class in that area, you are going to be productive at that lab.
+
+Simran: What time in your college career do you recommend that students reach out to professors?
+
+Ms. Rao: If this is a computer science professor, usually when you get past data structures and systems programming this is when you have courses and when you are ready to take upper-level courses. This is possible because you have some background classes. Then, prioritize the classes relevant to the professor you choose.
+
+Simran: How do you make sure you pick the right professor since there are many different professors working in the same area?
+
+Ms. Rao: There is no perfect answer. You have to do trial and error. One thing you can do to understand what area is to read papers by the professors, especially if they have done work previously with undergraduate students. Try to see what the undergraduate did. This will help you understand what the professor did. Systems building and deployment. With your background in cs, you can figure out a little bit more.
+
+Simran: Do students get financially compensated for undergraduate students or can students do research for course credit?
+
+Ms. Rao: There are different compensation In the early stages, when the professor doesn’t really know the student, As professor David Blyth told me, there are two phases with working with any cs professors, figuring out if you can work with each other, nothing is paid. If they figure out if you work, there are many ways to get compensated for the research that you perform. For computer science, you can get credit for doing research with a professor. You and the professor decide how many hours of work howwork, how much research, you can decide to have workhave to work down for a grade or pass/fail. Research for pay happens when you have a greater level of trust with the faculty. Some faculty have funding from companies or NSF research grants where they can help support you. This happens when the student works in the summer or has been working for the lab for a few semesters.
+
+Simran: Do students have to be in CS honors to be active participants in research?
+Ms. Rao: CS honors is just a small part of the overall research done. When looking at the number of independent studies, 300 to 400 by students in cs. A number of students in cs honors were in the double-digits. No, you don’t have to just be in cs honors, but you do have to be a conscientious student
+
+Simran: What are REUs (Research Experiences for Undergraduates)?
+
+Ms. Rao: REUS are programs funded by NSF to support undergraduate research. Professors write up grand proposals and write undergrad extensions and the government gives them extra money to support undergraduate students. There are over approximately 115 opportunities just for computational sciences and engineering. This is the subarea that cs majors usually apply to over the country. It is a research boot camp. You work on a presentation and you present and the researcher mentors you and you get compensated which is nice. This opportunity is only open to US students and is extremely helpful for applying to graduate schools. https://www.nsf.gov/crssprgm/reu/
+
+Simran: Could you please explain what is the SURF program and who should apply to the SURF program?
+
+Ms. Rao: SURF is a program at Purdue that is part of an opportunity to do research with an engineering professor. There is a symposium in summer where you get to work with a professor on a project and get to present at the end of the summer.
+
+Thank you for reading!
+
+If you have any questions for Ms. Rao, you can make an appointment with her. Her email is rrao@purdue.edu. Resume reviews are offered in Lawson commons on Mondays and Thursdays between 1:30-3:00 pm with Ranjani Rao.
+
+
+
+_________________________________________
+
+
+
+
+
+
diff --git a/_posts/2022-04-06-firstgen.md b/_posts/2022-04-06-firstgen.md
new file mode 100644
index 000000000..d05ce8e58
--- /dev/null
+++ b/_posts/2022-04-06-firstgen.md
@@ -0,0 +1,52 @@
+---
+layout: post
+title: "My Experience as a First-generation and Low-income Student at Purdue"
+description: "The financial aid process isn't the easiest to navigate, but here are some tips for students with a similar background as me."
+author: Arianna Smith
+date: 2022-04-06 09:00:00 -0400
+categories: FirstGen, belonging
+---
+Hi everyone! I’m Arianna, a senior in CS at Purdue. I’m also a first-generation and low-income student, and I wanted to write this post to discuss my experiences in college and CS from that perspective. For me, it was initially jarring and persistently alienating to hold those identities in college, so I’m hoping that this post will give students from similar backgrounds a bit of guidance and perspective in the same situation. I’m also hoping that this post will give other students insight into this kind of experience, since it’s often not discussed openly. I’ll be discussing these issues from my own perspective and based on my own experiences; keep in mind that other students may have very different experiences, even under very similar circumstances.
+
+I always knew that I wanted to go to college, although I knew it would be difficult; my parents supported me if I wanted to go, but they made it clear that I would have to find a way to pay for my tuition, housing and expenses myself. At Purdue, this can seem to be an impossible goal, especially without financial aid; tuition for in-state students is frozen at $9,992 a year; the cheapest dorm housing is around $5,000 a year; and the cheapest meal plan (in 2018) was $2,000 a year for 8 meals a week. In the CS department, there are additional fees as well, meaning that a student who is expected to finance their own education has to find a way to pay ~$17,000 a year to attend school here.
+
+For those who aren’t familiar with the financial aid process, it starts with an award calculated by the university after acceptance. If you don’t receive enough financial aid in your award package, then your next stop is loans or independent financial aid applications. Loans are terrifying - we all know the statistics about interest rates and timelines, and they scared me, so I personally decided to take these only as a last resort. Independent financial aid is difficult to attain, especially if you don’t come from a privileged background. It requires an unbelievable amount of time and effort; I spent the majority of my senior year of high school applying for financial aid. Because I was also working as much as possible, this meant that I had almost no time to complete schoolwork. You need letters of recommendation, which are difficult to attain if you haven’t had a lot of extracurricular or volunteer opportunities, as many students don’t have. I needed a lot of complicated financial information from my parents (despite the fact that they were not contributing financial support - the law is stupid), which I was only able to access because I had supportive parents with enough free time to help me. You need an extremely impressive resume, as many independent scholarships are ‘need-blind’, meaning that you’re often competing with students from more privileged backgrounds who have had a lot of educational and extracurricular opportunities that you haven’t had (this especially holds for big-ticket scholarships, because they are often seen as a prestigious resume boost). Finally, you have to be able to interview well, which requires the right clothes (expensive), a lot of time to prepare, and confidence. It also requires that you sell yourself to your interviewer, which is personally complicated for students from disadvantaged backgrounds - you have to craft a specific narrative which paints you as both disadvantaged/suffering and accomplished/successful, which requires talking and thinking about yourself in a way that does not feel great.
+
+By the time I started college, I was able to secure scholarships to cover most of my expenses. I continued applying for scholarships at college, and I usually found myself owing at least a few thousand each semester. I had been working and saving money all throughout high school, and I continued working in college - with my savings, I was able to pay my first year’s expenses. I got the cheapest meal plan, which was 8 meals a week; I ate one meal a day and 2 on Mondays. I lost a significant amount of weight during my first semester , which was directly due to limited access to food on campus. My sophomore year, I discovered the on-campus food pantry, and used that to supplement my meal plan, which worked well. Worries about money, food and my future in college were always in the back of my mind, and while they (thankfully) weren’t unmanageable for me, they did cause stress and tension, and detracted from the time I had to study.
+
+Those issues were all real, but fairly impersonal - I could think about practical issues like my finances, access to food, and work hours without emotional involvement. The personal struggles I had as a first-generation student were definitely more personally impactful. Within my first few weeks at Purdue, I started to realize that there seemed to be a particular background which a lot of CS/DS students came from. Whether this was reality or just my perception is hard to say (the department doesn’t release statistics about first-generation or low-income students, so it’s impossible to say whether we have a lower incidence of those types of students than other majors). A lot of my peers came from backgrounds where college education was very normalized, whereas I hadn’t had much exposure to college graduates or preparation for college/white collar careers in my community. I am extremely proud of my community - my most influential, hard-working mentors are from there, and I’ve always felt supported and welcomed at home. have constantly supported me and my siblings. Yet I increasingly found myself unwilling to discuss family or hometown with my peers. I developed two separate identities - one for home, where I felt more comfortable, and one for school, where I was a bit more guarded. This isn’t to say that I didn’t make friends - I did, and the friendships were real. But I could never feel sure of myself or my life at school, when there were so many things that I felt I couldn’t share. By my sophomore year, I had begun to feel totally separate from my classmates, and I also no longer felt comfortable at home; I was constantly divided between two identities, and didn’t feel like I really belonged anywhere. This lack of community was significant for me; I was angry almost all the time. I was mad at my classmates for being different from me, I was mad at my family for being different from my classmates, and I was mad at myself for feeling so conflicted.
+
+These are difficult issues to work through, as most identity struggles are. Ironically, the thing which helped me the most was to try to connect to others; this required me to check the assumptions I made about others, and question the anger I was feeling toward so many people in the community at Purdue. I found that most people shared some sort of struggle or experience, no matter how different they are on the surface; and trying to be as empathetic as possible helped me see that. There are certainly resources on campus for students who are going through a variety of experiences (some are listed below) and I recommend reaching out to them as soon as possible if you are feeling consistently conflicted, as it’s best to try to address those issues early on. As trite as I’m sure it sounds, everyone belongs in Purdue, and everyone belongs in CS/DS, and we all deserve to feel that belonging.
+
+
+Resources
+
+Horizons Student Support Services: https://www.purdue.edu/horizons/
+Provides various services (tutoring, food pantry, study space, mentorship, community, etc) to first-generation and low-income students at Purdue.
+
+ACE Food Pantry: https://www.purdue.edu/vpsl/leadership/About/ACE_Campus_Pantry.html
+Located in the Baptist Student Foundation basement across the street from Honors. Available to any student with a PUID. Offers fresh and shelf-stable food, different offerings each week.
+
+Purdue Financial Aid Office: https://www.purdue.edu/dfa/
+They were super useful for me personally - I emailed them a lot about my financial aid package and scholarships, and they always responded quickly and thoroughly.
+
+Financial Counseling:
+https://www.purdue.edu/recwell/fitness-wellness/wellness/one-on-one-coaching/financial-counseling.php
+This kind of counseling isn’t specifically for low-income or first-generation students, although it can be helpful for them; it’s a useful tool for anyone who isn’t quite sure how to structure their finances during or after college.
+
+Purdue Office of Diversity & Inclusion: https://www.purdue.edu/diversity-inclusion/
+I personally got a lot of benefit from the office of diversity and inclusion within my own college, but this office would apply more broadly to all students at Purdue. If you want, I recommend looking into similar resources at the college level as well.
+
+Center for Career Opportunities: https://www.cco.purdue.edu/?_ga=2.18252985.1084848711.1649645585-1950701448.1636566598
+The CCO was helpful in reviewing my resume and helping me prep for interviews, which I didn’t have much independent experience with.
+
+NISO Office: https://www.purdue.edu/niso/
+NISO helped connect me with scholarships and opportunities that I never would have otherwise known about. They are super friendly and inclusive, and they made me feel very welcome at Purdue.
+
+‘Free Food at Purdue’ GroupMe: Google the link!
+This is an informal group chat where students send info about free food being offered on campus. As a freshman, I took advantage of this as often as possible, and I got quite a few catered meals from it!
+
+Other
+College-level resources are prevalent and they’re usually much more relevant/useful to a student’s career goals. I am not familiar with every college, so I recommend doing some independent research to find some more resources at that level. Various cultural centers on campus were very inclusive and welcoming to me as well, and they are also great places to learn and find more resources.
+
+
diff --git a/_posts/2022-04-06-freshmanyear.md b/_posts/2022-04-06-freshmanyear.md
new file mode 100644
index 000000000..085feabfe
--- /dev/null
+++ b/_posts/2022-04-06-freshmanyear.md
@@ -0,0 +1,31 @@
+---
+layout: post
+title: "Navigating My Freshman Year"
+description: "Navigating my Freshman Year comes with its own set of challenges, but with the help of clubs and friends, I was able to find a home at Purdue"
+author: Sweta Saravanan
+date: 2022-04-06 09:00:00 -0400
+categories: FreshmanYear
+---
+As an out-of-state student attending Purdue, my freshmen year was very daunting because I knew no one, and I remember spending my first few weeks feeling lost.
+
+However, looking back now, I am grateful to have met all the people I call friends today!
+
+For anyone who finds themselves in the same shoes as me, my only advice to you is to put yourself out there and take advantage of the events on campus (especially especially especially during your first few weeks!)
+
+Apart from trying to make friends in my classes, attending club fairs, callouts, and floor events played a major role in meeting new people. I remember my first friend being a girl that lived on my floor all because I had asked her to grab lunch one day!
+
+I also met two of my closest friends at a South Asian Club Fair, simply because we all decided to grab food at Windsor after and make a trip to Walmart together since none of us had used the buses on campus yet!
+
+You might be seeing that a common theme for most of my friendships is food! So get out there and ask people to get food!!!
+
+Club fairs are also not only a great place to find clubs that interest you but also a great way to meet even more people! Joining Boilermake and USB allowed me to make more friends within my major and meet upperclassmen as well! Not only was I able to meet new people but I also received a ton of insightful advice from class recommendations to internship advice!
+
+Apart from ‘major-related’ clubs, I also recommend you try to join clubs where you can meet new people from different majors. For example, I joined Alpha Kappa Psi (AKPSI), a professional business fraternity on campus, which lead to me making some amazing and genuine friends. AKPSI also inspired me to pursue a minor in business economics which I would have never done if it weren't for the advice and guidance from my brothers!
+
+There are a lot of cool and amazing clubs on campus which I even wished I joined, such as: the Purdue Concert Committee (PCC), Purdue EDM Club (PEDMC), and so much more!!!
+
+There are definitely more ways to get involved on campus whether that is through research, joining a sports team (intermural or club), or by simply attending fun campus events! There is definitely a place for you on campus and the only way to find it is by putting yourself out there and trying new things!
+
+
+
+
diff --git a/_posts/2022-04-15-freshmanyear.md b/_posts/2022-04-15-freshmanyear.md
new file mode 100644
index 000000000..156bebee6
--- /dev/null
+++ b/_posts/2022-04-15-freshmanyear.md
@@ -0,0 +1,25 @@
+---
+layout: post
+title: "One thing I learned from my freshman year"
+description: "Freshman year taught me to how to find balance between school and my social life"
+author: Jillian Urgello
+date: 2022-04-15 09:00:00 -0400
+categories: FreshmanYear
+---
+If there’s one thing I learned from my freshman year at Purdue, it is that keeping a balance between academics and a social life is no easy task. When you’re leaning so far heavily to one side, it can be hard to find ways to balance the scale out again.
+
+This is how I felt at the end of my first semester at Purdue. I didn’t make much effort to join or be actively involved in any clubs and while I definitely wanted to, I was spending so much time studying I thought it was impossible for me to fit more things into my schedule. I ended up getting stuck in this endless cycle of classes and then studying and then classes again.
+
+To break the cycle, I tried to make small changes in my daily life. At the start of second semester, I pushed myself to make time to attend club callouts or meetings. Building these things into my schedule at the beginning of the semester before classes ramped up was really helpful for me breaking out of the cycle and moving towards a more balanced college life. Personally, the hardest part in finding that balance was motivating myself to take that first step. What motivated me was the realization that college was going by a lot faster than I expected and that there were so many opportunities that I could only experience in college.
+
+During second semester, I became more involved in Purdue’s Piano Club, Filipino Association and USB. Joining these clubs gave me an outlet to studying which helped lessen the amount of burn out I felt. Moreover, it was a way for me to make new friends and find a community at Purdue. This semester, I worked alongside other PFA members to put on the association’s annual cultural show. Rehearsing and preparing for the show was time consuming which really forced me to manage my time better. Having things to do other than just studying helped me learn how to study more efficiently and take full advantage of the time I had. Although it was a lot of work to juggle everything, I had a stronger sense of accomplishment and motivation.
+
+As the end of the second semester approaches, I can’t say that I have found that perfect balance yet. But, I have improved. I’ve learned that finding a good balance isn’t something that can be accomplished in a semester or even two semesters. Balance is something that is attained through incremental and consistent change. Moving forward, I know there will be times where the scale might have to tip more to one side, but at least now I know how to even it out again.
+
+
+
+
+
+
+
+
diff --git a/_posts/2022-04-16-CS180.md b/_posts/2022-04-16-CS180.md
new file mode 100644
index 000000000..ead80cf56
--- /dev/null
+++ b/_posts/2022-04-16-CS180.md
@@ -0,0 +1,28 @@
+---
+layout: post
+title: "Keys for Success in CS180"
+description: "CS180 is a Purdue CS rite of passage, but with these tips, you can get through!"
+author: Christopher Lehman
+date: 2022-04-16 09:00:00 -0400
+categories: FreshmanYear, CS180
+---
+Walking into CS180 for the first time I was met with a combination of exhilaration and nervousness. Never before had I taken a class with so many other people and I couldn’t wrap my head around how it would work. How do they give assignments and grade them for everyone? How does the professor answer questions if someone is confused? Do my classmates know the same level of programming? It took some time and effort, but I did get acquainted with the environment and found my groove with lectures, labs, assignments, and tests. Even as a senior looking back, CS180 ended up being one of my favorite classes at Purdue and I’d like to share some tips that helped me along the way.
+
+Find a Study Group - Whether it’s fellow students in your lab, or other CS majors on your dorm floor, do your best to meet and get to know people in a similar situation as you. You’ll be amazed at the good times that will come: laughing about silly NullPointerExceptions or catching the midnight midterm grind reviewing the intricacies of polymorphism. Plus, it’s great to have some fun experiences to share when you need a break from studying. I especially enjoyed playing basketball at the CoRec and board games like Werewolf.
+
+Ask Questions - There will be an online forum like Piazza or Campuswire with a plethora of questions about the current assignments and lecture topics that are very helpful! I encourage you to browse, add to, or – if you’re feeling confident – answer another student’s question! It’s also great to follow the questions students are asking in lecture, often on an app like Hotseat. The TA’s watch and answer questions so you can get clarifications without breaking the flow of the ongoing lecture.
+
+Use the Debugger - The debugger is a tool built into most programming applications, including IntelliJ which you will use for this class. Admittedly, it looks menacing when you first learn it. There’s too many buttons and it feels like you need an instruction manual to use it right. Give it some time, however, and you’ll see how powerful it can be. When trying to track the state of your program, print statements help sometimes but the debugger’s ability to show all variable values and see how executing each line of code changes was extremely valuable to me as I resolved the peskiest of bugs.
+
+Start Assignments Early - It’s fine if you don’t finish early, but it goes a long way to start looking at the handout for the new homework or project when it first comes out. I would often reach a mental block on assignments in which I faced an issue and nothing I did seems to make progress toward a resolution. Nine times out of ten, taking a break and looking at it with fresh eyes helped me find a fix instantly, but I could only do this if the deadline was a few days away.
+
+Utilize the Resources Available - There is no other class that has as many resources available as CS180, because…it’s tough! If your code has even one bug, you probably won’t be passing the test cases with full credit. Not to worry, the resources – Office Hours, SI Sessions, USB Help Room, Lab Sessions – are a lifesaver. They can be intimidating at first, but if you prepare a question and come ready to explain to the TA/tutor the issue and what you have tried to fix it, they can guide you to a better understanding so you can solve it at last.
+
+Don’t Get Caught Up on the Details - CS180 doesn’t just teach you the Java programming language, it teaches you how to learn. In reality, no skilled programmer knows all the small details off hand, but rather how to properly research and read documentation to look up the correct syntax when needed. So don’t sweat it! When learning how to code, it can be frustrating trying to keep track of the intricacies like when to use length vs length() or how to format a class constructor. You might find it more useful to view the class as a tool, teaching you to use tools like StackOverflow and built-in IDE resources to figure out the correct code, and slowly but surely the process will become natural.
+
+Most importantly, enjoy the ride! Best of luck!
+
+
+
+
+
diff --git a/_posts/2022-04-16-degreeplus.md b/_posts/2022-04-16-degreeplus.md
new file mode 100644
index 000000000..920ae2fa4
--- /dev/null
+++ b/_posts/2022-04-16-degreeplus.md
@@ -0,0 +1,24 @@
+---
+layout: post
+title: "Interested in Degree+?"
+description: "Taking languages classes unlocked a different perspective"
+author: Emily Hao
+date: 2022-04-16 09:00:00 -0400
+categories: Degree+
+---
+One of the most useful assignments I did for CS 19100 was creating a plan of study for my next four years at Purdue. While looking into the various course requirements for the different tracks, the College of Science, and the University Core Curriculum, I found that I had a lot more space in my schedule to take elective courses than I had expected. In large part due to the credit I earned in high school, but also a surprising amount of double counting, I had very few requirements left to fulfill for the College of Science core curriculum in particular. I would need to add credits to my schedule, with a dilemma of where those credits would come from.
+
+Conveniently for me, I had heard of Degree+ both through 191 and my German professor. Initially, I did not give the program much thought, but after doing more research on the Degree+ program, I decided eventually to talk to my advisor and pursue a German major in addition to Computer Science.
+
+The Degree+ program is designed to allow students to pursue an additional major in the College of Liberal Arts with the Liberal Arts core waived. For me, this meant I would only need to take eight additional courses, and all specific to the German major. Of course, this may differ from person to person depending on the major they choose to pursue and the classes they have or have not already taken or received credit for.
+
+While my decision to add a Degree+ major (rather than simply adding a minor, or taking more elective courses of my choosing) was primarily influenced by the amount of flexibility I had with my schedule, there were other factors involved. Perhaps the most important was that I enjoyed German, and could see myself continuing to enjoy it beyond a few language courses. If I were any less interested in German, I know that I would have chosen to do something else with the space I had in my schedule. More broadly, I did not want to box myself into exclusively taking technical STEM-related courses for the rest of my time at Purdue. I believe it is important to experience some variety in the education you receive, because many of the skills gained in different environments are transferable elsewhere. Furthermore, the difference in perspective can be valuable in affecting your approach or understanding of one or another subject; no field is truly independent of other fields. Finally, proficiency in a foreign language has practical value beyond college as well—a fact many are certainly familiar with.
+
+After considering these factors and making my decision, officially adding German to my major was itself extremely simple. My current advisor submitted a curriculum change request (CODO), the request was reviewed by the College of Liberal Arts, and once approved on their end, I approved it myself through MyPurdue.
+
+I wanted to add a German major because I found it interesting and useful, and doing so was (by design) an easy process that didn’t add unmanageable amounts to my workload. Degree+ isn’t for everyone, and the commitment involved certainly isn’t zero, but any student outside of the College of Liberal Arts can easily choose to do the same, whether they want to add a major in philosophy, political science, or even theater.
+
+For those interested, more information can be found here: https://www.cla.purdue.edu/undergradci/degreeplus/index.html.
+
+
+
diff --git a/_posts/2022-04-18-csexercise.md b/_posts/2022-04-18-csexercise.md
new file mode 100644
index 000000000..294ab1a68
--- /dev/null
+++ b/_posts/2022-04-18-csexercise.md
@@ -0,0 +1,28 @@
+---
+layout: post
+title: "Balancing CS and Exercise"
+description: "Health and Fitness @ Purdue"
+author: Weiyi Tan
+date: 2022-04-18 09:00:00 -0400
+categories: exercise
+---
+
+Growing up as an athlete in my home country, I was exercising almost daily since part of my day was already reserved for our practice sessions. I knew that every day, from 5 to 8 pm, I would be in the pool training my synchronized swimming techniques. However, when I came to Purdue without any athletic responsibilities, it was hard to regain the same discipline and motivation to exercise as I once had. I would usually plan to go to the gym earlier in the day, but then put it off and lay in bed instead. Then, I found out about GroupX, a fitness program offered by Purdue RecWel1, and it is now a constant part of my life at Purdue.
+
+GroupX contains different types of classes for different fitness levels. It ranges from fun classes, such as Zumba and African Dance, to intense ones, such as HIIT and Cycle. The best thing about it, at least for me, is that you get to work out with other people! There is something about seeing other people panting and struggling that motivates you to continue exercising. The instructors would often shout words of encouragement too, inspiring you to push through the sweat and tears.
+
+Another reason why I love GroupX is that there are so many classes every weekday. They even hold BodyPump and Cycle classes, the most popular ones, twice a day! So, despite my busy schedule, I could still have time to attend my favorite GroupX classes. Additionally, I like that they have a no-show policy as it forces me to exercise when I’m lazy. Regardless of how I am feeling before the GroupX class, I always leave the CoRec happier and more energetic. It also provides a short, needed break from my coding projects, allowing me to return with a fresh mind.
+
+If you are still hesitant about GroupX, it should be worth noting that GroupX is free (as of Spring 2022) to all students! So, it won’t hurt to try some of the classes, especially if you are new to exercise and don’t know where to start. Some of my recommendations for beginners are Barre, BodyPump, Total Body Strength, and Zumba. The first three are strength and toning workouts that focus on all muscle groups, while Zumba is a fun and easy-to-follow dance-fitness class. Then, when you feel stronger and are looking for more intense workouts, I would suggest trying Cycle, GRIT, HIIT, and Step. I would recommend starting with GRIT before trying HIIT as they are very similar, with the exception that GRIT is 15 minutes shorter.
+
+One piece of advice about registering for GroupX classes is to register early. All GroupX classes can be registered up to 72 hours in advance, so some of the popular classes could be fully booked before you know it. Though if you are unsure about your schedule, you could still check for class spots about an hour before the class since most people cancel last minute.
+
+At the end of the day, I hope GroupX positively benefits your Purdue experience just like it did mine. If you are afraid of attending a class alone, feel free to hit me up at wytan@purdue.edu and we could attend one together!
+
+Here are some helpful links to get started with GroupX!
+Steps for reserving a class, cancelling your reservation, and class descriptions: https://www.purdue.edu/recwell/fitness-wellness/fitness/group-x/index.php
+GroupX Schedule: https://www.purdue.edu/recwell/fitness-wellness/fitness/group-x/schedules.php
+
+
+
+
diff --git a/_posts/2022-05-24-technicalprojects.md b/_posts/2022-05-24-technicalprojects.md
new file mode 100644
index 000000000..096ab9bd0
--- /dev/null
+++ b/_posts/2022-05-24-technicalprojects.md
@@ -0,0 +1,52 @@
+---
+layout: post
+title: "Purdue Technical Projects"
+description: "Struggling to start personal projects, we can help."
+author: Sarah Pushparaj
+date: 2022-05-24 09:00:00 -0400
+categories: TechnicalProjects
+---
+Hey there!
+If you’re a CS or DS major, you know the importance of personal projects, whether it’s to
+amplify your resume/LinkedIn or to get a better understanding of a certain class topic.
+But what about starting a project just because you want to, because you are passionate about
+your field and want to make new contributions. Maybe you don’t like the way something is done,
+so you believe you can change it for the better. Or maybe you thought, I wish something like this
+existed and decided that you can make it happen?
+
+Picture this: you start that project, but you encounter obstacle after obstacle. You don’t
+have enough time to figure it out on your own, and you don’t have sufficient experience to
+practically apply concepts you’ve just learned. Or maybe, classes, work, and life gets in the way.
+What should you do?
+
+If you don’t already know, the Purdue Undergraduate Student Board exists to serve the
+Purdue CS/DS student community by acting as a liaison to the CS department.
+
+There’s always room for new ideas, for improvement, and that’s why we want to help!
+We’re working on a brand-new initiative, Purdue Technical Projects, so USB can actively
+sponsor your projects! Here’s the basic idea of how it’ll work:
+
+This initiative will be run throughout the semester. USB will set up a website that will
+feature existing student-created Purdue-related projects and an area where students can input
+their project ideas. There will also be a submission box for already completed projects, and
+every project will be vetted by our initiative team before it is accepted. In the first month of the
+semester, students can enter their project ideas and the support they seek, in terms of group
+size and experience. Throughout the next couple of months, groups can be finalized and they
+can start implementing their projects. At the end of the semester, we will host a panel in which
+groups can showcase their projects, with the goal of acknowledgment and widespread use
+throughout the Purdue community!
+
+We don’t want this to be another homework assignment or project for school, so USB’s
+role will be less restrictive. We’ll contact the groups, verify that progress is being made, and act
+as a point of contact. We’ll set up a discord server in which groups can communicate with each
+other as well as contact the initiative members for any questions/concerns/ideas. Even though
+it’s semester-based, if a group hasn’t finished their project, or feels that it’s not ready for the
+showcase, no worries! They can always present next semester.
+Project potentiality is exciting, especially Purdue-related projects. We all know and love
+Boilerexams (boilerexams.com), single-handedly saving our grades! There are so many things to keep track of as a
+student at Purdue, luckily the multitude of Purdue apps (created by students!) makes our lives
+easier.
+
+
+
+
diff --git a/_posts/2022-05-27-gradschool.md b/_posts/2022-05-27-gradschool.md
new file mode 100644
index 000000000..9584be323
--- /dev/null
+++ b/_posts/2022-05-27-gradschool.md
@@ -0,0 +1,56 @@
+---
+layout: post
+title: "Considering Graduate School at Purdue?"
+description: "If you are considering graduate school at Purdue, here are some incentives to apply."
+author: Pinaki Mohanty
+date: 2022-05-27 09:00:00 -0400
+categories: belonging
+---
+Considering Grad School at Purdue CS? If so, this blog post is just for you.
+
+A little bit about me(or why should you listen to me...). My name is Pinaki. I am a second-semester
+Master’s student in the CS+STAT Joint Masters at Purdue. I graduated from Purdue in May 2021 with a
+Bachelor in Computer Science with specializations in Machine Intelligence, Database and Information
+Systems, and Theory. I also minored in Math and Statistics.
+During my undergraduate years at Purdue, I have been a part of Association of Multicultural Computer
+Scientists(AMCS), Reach Out for Computer Science(ROCS), Global Science Partners(GSP), and of
+course Undergraduate Student Board for Computer Science(USB). I have been a part of USB, actively
+and passively, for more than three years. I have contributed to initiatives like TA Training and Virtual
+Office Hours. Advocating on behalf of students is something I enjoy doing and that is why I am here to
+help!
+A key concern amongst undergrads, often echoed via student forums, here at Purdue is the lack of
+knowledge about grad school. I am here to advocate why you should consider Purdue CS for an MS
+degree, especially if you are finishing/finished your undergrad at Purdue.
+What prompted me to go for an MS?
+I wanted to learn about topics whose discussion was beyond the scope of the classroom; I wanted to
+augment my knowledge. Also, I enjoyed school in general and wanted to explore research.
+I started applying for master's programs sometime around September 2020. I had all my decisions in by
+February-March 2021. Despite some really competitive offers, I decided to pursue my MS at Purdue
+owing to the following reasons.
+
+1. Cost of Living for some locations was 2-3x more than that of West Lafayette
+2. Teaching Assistantship: This was a big one because often MS programs do not offer
+assistantships. At Purdue, my tuition was covered, and I got a stipend once in two weeks. Taking
+a wide variety of courses at Purdue equips you with the knowledge of ‘how to run the course’.
+This also ensures constituency and quality. Keep in mind, being a GTA comes with a lot of
+responsibilities; you are in charge of the quality of the fabric of the curriculum. Also, my medical
+insurance was covered. I was essentially staff now.
+3. Familiarity with the department was another one. Purdue has been my home for 4 years. Saying
+goodbye can be hard :’)
+4. Influx of New Faculty (especially in AI, ML) made me stay at Purdue with the prospect of
+research collaboration
+5. Purdue’s CS MS Program offers MS Degrees in many flavors: General/Vanilla, CSE
+(Computational Sciences and Engineering), CLS (Computational Life Sciences), and CS+STAT.
+
+This factor made me strongly consider Purdue as this kind of flexibility was not available
+everywhere.
+Other than that, there is the 5 Year BS+MS combined degree program, which can help you save a year.
+This does not apply to me as I took 4 sweet years to complete my BS and then separately applied for an
+MS.
+If you are at the junction of deciding on grad school, I hope these pointers would make Purdue look like
+an attractive option.
+I also serve as the Undergraduate Committee Representative at the Graduate Student Board for Computer
+Science (GSB). If you have any questions, feel free to reach out. Boiler Up!
+
+
+
diff --git a/_sass/generate.scss b/_sass/generate.scss
new file mode 100644
index 000000000..7c6e80413
--- /dev/null
+++ b/_sass/generate.scss
@@ -0,0 +1,381 @@
+/*
+ Written as a substitute for Tailwind since GH pages is lame.
+ Would be immediately deprecated by Tailwind with little changes to current css.
+*/
+
+/* Source: https://gist.github.com/mattfelten/5c6ad6edb70c6ab10f5c377c21eda2f2
+ Modified by Zach Bryant
+*/
+@mixin generate-subclass($map, $attribute, $prefix: '-', $base: 'base', $remove: null, $important: false, $pseudo: false) {
+ @each $key, $value in $map {
+ @if $remove {
+ $key: str-replace($key, $remove, '');
+ }
+ $class: '.#{$key}';
+ @if & { // not top level class
+ $class: '{if($key != $base, #{$prefix}#{$key}, '')}';
+ }
+ #{$class} {
+ @include generate-pseudo-helper($pseudo) {
+ @include generate-helper($value, $attribute, $prefix, $base, $remove, $important);
+ }
+ }
+ }
+}
+
+// Helper for generating screen-size variants of each sub-class
+@mixin generate-helper($value, $attribute, $prefix, $base, $remove, $important) {
+ @if type-of($value) == 'map' {
+ @include generate-subclass($value, $attribute, $prefix, $base, $remove, $important);
+ }
+ @else if type-of($attribute) == 'list' {
+ // A group of attributes to set to the same value
+ @include screen-variant() {
+ @each $attr in $attribute {
+ @include generate-important-helper($value, $attr, $important)
+ }
+ }
+ }
+ @else {
+ @include screen-variant() {
+ @include generate-important-helper($value, $attribute, $important)
+ }
+ }
+}
+
+@mixin generate-pseudo-helper($pseudo) {
+ @if $pseudo {
+ @each $variant in $pseudo-classes {
+ @include pseudo-variant($variant) {
+ @content;
+ }
+ }
+ }
+ @else {
+ @content;
+ }
+}
+
+// Helper generates important styles
+@mixin generate-important-helper($value, $attribute, $important) {
+ #{$attribute}: $value#{if($important, ' !important', '')};
+}
+
+// Create a map of spacing values for a range
+@function range-space-map($start, $end) {
+ $map: ();
+ @for $index from $start through $end {
+ $map: map-merge($map, (abs($index): spacing-group($index)));
+ }
+ @return $map;
+}
+
+$spacings: range-space-map(0, $spacing-max-group);
+$spacings: map-merge($spacings, (auto: auto));
+
+$spacings-negative: range-space-map(-$spacing-max-group, -1);
+
+$pseudo-classes: (
+ 'hover',
+ 'focus',
+);
+
+$colors: (
+ transparent: transparent,
+ none: unset,
+ focus-color:$focus-color,
+ hint: $text-color-hint,
+ dark: $text-color,
+ light: $text-color-light,
+ primary: $primary-color,
+ accent: $accent-color,
+ blue: $accent-blue,
+ red: $accent-red,
+ purple: $accent-purple,
+ green: $accent-green,
+ orange: $accent-orange,
+ grey: (
+ base: $accent-grey,
+ light: $accent-grey-light,
+ ),
+) !default;
+@each $color, $value in $colors {
+ @if type-of($value) != 'map' {
+ $value: (base: $value);
+ }
+ $base: map-get($value, "base");
+ @if type-of($base) == "color" {
+ @if not map-has-key($value, "light") {
+ $value: map-merge($value, (light: tint($base, $percentage-lighten)))
+ }
+ @if not map-has-key($value, "dark") {
+ $value: map-merge($value, (dark: shade($base, $percentage-darken)))
+ }
+ }
+
+ $colors: map-merge($colors, ($color: $value));
+}
+
+@include generate-subclass($colors, 'color', $pseudo: false);
+
+$displays: (
+ block: block,
+ grid: grid,
+ none: none,
+ flex: flex,
+ contents: contents,
+ inherit: inherit,
+ inline: (
+ base: inline,
+ flex: inline-flex,
+ block: inline-block,
+ grid: inline-grid,
+ ),
+);
+@include generate-subclass($displays, 'display', $important: true);
+
+$flex-directions: ();
+@each $direction in ("row", "column") {
+ $map: (base: #{$direction}, reverse: #{$direction}-reverse);
+ $flex-directions: map-merge($flex-directions, ($direction: $map));
+}
+@include generate-subclass($flex-directions, 'flex-direction');
+
+$flex-wraps: ();
+@each $direction in ("row", "column") {
+ $wraps: (wrap: wrap, nowrap: nowrap);
+ $map: (base: $wraps, reverse: $wraps);
+ $flex-wraps: map-merge($flex-wraps, ($direction: $map));
+}
+@include generate-subclass($flex-wraps, ('flex-wrap', '-webkit-flex-wrap'), $prefix: '--', $important: true);
+
+.overflow {
+ $overflows: (
+ visible: visible,
+ scroll: scroll,
+ hidden: hidden,
+ );
+ @include generate-subclass($overflows, 'overflow');
+ &-x {
+ @include generate-subclass($overflows, 'overflow-x');
+ }
+ &-y {
+ @include generate-subclass($overflows, 'overflow-y');
+ }
+}
+
+.bg {
+ @include generate-subclass($colors, 'background-color');
+}
+
+.fill {
+ @include generate-subclass($colors, 'fill');
+}
+
+.justify {
+ $map: (
+ start: flex-start,
+ center: center,
+ end: flex-end,
+ around: space-around,
+ between:space-between
+ );
+ @include generate-subclass($map, 'justify-content')
+}
+
+.align- {
+ &content {
+ $map: (
+ start: flex-start,
+ center: center,
+ end: flex-end,
+ around: space-around,
+ between: space-between,
+ baseline: baseline,
+ stretch: stretch
+ );
+ @include generate-subclass($map, 'align-content');
+ }
+ &items {
+ $map: (
+ start: flex-start,
+ center: center,
+ end: flex-end,
+ baseline: baseline
+ );
+ @include generate-subclass($map, 'align-items');
+ }
+ &self {
+ $map: (
+ start: flex-start,
+ center: center,
+ end: flex-end,
+ around: space-around,
+ between: space-between,
+ baseline: baseline,
+ stretch: stretch
+ );
+ @include generate-subclass($map, 'align-self');
+ }
+}
+
+.text {
+ $map: (
+ left: left,
+ right: right,
+ center: center,
+ justify: justify
+ );
+ @include generate-subclass($map, 'text-align');
+
+ $map: (
+ nowrap: nowrap,
+ pre: pre,
+ pre-line: pre-line,
+ pre-wrap: pre-wrap,
+ );
+ @include generate-subclass($map, 'white-space');
+}
+
+$font-weights: (
+ normal: 400,
+ medium: 500,
+ semibold: 600,
+ bold: 700
+) !default;
+$font-styles: (
+ normal: normal,
+ italic: italic
+) !default;
+.font {
+ @include generate-subclass($font-sizes, 'font-size', $prefix: '-');
+ @include generate-subclass($font-weights, 'font-weight');
+ @include generate-subclass($font-styles, 'font-style', $prefix: '-');
+}
+
+
+$roundings: (
+ none: 0,
+ less: $border-radius-slight,
+ base: $border-radius,
+ more: $border-radius-more,
+ circle: 100%
+);
+.rounded {
+ @include generate-subclass($roundings, ('border-radius', '-webkit-border-radius'), $prefix: '--');
+}
+
+$borders: (
+ none: 0px,
+ base: $border-width,
+ thin: $border-width / 2,
+ thick: $border-width * 2,
+);
+.border {
+ @include generate-subclass($borders, 'border-width', $prefix: '-');
+ @include generate-subclass($colors, 'border-color');
+ & {
+ @extend .border;
+ border-style: solid;
+ }
+}
+
+
+/* Percentage sizing class generation */
+$percentages: (
+ half: 50%,
+ full: 100%,
+ auto: auto,
+);
+@each $denominator in $dimension-sizing-groups {
+ @for $numerator from 1 to $denominator {
+ $size: percentage($numerator / $denominator);
+ $key: "#{$numerator}\\/#{$denominator}";
+ $percentages: map-merge($percentages, ($key: $size));
+ }
+}
+
+$spacing-types: (margin, padding);
+$spacing-values: ($spacings, $percentages);
+$spacing-directions: (top: "-top", bottom: "-bottom", left: "-left", right: "-right", x: ("-left", "-right"), y: ("-top", "-bottom"), a: ("-left", "-right", "-top", "-bottom", ""));
+@each $type in $spacing-types {
+ $t: str-slice($type, 1, 1);
+ @each $direction, $attrs in $spacing-directions {
+ $d: str-slice($direction, 1, 1);
+ $prefix: $t + $d;
+ @if type-of($attrs) == 'list' {
+ $list: [];
+ @each $a in $attrs {
+ $list: append($list, $type + $a);
+ }
+ $attrs: $list;
+ } @else {
+ $attrs: $type + $attrs;
+ }
+ .#{$prefix} {
+ @each $values in $spacing-values {
+ @include generate-subclass($values, $attrs);
+ }
+ }
+ @if $type == "margin" {
+ .-#{$prefix} {
+ @include generate-subclass($spacings-negative, $attrs);
+ }
+ }
+ }
+}
+
+
+// Width/Height percentage classes
+@each $property in ("height", "width") {
+ .#{str-slice($property, 1, 1)} {
+ @include generate-subclass($percentages, $property);
+ @include generate-subclass($spacings, ($property));
+ }
+ .#{str-slice($property, 1, 1)}-max {
+ @include generate-subclass($percentages, $property);
+ @include generate-subclass($spacings, ('max-#{$property}'));
+ }
+ .#{str-slice($property, 1, 1)}-min {
+ @include generate-subclass($percentages, $property);
+ @include generate-subclass($spacings, ('min-#{$property}'));
+ }
+}
+
+
+/* Flex Shrink/Grow class generation */
+$max-grow-shrink-factor: 5;
+$grow-shrink-factors: (0:0);
+@for $factor from 0 through $max-grow-shrink-factor {
+ $grow-shrink-factors: map-merge($grow-shrink-factors, ($factor: $factor));
+}
+@each $property in ("grow", "shrink") {
+ .#{$property} {
+ @include generate-subclass($grow-shrink-factors, 'flex-#{$property}', $important: true);
+ }
+}
+
+
+/* Icon Sizing */
+$max-icon-multiple: 21;
+.icon {
+ $map: (
+ 0: 1.111rem
+ );
+ @for $factor from 1 through $max-icon-multiple {
+ $ratio: $factor * 0.75rem;
+ $map: map-merge($map, ($factor: $ratio));
+ }
+
+ @include generate-subclass($map, ('width', 'max-width', 'max-height'));
+ &-square {
+ @include generate-subclass($map, ('width', 'height'));
+ }
+}
+
+
+/* Classes to space away from edges */
+@each $position in (top, bottom, left, right) {
+ $map: ($position: $spacings);
+ @include generate-subclass($map, $position);
+}
diff --git a/_sass/minima.scss b/_sass/minima.scss
deleted file mode 100644
index cb0865b1a..000000000
--- a/_sass/minima.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-@charset "utf-8";
-
-// Define defaults for each variable.
-
-$base-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;
-$base-font-size: 16px !default;
-$base-font-weight: 400 !default;
-$small-font-size: $base-font-size * 0.875 !default;
-$base-line-height: 1.5 !default;
-
-$spacing-unit: 30px !default;
-
-$text-color: #111 !default;
-$background-color: #fdfdfd !default;
-$brand-color: #2a7ae2 !default;
-
-$grey-color: #828282 !default;
-$grey-color-light: lighten($grey-color, 40%) !default;
-$grey-color-dark: darken($grey-color, 25%) !default;
-
-$table-text-align: left !default;
-
-// Width of the content area
-$content-width: 800px !default;
-
-$on-palm: 600px !default;
-$on-laptop: 800px !default;
-
-// Use media queries like this:
-// @include media-query($on-palm) {
-// .wrapper {
-// padding-right: $spacing-unit / 2;
-// padding-left: $spacing-unit / 2;
-// }
-// }
-@mixin media-query($device) {
- @media screen and (max-width: $device) {
- @content;
- }
-}
-
-@mixin relative-font-size($ratio) {
- font-size: $base-font-size * $ratio;
-}
-
-// Import partials.
-@import
- "minima/base",
- "minima/layout",
- "minima/syntax-highlighting"
-;
diff --git a/_sass/minima/_base.scss b/_sass/minima/_base.scss
deleted file mode 100644
index f1aef9771..000000000
--- a/_sass/minima/_base.scss
+++ /dev/null
@@ -1,299 +0,0 @@
-/**
- * Reset some basic elements
- */
-body, h1, h2, h3, h4, h5, h6,
-p, blockquote, pre, hr,
-dl, dd, ol, ul, figure {
- margin: 0;
- padding: 0;
-}
-
-
-
-/**
- * Basic styling
- */
-body {
- font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family;
- color: $text-color;
- background-color: $background-color;
- -webkit-text-size-adjust: 100%;
- -webkit-font-feature-settings: "kern" 1;
- -moz-font-feature-settings: "kern" 1;
- -o-font-feature-settings: "kern" 1;
- font-feature-settings: "kern" 1;
- font-kerning: normal;
- display: flex;
- min-height: 100vh;
- flex-direction: column;
-}
-
-
-
-/**
- * Set `margin-bottom` to maintain vertical rhythm
- */
-h1, h2, h3, h4, h5, h6,
-p, blockquote, pre,
-ul, ol, dl, figure,
-%vertical-rhythm {
- margin-bottom: $spacing-unit / 2;
-}
-
-
-
-/**
- * `main` element
- */
-main {
- display: block; /* Default value of `display` of `main` element is 'inline' in IE 11. */
-}
-
-
-
-/**
- * Images
- */
-img {
- max-width: 100%;
- vertical-align: middle;
-}
-
-
-
-/**
- * Figures
- */
-figure > img {
- display: block;
-}
-
-figcaption {
- font-size: $small-font-size;
-}
-
-
-
-/**
- * Lists
- */
-ul, ol {
- margin-left: $spacing-unit;
-}
-
-li {
- > ul,
- > ol {
- margin-bottom: 0;
- }
-}
-
-
-
-/**
- * Headings
- */
-h1, h2, h3, h4, h5, h6 {
- font-weight: $base-font-weight;
-}
-
-
-
-/**
- * Links
- */
-a {
- color: $brand-color;
- text-decoration: none;
-
- &:visited {
- color: darken($brand-color, 15%);
- }
-
- &:hover {
- color: $text-color;
- text-decoration: underline;
- }
-
- .social-media-list &:hover {
- text-decoration: none;
-
- .username {
- text-decoration: underline;
- }
- }
-}
-
-
-/**
- * Blockquotes
- */
-blockquote {
- color: $grey-color;
- border-left: 4px solid $grey-color-light;
- padding-left: $spacing-unit / 2;
- @include relative-font-size(1.125);
- letter-spacing: -1px;
- font-style: italic;
-
- > :last-child {
- margin-bottom: 0;
- }
-}
-
-
-
-/**
- * Code formatting
- */
-pre,
-code {
- @include relative-font-size(0.9375);
- border: 1px solid $grey-color-light;
- border-radius: 3px;
- background-color: #eef;
-}
-
-code {
- padding: 1px 5px;
-}
-
-pre {
- padding: 8px 12px;
- overflow-x: auto;
-
- > code {
- border: 0;
- padding-right: 0;
- padding-left: 0;
- }
-}
-
-
-
-/**
- * Title
- */
-.title {
- background-color: #333333;
- padding-top: 7vh;
- text-align: center;
- height: 20vh;
- color: white;
- width: 100%;
- padding-bottom: 2vh;
-}
-
-.title .post-title {
- font-weight: 700;
- font-family: $base-font-family;
- font-size: 40px;
- margin-bottom: 3vh;
-}
-
-.title .post-subtitle {
- font-weight: 500;
- font-family: $base-font-family;
- font-size: 20px;
-}
-
-/**
- * Wrapper
- */
-.wrapper {
- max-width: -webkit-calc(#{$content-width});
- max-width: calc(#{$content-width});
- margin-right: auto;
- margin-left: auto;
- padding-right: $spacing-unit;
- padding-left: $spacing-unit;
- margin-top: $spacing-unit;
-
- @extend %clearfix;
-
- @include media-query($on-laptop) {
- max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));
- max-width: calc(#{$content-width} - (#{$spacing-unit}));
- padding-right: $spacing-unit / 2;
- padding-left: $spacing-unit / 2;
- }
-}
-
-.header-wrapper {
- max-width: inherit;
- margin-right: 3vh;
- margin-left: 3vh;
- padding-right: $spacing-unit;
- padding-left: $spacing-unit;
- @extend %clearfix;
-
- @include media-query($on-laptop) {
- max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));
- max-width: calc(#{$content-width} - (#{$spacing-unit}));
- padding-right: $spacing-unit / 2;
- padding-left: $spacing-unit / 2;
- }
-}
-
-
-
-/**
- * Clearfix
- */
-%clearfix:after {
- content: "";
- display: table;
- clear: both;
-}
-
-
-
-/**
- * Icons
- */
-
-.svg-icon {
- width: 20px;
- height: 20px;
- display: inline-block;
- fill: #{$grey-color};
- padding-right: 10px;
- padding-top: 3px;
- vertical-align: text-top;
-}
-
-.social-media-list {
- li + li {
- padding-top: 5px;
- }
-}
-
-
-
-/**
- * Tables
- */
-table {
- margin-bottom: $spacing-unit;
- width: 100%;
- text-align: $table-text-align;
- color: lighten($text-color, 18%);
- border-collapse: collapse;
- border: 1px solid $grey-color-light;
- tr {
- &:nth-child(even) {
- background-color: lighten($grey-color-light, 6%);
- }
- }
- th, td {
- padding: ($spacing-unit / 3) ($spacing-unit / 2);
- }
- th {
- background-color: lighten($grey-color-light, 3%);
- border: 1px solid darken($grey-color-light, 4%);
- border-bottom-color: darken($grey-color-light, 12%);
- }
- td {
- border: 1px solid $grey-color-light;
- }
-}
diff --git a/_sass/minima/_layout.scss b/_sass/minima/_layout.scss
deleted file mode 100644
index 1ba498dd0..000000000
--- a/_sass/minima/_layout.scss
+++ /dev/null
@@ -1,268 +0,0 @@
-/**
- * Site header
- */
-.site-header {
- min-height: $spacing-unit * 1.865;
- background-color: #FFCA44;
-
- // Positioning context for the mobile navigation icon
- position: relative;
- grid-area: head;
-}
-
-.site-title {
- @include relative-font-size(1.625);
- font-weight: 300;
- line-height: $base-line-height * $base-font-size * 2.25;
- letter-spacing: -1px;
- margin-bottom: 0;
- float: left;
-
- &,
- &:visited {
- color: $grey-color-dark;
- }
-}
-
-.site-nav {
- z-index: 1;
- float: right;
- line-height: $base-line-height * $base-font-size * 2.25;
-
- .nav-trigger {
- display: none;
- }
-
- .menu-icon {
- display: none;
- }
-
- .page-link {
- color: $text-color;
- line-height: $base-line-height;
-
- // Gaps between nav items, but not on the last one
- &:not(:last-child) {
- margin-right: 20px;
- }
- }
-
- .footer-page-link {
- color: $background-color;
- line-height: $base-line-height;
-
- // Gaps between nav items, but not on the last one
- &:not(:last-child) {
- margin-right: 20px;
- }
- }
-
- @include media-query($on-palm) {
- position: absolute;
- top: 9px;
- right: $spacing-unit / 2;
- background-color: $background-color;
- border: 1px solid $grey-color-light;
- border-radius: 5px;
- text-align: right;
-
- label[for="nav-trigger"] {
- display: block;
- float: right;
- width: 36px;
- height: 36px;
- z-index: 2;
- cursor: pointer;
- }
-
- .menu-icon {
- display: block;
- float: right;
- width: 36px;
- height: 26px;
- line-height: 0;
- padding-top: 10px;
- text-align: center;
-
- > svg {
- fill: $grey-color-dark;
- }
- }
-
- input ~ .trigger {
- clear: both;
- display: none;
- }
-
- input:checked ~ .trigger {
- display: block;
- padding-bottom: 5px;
- }
-
- .page-link {
- display: block;
- padding: 5px 10px;
-
- &:not(:last-child) {
- margin-right: 0;
- }
- margin-left: 20px;
- }
- }
-}
-
-
-
-/**
- * Site footer
- */
-.site-footer {
- border-top: 1px solid $grey-color-light;
- background-color: #333333;
- color: white;
- grid-area: footer;
-}
-
-.footer-heading {
- @include relative-font-size(1.125);
- margin-bottom: $spacing-unit / 2;
-}
-
-.contact-list,
-.social-media-list {
- list-style: none;
- margin-left: 0;
-}
-
-.footer-col-wrapper {
- @include relative-font-size(0.9375);
- color: $grey-color;
- margin-left: -$spacing-unit / 2;
- @extend %clearfix;
-}
-
-.footer-col {
- float: left;
- margin-bottom: $spacing-unit / 2;
- padding-left: $spacing-unit / 2;
-}
-
-.footer-col-1 {
- width: -webkit-calc(35% - (#{$spacing-unit} / 2));
- width: calc(35% - (#{$spacing-unit} / 2));
-}
-
-.footer-col-2 {
- width: -webkit-calc(20% - (#{$spacing-unit} / 2));
- width: calc(20% - (#{$spacing-unit} / 2));
-}
-
-.footer-col-3 {
- width: -webkit-calc(45% - (#{$spacing-unit} / 2));
- width: calc(45% - (#{$spacing-unit} / 2));
-}
-
-@include media-query($on-laptop) {
- .footer-col-1,
- .footer-col-2 {
- width: -webkit-calc(50% - (#{$spacing-unit} / 2));
- width: calc(50% - (#{$spacing-unit} / 2));
- }
-
- .footer-col-3 {
- width: -webkit-calc(100% - (#{$spacing-unit} / 2));
- width: calc(100% - (#{$spacing-unit} / 2));
- }
-}
-
-@include media-query($on-palm) {
- .footer-col {
- float: none;
- width: -webkit-calc(100% - (#{$spacing-unit} / 2));
- width: calc(100% - (#{$spacing-unit} / 2));
- }
-}
-
-
-
-/**
- * Page content
- */
-.page-content {
- //padding: $spacing-unit 0;
- flex: 1;
-}
-
-.page-heading {
- @include relative-font-size(2);
-}
-
-.post-list-heading {
- @include relative-font-size(1.75);
-}
-
-.post-list {
- margin-left: 0;
- list-style: none;
-
- > li {
- margin-bottom: $spacing-unit;
- }
-}
-
-.post-meta {
- font-size: $small-font-size;
- color: $grey-color;
-}
-
-.post-link {
- display: block;
- @include relative-font-size(1.5);
-}
-
-
-
-/**
- * Posts
- */
-.post-header {
- margin-bottom: $spacing-unit;
-}
-
-.post-title {
- @include relative-font-size(2.625);
- letter-spacing: -1px;
- line-height: 1;
-
- @include media-query($on-laptop) {
- @include relative-font-size(2.25);
- }
-}
-
-.post-content {
- margin-bottom: $spacing-unit;
-
- h2 {
- @include relative-font-size(2);
-
- @include media-query($on-laptop) {
- @include relative-font-size(1.75);
- }
- }
-
- h3 {
- @include relative-font-size(1.625);
-
- @include media-query($on-laptop) {
- @include relative-font-size(1.375);
- }
- }
-
- h4 {
- @include relative-font-size(1.25);
-
- @include media-query($on-laptop) {
- @include relative-font-size(1.125);
- }
- }
-}
diff --git a/_sass/minima/_syntax-highlighting.scss b/_sass/minima/_syntax-highlighting.scss
deleted file mode 100644
index bccdb8995..000000000
--- a/_sass/minima/_syntax-highlighting.scss
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * Syntax highlighting styles
- */
-.highlight {
- background: #fff;
- @extend %vertical-rhythm;
-
- .highlighter-rouge & {
- background: #eef;
- }
-
- .c { color: #998; font-style: italic } // Comment
- .err { color: #a61717; background-color: #e3d2d2 } // Error
- .k { font-weight: bold } // Keyword
- .o { font-weight: bold } // Operator
- .cm { color: #998; font-style: italic } // Comment.Multiline
- .cp { color: #999; font-weight: bold } // Comment.Preproc
- .c1 { color: #998; font-style: italic } // Comment.Single
- .cs { color: #999; font-weight: bold; font-style: italic } // Comment.Special
- .gd { color: #000; background-color: #fdd } // Generic.Deleted
- .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
- .ge { font-style: italic } // Generic.Emph
- .gr { color: #a00 } // Generic.Error
- .gh { color: #999 } // Generic.Heading
- .gi { color: #000; background-color: #dfd } // Generic.Inserted
- .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
- .go { color: #888 } // Generic.Output
- .gp { color: #555 } // Generic.Prompt
- .gs { font-weight: bold } // Generic.Strong
- .gu { color: #aaa } // Generic.Subheading
- .gt { color: #a00 } // Generic.Traceback
- .kc { font-weight: bold } // Keyword.Constant
- .kd { font-weight: bold } // Keyword.Declaration
- .kp { font-weight: bold } // Keyword.Pseudo
- .kr { font-weight: bold } // Keyword.Reserved
- .kt { color: #458; font-weight: bold } // Keyword.Type
- .m { color: #099 } // Literal.Number
- .s { color: #d14 } // Literal.String
- .na { color: #008080 } // Name.Attribute
- .nb { color: #0086B3 } // Name.Builtin
- .nc { color: #458; font-weight: bold } // Name.Class
- .no { color: #008080 } // Name.Constant
- .ni { color: #800080 } // Name.Entity
- .ne { color: #900; font-weight: bold } // Name.Exception
- .nf { color: #900; font-weight: bold } // Name.Function
- .nn { color: #555 } // Name.Namespace
- .nt { color: #000080 } // Name.Tag
- .nv { color: #008080 } // Name.Variable
- .ow { font-weight: bold } // Operator.Word
- .w { color: #bbb } // Text.Whitespace
- .mf { color: #099 } // Literal.Number.Float
- .mh { color: #099 } // Literal.Number.Hex
- .mi { color: #099 } // Literal.Number.Integer
- .mo { color: #099 } // Literal.Number.Oct
- .sb { color: #d14 } // Literal.String.Backtick
- .sc { color: #d14 } // Literal.String.Char
- .sd { color: #d14 } // Literal.String.Doc
- .s2 { color: #d14 } // Literal.String.Double
- .se { color: #d14 } // Literal.String.Escape
- .sh { color: #d14 } // Literal.String.Heredoc
- .si { color: #d14 } // Literal.String.Interpol
- .sx { color: #d14 } // Literal.String.Other
- .sr { color: #009926 } // Literal.String.Regex
- .s1 { color: #d14 } // Literal.String.Single
- .ss { color: #990073 } // Literal.String.Symbol
- .bp { color: #999 } // Name.Builtin.Pseudo
- .vc { color: #008080 } // Name.Variable.Class
- .vg { color: #008080 } // Name.Variable.Global
- .vi { color: #008080 } // Name.Variable.Instance
- .il { color: #099 } // Literal.Number.Integer.Long
-}
diff --git a/_sass/mixins.scss b/_sass/mixins.scss
new file mode 100644
index 000000000..ab06724cc
--- /dev/null
+++ b/_sass/mixins.scss
@@ -0,0 +1,319 @@
+@mixin google-font($family, $variants) {
+ @import url('https://fonts.googleapis.com/css2?family=#{$family}:wght@#{$variants}&display=swap');
+}
+
+/* Credit: https://css-tricks.com/snippets/css/less-mixin-for-rem-font-sizing/ */
+@function strip-unit($num) {
+ @return $num / ($num * 0 + 1);
+}
+
+@mixin rem-fallback($property, $values...) {
+ $max: length($values);
+ $pxValues: '';
+ $remValues: '';
+
+ @for $i from 1 through $max {
+ $value: strip-unit(nth($values, $i));
+ $pxValues: #{$pxValues + $value*16}px;
+
+ @if $i < $max {
+ $pxValues: #{$pxValues + " "};
+ }
+ }
+
+ @for $i from 1 through $max {
+ $value: strip-unit(nth($values, $i));
+ $remValues: #{$remValues + $value}rem;
+
+ @if $i < $max {
+ $remValues: #{$remValues + " "};
+ }
+ }
+
+ #{$property}: $pxValues;
+ #{$property}: $remValues;
+}
+
+/* Credit: https://css-tricks.com/snippets/sass/power-function/
+ Modified by Zach Bryant
+*/
+@function pow($number, $exponent) {
+ $value: 1;
+
+ @if $exponent>0 {
+ @for $i from 1 through $exponent {
+ $value: $value * $number;
+ }
+ }
+
+ @else if $exponent < 0 {
+ @for $i from $exponent through -1 {
+ $value: $value * $number;
+ }
+
+ $value: 1 / $value;
+ }
+
+ @return $value;
+}
+
+/// Slightly lighten a color
+@function tint($color, $percentage) {
+ @return mix(white, $color, $percentage);
+}
+
+/// Slightly darken a color
+@function shade($color, $percentage) {
+ @return mix(black, $color, $percentage);
+}
+
+/* Font Mixins */
+@mixin font-size($arg) {
+ font-size: map-get($font-sizes, $arg);
+}
+@mixin font-family($arg) {
+ font-family: map-get($font-families, $arg);
+}
+@mixin font-weight($arg) {
+ font-weight: map-get($font-weights, $arg);
+}
+@mixin font-base {
+ color: $text-color;
+}
+
+@mixin font-body {
+ @include font-base;
+ @include font-family("body");
+}
+
+@mixin font-header {
+ @include font-base;
+ @include font-family("header");
+}
+
+@mixin font-normal {
+ @include font-weight("base");
+}
+
+@mixin font-medium {
+ @include font-weight("medium");
+}
+
+@mixin font-semibold {
+ @include font-weight("semibold");
+}
+
+@mixin font-bold {
+ @include font-weight("bold");
+}
+
+@mixin font-button {
+ @include font-bold;
+ @include font-header;
+ @include font-size("button");
+}
+
+@mixin rounded($radius) {
+ border-radius: $radius;
+ -webkit-border-radius: $radius;
+}
+
+@mixin border($color, $width) {
+ border: $width solid $color;
+}
+
+@mixin shadow($type: 'drop', $size: $shadow-default, $color: $shadow-color-default) {
+ @if $type == 'drop' or $type == 'drop-shadow' {
+ -webkit-transform: translateZ(0);
+ -webkit-perspective: 1000;
+ -webkit-backface-visibility: hidden;
+ -webkit-filter: drop-shadow(#{$size} #{$color});
+ filter: drop-shadow(#{$size} #{$color});
+ transition: filter $animation-delay ease-in-out;
+ }
+ @else {
+ #{$type}: #{$size} #{$color};
+ transition: #{$type} $animation-delay ease-in-out;
+ }
+}
+
+@mixin shadow-box {
+ @include shadow('box-shadow');
+}
+
+@mixin shadow-text {
+ @include shadow('text-shadow');
+}
+
+@mixin shadow-drop {
+ @include shadow('drop-shadow');
+}
+
+@mixin shadow-none {
+ box-shadow: none !important;
+ text-shadow: none !important;
+ filter: none !important;
+}
+
+@mixin justify($arg) {
+ justify-content: $arg;
+}
+
+@mixin clickable {
+ cursor: pointer;
+ @include shadow-drop;
+ @extend .shadow-drop--center--soft\:hover;
+}
+
+@mixin flex-even {
+ display: flex;
+ display: -webkit-flex;
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: auto;
+}
+
+
+/* Sizing mixins */
+@mixin media-query($above: null, $below: null) {
+ @if $above and $below {
+ @media screen and (min-width: $above) and (max-width: $below) {
+ @content;
+ }
+ }
+ @else {
+ @if $above {
+ @media screen and (min-width: $above) {
+ @content;
+ }
+ }
+ @if $below {
+ @media screen and (max-width: $below) {
+ @content;
+ }
+ }
+ }
+}
+
+
+/* Spacing Mixins */
+@function spacing-group($index) {
+ //$num: pow($spacing-base, $index - 2);
+ @return #{$index * $spacing-multiple};
+}
+
+// Paddings
+@mixin p-bottom($size) {
+ padding-bottom: $size;
+}
+
+@mixin p-top($size) {
+ padding-top: $size;
+}
+
+@mixin py($size) {
+ @include p-top($size);
+ @include p-bottom($size);
+}
+
+@mixin p-left($size) {
+ padding-left: $size;
+}
+
+@mixin p-right($size) {
+ padding-right: $size;
+}
+
+@mixin px($size) {
+ @include p-left($size);
+ @include p-right($size);
+}
+
+@mixin pa($size) {
+ @include px($size);
+ @include py($size);
+ padding: $size;
+}
+
+// Margins
+@mixin m-bottom($size) {
+ margin-bottom: $size;
+}
+
+@mixin m-top($size) {
+ margin-top: $size;
+}
+
+@mixin my($size) {
+ @include m-top($size);
+ @include m-bottom($size);
+}
+
+@mixin m-left($size) {
+ margin-left: $size;
+}
+
+@mixin m-right($size) {
+ margin-right: $size;
+}
+
+@mixin mx($size) {
+ @include m-left($size);
+ @include m-right($size);
+}
+
+@mixin ma($size) {
+ @include mx($size);
+ @include my($size);
+ margin: $size;
+}
+
+@mixin screen-variant($prefix:"\\@", $variant-only: false) {
+
+ @each $name, $vals in $screens {
+ #{if(&, '&', '.')}#{$prefix}#{$name} {
+ @include screen-variant-helper($vals) {
+ @content;
+ }
+ }
+ }
+ @if not $variant-only {
+ @content;
+ }
+}
+
+@mixin screen-variant-helper($vals) {
+ $min: map-get($vals, "min");
+ $max: map-get($vals, "max");
+
+ @if $min {
+ &-above { @include media-query($above: $min) { @content; } }
+ }
+ @if $max {
+ &-below { @include media-query($below: $max) { @content; } }
+ }
+
+ @if $min and $max {
+ @include media-query($below: $max, $above: $min) { @content; }
+ }
+}
+
+@mixin screen-variant-force($attribute, $value) {
+ @if type-of($attribute) == 'list' {
+ @each $attr in $attribute {
+ #{$attr}: #{$value};
+ }
+ }
+ @else {
+ #{$attribute}: #{$value};
+ }
+}
+
+@mixin pseudo-variant($pseudo) {
+ &\:#{$pseudo} {
+ &:#{$pseudo} {
+ @content;
+ }
+ }
+ @content;
+}
diff --git a/_sass/pages/_about.scss b/_sass/pages/_about.scss
index 46ab9ba4b..cb007c1e9 100644
--- a/_sass/pages/_about.scss
+++ b/_sass/pages/_about.scss
@@ -1,228 +1,52 @@
-.about-title {
- font-size: 40px;
- padding-top: 10vh;
- text-align: center;
- background-color: $usb-gray;
- height: 20vh;
- color: white;
- font-weight: 700;
-}
-
-.aboutus h1 {
- font-weight: bolder;
-}
-
-
-.banner {
- background-color: $usb-gray;
- width: 100%;
- padding-bottom: 5vh;
- justify-content: center;
- //height: 70vh;
- height:500px;
-}
-
-.home {
- flex: 1;
-}
-
-.row {
- display: flex;
- }
-
-.column {
- flex: 50%;
-}
-
-.banner-grid {
- display: grid;
- grid-template-columns: 2fr 1fr;
- justify-items: right;
- padding-top: 11vh;
- align-content: flex-start;
-}
-
-.banner-text {
- margin-left: 3vh;
- color:white;
- margin-right: 25%;
- max-width: 70%;
- grid-row: 1;
- grid-column: 2 / 3;
- text-align: left;
-}
-
-.banner-text h5 {
- font-size: medium;
-}
-
-.banner-image {
- margin-right: 5vh;
- margin-left: 5vh;
- max-width: 100%;
- padding-top: 40px;
- grid-row: 1;
- grid-column: 1 / 2;
+/* CSS for /aboutus */
-}
-
-.banner button{
- background-color: $usb-yellow;
- border: none;
- border-radius: 4px;
- font-weight: bold;
- font-size: 1em;
- padding: 10px;
-}
-
-#triangle {
- position: absolute;
- left: 45vw;
- width: 0;
- height: 0;
- border-bottom: 470px solid $usb-yellow;
- border-right: 150px solid transparent;
- z-index: 1;
-}
-
-#rectangle {
- position: absolute;
- background-color: $usb-yellow;
- height: 470px;
- width: 45vw;
- z-index: 2;
-
- h2 {
- font-weight: bold;
- padding-top: 1vh;
- margin-right: 40px;
- text-align: center;
+/*! purgecss start ignore */
+.bg {
+ &--angled {
+ @include media-query($above: $screen-xlarge-min) {
+ background: linear-gradient(to top right, $bg-angle-color 69%, transparent 0%) no-repeat top,
+ linear-gradient(0deg, $bg-angle-color, $bg-angle-color) no-repeat bottom;
+ background-size: 100% $bg-angle, 100% calc(100% - calc(#{$bg-angle} - 2px));
+ }
}
-
- p {
- font-size: 20px;
+ &--angled-mobile {
+ @include media-query($below: $screen-large) {
+ background: linear-gradient(to bottom right, $bg-angle-color 50%, transparent 0%) no-repeat bottom,
+ linear-gradient(30deg, $bg-angle-color, $bg-angle-color) no-repeat top;
+ background-size: 100% $bg-angle-mobile, 100% calc(100% - calc(#{$bg-angle-mobile} - 2px));
+ @include p-bottom(spacing-group(12));
+ @include m-bottom(spacing-group(8));
+ }
}
}
-#rectangle-text {
- position: absolute;
- max-width: 500px;
- right:0;
- padding-left: 20px;
- padding-top: 100px;
-}
-
-#mission-container {
- width:60vw;
- height: 250px;
- min-width: 600px;
-}
-
-#objectives {
- padding-top: 3vh;
- width: 35vw;
- display: flex;
- flex-direction: column;
-}
-
-#objectives h2 {
- font-weight: bold;
- flex-grow: 1;
-}
-
-#objectiveParts {
- display: flex;
- flex-direction: column;
-}
-
.objective {
- display: flex;
- flex-direction: row;
- max-width: 500px;
- min-width: 200px;
- padding-right: 20px;
-}
-
-.objective-text {
- display: flex;
- flex-direction: column;
- padding-left: 15px;
-
- h3 {
- margin-top: 5px;
- margin-bottom: 5px;
- font-weight: bold;
+ @include media-query($below: $screen-small) {
+ max-width: 100%;
}
- p {
- margin-bottom: 5vh;
+ @include media-query($above: $screen-medium-min) {
+ max-width: 45%;
}
}
-@media (max-width: 915px) {
- .banner-grid {
- display: block;
- padding-top: 5vh;
+.section- {
+ $mission-width: 45%;
+ $objectives-width: 45%;
+ &mission {
+ width: $mission-width;
+ max-width: $mission-width;
}
-
- .banner-text {
- color:white;
- padding-top: 2vh;
- margin-top: 2vh;
- width: auto;
- max-width: none;
- position: relative;
- display: block;
- margin-right: 5%;
+ &objectives {
+ width: $objectives-width;
+ max-width: $objectives-width;
}
-
- .banner-image {
- width: auto;
- max-width: none;
- position: relative;
- display: block;
- margin-left: 2vh;
- margin-right: 2vh;
- padding-top: 3vh;
- }
-
- #triangle {
- display: none;
- }
- #rectangle {
- width: auto;
- height: auto;
- position: relative;
- display: block;
- z-index: 0;
- }
- #rectangle-text {
- width: auto;
- max-width: none;
- position: relative;
- display: block;
- padding-top: 10px;
- padding-right: 10px;
- padding-bottom: 10px;
-
- }
- #rectangle h1 {
- text-align: left;
- margin: auto;
- padding-left: 0px;
- }
- #rectangle p {
- padding-left: 0px;
- }
- #mission-container {
- display: none;
- }
- .objective {
- max-width: none;
- }
- #objectives {
- width: 100%;
- padding-left: 10px;
- padding-right: 10px;
+ &objectives, &mission {
+ @include media-query($below: $screen-large) {
+ width: 100%;
+ max-width: 100%;
+ }
}
+
}
+/*! purgecss end ignore */
diff --git a/_sass/pages/_blog.scss b/_sass/pages/_blog.scss
new file mode 100644
index 000000000..8c4f1dc85
--- /dev/null
+++ b/_sass/pages/_blog.scss
@@ -0,0 +1,91 @@
+article {
+ p img {
+ &:not(.emoji) {
+ margin: 0 auto;
+ margin-bottom: spacing-group(4);
+ @extend .block, .rounded;
+ }
+ &.emoji {
+ @extend .-mt-2;
+ }
+ }
+
+ p {
+ @extend .justify-around, .align-items-center;
+ }
+
+ section:nth-of-type(2) p, li {
+ @extend .font--height-high;
+ }
+
+ code {
+ @extend .text-left;
+ }
+
+ h1, h2, h3, h4, h5, h6, .heading {
+ @extend .mb-2, .mt-8, .text-left;
+ }
+}
+
+label[for="rate-good"], label[for="rate-bad"] {
+ @extend .grey;
+}
+
+#rate-bad {
+ & + label[for="rate-bad"] {
+ &:hover {
+ @extend .red;
+ }
+ }
+
+ &:checked + label[for="rate-bad"] {
+ @extend .red;
+ }
+}
+
+#rate-good {
+ & + label[for="rate-good"] {
+ &:hover {
+ @extend .green-dark;
+ }
+ }
+
+ &:checked + label[for="rate-good"] {
+ @extend .green-dark;
+ }
+}
+
+.lightcase-img {
+ @extend .clickable;
+}
+
+#lightcase-info #lightcase-caption {
+ @extend .light;
+}
+
+#lightcase-overlay {
+ background: #000;
+}
+
+.lightcase-icon-close {
+ &:before{
+ content: '×';
+ }
+ @extend .no-decoration, .flat;
+ color: $accent-grey !important;
+ &:hover {
+ color: $text-color-light !important;
+ }
+}
+
+.wiki-shim {
+ width: 100%;
+ max-width: 35rem;
+ min-width: 16rem;
+}
+
+#post {
+ @include media-query($above: $screen-medium-min) {
+ min-width: 60%;
+ }
+}
diff --git a/_sass/pages/_contact.scss b/_sass/pages/_contact.scss
index e0b3d6810..e4699c708 100644
--- a/_sass/pages/_contact.scss
+++ b/_sass/pages/_contact.scss
@@ -3,28 +3,7 @@ fieldset {
padding: 0;
}
-#contactForm {
- display: flex;
- flex-direction: column;
-
- input {
- font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family;
- margin-bottom: 10px;
- }
-
- textarea {
- font: $base-font-weight #{$base-font-size}/#{$base-line-height} $base-font-family;
- margin-bottom: 10px;
- }
-}
-
-#submitButton {
- background-color: $usb-yellow;
- border: none;
- border-radius: 4px;
- font-weight: bold;
- font-size: 1em;
- padding: 10px;
- width: 100%;
+label[for="acknowledge"] {
+ max-width: 30rem;
}
diff --git a/_sass/pages/_initiatives.scss b/_sass/pages/_initiatives.scss
index 38889d243..e69de29bb 100644
--- a/_sass/pages/_initiatives.scss
+++ b/_sass/pages/_initiatives.scss
@@ -1,39 +0,0 @@
-.card {
- /* Add shadows to create the "card" effect */
- box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
- transition: 0.3s;
- width: 300px;
- height: 350px;
- margin: 10px auto;
- }
-
-/* On mouse-over, add a deeper shadow */
-.card:hover {
- box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2);
-}
-
-/* Add some padding inside the card container */
-.card-container {
- padding: 10px;
- height: 20%;
-}
-
-.initiatives-container {
- display: flex;
- align-content: center;
- flex-wrap: wrap;
- text-align: center;
- justify-content: center;
-}
-
-.initiative-title {
- font-weight: bold;
- margin-bottom: 0px;
-}
-
-.initiative-button {
- color: $usb-blue;
- margin: auto;
- width: 50%;
- font-size: 1.2em;
-}
\ No newline at end of file
diff --git a/_sass/pages/_members.scss b/_sass/pages/_members.scss
index c4ff2bd53..629b52732 100644
--- a/_sass/pages/_members.scss
+++ b/_sass/pages/_members.scss
@@ -1,90 +1,49 @@
-.members {
- padding-top: 2vh;
- display: flex;
- justify-content: center;
- flex-direction: column;
- margin-right: auto;
- margin-left: auto;
- padding-right: $spacing-unit;
- padding-left: $spacing-unit;
- max-width: 1000px;
- text-align: center;
- margin-top: 3vh;
- margin-bottom: 3vh;
-}
-
.members-flex {
- display: flex;
- align-content: center;
- flex-wrap: wrap;
- justify-content: space-between;
+ max-width: 1000px;
}
-.members-flex img {
- width: 150px;
- border-radius: 50%;
+.member img {
+ object-fit: cover;
+ object-position: center;
}
-.hvrbox,
-.hvrbox * {
- box-sizing: border-box;
-}
-.hvrbox {
- position: relative;
- display: inline-block;
- overflow: hidden;
- max-width: 100%;
- height: auto;
- margin-bottom: 10px;
-}
-.hvrbox img {
- max-width: 100%;
-}
-.hvrbox .hvrbox-layer_bottom {
- display: block;
-}
-.hvrbox .hvrbox-layer_top {
+.overlay {
+ &-container {
+ position: relative;
+ display: inline-block;
+ height: auto;
+ &:hover {
+ @extend .shadow-drop--center--soft;
+ }
+ }
opacity: 0;
- border-radius: 50%;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- width: 100%;
- height: 100%;
- background: rgba(0, 0, 0, 0.6);
- color: #fff;
- padding: 15px;
- -moz-transition: all 0.4s ease-in-out 0s;
- -webkit-transition: all 0.4s ease-in-out 0s;
- -ms-transition: all 0.4s ease-in-out 0s;
- transition: all 0.4s ease-in-out 0s;
+ position: absolute;
+ top: 0;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ background: $profile-overlay;
+
+ &.active, &:focus-within {
+ opacity: 1;
+ }
}
-.hvrbox:hover .hvrbox-layer_top,
-.hvrbox.active .hvrbox-layer_top {
- opacity: 1;
+
+.menu-check {
+ display: none;
}
-.hvrbox .hvrbox-text {
- text-align: center;
- font-size: 18px;
- display: inline-block;
- position: absolute;
- top: 50%;
- left: 50%;
- -moz-transform: translate(-50%, -50%);
- -webkit-transform: translate(-50%, -50%);
- -ms-transform: translate(-50%, -50%);
- transform: translate(-50%, -50%);
+
+.menu-check, .menu-item{
+ @extend .animate;
+ overflow-y: hidden;
+ //transform: scaleY(0);
+ max-height: 0;
}
-.hvrbox .hvrbox-text_mobile {
- font-size: 15px;
- border-top: 1px solid rgb(179, 179, 179); /* for old browsers */
- border-top: 1px solid rgba(179, 179, 179, 0.7);
- margin-top: 5px;
- padding-top: 2px;
- display: none;
+
+.menu-check:checked {
+ ~ .menu-item {
+ @extend .animate;
+ //transform: scaleY(1);
+ max-height: 1000rem;
+ }
}
-.hvrbox.active .hvrbox-text_mobile {
- display: block;
-}
\ No newline at end of file
diff --git a/_sass/pages/_post.scss b/_sass/pages/_post.scss
index d70041a04..4cb8d7b57 100644
--- a/_sass/pages/_post.scss
+++ b/_sass/pages/_post.scss
@@ -1,64 +1,91 @@
-.side-by-side {
- display: grid;
- grid-template-columns: 1fr 3fr;
- grid-template-rows: auto 1fr auto;
- grid-template-areas: "head head head head"
- "side main main main"
- "footer footer footer footer";
- height: 100%;
+article {
+ p img {
+ &:not(.emoji) {
+ margin: 0 auto;
+ margin-bottom: spacing-group(4);
+ @extend .block, .rounded;
+ }
+ &.emoji {
+ @extend .-mt-2;
+ }
+ }
+
+ p {
+ @extend .justify-around, .align-items-center;
+ }
+
+ section:nth-of-type(2) p, li {
+ @extend .font--height-high;
+ }
+
+ code {
+ @extend .text-left;
+ }
+
+ h1, h2, h3, h4, h5, h6, .heading {
+ @extend .mb-2, .mt-8, .text-left;
+ }
}
-.side-by-side aside {
- grid-area: side;
- padding: 10px;
- padding-left: 15px;
- background-color: rgb(250, 250, 250);
- border-right-color: rgba(0, 0, 0, 0.07);
- border-right-style: solid;
- border-right-width: 1px;
+label[for="rate-good"], label[for="rate-bad"] {
+ @extend .grey;
}
-.side-by-side .post {
- grid-area: main;
- padding: 10px;
- max-width: 800px;
+#rate-bad {
+ & + label[for="rate-bad"] {
+ &:hover {
+ @extend .red;
+ }
+ }
+
+ &:checked + label[for="rate-bad"] {
+ @extend .red;
+ }
}
-.post-list h4 {
- margin-bottom: 0px;
+#rate-good {
+ & + label[for="rate-good"] {
+ &:hover {
+ @extend .green-dark;
+ }
+ }
+
+ &:checked + label[for="rate-good"] {
+ @extend .green-dark;
+ }
}
-.post-list a {
- color: black;
- font-weight: 500;
+.lightcase-img {
+ @extend .clickable;
}
-.post-list li {
- margin-bottom: 10px;
- padding-right: 5px;
+#lightcase-info #lightcase-caption {
+ @extend .light;
}
-.post-list p {
- font-size: 14px;
+#lightcase-overlay {
+ background: #000;
}
-@media (max-width: 915px) {
- .side-by-side {
- display: block;
+.lightcase-icon-close {
+ &:before{
+ content: '×';
}
- .side-by-side aside {
- display: none;
+ @extend .no-decoration, .flat;
+ color: $accent-grey !important;
+ &:hover {
+ color: $text-color-light !important;
}
}
-#active {
- background-color: rgba(138,201,254,0.3);
- border-radius: 10px;
- padding-left: 10px;
- margin-left: -10px;
-
+.wiki-shim {
+ width: 100%;
+ max-width: 35rem;
+ min-width: 16rem;
}
-.post-header {
- margin-bottom: 10px;
+#post {
+ @include media-query($above: $screen-medium-min) {
+ min-width: 60%;
+ }
}
\ No newline at end of file
diff --git a/_sass/pages/_resources.scss b/_sass/pages/_resources.scss
deleted file mode 100644
index 89396e51c..000000000
--- a/_sass/pages/_resources.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-.post-list h3 {
- margin-bottom: 0px;
-}
\ No newline at end of file
diff --git a/_sass/pages/_wiki.scss b/_sass/pages/_wiki.scss
new file mode 100644
index 000000000..43e9ae7df
--- /dev/null
+++ b/_sass/pages/_wiki.scss
@@ -0,0 +1,29 @@
+/* CSS for /wiki */
+#sidebar {
+ .post-title, .post-description {
+ text-overflow: ellipsis;
+ display: block;
+ -webkit-line-clamp: 2;
+ }
+ max-height: 75vh;
+ min-height: 300px;
+}
+
+#wiki-list {
+ //max-height: 35vh;
+ @include media-query($above: $screen-large-min) {
+ max-height: 66vh;
+ }
+
+ @include media-query($above: $screen-medium-min, $below: $screen-medium) {
+ max-height: 44vh;
+ }
+
+ @include media-query($below: $screen-small) {
+ max-height: 55vh;
+ }
+}
+
+#wiki-items, #search-results {
+ min-height: 200px;
+}
diff --git a/_sass/style.scss b/_sass/style.scss
deleted file mode 100644
index c5ca9f990..000000000
--- a/_sass/style.scss
+++ /dev/null
@@ -1,14 +0,0 @@
-
-// Colors
-$usb-yellow: #FFCA44;
-$usb-gray: #333333;
-$usb-blue: #8AC9FE;
-
-@import
- "pages/about",
- "pages/initiatives",
- "pages/post",
- "pages/resources",
- "pages/members",
- "pages/contact"
-;
diff --git a/_sass/theme.scss b/_sass/theme.scss
new file mode 100644
index 000000000..0ba77be55
--- /dev/null
+++ b/_sass/theme.scss
@@ -0,0 +1,117 @@
+/* CSS customization for base theme */
+@charset "utf-8";
+
+/**
+Define defaults for each variable. Be sure to include !default on the end of each line.
+*/
+
+
+/* Fonts */
+@import "mixins";
+@include google-font("Raleway", "400;500;600;700");
+@include google-font("Montserrat", "400;500;600;700");
+$font-family-backup: sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+$font-families: (
+ body: ("Raleway", $font-family-backup),
+ header: ("Montserrat", $font-family-backup)
+) !default;
+$font-sizes: (
+ h1: 1rem * 56 / 18,
+ h2: 1rem * 48 / 18,
+ h3: 1rem * 36 / 18,
+ h4: 1rem * 24 / 18,
+ button: 1rem * 24 / 18,
+ listitem: 1rem * 24 / 18,
+ body: 1rem,
+ caption: 1rem * 14 / 18,
+) !default;
+$line-height-base: 1.2 !default;
+$line-height-high: 2 !default;
+
+
+/* Colors */
+$percentage-lighten: 50% !default;
+$percentage-darken: 10% !default;
+$primary-color: #FFCA44 !default;
+
+$accent-blue: #8AC9FE !default;
+$accent-red: #FE646F !default;
+$accent-purple: #BC78C2 !default;
+$accent-green: #67EA9B !default;
+$accent-orange: #FEA465 !default;
+$accent-grey: #6B6A6A !default;
+$accent-grey-light: #E5E5E5 !default;
+$profile-overlay: rgba(0, 0, 0, 0.35);
+
+$text-color: #333 !default;
+$text-color-hint: $accent-grey !default;
+$text-color-light: #FFF !default;
+$background-light: $text-color-light !default;
+$background-dark: $text-color-light !default;
+$background-color: $background-light !default;
+$focus-color: tint($primary-color, $percentage-lighten) !default;
+$accent-color: $accent-blue !default;
+
+/* Spacing & Alignment */
+$dimension-sizing-groups: 2, 3, 4, 5, 6, 10, 100 !default;
+$table-text-align: left !default;
+$spacing-max-group: 32 !default;
+$spacing-base: 1.35914091423 !default;
+$spacing-multiple: 0.25rem !default;
+$spacing-unit: 1.9rem !default;
+$margin-bottom-default: spacing-group(4) !default;
+$padding-button-x: spacing-group(4) !default;
+$padding-button-y: spacing-group(4) !default;
+
+
+// Width of the content area
+$content-width: 800px !default;
+$text-width: 53rem !default;
+$screens: (
+ 'xs': ('min': '0px', 'max': '639px'),
+ 'sm': ('min': '640px', 'max': '767px'),
+ 'md': ('min': '768px', 'max': '1023px'),
+ 'lg': ('min': '1024px', 'max': '1279px'),
+ 'xl': ('min': '1280px', 'max': '10000000000px' /* such hack */),
+) !default;
+// For convenience in css
+$screen-xsmall: map-get(map-get($screens, "sm"), "max");
+$screen-small: map-get(map-get($screens, "sm"), "max");
+$screen-medium: map-get(map-get($screens, "md"), "max");
+$screen-large: map-get(map-get($screens, "lg"), "max");
+$screen-xlarge: map-get(map-get($screens, "xl"), "max");
+$screen-xsmall-min: map-get(map-get($screens, "sm"), "min");
+$screen-small-min: map-get(map-get($screens, "sm"), "min");
+$screen-medium-min: map-get(map-get($screens, "md"), "min");
+$screen-large-min: map-get(map-get($screens, "lg"), "min");
+$screen-xlarge-min: map-get(map-get($screens, "xl"), "min");
+
+/* Effects */
+$border-width: 4px !default;
+$border-radius: 10px !default;
+$border-radius-slight: $border-radius / pow(2, 1) !default;
+$border-radius-more: $border-radius * pow(2, 2) !default;
+
+$shadow-color-default: rgba(0, 0, 0, 0.25) !default;
+$shadow-color-dark: rgba(0, 0, 0, 0.95) !default;
+$shadow-color-soft: rgba(0, 0, 0, 0.15) !default;
+$shadow-default: 4px 4px 4px !default;
+$shadow-dark: 4px 4px 4px !default;
+$shadow-nooffset: 0px 0px 4px !default;
+$shadow-nooffset-soft: 0px 0px 12px !default;
+
+$animation-delay: 200ms !default;
+
+$bg-angle-mobile: 2rem !default;
+$bg-angle: 400% !default;
+$bg-angle-color: $primary-color !default;
+
+$scrollbar-background: white !default;
+$scrollbar-foreground: $accent-grey !default;
+
+
+// Import partials. DO NOT REORDER
+@import "generate";
+@import "utils";
+@import "theme/base";
+@import "theme/layout";
diff --git a/_sass/theme/_base.scss b/_sass/theme/_base.scss
new file mode 100644
index 000000000..e8fa6075c
--- /dev/null
+++ b/_sass/theme/_base.scss
@@ -0,0 +1,466 @@
+/* CSS for base common theme */
+
+/*! purgecss start ignore */
+/**
+ * Reset some basic elements
+ */
+html {
+ font-size: 100%;
+ scroll-behavior: smooth;
+}
+
+body, h1, h2, h3, h4, h5, h6, p,
+blockquote, pre, hr, dl, dd, ol, ul, figure {
+ @extend .ma-0, .pa-0;
+}
+
+html, body {
+ @extend .h-full;
+ min-height: 100%;
+}
+
+main {
+ overflow-anchor: none;
+}
+
+
+/**
+ * Basic styling
+ */
+body {
+ @include font-body;
+ background-color: $background-color;
+ -webkit-text-size-adjust: 100%;
+ -webkit-font-feature-settings: "kern"1;
+ -moz-font-feature-settings: "kern"1;
+ -o-font-feature-settings: "kern"1;
+ font-feature-settings: "kern"1;
+ display: flex;
+ min-height: 100vh;
+ @extend .column;
+}
+
+[display="none"] {
+ margin: 0 !important;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+ max-height: 0 !important;
+ max-width: 0 !important;
+}
+
+
+/**
+ * Set `margin-bottom` to maintain vertical rhythm
+ */
+h1, h2, h3, h4, h5, h6, p, blockquote,
+pre, ul, ol, dl, figure,
+%vertical-rhythm {
+ margin-bottom: $margin-bottom-default;
+}
+
+
+/**
+ * Images
+ */
+img {
+ max-width: 100%;
+ vertical-align: middle;
+}
+
+
+
+/**
+ * Figures
+ */
+figure > img {
+ display: block;
+}
+
+figcaption {
+ @extend .font-caption;
+}
+
+
+
+/**
+ * Lists
+ */
+ul, ol {
+ @extend .ml-2;
+ text-indent: -1.5em;
+ padding-left: 1em;
+}
+
+li {
+ > ul, > ol {
+ @extend .mb-0;
+ }
+}
+
+
+/**
+ * Fonts: headings, body elements, weights
+ */
+h1, h2, h3, .header, button, .button {
+ @include font-header;
+ @extend .font--height-normal;
+}
+
+h1, h3, h4, button, .button, input[type="submit"] {
+ @extend .font-bold;
+}
+
+a, a * {
+ @extend .font-semibold;
+}
+
+body, h2, p, blockquote, pre, li, ul,
+ol, dl, data, input, .medium {
+ @extend .font-medium;
+ line-height: 1.3;
+}
+
+h4, h5, h6, body, p, a, blockquote, pre, textarea,
+code, span, li, ul, ol, dl, data, input,
+caption, .caption, .body {
+ @include font-body;
+}
+
+h1 {
+ @extend .font-h1;
+}
+
+h2 {
+ @extend .font-h2;
+}
+
+h3 {
+ @extend .font-h3;
+}
+
+h4 {
+ @extend .font-h4;
+}
+
+h5 {
+ @extend .font-body;
+}
+
+h6 {
+ @extend .font-caption;
+}
+
+button, .button, input[type="submit"] {
+ @extend .font-button;
+}
+
+li, ul, ol {
+ @extend .font-listitem;
+}
+
+ul, ol, .list {
+ list-style-position: inside;
+}
+
+body, p, a, blockquote, pre, textarea, small, b, em, i, q,
+code, span, li, ul, ol, dl, data, input, .body {
+ @extend .font-body;
+}
+
+body, p, a, blockquote, pre, textarea, small, b, em, i, q,
+code, span, li, ul, ol, dl, data, input, .body {
+ letter-spacing: 0.01rem;
+}
+
+h2, h1 {
+ letter-spacing: 0.04rem;
+}
+
+h3 {
+ letter-spacing: 0.02rem;
+}
+
+caption, .caption, small, small *, #lightcase-info #lightcase-caption {
+ @extend .font-caption;
+ &:not(b):not(strong) {
+ @extend .font-medium;
+ }
+}
+
+b, strong {
+ @extend .font-bold;
+}
+
+%input-focus {
+ &:focus, &:focus-within {
+ outline: none; /* IMPORTANT Massive accessibility issue! Keep border! */
+ @extend .border-focus-color;
+ }
+}
+
+form textarea, form input:not([type="submit"]), .input {
+ border-style: solid;
+ @extend .pa-3, .rounded--less, .border-thin, .border-grey-light, %input-focus;
+}
+
+.input {
+ padding: 0;
+
+ i {
+ @extend .icon-0, .my-5, .ml-5, .mr-3, .grey;
+ }
+}
+
+.input > input {
+ outline: none;
+ @extend %input-focus;
+}
+
+
+svg path {
+ fill: currentcolor;
+}
+
+::placeholder {
+ opacity: 1; /* Firefox */
+ @extend .hint;
+}
+
+form {
+ label {
+ @extend .caption, .uppercase, .font-semibold;
+ color: $text-color-hint !important;
+
+ &.required span {
+ @extend .font-h4, .red;
+ vertical-align: middle;
+ }
+ }
+}
+
+textarea {
+ resize: vertical;
+}
+
+input[type="checkbox"] {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ -o-appearance: none;
+ appearance: none;
+ @extend .clickable, .animate-fast, .rounded, .icon-1;
+
+ &:checked {
+ @extend .bg-accent;
+ border-color: $accent-color !important;
+ }
+
+ &:focus {
+ border-color: $accent-grey !important;
+ }
+}
+
+
+/**
+ * Links
+ */
+a:not(.button) {
+ @extend .blue-dark, .hover--underline;
+ text-decoration: none;
+
+ &:visited {
+ @extend .purple-dark;
+ }
+
+ .social-media-list &:hover {
+ text-decoration: none;
+
+ .username {
+ text-decoration: underline;
+ }
+ }
+}
+
+
+/**
+ * Blockquotes TODO
+ */
+blockquote {
+ @extend .rounded--less, .animate-fast;
+ border-left: $border-width solid $accent-grey-light;
+ padding-left: spacing-group(1);
+ letter-spacing: -1px;
+
+ > :last-child {
+ @extend .mb-0;
+ }
+
+ &:hover {
+ @extend .border-accent;
+ }
+}
+
+blockquote, blockquote p {
+ @extend .grey-dark, .font-italic;
+}
+
+
+
+/**
+ * Tables TODO this has not been styled - no use case yet
+ */
+table {
+ @extend .mb-3, .w-full;
+ text-align: $table-text-align;
+ border-collapse: collapse;
+ display: block;
+ overflow-x: auto;
+
+ tr {
+ &:nth-child(even) {
+ background-color: lighten($accent-grey-light, 6%);
+ }
+ }
+
+ th,
+ td {
+ padding: ($spacing-unit / 3) ($spacing-unit / 2);
+ }
+
+ th {
+ background-color: lighten($accent-grey-light, 3%);
+ border: 1px solid darken($accent-grey-light, 4%);
+ border-bottom-color: darken($accent-grey-light, 12%);
+ }
+
+ td {
+ border: 1px solid $accent-grey-light;
+ }
+}
+
+
+/* Buttons */
+button, .button, input[type="submit"] {
+ @extend .bg-primary, .border-none, .clickable, .shadow-drop, .rounded, .no-decoration, .animate, %button-focus;
+ @include px($padding-button-x);
+ @include py($padding-button-y);
+
+ &--outline, &.--outline {
+ &, &-light {
+ @extend .light, .bg-none, .border, .border-light, %button-focus--outline;
+ }
+
+ &-dark {
+ @extend .bg-none, .border, .dark, .border-dark, %button-focus--outline-dark;
+ }
+ }
+}
+
+%button-focus {
+ &--outline {
+ &:focus {
+ outline: none; /* IMPORTANT Massive accessibility issue! Keep border! */
+ @extend .dark, .border-light, .bg-light;
+ }
+ &-dark {
+ &:focus {
+ outline: none; /* IMPORTANT Massive accessibility issue! Keep border! */
+ @extend .light, .bg-dark, .border-dark;
+ }
+ }
+ }
+ &:focus {
+ outline: none; /* IMPORTANT Massive accessibility issue! Keep border! */
+ @extend .bg-dark, .primary, .border, .border-primary;
+ }
+}
+
+%focus {
+ &:focus {
+ outline: none; /* IMPORTANT Massive accessibility issue! Keep border! */
+ @extend .focus-color, .border-thin, .border-focus-color;
+ @extend .shadow-text;
+ }
+}
+
+a img {
+ @extend %focus;
+}
+
+input[disabled], button[disabled] {
+ background-color: $accent-grey-light !important;
+ color: $accent-grey !important;
+ border: none !important;
+}
+
+input {
+ & + label {
+ .expand {
+ display: initial;
+ }
+ .collapse {
+ display: none;
+ }
+ }
+
+ &:checked + label{
+ .expand {
+ display: none;
+ }
+ .collapse {
+ display: initial;
+ }
+
+ &.menu-button-rotate, .menu-button-rotate {
+ transform: rotate(360deg);
+ &270 {
+ transform: rotate(270deg);
+ }
+ &180 {
+ transform: rotate(180deg);
+ }
+ &90 {
+ transform: rotate(90deg);
+ }
+ }
+ }
+}
+
+
+
+.anchorjs-link {
+ transition: all .25s linear;
+}
+*:hover > .anchorjs-link {
+ margin-left: -1.125em !important;
+}
+
+
+/**
+ * Syntax highlighting styles
+ */
+.hljs {
+ @extend .bg-dark;
+ /*user-select: all;
+ -ms-user-select: all;
+ -moz-user-select: all;
+ -webkit-user-select: all;*/
+}
+
+pre {
+ @extend .rounded;
+
+ > code, > .hljs {
+ @extend .rounded;
+ @include pa(spacing-group(4));
+ }
+}
+
+*:not(pre) {
+ > code.hljs, > code, > .hljs {
+ @include pa(spacing-group(4/3));
+ @extend .rounded, .inline;
+ }
+ }
+/* purgecss end ignore */
diff --git a/_sass/theme/_layout.scss b/_sass/theme/_layout.scss
new file mode 100644
index 000000000..c1e32cddd
--- /dev/null
+++ b/_sass/theme/_layout.scss
@@ -0,0 +1,211 @@
+/* CSS for general site layout */
+
+/*! purgecss start ignore */
+::selection {
+ @extend .bg-primary-light, .dark;
+}
+
+/* Scrollbar Styles */
+* {
+ scrollbar-width: thin;
+ /* "auto" or "thin" */
+ scrollbar-color: $scrollbar-foreground $scrollbar-background;
+ /* scroll thumb & track */
+}
+
+::-webkit-scrollbar {
+ width: 0.5rem;
+}
+
+::-webkit-scrollbar-track,
+::-webkit-scrollbar-track-piece {
+ background-color: $scrollbar-background;
+}
+
+::-webkit-scrollbar-thumb {
+ background-color: $scrollbar-foreground;
+}
+
+*::-webkit-scrollbar-track,
+*::-webkit-scrollbar-thumb {
+ @extend .rounded--more;
+}
+
+::-webkit-resizer {
+ background: linear-gradient(-45deg, $accent-grey-light, $accent-grey-light 45%, white 45%, white);
+}
+
+footer {
+ margin-top: auto;
+}
+
+.page-link {
+ @extend .no-decoration, .animate-fast;
+
+ & * {
+ @include font-semibold;
+ @include my(0);
+ @extend .hover--bold;
+ }
+}
+
+
+.divider, hr {
+ &, &--horizontal {
+ @extend .w-full, .bg-primary, .h-px;
+ }
+
+ &--vertical {
+ @extend .h-full, .bg-primary, .w-px;
+ }
+}
+
+.sticky {
+ @include screen-variant() {
+ position: -webkit-sticky;
+ position: sticky;
+ }
+}
+
+.fab {
+ margin-left: auto;
+ order: 2;
+ z-index: 9999;
+ width: auto;
+ height: auto;
+ text-align:left;
+}
+
+
+/* Credit: https://codepen.io/lbebber/pen/pvwZJp */
+// Sorry this is so ugly! Very WIP, animations aren't really working
+$menu-items: 4;
+$open-distance: 80px;
+$open-distance-mobile: 18vh;
+
+%ball{
+ @extend .bg-accent, .light, .text-center, .animate;
+ user-select: none;
+ $height: 55px;
+ width: $height;
+ height: $height;
+ margin-left: -20px;
+ position: absolute;
+ line-height: $height;
+ transform: translate3d(0,0,0);
+}
+.menu-check, .nav-item{
+ display: none;
+}
+.nav-item{
+ @extend %ball, .rounded--more, .shadow-drop;
+ width: auto;
+ right: 10px;
+}
+.hamburger{
+ @extend .block, .bg-dark, .icon-square-1, .px-3, .rounded--more;
+ height: $border-width;
+ transition: transform 200ms;
+
+ $hamburger-spacing: spacing-group(2);
+ &-top {
+ transform: translate3d(0, -$border-width * 1.5, 0);
+ }
+ &-middle {
+ transform: translate3d(0, 0, 0);
+ }
+ &-bottom {
+ transform: translate3d(0, $border-width * 1.5, 0);
+ }
+}
+
+// Menu is open
+.menu-check:checked+.menu-check-button {
+ .hamburger-top{
+ transform: translate3d(0 ,$border-width, 0) rotate(45deg);
+ }
+ .hamburger-middle{
+ transform: translate3d(0, 0, 0) scale(0.1, 1);
+ }
+ .hamburger-bottom{
+ transform: translate3d(0, -$border-width, 0) rotate(-45deg);
+ }
+}
+
+.menu{
+ margin-left: -3.125rem;
+}
+
+
+.nav-item{
+ @extend .shadow--center--soft\:hover, .text-right;
+ @for $i from 1 through $menu-items{
+ &:nth-child(#{$i + 2}){
+ transition-duration: 180ms;
+ }
+ }
+}
+
+.menu-check-button{
+ @extend %ball, .clickable, .rounded--circle;
+ z-index:2;
+ transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.275);
+ transition-duration: 400ms;
+ transform: scale(1.1,1.1) translate3d(0,0,0);
+}
+.menu-check-button:hover{
+ transform: scale(1.2,1.2) translate3d(0,0,0);
+ @extend .shadow--center--soft;
+}
+.menu-check:checked+.menu-check-button{
+ transition-timing-function: linear;
+ transition-duration: 200ms;
+ transform: scale(0.9,0.9) translate3d(0,0,0);
+}
+
+.menu-check:checked~.nav-item{
+ display: initial;
+ transition-timing-function: cubic-bezier(0.165, 0.840, 0.440, 1.000);
+ @for $i from 1 through $menu-items{
+ &:nth-child(#{$i+2}){
+ transition-duration: 90ms+(100ms*$i);
+ @media screen and (max-width: $screen-medium) {
+ @media (min-aspect-ratio: 501/500) {
+ transform: translate3d(0,-$open-distance-mobile * $i,0);
+ }
+ @media (max-aspect-ratio: 500/500) {
+ transform: translate3d(0,-$open-distance * $i,0);
+ }
+ }
+
+ }
+ }
+}
+
+
+.section {
+ &-title {
+ @extend .py-10, .mb-0, .text-center;
+ }
+}
+
+.anchorjs-link {
+ color: $text-color;
+ &:hover {
+ color: $accent-red;
+ }
+}
+
+input:-webkit-autofill,
+input:-webkit-autofill:hover,
+input:-webkit-autofill:focus,
+input:-webkit-autofill:active {
+ -webkit-box-shadow: 0 0 0 30px $background-color inset !important;
+ box-shadow: 0 0 0 30px $background-color inset !important;
+}
+
+#lightcase-overlay {
+ opacity: 0.8 !important;
+}
+
+/*! purgecss end ignore */
diff --git a/_sass/utils.scss b/_sass/utils.scss
new file mode 100644
index 000000000..713b98637
--- /dev/null
+++ b/_sass/utils.scss
@@ -0,0 +1,284 @@
+.font {
+ &--height {
+ &-normal {
+ line-height: $line-height-base;
+ }
+ &-high {
+ line-height: $line-height-high;
+ }
+ }
+}
+
+
+.flex {
+ display: flex;
+ display: -webkit-flex;
+ @extend .row, .border-box;
+
+ &--wrap {
+ &-reverse {
+ flex-wrap: wrap-reverse !important;
+ }
+
+ flex-wrap: wrap !important;
+ @extend .flex;
+ }
+
+ &--nowrap {
+ @extend .flex;
+ flex-wrap: nowrap !important;
+ }
+}
+
+.flex {
+ &-container {
+ @extend .border-box;
+ }
+
+ &-even {
+ @include flex-even;
+ }
+
+ &-break {
+ @extend .block, .w-full;
+ height: 1px;
+ }
+}
+
+// why the absolute fuck does this break footer & fab placement in production?
+.column, .column--wrap, .column\@md-below {
+ @include flex-even;
+}
+
+.row, .row--wrap, .row--nowrap {
+ @extend .w-full;
+ @include flex-even;
+}
+
+.row, .row--wrap {
+ flex-wrap: wrap;
+}
+
+.border-box, .border-box * {
+ box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+}
+
+.margin-list > * {
+ &:not(:last-child) {
+ @extend .mr-4;
+ }
+
+ &:not(:first-child) {
+ @extend .ml-4;
+ }
+}
+
+.margin-list--wrap > * {
+ @extend .mx-4;
+}
+
+.no{
+ &-underline {
+ text-decoration: none !important;
+ }
+ &-list-style {
+ list-style: none !important;
+ }
+ &-decoration {
+ @extend .no-underline, .no-list-style;
+ }
+}
+
+.hover {
+ &--underline:hover {
+ text-decoration: underline;
+ }
+ &--bold:hover {
+ @extend .font-bold;
+ }
+}
+
+.animate {
+ &, & > * {
+ -moz-transition: all $animation-delay ease-in-out $animation-delay / 3 !important;
+ -webkit-transition: all $animation-delay ease-in-out $animation-delay / 3 !important;
+ -ms-transition: all $animation-delay ease-in-out $animation-delay / 3 !important;
+ transition: all $animation-delay ease-in-out $animation-delay / 3 !important;
+ }
+
+
+ &-off, &-off > * {
+ -moz-transition: none !important;
+ -webkit-transition: none !important;
+ -ms-transition: none !important;
+ transition: none !important;
+ }
+
+ &-fast, &-fast > * {
+ $fast-delay: $animation-delay / 2;
+ -moz-transition: all $fast-delay ease-in-out $fast-delay / 3 !important;
+ -webkit-transition: all $fast-delay ease-in-out $fast-delay / 3 !important;
+ -ms-transition: all $fast-delay ease-in-out $fast-delay / 3 !important;
+ transition: all $fast-delay ease-in-out $fast-delay / 3 !important;
+ }
+}
+
+.fade-in-out {
+ opacity: 0;
+ @extend .animate;
+
+ &:hover {
+ opacity: 1;
+ }
+}
+
+.uppercase {
+ text-transform: uppercase;
+}
+
+.img-cover {
+ object-fit: cover;
+}
+
+.clickable {
+ @include clickable;
+}
+
+.not-clickable {
+ cursor: default;
+ @extend .flat;
+}
+
+.clickable, a, button, .button {
+ &:focus {
+ //outline: $border-width double initial;
+ @extend .shadow;
+ }
+ &:focus:not(:focus-visible) {
+ //outline: none;
+ }
+ &:active {
+ @extend .flat;
+ }
+}
+
+.textwidth {
+ @include screen-variant() {
+ max-width: $text-width;
+ }
+
+ &--force {
+ @include screen-variant() {
+ width: $text-width;
+ }
+
+ }
+
+}
+
+.flat {
+ @include shadow-none;
+}
+
+.shadow {
+ &, &-drop {
+ @include shadow-drop;
+ &--center {
+ @include shadow('drop', $shadow-nooffset);
+ &--soft {
+ @include generate-pseudo-helper(true) {
+ @include shadow('drop', $shadow-nooffset-soft, $shadow-color-soft);
+ }
+ }
+ }
+ }
+
+ &-box {
+ @include shadow-box;
+ &--center {
+ @include shadow('box-shadow', $shadow-nooffset);
+ &--soft {
+ @include shadow('box-shadow', $shadow-nooffset-soft, $shadow-color-soft);
+ }
+ }
+ }
+
+ &-text {
+ @include shadow-text;
+ &-dark {
+ @include shadow('text-shadow', $shadow-default, $shadow-color-dark);
+ }
+ &--center {
+ @include shadow('text-shadow', $shadow-nooffset);
+ &--soft {
+ @include shadow('text-shadow', $shadow-nooffset-soft, $shadow-color-soft);
+ }
+ }
+ }
+}
+
+.active, #active, .highlight {
+ @extend .bg-focus-color;
+ &--hover {
+ &:hover {
+ @extend .bg-focus-color-light;
+ }
+ }
+}
+
+.highlight {
+ @extend .rounded;
+}
+
+.card {
+ @extend .bg-light, .rounded, .overflow-hidden;
+ box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
+ transition: 0.3s;
+
+ &:hover {
+ box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2);
+ }
+
+ &--initiative {
+ @extend .card;
+ @include media-query($above: $screen-small-min) {
+ min-width: 20rem;
+ }
+ @include media-query($below: $screen-xsmall) {
+ min-width: 80%;
+ }
+ width: 40%;
+ max-width: 35rem;
+ }
+
+ picture {
+ @include media-query($below: $screen-xsmall) {
+ width: 100%;
+ }
+ }
+}
+
+.w-px {
+ width: 1px;
+}
+
+.h-px {
+ height: 1px;
+}
+
+.h-max-72 {
+ @include screen-variant() {
+ max-height: spacing-group(72);
+ }
+}
+
+.absolute {
+ position: absolute;
+}
+
+.safari-flexbasis-fix {
+ flex-basis: 50px !important;
+ padding: 10px;
+}
\ No newline at end of file
diff --git a/_wiki/become-uta.md b/_wiki/become-uta.md
new file mode 100644
index 000000000..4a6008b87
--- /dev/null
+++ b/_wiki/become-uta.md
@@ -0,0 +1,10 @@
+---
+title: "How do I become an Undergraduate Teaching Assistant?"
+description: "Get paid to help students during labs"
+author:
+ - Noah Alderton
+date: 2020-03-04 17:00:00 -0400
+categories: campus
+---
+
+The process of the hiring UTAs has been standardized in the Computer Science Department to simplify application evaluation. Typically, applications for the following semester are opened about a month before classes end. More information can be found on the [Department of Computer Science website](https://www.cs.purdue.edu/hiring/uta.html).
\ No newline at end of file
diff --git a/_wiki/connect-pal3.0-linux.md b/_wiki/connect-pal3.0-linux.md
new file mode 100644
index 000000000..de024a775
--- /dev/null
+++ b/_wiki/connect-pal3.0-linux.md
@@ -0,0 +1,40 @@
+---
+title: "Connecting to PAL3.0 on Linux"
+description: "Access campus-only resources from anywhere!"
+author: Chris Xiao
+date: 2020-11-21 14:00:00 -0400
+categories: [campus,technical]
+---
+
+### Introduction
+
+PAL3.0 is Purdue's wireless network. It uses WPA2 Enterprise authentication, which means additional configurations may be needed to connect to it on Linux.
+
+This tutorial will show you how to connect to PAL3.0 on desktop Linux. Note: Screenshots below show the GNOME 3 desktop environment. The process should be very similar to other environments.
+
+#### Step 1
+
+Open Wi-Fi settings, and select `PAL3.0` in the list of available wireless networks.
+
+
+
+#### Step 2
+
+Change the following settings:
+
+- Set "Authentication" to `Protected EAP (PEAP)`
+- Select `No CA certificate is required`
+
+After changing these settings, your options page should look like this:
+
+
+
+#### Step 3
+
+Enter your Purdue username (without "@purdue.edu") and password (regular password, NOT BoilerKey), then click "Connect."
+
+
+
+#### Step 4
+
+You should be connected to PAL3.0 in a few seconds! Check the Wi-Fi symbol on the top bar/panel to see if you're connected.
diff --git a/_posts/2020-05-26-connect-vpn.md b/_wiki/connect-vpn.md
similarity index 71%
rename from _posts/2020-05-26-connect-vpn.md
rename to _wiki/connect-vpn.md
index 098cc45cf..7d56e688a 100644
--- a/_posts/2020-05-26-connect-vpn.md
+++ b/_wiki/connect-vpn.md
@@ -1,5 +1,4 @@
---
-layout: post
title: "Connecting to Purdue's VPN"
description: "Access campus-only resources from anywhere!"
author: Cindy Ding
@@ -7,46 +6,45 @@ date: 2020-05-26 02:00:00 -0400
categories: technical
---
-## Introduction
+### Introduction
A Virtual Private Networking (VPN) is a method that allows users to securely access an organization's internal network resources. By using Purdue's VPN service, you can access resources that are only available on campus anywhere, e.g. printing to any campus printer, remotely accessing Purdue's servers/UNIX machines (like `mc19.cs.purdue.edu`) through remote desktop, etc.
This tutorial will show you how to connect to Purdue's VPN using Cisco AnyConnect.
-## Step 1
+#### Step 1
To download Cisco AnyConnect, go to the **[Purdue Community Hub](https://communityhub.purdue.edu/storefront/overview)**. After login in, you would want to go to "Antivirus and Security Software".
-
+
-## Step 2
+#### Step 2
Select Cisco AnyConnect for Personally Owned Computers and select the appropriate settings for your computer. After adding the software to your cart, download Cisco AnyConnect.
-
+
-## Step 3
+#### Step 3
Once you finished installing Cisco AnyConnect, open it up. You will see that Cisco AnyConnect is ready to connect to the VPN server: `webvpn.purdue.edu`.
There are a couple options you can choose. Due to COVID-19, more people are utilizing Purdue's VPN services. Purdue has created another VPN server: `webvpn2.purdue.edu/` for people to connect to. Whichever VPN server you choose to connect to will work.
-
+
-## Step 4
+#### Step 4
After you click "Connect", a prompt for login in will pop up. Your username is your Purdue username and the password is your BoilerKey password (pin,push).
-## Step 5
+#### Step 5
You should be able to connect to Purdue's VPN server! A pop-up will notify you that you are connected. Another way to tell is to check is on the task/menu bar. From the picture below, the lock symbol signifies that you are connected.
-
+
-## Step 6
+#### Step 6
After using Purdue's VPN, you want to disconnect. On Windows, right click on the Cisco AnyConnect icon, and click "Disconnect". On Mac, to disconnect, click on the Cisco AnyConnect icon from the menu bar and select "Disconnect".
-
-
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/_wiki/cs-calendars.md b/_wiki/cs-calendars.md
new file mode 100644
index 000000000..d23bce723
--- /dev/null
+++ b/_wiki/cs-calendars.md
@@ -0,0 +1,35 @@
+---
+title: "Subscribing to the Purdue CS Calendar"
+description: "Get notified of CS Department events on your calendar"
+author:
+ - Tyler Hoffman
+date: 2020-06-28
+categories: [calendar, events]
+redirect_from:
+ - /cal/
+ - /calendar/
+---
+
+Below are links you can use to sync the Purdue Computer Science calendars using your preferred calendar app. The CS department switched to Google Calendar *just for you!* :tada:
+
+**Note:** We recommend subsribing to the Google Calendar link. Downloadable calendars do not update automatically.
+
+**Departmental events**, such as Town Hall or career workshops:
+- [Google Calendar Embed](https://www.google.com/calendar/embed?src=256h9v68bnbnponkp0upmfq07s%40group.calendar.google.com&ctz=America/New_York)
+- [Webcal](webcal://google.com/calendar/ical/256h9v68bnbnponkp0upmfq07s%40group.calendar.google.com/public/basic.ics)
+- [iCalendar (.ics)](https://www.google.com/calendar/ical/256h9v68bnbnponkp0upmfq07s%40group.calendar.google.com/public/basic.ics)
+
+**Corporate events**, such as recruiting days:
+- [Google Calendar Embed](https://www.google.com/calendar/embed?src=7sehoe8o6e82k0ni0qee9ofojk@group.calendar.google.com&ctz=America/New_York)
+- [Webcal](webcal://google.com/calendar/ical/7sehoe8o6e82k0ni0qee9ofojk@group.calendar.google.com/public/basic.ics)
+- [iCalendar (.ics)](https://www.google.com/calendar/ical/7sehoe8o6e82k0ni0qee9ofojk@group.calendar.google.com/public/basic.ics)
+
+**CS seminars & colloquiums**:
+- [Google Calendar Embed](https://www.google.com/calendar/embed?src=t3gdpe5uft0cbfsq9bipl7ofq0%40group.calendar.google.com&ctz=America/New_York)
+- [Webcal](webcal://google.com/calendar/ical/t3gdpe5uft0cbfsq9bipl7ofq0%40group.calendar.google.com/public/basic.ics)
+- [iCalendar (.ics)](https://www.google.com/calendar/ical/256h9v68bnbnponkp0upmfq07s%40group.calendar.google.com/public/basic.ics)
+
+**Student organization events**:
+- [Google Calendar Embed](https://www.google.com/calendar/embed?src=scb3djhueh9j0dlhaa9i153l3g@group.calendar.google.com&ctz=America/New_York)
+- [Webcal](https://www.google.com/calendar/ical/256h9v68bnbnponkp0upmfq07s%40group.calendar.google.com/public/basic.ics)
+- [iCalendar (.ics)](https://www.google.com/calendar/ical/256h9v68bnbnponkp0upmfq07s%40group.calendar.google.com/public/basic.ics)
diff --git a/_wiki/cs-course-reflections.md b/_wiki/cs-course-reflections.md
new file mode 100644
index 000000000..499a19b72
--- /dev/null
+++ b/_wiki/cs-course-reflections.md
@@ -0,0 +1,41 @@
+---
+title: "CS Course Reflections"
+description: "Past students' feedback on CS courses at Purdue"
+author: Caleb Ahn
+date: 2022-06-01 12:00:00 -0400
+categories: campus
+---
+
+
+
+
+
+
+
+
+
+
+
+Here's the [link to the document](https://docs.google.com/document/d/e/2PACX-1vQd-7-nJSGSPMiallH4Wqk7iQiGnUnFTkeEQudXUayfjGfI54mDe3Ofa75kKcg1yLXGnT_1RmeqdnS3/pub)
+
+Want to contribute to our wiki? Fill out this [form](sharelinkhere.com)
diff --git a/_posts/2020-04-01-file-transfer.md b/_wiki/file-transfer.md
similarity index 67%
rename from _posts/2020-04-01-file-transfer.md
rename to _wiki/file-transfer.md
index 65e0c01ef..1703567bf 100644
--- a/_posts/2020-04-01-file-transfer.md
+++ b/_wiki/file-transfer.md
@@ -1,26 +1,26 @@
---
-layout: post
title: "Transferring Files via SCP and FileZilla"
description: "Copy files to and from Purdue's servers"
-author: Noah Alderton
+author:
+ - Noah Alderton
date: 2020-04-01 17:00:00 -0400
categories: technical
---
-## Introduction
+### Introduction
Sometimes there comes a need where you need to transfer a files between your personal computer and one of Purdue's servers (like data.cs.purdue.edu). The tutorial will show you how to transfer files between your computer and a remote server (and vice versa) using SCP via command line and FileZilla. These methods will work on Windows, Mac, and Linux.
-## Solution 1: Command Line
+### Solution 1: Command Line
-### Step 1
+#### Step 1
On Windows open “Windows PowerShell.” On Mac or Linux, open your respective Terminal.
-
+
-### Step 2
+#### Step 2
In order to transfer your files, we are going to use SCP. SCP works the same regardless of operating system. The SCP program takes the following parameters:
@@ -38,9 +38,9 @@ For example, if I wanted to transfer my hw2.c file to my current directory on my
scp nalderto@data.cs.purdue.edu:~/cs240/hw2/hw2.c .
```
-
+
-### Step 3
+#### Step 3
If everything ran properly, you should be able to access your homework on your personal machine. Keep in mind that this is a ***copy*** of your homework, so any changes you make on your personal machine will not be reflected on data and vice versa. If we want to transfer a file from our personal machine to data, we would need to run SCP again, flipping the source and destination directories.
@@ -50,24 +50,29 @@ For example, if I wanted to transfer my hw2.c file from my personal machine to d
scp hw2.c nalderto@data.cs.purdue.edu:~/cs240/hw2/
```
-## Solution 2: FileZilla
+### Solution 2: FileZilla
-### Step 1
+#### Step 1
If you are not comfortable with the command line, there are several graphical user interface programs that are available which provide the same functionality. In this tutorial we are covering FileZilla, as it is compatible with Windows, Mac, and Linux.
-You can download FileZilla here:[https://filezilla-project.org/download.php?show_all=1](https://filezilla-project.org/download.php?show_all=1)
+You can download FileZilla [here](https://filezilla-project.org/download.php?show_all=1).
-### Step 2
+#### Step 2
-Once you have finished installing FileZilla, open it up. On the top, there should be 4 input boxes. Put in the following information:Host: `sftp://data.cs.purdue.edu`Username: Purdue UsernamePassword: Purdue Career Account Password (same password used to SSH into data)Port: 22
+Once you have finished installing FileZilla, open it up. On the top, there should be 4 input boxes. Put in the following information:
-### Step 3
+- Host: `sftp://data.cs.purdue.edu`
+- Username: Purdue Username
+- Password: Purdue Career Account Password (same password used to SSH into data)
+- Port: 22
+
+#### Step 3
Once the appropriate information is entered, click “Quickconnect”. A dialog might appear about trusting the connect. Go ahead and trust the connection.
-### Step 4
+#### Step 4
You should now be connected to data! Your data filesystem is on the right part of the screen, while your personal computer’s files are on the left. You can drag and drop the files between the machines as you wish!
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/_wiki/fun-courses.md b/_wiki/fun-courses.md
new file mode 100644
index 000000000..bda08e4c0
--- /dev/null
+++ b/_wiki/fun-courses.md
@@ -0,0 +1,72 @@
+---
+title: "Fun/Interesting Classes at Purdue"
+description: "Take a break from your required classes!"
+author: Lauren Lum
+date: 2020-11-03 09:00:00 -0400
+categories: curriculum
+---
+
+### I have space in my schedule; what should I do?
+First and foremost- take classes that interest you! Purdue offers a broad spectrum of classes that exist outside of the requirements for your degree. In order to look for all available classes, go to mypurdue.purdue.edu and click on the **Registration** tab. In the **Register for Classes** category, click on **Look up Classes**. In this search tool, choose the term you are looking for and start looking through classes that might interest you.
+
+Need suggestions? Below is a compiled list of fun/interesting classes categorized by topic. Note that course numbers might have changed since this article was written.
+
+#### Art/Design
+
+##### AD 242: Ceramics I
+Introductory ceramics class. Note there is an extra fee for this class.
+
+##### HORT 270: Floral Design & Inter Plt Mgmt
+Class on flower arrangement and designs with flowers. Note there is an extra fee for this class.
+
+##### MUS 250: Music Appreciation
+No musical background needed- learn more about the fundamentals of music and listen to important musical compositions.
+
+##### AD 255: Art Appreciation
+No artistic background needed- learn more about the fundamentals of art and view art in galleries and in your community.
+
+#### Sports/Activity
+
+##### PES 115: Bowling (Indv Dual Mvmt Frm I)
+Bowling class where you can bowl in the Purdue Memorial Union! Note there is an extra fee for this class.
+
+#### Behavioral Science
+
+##### SOC 100: Intro Sociology
+Course covering introductory topics in sociology.
+
+#### Earth and Planetary Sciences
+
+##### EAPS 106: Geosciences in the Cinema
+This class explores geology and natural disasters in respect to science fiction movies. This class is known to have some of the most interesting/entertaining lectures!
+
+##### EAPS 104: Oceanography
+Introductory course on ocean life, ocean ecosystems, and natural processes in the ocean.
+
+##### EAPS 100: Planet Earth
+Introductory course on Earth’s natural processes.
+
+#### Outreach
+
+##### CS 39000SL: MAGIC (Service Learning Outreach)
+One credit course where students start programs and initiatives at local high schools in order to introduce girls to computer science. Learn more [here](https://www.cs.purdue.edu/outreach/magic.html)!
+
+##### EPICS
+EPICS is a service-learning design program in which teams of students partner with local and global community organizations to address human, community, and environmental needs. To view the different options for EPICS courses, look for courses that start with EPCS. Learn more [here](https://engineering.purdue.edu/EPICS)!
+
+#### History
+
+##### HIST 371: Society & Rock & Roll
+Examines post-WWII America and its relation to music, specifically rock and roll.
+
+#### Honors Courses
+There is a misconception that you need to be in the Honors College to take HONR courses. All you need is to have a minimum of a 3.0 GPA in order to enroll in HONR courses, check with your primary advisor about how to sign up for HONR courses. There are some (i.e. HONR 19901 and HONR 19902 that are restricted to first-year honors students).
+
+##### HONR 29900: Visiting Scholars Seminar
+One credit course where students attend events (currently virtual due to COVID-19) with visiting scholars and engage with their work. Every semester, the Honors College hosts a range of visitors from across disciplines.
+
+##### HONR 29900: Honors College Study Away Programs
+Study Away programs are a great way to learn about different communities, cultures, and socio-economic and technical issues in a variety of settings. They are offered during October break, spring break, Maymesters, and over the summer. Study Away programs are a great way to gain some experience abroad in a busy schedule. Some Study Away programs may also be a great way to fulfill your Great Issues requirement, check with your primary advisor about which ones. Learn more [here](https://honors.purdue.edu/current-students/study-away/index.php)!
+
+### Grade Options
+Want to take a course you’re interested in but don’t want it to count towards your GPA? Students also have the opportunity to change the grade mode for some classes to Pass/No Pass. In this grade mode, your final grade will be either P (Pass) or NP (No Pass). This grade will not impact your GPA. Note that if you change a grade mode for a certain class, this class will not count toward your degree requirements even if you get a P. The amount of credits of a P/NP class, however, counts towards your overall credit rank- for example, if you’re taking five classes that are each three credits and one class has the P/NP grade mode, you are still a 15 credit student. To fully understand if you can change a course to P/NP and how it will impact your progression in your degree, discuss this option more with your advisor.
diff --git a/_wiki/gh-pages.md b/_wiki/gh-pages.md
new file mode 100644
index 000000000..acf00bff0
--- /dev/null
+++ b/_wiki/gh-pages.md
@@ -0,0 +1,49 @@
+---
+title: "Github Pages Guide"
+description: "Create a personal website hosted and deployed by Github!"
+author: CS193 Team
+date: 2021-02-28 09:00:00 -0400
+categories: technical
+---
+
+### What is Github Pages?
+
+Github Pages allows you to easily host and publish a webpage through Github. To start, all you need is a Github account!
+
+### How Can I Set Up my GH Page?
+
+Set up a basic webpage by completing the following steps!
+
+1. Create a new repository
+
+
+
+2. Push your first file to the repository’s main branch. You can use our **[template file](https://raw.githubusercontent.com/Purdue-CSUSB/purdueusb.com/master/assets/downloads/wiki/gh-pages/index.md)** by saving as a markdown file (using the file extension .md)
+
+
+
+3. Click on the settings tab in your repository menu
+
+
+
+4. Scroll down to the section called GitHub Pages
+
+
+
+5. Change the Source setting to the option called main branch and click save
+
+
+
+6. At this point, you can visit https://
.github.io// to view the website you just activated.
+
+
+
+Congrats! Your webpage has been deployed successfully!
+
+### Editing my Page
+
+Any edits to your repository should automatically reflect onto your deployed Github Page, although your changes may not load immediately. If you do not see any changes, hit CTRL + SHIFT + R (or ⌘ + SHIFT + R on macs).
+
+If you want to continue to edit your page using Markdown (which is what index.md is using), check out [this markdown guide](https://learnxinyminutes.com/docs/markdown/)
+
+Want some inspiration on what to do with your new website and lots of cool free stuff? Take advantage of Github’s Student Developer Pack! To do this, navigate to [the Github Student website](https://education.github.com/pack/) and follow the steps there to request access.
diff --git a/_wiki/git-and-intellij.md b/_wiki/git-and-intellij.md
new file mode 100644
index 000000000..2099dd1ac
--- /dev/null
+++ b/_wiki/git-and-intellij.md
@@ -0,0 +1,75 @@
+---
+title: "Cloning a Github Repository with Intellij"
+description: "Learn how to use IntelliJ to clone a git repository and track your changes"
+author: CS193 Team
+date: 2021-03-26 12:00:00 -0400
+categories: technical
+---
+
+In this tutorial, we will be cloning a Github Repository into our local machine using IntelliJ and practicing committing and pushing our changes. To recap:
+
+Our *Github Repository* is the code hosted on Github. Our *local machine* is the computer/device you are going to be editing the code on.The changes made on your local machine will not be sent to our github repository until they are *committed and pushed*.
+
+## Step 1: Clone this repository
+
+Our first step is to clone a Github Repository onto our local machine
+
+### How to clone remote repo to local repo and manage it with IntelliJ
+
+1. Close any projects you currently have open
+
+`File` -> `Close Project`
+
+You should now see the main IntelliJ screen (It looks like the picture below).
+
+2. Checkout a project from Version Control. This is done from the welcome screen in Intellij!
+
+
+Click `Check out from Version Control` -> `Git` -> `Log in to GitHub...`
+
+The **URL** is asking for the HTTPS clone link. You can access this link if you go to the repository you’re trying to open with Intellij, click on the green ‘Code’ button on the top right, and then copying the HTTPS link.
+
+
+
+The **Directory** is where this project will be stored on YOUR computer. Specify where in your computer you’d like the project to be saved.
+
+3. Click 'Clone'
+
+
+4. Enter your GitHub credentials if asked for. (Note: The order of steps 3 and 4 might be flipped)
+
+
+
+5. Confirm checkout from version control. Click 'yes'
+
+
+
+6. IntelliJ will now ask you if you want to customize setup or rely on the default. You can just click 'Yes' or 'Confirm' on the screens that follow
+
+7. You’ve successfully cloned your git repository onto your computer (and opened it in Intellij)!
+
+You should see the files from your git repository on your Intellij window now. Remember, we have just *cloned* your git repository- all changes you make to these Intellij files will STAY on your local machine unless you push them to the central repository in Github. In other words, if you change a file from your new cloned repository on IntelliJ and save that file, you will NOT see your changes if you check your Github repository online. To learn how to commit and push your changes, move on to the next step!
+
+
+## Step 2: Push your changes to GitHub!
+
+After you make new changes, you must **commit and push** them so your Github repository will be updated. You can find Intellij's Git options on the top right of the window. Depending on which IntelliJ version you have, the icons could appear differently.
+
+
+
+1. Commit and push your changes. **Note: Depending on version, the pull and commit may look like blue and green arrows instead.**
+
+
+
+
+**Only selecting 'Commit' will NOT push you changes to your Github repository!**
+
+2. Confirm you'd like to push changes
+
+
+
+
+
+
+
+
diff --git a/_wiki/git-intro.md b/_wiki/git-intro.md
new file mode 100644
index 000000000..961cc6009
--- /dev/null
+++ b/_wiki/git-intro.md
@@ -0,0 +1,62 @@
+---
+title: "Git Guide"
+description: "Get good with the git guide"
+author: CS193 Team
+date: 2021-03-26 12:00:00 -0400
+categories: technical
+---
+
+## What’s a VCS?
+
+VCS stands for Version Control System. You can think about it like Google Docs, but for code. Unlike Google Docs, though, it tracks **every** change you make! VCS’s are used to help manage multiple developers working on the same project, among their many other benefits. There are many VCS’s available for you to use, but in this article we’ll be focusing on Git.
+
+## Why use a VCS?
+
+There are many reasons to use a VCS, and here are just a few:
+1. With a VCS, you can avoid losing work because of a crash or deleting a file that you didn’t mean to; you can **revert** your code back to when it was working
+2. Many CS classes at Purdue require knowledge of a VCS (and of these classes, most use Git)
+3. It’s the most common way to collaborate with code
+4. Most companies will expect you to be able to use a VCS
+5. And even if you just learn Git, the skills you learn will be transferable to other VCS’s you might have to use
+
+## Git
+
+To start using git, you must first create a repository. A repository is a folder with git functionality (it has version control now). You have to initialize git so that it’ll start keeping track of everything for you. Git keeps track of things in a hidden “.git” folder within the repository folder. Git’s like a program that goes in your folder and starts tracking everything you do.
+
+
+
+This repository on your local computer will be used to track and push changes to a **central repo**. If you are familiar with Github, this is the central repository hosted on Github. This central repository is the place where all collaborators can push their changes to and share with others. Think of it like a folder in Google Drive, but for holding code, not documents.
+
+
+
+
+So how do you push the changes you made in your local repository (that lives on your own computer) to the central repository (that your collaborators can use and see)? The basic git workflow is the following:
+
+* Change all the files you want
+* **ADD** your changes
+* **COMMIT** the files you added
+* **PUSH** your commit
+
+
+To clarify these terms:
+
+* **Adding a file** means that you want git to pay attention to that file. You’re adding that file to a list to be committed- during your next commit, the files you added will be included. Once you commit, all files are un-added and you must re-add them to include them in the next commit.
+* **Committing** means that you want git to save your changes to the files you previously added. A commit represents all the changes to the added files- this means it includes edits, additions, and deletions of files. Once something’s committed, you can always go back to that commit at any time in the future.
+* **Pushing** is when you push all commits that haven’t already been pushed to your central repository. Pushing is what actually updates your central repository, letting your collaborators view your changes.
+
+
+## Helpful Git Commands
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/_wiki/help-room.md b/_wiki/help-room.md
new file mode 100644
index 000000000..63139fbcd
--- /dev/null
+++ b/_wiki/help-room.md
@@ -0,0 +1,43 @@
+---
+title: Help Room Information
+description: Extra help for CS 193, CS 180, CS 182, CS 240
+author: Arya Sharma
+date: 2021-01-31
+categories: [tutor]
+redirect_from:
+ - /helproom/
+---
+
+### USB Help Room has started up for the spring semester!
+
+Below are the times tutors are available to help:
+
+| | Monday | Tuesday | Wednesday | Thursday |
+| ---- | ---- | ---- | ---- | ---- |
+| 6:00pm - 8:00pm (In-Person) | {::nomarkdown}Arianna Smith Rashmi Dahiya Sarah Thomas {:/} | {::nomarkdown}{:/} | {::nomarkdown}{:/} | {::nomarkdown}{:/} |
+| 8:00pm - 10:00pm (Virtual) | {::nomarkdown}Abhay Singh Thakur Satabdiya Roy {:/} | {::nomarkdown}Mohana Chandiran Dhukkaram {:/} | {::nomarkdown}Abhay Singh Thakur Chun Wang Sarah Thomas {:/} | {::nomarkdown}Satabdiya Roy Arianna Smith {:/} |
+
+## In-Person Tutoring
+
+In-Person Tutoring will take place in LWSN B160. All students are required to follow Protect Purdue guidelines.
+
+## Virtual Tutoring
+
+While we wait to get BoilerQ set up, we will post the tutor's individual zoom links below. Please join during their desginated tutoring times.
+
+- [Abhay Singh Thakur] [1]
+- [Satabdiya Roy] [2]
+- [Chun Wang] [3]
+- [Arianna Smith] [4]
+- [Mohana Chandiran Dhukkaram] [5]
+- [Sarah Thomas] [6]
+
+
+
+[1]: https://purdue-edu.zoom.us/j/4319336987
+[2]: https://purdue-edu.zoom.us/j/4461449971
+[3]: https://purdue-edu.zoom.us/j/2155527451
+[4]: https://purdue-edu.zoom.us/j/8950644250?pwd=THcvYVVJaldCV1ViaENvc0lvRmpnZz09
+[5]: https://purdue-edu.zoom.us/j/9564241816?pwd=aGJxQlFNMWZVRHpMZjZ1K0lhUjJPZz09
+[6]: https://purdue-edu.zoom.us/j/96403158840?pwd=dkw5eXI5WW45Um42NTE5azBIbnVYQT09
+
diff --git a/_wiki/joining-usb.md b/_wiki/joining-usb.md
new file mode 100644
index 000000000..a4f0a9ab9
--- /dev/null
+++ b/_wiki/joining-usb.md
@@ -0,0 +1,43 @@
+---
+title: "How to Join USB"
+description: "Want to lead cool initiatives like this student wiki?"
+author: Lauren Lum
+date: 2020-08-24 09:00:00 -0400
+categories: clubs
+---
+
+#### What is USB?
+
+Established in 1999, The Computer Science Undergraduate Student Board is dedicated to improving the student experience within Computer and Data Sciences at Purdue- whether by managing CS193, hosting forums for student advocacy, or maintaining a database of undergrad-tailored resources, USB is continually creating initiatives that will uphold our values. Check out our **[initiatives](https://purdueusb.com/initiatives)** page to see what we’re up to now!
+
+#### What do USB members do?
+
+That will be completely up to you! USB prides itself in being driven by student-led initiatives- if a board member has an idea and a plan, they are encouraged to take lead. Initiatives can be small or large, and members are given flexibility to be able to move from project to project if it’s in their best interest.
+
+#### What are the responsibilities of USB members?
+
+All USB members are expected to be working on at least one initiative- this can mean being the member of an initiative team or being the lead of an initiative with heightened responsibility. Along with work on your initiatives, USB has a mandatory hour-long weekly meeting where initiative leads can report their progress and members can discuss any new ideas or suggestions.
+
+#### How to Join
+USB opens applications early December and keeps them open until the beginning of Spring semester. If you follow us on social media (such as our **[Facebook](https://www.facebook.com/purdueusb)** or **[Instagram](https://instagram.com/purdueusb)**), you’ll be the first to know when it releases!
+
+#### What’s the application process?
+
+Our interview can be split up into 2 main parts.
+
+-Our general application is released early December and stays open until the beginning of Spring semester. It is made up of personal and behavioral questions about yourself. We’re not looking for the longest response (although details, if important, can definitely add to your application)- we want to see what you’re passionate about. If possible, give us a specific situation that or personal experience relates to the question.
+
+-Final interview offers will be sent out within the next two weeks. After scheduling your interview, we will invite you to either an in-person or virtual interview. You will be able to sit with two interviewers and answer some more personal and behavioral questions. Again, we want to know about you- sharing personal, specific experiences will allow us to get to know you better! During the second half of your interview you will be given a ‘situation’ question where you’re encouraged to share an idea or initiative you have for the CS department and how you would lead it.
+
+Traditionally, we have had a third optional event with all candidates that made it to the final round of interviews- in the past, we have invited candidates to bowl with us and have dinner. The purpose of this optional meeting is to be able to meet all candidates in a relaxed setting and to get to know you more personally. Since this event is optional, we do not use it as a definitive way to consider candidates, but it (if anything) gives an excuse to have some fun and free food!
+
+
+#### What are we looking for?
+
+USB cares about diversity. The computer science department heavily lacks diversity and we believe that the best way for a student organization to address this is to amplify and elevate the voice of minority groups in tech. We want our board to be representative of the diverse community we are trying to build.
+
+USB is also looking for passion and great ideas for the CS department. Initiatives are completely maintained and created by USB members, so we want to find individuals who truly care about the work they will do with us. We love to talk with candidates who have genuine interest or a specific experience that is driving their idea- maybe a love for teaching that has given them an idea for a mentorship initiative, or an experience in class that made them realize there was an easier way to hold PSOs.
+
+#### I believe in what USB is doing but do not want to become a member. Can I still make changes within the CS department?
+
+You definitely can! While USB provides existing relationships with faculty and a network of supportive members who can help start your initiative, it is by no means the only way to do so. If you have an idea for the CS department, take initiative and contact your professors, faculty members, and your peers. Conduct some research and form a plan- change can absolutely come from an individual. And USB is more than willing to help- if you feel stuck, don't hesitate to come to our scheduled **[office hours](https://purdueusb.com/officehours)** or send us an email about your idea and we will share any helpful resources we have!
\ No newline at end of file
diff --git a/_wiki/latex-guide.md b/_wiki/latex-guide.md
new file mode 100644
index 000000000..aef20a7a3
--- /dev/null
+++ b/_wiki/latex-guide.md
@@ -0,0 +1,36 @@
+---
+title: "LaTeX Guide"
+description: "Learn important LaTeX commands"
+author: CS193 Team
+date: 2021-03-26 12:00:00 -0400
+categories: technical
+---
+
+## Preamble
+
+* `\documentclass{article}` specifies the type of document that is going to be created. The area between the `\documentclass{...}` and the `\begin{document}` is know as the *preamble*. In this case, it is article, which is used of scientific journals, presentations, short reports, etc. Other document types are shown in the table below:
+
+Document Class | Purpose
+------------ | -------------
+article | Articles in scientific journals, presentations, short reports, program documentation, invitations, ...
+report | Longer reports containing several chapters, small books, thesis, ...
+book | Real books.
+slides | Slides with big sans serif letters.
+letter | Writing letters
+
+* The *top matter* includes the title, author, and date. These fields are used to store information about the document. This is useful for allowing LaTeX to automatically generate a title header for your document.
+
+* `\begin{document}` and `\end{document}` is where all the document contents are located. The information you type into your document will be stored between these two tags.
+
+## Title
+* `\maketitle` creates a title for document with the project title, author name, and date.
+
+## Sections
+There are several types of section headers to choose from. Replace the "..." with your desired section title.
+
+* `\section{...}`
+* `\subsection{...}`
+* `\subsubsection{...}`
+* `\paragraph{...}`
+* `\subparagraph{...}`
+
diff --git a/_wiki/latex-start.md b/_wiki/latex-start.md
new file mode 100644
index 000000000..4145dc6db
--- /dev/null
+++ b/_wiki/latex-start.md
@@ -0,0 +1,35 @@
+---
+title: "Getting Started with LaTeX"
+description: "Learn how to get started with LaTeX and Overleaf"
+author: CS193 Team
+date: 2021-03-26 12:00:00 -0400
+categories: technical
+---
+
+## What is LaTeX?
+LaTeX (pronounced "Lay Tech" or "Lah Tech") is a way of creating documents, just like Microsoft Word or Google Docs. The difference is that document content *and formatting* are written in plain text, as opposed to showing you the formatting of the document as you type it. LaTeX is widely used in academia. Chances are that your math exams are written in LaTeX. This is due to LaTeX being great for mathematical expressions. While it might be intimidating at first, once you become familiar with it, you can create fully customized professional documents even quicker than Word or Docs.
+
+## Why am I learning this?
+Learning CS and DS is not just learning how to code. There is a decent amount of theory and mathematics. You will take courses like CS 182 and CS 381 that are will require you to turn in mathematical write-ups, like proofs. Lots of statistics professors want you to type your homework, as well. LaTeX is useful in these cases. Also, technical research papers you might write in the future will likely be written in LaTeX.
+
+## What is Overleaf?
+You can think of Overleaf as the equivalent of Google Docs for LaTeX. It allows for documents to be created online and edited by multiple collaborators.
+
+## Step 1: Create an Overleaf account
+Purdue provides you with a free Professional Overleaf account ($30/month value). This gives you benefits like full document history, syncing with Dropbox/Github, and unlimited collaborators per project.
+
+**Be sure to use your Purdue email to receive Professional account benefits**
+
+[Click here to create an Overleaf Account](https://www.overleaf.com/edu/purdue)
+
+## Step 2: Creating your first document
+
+1. Verify your account via email
+2. Click the Project button on the top right corner
+3. Click the "Create First Project" button, and select "Blank Project."
+
+## Step 3: Your first compile!
+As you might have noticed, LaTeX has a lot in common with programming languages. Like Java or C, LaTeX needs to be compiled before you can see changes in your document. **Change the author from your Purdue username to your full name, and click the big green "Recompile" button.** This should update the document that is shown to the right. Clicking the arrow on the "Recompile" button gives you the option to automatically recompile between changes. You can enable this, if you so choose.
+
+## Step 4: Edit!
+Congrats, you’ve created your first document on Overleaf! Now all you have to do is start writing. LaTeX is very powerful, so much that our wiki can only cover a very small percentage of what it has to offer- if you want to get a good starting point, though, head over to our LaTeX guide [here]({{ site.url }}/wiki/latex-guide).
\ No newline at end of file
diff --git a/_posts/2020-05-09-lawson-fob.md b/_wiki/lawson-fob.md
similarity index 54%
rename from _posts/2020-05-09-lawson-fob.md
rename to _wiki/lawson-fob.md
index edeec22f8..fd2f7626c 100644
--- a/_posts/2020-05-09-lawson-fob.md
+++ b/_wiki/lawson-fob.md
@@ -1,27 +1,26 @@
---
-layout: post
title: "Getting a Lawson Key Fob"
description: "Access Lawson after hours"
author: Jay Hankins
date: 2020-05-09 12:00:00 -0400
categories: campus
---
-
+{% assign workstudy = "cs-workstudy@science.purdue.edu" %}
As a CS student, you can get a keyfob from the Lawson mailroom which will give you after-hours/weekend access to the Lawson building, as well as the student activities center in HAAS G072.
-## Getting a New Keyfob
-To get a keyfob, simply email cs-workstudy@science.purdue.edu . Here's a template that might be helpful:
-> **Subject:** Lawson Keyfob
+#### Getting a New Keyfob
+To get a keyfob, simply email [{{workstudy}}](mailto:{{workstudy}}). Here's a template that might be helpful:
+> **Subject:** Lawson Keyfob
+>
> To whom it may concern,
-
+>
> I am a computer science student enrolled in [CS courses here]. I would like a keyfob to access the Lawson building after-hours.
-
+>
> Thank you, [Your name]
-## Renewing an Existing Keyfob
-Keyfob access expires every semester. If you don't renew your keyfob, you won't be able to get into the building or offices without renewing.
+#### Renewing an Existing Keyfob
-To renew your keyfob, simply email **cs-workstudy@science.purdue.edu** again and request that your fob be renewed. In the email, tell them new CS courses you are enrolled in.
\ No newline at end of file
+Keyfob access expires every semester. If you don't renew your keyfob, you won't be able to get into the building or offices without renewing. To renew your keyfob, simply email [{{workstudy}}](mailto:{{workstudy}}) again and request that your fob be renewed. In the email, tell them new CS courses you are enrolled in.
\ No newline at end of file
diff --git a/_wiki/make-article.md b/_wiki/make-article.md
new file mode 100644
index 000000000..47682ce11
--- /dev/null
+++ b/_wiki/make-article.md
@@ -0,0 +1,94 @@
+---
+title: "Contribute to the Wiki"
+description: "Add or edit an article on the Student Wiki"
+author: Noah Alderton
+date: 2020-10-28 12:00:00 -0400
+categories: campus
+---
+
+### Introduction
+
+The Student Wiki is designed to be a source of information that is useful for the Purdue CS/DS community. We encourage anyone to create a new article for the Wiki or edit a preexisting article. We only ask that new articles are tangentially useful to the CS/DS community. We are using GitHub as the means of managing edits to the Student Wiki. Therefore, to contribute to the Student Wiki, you must have a GitHub account
+
+### Create a New Article
+
+#### Step 1
+First, you need to fork the purdueusb.com website repository. This can be done by going to the [GitHub repository page](https://github.com/Purdue-CSUSB/purdueusb.com), and click the "Fork" button on the top right.
+
+
+
+#### Step 2
+Once you are in your fork of the Purdue USB website repository, navigate to the `_wiki` directory.
+
+
+
+#### Step 3
+Next, click "Add file" on the top right, then click "Create new file".
+
+
+
+#### Step 4
+From here you are going to create a Markdown file for your article. If you are not familiar with Markdown, please read through [this guide](https://guides.github.com/features/mastering-markdown/).
+
+The name of your Markdown file's name should be no more that 3 words long, with dashes (-) separating the words. The file should always end in the `.md` file extension. The filename will be the URL slug, so `lawson-fob.md` becomes `/wiki/lawson-fob`.
+
+To maintain format consistency, please **do not use `h1 (#)` or `h2 (##)` headings**.
+
+You can also use emojis seen on this [cheat sheet](https://www.webfx.com/tools/emoji-cheat-sheet/)! :bangbang:
+
+The beginning of your Markdown file should begin with "front matter." This is metadata that is used by Jekyll to better organize your article. This is an example of front matter.
+
+```yaml
+---
+title: "Contribute to the Wiki"
+description: "Add or edit an article on the Student Wiki"
+author: Noah Alderton
+date: 2020-10-28 12:00:00 -0400
+categories: campus
+---
+```
+
+- title: Title of the article
+- description: Describe what the article is about. Keep this down to one sentence.
+- author: List of author names exactly as they appear in membership data files.
+- date: Date of most recent edit
+- categories: Category this fits the article, like `technical` or `campus`. Multiple categories can be included, as long as they are comma separated and between square brackets.
+
+**A note about images**: Please only use images hosted by USB - not from an outside source. In addition, use descriptive and readable captions for wiki images, as they will be displayed to the user and read aloud via screen readers. Add images to a directory in `/assets/images/wiki/`. From there, will be able to reference local images in your article like so:
+
+```md
+
+```
+
+#### Step 5
+Once you are finished typing up your article, add a commit message, and click the green "Commit new file" button on the bottom.
+
+
+
+#### Step 6
+Now, you need to go to the "Pull requests" tab, and click the green "New pull request" button. Here, you are going to create a new pull request that merges your fork of the website into the Purdue-CSUSB/purdueusb.com repo.
+
+
+
+### Edit Existing Article
+
+#### Step 1
+Navigate to the `_wiki` directory and open the Markdown file that you wish to edit.
+
+
+
+#### Step 2
+Click the edit button on the top right. This will make a fork of the website repository. From here you can the desired changes to the wiki article. If you are not familiar with Markdown, please read through [this guide]. Also, please **do not use `h1 (#)` or `h2 (##)` headings** in an effort to maintain format consistency across the articles.
+
+
+
+#### Step 3
+Once you are finished making those edits, add a commit message, and click the green "Commit changes" button on the bottom.
+
+
+
+#### Step 4
+Now, you need to go to the "Pull requests" tab, and click the green "New pull request" button. Here, you are going to create a new pull request that merges your fork of the website into the Purdue-CSUSB/purdueusb.com repo.
+
+
+
diff --git a/_posts/2020-03-04-rent-equipment.md b/_wiki/rent-equipment.md
similarity index 68%
rename from _posts/2020-03-04-rent-equipment.md
rename to _wiki/rent-equipment.md
index 22c4dd193..006350d6f 100644
--- a/_posts/2020-03-04-rent-equipment.md
+++ b/_wiki/rent-equipment.md
@@ -1,5 +1,4 @@
---
-layout: post
title: "How can I rent equipment?"
description: "Borrow equipment to tinker with for free"
author: Noah Alderton
@@ -7,9 +6,7 @@ date: 2020-03-04 17:00:00 -0400
categories: campus
---
-There are a few different opportunities to rent equipment for both classwork and personal use. The Department of Computer Science allows CS/DS students to rent various equipment at this link:
-
-[https://www.cs.purdue.edu/resources/facilities/lwsndevices.html](https://www.cs.purdue.edu/resources/facilities/lwsndevices.html)
+There are a few different opportunities to rent equipment for both classwork and personal use. The Department of Computer Science allows CS/DS students to [rent various equipment online](https://www.cs.purdue.edu/resources/facilities/lwsndevices.html).
The following devices are available to rent for 1 week at a time:
@@ -26,4 +23,4 @@ The following devices are available to rent for 1 week at a time:
Additionally, Purdue Libraries has cameras, camcorders, tripods, and hard drives available to rent for 3 days.
-[https://www.lib.purdue.edu/services/equipment](https://www.lib.purdue.edu/services/equipment)
\ No newline at end of file
+To learn more, see the [Purdue Libraries Equipment](https://calendar.lib.purdue.edu/reserve/equipment/equipment) page.
diff --git a/_wiki/searching-our-wiki.md b/_wiki/searching-our-wiki.md
new file mode 100644
index 000000000..b39d21bab
--- /dev/null
+++ b/_wiki/searching-our-wiki.md
@@ -0,0 +1,35 @@
+---
+title: "Optimize your search on our wiki"
+description: "Save yourself some time!"
+author: Zach Bryant
+date: 2020-06-29 00:00:00 -0400
+categories: meta
+---
+
+Our wiki is built with tools make your searches more powerful and precise. You can use any combination of the operators explained below:
+
+### Wildcards
+Wildcards let you match any text and are represented by asterisks (\*). For example, `C* S*` matches words starting with *C* or *S*. Together they match phrases like *Computer Science* or *Canadian Studies*, among other things.
+
+### Fields
+Fields relate to meta-information about our articles, such as the date or author. You can use them to search only titles, for example, instead of searching the entire wiki. Search for this article with `title:optimize`.
+
+Available fields: `title`, `description`, `content`, `author`, `category`, and `date`.
+
+### Boosts
+You can use boosts to prioritize certain search terms over others. For example, `foo^10 bar` tells the website you're 10x more interested in the search term *foo* than *bar*. Articles containing *foo* would then be higher in the search results.
+
+### Fuzzy Matches
+Fuzzy matching allows for some grace if you misspell a term or are off by a few letters. For example, `foo~1` matches anything 1 letter away from *foo*, like *boo* or *food*. It will not match words like *boot* because it has a difference of two letters.
+
+### Term Presence
+Term presence allows you to explicitly include or exclude phrases in your search query with the symbols `+` and `-`, respectively. For example, `+foo -bar baz` matches only content with *foo* and without *bar*, that also may contain *baz*.
+
+By default, a result comes back if any word separated by a space matches some content. This is a limitation of the code our website uses. Searching for `+author:Purdue Pete` is seen as two separate terms, `+author:Purdue` and `Pete`.
+
+Nothing's perfect.
+
+### Bringing It All Together
+You can make your search as simple or as complex as you'd like. As an example, if I wanted to search for meta-articles I've authored in June, containing the mis-spelled phrase *crakatoa*, I could type `category:meta +author:Zach +Bryant +date:June -crakatoa~1`. Except at this time, my *only* article contains the phrase *krakatoa*.
+
+Thank you for coming to my TED talk.
diff --git a/_posts/2020-05-10-ssh-shortcut.md b/_wiki/ssh-shortcut.md
similarity index 94%
rename from _posts/2020-05-10-ssh-shortcut.md
rename to _wiki/ssh-shortcut.md
index 2ebfa2841..98efed412 100644
--- a/_posts/2020-05-10-ssh-shortcut.md
+++ b/_wiki/ssh-shortcut.md
@@ -1,5 +1,4 @@
---
-layout: post
title: "SSH Shortcut for Purdue Servers"
description: "Tired of typing data.cs.purdue.edu?"
author: Jay Hankins
@@ -11,10 +10,10 @@ It can be tedious to type `ssh @.cs.purdue.edu` over and over
Here's a little shell function which shortens this command to just with an optional argument of the machine you wish to connect to.
-## Installation
+### Installation
Copy and paste the following code into your shell rc file. This may be `~/.bashrc` or `~/.zshrc`.
-```shell
+```bash
() {
ssh @${1:-}.cs.purdue.edu
}
@@ -22,17 +21,17 @@ Copy and paste the following code into your shell rc file. This may be `~/.bashr
Make sure to replace any information in between the `<` and `>` symbols. For example, my function looks like this:
-```shell
+```bash
hankinsj () {
ssh hankinsj@${1:-data}.cs.purdue.edu
}
```
My username is `hankinsj` and my default machine is `data` in this example.
-## Usage
+### Usage
`$ `
You can include an optional argument which specifies the machine to connect to. Otherwise, it will connect to your chosen default machine.
-## Example
+### Example
`$ hankinsj mc04`
This will connect me automatically to `mc04.cs.purdue.edu`.
\ No newline at end of file
diff --git a/_wiki/summer-plans.md b/_wiki/summer-plans.md
new file mode 100644
index 000000000..ada108aa7
--- /dev/null
+++ b/_wiki/summer-plans.md
@@ -0,0 +1,64 @@
+---
+title: "It's Spring Semester – What do I do with my summer?"
+description: "Looking last minute for a summer opportunity?"
+author: Sarah Thomas/USB
+date: 2022-04-27 09:00:00 -0400
+categories: [research,internship]
+---
+
+## It's spring semester, and I am still searching for sort of technical experience for the summer. What should I do?
+
+Important note – a "productive" summer doesn't have to involve an internship or technical work! But for someone who's still searching for a summer resume-building activity in the Spring semester, there are opportunities (many of which are offered by Purdue) that still available.
+
+### Finding a Summer Internship
+
+#### The myCCO (Center for Career Opportunities) Website [(link)](https://www.cco.purdue.edu/Home/myCCO)
+The CCO doesn't always have CS/DS specific resources and opportunities, but it is the best place to find centralized job listings.
+
+Tips for optimal job search using the myCCO job search tool:
+- Filter job results by "Posted In Last 24 Hours". Most companies post job listings and collect applicants within a span of few days, so finding newly posted listings gives you a better chance of hearing a response.
+- Search jobs by "Desired Majors" rather than "Job Function" – some roles may sound non-technical at first.
+
+#### Spring Career Fairs & Company Days
+Every spring semester, Purdue has a "Just In Time" career fair. These companies are looking to fill positions right away, and many are looking for CS/DS students. The CCO also hosts career fairs in the spring.
+
+Attend as many spring company days as possible. Company days have lower attendance in spring semesters than in fall semesters –– attending them is a great opportunity to get more 1-on-1 time with recruiters or company representatives. Look out for notifications about company days in the Opportunity Update that is sent out to CS/DS majors!
+
+### Research Opportunities
+Many students are interested in research, but are unsure about how to get started. The summer is a great time to explore research.
+
+#### 390 Research Courses
+Some 390s are course numbers for research work. Once you have contacted a professor or lab and been invited to do research work, you can arrange to enroll in a 390 course during the summer term. More on finding labs with open positions below.
+
+
+##### CS 390s
+If you are enrolled in a CS or DS course, chances are your professor either is involved in research, or knows another professor who is doing research. Talking with your professors about their research work and asking if they have openings for you to get involved is a great way to get your foot in the door.
+
+If talking with professors in person sounds daunting, the CS Department Website has a compiled list of research areas and descriptions, the labs and professors doing research in each area, and contact information. Reach out using the contact information from these listings. [Link here](https://www.cs.purdue.edu/research/).
+
+
+##### Other Department 390s
+You don't have to limit your research search to the CS department. Many other departments are looking for CS/DS students, and even if they have not specifically posted an opening for a CS student, it is likely that they could benefit from taking on someone with technical skills.
+
+The Pyschology Department, for example, has research opportunities listed on [this website](https://www.purdue.edu/hhs/psy/undergraduate/beyond_the_classroom/research.html).
+
+
+#### EPICS, VIP, and other structured programs
+There are structured Purdue programs where you can do technical projects and research as well.
+
+##### EPICS
+EPICS is a service-learning design program for Engineering Students that is also open to Computer Science and Data Science majors. There are several teams that work in various fields – each team works with a partner in the community and develops a product to address the partner's needs. To see a list of EPICS teams and their current work, [visit the EPICS website here](https://engineering.purdue.edu/EPICS/teams ).
+
+You can enroll in EPICS as a course during the summer term. For more information on how to join, visit the [EPICS Registration Information page](https://engineering.purdue.edu/EPICS/purdue/epics-purdue/join-epics).
+
+
+##### VIP (Vertically Integrated Projects)
+VIP is a program that provides opportunities to do research and design projects related to active research areas of Purdue faculty members. Many of the teams' work/research is focused on Data Science and Computer Science.
+
+You can enroll in VIP as a summer term course For more information on the current teams and information on enrolling in the VIP program, visit the [VIP website](https://engineering.purdue.edu/VIP).
+
+
+##### REUS (Research Experience for Undergraduates) in Computer and Information Science and Engineering
+REUs are summer research programs for undergraduates studying science, engineering, or mathematics. The programs are sponsored by the National Science Foundation, and are hosted in various universities.
+
+See the full list of programs on the [NSF website](https://www.nsf.gov/crssprgm/reu/list_result.jsp?unitid=5049).
diff --git a/_wiki/terminal-cheatsheet.md b/_wiki/terminal-cheatsheet.md
new file mode 100644
index 000000000..ad465eb28
--- /dev/null
+++ b/_wiki/terminal-cheatsheet.md
@@ -0,0 +1,239 @@
+---
+title: "Terminal cheatsheet"
+description: "Learn some important UNIX commands"
+author: CS193 Team
+date: 2021-03-14 12:00:00 -0400
+categories: technical
+---
+
+# Basic UNIX Terminal Guide
+
+## pwd (Print Working Directory)
+
+#### Description
+
+Prints path of current directory. (Think: what is the address of the folder I’m viewing?)
+
+#### Example
+
+`pwd`
+
+
+## ls (List)
+
+#### Description
+
+Prints contents of current directory. (What stuff is in the current folder?)
+
+#### Tags
+
+- `-a` = all files (include hidden files)
+
+- `-l` = detailed list
+
+#### Arguments
+
+Path to the folder you want to see the contents of (Leave blank to see current folder contents)
+
+#### Example
+
+`ls -al`
+
+## cd (Change Directory)
+
+#### Description
+
+Move to the specified path. (I want to go somewhere, and I need to tell the terminal where.
+
+#### Arguments
+
+Exact path of the folder you want to move to, or just a subdirectory
+
+#### Syntax
+
+`cd Directory`
+
+#### Example
+
+`cd ~/Documents`
+
+
+## rm (Remove)
+
+#### Description
+
+Permanently deletes a file or folder (No trash/recycling bin!)
+
+#### Tags
+
+- `-r` - Delete a folder and its contents
+
+- `-f` - Stop confirmation prompt for write-protected files
+
+#### Arguments
+
+Path to the folder/file you want to delete
+
+#### Syntax
+
+`rm [TAGS] Path`
+
+#### Example
+
+`rm -rf ~/Documents/Junk`
+
+## mv (Move)
+
+#### Description
+
+Move an existing file somewhere else. It can also be used to rename files.
+
+#### Arguments
+
+1. The file you want to move
+
+2. The destination
+
+#### Example
+
+`mv ~/Documents/source/file.txt ~/Documents/destination/file.txt`
+
+`mv ~/old_name.txt ~/new_name.txt`
+
+## cp (Copy)
+
+#### Description
+
+Copy files or folders to a new location
+
+#### Syntax
+
+`cp Source Destination`
+
+`cp File-1 File-2 File-3 ... Destination`
+
+#### Example
+
+`cp ~/Documents/source/file.txt ~/Documents/destination/file.txt`
+
+`cp ~/Desktop/Name.java ~/Desktop/Age.java ~/CS180/Homework_1`
+
+## clear
+
+#### Description
+
+Clear the Terminal Screen
+
+#### Example
+
+`$ clear`
+
+
+## top
+
+#### Description
+
+See what programs are currently running
+
+#### Example
+
+`top`
+
+## killall
+
+#### Description
+
+Kill all programs with the specified program_name
+
+#### Syntax
+
+`killall Program_Name`
+
+#### Example
+
+`killall firefox`
+
+## touch
+
+#### Description
+
+Creates a new file in the location specified in the argument
+
+#### Arguments
+
+The files that are to be created
+
+#### Syntax
+
+`touch File-1 File-2 File-3 ...`
+
+#### Example
+
+`touch ~/Documents/file1.txt ~/CS193/HW2/file2.txt`
+
+## Other Contents
+
+### Files and Folders with Spaces
+
+If a path includes files or folders with spaces, either use quotations marks (" ") or a backslash (\\) before the space. For example:
+
+`~/"My Files"/test.txt`
+
+or
+
+`~/My\ Files/test.text`
+
+
+
+### Shortcuts
+
+- `~` - Home Directory
+
+- `.` - Current Directory
+
+- `..` - Parent Directory
+
+### Aliases
+
+1. Aliases are set in `~/.bashrc`
+
+2. Add a line to `~/.bashrc` that looks like: `alias =“”`
+
+3. Save file, tell bash to reload: `$ source ~/.bashrc`
+
+### Wildcards
+
+#### Description
+
+Used to include a group of files with smiliar characteristics.
+
+They can be used with nearly any UNIX command.
+
+#### Example
+
+* `cp ~/Desktop/*.java ~/Documents/Project`
+
+ * This command will copy all `.java` files found in the Desktop directory into the `Documents/Project` folder.
+
+* `mv ~/Desktop/file* ~/Documents`
+
+ * This command will copy all files that begin with "file" in the name into the `Documents` directory.
+
+### Vim and Nano Customization
+
+From Lecture 2, you should have learned about how Vim enables commands by typing colon ":" followed by your command. However, there are some commands you don't want to have to type every time. For example, it's pretty normal to want line numbers whenever you open a file. But having to type `:set number` every time you run Vim kinda sucks. How can we avoid this?
+
+Your `~/.vimrc` (Vim Run Control) file controls what commands will run every time Vim is invoked. You can customize it to your heart's content.
+
+You can disable this at any time within a file by typing `:set nonumber` within Vim, or by deleting it from your `~/.vimrc` and then re-opening Vim again.
+
+As you can imagine, there are thousands of commands you can leverage in your `~/.vimrc` file. For a great resource on customization, read [this article](https://dougblack.io/words/a-good-vimrc.html).
+
+A favorite quote from that article that you should definitely adhere to is:
+
+>"Don't put any lines in your vimrc that you don't understand."
+
+For those who are using nano, here is an article about [nano customization](https://www.nano-editor.org/dist/v2.1/nanorc.5.html). Similar to Vim, you add your commands in your `~/.nanorc` file.
+
+
+
diff --git a/_wiki/terminal.md b/_wiki/terminal.md
new file mode 100644
index 000000000..8f1cd38a6
--- /dev/null
+++ b/_wiki/terminal.md
@@ -0,0 +1,42 @@
+---
+title: "Using Terminal"
+description: "Learn how to efficiently use terminal"
+author: CS193 Team
+date: 2021-03-14 12:00:00 -0400
+categories: technical
+---
+
+### What is Terminal?
+
+When you use the terminal, you talk more directly with your computer. Think of it as a more powerful (but less friendly) finder/file explorer.
+
+### Why Use Terminal?
+
+There are many benefits of using Terminal! Here are some important points:
+- Accessibility to programmers - with terminal, you can do important things like compile source code, access other computers, and launch programs without having to open up any other programs
+- Versatility + Customizability - Say you want to move all files that start with ‘cool’ and end with ‘.gif’ into a folder called ‘cool gifs’. With terminal, this is one command!
+- Purdue CS and terminal - Most courses will have projects/tests/homeworks that assume terminal knowledge
+
+### How Do I Open a Terminal Window?
+There are lots of options for Windows and Mac computers to open a terminal window! For Windows, you can open the Command Prompt program to open a terminal window and the equivalent program on Mac is Terminal. Alternatively, there are many other programs you can download such as Git Bash, which gives you a Bash terminal with extra Git functionalities.
+
+### Now What?
+For many, the interface of a terminal window can be confusing at first. To utilize terminal, you must type in UNIX commands. Remember that when you’re moving around in terminal, you are essentially ‘clicking’ folders and files like you would in File Explorer/Finder. The way you’ll be interacting with terminal is by giving it commands. Here’s the basic structure of Linux commands:
+
+
+
+It’ll be helpful to get comfortable with moving around with terminal before learning more difficult actions. Here’s some important commands to help you get comfortable with navigating with terminal:
+
+
+
+
+
+
+
+
+
+### More Commands
+As mentioned before, one of the important benefits of using terminal is that it gives you a lot of flexibility and options- that means there are way too many available commands to talk about in this article! To get started, check out our terminal guide that’ll give you some of the important UNIX commands. You can find another helpful guide [here](http://mally.stanford.edu/~sr/computing/basic-unix.html) or check out our terminal cheatsheet [here]({{ site.url }}/wiki/terminal-cheatsheet)
+
+If you want more information about a command, use the command **man ** to get more information about any given command. For example, **man ls** gives you info about the ls command.
+
diff --git a/_wiki/usb-constitution.md b/_wiki/usb-constitution.md
new file mode 100644
index 000000000..30175478e
--- /dev/null
+++ b/_wiki/usb-constitution.md
@@ -0,0 +1,37 @@
+---
+title: "USB's Current Constitution"
+description: "USB's Constitution"
+author: Cindy Ding
+date: 2022-05-25 12:00:00 -0400
+categories: campus
+---
+
+
+
+
+
+
+
+
+
+
diff --git a/about.html b/about.html
deleted file mode 100644
index 054b24b72..000000000
--- a/about.html
+++ /dev/null
@@ -1,29 +0,0 @@
----
-title: About Us
-permalink: /about/
----
-
-
-
-
-{%- include head.html -%}
-
-
-
- {%- include header.html -%}
- About Us
-
-
-
- {%- include aboutus.html -%}
-
-
-
- {%- include members.html -%}
-
-
- {%- include footer.html -%}
-
-
-
-
\ No newline at end of file
diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png
deleted file mode 100644
index bc6ba30af..000000000
Binary files a/android-chrome-192x192.png and /dev/null differ
diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png
deleted file mode 100644
index 45e8e4385..000000000
Binary files a/android-chrome-512x512.png and /dev/null differ
diff --git a/apple-touch-icon.png b/apple-touch-icon.png
deleted file mode 100644
index 971d9fc45..000000000
Binary files a/apple-touch-icon.png and /dev/null differ
diff --git a/assets/downloads/wiki/gh-pages/index.md b/assets/downloads/wiki/gh-pages/index.md
new file mode 100644
index 000000000..d6ba0e59a
--- /dev/null
+++ b/assets/downloads/wiki/gh-pages/index.md
@@ -0,0 +1,41 @@
+---
+title: "index"
+---
+
+## Welcome to GitHub Pages
+
+You can use the [editor on GitHub](https://github.com/kalutes/CS193_Fall18_Lab1/edit/master/index.md) to maintain and preview the content for your website in Markdown files.
+
+Whenever you commit to this repository, GitHub Pages will run [Jekyll](https://jekyllrb.com/) to rebuild the pages in your site, from the content in your Markdown files.
+
+### Markdown
+
+Markdown is a lightweight and easy-to-use syntax for styling your writing. It includes conventions for
+
+```markdown
+Syntax highlighted code block
+
+# Header 1
+## Header 2
+### Header 3
+
+- Bulleted
+- List
+
+1. Numbered
+2. List
+
+**Bold** and _Italic_ and `Code` text
+
+[Link](url) and 
+```
+
+For more details see [GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/).
+
+### Jekyll Themes
+
+Your Pages site will use the layout and styles from the Jekyll theme you have selected in your [repository settings](https://github.com/kalutes/CS193_Fall18_Lab1/settings). The name of this theme is saved in the Jekyll `_config.yml` configuration file.
+
+### Support or Contact
+
+Having trouble with Pages? Check out our [documentation](https://help.github.com/categories/github-pages-basics/) or [contact support](https://github.com/contact) and we’ll help you sort it out.
diff --git a/assets/images/blog-temp/png/group.png b/assets/images/blog-temp/png/group.png
new file mode 100644
index 000000000..cda39ab5c
Binary files /dev/null and b/assets/images/blog-temp/png/group.png differ
diff --git a/assets/images/blog-temp/png/image b/assets/images/blog-temp/png/image
new file mode 100644
index 000000000..6e9f0da13
--- /dev/null
+++ b/assets/images/blog-temp/png/image
@@ -0,0 +1 @@
+h
diff --git a/assets/images/blog-temp/webp/Blog_Initiative.webp b/assets/images/blog-temp/webp/Blog_Initiative.webp
new file mode 100644
index 000000000..64adfab8a
Binary files /dev/null and b/assets/images/blog-temp/webp/Blog_Initiative.webp differ
diff --git a/assets/images/blog-temp/webp/image b/assets/images/blog-temp/webp/image
new file mode 100644
index 000000000..6e9f0da13
--- /dev/null
+++ b/assets/images/blog-temp/webp/image
@@ -0,0 +1 @@
+h
diff --git a/assets/images/deserted.svg b/assets/images/deserted.svg
new file mode 100644
index 000000000..19db06b4c
--- /dev/null
+++ b/assets/images/deserted.svg
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/deserted.webp b/assets/images/deserted.webp
new file mode 100644
index 000000000..7abdf71c1
Binary files /dev/null and b/assets/images/deserted.webp differ
diff --git a/assets/images/figma.svg b/assets/images/figma.svg
new file mode 100644
index 000000000..f1a2faa12
--- /dev/null
+++ b/assets/images/figma.svg
@@ -0,0 +1 @@
+Figma.logo Created using Figma
\ No newline at end of file
diff --git a/assets/images/group.png b/assets/images/group.png
index d22c6bfb8..cda39ab5c 100644
Binary files a/assets/images/group.png and b/assets/images/group.png differ
diff --git a/assets/images/group.webp b/assets/images/group.webp
new file mode 100644
index 000000000..64adfab8a
Binary files /dev/null and b/assets/images/group.webp differ
diff --git a/assets/images/initiatives/CS193_Logo.png b/assets/images/initiatives/CS193_Logo.png
deleted file mode 100644
index b88d12ec5..000000000
Binary files a/assets/images/initiatives/CS193_Logo.png and /dev/null differ
diff --git a/assets/images/initiatives/Ei-sc-github.svg b/assets/images/initiatives/Ei-sc-github.svg
new file mode 100644
index 000000000..e9164b015
--- /dev/null
+++ b/assets/images/initiatives/Ei-sc-github.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/images/initiatives/Help_Room_Logo.png b/assets/images/initiatives/Help_Room_Logo.png
deleted file mode 100644
index fe6f0f3e6..000000000
Binary files a/assets/images/initiatives/Help_Room_Logo.png and /dev/null differ
diff --git a/assets/images/initiatives/Mentorship.png b/assets/images/initiatives/Mentorship.png
deleted file mode 100644
index 6fa3f8b8e..000000000
Binary files a/assets/images/initiatives/Mentorship.png and /dev/null differ
diff --git a/assets/images/initiatives/Office_Hours_Logo.png b/assets/images/initiatives/Office_Hours_Logo.png
deleted file mode 100644
index 9a90ef691..000000000
Binary files a/assets/images/initiatives/Office_Hours_Logo.png and /dev/null differ
diff --git a/assets/images/initiatives/Virtual_Office_Hours_Logo.png b/assets/images/initiatives/Virtual_Office_Hours_Logo.png
deleted file mode 100644
index a812da16e..000000000
Binary files a/assets/images/initiatives/Virtual_Office_Hours_Logo.png and /dev/null differ
diff --git a/assets/images/initiatives/png/Blog_Initiative.PNG b/assets/images/initiatives/png/Blog_Initiative.PNG
new file mode 100644
index 000000000..025457709
Binary files /dev/null and b/assets/images/initiatives/png/Blog_Initiative.PNG differ
diff --git a/assets/images/initiatives/CS191_Panel_Logo.png b/assets/images/initiatives/png/CS191_Panel_Logo.png
similarity index 100%
rename from assets/images/initiatives/CS191_Panel_Logo.png
rename to assets/images/initiatives/png/CS191_Panel_Logo.png
diff --git a/assets/images/initiatives/png/CS193_Logo.png b/assets/images/initiatives/png/CS193_Logo.png
new file mode 100644
index 000000000..2fa37bb75
Binary files /dev/null and b/assets/images/initiatives/png/CS193_Logo.png differ
diff --git a/assets/images/initiatives/png/Help_Room_Logo.png b/assets/images/initiatives/png/Help_Room_Logo.png
new file mode 100644
index 000000000..2f84e6ae8
Binary files /dev/null and b/assets/images/initiatives/png/Help_Room_Logo.png differ
diff --git a/assets/images/initiatives/png/International-Initiative.png b/assets/images/initiatives/png/International-Initiative.png
new file mode 100644
index 000000000..f2fb2e78a
Binary files /dev/null and b/assets/images/initiatives/png/International-Initiative.png differ
diff --git a/assets/images/initiatives/png/Mentorship.png b/assets/images/initiatives/png/Mentorship.png
new file mode 100644
index 000000000..5d1d03b14
Binary files /dev/null and b/assets/images/initiatives/png/Mentorship.png differ
diff --git a/assets/images/initiatives/png/Office_Hours_Logo.png b/assets/images/initiatives/png/Office_Hours_Logo.png
new file mode 100644
index 000000000..d922dd209
Binary files /dev/null and b/assets/images/initiatives/png/Office_Hours_Logo.png differ
diff --git a/assets/images/initiatives/Student_Forum_Logo.png b/assets/images/initiatives/png/Student_Forum_Logo.png
similarity index 100%
rename from assets/images/initiatives/Student_Forum_Logo.png
rename to assets/images/initiatives/png/Student_Forum_Logo.png
diff --git a/assets/images/initiatives/Tutor_List.png b/assets/images/initiatives/png/Tutor_List.png
similarity index 98%
rename from assets/images/initiatives/Tutor_List.png
rename to assets/images/initiatives/png/Tutor_List.png
index c3d204857..e6b1a7d14 100644
Binary files a/assets/images/initiatives/Tutor_List.png and b/assets/images/initiatives/png/Tutor_List.png differ
diff --git a/assets/images/initiatives/png/Virtual_Office_Hours_Logo.png b/assets/images/initiatives/png/Virtual_Office_Hours_Logo.png
new file mode 100644
index 000000000..f3c58412c
Binary files /dev/null and b/assets/images/initiatives/png/Virtual_Office_Hours_Logo.png differ
diff --git a/assets/images/initiatives/png/letter_image.png b/assets/images/initiatives/png/letter_image.png
new file mode 100644
index 000000000..5bd09f289
Binary files /dev/null and b/assets/images/initiatives/png/letter_image.png differ
diff --git a/assets/images/initiatives/webp/Blog_Initiative.webp b/assets/images/initiatives/webp/Blog_Initiative.webp
new file mode 100644
index 000000000..6025c1c1c
Binary files /dev/null and b/assets/images/initiatives/webp/Blog_Initiative.webp differ
diff --git a/assets/images/initiatives/webp/CS191_Panel_Logo.webp b/assets/images/initiatives/webp/CS191_Panel_Logo.webp
new file mode 100644
index 000000000..e28187cc9
Binary files /dev/null and b/assets/images/initiatives/webp/CS191_Panel_Logo.webp differ
diff --git a/assets/images/initiatives/webp/CS193_Logo.webp b/assets/images/initiatives/webp/CS193_Logo.webp
new file mode 100644
index 000000000..4cd87aaa6
Binary files /dev/null and b/assets/images/initiatives/webp/CS193_Logo.webp differ
diff --git a/assets/images/initiatives/webp/Help_Room_Logo.webp b/assets/images/initiatives/webp/Help_Room_Logo.webp
new file mode 100644
index 000000000..89869ce04
Binary files /dev/null and b/assets/images/initiatives/webp/Help_Room_Logo.webp differ
diff --git a/assets/images/initiatives/webp/International-Initiative.webp b/assets/images/initiatives/webp/International-Initiative.webp
new file mode 100644
index 000000000..36e1b91ae
Binary files /dev/null and b/assets/images/initiatives/webp/International-Initiative.webp differ
diff --git a/assets/images/initiatives/webp/Mentorship.webp b/assets/images/initiatives/webp/Mentorship.webp
new file mode 100644
index 000000000..39c21a4a9
Binary files /dev/null and b/assets/images/initiatives/webp/Mentorship.webp differ
diff --git a/assets/images/initiatives/webp/Office_Hours_Logo.webp b/assets/images/initiatives/webp/Office_Hours_Logo.webp
new file mode 100644
index 000000000..34ad7c3bd
Binary files /dev/null and b/assets/images/initiatives/webp/Office_Hours_Logo.webp differ
diff --git a/assets/images/initiatives/webp/Student_Forum_Logo.webp b/assets/images/initiatives/webp/Student_Forum_Logo.webp
new file mode 100644
index 000000000..e273032ce
Binary files /dev/null and b/assets/images/initiatives/webp/Student_Forum_Logo.webp differ
diff --git a/assets/images/initiatives/webp/Tutor_List.webp b/assets/images/initiatives/webp/Tutor_List.webp
new file mode 100644
index 000000000..df6cd9b5b
Binary files /dev/null and b/assets/images/initiatives/webp/Tutor_List.webp differ
diff --git a/assets/images/initiatives/webp/Virtual_Office_Hours_Logo.webp b/assets/images/initiatives/webp/Virtual_Office_Hours_Logo.webp
new file mode 100644
index 000000000..f43455c64
Binary files /dev/null and b/assets/images/initiatives/webp/Virtual_Office_Hours_Logo.webp differ
diff --git a/assets/images/initiatives/webp/letter_image.webp b/assets/images/initiatives/webp/letter_image.webp
new file mode 100644
index 000000000..6e5435de2
Binary files /dev/null and b/assets/images/initiatives/webp/letter_image.webp differ
diff --git a/assets/images/jekyll.svg b/assets/images/jekyll.svg
new file mode 100644
index 000000000..0e2509fab
--- /dev/null
+++ b/assets/images/jekyll.svg
@@ -0,0 +1,165 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/android-chrome-192x192.webp b/assets/images/logos/android-chrome-192x192.webp
new file mode 100644
index 000000000..612d5d82f
Binary files /dev/null and b/assets/images/logos/android-chrome-192x192.webp differ
diff --git a/assets/images/logos/android-chrome-512x512.webp b/assets/images/logos/android-chrome-512x512.webp
new file mode 100644
index 000000000..70205a0f0
Binary files /dev/null and b/assets/images/logos/android-chrome-512x512.webp differ
diff --git a/assets/images/logos/apple-touch-icon.png b/assets/images/logos/apple-touch-icon.png
new file mode 100644
index 000000000..ba35e322d
Binary files /dev/null and b/assets/images/logos/apple-touch-icon.png differ
diff --git a/assets/images/logos/dark_logo.svg b/assets/images/logos/dark_logo.svg
deleted file mode 100644
index 0d28da229..000000000
--- a/assets/images/logos/dark_logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/images/logos/favicon-16x16.png b/assets/images/logos/favicon-16x16.png
new file mode 100644
index 000000000..a053e5cbf
Binary files /dev/null and b/assets/images/logos/favicon-16x16.png differ
diff --git a/assets/images/logos/favicon-32x32.png b/assets/images/logos/favicon-32x32.png
new file mode 100644
index 000000000..6c35ab9e5
Binary files /dev/null and b/assets/images/logos/favicon-32x32.png differ
diff --git a/favicon.ico b/assets/images/logos/favicon.ico
similarity index 100%
rename from favicon.ico
rename to assets/images/logos/favicon.ico
diff --git a/assets/images/logos/light_logo.svg b/assets/images/logos/light_logo.svg
deleted file mode 100644
index 1d82796f3..000000000
--- a/assets/images/logos/light_logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/images/logos/socialmedia/facebook.svg b/assets/images/logos/socialmedia/facebook.svg
new file mode 100644
index 000000000..327049b4d
--- /dev/null
+++ b/assets/images/logos/socialmedia/facebook.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/assets/images/logos/socialmedia/github.svg b/assets/images/logos/socialmedia/github.svg
new file mode 100644
index 000000000..55f3a1d29
--- /dev/null
+++ b/assets/images/logos/socialmedia/github.svg
@@ -0,0 +1,80 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/socialmedia/instagram.svg b/assets/images/logos/socialmedia/instagram.svg
new file mode 100644
index 000000000..220945bbd
--- /dev/null
+++ b/assets/images/logos/socialmedia/instagram.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/images/logos/socialmedia/reddit.svg b/assets/images/logos/socialmedia/reddit.svg
new file mode 100644
index 000000000..edd3c2b88
--- /dev/null
+++ b/assets/images/logos/socialmedia/reddit.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/assets/images/logos/socialmedia/twitter.svg b/assets/images/logos/socialmedia/twitter.svg
new file mode 100644
index 000000000..a3c205ea9
--- /dev/null
+++ b/assets/images/logos/socialmedia/twitter.svg
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/assets/images/logos/square/dark_mono_nobg.svg b/assets/images/logos/square/dark_mono_nobg.svg
new file mode 100644
index 000000000..7e614f6ab
--- /dev/null
+++ b/assets/images/logos/square/dark_mono_nobg.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/square/dark_mono_rounded.svg b/assets/images/logos/square/dark_mono_rounded.svg
new file mode 100644
index 000000000..d0c0c11c4
--- /dev/null
+++ b/assets/images/logos/square/dark_mono_rounded.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/square/dark_mono_rounded_small.webp b/assets/images/logos/square/dark_mono_rounded_small.webp
new file mode 100644
index 000000000..438fa4a56
Binary files /dev/null and b/assets/images/logos/square/dark_mono_rounded_small.webp differ
diff --git a/assets/images/logos/square/dark_nobg.svg b/assets/images/logos/square/dark_nobg.svg
new file mode 100644
index 000000000..024b38a93
--- /dev/null
+++ b/assets/images/logos/square/dark_nobg.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/square/dark_rounded.svg b/assets/images/logos/square/dark_rounded.svg
new file mode 100644
index 000000000..a61ba9419
--- /dev/null
+++ b/assets/images/logos/square/dark_rounded.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/square/light_mono_nobg.svg b/assets/images/logos/square/light_mono_nobg.svg
new file mode 100644
index 000000000..2c788caf0
--- /dev/null
+++ b/assets/images/logos/square/light_mono_nobg.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/square/light_mono_rounded.svg b/assets/images/logos/square/light_mono_rounded.svg
new file mode 100644
index 000000000..afcf905a2
--- /dev/null
+++ b/assets/images/logos/square/light_mono_rounded.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/square/light_nobg.svg b/assets/images/logos/square/light_nobg.svg
new file mode 100644
index 000000000..b7b1136b2
--- /dev/null
+++ b/assets/images/logos/square/light_nobg.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/square/light_rounded.svg b/assets/images/logos/square/light_rounded.svg
new file mode 100644
index 000000000..9ba1cd98c
--- /dev/null
+++ b/assets/images/logos/square/light_rounded.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/wordmark/dark.svg b/assets/images/logos/wordmark/dark.svg
new file mode 100644
index 000000000..08f4da7fe
--- /dev/null
+++ b/assets/images/logos/wordmark/dark.svg
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/wordmark/dark_mono.svg b/assets/images/logos/wordmark/dark_mono.svg
new file mode 100644
index 000000000..5ca729801
--- /dev/null
+++ b/assets/images/logos/wordmark/dark_mono.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/wordmark/dark_mono_nobg.svg b/assets/images/logos/wordmark/dark_mono_nobg.svg
new file mode 100644
index 000000000..e7b80d78c
--- /dev/null
+++ b/assets/images/logos/wordmark/dark_mono_nobg.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/wordmark/dark_mono_nobg_small.webp b/assets/images/logos/wordmark/dark_mono_nobg_small.webp
new file mode 100644
index 000000000..47d4ebbde
Binary files /dev/null and b/assets/images/logos/wordmark/dark_mono_nobg_small.webp differ
diff --git a/assets/images/logos/wordmark/dark_nobg.svg b/assets/images/logos/wordmark/dark_nobg.svg
new file mode 100644
index 000000000..2a2e3f275
--- /dev/null
+++ b/assets/images/logos/wordmark/dark_nobg.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/wordmark/light.svg b/assets/images/logos/wordmark/light.svg
new file mode 100644
index 000000000..2b5e7deb8
--- /dev/null
+++ b/assets/images/logos/wordmark/light.svg
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/wordmark/light_mono.svg b/assets/images/logos/wordmark/light_mono.svg
new file mode 100644
index 000000000..df116a6f8
--- /dev/null
+++ b/assets/images/logos/wordmark/light_mono.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/wordmark/light_mono_nobg.svg b/assets/images/logos/wordmark/light_mono_nobg.svg
new file mode 100644
index 000000000..bef61f13c
--- /dev/null
+++ b/assets/images/logos/wordmark/light_mono_nobg.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/logos/wordmark/light_nobg.svg b/assets/images/logos/wordmark/light_nobg.svg
new file mode 100644
index 000000000..9d96e875f
--- /dev/null
+++ b/assets/images/logos/wordmark/light_nobg.svg
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/megaphone.svg b/assets/images/megaphone.svg
new file mode 100644
index 000000000..fe9199daf
--- /dev/null
+++ b/assets/images/megaphone.svg
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/images/members/Albert.jpg b/assets/images/members/Albert.jpg
deleted file mode 100644
index de8b1fa2b..000000000
Binary files a/assets/images/members/Albert.jpg and /dev/null differ
diff --git a/assets/images/members/Arianna.jpg b/assets/images/members/Arianna.jpg
deleted file mode 100644
index 3ff635aea..000000000
Binary files a/assets/images/members/Arianna.jpg and /dev/null differ
diff --git a/assets/images/members/Arya.jpg b/assets/images/members/Arya.jpg
deleted file mode 100644
index 883915d99..000000000
Binary files a/assets/images/members/Arya.jpg and /dev/null differ
diff --git a/assets/images/members/CJ.jpg b/assets/images/members/CJ.jpg
deleted file mode 100644
index f7bf32f2b..000000000
Binary files a/assets/images/members/CJ.jpg and /dev/null differ
diff --git a/assets/images/members/Caleb.jpg b/assets/images/members/Caleb.jpg
deleted file mode 100644
index 4ccd386db..000000000
Binary files a/assets/images/members/Caleb.jpg and /dev/null differ
diff --git a/assets/images/members/Christopher.jpg b/assets/images/members/Christopher.jpg
deleted file mode 100644
index b06de7fb1..000000000
Binary files a/assets/images/members/Christopher.jpg and /dev/null differ
diff --git a/assets/images/members/Cindy.jpg b/assets/images/members/Cindy.jpg
deleted file mode 100644
index 58fe1ce8d..000000000
Binary files a/assets/images/members/Cindy.jpg and /dev/null differ
diff --git a/assets/images/members/Lauren.jpg b/assets/images/members/Lauren.jpg
deleted file mode 100644
index ec79c8af1..000000000
Binary files a/assets/images/members/Lauren.jpg and /dev/null differ
diff --git a/assets/images/members/Neerali.jpg b/assets/images/members/Neerali.jpg
deleted file mode 100644
index 9ec97303a..000000000
Binary files a/assets/images/members/Neerali.jpg and /dev/null differ
diff --git a/assets/images/members/Noah.jpg b/assets/images/members/Noah.jpg
deleted file mode 100644
index eaa9ce3c9..000000000
Binary files a/assets/images/members/Noah.jpg and /dev/null differ
diff --git a/assets/images/members/None.jpg b/assets/images/members/None.jpg
deleted file mode 100644
index 800e5b60b..000000000
Binary files a/assets/images/members/None.jpg and /dev/null differ
diff --git a/assets/images/members/Pallav.jpg b/assets/images/members/Pallav.jpg
deleted file mode 100644
index 1bb485730..000000000
Binary files a/assets/images/members/Pallav.jpg and /dev/null differ
diff --git a/assets/images/members/Pinaki.jpg b/assets/images/members/Pinaki.jpg
deleted file mode 100644
index 25833079a..000000000
Binary files a/assets/images/members/Pinaki.jpg and /dev/null differ
diff --git a/assets/images/members/Riley.jpg b/assets/images/members/Riley.jpg
deleted file mode 100644
index 37838d414..000000000
Binary files a/assets/images/members/Riley.jpg and /dev/null differ
diff --git a/assets/images/members/Sagar.jpg b/assets/images/members/Sagar.jpg
deleted file mode 100644
index fd29b6612..000000000
Binary files a/assets/images/members/Sagar.jpg and /dev/null differ
diff --git a/assets/images/members/Sarah.jpg b/assets/images/members/Sarah.jpg
deleted file mode 100644
index 09734ffdd..000000000
Binary files a/assets/images/members/Sarah.jpg and /dev/null differ
diff --git a/assets/images/members/Sean.jpg b/assets/images/members/Sean.jpg
deleted file mode 100644
index 60cf75edf..000000000
Binary files a/assets/images/members/Sean.jpg and /dev/null differ
diff --git a/assets/images/members/Sera.jpg b/assets/images/members/Sera.jpg
deleted file mode 100644
index 12a3ea9b3..000000000
Binary files a/assets/images/members/Sera.jpg and /dev/null differ
diff --git a/assets/images/members/Simran.jpg b/assets/images/members/Simran.jpg
deleted file mode 100644
index dadded818..000000000
Binary files a/assets/images/members/Simran.jpg and /dev/null differ
diff --git a/assets/images/members/Sweta.jpg b/assets/images/members/Sweta.jpg
deleted file mode 100644
index 5d905abe7..000000000
Binary files a/assets/images/members/Sweta.jpg and /dev/null differ
diff --git a/assets/images/members/png/Albert-Zhong.png b/assets/images/members/png/Albert-Zhong.png
new file mode 100644
index 000000000..2e8cb6218
Binary files /dev/null and b/assets/images/members/png/Albert-Zhong.png differ
diff --git a/assets/images/members/png/Anisha-Bhat.png b/assets/images/members/png/Anisha-Bhat.png
new file mode 100644
index 000000000..d0bc8d13c
Binary files /dev/null and b/assets/images/members/png/Anisha-Bhat.png differ
diff --git a/assets/images/members/png/Anushka-Sharma.png b/assets/images/members/png/Anushka-Sharma.png
new file mode 100644
index 000000000..deafb2cfa
Binary files /dev/null and b/assets/images/members/png/Anushka-Sharma.png differ
diff --git a/assets/images/members/png/Arianna-Smith.png b/assets/images/members/png/Arianna-Smith.png
new file mode 100644
index 000000000..0b16a4d0c
Binary files /dev/null and b/assets/images/members/png/Arianna-Smith.png differ
diff --git a/assets/images/members/png/Arya-Sharma.png b/assets/images/members/png/Arya-Sharma.png
new file mode 100644
index 000000000..76915031c
Binary files /dev/null and b/assets/images/members/png/Arya-Sharma.png differ
diff --git a/assets/images/members/png/Blisha-Molin-Mohan-Das.png b/assets/images/members/png/Blisha-Molin-Mohan-Das.png
new file mode 100644
index 000000000..c678063d1
Binary files /dev/null and b/assets/images/members/png/Blisha-Molin-Mohan-Das.png differ
diff --git a/assets/images/members/png/Brayden-Brackett.png b/assets/images/members/png/Brayden-Brackett.png
new file mode 100644
index 000000000..290038757
Binary files /dev/null and b/assets/images/members/png/Brayden-Brackett.png differ
diff --git a/assets/images/members/png/CJ-Enright.png b/assets/images/members/png/CJ-Enright.png
new file mode 100644
index 000000000..6471d1fa0
Binary files /dev/null and b/assets/images/members/png/CJ-Enright.png differ
diff --git a/assets/images/members/png/Caleb-Ahn.png b/assets/images/members/png/Caleb-Ahn.png
new file mode 100644
index 000000000..bd1235e92
Binary files /dev/null and b/assets/images/members/png/Caleb-Ahn.png differ
diff --git a/assets/images/members/png/Christopher-Lehman.png b/assets/images/members/png/Christopher-Lehman.png
new file mode 100644
index 000000000..267706227
Binary files /dev/null and b/assets/images/members/png/Christopher-Lehman.png differ
diff --git a/assets/images/members/png/Cindy-Ding.png b/assets/images/members/png/Cindy-Ding.png
new file mode 100644
index 000000000..86b9b912c
Binary files /dev/null and b/assets/images/members/png/Cindy-Ding.png differ
diff --git a/assets/images/members/png/Eddie-Kim.png b/assets/images/members/png/Eddie-Kim.png
new file mode 100644
index 000000000..dd0b6787d
Binary files /dev/null and b/assets/images/members/png/Eddie-Kim.png differ
diff --git a/assets/images/members/png/Elijah-Colwill.png b/assets/images/members/png/Elijah-Colwill.png
new file mode 100644
index 000000000..b4674ebac
Binary files /dev/null and b/assets/images/members/png/Elijah-Colwill.png differ
diff --git a/assets/images/members/png/Emily-Hao.png b/assets/images/members/png/Emily-Hao.png
new file mode 100644
index 000000000..272e2525a
Binary files /dev/null and b/assets/images/members/png/Emily-Hao.png differ
diff --git a/assets/images/members/png/Gowri-Harish.png b/assets/images/members/png/Gowri-Harish.png
new file mode 100644
index 000000000..52c0ba600
Binary files /dev/null and b/assets/images/members/png/Gowri-Harish.png differ
diff --git a/assets/images/members/png/Grace-Keeton.png b/assets/images/members/png/Grace-Keeton.png
new file mode 100644
index 000000000..b9eb54403
Binary files /dev/null and b/assets/images/members/png/Grace-Keeton.png differ
diff --git a/assets/images/members/png/Ishika-Kamchetty.png b/assets/images/members/png/Ishika-Kamchetty.png
new file mode 100644
index 000000000..2f6cfff4b
Binary files /dev/null and b/assets/images/members/png/Ishika-Kamchetty.png differ
diff --git a/assets/images/members/png/Jillian-Urgello.png b/assets/images/members/png/Jillian-Urgello.png
new file mode 100644
index 000000000..d8a41a583
Binary files /dev/null and b/assets/images/members/png/Jillian-Urgello.png differ
diff --git a/assets/images/members/png/Lauren-Lum.png b/assets/images/members/png/Lauren-Lum.png
new file mode 100644
index 000000000..870f89974
Binary files /dev/null and b/assets/images/members/png/Lauren-Lum.png differ
diff --git a/assets/images/members/png/Mason-Adams.png b/assets/images/members/png/Mason-Adams.png
new file mode 100644
index 000000000..a0a4579e0
Binary files /dev/null and b/assets/images/members/png/Mason-Adams.png differ
diff --git a/assets/images/members/png/Megan-Walsh.png b/assets/images/members/png/Megan-Walsh.png
new file mode 100644
index 000000000..8ad1e024a
Binary files /dev/null and b/assets/images/members/png/Megan-Walsh.png differ
diff --git a/assets/images/members/png/Neerali-Shah.png b/assets/images/members/png/Neerali-Shah.png
new file mode 100644
index 000000000..658ab0ce7
Binary files /dev/null and b/assets/images/members/png/Neerali-Shah.png differ
diff --git a/assets/images/members/png/Noah-Alderton.png b/assets/images/members/png/Noah-Alderton.png
new file mode 100644
index 000000000..870294866
Binary files /dev/null and b/assets/images/members/png/Noah-Alderton.png differ
diff --git a/assets/images/members/png/None.png b/assets/images/members/png/None.png
new file mode 100644
index 000000000..339212b7d
Binary files /dev/null and b/assets/images/members/png/None.png differ
diff --git a/assets/images/members/png/Pallav-Agarwal.png b/assets/images/members/png/Pallav-Agarwal.png
new file mode 100644
index 000000000..ee45b6463
Binary files /dev/null and b/assets/images/members/png/Pallav-Agarwal.png differ
diff --git a/assets/images/members/png/Pinaki-Mohanty.png b/assets/images/members/png/Pinaki-Mohanty.png
new file mode 100644
index 000000000..3c8b004c3
Binary files /dev/null and b/assets/images/members/png/Pinaki-Mohanty.png differ
diff --git a/assets/images/members/png/Pooja-Mathi.png b/assets/images/members/png/Pooja-Mathi.png
new file mode 100644
index 000000000..6ee5b343e
Binary files /dev/null and b/assets/images/members/png/Pooja-Mathi.png differ
diff --git a/assets/images/members/png/Riley-McKeever.png b/assets/images/members/png/Riley-McKeever.png
new file mode 100644
index 000000000..badaf82a3
Binary files /dev/null and b/assets/images/members/png/Riley-McKeever.png differ
diff --git a/assets/images/members/png/Riya-Verma.png b/assets/images/members/png/Riya-Verma.png
new file mode 100644
index 000000000..998d59c8c
Binary files /dev/null and b/assets/images/members/png/Riya-Verma.png differ
diff --git a/assets/images/members/png/Rohan-Purandare.png b/assets/images/members/png/Rohan-Purandare.png
new file mode 100644
index 000000000..4cbbaefcf
Binary files /dev/null and b/assets/images/members/png/Rohan-Purandare.png differ
diff --git a/assets/images/members/png/Sagar-Nattuvetty.png b/assets/images/members/png/Sagar-Nattuvetty.png
new file mode 100644
index 000000000..1ee3b8464
Binary files /dev/null and b/assets/images/members/png/Sagar-Nattuvetty.png differ
diff --git a/assets/images/members/png/Sarah-Pushparaj.png b/assets/images/members/png/Sarah-Pushparaj.png
new file mode 100644
index 000000000..1eb20f4ee
Binary files /dev/null and b/assets/images/members/png/Sarah-Pushparaj.png differ
diff --git a/assets/images/members/png/Sarah-Thomas.png b/assets/images/members/png/Sarah-Thomas.png
new file mode 100644
index 000000000..23bd50c92
Binary files /dev/null and b/assets/images/members/png/Sarah-Thomas.png differ
diff --git a/assets/images/members/png/Sean-Flannery.png b/assets/images/members/png/Sean-Flannery.png
new file mode 100644
index 000000000..11d6f6539
Binary files /dev/null and b/assets/images/members/png/Sean-Flannery.png differ
diff --git "a/assets/images/members/png/Sera-Sava\305\237.png" "b/assets/images/members/png/Sera-Sava\305\237.png"
new file mode 100644
index 000000000..300930be5
Binary files /dev/null and "b/assets/images/members/png/Sera-Sava\305\237.png" differ
diff --git a/assets/images/members/png/Shashank-Kumar.png b/assets/images/members/png/Shashank-Kumar.png
new file mode 100644
index 000000000..4a6314545
Binary files /dev/null and b/assets/images/members/png/Shashank-Kumar.png differ
diff --git a/assets/images/members/png/Simran-Kadadi.png b/assets/images/members/png/Simran-Kadadi.png
new file mode 100644
index 000000000..5cf4298be
Binary files /dev/null and b/assets/images/members/png/Simran-Kadadi.png differ
diff --git a/assets/images/members/png/Sweta-Saravanan.png b/assets/images/members/png/Sweta-Saravanan.png
new file mode 100644
index 000000000..d15a8d234
Binary files /dev/null and b/assets/images/members/png/Sweta-Saravanan.png differ
diff --git a/assets/images/members/png/Theo-Park.png b/assets/images/members/png/Theo-Park.png
new file mode 100644
index 000000000..3b335d5f0
Binary files /dev/null and b/assets/images/members/png/Theo-Park.png differ
diff --git a/assets/images/members/png/Tiffany-Kuang.png b/assets/images/members/png/Tiffany-Kuang.png
new file mode 100644
index 000000000..f694d28a3
Binary files /dev/null and b/assets/images/members/png/Tiffany-Kuang.png differ
diff --git a/assets/images/members/png/Vindhya-Banda.png b/assets/images/members/png/Vindhya-Banda.png
new file mode 100644
index 000000000..3360936f1
Binary files /dev/null and b/assets/images/members/png/Vindhya-Banda.png differ
diff --git a/assets/images/members/png/Wei-Yi-Tan.png b/assets/images/members/png/Wei-Yi-Tan.png
new file mode 100644
index 000000000..75959ca32
Binary files /dev/null and b/assets/images/members/png/Wei-Yi-Tan.png differ
diff --git a/assets/images/members/png/Zach-Bryant.png b/assets/images/members/png/Zach-Bryant.png
new file mode 100644
index 000000000..e3cd247d0
Binary files /dev/null and b/assets/images/members/png/Zach-Bryant.png differ
diff --git a/assets/images/members/webp/Albert-Zhong.webp b/assets/images/members/webp/Albert-Zhong.webp
new file mode 100644
index 000000000..a9715dc49
Binary files /dev/null and b/assets/images/members/webp/Albert-Zhong.webp differ
diff --git a/assets/images/members/webp/Anisha-Bhat.webp b/assets/images/members/webp/Anisha-Bhat.webp
new file mode 100644
index 000000000..4a80aa2f6
Binary files /dev/null and b/assets/images/members/webp/Anisha-Bhat.webp differ
diff --git a/assets/images/members/webp/Anushka-Sharma.webp b/assets/images/members/webp/Anushka-Sharma.webp
new file mode 100644
index 000000000..50d8f8090
Binary files /dev/null and b/assets/images/members/webp/Anushka-Sharma.webp differ
diff --git a/assets/images/members/webp/Arianna-Smith.webp b/assets/images/members/webp/Arianna-Smith.webp
new file mode 100644
index 000000000..8e67692cf
Binary files /dev/null and b/assets/images/members/webp/Arianna-Smith.webp differ
diff --git a/assets/images/members/webp/Arya-Sharma.webp b/assets/images/members/webp/Arya-Sharma.webp
new file mode 100644
index 000000000..d1bc2a179
Binary files /dev/null and b/assets/images/members/webp/Arya-Sharma.webp differ
diff --git a/assets/images/members/webp/Blisha-Molin-Mohan-Das.webp b/assets/images/members/webp/Blisha-Molin-Mohan-Das.webp
new file mode 100644
index 000000000..553ffe42d
Binary files /dev/null and b/assets/images/members/webp/Blisha-Molin-Mohan-Das.webp differ
diff --git a/assets/images/members/webp/Brayden-Brackett.webp b/assets/images/members/webp/Brayden-Brackett.webp
new file mode 100644
index 000000000..f66c0917a
Binary files /dev/null and b/assets/images/members/webp/Brayden-Brackett.webp differ
diff --git a/assets/images/members/webp/CJ-Enright.webp b/assets/images/members/webp/CJ-Enright.webp
new file mode 100644
index 000000000..76248369c
Binary files /dev/null and b/assets/images/members/webp/CJ-Enright.webp differ
diff --git a/assets/images/members/webp/Caleb-Ahn.webp b/assets/images/members/webp/Caleb-Ahn.webp
new file mode 100644
index 000000000..34de63e69
Binary files /dev/null and b/assets/images/members/webp/Caleb-Ahn.webp differ
diff --git a/assets/images/members/webp/Christopher-Lehman.webp b/assets/images/members/webp/Christopher-Lehman.webp
new file mode 100644
index 000000000..61c832648
Binary files /dev/null and b/assets/images/members/webp/Christopher-Lehman.webp differ
diff --git a/assets/images/members/webp/Cindy-Ding.webp b/assets/images/members/webp/Cindy-Ding.webp
new file mode 100644
index 000000000..c1d83fc23
Binary files /dev/null and b/assets/images/members/webp/Cindy-Ding.webp differ
diff --git a/assets/images/members/webp/Eddie-Kim.webp b/assets/images/members/webp/Eddie-Kim.webp
new file mode 100644
index 000000000..45d12da20
Binary files /dev/null and b/assets/images/members/webp/Eddie-Kim.webp differ
diff --git a/assets/images/members/webp/Elijah-Colwill.webp b/assets/images/members/webp/Elijah-Colwill.webp
new file mode 100644
index 000000000..5da5497c9
Binary files /dev/null and b/assets/images/members/webp/Elijah-Colwill.webp differ
diff --git a/assets/images/members/webp/Emily-Hao.webp b/assets/images/members/webp/Emily-Hao.webp
new file mode 100644
index 000000000..073f1d950
Binary files /dev/null and b/assets/images/members/webp/Emily-Hao.webp differ
diff --git a/assets/images/members/webp/Gowri-Harish.webp b/assets/images/members/webp/Gowri-Harish.webp
new file mode 100644
index 000000000..9a7ed88e6
Binary files /dev/null and b/assets/images/members/webp/Gowri-Harish.webp differ
diff --git a/assets/images/members/webp/Grace-Keeton.webp b/assets/images/members/webp/Grace-Keeton.webp
new file mode 100644
index 000000000..08103015e
Binary files /dev/null and b/assets/images/members/webp/Grace-Keeton.webp differ
diff --git a/assets/images/members/webp/Ishika-Kamchetty.webp b/assets/images/members/webp/Ishika-Kamchetty.webp
new file mode 100644
index 000000000..1bd119b3e
Binary files /dev/null and b/assets/images/members/webp/Ishika-Kamchetty.webp differ
diff --git a/assets/images/members/webp/Jillian-Urgello.webp b/assets/images/members/webp/Jillian-Urgello.webp
new file mode 100644
index 000000000..7fa0de707
Binary files /dev/null and b/assets/images/members/webp/Jillian-Urgello.webp differ
diff --git a/assets/images/members/webp/Lauren-Lum.webp b/assets/images/members/webp/Lauren-Lum.webp
new file mode 100644
index 000000000..57417f758
Binary files /dev/null and b/assets/images/members/webp/Lauren-Lum.webp differ
diff --git a/assets/images/members/webp/Mason-Adams.webp b/assets/images/members/webp/Mason-Adams.webp
new file mode 100644
index 000000000..4585d4eae
Binary files /dev/null and b/assets/images/members/webp/Mason-Adams.webp differ
diff --git a/assets/images/members/webp/Megan-Walsh.webp b/assets/images/members/webp/Megan-Walsh.webp
new file mode 100644
index 000000000..5d874676d
Binary files /dev/null and b/assets/images/members/webp/Megan-Walsh.webp differ
diff --git a/assets/images/members/webp/Neerali-Shah.webp b/assets/images/members/webp/Neerali-Shah.webp
new file mode 100644
index 000000000..553a9a844
Binary files /dev/null and b/assets/images/members/webp/Neerali-Shah.webp differ
diff --git a/assets/images/members/webp/Noah-Alderton.webp b/assets/images/members/webp/Noah-Alderton.webp
new file mode 100644
index 000000000..a7a2e9dbe
Binary files /dev/null and b/assets/images/members/webp/Noah-Alderton.webp differ
diff --git a/assets/images/members/webp/None.webp b/assets/images/members/webp/None.webp
new file mode 100644
index 000000000..cb036ec5f
Binary files /dev/null and b/assets/images/members/webp/None.webp differ
diff --git a/assets/images/members/webp/Pallav-Agarwal.webp b/assets/images/members/webp/Pallav-Agarwal.webp
new file mode 100644
index 000000000..fb617702e
Binary files /dev/null and b/assets/images/members/webp/Pallav-Agarwal.webp differ
diff --git a/assets/images/members/webp/Pinaki-Mohanty.webp b/assets/images/members/webp/Pinaki-Mohanty.webp
new file mode 100644
index 000000000..f01282ee6
Binary files /dev/null and b/assets/images/members/webp/Pinaki-Mohanty.webp differ
diff --git a/assets/images/members/webp/Pooja-Mathi.webp b/assets/images/members/webp/Pooja-Mathi.webp
new file mode 100644
index 000000000..f68f70f72
Binary files /dev/null and b/assets/images/members/webp/Pooja-Mathi.webp differ
diff --git a/assets/images/members/webp/Riley-McKeever.webp b/assets/images/members/webp/Riley-McKeever.webp
new file mode 100644
index 000000000..224f56638
Binary files /dev/null and b/assets/images/members/webp/Riley-McKeever.webp differ
diff --git a/assets/images/members/webp/Riya-Verma.webp b/assets/images/members/webp/Riya-Verma.webp
new file mode 100644
index 000000000..80cfbc5e1
Binary files /dev/null and b/assets/images/members/webp/Riya-Verma.webp differ
diff --git a/assets/images/members/webp/Rohan-Purandare.webp b/assets/images/members/webp/Rohan-Purandare.webp
new file mode 100644
index 000000000..2979e8380
Binary files /dev/null and b/assets/images/members/webp/Rohan-Purandare.webp differ
diff --git a/assets/images/members/webp/Sagar-Nattuvetty.webp b/assets/images/members/webp/Sagar-Nattuvetty.webp
new file mode 100644
index 000000000..60e2bfa66
Binary files /dev/null and b/assets/images/members/webp/Sagar-Nattuvetty.webp differ
diff --git a/assets/images/members/webp/Sarah-Pushparaj.webp b/assets/images/members/webp/Sarah-Pushparaj.webp
new file mode 100644
index 000000000..8c7585424
Binary files /dev/null and b/assets/images/members/webp/Sarah-Pushparaj.webp differ
diff --git a/assets/images/members/webp/Sarah-Thomas.webp b/assets/images/members/webp/Sarah-Thomas.webp
new file mode 100644
index 000000000..a105cfbff
Binary files /dev/null and b/assets/images/members/webp/Sarah-Thomas.webp differ
diff --git a/assets/images/members/webp/Sean-Flannery.webp b/assets/images/members/webp/Sean-Flannery.webp
new file mode 100644
index 000000000..1af643ff9
Binary files /dev/null and b/assets/images/members/webp/Sean-Flannery.webp differ
diff --git "a/assets/images/members/webp/Sera-Sava\305\237.webp" "b/assets/images/members/webp/Sera-Sava\305\237.webp"
new file mode 100644
index 000000000..4cce63d32
Binary files /dev/null and "b/assets/images/members/webp/Sera-Sava\305\237.webp" differ
diff --git a/assets/images/members/webp/Shashank-Kumar.webp b/assets/images/members/webp/Shashank-Kumar.webp
new file mode 100644
index 000000000..e3bf0d800
Binary files /dev/null and b/assets/images/members/webp/Shashank-Kumar.webp differ
diff --git a/assets/images/members/webp/Simran-Kadadi.webp b/assets/images/members/webp/Simran-Kadadi.webp
new file mode 100644
index 000000000..9c0b1497b
Binary files /dev/null and b/assets/images/members/webp/Simran-Kadadi.webp differ
diff --git a/assets/images/members/webp/Sweta-Saravanan.webp b/assets/images/members/webp/Sweta-Saravanan.webp
new file mode 100644
index 000000000..6abad4b57
Binary files /dev/null and b/assets/images/members/webp/Sweta-Saravanan.webp differ
diff --git a/assets/images/members/webp/Theo-Park.webp b/assets/images/members/webp/Theo-Park.webp
new file mode 100644
index 000000000..6193264bd
Binary files /dev/null and b/assets/images/members/webp/Theo-Park.webp differ
diff --git a/assets/images/members/webp/Tiffany-Kuang.webp b/assets/images/members/webp/Tiffany-Kuang.webp
new file mode 100644
index 000000000..3053a0125
Binary files /dev/null and b/assets/images/members/webp/Tiffany-Kuang.webp differ
diff --git a/assets/images/members/webp/Vindhya-Banda.webp b/assets/images/members/webp/Vindhya-Banda.webp
new file mode 100644
index 000000000..d2f2f91fd
Binary files /dev/null and b/assets/images/members/webp/Vindhya-Banda.webp differ
diff --git a/assets/images/members/webp/Wei-Yi-Tan.webp b/assets/images/members/webp/Wei-Yi-Tan.webp
new file mode 100644
index 000000000..c13b8409c
Binary files /dev/null and b/assets/images/members/webp/Wei-Yi-Tan.webp differ
diff --git a/assets/images/members/webp/Zach-Bryant.webp b/assets/images/members/webp/Zach-Bryant.webp
new file mode 100644
index 000000000..3b91f5357
Binary files /dev/null and b/assets/images/members/webp/Zach-Bryant.webp differ
diff --git a/assets/images/octojekyll.png b/assets/images/octojekyll.png
new file mode 100644
index 000000000..7c6d96d7e
Binary files /dev/null and b/assets/images/octojekyll.png differ
diff --git a/assets/images/usb_group_2022.png b/assets/images/usb_group_2022.png
new file mode 100644
index 000000000..ec545718f
Binary files /dev/null and b/assets/images/usb_group_2022.png differ
diff --git a/assets/images/usb_group_2022.webp b/assets/images/usb_group_2022.webp
new file mode 100644
index 000000000..cef52fa3c
Binary files /dev/null and b/assets/images/usb_group_2022.webp differ
diff --git a/assets/images/wiki/connect-pal3.0-linux/step1.png b/assets/images/wiki/connect-pal3.0-linux/step1.png
new file mode 100644
index 000000000..be1ec51d4
Binary files /dev/null and b/assets/images/wiki/connect-pal3.0-linux/step1.png differ
diff --git a/assets/images/wiki/connect-pal3.0-linux/step2.png b/assets/images/wiki/connect-pal3.0-linux/step2.png
new file mode 100644
index 000000000..e5dc4496d
Binary files /dev/null and b/assets/images/wiki/connect-pal3.0-linux/step2.png differ
diff --git a/assets/images/wiki/connect-pal3.0-linux/step3.png b/assets/images/wiki/connect-pal3.0-linux/step3.png
new file mode 100644
index 000000000..12267f85f
Binary files /dev/null and b/assets/images/wiki/connect-pal3.0-linux/step3.png differ
diff --git a/assets/images/wiki/connect-vpn/step1.png b/assets/images/wiki/connect-vpn/step1.png
new file mode 100644
index 000000000..d27e6e0aa
Binary files /dev/null and b/assets/images/wiki/connect-vpn/step1.png differ
diff --git a/assets/images/wiki/connect-vpn/step2.png b/assets/images/wiki/connect-vpn/step2.png
new file mode 100644
index 000000000..c9cfa9fc7
Binary files /dev/null and b/assets/images/wiki/connect-vpn/step2.png differ
diff --git a/assets/images/wiki/connect-vpn/step3.png b/assets/images/wiki/connect-vpn/step3.png
new file mode 100644
index 000000000..e9a068171
Binary files /dev/null and b/assets/images/wiki/connect-vpn/step3.png differ
diff --git a/assets/images/wiki/connect-vpn/step5.png b/assets/images/wiki/connect-vpn/step5.png
new file mode 100644
index 000000000..625ba6ea4
Binary files /dev/null and b/assets/images/wiki/connect-vpn/step5.png differ
diff --git a/assets/images/wiki/connect-vpn/step6_mac.png b/assets/images/wiki/connect-vpn/step6_mac.png
new file mode 100644
index 000000000..043d43e15
Binary files /dev/null and b/assets/images/wiki/connect-vpn/step6_mac.png differ
diff --git a/assets/images/wiki/connect-vpn/step6_windows.png b/assets/images/wiki/connect-vpn/step6_windows.png
new file mode 100644
index 000000000..5be135209
Binary files /dev/null and b/assets/images/wiki/connect-vpn/step6_windows.png differ
diff --git a/assets/images/wiki/file-transfer/image1.png b/assets/images/wiki/file-transfer/image1.png
new file mode 100644
index 000000000..f715ab7e0
Binary files /dev/null and b/assets/images/wiki/file-transfer/image1.png differ
diff --git a/assets/images/wiki/file-transfer/image2.png b/assets/images/wiki/file-transfer/image2.png
new file mode 100644
index 000000000..f2ed9dd50
Binary files /dev/null and b/assets/images/wiki/file-transfer/image2.png differ
diff --git a/assets/images/wiki/file-transfer/image3.png b/assets/images/wiki/file-transfer/image3.png
new file mode 100644
index 000000000..d18315ea9
Binary files /dev/null and b/assets/images/wiki/file-transfer/image3.png differ
diff --git a/assets/images/wiki/gh-pages/ghp1.png b/assets/images/wiki/gh-pages/ghp1.png
new file mode 100644
index 000000000..dd4c53195
Binary files /dev/null and b/assets/images/wiki/gh-pages/ghp1.png differ
diff --git a/assets/images/wiki/gh-pages/ghp2.png b/assets/images/wiki/gh-pages/ghp2.png
new file mode 100644
index 000000000..ed47ccbe6
Binary files /dev/null and b/assets/images/wiki/gh-pages/ghp2.png differ
diff --git a/assets/images/wiki/gh-pages/ghp3.png b/assets/images/wiki/gh-pages/ghp3.png
new file mode 100644
index 000000000..865d42e4c
Binary files /dev/null and b/assets/images/wiki/gh-pages/ghp3.png differ
diff --git a/assets/images/wiki/gh-pages/ghp4.png b/assets/images/wiki/gh-pages/ghp4.png
new file mode 100644
index 000000000..0dd8bd20b
Binary files /dev/null and b/assets/images/wiki/gh-pages/ghp4.png differ
diff --git a/assets/images/wiki/gh-pages/ghp5.png b/assets/images/wiki/gh-pages/ghp5.png
new file mode 100644
index 000000000..442f1109b
Binary files /dev/null and b/assets/images/wiki/gh-pages/ghp5.png differ
diff --git a/assets/images/wiki/gh-pages/ghp6.png b/assets/images/wiki/gh-pages/ghp6.png
new file mode 100644
index 000000000..7800ffc0e
Binary files /dev/null and b/assets/images/wiki/gh-pages/ghp6.png differ
diff --git a/assets/images/wiki/git-guide/git_add.PNG b/assets/images/wiki/git-guide/git_add.PNG
new file mode 100644
index 000000000..e2ad00d7b
Binary files /dev/null and b/assets/images/wiki/git-guide/git_add.PNG differ
diff --git a/assets/images/wiki/git-guide/git_commit.PNG b/assets/images/wiki/git-guide/git_commit.PNG
new file mode 100644
index 000000000..5c5983967
Binary files /dev/null and b/assets/images/wiki/git-guide/git_commit.PNG differ
diff --git a/assets/images/wiki/git-guide/git_diff.PNG b/assets/images/wiki/git-guide/git_diff.PNG
new file mode 100644
index 000000000..fc9bd1ff6
Binary files /dev/null and b/assets/images/wiki/git-guide/git_diff.PNG differ
diff --git a/assets/images/wiki/git-guide/git_init.PNG b/assets/images/wiki/git-guide/git_init.PNG
new file mode 100644
index 000000000..7f72e3dca
Binary files /dev/null and b/assets/images/wiki/git-guide/git_init.PNG differ
diff --git a/assets/images/wiki/git-guide/git_local_vs_remote.PNG b/assets/images/wiki/git-guide/git_local_vs_remote.PNG
new file mode 100644
index 000000000..c9b641944
Binary files /dev/null and b/assets/images/wiki/git-guide/git_local_vs_remote.PNG differ
diff --git a/assets/images/wiki/git-guide/git_log.PNG b/assets/images/wiki/git-guide/git_log.PNG
new file mode 100644
index 000000000..7cf70976f
Binary files /dev/null and b/assets/images/wiki/git-guide/git_log.PNG differ
diff --git a/assets/images/wiki/git-guide/git_revert.PNG b/assets/images/wiki/git-guide/git_revert.PNG
new file mode 100644
index 000000000..e464cc29f
Binary files /dev/null and b/assets/images/wiki/git-guide/git_revert.PNG differ
diff --git a/assets/images/wiki/git-guide/git_status.PNG b/assets/images/wiki/git-guide/git_status.PNG
new file mode 100644
index 000000000..7aaf793e5
Binary files /dev/null and b/assets/images/wiki/git-guide/git_status.PNG differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-cloneLink.PNG b/assets/images/wiki/git-intellij/git-intellij-cloneLink.PNG
new file mode 100644
index 000000000..1edfc541a
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-cloneLink.PNG differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-commitButton.png b/assets/images/wiki/git-intellij/git-intellij-commitButton.png
new file mode 100644
index 000000000..a2ead7a72
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-commitButton.png differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-commitMsg.png b/assets/images/wiki/git-intellij/git-intellij-commitMsg.png
new file mode 100644
index 000000000..4e5ab8755
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-commitMsg.png differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-gitButtons.PNG b/assets/images/wiki/git-intellij/git-intellij-gitButtons.PNG
new file mode 100644
index 000000000..f82898a10
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-gitButtons.PNG differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-login.png b/assets/images/wiki/git-intellij/git-intellij-login.png
new file mode 100644
index 000000000..1986b357e
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-login.png differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-pullButton.png b/assets/images/wiki/git-intellij/git-intellij-pullButton.png
new file mode 100644
index 000000000..8959a724e
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-pullButton.png differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-pushDialog.png b/assets/images/wiki/git-intellij/git-intellij-pushDialog.png
new file mode 100644
index 000000000..0c40ee1ba
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-pushDialog.png differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-versionControl.png b/assets/images/wiki/git-intellij/git-intellij-versionControl.png
new file mode 100644
index 000000000..09948ddd3
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-versionControl.png differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-welcome.png b/assets/images/wiki/git-intellij/git-intellij-welcome.png
new file mode 100644
index 000000000..e1aaa361c
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-welcome.png differ
diff --git a/assets/images/wiki/git-intellij/git-intellij-welcomescreen.png b/assets/images/wiki/git-intellij/git-intellij-welcomescreen.png
new file mode 100644
index 000000000..3117d04de
Binary files /dev/null and b/assets/images/wiki/git-intellij/git-intellij-welcomescreen.png differ
diff --git a/assets/images/wiki/terminal/cmd_cd.png b/assets/images/wiki/terminal/cmd_cd.png
new file mode 100644
index 000000000..cf60b6d1f
Binary files /dev/null and b/assets/images/wiki/terminal/cmd_cd.png differ
diff --git a/assets/images/wiki/terminal/cmd_ls.png b/assets/images/wiki/terminal/cmd_ls.png
new file mode 100644
index 000000000..a9b162418
Binary files /dev/null and b/assets/images/wiki/terminal/cmd_ls.png differ
diff --git a/assets/images/wiki/terminal/cmd_pwd.png b/assets/images/wiki/terminal/cmd_pwd.png
new file mode 100644
index 000000000..23b5a9e7c
Binary files /dev/null and b/assets/images/wiki/terminal/cmd_pwd.png differ
diff --git a/assets/images/wiki/terminal/cmd_structure.png b/assets/images/wiki/terminal/cmd_structure.png
new file mode 100644
index 000000000..967aeb99e
Binary files /dev/null and b/assets/images/wiki/terminal/cmd_structure.png differ
diff --git a/assets/images/wiki/terminal/moving_faster.png b/assets/images/wiki/terminal/moving_faster.png
new file mode 100644
index 000000000..cd9b0ff76
Binary files /dev/null and b/assets/images/wiki/terminal/moving_faster.png differ
diff --git a/assets/main.scss b/assets/main.scss
index 317e02812..be488267e 100644
--- a/assets/main.scss
+++ b/assets/main.scss
@@ -2,6 +2,13 @@
# Only the main Sass file needs front matter (the dashes are enough)
---
-@import "minima";
+@import "theme";
-@import "style";
+@import "pages/about";
+@import "pages/initiatives";
+@import "pages/post";
+@import "pages/wiki";
+@import "pages/members";
+@import "pages/contact";
+
+@import "/libs/highlight/styles/gruvbox-dark.css";
diff --git a/assets/scripts/accessibility_check.js b/assets/scripts/accessibility_check.js
new file mode 100644
index 000000000..e69de29bb
diff --git a/assets/scripts/events.js b/assets/scripts/events.js
new file mode 100644
index 000000000..495b39d14
--- /dev/null
+++ b/assets/scripts/events.js
@@ -0,0 +1,25 @@
+const events = {
+ "DOMContentLoaded": [
+ onMissingMemberPhoto,
+ highlightCode,
+ scrollToPost,
+ fixTitleCase,
+ setLinkTargetBlank,
+ ],
+ "load": [
+ setupInitiativeGrid,
+ lightcaseifyArticle,
+ finalizeButtons,
+ closeFab,
+ ],
+ "scroll": [
+ //closeFab,
+ //scrollTop,
+ ]
+};
+
+for (let [key, value] of Object.entries(events)) {
+ value.forEach(func => {
+ window.addEventListener(key, func);
+ });
+}
\ No newline at end of file
diff --git a/assets/scripts/ratings.js b/assets/scripts/ratings.js
new file mode 100644
index 000000000..40c509e32
--- /dev/null
+++ b/assets/scripts/ratings.js
@@ -0,0 +1,36 @@
+function rate(good) {
+ let thumb_up = document.querySelector("#rate-good");
+ let thumb_down = document.querySelector("#rate-bad");
+ //uncheck is broken
+ /*if ((good && thumb_up.checked) || (!good && thumb_down.checked)) {
+ console.log("unchecking");
+ console.log("thumbup: " + thumb_up.checked);
+ console.log("thumbdown: " + thumb_down.checked);
+ thumb_up.checked = false;
+ thumb_down.checked = false;
+ showThanks(false);
+ showFeedbackForm(false);
+ } else {
+ console.log("checking");*/
+ thumb_up.checked = good;
+ thumb_down.checked = !good;
+ showThanks(good);
+ showFeedbackForm(!good);
+ //}
+}
+
+function showFeedbackForm(show) {
+ let feedback = document.querySelector("#feedback-bad-container");
+ if (show) {
+ feedback.classList.remove("none");
+ }
+ else {
+ feedback.classList.add("none");
+ }
+}
+
+function showThanks(show) {
+ let thanks = document.querySelector("#feedback-thanks-container");
+ if (show) thanks.classList.remove("none");
+ else thanks.classList.add("none");
+}
\ No newline at end of file
diff --git a/assets/scripts/searchbar.js b/assets/scripts/searchbar.js
new file mode 100644
index 000000000..7e0ed3ef0
--- /dev/null
+++ b/assets/scripts/searchbar.js
@@ -0,0 +1,184 @@
+function getSearchQuery() {
+ const urlParams = new URLSearchParams(window.location.search);
+ return urlParams.get('search') || urlParams.get('s');
+}
+
+function loadSearchIndex() {
+ return lunr(function () {
+ this.ref('index');
+ this.field('title');
+ this.field('description');
+ this.field('content');
+ this.field('author');
+ this.field('category');
+ this.field('date');
+
+ searchData.forEach(function (doc) {
+ doc['content'] = unescape(doc['content']);
+ this.add(doc)
+ }, this);
+ });
+}
+
+function sanitizeQuery(query) {
+ if (!query.match(/[\\^:~+-]/g)) {
+ query = `${query}*`;
+ }
+ return query;
+}
+
+function onSearchChange(v) {
+ let query = (this.value || v).trim();
+ window.history.pushState(null, null, `?s=${encodeURIComponent(query)}`);
+ let queryChanged = lastQuery === undefined || lastQuery != query;
+ if (queryChanged)
+ removeHighlight();
+ if (query && query.length > 1 && queryChanged) {
+ lastQuery = query;
+ var results = searchIndex.search(query);
+ if (results.length == 0)
+ results = searchIndex.search(sanitizeQuery(query));
+ showSearchResults(results);
+ }
+ if (query.length == 0 || !(!!query)) {
+ hideSearchResults();
+ }
+}
+
+function onSearchChangeDebounce() {
+ let value = this.value;
+ clearTimeout(lastQueryTimer);
+ lastQueryTimer = setTimeout(() => {
+ onSearchChange(value);
+ }, 120);
+}
+
+function getSearchResultIndices(results) {
+ return results.map(r => parseInt(r['ref']));
+}
+
+function hideSearchResults() {
+ let wikiList = document.querySelector("#wiki-items");
+ let resultsContainer = document.querySelector("#search-results");
+ let noResults = document.querySelector("#no-search-results");
+ wikiList.classList.remove("none");
+ resultsContainer.classList.add("none");
+ noResults.classList.add("none");
+}
+
+function removeHighlight() {
+ document.querySelectorAll('article .search-highlight, #search-results .search-highlight').forEach(e => {
+ e.classList = [];
+ let parent = e.parentNode;
+ e.replaceWith(e.innerText);
+ parent.normalize();
+ });
+}
+
+function showSearchResults(results) {
+ let wikiList = document.querySelector("#wiki-items");
+ let resultsContainer = document.querySelector("#search-results");
+ let noResults = document.querySelector("#no-search-results");
+ if (!results || results.length == 0) {
+ wikiList.classList.add("none");
+ noResults.classList.remove("none");
+ resultsContainer.classList.add("none");
+ document.querySelector("#search-query-term").innerHTML = lastQuery
+ } else {
+ let indices = getSearchResultIndices(results);
+ let posts = searchData.filter(item => indices.includes(item['index']));
+ let elems = createPostElements(posts);
+ resultsContainer.innerHTML = '';
+ elems.forEach(e => resultsContainer.appendChild(e));
+ wikiList.classList.add("none");
+ noResults.classList.add("none");
+ resultsContainer.classList.remove("none");
+ highlightSearchResults(lastQuery);
+ }
+}
+
+function createPostElements(posts) {
+ let wikiList = document.querySelector("#wiki-items");
+ let clonable = wikiList.firstElementChild;
+ return posts.map(p => {
+ let clone = clonable.cloneNode(true);
+ let active = clone.querySelector("#active");
+ if (active) {
+ active.id = '';
+ }
+ clone.href = `${p.url}?s=${lastQuery}`;
+ let title = clone.querySelector(".post-title");
+ let description = clone.querySelector(".post-description");
+ title.innerHTML = p.title;
+ description.innerHTML = p.description;
+ return clone;
+ })
+}
+
+/* Source because I am lazy:
+ https://stackoverflow.com/questions/7380226/find-word-in-html/7380697#7380697
+*/
+function walkHTML(e, query) {
+ var expr = new RegExp(`([^a-zA-Z]?)(${escapeRegex(query)})`, "i");
+ var partMatchExpr = new RegExp(`([^a-zA-Z]?)(${escapeRegex(query)})`, "i");
+ e.childNodes.forEach(node => {
+ if (node.nodeType == Node.TEXT_NODE) {
+ if (node.nodeValue) {
+ var matches = node.nodeValue.match(expr);
+ if (matches) {
+ var parts = node.nodeValue.split(expr);
+ for (var n = 0; n < parts.length; n++) {
+ let part = parts[n];
+ if (part.match(partMatchExpr)) {
+ var span = document.createElement("span")
+ span.classList.add("highlight", "font-bold", "pa-1", "search-highlight");
+ span.style.fontSize = "inherit";
+ span.appendChild(document.createTextNode(part));
+ e.insertBefore(span, node);
+ } else {
+ e.insertBefore(document.createTextNode(parts[n]), node);
+ }
+ }
+ e.removeChild(node);
+ }
+ }
+ }
+ else {
+ walkHTML(node, query);
+ }
+ })
+}
+
+// Source: https://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript/3561711#3561711
+function escapeRegex(string) {
+ return string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
+}
+
+function highlightSearchResults(query) {
+ document.querySelectorAll('#search-results, article > section:not(:last-child)').forEach(section => {
+ walkHTML(section, query);
+ })
+}
+
+var lastQuery = undefined;
+var lastQueryTimer = undefined;
+var searchIndex = loadSearchIndex();
+
+function onLoadWithSearch() {
+
+ let search = document.querySelector("#search");
+ [
+ 'input',
+ 'paste',
+ 'blur',
+ ].forEach(e => {
+ search.addEventListener(e, onSearchChangeDebounce);
+ });
+ let startQuery = getSearchQuery();
+ if (!!startQuery) {
+ search.value = startQuery;
+ search.dispatchEvent(new Event('input'));
+ }
+}
+
+window.addEventListener("DOMContentLoaded", onLoadWithSearch);
\ No newline at end of file
diff --git a/assets/scripts/utils.js b/assets/scripts/utils.js
new file mode 100644
index 000000000..b63570c9b
--- /dev/null
+++ b/assets/scripts/utils.js
@@ -0,0 +1,176 @@
+function scrollTop() { window.scrollTo(0, 0); }
+
+function finalizeButtons() {
+ document.querySelectorAll("button[href]:not([href=''])").forEach(button => {
+ button.onclick = () => {
+ let url = button.getAttribute("href");
+ let target = button.getAttribute("target") || '_blank';
+ window.open(url, target);
+ }
+ });
+}
+
+function onMissingMemberPhoto() {
+ let default_image = '/assets/images/members/png/None.png';
+ document.querySelectorAll(".member-color img").forEach(img => {
+ img.onerror = function() {
+ img.onerror = null;
+ img.src = default_image;
+ colorImage(img);
+ }
+ if (img.src == window.location.origin + default_image) {
+ colorImage(img);
+ }
+ });
+}
+
+function colorImage(img) {
+ let colors = ['none', 'red', 'blue', 'primary'];
+ var parent = img.parentNode;
+ if (!parent.className.includes("member-color"))
+ parent = parent.parentNode.parentNode;
+ parent.classList.add(`bg-${colors[colors.length * Math.random() | 0]}-light`);
+ img.style = "mix-blend-mode: multiply;"
+}
+
+function closeFab() {
+ let fab = document.querySelector('#menu-open');
+ if (fab.checked) {
+ fab.checked = false;
+ }
+}
+
+function highlightCode() {
+ document.querySelectorAll("*:not(pre) > code").forEach(element => {
+ hljs.highlightBlock(element);
+ });
+}
+
+function lightcaseifyArticle() {
+ document.querySelectorAll("article#post section#content img:not(.no-lightcase):not(.emoji)").forEach(img => {
+ img.classList.add("lightcase-img");
+ let link = document.createElement("a");
+ link.setAttribute("href", img.src);
+ link.setAttribute("data-rel", "lightcase");
+ let album = img.getAttribute("data-lightcase") || window.performance.now();
+ link.setAttribute("data-lightcase", album);
+
+ img.parentNode.replaceChild(link, img);
+ link.appendChild(img);
+ });
+
+ jQuery(document).ready(function($) {
+ $('a[data-rel^=lightcase]').lightcase();
+ });
+
+ document.querySelectorAll('article#post section#content > p').forEach(p => {
+ let imgs = p.querySelectorAll("img");
+ if (imgs.length > 1) {
+ p.classList.add("row", "justify-around");
+ imgs.forEach(img => {
+ img.style.display = "inline";
+ });
+ }
+ })
+}
+
+function scrollToPost() {
+ let post = document.querySelector("#active");
+ // janky hack to tell if we're on a screen worth scrolling
+ let verticalSeparator = document.querySelector("#postVerticalSeparator");
+ if (post && verticalSeparator) {
+ let style = window.getComputedStyle(verticalSeparator);
+ if (style && style.display != 'none') {
+ post.scrollIntoView(true);
+ } else {
+ scrollTop();
+ }
+ }
+}
+
+function fixTitleCase() {
+ let titles = document.querySelectorAll(".post-title");
+ titles.forEach(t => {
+ t.innerHTML = titleCase(t.innerHTML);
+ });
+}
+
+/*
+ * Source (not right for us as a local module): https://github.com/rvagg/titlecase/blob/master/to-title-case.js
+ *
+ * To Title Case 2.1 – http://individed.com/code/to-title-case/
+ * Copyright © 2008–2013 David Gouch. Licensed under the MIT License.
+ *
+ * modifications by @rvagg Apr-2014
+ */
+var smallWords = /^(a|an|and|as|at|but|by|en|for|if|in|nor|of|on|or|per|the|to|vs?\.?|via)$/i;
+function titleCase (str) {
+ if (!str) return str
+ return str.replace(/[A-Za-z0-9\u00C0-\u00FF]+[^\s-]*/g, function(match, index, title){
+ if (index > 0 && index + match.length !== title.length &&
+ match.search(smallWords) > -1 && title.charAt(index - 2) !== ':' &&
+ (title.charAt(index + match.length) !== '-' || title.charAt(index - 1) === '-') &&
+ title.charAt(index - 1).search(/[^\s-]/) < 0) {
+ return match.toLowerCase();
+ }
+
+ if (match.substr(1).search(/[A-Z]|\../) > -1) {
+ return match;
+ }
+
+ return match.charAt(0).toUpperCase() + match.substr(1);
+ });
+}
+
+function setLinkTargetBlank() {
+ document.querySelectorAll("a:not(.page-link)").forEach(a => {
+ if (!a.getAttribute("target")) {
+ a.setAttribute("target", "_blank");
+ }
+ })
+}
+
+function setupGrid(options) {
+ let magicGrid = new MagicGrid(options);
+ magicGrid.listen();
+}
+
+function setupInitiativeGrid() {
+ let initiativeContainerID = "#initiative-container";
+ if (document.querySelector(initiativeContainerID)) {
+ setupGrid({
+ container: initiativeContainerID,
+ static: true,
+ //items: parseInt("{{site.data.initiatives | size}}"), // Required for dynamic content. Initial number of items in the container.
+ maxColumns: 3, // Optional. Maximum number of columns. Default: Infinite.
+ useMin: true, // Optional. Prioritize shorter columns when positioning items? Default: false.
+ animate: true, // Optional. Animate item positioning? Default: false.
+ center: true, //Optional. Center the grid items? Default: true.
+ });
+ }
+}
+
+function setupAnchors() {
+ anchors.options = {
+ visible: "always",
+ truncate: "20"
+ };
+ anchors.add('#post h1, #post h2, #post h3, #post h4, #post h5')
+ .add('.anchored')
+ .remove('.no-anchor');
+}
+
+function ajax(method, url, data, success, error) {
+ var xhr = new XMLHttpRequest();
+ xhr.open(method, url);
+ xhr.setRequestHeader("Accept", "application/json");
+ xhr.onreadystatechange = function() {
+ if (xhr.readyState !== XMLHttpRequest.DONE) return;
+ if (xhr.status === 200) {
+ success(xhr.response, xhr.responseType);
+ } else {
+ error(xhr.status, xhr.response, xhr.responseType);
+ }
+ };
+ xhr.send(data);
+}
\ No newline at end of file
diff --git a/assets/searchData.js b/assets/searchData.js
new file mode 100644
index 000000000..d5833e470
--- /dev/null
+++ b/assets/searchData.js
@@ -0,0 +1,14 @@
+---
+layout: null
+---
+{% assign date_format = site.date_format | default: "%b %-d, %Y" %}
+let searchData = [{% for post in site.wiki %}{
+ "index": {{forloop.index}},
+ "title": "{{ post.title }}",
+ "description": "{{post.description | strip_html | strip_newlines }}",
+ "url": "{{ site.baseurl }}{{ post.url }}",
+ "category": "{{ post.categories | join: ', '}}",
+ "date": "{{ post.date | date: date_format }}",
+ "content": "{{ post.content | strip_html | strip_newlines | escape_once }}",
+ "author": "{{ post.author }}",
+}{% unless forloop.last %}, {% endunless %}{% endfor %}]
\ No newline at end of file
diff --git a/assets/social-icons.svg b/assets/social-icons.svg
deleted file mode 100644
index bcb763961..000000000
--- a/assets/social-icons.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/build.sh b/build.sh
new file mode 100755
index 000000000..07d237e5c
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,5 @@
+#! /bin/sh
+
+[ $1 = "-s" ] && curl -X POST -d {} https://api.netlify.com/build_hooks/5efc6382c85bbb7f4ad0d703 && echo Triggered staging build
+[ $1 = "-p" ] && curl -X POST -d {} https://api.netlify.com/build_hooks/5efc60efffc7df67c4ab028a && echo Triggered production build
+
diff --git a/cal/index.html b/cal/index.html
deleted file mode 100644
index 46fa120f9..000000000
--- a/cal/index.html
+++ /dev/null
@@ -1,143 +0,0 @@
-
-
-
-
-
-
-
Subscribing to Purdue CS Calendar
-
-
-
-
The purpose of this page is to show you how to sync the Purdue Computer Science calendars with your mobile devices and computer. This year, the CS department switched to Google Calendar for this exact reason. They did it for YOU :)
-
-
There are two calendars you can subscribe to:
-
-
Computer Science Events
-
-
-
-
Department of Computer Science
-
-
-
-
Student Organization Events
-
-
-
-
Corporate Events
-
-
-
-
** Static file listing only the currently added events. If a new event is added, you must download the file again
-
-
-
-
Notes about Windows
-
-
- Windows 8 / Windows RT / Windows Phone
-
-
- The Windows platform by itself does not support webcal URL’s or iCalendar files.
- If Outlook is installed on the device, it should support webcal URL’s and iCalendar files.
- The simplest approach is to sync the device with a Live.com . Google Sync with Windows Phone is being disabled December 31, 2013.
-
- Windows 7
-
-
- If you have Outlook installed and use Outlook, you can use the webcal link.
- If you don’t have Outlook or you don’t use it, I currently do not know of a convenient way to sync with the computer.
-
-
-
-
-
-
Directions to sync a calendar:
-
-
Windows Live / Windows 8 / Windows RT / Windows Phone
-
-
- Login to Live.com with the account that your device is synced with.
- In the top left, click the arrow and select Calendar .
- On the top bar, click Import .
- On the left, click Subscribe .
- Copy one of the iCalendar (.ics) links from above.
- Paste the URL in Calendar URL .
- Give the calendar a name.
- Click Subscribe .
-
-
-
Windows with Outlook installed (no promises)
-
-
- Click a webcal link from above.
- Follow the prompts to subscribe to the calendar.
-
-
-
Android / Google Calendar
-
-
- Using a desktop computer, Click the HTML Link on a calendar.
- Click the “+ Google Calendar” button at the bottom right of the resulting webpage from step 1.
- If not signed in, it will prompt you to sign into a Google account. Sign in to your Google account that is you want the calendars to sync with.
- NOTE: If you have an Android device, pick the account that is synced with the device.
- After sign in is complete, a window will pop up asking if you’d like to add the calendar to your account. Click Add .
- The calendar is now added to your Google Account, and in turn will be synced to any Android devices that are synced with that account as well.
-
-
-
iOS
-
-
- Click a webcal link above.
- Click “Subscribe”.
- Click “Done”.
-
-
-
Mac OS X
-
-
- Click a webcal link above.
- Click “Subscribe”.
- Decide if you want it to save locally or on iCloud. iCloud will set this calendar up on your iOS device if both are set up with the same iCloud account.
- Click OK.
-
-
-
-
-
-
-
Any issues should be sent to usb@cs.purdue.edu
-
-
Tutorial by Purdue CS USB , but mostly by Tyler Hoffman ;)
-
-
\ No newline at end of file
diff --git a/clean.sh b/clean.sh
new file mode 100755
index 000000000..41f9ec5d1
--- /dev/null
+++ b/clean.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+echo "Cleaning cache and generated files..."
+rm -rf ./_site ./.jekyll-cache
diff --git a/contact.html b/contact.html
deleted file mode 100644
index 32729b111..000000000
--- a/contact.html
+++ /dev/null
@@ -1,34 +0,0 @@
----
-layout: page
-title: Contact Us
-description: USB was created by students, for students- what's on your mind?
-permalink: /contact/
----
-
-
-
You can also send us an email at usb@cs.purdue.edu
-
- Note: If you have an important concern that should be reported in an official capacity,
- please go to the
- CS Concern Form .
-
-
-
-
-
-
- Full Name
-
- Email Address
-
- Subject
-
- Message
-
-
-
-
-
-
\ No newline at end of file
diff --git a/favicon-16x16.png b/favicon-16x16.png
deleted file mode 100644
index 9060d67c4..000000000
Binary files a/favicon-16x16.png and /dev/null differ
diff --git a/favicon-32x32.png b/favicon-32x32.png
deleted file mode 100644
index 4c8b0c313..000000000
Binary files a/favicon-32x32.png and /dev/null differ
diff --git a/helproom.html b/helproom.html
deleted file mode 100644
index cceee623d..000000000
--- a/helproom.html
+++ /dev/null
@@ -1,51 +0,0 @@
----
-title: Help Room
-description: Extra help for CS 193, CS 180, CS 182, CS 240
-permalink: /helproom/
----
-
-
-
-
-
-{%- include head.html -%}
-
-
- {%- include header.html -%}
-
-
-
{{ page.title | escape }}
- {{ page.description | escape }}
- All help room sessions are held in LWSN B160
-
-
-
-
-
- CS193
- Monday - Thursday
- 7pm-9pm
-
-
- CS180
- Monday - Thursday
- 7pm-9pm
-
-
- CS182
- Monday
- 7pm-9pm
-
-
- CS240
- Monday - Thursday
- 7pm-9pm
-
-
-
-
-
-
-
- {%- include footer.html -%}
-
\ No newline at end of file
diff --git a/index.html b/index.html
index 3cea5651e..60b2d1cc0 100644
--- a/index.html
+++ b/index.html
@@ -1,60 +1,13 @@
---
-
+layout: default
+title: Purdue USB
---
-
-
-
-{%- include head.html -%}
-
-
-
- {%- include header.html -%}
-
-
-
-
-
-
-
-
-
-
-
Hello from USB!
-
- The Computer Science Undergraduate Board is dedicated to improving student experience for CS and DS students at Purdue- whether by
- managing CS193, hosting forums for student advocacy, or maintaining a collection of undergrad-tailored resources, USB is continually
- creating initiatives that will uphold our values.
-
- Read Student Resources
-
-
-
-
-
-
- {%- include aboutus.html -%}
-
-
-
- {%- include members.html -%}
-
-
- {%- include footer.html -%}
-
-
-
-
\ No newline at end of file
+
+ {%- include components/banner.html -%}
+ {%- include components/aboutus.html -%}
+ {%- include components/member/members.html -%}
+
+ {%- include components/initiative/initiatives.html -%}
+
+
diff --git a/initiatives.html b/initiatives.html
deleted file mode 100644
index 07618a0dd..000000000
--- a/initiatives.html
+++ /dev/null
@@ -1,41 +0,0 @@
----
-title: Initiatives
-description: Check out what USB is currently working on!
-permalink: /initiatives/
----
-
-
-
-
-{%- include head.html -%}
-
-
-
- {%- include header.html -%}
-
-
-
{{ page.title | escape }}
- {{ page.description | escape }}
-
-
-
- {%- for initiative in site.data.initiatives -%}
-
-
- {%- endfor -%}
-
-
-
-
- {%- include footer.html -%}
-
-
-
-
\ No newline at end of file
diff --git a/libs/highlight/highlight.pack.js b/libs/highlight/highlight.pack.js
new file mode 100644
index 000000000..681f68c4f
--- /dev/null
+++ b/libs/highlight/highlight.pack.js
@@ -0,0 +1,6 @@
+/*
+ Highlight.js 10.1.1 (93fd0d73)
+ License: BSD-3-Clause
+ Copyright (c) 2006-2020, Ivan Sagalaev
+*/
+var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""+a(e)+">"}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?" ":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/ /g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);hljs.registerLanguage("less",function(){"use strict";return function(e){var n="([\\w-]+|@{[\\w-]+})",a=[],s=[],t=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},r=function(e,n,a){return{className:e,begin:n,relevance:a}},i={begin:"\\(",end:"\\)",contains:s,relevance:0};s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t("'"),t('"'),e.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},r("number","#[0-9A-Fa-f]+\\b"),i,r("variable","@@?[\\w-]+",10),r("variable","@{[\\w-]+}"),r("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},{className:"meta",begin:"!important"});var c=s.concat({begin:"{",end:"}",contains:a}),l={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(s)},o={begin:n+"\\s*:",returnBegin:!0,end:"[;}]",relevance:0,contains:[{className:"attribute",begin:n,end:":",excludeEnd:!0,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]},g={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",returnEnd:!0,contains:s,relevance:0}},d={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:c}},b={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:n,end:"{"}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,l,r("keyword","all\\b"),r("variable","@{[\\w-]+}"),r("selector-tag",n+"%?",0),r("selector-id","#"+n),r("selector-class","\\."+n,0),r("selector-tag","&",0),{className:"selector-attr",begin:"\\[",end:"\\]"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"\\(",end:"\\)",contains:c},{begin:"!important"}]};return a.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,g,d,o,b),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:a}}}());hljs.registerLanguage("scala",function(){"use strict";return function(e){var n={className:"subst",variants:[{begin:"\\$[A-Za-z0-9_]+"},{begin:"\\${",end:"}"}]},a={className:"string",variants:[{begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:'"""',end:'"""',relevance:10},{begin:'[a-z]+"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,n]},{className:"string",begin:'[a-z]+"""',end:'"""',contains:[n],relevance:10}]},s={className:"type",begin:"\\b[A-Z][A-Za-z0-9_]*",relevance:0},t={className:"title",begin:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,relevance:0},i={className:"class",beginKeywords:"class object trait type",end:/[:={\[\n;]/,excludeEnd:!0,contains:[{beginKeywords:"extends with",relevance:10},{begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,relevance:0,contains:[s]},t]},l={className:"function",beginKeywords:"def",end:/[:={\[(\n;]/,excludeEnd:!0,contains:[t]};return{name:"Scala",keywords:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,{className:"symbol",begin:"'\\w[\\w\\d_]*(?!')"},s,l,i,e.C_NUMBER_MODE,{className:"meta",begin:"@[A-Za-z]+"}]}}}());hljs.registerLanguage("java",function(){"use strict";function e(e){return e?"string"==typeof e?e:e.source:null}function n(e){return a("(",e,")?")}function a(...n){return n.map(n=>e(n)).join("")}function s(...n){return"("+n.map(n=>e(n)).join("|")+")"}return function(e){var t="false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do",i={className:"meta",begin:"@[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},r=e=>a("[",e,"]+([",e,"_]*[",e,"]+)?"),c={className:"number",variants:[{begin:`\\b(0[bB]${r("01")})[lL]?`},{begin:`\\b(0${r("0-7")})[dDfFlL]?`},{begin:a(/\b0[xX]/,s(a(r("a-fA-F0-9"),/\./,r("a-fA-F0-9")),a(r("a-fA-F0-9"),/\.?/),a(/\./,r("a-fA-F0-9"))),/([pP][+-]?(\d+))?/,/[fFdDlL]?/)},{begin:a(/\b/,s(a(/\d*\./,r("\\d")),r("\\d")),/[eE][+-]?[\d]+[dDfF]?/)},{begin:a(/\b/,r(/\d/),n(/\.?/),n(r(/\d/)),/[dDfFlL]?/)}],relevance:0};return{name:"Java",aliases:["jsp"],keywords:t,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"class",beginKeywords:"class interface",end:/[{;=]/,excludeEnd:!0,keywords:"class interface",illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"new throw return else",relevance:0},{className:"function",begin:"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+"+e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:t,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"params",begin:/\(/,end:/\)/,keywords:t,relevance:0,contains:[i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},c,i]}}}());hljs.registerLanguage("makefile",function(){"use strict";return function(e){var i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%\^\+\*]/}]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,i]},a={className:"variable",begin:/\$\([\w-]+\s/,end:/\)/,keywords:{built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"},contains:[i]},r={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},s={className:"section",begin:/^[^\s]+:/,end:/$/,contains:[i]};return{name:"Makefile",aliases:["mk","mak"],keywords:{$pattern:/[\w-]+/,keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"},contains:[e.HASH_COMMENT_MODE,i,n,a,r,{className:"meta",begin:/^\.PHONY:/,end:/$/,keywords:{$pattern:/[\.\w]+/,"meta-keyword":".PHONY"}},s]}}}());hljs.registerLanguage("armasm",function(){"use strict";return function(s){const e={variants:[s.COMMENT("^[ \\t]*(?=#)","$",{relevance:0,excludeBegin:!0}),s.COMMENT("[;@]","$",{relevance:0}),s.C_LINE_COMMENT_MODE,s.C_BLOCK_COMMENT_MODE]};return{name:"ARM Assembly",case_insensitive:!0,aliases:["arm"],keywords:{$pattern:"\\.?"+s.IDENT_RE,meta:".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ",built_in:"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @"},contains:[{className:"keyword",begin:"\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)"},e,s.QUOTE_STRING_MODE,{className:"string",begin:"'",end:"[^\\\\]'",relevance:0},{className:"title",begin:"\\|",end:"\\|",illegal:"\\n",relevance:0},{className:"number",variants:[{begin:"[#$=]?0x[0-9a-f]+"},{begin:"[#$=]?0b[01]+"},{begin:"[#$=]\\d+"},{begin:"\\b\\d+"}],relevance:0},{className:"symbol",variants:[{begin:"^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:"},{begin:"^[a-z_\\.\\$][a-z0-9_\\.\\$]+"},{begin:"[=#]\\w+"}],relevance:0}]}}}());hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"",contains:[].concat(_,u,d,[s,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",end:">",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin:/,end:/>/,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}());hljs.registerLanguage("c",function(){"use strict";return function(e){var n=e.getLanguage("c-like").rawDefinition();return n.name="C",n.aliases=["c","h"],n}}());hljs.registerLanguage("php",function(){"use strict";return function(e){var r={begin:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},t={className:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?[=]?/},{begin:/\?>/}]},a={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:'b"',end:'"'},{begin:"b'",end:"'"},e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i={keyword:"__CLASS__ __DIR__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ __NAMESPACE__ __TRAIT__ die echo exit include include_once print require require_once array abstract and as binary bool boolean break callable case catch class clone const continue declare default do double else elseif empty enddeclare endfor endforeach endif endswitch endwhile eval extends final finally float for foreach from global goto if implements instanceof insteadof int integer interface isset iterable list new object or private protected public real return string switch throw trait try unset use var void while xor yield",literal:"false null true",built_in:"Error|0 AppendIterator ArgumentCountError ArithmeticError ArrayIterator ArrayObject AssertionError BadFunctionCallException BadMethodCallException CachingIterator CallbackFilterIterator CompileError Countable DirectoryIterator DivisionByZeroError DomainException EmptyIterator ErrorException Exception FilesystemIterator FilterIterator GlobIterator InfiniteIterator InvalidArgumentException IteratorIterator LengthException LimitIterator LogicException MultipleIterator NoRewindIterator OutOfBoundsException OutOfRangeException OuterIterator OverflowException ParentIterator ParseError RangeException RecursiveArrayIterator RecursiveCachingIterator RecursiveCallbackFilterIterator RecursiveDirectoryIterator RecursiveFilterIterator RecursiveIterator RecursiveIteratorIterator RecursiveRegexIterator RecursiveTreeIterator RegexIterator RuntimeException SeekableIterator SplDoublyLinkedList SplFileInfo SplFileObject SplFixedArray SplHeap SplMaxHeap SplMinHeap SplObjectStorage SplObserver SplObserver SplPriorityQueue SplQueue SplStack SplSubject SplSubject SplTempFileObject TypeError UnderflowException UnexpectedValueException ArrayAccess Closure Generator Iterator IteratorAggregate Serializable Throwable Traversable WeakReference Directory __PHP_Incomplete_Class parent php_user_filter self static stdClass"};return{aliases:["php","php3","php4","php5","php6","php7"],case_insensitive:!0,keywords:i,contains:[e.HASH_COMMENT_MODE,e.COMMENT("//","$",{contains:[t]}),e.COMMENT("/\\*","\\*/",{contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.COMMENT("__halt_compiler.+?;",!1,{endsWithParent:!0,keywords:"__halt_compiler"}),{className:"string",begin:/<<<['"]?\w+['"]?$/,end:/^\w+;?$/,contains:[e.BACKSLASH_ESCAPE,{className:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]}]},t,{className:"keyword",begin:/\$this\b/},r,{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:"function",beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[e.UNDERSCORE_TITLE_MODE,{className:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,e.C_BLOCK_COMMENT_MODE,a,n]}]},{className:"class",beginKeywords:"class interface",end:"{",excludeEnd:!0,illegal:/[:\(\$"]/,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",end:";",illegal:/[\.']/,contains:[e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"use",end:";",contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"=>"},a,n]}}}());hljs.registerLanguage("scss",function(){"use strict";return function(e){var t={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b"},i={className:"number",begin:"#[0-9A-Fa-f]+"};return e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:"\\#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},{className:"selector-attr",begin:"\\[",end:"\\]",illegal:"$"},{className:"selector-tag",begin:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",relevance:0},{className:"selector-pseudo",begin:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{className:"selector-pseudo",begin:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},t,{className:"attribute",begin:"\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",illegal:"[^\\s]"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:":",end:";",contains:[t,i,e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{className:"meta",begin:"!important"}]},{begin:"@(page|font-face)",lexemes:"@[a-z-]+",keywords:"@page @font-face"},{begin:"@",end:"[{;]",returnBegin:!0,keywords:"and or not only",contains:[{begin:"@[a-z-]+",className:"keyword"},t,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i,e.CSS_NUMBER_MODE]}]}}}());hljs.registerLanguage("coffeescript",function(){"use strict";const e=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],n=["true","false","null","undefined","NaN","Infinity"],a=[].concat(["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],["arguments","this","super","console","window","document","localStorage","module","global"],["Intl","DataView","Number","Math","Date","String","RegExp","Object","Function","Boolean","Error","Symbol","Set","Map","WeakSet","WeakMap","Proxy","Reflect","JSON","Promise","Float64Array","Int16Array","Int32Array","Int8Array","Uint16Array","Uint32Array","Float32Array","Array","Uint8Array","Uint8ClampedArray","ArrayBuffer"],["EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"]);return function(r){var t={keyword:e.concat(["then","unless","until","loop","by","when","and","or","is","isnt","not"]).filter((e=>n=>!e.includes(n))(["var","const","let","function","static"])).join(" "),literal:n.concat(["yes","no","on","off"]).join(" "),built_in:a.concat(["npm","print"]).join(" ")},i="[A-Za-z$_][0-9A-Za-z$_]*",s={className:"subst",begin:/#\{/,end:/}/,keywords:t},o=[r.BINARY_NUMBER_MODE,r.inherit(r.C_NUMBER_MODE,{starts:{end:"(\\s*/)?",relevance:0}}),{className:"string",variants:[{begin:/'''/,end:/'''/,contains:[r.BACKSLASH_ESCAPE]},{begin:/'/,end:/'/,contains:[r.BACKSLASH_ESCAPE]},{begin:/"""/,end:/"""/,contains:[r.BACKSLASH_ESCAPE,s]},{begin:/"/,end:/"/,contains:[r.BACKSLASH_ESCAPE,s]}]},{className:"regexp",variants:[{begin:"///",end:"///",contains:[s,r.HASH_COMMENT_MODE]},{begin:"//[gim]{0,3}(?=\\W)",relevance:0},{begin:/\/(?![ *]).*?(?![\\]).\/[gim]{0,3}(?=\W)/}]},{begin:"@"+i},{subLanguage:"javascript",excludeBegin:!0,excludeEnd:!0,variants:[{begin:"```",end:"```"},{begin:"`",end:"`"}]}];s.contains=o;var c=r.inherit(r.TITLE_MODE,{begin:i}),l={className:"params",begin:"\\([^\\(]",returnBegin:!0,contains:[{begin:/\(/,end:/\)/,keywords:t,contains:["self"].concat(o)}]};return{name:"CoffeeScript",aliases:["coffee","cson","iced"],keywords:t,illegal:/\/\*/,contains:o.concat([r.COMMENT("###","###"),r.HASH_COMMENT_MODE,{className:"function",begin:"^\\s*"+i+"\\s*=\\s*(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[c,l]},{begin:/[:\(,=]\s*/,relevance:0,contains:[{className:"function",begin:"(\\(.*\\))?\\s*\\B[-=]>",end:"[-=]>",returnBegin:!0,contains:[l]}]},{className:"class",beginKeywords:"class",end:"$",illegal:/[:="\[\]]/,contains:[{beginKeywords:"extends",endsWithParent:!0,illegal:/[:="\[\]]/,contains:[c]},c]},{begin:i+":",end:":",returnBegin:!0,returnEnd:!0,relevance:0}])}}}());hljs.registerLanguage("lua",function(){"use strict";return function(e){var t={begin:"\\[=*\\[",end:"\\]=*\\]",contains:["self"]},a=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[","\\]=*\\]",{contains:[t],relevance:10})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:a.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:a}].concat(a)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:"\\[=*\\[",end:"\\]=*\\]",contains:[t],relevance:5}])}}}());hljs.registerLanguage("xml",function(){"use strict";return function(e){var n={className:"symbol",begin:"&[a-z]+;|[0-9]+;|[a-f0-9]+;"},a={begin:"\\s",contains:[{className:"meta-keyword",begin:"#?[a-z_][a-z1-9_-]+",illegal:"\\n"}]},s=e.inherit(a,{begin:"\\(",end:"\\)"}),t=e.inherit(e.APOS_STRING_MODE,{className:"meta-string"}),i=e.inherit(e.QUOTE_STRING_MODE,{className:"meta-string"}),c={endsWithParent:!0,illegal:/,relevance:0,contains:[{className:"attr",begin:"[A-Za-z0-9\\._:-]+",relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[n]},{begin:/'/,end:/'/,contains:[n]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[a,i,t,s,{begin:"\\[",end:"\\]",contains:[{className:"meta",begin:"",contains:[a,s,i,t]}]}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},n,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"
\ No newline at end of file
diff --git a/opensite.sh b/opensite.sh
new file mode 100755
index 000000000..4009dfc3c
--- /dev/null
+++ b/opensite.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+sleep 1
+xdg-open http://127.0.0.1:4000
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 000000000..4a9aba505
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,150 @@
+{
+ "name": "purdueusb.com",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "colorette": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
+ "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w=="
+ },
+ "commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "cssesc": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+ },
+ "es5-shim": {
+ "version": "4.5.15",
+ "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.15.tgz",
+ "integrity": "sha512-FYpuxEjMeDvU4rulKqFdukQyZSTpzhg4ScQHrAosrlVpR6GFyaw14f74yn2+4BugniIS0Frpg7TvwZocU4ZMTw=="
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "glob": {
+ "version": "7.1.7",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+ "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "nanoid": {
+ "version": "3.1.23",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
+ "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "postcss": {
+ "version": "8.2.15",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz",
+ "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==",
+ "requires": {
+ "colorette": "^1.2.2",
+ "nanoid": "^3.1.23",
+ "source-map": "^0.6.1"
+ }
+ },
+ "postcss-selector-parser": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz",
+ "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==",
+ "requires": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "purgecss": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz",
+ "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==",
+ "requires": {
+ "commander": "^6.0.0",
+ "glob": "^7.0.0",
+ "postcss": "^8.2.1",
+ "postcss-selector-parser": "^6.0.2"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 000000000..21afc01ed
--- /dev/null
+++ b/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "purdueusb.com",
+ "version": "1.0.0",
+ "description": "This repository is created for Purdue's CS Undergraduate Student Board website. Our main consideration is the ease of maintenance and content updates. Information that frequently changes, like members, initiatives, and Student Wiki, can all be updated through YAML and Markdown files.",
+ "main": "",
+ "dependencies": {
+ "es5-shim": "4.5.15",
+ "purgecss": "4.0.3"
+ },
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Purdue-CSUSB/purdueusb.com.git"
+ },
+ "bugs": {
+ "url": "https://github.com/Purdue-CSUSB/purdueusb.com/issues"
+ },
+ "homepage": "https://github.com/Purdue-CSUSB/purdueusb.com#readme"
+}
diff --git a/purgecss.config.js b/purgecss.config.js
new file mode 100644
index 000000000..6746e0a53
--- /dev/null
+++ b/purgecss.config.js
@@ -0,0 +1,17 @@
+module.exports = {
+ // These are the files that Purgecss will search through
+ content: ["./**/*.md", "./**/*.html", "./_sass/**/*"],
+
+ // These are the stylesheets that will be subjected to the purge
+ css: ["./_site/assets/main.css"],
+
+ // For media queries, pseudo-classes, etc
+ defaultExtractor: content => content.match(/[\w-/:@]+(?
-
- {%- if site.posts.size > 0 -%}
-
- {%- for post in site.posts -%}
-
- {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
- {{ post.date | date: date_format }}
-
- {{ post.description }}
-
- {%- endfor -%}
-
- {%- endif -%}
-
-
\ No newline at end of file
diff --git a/run.sh b/run.sh
new file mode 100755
index 000000000..8722d365e
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+JENV="development"
+OPEN=true
+LIVE=false
+TRACE=false
+while getopts "chplit" opt; do
+ case "${opt}" in
+ c) ./clean.sh
+ ;;
+ h) OPEN=false
+ ;;
+ p) JENV="production"
+ ;;
+ l) LIVE=true
+ ;;
+ i) bundle install
+ npm install
+ ;;
+ t) TRACE=true
+ ;;
+ esac
+done
+
+echo Running in $JENV mode.
+$OPEN && echo "Opening site in browser" && ./opensite.sh &
+OPTS="--host 0.0.0.0"
+
+if [ $LIVE = true ]; then
+ OPTS="${OPTS} --incremental --livereload"
+fi
+
+if [ $TRACE = true ]; then
+ OPTS="${OPTS} --trace"
+fi
+
+eval JEKYLL_ENV=${JENV} bundle exec jekyll serve ${OPTS}
\ No newline at end of file
diff --git a/site.webmanifest b/site.webmanifest
index 45dc8a206..675e4b869 100644
--- a/site.webmanifest
+++ b/site.webmanifest
@@ -1 +1 @@
-{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
\ No newline at end of file
+{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.webp","sizes":"192x192","type":"image/webp"},{"src":"/android-chrome-512x512.webp","sizes":"512x512","type":"image/webp"}],"theme_color":"#FFCA44","background_color":"#333333","display":"standalone"}
\ No newline at end of file
diff --git a/tutors/index.html b/tutors/index.html
deleted file mode 100644
index ef34d7436..000000000
--- a/tutors/index.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
\ No newline at end of file
diff --git a/webp-convert.sh b/webp-convert.sh
new file mode 100755
index 000000000..f50e0fc34
--- /dev/null
+++ b/webp-convert.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# converting JPEG images
+find $1 -type f -and \( -iname "*.jpg" -o -iname "*.jpeg" \) \
+-exec bash -c '
+webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0");
+if [ ! -f "$webp_path" ]; then
+ cwebp -quiet -q 90 "$0" -o "$webp_path";
+fi;' {} \;
+
+# converting PNG images
+find $1 -type f -and -iname "*.png" \
+-exec bash -c '
+webp_path=$(sed 's/\.[^.]*$/.webp/' <<< "$0");
+if [ ! -f "$webp_path" ]; then
+ cwebp -quiet -lossless "$0" -o "$webp_path";
+fi;' {} \;