diff --git a/preview/pr-3/404.html b/preview/pr-3/404.html new file mode 100644 index 0000000..ba0e0c8 --- /dev/null +++ b/preview/pr-3/404.html @@ -0,0 +1,542 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +404 | ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+ Page Not Found

+ +

Try searching the whole site for the content you want:

+ +
+ + +
+
+ + +
+ + + + + + + diff --git a/preview/pr-3/_scripts/anchors.js b/preview/pr-3/_scripts/anchors.js new file mode 100644 index 0000000..904edf9 --- /dev/null +++ b/preview/pr-3/_scripts/anchors.js @@ -0,0 +1,47 @@ +/* + creates link next to each heading that links to that section. +*/ + +{ + const onLoad = () => { + // for each heading + const headings = document.querySelectorAll( + "h1[id], h2[id], h3[id], h4[id]" + ); + for (const heading of headings) { + // create anchor link + const link = document.createElement("a"); + link.classList.add("icon", "fa-solid", "fa-link", "anchor"); + link.href = "#" + heading.id; + link.setAttribute("aria-label", "link to this section"); + heading.append(link); + + // if first heading in the section, move id to parent section + if (heading.matches("section > :first-child")) { + heading.parentElement.id = heading.id; + heading.removeAttribute("id"); + } + } + }; + + // scroll to target of url hash + const scrollToTarget = () => { + const id = window.location.hash.replace("#", ""); + const target = document.getElementById(id); + + if (!target) return; + const offset = document.querySelector("header").clientHeight || 0; + window.scrollTo({ + top: target.getBoundingClientRect().top + window.scrollY - offset, + behavior: "smooth", + }); + }; + + // after page loads + window.addEventListener("load", onLoad); + window.addEventListener("load", scrollToTarget); + window.addEventListener("tagsfetched", scrollToTarget); + + // when hash nav happens + window.addEventListener("hashchange", scrollToTarget); +} diff --git a/preview/pr-3/_scripts/dark-mode.js b/preview/pr-3/_scripts/dark-mode.js new file mode 100644 index 0000000..b0124d9 --- /dev/null +++ b/preview/pr-3/_scripts/dark-mode.js @@ -0,0 +1,28 @@ +/* + manages light/dark mode. +*/ + +{ + // save/load user's dark mode preference from local storage + const loadDark = () => window.localStorage.getItem("dark-mode") === "true"; + const saveDark = (value) => window.localStorage.setItem("dark-mode", value); + + // immediately load saved mode before page renders + document.documentElement.dataset.dark = loadDark(); + + const onLoad = () => { + // update toggle button to match loaded mode + document.querySelector(".dark-toggle").checked = + document.documentElement.dataset.dark === "true"; + }; + + // after page loads + window.addEventListener("load", onLoad); + + // when user toggles mode button + window.onDarkToggleChange = (event) => { + const value = event.target.checked; + document.documentElement.dataset.dark = value; + saveDark(value); + }; +} diff --git a/preview/pr-3/_scripts/fetch-tags.js b/preview/pr-3/_scripts/fetch-tags.js new file mode 100644 index 0000000..c843b67 --- /dev/null +++ b/preview/pr-3/_scripts/fetch-tags.js @@ -0,0 +1,67 @@ +/* + fetches tags (aka "topics") from a given GitHub repo and adds them to row of + tag buttons. specify repo in data-repo attribute on row. +*/ + +{ + const onLoad = async () => { + // get tag rows with specified repos + const rows = document.querySelectorAll("[data-repo]"); + + // for each repo + for (const row of rows) { + // get props from tag row + const repo = row.dataset.repo.trim(); + const link = row.dataset.link.trim(); + + // get tags from github + if (!repo) continue; + let tags = await fetchTags(repo); + + // filter out tags already present in row + let existing = [...row.querySelectorAll(".tag")].map((tag) => + window.normalizeTag(tag.innerText) + ); + tags = tags.filter((tag) => !existing.includes(normalizeTag(tag))); + + // add tags to row + for (const tag of tags) { + const a = document.createElement("a"); + a.classList.add("tag"); + a.innerHTML = tag; + a.href = `${link}?search="tag: ${tag}"`; + a.dataset.tooltip = `Show items with the tag "${tag}"`; + row.append(a); + } + + // delete tags container if empty + if (!row.innerText.trim()) row.remove(); + } + + // emit "tags done" event for other scripts to listen for + window.dispatchEvent(new Event("tagsfetched")); + }; + + // after page loads + window.addEventListener("load", onLoad); + + // GitHub topics endpoint + const api = "https://api.github.com/repos/REPO/topics"; + const headers = new Headers(); + headers.set("Accept", "application/vnd.github+json"); + + // get tags from GitHub based on repo name + const fetchTags = async (repo) => { + const url = api.replace("REPO", repo); + try { + const response = await (await fetch(url)).json(); + if (response.names) return response.names; + else throw new Error(JSON.stringify(response)); + } catch (error) { + console.groupCollapsed("GitHub fetch tags error"); + console.log(error); + console.groupEnd(); + return []; + } + }; +} diff --git a/preview/pr-3/_scripts/search.js b/preview/pr-3/_scripts/search.js new file mode 100644 index 0000000..fa23ca4 --- /dev/null +++ b/preview/pr-3/_scripts/search.js @@ -0,0 +1,215 @@ +/* + filters elements on page based on url or search box. + syntax: term1 term2 "full phrase 1" "full phrase 2" "tag: tag 1" + match if: all terms AND at least one phrase AND at least one tag +*/ +{ + // elements to filter + const elementSelector = ".card, .citation, .post-excerpt"; + // search box element + const searchBoxSelector = ".search-box"; + // results info box element + const infoBoxSelector = ".search-info"; + // tags element + const tagSelector = ".tag"; + + // split search query into terms, phrases, and tags + const splitQuery = (query) => { + // split into parts, preserve quotes + const parts = query.match(/"[^"]*"|\S+/g) || []; + + // bins + const terms = []; + const phrases = []; + const tags = []; + + // put parts into bins + for (let part of parts) { + if (part.startsWith('"')) { + part = part.replaceAll('"', "").trim(); + if (part.startsWith("tag:")) + tags.push(normalizeTag(part.replace(/tag:\s*/, ""))); + else phrases.push(part.toLowerCase()); + } else terms.push(part.toLowerCase()); + } + + return { terms, phrases, tags }; + }; + + // normalize tag string for comparison + window.normalizeTag = (tag) => + tag.trim().toLowerCase().replaceAll(/-|\s+/g, " "); + + // get data attribute contents of element and children + const getAttr = (element, attr) => + [element, ...element.querySelectorAll(`[data-${attr}]`)] + .map((element) => element.dataset[attr]) + .join(" "); + + // determine if element should show up in results based on query + const elementMatches = (element, { terms, phrases, tags }) => { + // tag elements within element + const tagElements = [...element.querySelectorAll(".tag")]; + + // check if text content exists in element + const hasText = (string) => + ( + element.innerText + + getAttr(element, "tooltip") + + getAttr(element, "search") + ) + .toLowerCase() + .includes(string); + // check if text matches a tag in element + const hasTag = (string) => + tagElements.some((tag) => normalizeTag(tag.innerText) === string); + + // match logic + return ( + (terms.every(hasText) || !terms.length) && + (phrases.some(hasText) || !phrases.length) && + (tags.some(hasTag) || !tags.length) + ); + }; + + // loop through elements, hide/show based on query, and return results info + const filterElements = (parts) => { + let elements = document.querySelectorAll(elementSelector); + + // results info + let x = 0; + let n = elements.length; + let tags = parts.tags; + + // filter elements + for (const element of elements) { + if (elementMatches(element, parts)) { + element.style.display = ""; + x++; + } else element.style.display = "none"; + } + + return [x, n, tags]; + }; + + // highlight search terms + const highlightMatches = async ({ terms, phrases }) => { + // make sure Mark library available + if (typeof Mark === "undefined") return; + + // reset + new Mark(document.body).unmark(); + + // limit number of highlights to avoid slowdown + let counter = 0; + const filter = () => counter++ < 100; + + // highlight terms and phrases + new Mark(elementSelector) + .mark(terms, { separateWordSearch: true, filter }) + .mark(phrases, { separateWordSearch: false, filter }); + }; + + // update search box based on query + const updateSearchBox = (query = "") => { + const boxes = document.querySelectorAll(searchBoxSelector); + + for (const box of boxes) { + const input = box.querySelector("input"); + const button = box.querySelector("button"); + const icon = box.querySelector("button i"); + input.value = query; + icon.className = input.value.length + ? "icon fa-solid fa-xmark" + : "icon fa-solid fa-magnifying-glass"; + button.disabled = input.value.length ? false : true; + } + }; + + // update info box based on query and results + const updateInfoBox = (query, x, n) => { + const boxes = document.querySelectorAll(infoBoxSelector); + + if (query.trim()) { + // show all info boxes + boxes.forEach((info) => (info.style.display = "")); + + // info template + let info = ""; + info += `Showing ${x.toLocaleString()} of ${n.toLocaleString()} results
`; + info += "Clear search"; + + // set info HTML string + boxes.forEach((el) => (el.innerHTML = info)); + } + // if nothing searched + else { + // hide all info boxes + boxes.forEach((info) => (info.style.display = "none")); + } + }; + + // update tags based on query + const updateTags = (query) => { + const { tags } = splitQuery(query); + document.querySelectorAll(tagSelector).forEach((tag) => { + // set active if tag is in query + if (tags.includes(normalizeTag(tag.innerText))) + tag.setAttribute("data-active", ""); + else tag.removeAttribute("data-active"); + }); + }; + + // run search with query + const runSearch = (query = "") => { + const parts = splitQuery(query); + const [x, n] = filterElements(parts); + updateSearchBox(query); + updateInfoBox(query, x, n); + updateTags(query); + highlightMatches(parts); + }; + + // update url based on query + const updateUrl = (query = "") => { + const url = new URL(window.location); + let params = new URLSearchParams(url.search); + params.set("search", query); + url.search = params.toString(); + window.history.replaceState(null, null, url); + }; + + // search based on url param + const searchFromUrl = () => { + const query = + new URLSearchParams(window.location.search).get("search") || ""; + runSearch(query); + }; + + // return func that runs after delay + const debounce = (callback, delay = 250) => { + let timeout; + return (...args) => { + window.clearTimeout(timeout); + timeout = window.setTimeout(() => callback(...args), delay); + }; + }; + + // when user types into search box + const debouncedRunSearch = debounce(runSearch, 1000); + window.onSearchInput = (target) => { + debouncedRunSearch(target.value); + updateUrl(target.value); + }; + + // when user clears search box with button + window.onSearchClear = () => { + runSearch(); + updateUrl(); + }; + + // after page loads + window.addEventListener("load", searchFromUrl); + // after tags load + window.addEventListener("tagsfetched", searchFromUrl); +} diff --git a/preview/pr-3/_scripts/site-search.js b/preview/pr-3/_scripts/site-search.js new file mode 100644 index 0000000..caff0a6 --- /dev/null +++ b/preview/pr-3/_scripts/site-search.js @@ -0,0 +1,14 @@ +/* + for site search component. searches site/domain via google. +*/ + +{ + // when user submits site search form/box + window.onSiteSearchSubmit = (event) => { + event.preventDefault(); + const google = "https://www.google.com/search?q=site:"; + const site = window.location.origin; + const query = event.target.elements.query.value; + window.location = google + site + " " + query; + }; +} diff --git a/preview/pr-3/_scripts/tooltip.js b/preview/pr-3/_scripts/tooltip.js new file mode 100644 index 0000000..49eccfc --- /dev/null +++ b/preview/pr-3/_scripts/tooltip.js @@ -0,0 +1,41 @@ +/* + shows a popup of text on hover/focus of any element with the data-tooltip + attribute. +*/ + +{ + const onLoad = () => { + // make sure Tippy library available + if (typeof tippy === "undefined") return; + + // get elements with non-empty tooltips + const elements = [...document.querySelectorAll("[data-tooltip]")].filter( + (element) => element.dataset.tooltip.trim() && !element._tippy + ); + + // add tooltip to elements + tippy(elements, { + content: (element) => element.dataset.tooltip.trim(), + delay: [200, 0], + offset: [0, 20], + allowHTML: true, + interactive: true, + appendTo: () => document.body, + aria: { + content: "describedby", + expanded: null, + }, + onShow: ({ reference, popper }) => { + const dark = reference.closest("[data-dark]")?.dataset.dark; + if (dark === "false") popper.dataset.dark = true; + if (dark === "true") popper.dataset.dark = false; + }, + // onHide: () => false, // debug + }); + }; + + // after page loads + window.addEventListener("load", onLoad); + // after tags load + window.addEventListener("tagsfetched", onLoad); +} diff --git a/preview/pr-3/_styles/-theme.css b/preview/pr-3/_styles/-theme.css new file mode 100644 index 0000000..069c3c0 --- /dev/null +++ b/preview/pr-3/_styles/-theme.css @@ -0,0 +1,41 @@ +[data-dark=false] { + --primary: #0ea5e9; + --secondary: #7dd3fc; + --text: #000000; + --background: #ffffff; + --background-alt: #fafafa; + --light-gray: #e0e0e0; + --gray: #808080; + --overlay: #00000020; +} + +[data-dark=true] { + --primary: #0ea5e9; + --secondary: #075985; + --text: #ffffff; + --background: #181818; + --background-alt: #1c1c1c; + --light-gray: #404040; + --gray: #808080; + --overlay: #ffffff10; +} + +:root { + --title: "Barlow", sans-serif; + --heading: "Barlow", sans-serif; + --body: "Barlow", sans-serif; + --code: "Roboto Mono", monospace; + --medium: 1rem; + --large: 1.2rem; + --xl: 1.4rem; + --xxl: 1.6rem; + --thin: 200; + --regular: 400; + --semi-bold: 500; + --bold: 600; + --spacing: 2; + --rounded: 3px; + --shadow: 0 0 10px 0 var(--overlay); +} + +/*# sourceMappingURL=-theme.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/-theme.css.map b/preview/pr-3/_styles/-theme.css.map new file mode 100644 index 0000000..dfb068c --- /dev/null +++ b/preview/pr-3/_styles/-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["-theme.scss"],"names":[],"mappings":"AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EAEE;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EAGA;EACA","sourcesContent":["// colors\n[data-dark=\"false\"] {\n --primary: #0ea5e9;\n --secondary: #7dd3fc;\n --text: #000000;\n --background: #ffffff;\n --background-alt: #fafafa;\n --light-gray: #e0e0e0;\n --gray: #808080;\n --overlay: #00000020;\n}\n[data-dark=\"true\"] {\n --primary: #0ea5e9;\n --secondary: #075985;\n --text: #ffffff;\n --background: #181818;\n --background-alt: #1c1c1c;\n --light-gray: #404040;\n --gray: #808080;\n --overlay: #ffffff10;\n}\n\n:root {\n // font families\n --title: \"Barlow\", sans-serif;\n --heading: \"Barlow\", sans-serif;\n --body: \"Barlow\", sans-serif;\n --code: \"Roboto Mono\", monospace;\n\n // font sizes\n --medium: 1rem;\n --large: 1.2rem;\n --xl: 1.4rem;\n --xxl: 1.6rem;\n\n // font weights\n --thin: 200;\n --regular: 400;\n --semi-bold: 500;\n --bold: 600;\n\n // text line spacing\n --spacing: 2;\n\n // effects\n --rounded: 3px;\n --shadow: 0 0 10px 0 var(--overlay);\n}\n"],"file":"-theme.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/alert.css b/preview/pr-3/_styles/alert.css new file mode 100644 index 0000000..a270c6f --- /dev/null +++ b/preview/pr-3/_styles/alert.css @@ -0,0 +1,36 @@ +.alert { + position: relative; + display: flex; + gap: 20px; + align-items: center; + margin: 20px 0; + padding: 20px; + border-radius: var(--rounded); + overflow: hidden; + text-align: left; + line-height: var(--spacing); +} + +.alert:before { + content: ""; + position: absolute; + inset: 0; + opacity: 0.1; + background: var(--color); + z-index: -1; +} + +.alert > .icon { + color: var(--color); + font-size: var(--large); +} + +.alert-content > *:first-child { + margin-top: 0; +} + +.alert-content > *:last-child { + margin-bottom: 0; +} + +/*# sourceMappingURL=alert.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/alert.css.map b/preview/pr-3/_styles/alert.css.map new file mode 100644 index 0000000..f34316b --- /dev/null +++ b/preview/pr-3/_styles/alert.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["alert.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":[".alert {\n position: relative;\n display: flex;\n gap: 20px;\n align-items: center;\n margin: 20px 0;\n padding: 20px;\n border-radius: var(--rounded);\n overflow: hidden;\n text-align: left;\n line-height: var(--spacing);\n}\n\n.alert:before {\n content: \"\";\n position: absolute;\n inset: 0;\n opacity: 0.1;\n background: var(--color);\n z-index: -1;\n}\n\n.alert > .icon {\n color: var(--color);\n font-size: var(--large);\n}\n\n.alert-content > *:first-child {\n margin-top: 0;\n}\n\n.alert-content > *:last-child {\n margin-bottom: 0;\n}\n"],"file":"alert.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/all.css b/preview/pr-3/_styles/all.css new file mode 100644 index 0000000..9b786fb --- /dev/null +++ b/preview/pr-3/_styles/all.css @@ -0,0 +1,6 @@ +* { + box-sizing: border-box; + transition: none 0.2s; +} + +/*# sourceMappingURL=all.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/all.css.map b/preview/pr-3/_styles/all.css.map new file mode 100644 index 0000000..f73c054 --- /dev/null +++ b/preview/pr-3/_styles/all.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["all.scss"],"names":[],"mappings":"AAAA;EACE;EACA","sourcesContent":["* {\n box-sizing: border-box;\n transition: none 0.2s;\n}\n"],"file":"all.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/anchor.css b/preview/pr-3/_styles/anchor.css new file mode 100644 index 0000000..a0c3402 --- /dev/null +++ b/preview/pr-3/_styles/anchor.css @@ -0,0 +1,23 @@ +.anchor { + display: inline-block; + position: relative; + width: 0; + margin: 0; + left: 0.5em; + color: var(--primary) !important; + opacity: 0; + font-size: 0.75em; + text-decoration: none; + transition-property: opacity, color; +} + +*:hover > .anchor, +.anchor:focus { + opacity: 1; +} + +.anchor:hover { + color: var(--text) !important; +} + +/*# sourceMappingURL=anchor.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/anchor.css.map b/preview/pr-3/_styles/anchor.css.map new file mode 100644 index 0000000..060a453 --- /dev/null +++ b/preview/pr-3/_styles/anchor.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["anchor.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE","sourcesContent":[".anchor {\n display: inline-block;\n position: relative;\n width: 0;\n margin: 0;\n left: 0.5em;\n color: var(--primary) !important;\n opacity: 0;\n font-size: 0.75em;\n text-decoration: none;\n transition-property: opacity, color;\n}\n\n*:hover > .anchor,\n.anchor:focus {\n opacity: 1;\n}\n\n.anchor:hover {\n color: var(--text) !important;\n}\n"],"file":"anchor.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/background.css b/preview/pr-3/_styles/background.css new file mode 100644 index 0000000..025e56a --- /dev/null +++ b/preview/pr-3/_styles/background.css @@ -0,0 +1,20 @@ +.background { + position: relative; + background: var(--background); + color: var(--text); + z-index: 1; +} + +.background:before { + content: ""; + position: absolute; + inset: 0; + background-image: var(--image); + background-size: cover; + background-repeat: no-repeat; + background-position: 50% 50%; + opacity: 0.25; + z-index: -1; +} + +/*# sourceMappingURL=background.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/background.css.map b/preview/pr-3/_styles/background.css.map new file mode 100644 index 0000000..b655d9e --- /dev/null +++ b/preview/pr-3/_styles/background.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["background.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","sourcesContent":[".background {\n position: relative;\n background: var(--background);\n color: var(--text);\n z-index: 1;\n}\n\n.background:before {\n content: \"\";\n position: absolute;\n inset: 0;\n background-image: var(--image);\n background-size: cover;\n background-repeat: no-repeat;\n background-position: 50% 50%;\n opacity: 0.25;\n z-index: -1;\n}\n"],"file":"background.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/body.css b/preview/pr-3/_styles/body.css new file mode 100644 index 0000000..7287261 --- /dev/null +++ b/preview/pr-3/_styles/body.css @@ -0,0 +1,17 @@ +html, +body { + margin: 0; + padding: 0; + min-height: 100vh; + background: var(--background); + color: var(--text); + font-family: var(--body); +} + +body { + display: flex; + flex-direction: column; + text-align: center; +} + +/*# sourceMappingURL=body.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/body.css.map b/preview/pr-3/_styles/body.css.map new file mode 100644 index 0000000..5fc5586 --- /dev/null +++ b/preview/pr-3/_styles/body.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["body.scss"],"names":[],"mappings":"AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA","sourcesContent":["html,\nbody {\n margin: 0;\n padding: 0;\n min-height: 100vh;\n background: var(--background);\n color: var(--text);\n font-family: var(--body);\n}\n\nbody {\n display: flex;\n flex-direction: column;\n text-align: center;\n}\n"],"file":"body.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/bold.css b/preview/pr-3/_styles/bold.css new file mode 100644 index 0000000..94a711f --- /dev/null +++ b/preview/pr-3/_styles/bold.css @@ -0,0 +1,6 @@ +b, +strong { + font-weight: var(--bold); +} + +/*# sourceMappingURL=bold.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/bold.css.map b/preview/pr-3/_styles/bold.css.map new file mode 100644 index 0000000..57012fd --- /dev/null +++ b/preview/pr-3/_styles/bold.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["bold.scss"],"names":[],"mappings":"AAAA;AAAA;EAEE","sourcesContent":["b,\nstrong {\n font-weight: var(--bold);\n}\n"],"file":"bold.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/button.css b/preview/pr-3/_styles/button.css new file mode 100644 index 0000000..505da8b --- /dev/null +++ b/preview/pr-3/_styles/button.css @@ -0,0 +1,50 @@ +button { + cursor: pointer; +} + +.button-wrapper { + display: contents; +} + +.button { + display: inline-flex; + justify-content: center; + align-items: center; + gap: 10px; + max-width: calc(100% - 5px - 5px); + margin: 5px; + padding: 10px 15px; + border: none; + border-radius: var(--rounded); + background: var(--primary); + color: var(--background); + text-align: center; + font-family: var(--heading); + font-weight: var(--semi-bold); + line-height: 1; + text-decoration: none; + vertical-align: middle; + -webkit-appearance: none; + appearance: none; + transition-property: background, color; +} + +.button:hover { + background: var(--text); + color: var(--background); +} + +.button[data-style=bare] { + padding: 5px; + background: none; + color: var(--primary); +} +.button[data-style=bare]:hover { + color: var(--text); +} + +.button[data-flip] { + flex-direction: row-reverse; +} + +/*# sourceMappingURL=button.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/button.css.map b/preview/pr-3/_styles/button.css.map new file mode 100644 index 0000000..351a5ae --- /dev/null +++ b/preview/pr-3/_styles/button.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["button.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE","sourcesContent":["button {\n cursor: pointer;\n}\n\n.button-wrapper {\n display: contents;\n}\n\n.button {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 5px - 5px);\n margin: 5px;\n padding: 10px 15px;\n border: none;\n border-radius: var(--rounded);\n background: var(--primary);\n color: var(--background);\n text-align: center;\n font-family: var(--heading);\n font-weight: var(--semi-bold);\n line-height: 1;\n text-decoration: none;\n vertical-align: middle;\n -webkit-appearance: none;\n appearance: none;\n transition-property: background, color;\n}\n\n.button:hover {\n background: var(--text);\n color: var(--background);\n}\n\n.button[data-style=\"bare\"] {\n padding: 5px;\n background: none;\n color: var(--primary);\n\n &:hover {\n color: var(--text);\n }\n}\n\n.button[data-flip] {\n flex-direction: row-reverse;\n}\n"],"file":"button.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/card.css b/preview/pr-3/_styles/card.css new file mode 100644 index 0000000..49e24a5 --- /dev/null +++ b/preview/pr-3/_styles/card.css @@ -0,0 +1,51 @@ +.card { + display: inline-flex; + justify-content: stretch; + align-items: center; + flex-direction: column; + width: 350px; + max-width: calc(100% - 20px - 20px); + margin: 20px; + background: var(--background); + border-radius: var(--rounded); + overflow: hidden; + box-shadow: var(--shadow); + vertical-align: top; +} + +.card[data-style=small] { + width: 250px; +} + +.card-image img { + aspect-ratio: 3/2; + object-fit: cover; + width: 100%; +} + +.card-text { + display: inline-flex; + justify-content: flex-start; + align-items: center; + flex-direction: column; + gap: 20px; + max-width: 100%; + padding: 20px; +} + +.card-text > *, +.card-text > .tags { + margin: 0; +} + +.card-title { + font-family: var(--heading); + font-weight: var(--semi-bold); +} + +.card-subtitle { + margin-top: -15px; + font-style: italic; +} + +/*# sourceMappingURL=card.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/card.css.map b/preview/pr-3/_styles/card.css.map new file mode 100644 index 0000000..da57e99 --- /dev/null +++ b/preview/pr-3/_styles/card.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["card.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA","sourcesContent":[".card {\n display: inline-flex;\n justify-content: stretch;\n align-items: center;\n flex-direction: column;\n width: 350px;\n max-width: calc(100% - 20px - 20px);\n margin: 20px;\n background: var(--background);\n border-radius: var(--rounded);\n overflow: hidden;\n box-shadow: var(--shadow);\n vertical-align: top;\n}\n\n.card[data-style=\"small\"] {\n width: 250px;\n}\n\n.card-image img {\n aspect-ratio: 3 / 2;\n object-fit: cover;\n width: 100%;\n // box-shadow: var(--shadow);\n}\n\n.card-text {\n display: inline-flex;\n justify-content: flex-start;\n align-items: center;\n flex-direction: column;\n gap: 20px;\n max-width: 100%;\n padding: 20px;\n}\n\n.card-text > *,\n.card-text > .tags {\n margin: 0;\n}\n\n.card-title {\n font-family: var(--heading);\n font-weight: var(--semi-bold);\n}\n\n.card-subtitle {\n margin-top: -15px;\n font-style: italic;\n}\n"],"file":"card.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/checkbox.css b/preview/pr-3/_styles/checkbox.css new file mode 100644 index 0000000..8c77dc5 --- /dev/null +++ b/preview/pr-3/_styles/checkbox.css @@ -0,0 +1,5 @@ +input[type=checkbox] { + cursor: pointer; +} + +/*# sourceMappingURL=checkbox.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/checkbox.css.map b/preview/pr-3/_styles/checkbox.css.map new file mode 100644 index 0000000..90fb493 --- /dev/null +++ b/preview/pr-3/_styles/checkbox.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["checkbox.scss"],"names":[],"mappings":"AAAA;EACE","sourcesContent":["input[type=\"checkbox\"] {\n cursor: pointer;\n}\n"],"file":"checkbox.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/citation.css b/preview/pr-3/_styles/citation.css new file mode 100644 index 0000000..e2303ac --- /dev/null +++ b/preview/pr-3/_styles/citation.css @@ -0,0 +1,90 @@ +.citation { + display: flex; + margin: 15px 0; + border-radius: var(--rounded); + background: var(--background); + overflow: hidden; + box-shadow: var(--shadow); +} + +.citation-image { + position: relative; + width: 180px; + flex-shrink: 0; +} + +.citation-image img { + position: absolute; + inset: 0; + width: 100%; + height: 100%; + object-fit: contain; +} + +.citation-text { + position: relative; + display: inline-flex; + flex-wrap: wrap; + gap: 15px; + max-width: 100%; + height: min-content; + padding: 20px; + padding-left: 30px; + text-align: left; + overflow-wrap: break-word; + z-index: 0; +} + +.citation-title, +.citation-authors, +.citation-details, +.citation-description { + width: 100%; + line-height: calc(var(--spacing) - 0.4); +} + +.citation-title { + font-weight: var(--semi-bold); +} + +.citation-text > .icon { + position: absolute; + top: 20px; + right: 20px; + color: var(--light-gray); + opacity: 0.5; + font-size: 30px; + z-index: -1; +} + +.citation-description { + color: var(--gray); +} + +.citation-buttons { + display: flex; + flex-wrap: wrap; + gap: 10px; +} + +.citation-buttons .button { + margin: 0; +} + +.citation-text > .tags { + display: inline-flex; + justify-content: flex-start; + margin: 0; +} + +@media (max-width: 800px) { + .citation { + flex-direction: column; + } + .citation-image { + width: unset; + height: 180px; + } +} + +/*# sourceMappingURL=citation.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/citation.css.map b/preview/pr-3/_styles/citation.css.map new file mode 100644 index 0000000..af40c89 --- /dev/null +++ b/preview/pr-3/_styles/citation.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["citation.scss"],"names":[],"mappings":"AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA,OAdW;EAeX;;;AAIF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;IACE;;EAGF;IACE;IACA,QA1FS","sourcesContent":["$thumb-size: 180px;\n$wrap: 800px;\n\n.citation {\n display: flex;\n margin: 15px 0;\n border-radius: var(--rounded);\n background: var(--background);\n overflow: hidden;\n box-shadow: var(--shadow);\n}\n\n.citation-image {\n position: relative;\n width: $thumb-size;\n flex-shrink: 0;\n // box-shadow: var(--shadow);\n}\n\n.citation-image img {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n.citation-text {\n position: relative;\n display: inline-flex;\n flex-wrap: wrap;\n gap: 15px;\n max-width: 100%;\n height: min-content;\n padding: 20px;\n padding-left: 30px;\n text-align: left;\n overflow-wrap: break-word;\n z-index: 0;\n}\n\n.citation-title,\n.citation-authors,\n.citation-details,\n.citation-description {\n width: 100%;\n line-height: calc(var(--spacing) - 0.4);\n}\n\n.citation-title {\n font-weight: var(--semi-bold);\n}\n\n.citation-text > .icon {\n position: absolute;\n top: 20px;\n right: 20px;\n color: var(--light-gray);\n opacity: 0.5;\n font-size: 30px;\n z-index: -1;\n}\n\n.citation-description {\n color: var(--gray);\n}\n\n.citation-buttons {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n\n.citation-buttons .button {\n margin: 0;\n}\n\n.citation-text > .tags {\n display: inline-flex;\n justify-content: flex-start;\n margin: 0;\n}\n\n@media (max-width: $wrap) {\n .citation {\n flex-direction: column;\n }\n\n .citation-image {\n width: unset;\n height: $thumb-size;\n }\n}\n"],"file":"citation.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/code.css b/preview/pr-3/_styles/code.css new file mode 100644 index 0000000..a8077f4 --- /dev/null +++ b/preview/pr-3/_styles/code.css @@ -0,0 +1,35 @@ +pre, +code, +pre *, +code * { + font-family: var(--code); +} + +code.highlighter-rouge { + padding: 2px 6px; + background: var(--light-gray); + border-radius: var(--rounded); + line-height: calc(var(--spacing) - 0.2); +} + +div.highlighter-rouge { + width: 100%; + margin: 40px 0; + border-radius: var(--rounded); + overflow-x: auto; + overflow-y: auto; + text-align: left; + line-height: calc(var(--spacing) - 0.4); +} +div.highlighter-rouge div.highlight { + display: contents; +} +div.highlighter-rouge div.highlight pre.highlight { + width: fit-content; + min-width: 100%; + margin: 0; + padding: 20px; + color: var(--white); +} + +/*# sourceMappingURL=code.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/code.css.map b/preview/pr-3/_styles/code.css.map new file mode 100644 index 0000000..048eb76 --- /dev/null +++ b/preview/pr-3/_styles/code.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["code.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;EAIE;;;AAIF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA","sourcesContent":["pre,\ncode,\npre *,\ncode * {\n font-family: var(--code);\n}\n\n// inline code\ncode.highlighter-rouge {\n padding: 2px 6px;\n background: var(--light-gray);\n border-radius: var(--rounded);\n line-height: calc(var(--spacing) - 0.2);\n}\n\n// code block\ndiv.highlighter-rouge {\n width: 100%;\n margin: 40px 0;\n border-radius: var(--rounded);\n overflow-x: auto;\n overflow-y: auto;\n text-align: left;\n line-height: calc(var(--spacing) - 0.4);\n\n div.highlight {\n display: contents;\n\n pre.highlight {\n width: fit-content;\n min-width: 100%;\n margin: 0;\n padding: 20px;\n color: var(--white);\n }\n }\n}\n"],"file":"code.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/cols.css b/preview/pr-3/_styles/cols.css new file mode 100644 index 0000000..13dfb6e --- /dev/null +++ b/preview/pr-3/_styles/cols.css @@ -0,0 +1,34 @@ +.cols { + display: grid; + --repeat: min(3, var(--cols)); + grid-template-columns: repeat(var(--repeat), 1fr); + align-items: flex-start; + gap: 40px; + margin: 40px 0; +} + +.cols > * { + min-width: 0; + min-height: 0; +} + +.cols > div > *:first-child { + margin-top: 0 !important; +} + +.cols > div > *:last-child { + margin-bottom: 0 !important; +} + +@media (max-width: 750px) { + .cols { + --repeat: min(2, var(--cols)); + } +} +@media (max-width: 500px) { + .cols { + --repeat: min(1, var(--cols)); + } +} + +/*# sourceMappingURL=cols.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/cols.css.map b/preview/pr-3/_styles/cols.css.map new file mode 100644 index 0000000..488b827 --- /dev/null +++ b/preview/pr-3/_styles/cols.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["cols.scss"],"names":[],"mappings":"AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;IACE;;;AAIJ;EACE;IACE","sourcesContent":["$two: 750px;\n$one: 500px;\n\n.cols {\n display: grid;\n --repeat: min(3, var(--cols));\n grid-template-columns: repeat(var(--repeat), 1fr);\n align-items: flex-start;\n gap: 40px;\n margin: 40px 0;\n}\n\n.cols > * {\n min-width: 0;\n min-height: 0;\n}\n\n.cols > div > *:first-child {\n margin-top: 0 !important;\n}\n\n.cols > div > *:last-child {\n margin-bottom: 0 !important;\n}\n\n@media (max-width: $two) {\n .cols {\n --repeat: min(2, var(--cols));\n }\n}\n\n@media (max-width: $one) {\n .cols {\n --repeat: min(1, var(--cols));\n }\n}\n"],"file":"cols.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/dark-toggle.css b/preview/pr-3/_styles/dark-toggle.css new file mode 100644 index 0000000..daedc5d --- /dev/null +++ b/preview/pr-3/_styles/dark-toggle.css @@ -0,0 +1,31 @@ +.dark-toggle { + position: relative; + width: 40px; + height: 25px; + margin: 0; + border-radius: 999px; + background: var(--primary); + -webkit-appearance: none; + appearance: none; + transition-property: background; +} + +.dark-toggle:after { + content: "\f185"; + position: absolute; + left: 12px; + top: 50%; + color: var(--text); + font-size: 15px; + font-family: "Font Awesome 6 Free"; + font-weight: 900; + transform: translate(-50%, -50%); + transition: left 0.2s; +} + +.dark-toggle:checked:after { + content: "\f186"; + left: calc(100% - 12px); +} + +/*# sourceMappingURL=dark-toggle.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/dark-toggle.css.map b/preview/pr-3/_styles/dark-toggle.css.map new file mode 100644 index 0000000..88294f0 --- /dev/null +++ b/preview/pr-3/_styles/dark-toggle.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["dark-toggle.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA","sourcesContent":[".dark-toggle {\n position: relative;\n width: 40px;\n height: 25px;\n margin: 0;\n border-radius: 999px;\n background: var(--primary);\n -webkit-appearance: none;\n appearance: none;\n transition-property: background;\n}\n\n.dark-toggle:after {\n content: \"\\f185\";\n position: absolute;\n left: 12px;\n top: 50%;\n color: var(--text);\n font-size: 15px;\n font-family: \"Font Awesome 6 Free\";\n font-weight: 900;\n transform: translate(-50%, -50%);\n transition: left 0.2s;\n}\n\n.dark-toggle:checked:after {\n content: \"\\f186\";\n left: calc(100% - 12px);\n}\n"],"file":"dark-toggle.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/feature.css b/preview/pr-3/_styles/feature.css new file mode 100644 index 0000000..a2d72f6 --- /dev/null +++ b/preview/pr-3/_styles/feature.css @@ -0,0 +1,49 @@ +.feature { + display: flex; + justify-content: center; + align-items: center; + gap: 40px; + margin: 40px 0; +} + +.feature-image { + flex-shrink: 0; + width: 40%; + aspect-ratio: 3/2; + border-radius: var(--rounded); + overflow: hidden; + box-shadow: var(--shadow); +} + +.feature-image img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.feature-text { + flex-grow: 1; +} + +.feature-title { + font-size: var(--large); + text-align: center; + font-family: var(--heading); + font-weight: var(--semi-bold); +} + +.feature[data-flip] { + flex-direction: row-reverse; +} + +@media (max-width: 800px) { + .feature { + flex-direction: column !important; + } + .feature-image { + width: unset; + max-width: 400px; + } +} + +/*# sourceMappingURL=feature.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/feature.css.map b/preview/pr-3/_styles/feature.css.map new file mode 100644 index 0000000..60e3d53 --- /dev/null +++ b/preview/pr-3/_styles/feature.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["feature.scss"],"names":[],"mappings":"AAEA;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;IACE;;EAGF;IACE;IACA","sourcesContent":["$wrap: 800px;\n\n.feature {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 40px;\n margin: 40px 0;\n}\n\n.feature-image {\n flex-shrink: 0;\n width: 40%;\n aspect-ratio: 3 / 2;\n border-radius: var(--rounded);\n overflow: hidden;\n box-shadow: var(--shadow);\n}\n\n.feature-image img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n.feature-text {\n flex-grow: 1;\n}\n\n.feature-title {\n font-size: var(--large);\n text-align: center;\n font-family: var(--heading);\n font-weight: var(--semi-bold);\n}\n\n.feature[data-flip] {\n flex-direction: row-reverse;\n}\n\n@media (max-width: $wrap) {\n .feature {\n flex-direction: column !important;\n }\n\n .feature-image {\n width: unset;\n max-width: calc($wrap / 2);\n }\n}\n"],"file":"feature.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/figure.css b/preview/pr-3/_styles/figure.css new file mode 100644 index 0000000..9558938 --- /dev/null +++ b/preview/pr-3/_styles/figure.css @@ -0,0 +1,25 @@ +.figure { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 10px; + margin: 40px 0; +} + +.figure-image { + display: contents; +} + +.figure-image img { + border-radius: var(--rounded); + overflow: hidden; + box-shadow: var(--shadow); +} + +.figure-caption { + font-style: italic; + text-align: center; +} + +/*# sourceMappingURL=figure.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/figure.css.map b/preview/pr-3/_styles/figure.css.map new file mode 100644 index 0000000..4d62fcf --- /dev/null +++ b/preview/pr-3/_styles/figure.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["figure.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA","sourcesContent":[".figure {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n gap: 10px;\n margin: 40px 0;\n}\n\n.figure-image {\n display: contents;\n}\n\n.figure-image img {\n border-radius: var(--rounded);\n overflow: hidden;\n box-shadow: var(--shadow);\n}\n\n.figure-caption {\n font-style: italic;\n text-align: center;\n}\n"],"file":"figure.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/float.css b/preview/pr-3/_styles/float.css new file mode 100644 index 0000000..c91b46e --- /dev/null +++ b/preview/pr-3/_styles/float.css @@ -0,0 +1,35 @@ +.float { + margin-bottom: 20px; + max-width: 50%; +} + +.float > * { + margin: 0 !important; +} + +.float:not([data-flip]) { + float: left; + margin-right: 40px; +} + +.float[data-flip] { + float: right; + margin-left: 40px; +} + +.float[data-clear] { + float: unset; + clear: both; + margin: 0; +} + +@media (max-width: 600px) { + .float { + float: unset !important; + clear: both !important; + margin: auto !important; + max-width: unset; + } +} + +/*# sourceMappingURL=float.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/float.css.map b/preview/pr-3/_styles/float.css.map new file mode 100644 index 0000000..42c53e0 --- /dev/null +++ b/preview/pr-3/_styles/float.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["float.scss"],"names":[],"mappings":"AAEA;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;IACE;IACA;IACA;IACA","sourcesContent":["$wrap: 600px;\n\n.float {\n margin-bottom: 20px;\n max-width: 50%;\n}\n\n.float > * {\n margin: 0 !important;\n}\n\n.float:not([data-flip]) {\n float: left;\n margin-right: 40px;\n}\n\n.float[data-flip] {\n float: right;\n margin-left: 40px;\n}\n\n.float[data-clear] {\n float: unset;\n clear: both;\n margin: 0;\n}\n\n@media (max-width: $wrap) {\n .float {\n float: unset !important;\n clear: both !important;\n margin: auto !important;\n max-width: unset;\n }\n}\n"],"file":"float.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/font.css b/preview/pr-3/_styles/font.css new file mode 100644 index 0000000..c40e155 --- /dev/null +++ b/preview/pr-3/_styles/font.css @@ -0,0 +1,3 @@ +@font-face {} + +/*# sourceMappingURL=font.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/font.css.map b/preview/pr-3/_styles/font.css.map new file mode 100644 index 0000000..e1d56c0 --- /dev/null +++ b/preview/pr-3/_styles/font.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["font.scss"],"names":[],"mappings":"AAAA","sourcesContent":["@font-face {\n}\n"],"file":"font.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/footer.css b/preview/pr-3/_styles/footer.css new file mode 100644 index 0000000..a85b907 --- /dev/null +++ b/preview/pr-3/_styles/footer.css @@ -0,0 +1,24 @@ +footer { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 20px; + padding: 40px; + line-height: var(--spacing); + box-shadow: var(--shadow); +} + +footer a { + color: var(--text) !important; +} + +footer a:hover { + color: var(--primary) !important; +} + +footer .icon { + font-size: var(--xl); +} + +/*# sourceMappingURL=footer.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/footer.css.map b/preview/pr-3/_styles/footer.css.map new file mode 100644 index 0000000..61ae117 --- /dev/null +++ b/preview/pr-3/_styles/footer.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["footer.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":["footer {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n gap: 20px;\n padding: 40px;\n line-height: var(--spacing);\n box-shadow: var(--shadow);\n}\n\nfooter a {\n color: var(--text) !important;\n}\n\nfooter a:hover {\n color: var(--primary) !important;\n}\n\nfooter .icon {\n font-size: var(--xl);\n}\n"],"file":"footer.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/form.css b/preview/pr-3/_styles/form.css new file mode 100644 index 0000000..7611459 --- /dev/null +++ b/preview/pr-3/_styles/form.css @@ -0,0 +1,8 @@ +form { + display: flex; + justify-content: center; + align-items: center; + gap: 10px; +} + +/*# sourceMappingURL=form.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/form.css.map b/preview/pr-3/_styles/form.css.map new file mode 100644 index 0000000..65939cb --- /dev/null +++ b/preview/pr-3/_styles/form.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["form.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA","sourcesContent":["form {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 10px;\n}\n"],"file":"form.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/grid.css b/preview/pr-3/_styles/grid.css new file mode 100644 index 0000000..3931eb2 --- /dev/null +++ b/preview/pr-3/_styles/grid.css @@ -0,0 +1,45 @@ +.grid { + display: grid; + --repeat: 3; + grid-template-columns: repeat(var(--repeat), 1fr); + justify-content: center; + align-items: flex-start; + gap: 40px; + margin: 40px 0; +} + +.grid > * { + min-width: 0; + min-height: 0; + width: 100%; + margin: 0 !important; +} + +@media (max-width: 750px) { + .grid { + --repeat: 2; + } +} +@media (max-width: 500px) { + .grid { + --repeat: 1; + } +} +.grid[data-style=square] { + align-items: center; +} +.grid[data-style=square] > * { + aspect-ratio: 1/1; +} +.grid[data-style=square] img { + aspect-ratio: 1/1; + object-fit: cover; + max-width: unset; + max-height: unset; +} + +.grid > *:where(h1, h2, h3, h4) { + display: none; +} + +/*# sourceMappingURL=grid.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/grid.css.map b/preview/pr-3/_styles/grid.css.map new file mode 100644 index 0000000..7baeedc --- /dev/null +++ b/preview/pr-3/_styles/grid.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["grid.scss"],"names":[],"mappings":"AAGA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EAEA;;;AAGF;EACE;IACE;;;AAIJ;EACE;IACE;;;AAIJ;EACE;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;;;AAIJ;EACE","sourcesContent":["$two: 750px;\n$one: 500px;\n\n.grid {\n display: grid;\n --repeat: 3;\n grid-template-columns: repeat(var(--repeat), 1fr);\n justify-content: center;\n align-items: flex-start;\n gap: 40px;\n margin: 40px 0;\n}\n\n.grid > * {\n min-width: 0;\n min-height: 0;\n width: 100%;\n // max-height: 50vh;\n margin: 0 !important;\n}\n\n@media (max-width: $two) {\n .grid {\n --repeat: 2;\n }\n}\n\n@media (max-width: $one) {\n .grid {\n --repeat: 1;\n }\n}\n\n.grid[data-style=\"square\"] {\n align-items: center;\n\n & > * {\n aspect-ratio: 1 / 1;\n }\n\n & img {\n aspect-ratio: 1 / 1;\n object-fit: cover;\n max-width: unset;\n max-height: unset;\n }\n}\n\n.grid > *:where(h1, h2, h3, h4) {\n display: none;\n}\n"],"file":"grid.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/header.css b/preview/pr-3/_styles/header.css new file mode 100644 index 0000000..5a33d4d --- /dev/null +++ b/preview/pr-3/_styles/header.css @@ -0,0 +1,146 @@ +header { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + gap: 20px; + padding: 20px; + box-shadow: var(--shadow); + position: sticky !important; + top: 0; + z-index: 10 !important; +} + +header a { + color: var(--text); + text-decoration: none; +} + +.home { + display: flex; + justify-content: flex-start; + align-items: center; + gap: 10px; + flex-basis: 0; + flex-grow: 1; + max-width: 100%; +} + +.logo { + height: 40px; +} + +.logo > * { + height: 100%; +} + +.title { + display: flex; + justify-content: flex-start; + align-items: baseline; + flex-wrap: wrap; + gap: 5px; + min-width: 0; + font-family: var(--title); + text-align: left; +} + +.title > *:first-child { + font-size: var(--large); +} + +.title > *:last-child { + opacity: 0.65; + font-weight: var(--thin); +} + +.nav-toggle { + display: none; + position: relative; + width: 30px; + height: 30px; + margin: 0; + color: var(--text); + -webkit-appearance: none; + appearance: none; + transition-property: background; +} + +.nav-toggle:after { + content: "\f0c9"; + position: absolute; + left: 50%; + top: 50%; + color: var(--text); + font-size: 15px; + font-family: "Font Awesome 6 Free"; + font-weight: 900; + transform: translate(-50%, -50%); +} + +.nav-toggle:checked:after { + content: "\f00d"; +} + +nav { + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + gap: 10px; + font-family: var(--heading); + text-transform: uppercase; +} + +nav > a { + padding: 5px; +} + +nav > a:hover { + color: var(--primary); +} + +@media (max-width: 700px) { + header:not([data-big]) { + justify-content: flex-end; + } + header:not([data-big]) .nav-toggle { + display: flex; + } + header:not([data-big]) .nav-toggle:not(:checked) + nav { + display: none; + } + header:not([data-big]) nav { + align-items: flex-end; + flex-direction: column; + width: 100%; + } +} + +header[data-big] { + justify-content: center; + align-items: center; + flex-direction: column; + padding: 100px 20px; + top: unset; +} +header[data-big] .home { + flex-direction: column; + flex-grow: 0; +} +header[data-big] .logo { + height: 80px; +} +header[data-big] .title { + flex-direction: column; + align-items: center; + text-align: center; +} +header[data-big] .title > *:first-child { + font-size: var(--xxl); +} +header[data-big] .title > *:last-child { + font-size: var(--large); +} + +/*# sourceMappingURL=header.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/header.css.map b/preview/pr-3/_styles/header.css.map new file mode 100644 index 0000000..d919aa5 --- /dev/null +++ b/preview/pr-3/_styles/header.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["header.scss"],"names":[],"mappings":"AAMA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EAGE;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE,QArCK;;;AAwCP;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;;;AAIF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EADF;IAEI;;EAEA;IACE;;EAGF;IACE;;EAGF;IACE;IACA;IACA;;;;AAKN;EACE;EACA;EACA;EACA;EAGE;;AAGF;EACE;EACA;;AAGF;EACE,QArJO;;AAwJT;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE","sourcesContent":["$logo-big: 80px;\n$logo: 40px;\n$big-padding: 100px;\n$collapse: 700px;\n$sticky: true;\n\nheader {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: 20px;\n padding: 20px;\n box-shadow: var(--shadow);\n\n @if $sticky {\n position: sticky !important;\n top: 0;\n z-index: 10 !important;\n }\n}\n\nheader a {\n color: var(--text);\n text-decoration: none;\n}\n\n.home {\n display: flex;\n justify-content: flex-start;\n align-items: center;\n gap: 10px;\n flex-basis: 0;\n flex-grow: 1;\n max-width: 100%;\n}\n\n.logo {\n height: $logo;\n}\n\n.logo > * {\n height: 100%;\n}\n\n.title {\n display: flex;\n justify-content: flex-start;\n align-items: baseline;\n flex-wrap: wrap;\n gap: 5px;\n min-width: 0;\n font-family: var(--title);\n text-align: left;\n}\n\n// main title\n.title > *:first-child {\n font-size: var(--large);\n}\n\n// subtitle\n.title > *:last-child {\n opacity: 0.65;\n font-weight: var(--thin);\n}\n\n.nav-toggle {\n display: none;\n position: relative;\n width: 30px;\n height: 30px;\n margin: 0;\n color: var(--text);\n -webkit-appearance: none;\n appearance: none;\n transition-property: background;\n}\n\n.nav-toggle:after {\n content: \"\\f0c9\";\n position: absolute;\n left: 50%;\n top: 50%;\n color: var(--text);\n font-size: 15px;\n font-family: \"Font Awesome 6 Free\";\n font-weight: 900;\n transform: translate(-50%, -50%);\n}\n\n.nav-toggle:checked:after {\n content: \"\\f00d\";\n}\n\nnav {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n font-family: var(--heading);\n text-transform: uppercase;\n}\n\nnav > a {\n padding: 5px;\n}\n\nnav > a:hover {\n color: var(--primary);\n}\n\nheader:not([data-big]) {\n @media (max-width: $collapse) {\n justify-content: flex-end;\n\n .nav-toggle {\n display: flex;\n }\n\n .nav-toggle:not(:checked) + nav {\n display: none;\n }\n\n nav {\n align-items: flex-end;\n flex-direction: column;\n width: 100%;\n }\n }\n}\n\nheader[data-big] {\n justify-content: center;\n align-items: center;\n flex-direction: column;\n padding: $big-padding 20px;\n\n @if $sticky {\n top: unset;\n }\n\n .home {\n flex-direction: column;\n flex-grow: 0;\n }\n\n .logo {\n height: $logo-big;\n }\n\n .title {\n flex-direction: column;\n align-items: center;\n text-align: center;\n }\n\n .title > *:first-child {\n font-size: var(--xxl);\n }\n\n .title > *:last-child {\n font-size: var(--large);\n }\n}\n"],"file":"header.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/heading.css b/preview/pr-3/_styles/heading.css new file mode 100644 index 0000000..41ce7c1 --- /dev/null +++ b/preview/pr-3/_styles/heading.css @@ -0,0 +1,47 @@ +h1, +h2, +h3, +h4 { + font-family: var(--heading); + line-height: calc(var(--spacing) - 0.2); +} + +h1 { + margin: 40px 0 20px 0; + font-size: var(--xxl); + font-weight: var(--regular); + letter-spacing: 1px; + text-transform: uppercase; + text-align: left; +} + +h2 { + margin: 40px 0 20px 0; + padding-bottom: 5px; + border-bottom: solid 1px var(--light-gray); + font-size: var(--xl); + font-weight: var(--regular); + letter-spacing: 1px; + text-align: left; +} + +h3 { + margin: 40px 0 20px 0; + font-size: var(--large); + font-weight: var(--semi-bold); + text-align: left; +} + +h4 { + margin: 40px 0 20px 0; + font-size: var(--medium); + font-weight: var(--semi-bold); + text-align: left; +} + +:where(h1, h2, h3, h4) > .icon { + margin-right: 1em; + color: var(--light-gray); +} + +/*# sourceMappingURL=heading.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/heading.css.map b/preview/pr-3/_styles/heading.css.map new file mode 100644 index 0000000..95d4210 --- /dev/null +++ b/preview/pr-3/_styles/heading.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["heading.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA","sourcesContent":["h1,\nh2,\nh3,\nh4 {\n font-family: var(--heading);\n line-height: calc(var(--spacing) - 0.2);\n}\n\nh1 {\n margin: 40px 0 20px 0;\n font-size: var(--xxl);\n font-weight: var(--regular);\n letter-spacing: 1px;\n text-transform: uppercase;\n text-align: left;\n}\n\nh2 {\n margin: 40px 0 20px 0;\n padding-bottom: 5px;\n border-bottom: solid 1px var(--light-gray);\n font-size: var(--xl);\n font-weight: var(--regular);\n letter-spacing: 1px;\n text-align: left;\n}\n\nh3 {\n margin: 40px 0 20px 0;\n font-size: var(--large);\n font-weight: var(--semi-bold);\n text-align: left;\n}\n\nh4 {\n margin: 40px 0 20px 0;\n font-size: var(--medium);\n font-weight: var(--semi-bold);\n text-align: left;\n}\n\n:where(h1, h2, h3, h4) > .icon {\n margin-right: 1em;\n color: var(--light-gray);\n}\n"],"file":"heading.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/highlight.css b/preview/pr-3/_styles/highlight.css new file mode 100644 index 0000000..a8cf7d3 --- /dev/null +++ b/preview/pr-3/_styles/highlight.css @@ -0,0 +1,6 @@ +mark { + background: #fef08a; + color: #000000; +} + +/*# sourceMappingURL=highlight.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/highlight.css.map b/preview/pr-3/_styles/highlight.css.map new file mode 100644 index 0000000..957ceb1 --- /dev/null +++ b/preview/pr-3/_styles/highlight.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["highlight.scss"],"names":[],"mappings":"AAAA;EACE;EACA","sourcesContent":["mark {\n background: #fef08a;\n color: #000000;\n}\n"],"file":"highlight.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/icon.css b/preview/pr-3/_styles/icon.css new file mode 100644 index 0000000..ab61327 --- /dev/null +++ b/preview/pr-3/_styles/icon.css @@ -0,0 +1,15 @@ +.icon { + font-size: 1em; +} + +span.icon { + line-height: 1; +} + +span.icon > svg { + position: relative; + top: 0.1em; + height: 1em; +} + +/*# sourceMappingURL=icon.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/icon.css.map b/preview/pr-3/_styles/icon.css.map new file mode 100644 index 0000000..2229868 --- /dev/null +++ b/preview/pr-3/_styles/icon.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["icon.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA","sourcesContent":[".icon {\n font-size: 1em;\n}\n\nspan.icon {\n line-height: 1;\n}\n\nspan.icon > svg {\n position: relative;\n top: 0.1em;\n height: 1em;\n}\n"],"file":"icon.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/image.css b/preview/pr-3/_styles/image.css new file mode 100644 index 0000000..70340d3 --- /dev/null +++ b/preview/pr-3/_styles/image.css @@ -0,0 +1,6 @@ +img { + max-width: 100%; + max-height: 100%; +} + +/*# sourceMappingURL=image.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/image.css.map b/preview/pr-3/_styles/image.css.map new file mode 100644 index 0000000..e88ec45 --- /dev/null +++ b/preview/pr-3/_styles/image.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["image.scss"],"names":[],"mappings":"AAAA;EACE;EACA","sourcesContent":["img {\n max-width: 100%;\n max-height: 100%;\n}\n"],"file":"image.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/link.css b/preview/pr-3/_styles/link.css new file mode 100644 index 0000000..a20e40b --- /dev/null +++ b/preview/pr-3/_styles/link.css @@ -0,0 +1,15 @@ +a { + color: var(--primary); + transition-property: color; + overflow-wrap: break-word; +} + +a:hover { + color: var(--text); +} + +a:not([href]) { + color: var(--text); +} + +/*# sourceMappingURL=link.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/link.css.map b/preview/pr-3/_styles/link.css.map new file mode 100644 index 0000000..976b37f --- /dev/null +++ b/preview/pr-3/_styles/link.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["link.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":["a {\n color: var(--primary);\n transition-property: color;\n overflow-wrap: break-word;\n}\n\na:hover {\n color: var(--text);\n}\n\na:not([href]) {\n color: var(--text);\n}\n"],"file":"link.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/list.css b/preview/pr-3/_styles/list.css new file mode 100644 index 0000000..02a7cf1 --- /dev/null +++ b/preview/pr-3/_styles/list.css @@ -0,0 +1,18 @@ +ul, +ol { + margin: 20px 0; + padding-left: 40px; +} + +ul { + list-style-type: square; +} + +li { + margin: 5px 0; + padding-left: 10px; + text-align: justify; + line-height: var(--spacing); +} + +/*# sourceMappingURL=list.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/list.css.map b/preview/pr-3/_styles/list.css.map new file mode 100644 index 0000000..38fb1e5 --- /dev/null +++ b/preview/pr-3/_styles/list.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["list.scss"],"names":[],"mappings":"AAAA;AAAA;EAEE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA","sourcesContent":["ul,\nol {\n margin: 20px 0;\n padding-left: 40px;\n}\n\nul {\n list-style-type: square;\n}\n\nli {\n margin: 5px 0;\n padding-left: 10px;\n text-align: justify;\n line-height: var(--spacing);\n}\n"],"file":"list.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/main.css b/preview/pr-3/_styles/main.css new file mode 100644 index 0000000..f72eb0d --- /dev/null +++ b/preview/pr-3/_styles/main.css @@ -0,0 +1,7 @@ +main { + display: flex; + flex-direction: column; + flex-grow: 1; +} + +/*# sourceMappingURL=main.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/main.css.map b/preview/pr-3/_styles/main.css.map new file mode 100644 index 0000000..a2a0fa8 --- /dev/null +++ b/preview/pr-3/_styles/main.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["main.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA","sourcesContent":["main {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n}\n"],"file":"main.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/paragraph.css b/preview/pr-3/_styles/paragraph.css new file mode 100644 index 0000000..7e46c39 --- /dev/null +++ b/preview/pr-3/_styles/paragraph.css @@ -0,0 +1,7 @@ +p { + margin: 20px 0; + text-align: justify; + line-height: var(--spacing); +} + +/*# sourceMappingURL=paragraph.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/paragraph.css.map b/preview/pr-3/_styles/paragraph.css.map new file mode 100644 index 0000000..7eb50a6 --- /dev/null +++ b/preview/pr-3/_styles/paragraph.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["paragraph.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA","sourcesContent":["p {\n margin: 20px 0;\n text-align: justify;\n line-height: var(--spacing);\n}\n"],"file":"paragraph.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/portrait.css b/preview/pr-3/_styles/portrait.css new file mode 100644 index 0000000..f9b31a1 --- /dev/null +++ b/preview/pr-3/_styles/portrait.css @@ -0,0 +1,76 @@ +.portrait-wrapper { + display: contents; +} + +.portrait { + position: relative; + display: inline-flex; + justify-content: center; + align-items: center; + flex-direction: column; + gap: 20px; + margin: 20px; + width: 175px; + max-width: calc(100% - 20px - 20px); + text-decoration: none; +} + +.portrait[data-style=small] { + width: 100px; +} + +.portrait[data-style=tiny] { + flex-direction: row; + gap: 15px; + width: unset; + text-align: left; +} + +.portrait-image { + width: 100%; + aspect-ratio: 1/1; + border-radius: 999px; + object-fit: cover; + box-shadow: var(--shadow); +} + +.portrait[data-style=tiny] .portrait-image { + width: 50px; +} + +.portrait[data-style=tiny] .portrait-role { + display: none; +} + +.portrait-text { + display: flex; + flex-direction: column; + line-height: calc(var(--spacing) - 0.4); +} + +.portrait-name { + font-family: var(--heading); + font-weight: var(--semi-bold); +} + +.portrait-role .icon { + position: absolute; + left: 0; + top: 0; + display: flex; + justify-content: center; + align-items: center; + width: 20%; + aspect-ratio: 1/1; + border-radius: 999px; + background: var(--background); + box-shadow: var(--shadow); + transform: translate(14%, 14%); +} + +.portrait[data-style=small] .portrait-role .icon { + left: -2px; + top: -2px; +} + +/*# sourceMappingURL=portrait.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/portrait.css.map b/preview/pr-3/_styles/portrait.css.map new file mode 100644 index 0000000..c3d5789 --- /dev/null +++ b/preview/pr-3/_styles/portrait.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["portrait.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA","sourcesContent":[".portrait-wrapper {\n display: contents;\n}\n\n.portrait {\n position: relative;\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n gap: 20px;\n margin: 20px;\n width: 175px;\n max-width: calc(100% - 20px - 20px);\n text-decoration: none;\n}\n\n.portrait[data-style=\"small\"] {\n width: 100px;\n}\n\n.portrait[data-style=\"tiny\"] {\n flex-direction: row;\n gap: 15px;\n width: unset;\n text-align: left;\n}\n\n.portrait-image {\n width: 100%;\n aspect-ratio: 1 / 1;\n border-radius: 999px;\n object-fit: cover;\n box-shadow: var(--shadow);\n}\n\n.portrait[data-style=\"tiny\"] .portrait-image {\n width: 50px;\n}\n\n.portrait[data-style=\"tiny\"] .portrait-role {\n display: none;\n}\n\n.portrait-text {\n display: flex;\n flex-direction: column;\n line-height: calc(var(--spacing) - 0.4);\n}\n\n.portrait-name {\n font-family: var(--heading);\n font-weight: var(--semi-bold);\n}\n\n.portrait-role .icon {\n position: absolute;\n left: 0;\n top: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n width: 20%;\n aspect-ratio: 1 / 1;\n border-radius: 999px;\n background: var(--background);\n box-shadow: var(--shadow);\n transform: translate(14%, 14%);\n}\n\n.portrait[data-style=\"small\"] .portrait-role .icon {\n left: -2px;\n top: -2px;\n}\n"],"file":"portrait.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/post-excerpt.css b/preview/pr-3/_styles/post-excerpt.css new file mode 100644 index 0000000..cfccd68 --- /dev/null +++ b/preview/pr-3/_styles/post-excerpt.css @@ -0,0 +1,30 @@ +.post-excerpt { + display: flex; + flex-wrap: wrap; + gap: 20px; + margin: 20px 0; + padding: 20px 30px; + border-radius: var(--rounded); + background: var(--background); + text-align: left; + box-shadow: var(--shadow); +} + +.post-excerpt > * { + margin: 0 !important; +} + +.post-excerpt > a:first-child { + width: 100%; + font-weight: var(--semi-bold); +} + +.post-excerpt > div { + justify-content: flex-start; +} + +.post-excerpt > p { + width: 100%; +} + +/*# sourceMappingURL=post-excerpt.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/post-excerpt.css.map b/preview/pr-3/_styles/post-excerpt.css.map new file mode 100644 index 0000000..e2041f2 --- /dev/null +++ b/preview/pr-3/_styles/post-excerpt.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["post-excerpt.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":[".post-excerpt {\n display: flex;\n flex-wrap: wrap;\n gap: 20px;\n margin: 20px 0;\n padding: 20px 30px;\n border-radius: var(--rounded);\n background: var(--background);\n text-align: left;\n box-shadow: var(--shadow);\n}\n\n.post-excerpt > * {\n margin: 0 !important;\n}\n\n.post-excerpt > a:first-child {\n width: 100%;\n font-weight: var(--semi-bold);\n}\n\n.post-excerpt > div {\n justify-content: flex-start;\n}\n\n.post-excerpt > p {\n width: 100%;\n}\n"],"file":"post-excerpt.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/post-info.css b/preview/pr-3/_styles/post-info.css new file mode 100644 index 0000000..abb6b51 --- /dev/null +++ b/preview/pr-3/_styles/post-info.css @@ -0,0 +1,32 @@ +.post-info { + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + gap: 20px; + margin: 20px 0; + color: var(--gray); +} + +.post-info .portrait { + margin: 0; +} + +.post-info .icon { + margin-right: 0.5em; +} + +.post-info a { + color: inherit; +} + +.post-info a:hover { + color: var(--primary); +} + +.post-info > span { + text-align: center; + white-space: nowrap; +} + +/*# sourceMappingURL=post-info.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/post-info.css.map b/preview/pr-3/_styles/post-info.css.map new file mode 100644 index 0000000..74c149e --- /dev/null +++ b/preview/pr-3/_styles/post-info.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["post-info.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA","sourcesContent":[".post-info {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n gap: 20px;\n margin: 20px 0;\n color: var(--gray);\n}\n\n.post-info .portrait {\n margin: 0;\n}\n\n.post-info .icon {\n margin-right: 0.5em;\n}\n\n.post-info a {\n color: inherit;\n}\n\n.post-info a:hover {\n color: var(--primary);\n}\n\n.post-info > span {\n text-align: center;\n white-space: nowrap;\n}\n"],"file":"post-info.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/post-nav.css b/preview/pr-3/_styles/post-nav.css new file mode 100644 index 0000000..fe210bb --- /dev/null +++ b/preview/pr-3/_styles/post-nav.css @@ -0,0 +1,36 @@ +.post-nav { + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 10px; + color: var(--gray); + line-height: calc(var(--spacing) - 0.4); +} + +.post-nav > *:first-child { + text-align: left; +} + +.post-nav > *:last-child { + text-align: right; +} + +.post-nav > *:first-child .icon { + margin-right: 0.5em; +} + +.post-nav > *:last-child .icon { + margin-left: 0.5em; +} + +@media (max-width: 600px) { + .post-nav { + align-items: center; + flex-direction: column; + } + .post-nav > * { + text-align: center !important; + } +} + +/*# sourceMappingURL=post-nav.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/post-nav.css.map b/preview/pr-3/_styles/post-nav.css.map new file mode 100644 index 0000000..2ba6fba --- /dev/null +++ b/preview/pr-3/_styles/post-nav.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["post-nav.scss"],"names":[],"mappings":"AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;IACE;IACA;;EAGF;IACE","sourcesContent":["$wrap: 600px;\n\n.post-nav {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 10px;\n color: var(--gray);\n line-height: calc(var(--spacing) - 0.4);\n}\n\n.post-nav > *:first-child {\n text-align: left;\n}\n\n.post-nav > *:last-child {\n text-align: right;\n}\n\n.post-nav > *:first-child .icon {\n margin-right: 0.5em;\n}\n\n.post-nav > *:last-child .icon {\n margin-left: 0.5em;\n}\n\n@media (max-width: $wrap) {\n .post-nav {\n align-items: center;\n flex-direction: column;\n }\n\n .post-nav > * {\n text-align: center !important;\n }\n}\n"],"file":"post-nav.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/quote.css b/preview/pr-3/_styles/quote.css new file mode 100644 index 0000000..456c767 --- /dev/null +++ b/preview/pr-3/_styles/quote.css @@ -0,0 +1,15 @@ +blockquote { + margin: 20px 0; + padding: 10px 20px; + border-left: solid 4px var(--light-gray); +} + +blockquote > *:first-child { + margin-top: 0; +} + +blockquote > *:last-child { + margin-bottom: 0; +} + +/*# sourceMappingURL=quote.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/quote.css.map b/preview/pr-3/_styles/quote.css.map new file mode 100644 index 0000000..2cc84a2 --- /dev/null +++ b/preview/pr-3/_styles/quote.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["quote.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":["blockquote {\n margin: 20px 0;\n padding: 10px 20px;\n border-left: solid 4px var(--light-gray);\n}\n\nblockquote > *:first-child {\n margin-top: 0;\n}\n\nblockquote > *:last-child {\n margin-bottom: 0;\n}\n"],"file":"quote.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/rule.css b/preview/pr-3/_styles/rule.css new file mode 100644 index 0000000..28ca080 --- /dev/null +++ b/preview/pr-3/_styles/rule.css @@ -0,0 +1,8 @@ +hr { + margin: 40px 0; + background: var(--light-gray); + border: none; + height: 1px; +} + +/*# sourceMappingURL=rule.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/rule.css.map b/preview/pr-3/_styles/rule.css.map new file mode 100644 index 0000000..a955dd9 --- /dev/null +++ b/preview/pr-3/_styles/rule.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["rule.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA","sourcesContent":["hr {\n margin: 40px 0;\n background: var(--light-gray);\n border: none;\n height: 1px;\n}\n"],"file":"rule.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/search-box.css b/preview/pr-3/_styles/search-box.css new file mode 100644 index 0000000..9766e92 --- /dev/null +++ b/preview/pr-3/_styles/search-box.css @@ -0,0 +1,25 @@ +.search-box { + position: relative; + height: 40px; +} + +.search-box .search-input { + width: 100%; + height: 100%; + padding-right: 40px; +} + +.search-box button { + position: absolute; + inset: 0 0 0 auto; + display: flex; + justify-content: center; + align-items: center; + padding: 0; + aspect-ratio: 1/1; + background: none; + color: var(--black); + border: none; +} + +/*# sourceMappingURL=search-box.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/search-box.css.map b/preview/pr-3/_styles/search-box.css.map new file mode 100644 index 0000000..7d45274 --- /dev/null +++ b/preview/pr-3/_styles/search-box.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["search-box.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","sourcesContent":[".search-box {\n position: relative;\n height: 40px;\n}\n\n.search-box .search-input {\n width: 100%;\n height: 100%;\n padding-right: 40px;\n}\n\n.search-box button {\n position: absolute;\n inset: 0 0 0 auto;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 0;\n aspect-ratio: 1 / 1;\n background: none;\n color: var(--black);\n border: none;\n}\n"],"file":"search-box.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/search-info.css b/preview/pr-3/_styles/search-info.css new file mode 100644 index 0000000..e5c9a30 --- /dev/null +++ b/preview/pr-3/_styles/search-info.css @@ -0,0 +1,8 @@ +.search-info { + margin: 20px 0; + text-align: center; + font-style: italic; + line-height: var(--spacing); +} + +/*# sourceMappingURL=search-info.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/search-info.css.map b/preview/pr-3/_styles/search-info.css.map new file mode 100644 index 0000000..d825cee --- /dev/null +++ b/preview/pr-3/_styles/search-info.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["search-info.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA","sourcesContent":[".search-info {\n margin: 20px 0;\n text-align: center;\n font-style: italic;\n line-height: var(--spacing);\n}\n"],"file":"search-info.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/section.css b/preview/pr-3/_styles/section.css new file mode 100644 index 0000000..4b9c58b --- /dev/null +++ b/preview/pr-3/_styles/section.css @@ -0,0 +1,35 @@ +section { + padding: 40px max(40px, (100% - 1000px) / 2); + transition-property: background, color; +} + +section[data-size=wide] { + padding: 40px; +} + +section[data-size=full] { + padding: 0; +} + +section[data-size=full] > * { + margin: 0; + border-radius: 0; +} + +section[data-size=full] img { + border-radius: 0; +} + +main > section:last-of-type { + flex-grow: 1; +} + +main > section:nth-of-type(odd) { + background: var(--background); +} + +main > section:nth-of-type(even) { + background: var(--background-alt); +} + +/*# sourceMappingURL=section.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/section.css.map b/preview/pr-3/_styles/section.css.map new file mode 100644 index 0000000..f630467 --- /dev/null +++ b/preview/pr-3/_styles/section.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["section.scss"],"names":[],"mappings":"AAGA;EACE;EACA;;;AAGF;EACE,SARQ;;;AAWV;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":["$page: 1000px;\n$padding: 40px;\n\nsection {\n padding: $padding max($padding, calc((100% - $page) / 2));\n transition-property: background, color;\n}\n\nsection[data-size=\"wide\"] {\n padding: $padding;\n}\n\nsection[data-size=\"full\"] {\n padding: 0;\n}\n\nsection[data-size=\"full\"] > * {\n margin: 0;\n border-radius: 0;\n}\n\nsection[data-size=\"full\"] img {\n border-radius: 0;\n}\n\nmain > section:last-of-type {\n flex-grow: 1;\n}\n\nmain > section:nth-of-type(odd) {\n background: var(--background);\n}\n\nmain > section:nth-of-type(even) {\n background: var(--background-alt);\n}\n"],"file":"section.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/table.css b/preview/pr-3/_styles/table.css new file mode 100644 index 0000000..eb687cc --- /dev/null +++ b/preview/pr-3/_styles/table.css @@ -0,0 +1,21 @@ +.table-wrapper { + margin: 40px 0; + overflow-x: auto; +} + +table { + margin: 0 auto; + border-collapse: collapse; +} + +th { + font-weight: var(--semi-bold); +} + +th, +td { + padding: 10px 15px; + border: solid 1px var(--light-gray); +} + +/*# sourceMappingURL=table.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/table.css.map b/preview/pr-3/_styles/table.css.map new file mode 100644 index 0000000..25e08df --- /dev/null +++ b/preview/pr-3/_styles/table.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["table.scss"],"names":[],"mappings":"AAAA;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA","sourcesContent":[".table-wrapper {\n margin: 40px 0;\n overflow-x: auto;\n}\n\ntable {\n margin: 0 auto;\n border-collapse: collapse;\n}\n\nth {\n font-weight: var(--semi-bold);\n}\n\nth,\ntd {\n padding: 10px 15px;\n border: solid 1px var(--light-gray);\n}\n"],"file":"table.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/tags.css b/preview/pr-3/_styles/tags.css new file mode 100644 index 0000000..1225ba4 --- /dev/null +++ b/preview/pr-3/_styles/tags.css @@ -0,0 +1,33 @@ +.tags { + display: inline-flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; + gap: 10px; + max-width: 100%; + margin: 20px 0; +} + +.tag { + max-width: 100%; + margin: 0; + padding: 5px 10px; + border-radius: 999px; + background: var(--secondary); + color: var(--text); + text-decoration: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + transition-property: background, color; +} + +.tag:hover { + background: var(--light-gray); +} + +.tag[data-active] { + background: var(--light-gray); +} + +/*# sourceMappingURL=tags.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/tags.css.map b/preview/pr-3/_styles/tags.css.map new file mode 100644 index 0000000..82c3531 --- /dev/null +++ b/preview/pr-3/_styles/tags.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["tags.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":[".tags {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n gap: 10px;\n max-width: 100%;\n margin: 20px 0;\n}\n\n.tag {\n max-width: 100%;\n margin: 0;\n padding: 5px 10px;\n border-radius: 999px;\n background: var(--secondary);\n color: var(--text);\n text-decoration: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition-property: background, color;\n}\n\n.tag:hover {\n background: var(--light-gray);\n}\n\n.tag[data-active] {\n background: var(--light-gray);\n}\n"],"file":"tags.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/textbox.css b/preview/pr-3/_styles/textbox.css new file mode 100644 index 0000000..d35615b --- /dev/null +++ b/preview/pr-3/_styles/textbox.css @@ -0,0 +1,17 @@ +input[type=text] { + width: 100%; + height: 40px; + margin: 0; + padding: 5px 10px; + border: solid 1px var(--light-gray); + border-radius: var(--rounded); + background: var(--background); + color: var(--text); + font-family: inherit; + font-size: inherit; + -webkit-appearance: none; + appearance: none; + box-shadow: var(--shadow); +} + +/*# sourceMappingURL=textbox.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/textbox.css.map b/preview/pr-3/_styles/textbox.css.map new file mode 100644 index 0000000..9e46f91 --- /dev/null +++ b/preview/pr-3/_styles/textbox.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["textbox.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA","sourcesContent":["input[type=\"text\"] {\n width: 100%;\n height: 40px;\n margin: 0;\n padding: 5px 10px;\n border: solid 1px var(--light-gray);\n border-radius: var(--rounded);\n background: var(--background);\n color: var(--text);\n font-family: inherit;\n font-size: inherit;\n -webkit-appearance: none;\n appearance: none;\n box-shadow: var(--shadow);\n}\n"],"file":"textbox.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/tooltip.css b/preview/pr-3/_styles/tooltip.css new file mode 100644 index 0000000..28b590e --- /dev/null +++ b/preview/pr-3/_styles/tooltip.css @@ -0,0 +1,72 @@ +.tippy-box { + background: var(--background); + color: var(--text); + padding: 7.5px; + text-align: left; + box-shadow: var(--shadow); +} + +.tippy-arrow { + width: 30px; + height: 30px; +} + +.tippy-arrow:before { + width: 10px; + height: 10px; + background: var(--background); + box-shadow: var(--shadow); +} + +.tippy-arrow { + overflow: hidden; + pointer-events: none; +} + +.tippy-box[data-placement=top] .tippy-arrow { + inset: unset; + top: 100%; +} + +.tippy-box[data-placement=bottom] .tippy-arrow { + inset: unset; + bottom: 100%; +} + +.tippy-box[data-placement=left] .tippy-arrow { + inset: unset; + left: 100%; +} + +.tippy-box[data-placement=right] .tippy-arrow { + inset: unset; + right: 100%; +} + +.tippy-arrow:before { + border: unset !important; + transform-origin: center !important; + transform: translate(-50%, -50%) rotate(45deg) !important; +} + +.tippy-box[data-placement=top] .tippy-arrow:before { + left: 50% !important; + top: 0 !important; +} + +.tippy-box[data-placement=bottom] .tippy-arrow:before { + left: 50% !important; + top: 100% !important; +} + +.tippy-box[data-placement=left] .tippy-arrow:before { + left: 0 !important; + top: 50% !important; +} + +.tippy-box[data-placement=right] .tippy-arrow:before { + left: 100% !important; + top: 50% !important; +} + +/*# sourceMappingURL=tooltip.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/tooltip.css.map b/preview/pr-3/_styles/tooltip.css.map new file mode 100644 index 0000000..6b52e91 --- /dev/null +++ b/preview/pr-3/_styles/tooltip.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["tooltip.scss"],"names":[],"mappings":"AAAA;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;;AAIF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA","sourcesContent":[".tippy-box {\n background: var(--background);\n color: var(--text);\n padding: 7.5px;\n text-align: left;\n box-shadow: var(--shadow);\n}\n\n.tippy-arrow {\n width: 30px;\n height: 30px;\n}\n\n.tippy-arrow:before {\n width: 10px;\n height: 10px;\n background: var(--background);\n box-shadow: var(--shadow);\n}\n\n// correct tippy arrow styles to support intuitive arrow styles above\n.tippy-arrow {\n overflow: hidden;\n pointer-events: none;\n}\n.tippy-box[data-placement=\"top\"] .tippy-arrow {\n inset: unset;\n top: 100%;\n}\n.tippy-box[data-placement=\"bottom\"] .tippy-arrow {\n inset: unset;\n bottom: 100%;\n}\n.tippy-box[data-placement=\"left\"] .tippy-arrow {\n inset: unset;\n left: 100%;\n}\n.tippy-box[data-placement=\"right\"] .tippy-arrow {\n inset: unset;\n right: 100%;\n}\n.tippy-arrow:before {\n border: unset !important;\n transform-origin: center !important;\n transform: translate(-50%, -50%) rotate(45deg) !important;\n}\n.tippy-box[data-placement=\"top\"] .tippy-arrow:before {\n left: 50% !important;\n top: 0 !important;\n}\n.tippy-box[data-placement=\"bottom\"] .tippy-arrow:before {\n left: 50% !important;\n top: 100% !important;\n}\n.tippy-box[data-placement=\"left\"] .tippy-arrow:before {\n left: 0 !important;\n top: 50% !important;\n}\n.tippy-box[data-placement=\"right\"] .tippy-arrow:before {\n left: 100% !important;\n top: 50% !important;\n}\n"],"file":"tooltip.css"} \ No newline at end of file diff --git a/preview/pr-3/_styles/util.css b/preview/pr-3/_styles/util.css new file mode 100644 index 0000000..995ea77 --- /dev/null +++ b/preview/pr-3/_styles/util.css @@ -0,0 +1,13 @@ +.left { + text-align: left; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +/*# sourceMappingURL=util.css.map */ \ No newline at end of file diff --git a/preview/pr-3/_styles/util.css.map b/preview/pr-3/_styles/util.css.map new file mode 100644 index 0000000..c21a68d --- /dev/null +++ b/preview/pr-3/_styles/util.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["util.scss"],"names":[],"mappings":"AAAA;EACE;;;AAGF;EACE;;;AAGF;EACE","sourcesContent":[".left {\n text-align: left;\n}\n\n.center {\n text-align: center;\n}\n\n.right {\n text-align: right;\n}\n"],"file":"util.css"} \ No newline at end of file diff --git a/preview/pr-3/contact/index.html b/preview/pr-3/contact/index.html new file mode 100644 index 0000000..422f20a --- /dev/null +++ b/preview/pr-3/contact/index.html @@ -0,0 +1,643 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Contact | ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Contact

+ +

We are always working on exciting new ideas. If you are interested in +collaborating with us, or if you have any questions, we would love to hear.

+ + +
+ + + + + +
+ + +
+ + +
+

Brickyard Engineering is the home to the Intelligent Data Infrastructure Lab (IDI). You will often find one of our team members in the vicinity of the following address:

+ +

Street Address
+699 S. Mill Ave.
+Tempe, AZ 85281

+ +

Building Code
+BYENG

+ +
+ + +
+
+ + Our Home @ ASU + + +
+ Our Home @ ASU + +
+ +
+ +
+ +
+
+ + +
+ + + + + + + diff --git a/preview/pr-3/feed.xml b/preview/pr-3/feed.xml new file mode 100644 index 0000000..8e3b042 --- /dev/null +++ b/preview/pr-3/feed.xml @@ -0,0 +1 @@ +Jekyll2024-02-27T06:59:21+00:00/preview/pr-3/feed.xmlASU-IDIAn engaging 1-3 sentence description of your lab. \ No newline at end of file diff --git a/preview/pr-3/images/BrickyardASU.jpeg b/preview/pr-3/images/BrickyardASU.jpeg new file mode 100644 index 0000000..f0220f1 Binary files /dev/null and b/preview/pr-3/images/BrickyardASU.jpeg differ diff --git a/preview/pr-3/images/background.jpg b/preview/pr-3/images/background.jpg new file mode 100644 index 0000000..5b7c146 Binary files /dev/null and b/preview/pr-3/images/background.jpg differ diff --git a/preview/pr-3/images/fallback.svg b/preview/pr-3/images/fallback.svg new file mode 100644 index 0000000..ac12be2 --- /dev/null +++ b/preview/pr-3/images/fallback.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/preview/pr-3/images/icon.png b/preview/pr-3/images/icon.png new file mode 100644 index 0000000..774c447 Binary files /dev/null and b/preview/pr-3/images/icon.png differ diff --git a/preview/pr-3/images/logo.svg b/preview/pr-3/images/logo.svg new file mode 100644 index 0000000..1d66697 --- /dev/null +++ b/preview/pr-3/images/logo.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + diff --git a/preview/pr-3/images/photo.jpg b/preview/pr-3/images/photo.jpg new file mode 100644 index 0000000..691a988 Binary files /dev/null and b/preview/pr-3/images/photo.jpg differ diff --git a/preview/pr-3/images/share.jpg b/preview/pr-3/images/share.jpg new file mode 100644 index 0000000..268a341 Binary files /dev/null and b/preview/pr-3/images/share.jpg differ diff --git a/preview/pr-3/index.html b/preview/pr-3/index.html new file mode 100644 index 0000000..7823639 --- /dev/null +++ b/preview/pr-3/index.html @@ -0,0 +1,670 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

Exploring frontiers in database, storage, and data infrastructure

+ +

The Intelligent Data Infrastructure (IDI) research lab delves into database systems, storage technologies, and next-generation data infrastructure. We tackle emerging challenges, designing cutting-edge solutions to advance data management and analysis in today’s dynamic digital landscape. Our work spans a wide range of topics, including distributed systems, cloud computing, machine learning, and data analytics. We are passionate about pushing the boundaries of data infrastructure.

+
+ + + + + +
+ + +

Highlights

+ +
+ + Our Publications + +
+ +

Our Publications

+ + +

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+ + + + +
+
+ +
+ + Our Projects + +
+ +

Our Projects

+ + +

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+ + + + +
+
+ +
+ + Our Team + +
+ +

Our Team

+ + +

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+ + + + +
+
+
+ + +
+ + + + + + + diff --git a/preview/pr-3/members/chang-guo.html b/preview/pr-3/members/chang-guo.html new file mode 100644 index 0000000..bb55280 --- /dev/null +++ b/preview/pr-3/members/chang-guo.html @@ -0,0 +1,602 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Chang Guo | ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+ + + + + + + + + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-3/members/viraj-thakkar.html b/preview/pr-3/members/viraj-thakkar.html new file mode 100644 index 0000000..70ee7b0 --- /dev/null +++ b/preview/pr-3/members/viraj-thakkar.html @@ -0,0 +1,619 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Viraj Thakkar | ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

+ + + + + + + + + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-3/members/zhichao-cao.html b/preview/pr-3/members/zhichao-cao.html new file mode 100644 index 0000000..890bd0a --- /dev/null +++ b/preview/pr-3/members/zhichao-cao.html @@ -0,0 +1,621 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Zhichao Cao | ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+ + + +

Zhichao Cao is an assistant professor in the School of Computing and Augmented Intelligence at Arizona State University. He leads the Intelligent Data Infrastructure (IDI) research lab, where he conducts research in the areas of database systems (e.g., key-value stores, graph databases, and timeseries databases), storage systems (e.g., file systems, cloud storage, and deduplication systems), and next-generation data infrastructure (e.g., disaggregated infrastructure, computing-in-X, and wireless datacenter). His research interests also lie in the design and development of data management systems for new memory and storage technologies, such as SMR, IMR, NVM, CXL, RDMA, ZNS, and DNA. Moreover, Prof. Cao’s research also encompasses big data systems, with a focus on the development of query engines for large-scale scientific computing in HPC and storage solutions for AI/ML platforms.

+ +

Prior to joining ASU, Prof. Cao worked as a research scientist at Facebook, where he contributed to storage and database research from 2018 to 2021. He earned his bachelor’s degree in Automation from Tsinghua University in 2013 and his doctoral degree in Computer Science from the University of Minnesota, Twin Cities, in 2020.

+ + + + + + + + + + + +
+ + +
+ + + + + + + diff --git a/preview/pr-3/project/index.html b/preview/pr-3/project/index.html new file mode 100644 index 0000000..83928a1 --- /dev/null +++ b/preview/pr-3/project/index.html @@ -0,0 +1,665 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Projects | ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Projects

+
+ + + + + +
+ + + + +
+ +
+ + + LLM-Assisted Configuration Tuning for Log-Structured Merge-tree-based Key-Value Stores + + + + + + + + + + + + + + + +

+ +Design and develop an LLM-assisted auto-tuning framework for Log-Structured Merge-tree-based Key-Value Stores (LSM-KVS) to achieve better performance. + +

+
+
+ + +
+ + + + + + + diff --git a/preview/pr-3/projects/gpt_project.html b/preview/pr-3/projects/gpt_project.html new file mode 100644 index 0000000..73812ac --- /dev/null +++ b/preview/pr-3/projects/gpt_project.html @@ -0,0 +1,618 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +LLM-Assisted Configuration Tuning for Log-Structured Merge-tree-based Key-Value Stores | ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

LLM-Assisted Configuration Tuning for Log-Structured Merge-tree-based Key-Value Stores

+ + + + + + + + +
+ + + + + +
+ + + + +

Design and develop an LLM-assisted auto-tuning framework for Log-Structured Merge-tree-based Key-Value Stores (LSM-KVS) to achieve better performance.

+ +

Log-Structured Merge-tree-based Key-Value Stores (LSM-KVS) are widely used in today’s IT infrastructure , and usually have over 100 options (e.g., HBase and RocksDB ) to tune performance for particular hardware (e.g., CPU, memory, and storage), software, and workloads (e.g., random, skewed, and read/write intensive) . However, tuning the LSM-KVS with appropriate configurations is always challenging, usually requiring IT professionals with LSM-KVS expertise to run hundreds of benchmarking evaluations. Existing related studies on LSM-KVS tuning solutions are still limited, lacking generality, adaptiveness to the versions and deployments. We believe the recent advancements of Large-Language-Models (LLMs) like OpenAI’s GPT-4 can be a promising solution to achieve LSM-KVS auto-tuning: 1) LLMs are trained using collections of LSM-KVS-related blog, publications, and almost all the open-sourced code, which makes the LLMs a real “expert” of LSM-KVS; 2) LLMs has the strong inferential capability to analyze the benchmarking results and achieve automatic and interactive adjustments for LSM-KVS on particular hardware and workloads. However, how to design the auto-tuning framework based on LLMs and benchmarking tools, how to generate appropriate prompts for LLMs, and how to calibrate the unexpected errors and wrong configurations are three main challenges to be addressed.

+ +

We propose to design and develop an LLM-assisted auto-tuning framework as shown in Figure with the following workflow: 1) Use default options file and a collection of system and hardware information as initial input. 2) Use a feedback loop with the LLM API and create new prompts for LLM with option changes and the processed benchmarking results in the previous iterations. 3) The newly generated options from LLM are calibrated (cleaned and corrected) for a new round of benchmarking; And 4) after several iterations, the benchmarking results have converged and it generates the final optimized option configurations. Note that the whole process is automatically deployed and executed without human intervention. We implemented the framework prototype on RocksDB v8.8.1 and OpenAI’s GPT-4-1106 model, and open-sourced. Our preliminary evaluations show that with 5 iterations of auto-tuning, our framework achieves up to 20% of throughput improvement compared with default configurations.

+
+ + + + + +
+ + + +
+ + + + + + +
+
+ + +
+ + + + + + + diff --git a/preview/pr-3/publications/index.html b/preview/pr-3/publications/index.html new file mode 100644 index 0000000..e0aea65 --- /dev/null +++ b/preview/pr-3/publications/index.html @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Publications | ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Publications

+ +
+ + + +
+
+ + +
+ + + + + + + diff --git a/preview/pr-3/redirects.json b/preview/pr-3/redirects.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/preview/pr-3/redirects.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/preview/pr-3/robots.txt b/preview/pr-3/robots.txt new file mode 100644 index 0000000..ef1c050 --- /dev/null +++ b/preview/pr-3/robots.txt @@ -0,0 +1 @@ +Sitemap: /preview/pr-3/sitemap.xml diff --git a/preview/pr-3/sitemap.xml b/preview/pr-3/sitemap.xml new file mode 100644 index 0000000..02b640b --- /dev/null +++ b/preview/pr-3/sitemap.xml @@ -0,0 +1,39 @@ + + + +/preview/pr-3/members/chang-guo.html +2024-02-27T06:57:27+00:00 + + +/preview/pr-3/members/viraj-thakkar.html +2024-02-27T06:57:27+00:00 + + +/preview/pr-3/members/zhichao-cao.html +2024-02-27T06:57:27+00:00 + + +/preview/pr-3/projects/gpt_project.html +2024-02-27T06:57:27+00:00 + + +/preview/pr-3/project/ +2024-02-27T06:57:27+00:00 + + +/preview/pr-3/contact/ +2024-02-27T06:57:27+00:00 + + +/preview/pr-3/publications/ +2024-02-27T06:57:27+00:00 + + +/preview/pr-3/team/ +2024-02-27T06:57:27+00:00 + + +/preview/pr-3/ +2024-02-27T06:57:27+00:00 + + diff --git a/preview/pr-3/team/index.html b/preview/pr-3/team/index.html new file mode 100644 index 0000000..31a1452 --- /dev/null +++ b/preview/pr-3/team/index.html @@ -0,0 +1,671 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Team | ASU-IDI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + ASU-IDI + + + The Intelligent Data Infrastructure Lab at Arizona State University + + + + + + + + +
+ +
+ + + + + + + + + + + + + +
+

+Team

+
+ + + + + +
+ + +

Current Members

+ + + + + + + +

Alumni

+
+ + +
+ + + + + + +