├── .gitignore ├── sass ├── style.scss ├── _sharedClasses.scss ├── _base.scss ├── _searchResults.scss └── _searchEntry.scss ├── README.md ├── js ├── searchBar.js ├── main.js ├── dataFunctions.js └── searchResults.js ├── index.html └── dist └── css ├── style.min.css └── style.min.css.map /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | -------------------------------------------------------------------------------- /sass/style.scss: -------------------------------------------------------------------------------- 1 | @import "_base"; 2 | @import "_sharedClasses"; 3 | @import "_searchEntry"; 4 | @import "_searchResults"; 5 | -------------------------------------------------------------------------------- /sass/_sharedClasses.scss: -------------------------------------------------------------------------------- 1 | .blue { 2 | color: $logo-blue; 3 | } 4 | 5 | .red { 6 | color: $logo-red; 7 | } 8 | 9 | .yellow { 10 | color: $logo-yellow; 11 | } 12 | 13 | .green { 14 | color: $logo-green; 15 | } 16 | 17 | .exclaim { 18 | display: inline-block; 19 | font-size: 2.5rem; 20 | transform: rotate(12deg); 21 | @include mq(768px) { 22 | font-size: 5rem; 23 | } 24 | } 25 | 26 | .offscreen { 27 | position: absolute; 28 | left: -10000px; 29 | } 30 | 31 | .none { 32 | display: none; 33 | } 34 | 35 | .flex { 36 | display: flex; 37 | } 38 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Search App Tutorial 2 | 3 | [![Remix on Glitch](https://cdn.glitch.com/2703baf2-b643-4da7-ab91-7ee2a2d00b5b%2Fremix-button.svg)](https://glitch.com/edit/#!/import/github/gitdagray/search_app_tutorial) 4 | 5 | **You can Remix this project on Glitch by clicking the button above.** 6 | 7 | ✅ [Check out my YouTube Channel with all of my tutorials](https://www.youtube.com/DaveGrayTeachesCode). 8 | 9 | **Description:** 10 | 11 | In this tutorial, we'll build a Google clone using HTML, SASS compiled to CSS, and Vanilla Javascript. The design will be mobile first, responsive, and have accessibility in mind. We'll use the Javascript Fetch API with Async / Await to retrieve search results from the Wikipedia API. 12 | 13 | ### Academic Honesty 14 | 15 | **DO NOT COPY FOR AN ASSIGNMENT** - Avoid plagiargism and adhere to the spirit of this [Academic Honesty Policy](https://www.freecodecamp.org/news/academic-honesty-policy/). 16 | -------------------------------------------------------------------------------- /js/searchBar.js: -------------------------------------------------------------------------------- 1 | export const setSearchFocus = () => { 2 | document.getElementById("search").focus(); 3 | }; 4 | 5 | export const showClearTextButton = () => { 6 | const search = document.getElementById("search"); 7 | const clear = document.getElementById("clear"); 8 | if (search.value.length) { 9 | clear.classList.remove("none"); 10 | clear.classList.add("flex"); 11 | } else { 12 | clear.classList.add("none"); 13 | clear.classList.remove("flex"); 14 | } 15 | }; 16 | 17 | export const clearSearchText = (event) => { 18 | event.preventDefault(); 19 | document.getElementById("search").value = ""; 20 | const clear = document.getElementById("clear"); 21 | clear.classList.add("none"); 22 | clear.classList.remove("flex"); 23 | setSearchFocus(); 24 | }; 25 | 26 | export const clearPushListener = (event) => { 27 | if (event.key === "Enter" || event.key === " ") { 28 | event.preventDefault(); 29 | document.getElementById("clear").click(); 30 | } 31 | }; 32 | -------------------------------------------------------------------------------- /sass/_base.scss: -------------------------------------------------------------------------------- 1 | $search-bar-border: #e6e6e6; 2 | $stats-color: #70757a; 3 | $clear-button-color: #d9d9d9; 4 | $background-color: #fff; 5 | $font-color: #000; 6 | $logo-blue: #4885ed; 7 | $logo-red: #db3236; 8 | $logo-yellow: #ffc107; 9 | $logo-green: #3cba54; 10 | $link-color: #1a0dab; 11 | $link-visited-color: #609; 12 | $link-outline-color: #000; 13 | $font-stack: "Roboto", Arial, sans-serif; 14 | 15 | %flex { 16 | display: flex; 17 | align-items: center; 18 | } 19 | 20 | @mixin flexColumn { 21 | @extend %flex; 22 | flex-direction: column; 23 | justify-content: flex-start; 24 | } 25 | 26 | @mixin flexCenter { 27 | @extend %flex; 28 | justify-content: center; 29 | } 30 | 31 | @mixin mq($size) { 32 | @media only screen and (min-width: $size) { 33 | @content; 34 | } 35 | } 36 | 37 | * { 38 | padding: 0; 39 | margin: 0; 40 | box-sizing: border-box; 41 | } 42 | 43 | html, 44 | body { 45 | background-color: $background-color; 46 | color: $font-color; 47 | width: 100vw; 48 | min-height: 100vh; 49 | font-family: $font-stack; 50 | font-size: 22px; 51 | } 52 | 53 | main { 54 | @include flexColumn; 55 | min-height: calc(100vh - 60px); 56 | } 57 | 58 | footer { 59 | width: 100%; 60 | height: 60px; 61 | @include flexCenter; 62 | 63 | p { 64 | color: $stats-color; 65 | font-size: 0.5rem; 66 | @include mq(768px) { 67 | font-size: 1rem; 68 | } 69 | 70 | a { 71 | color: $stats-color; 72 | } 73 | } 74 | } 75 | 76 | img { 77 | display: block; 78 | } 79 | -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | import { 2 | setSearchFocus, 3 | showClearTextButton, 4 | clearSearchText, 5 | clearPushListener 6 | } from "./searchBar.js"; 7 | import { 8 | deleteSearchResults, 9 | buildSearchResults, 10 | clearStatsLine, 11 | setStatsLine 12 | } from "./searchResults.js"; 13 | import { getSearchTerm, retrieveSearchResults } from "./dataFunctions.js"; 14 | 15 | document.addEventListener("readystatechange", (event) => { 16 | if (event.target.readyState === "complete") { 17 | initApp(); 18 | } 19 | }); 20 | 21 | const initApp = () => { 22 | setSearchFocus(); 23 | const search = document.getElementById("search"); 24 | search.addEventListener("input", showClearTextButton); 25 | const clear = document.getElementById("clear"); 26 | clear.addEventListener("click", clearSearchText); 27 | clear.addEventListener("keydown", clearPushListener); 28 | const form = document.getElementById("searchBar"); 29 | form.addEventListener("submit", submitTheSearch); 30 | }; 31 | 32 | // Procedural "workflow" function 33 | const submitTheSearch = (event) => { 34 | event.preventDefault(); 35 | deleteSearchResults(); 36 | processTheSearch(); 37 | setSearchFocus(); 38 | }; 39 | 40 | // Procedural 41 | const processTheSearch = async () => { 42 | clearStatsLine(); 43 | const searchTerm = getSearchTerm(); 44 | if (searchTerm === "") return; //TODO: 45 | const resultArray = await retrieveSearchResults(searchTerm); 46 | if (resultArray.length) buildSearchResults(resultArray); 47 | setStatsLine(resultArray.length); 48 | }; 49 | -------------------------------------------------------------------------------- /sass/_searchResults.scss: -------------------------------------------------------------------------------- 1 | .results { 2 | @include flexColumn; 3 | padding: 0.5rem 1rem; 4 | width: 90vw; 5 | @include mq(768px) { 6 | width: 75vw; 7 | } 8 | @include mq(1025px) { 9 | width: 55vw; 10 | } 11 | 12 | .statsBar { 13 | width: 100%; 14 | 15 | .stats { 16 | color: $stats-color; 17 | font-size: 0.75rem; 18 | @include mq(768px) { 19 | font-size: 1rem; 20 | } 21 | } 22 | } 23 | 24 | .searchResults { 25 | width: 100%; 26 | 27 | .resultItem { 28 | @include flexColumn; 29 | width: 100%; 30 | padding: 0.25rem 0; 31 | @include mq(768px) { 32 | padding: 0.5rem 0; 33 | } 34 | 35 | .resultTitle { 36 | width: 100%; 37 | text-align: left; 38 | font-size: 1rem; 39 | line-height: 1.5rem; 40 | margin-bottom: 0.25rem; 41 | overflow: hidden; 42 | white-space: nowrap; 43 | text-overflow: ellipsis; 44 | padding: 3px 2px; 45 | @include mq(768px) { 46 | font-size: 1.5rem; 47 | line-height: 1.75rem; 48 | margin-bottom: 0.5rem; 49 | } 50 | 51 | a { 52 | color: $link-color; 53 | text-decoration: none; 54 | cursor: pointer; 55 | } 56 | 57 | a:visited { 58 | color: $link-visited-color; 59 | } 60 | 61 | a:hover { 62 | text-decoration: underline; 63 | } 64 | 65 | a:focus { 66 | outline: 2px solid $link-outline-color; 67 | } 68 | } 69 | 70 | .resultContents { 71 | display: flex; 72 | width: 100%; 73 | 74 | .resultImage { 75 | margin-right: 0.5rem; 76 | } 77 | 78 | .resultText { 79 | flex-grow: 1; 80 | font-size: 14px; 81 | line-height: 20px; 82 | max-height: 60px; 83 | overflow: hidden; 84 | text-overflow: ellipsis; 85 | @include mq(768px) { 86 | font-size: 1rem; 87 | line-height: 28px; 88 | } 89 | } 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /js/dataFunctions.js: -------------------------------------------------------------------------------- 1 | export const getSearchTerm = () => { 2 | const rawSearchTerm = document.getElementById("search").value.trim(); 3 | const regex = /[ ]{2,}/gi; 4 | const searchTerm = rawSearchTerm.replaceAll(regex, " "); 5 | return searchTerm; 6 | }; 7 | 8 | export const retrieveSearchResults = async (searchTerm) => { 9 | const wikiSearchString = getWikiSearchString(searchTerm); 10 | const wikiSearchResults = await requestData(wikiSearchString); 11 | let resultArray = []; 12 | if (wikiSearchResults.hasOwnProperty("query")) { 13 | resultArray = processWikiResults(wikiSearchResults.query.pages); 14 | } 15 | return resultArray; 16 | }; 17 | 18 | const getWikiSearchString = (searchTerm) => { 19 | const maxChars = getMaxChars(); 20 | const rawSearchString = `https://en.wikipedia.org/w/api.php?action=query&generator=search&gsrsearch=${searchTerm}&gsrlimit=20&prop=pageimages|extracts&exchars=${maxChars}&exintro&explaintext&exlimit=max&format=json&origin=*`; 21 | const searchString = encodeURI(rawSearchString); 22 | return searchString; 23 | }; 24 | 25 | const getMaxChars = () => { 26 | const width = window.innerWidth || document.body.clientWidth; 27 | let maxChars; 28 | if (width < 414) maxChars = 65; 29 | if (width >= 414 && width < 1400) maxChars = 100; 30 | if (width >= 1400) maxChars = 130; 31 | return maxChars; 32 | }; 33 | 34 | const requestData = async (searchString) => { 35 | try { 36 | const response = await fetch(searchString); 37 | const data = await response.json(); 38 | return data; 39 | } catch (err) { 40 | console.error(err); 41 | } 42 | }; 43 | 44 | const processWikiResults = (results) => { 45 | const resultArray = []; 46 | Object.keys(results).forEach((key) => { 47 | const id = key; 48 | const title = results[key].title; 49 | const text = results[key].extract; 50 | const img = results[key].hasOwnProperty("thumbnail") 51 | ? results[key].thumbnail.source 52 | : null; 53 | const item = { 54 | id: id, 55 | title: title, 56 | img: img, 57 | text: text 58 | }; 59 | resultArray.push(item); 60 | }); 61 | return resultArray; 62 | }; 63 | -------------------------------------------------------------------------------- /sass/_searchEntry.scss: -------------------------------------------------------------------------------- 1 | .searchEntry { 2 | @include flexColumn; 3 | padding-top: 40px; 4 | 5 | .logo { 6 | letter-spacing: -5px; 7 | font-size: 2rem; 8 | font-weight: 600; 9 | margin-bottom: 0.5rem; 10 | @include mq(768px) { 11 | font-size: 4rem; 12 | letter-spacing: -10px; 13 | } 14 | } 15 | 16 | .searchBar { 17 | width: 90vw; 18 | display: flex; 19 | border: 2px solid $search-bar-border; 20 | border-radius: 500px; 21 | padding: 0.15rem 0.25rem 0.15rem 0.75rem; 22 | @include mq(768px) { 23 | width: 80vw; 24 | padding: 1.25rem 1.5rem; 25 | } 26 | @include mq(1025px) { 27 | width: 60vw; 28 | } 29 | 30 | input[type="text"] { 31 | flex-grow: 1; 32 | font-size: 0.75rem; 33 | text-align: left; 34 | letter-spacing: 0.1rem; 35 | border: 0; 36 | outline: none; 37 | min-width: 150px; 38 | @include mq(768px) { 39 | font-size: 1.25rem; 40 | } 41 | } 42 | 43 | .button { 44 | cursor: pointer; 45 | border: 0; 46 | background: transparent; 47 | min-width: 48px; 48 | min-height: 48px; 49 | outline: none; 50 | 51 | i { 52 | font-family: "Font Awesome 5 Free"; 53 | font-size: 1rem; 54 | @include mq(768px) { 55 | font-size: 1.5rem; 56 | } 57 | } 58 | } 59 | 60 | .button:hover, 61 | .button:focus { 62 | i { 63 | padding-bottom: 0.5rem; 64 | border-bottom-width: 1px; 65 | border-bottom-style: solid; 66 | } 67 | } 68 | 69 | .searchButton:hover, 70 | .searchButton:focus { 71 | i { 72 | color: $logo-green; 73 | } 74 | } 75 | 76 | .clear:hover, 77 | .clear:focus { 78 | i { 79 | color: $logo-red; 80 | } 81 | } 82 | 83 | .searchButton { 84 | @include mq(768px) { 85 | padding-left: 1rem; 86 | } 87 | } 88 | 89 | .clear { 90 | justify-content: center; 91 | align-items: center; 92 | color: $stats-color; 93 | border-right: thin solid $clear-button-color; 94 | @include mq(768px) { 95 | padding: 0 1rem; 96 | } 97 | } 98 | } 99 | 100 | .searchBar:hover, 101 | .searchBar:focus-within { 102 | box-shadow: 0 2px 5px 2px $search-bar-border; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /js/searchResults.js: -------------------------------------------------------------------------------- 1 | export const deleteSearchResults = () => { 2 | const parentElement = document.getElementById("searchResults"); 3 | let child = parentElement.lastElementChild; 4 | while (child) { 5 | parentElement.removeChild(child); 6 | child = parentElement.lastElementChild; 7 | } 8 | }; 9 | 10 | export const buildSearchResults = (resultArray) => { 11 | resultArray.forEach((result) => { 12 | const resultItem = createResultItem(result); 13 | const resultContents = document.createElement("div"); 14 | resultContents.classList.add("resultContents"); 15 | if (result.img) { 16 | const resultImage = createResultImage(result); 17 | resultContents.append(resultImage); 18 | } 19 | const resultText = createResultText(result); 20 | resultContents.append(resultText); 21 | resultItem.append(resultContents); 22 | const searchResults = document.getElementById("searchResults"); 23 | searchResults.append(resultItem); 24 | }); 25 | }; 26 | 27 | const createResultItem = (result) => { 28 | const resultItem = document.createElement("div"); 29 | resultItem.classList.add("resultItem"); 30 | const resultTitle = document.createElement("div"); 31 | resultTitle.classList.add("resultTitle"); 32 | const link = document.createElement("a"); 33 | link.href = `https://en.wikipedia.org/?curid=${result.id}`; 34 | link.textContent = result.title; 35 | link.target = "_blank"; 36 | resultTitle.append(link); 37 | resultItem.append(resultTitle); 38 | return resultItem; 39 | }; 40 | 41 | const createResultImage = (result) => { 42 | const resultImage = document.createElement("div"); 43 | resultImage.classList.add("resultImage"); 44 | const img = document.createElement("img"); 45 | img.src = result.img; 46 | img.alt = result.title; 47 | resultImage.append(img); 48 | return resultImage; 49 | }; 50 | 51 | const createResultText = (result) => { 52 | const resultText = document.createElement("div"); 53 | resultText.classList.add("resultText"); 54 | const resultDescription = document.createElement("p"); 55 | resultDescription.classList.add("resultDescription"); 56 | resultDescription.textContent = result.text; 57 | resultText.append(resultDescription); 58 | return resultText; 59 | }; 60 | 61 | export const clearStatsLine = () => { 62 | document.getElementById("stats").textContent = ""; 63 | }; 64 | 65 | export const setStatsLine = (numberOfResults) => { 66 | const statLine = document.getElementById("stats"); 67 | if (numberOfResults) { 68 | statLine.textContent = `Displaying ${numberOfResults} results.`; 69 | } else { 70 | statLine.textContent = "Sorry, no results."; 71 | } 72 | }; 73 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | SearchMe 12 | 13 | 14 |
15 |

Search Me A Wikipedia Powered Search Engine

16 |
17 |

Search Term Entry

18 | 29 | 39 |
40 |
41 |

Search Results

42 |
43 |
44 |
45 |
46 |
47 |
48 | 51 | 52 | -------------------------------------------------------------------------------- /dist/css/style.min.css: -------------------------------------------------------------------------------- 1 | main,footer,.searchEntry,.results,.results .searchResults .resultItem{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}*{padding:0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}html,body{background-color:#fff;color:#000;width:100vw;min-height:100vh;font-family:"Roboto",Arial,sans-serif;font-size:22px}main{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;min-height:calc(100vh - 60px)}footer{width:100%;height:60px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}footer p{color:#70757a;font-size:0.5rem}@media only screen and (min-width: 768px){footer p{font-size:1rem}}footer p a{color:#70757a}img{display:block}.blue{color:#4885ed}.red{color:#db3236}.yellow{color:#ffc107}.green{color:#3cba54}.exclaim{display:inline-block;font-size:2.5rem;-webkit-transform:rotate(12deg);transform:rotate(12deg)}@media only screen and (min-width: 768px){.exclaim{font-size:5rem}}.offscreen{position:absolute;left:-10000px}.none{display:none}.flex{display:-webkit-box;display:-ms-flexbox;display:flex}.searchEntry{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding-top:40px}.searchEntry .logo{letter-spacing:-5px;font-size:2rem;font-weight:600;margin-bottom:0.5rem}@media only screen and (min-width: 768px){.searchEntry .logo{font-size:4rem;letter-spacing:-10px}}.searchEntry .searchBar{width:90vw;display:-webkit-box;display:-ms-flexbox;display:flex;border:2px solid #e6e6e6;border-radius:500px;padding:0.15rem 0.25rem 0.15rem 0.75rem}@media only screen and (min-width: 768px){.searchEntry .searchBar{width:80vw;padding:1.25rem 1.5rem}}@media only screen and (min-width: 1025px){.searchEntry .searchBar{width:60vw}}.searchEntry .searchBar input[type="text"]{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;font-size:0.75rem;text-align:left;letter-spacing:0.1rem;border:0;outline:none;min-width:150px}@media only screen and (min-width: 768px){.searchEntry .searchBar input[type="text"]{font-size:1.25rem}}.searchEntry .searchBar .button{cursor:pointer;border:0;background:transparent;min-width:48px;min-height:48px;outline:none}.searchEntry .searchBar .button i{font-family:"Font Awesome 5 Free";font-size:1rem}@media only screen and (min-width: 768px){.searchEntry .searchBar .button i{font-size:1.5rem}}.searchEntry .searchBar .button:hover i,.searchEntry .searchBar .button:focus i{padding-bottom:0.5rem;border-bottom-width:1px;border-bottom-style:solid}.searchEntry .searchBar .searchButton:hover i,.searchEntry .searchBar .searchButton:focus i{color:#3cba54}.searchEntry .searchBar .clear:hover i,.searchEntry .searchBar .clear:focus i{color:#db3236}@media only screen and (min-width: 768px){.searchEntry .searchBar .searchButton{padding-left:1rem}}.searchEntry .searchBar .clear{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#70757a;border-right:thin solid #d9d9d9}@media only screen and (min-width: 768px){.searchEntry .searchBar .clear{padding:0 1rem}}.searchEntry .searchBar:hover,.searchEntry .searchBar:focus-within{-webkit-box-shadow:0 2px 5px 2px #e6e6e6;box-shadow:0 2px 5px 2px #e6e6e6}.results{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;padding:0.5rem 1rem;width:90vw}@media only screen and (min-width: 768px){.results{width:75vw}}@media only screen and (min-width: 1025px){.results{width:55vw}}.results .statsBar{width:100%}.results .statsBar .stats{color:#70757a;font-size:0.75rem}@media only screen and (min-width: 768px){.results .statsBar .stats{font-size:1rem}}.results .searchResults{width:100%}.results .searchResults .resultItem{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;width:100%;padding:0.25rem 0}@media only screen and (min-width: 768px){.results .searchResults .resultItem{padding:0.5rem 0}}.results .searchResults .resultItem .resultTitle{width:100%;text-align:left;font-size:1rem;line-height:1.5rem;margin-bottom:0.25rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:3px 2px}@media only screen and (min-width: 768px){.results .searchResults .resultItem .resultTitle{font-size:1.5rem;line-height:1.75rem;margin-bottom:0.5rem}}.results .searchResults .resultItem .resultTitle a{color:#1a0dab;text-decoration:none;cursor:pointer}.results .searchResults .resultItem .resultTitle a:visited{color:#609}.results .searchResults .resultItem .resultTitle a:hover{text-decoration:underline}.results .searchResults .resultItem .resultTitle a:focus{outline:2px solid #000}.results .searchResults .resultItem .resultContents{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.results .searchResults .resultItem .resultContents .resultImage{margin-right:0.5rem}.results .searchResults .resultItem .resultContents .resultText{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;font-size:14px;line-height:20px;max-height:60px;overflow:hidden;text-overflow:ellipsis}@media only screen and (min-width: 768px){.results .searchResults .resultItem .resultContents .resultText{font-size:1rem;line-height:28px}} 2 | /*# sourceMappingURL=style.min.css.map */ -------------------------------------------------------------------------------- /dist/css/style.min.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "ACoDA,AAtCA,IAsCI,CAKJ,MAAM,CEzDN,YAAY,CCAZ,QAAQ,CAAR,QAAQ,CAuBN,cAAc,CAGZ,WAAW,AHZT,CACJ,OAAO,CAAE,IAAI,CACb,WAAW,CAAE,MAAM,CACpB,AAmBD,AAAA,CAAC,AAAC,CACA,OAAO,CAAE,CAAC,CACV,MAAM,CAAE,CAAC,CACT,UAAU,CAAE,UAAU,CACvB,AAED,AAAA,IAAI,CACJ,IAAI,AAAC,CACH,gBAAgB,CAzCC,IAAI,CA0CrB,KAAK,CAzCM,IAAI,CA0Cf,KAAK,CAAE,KAAK,CACZ,UAAU,CAAE,KAAK,CACjB,WAAW,CApCA,QAAQ,CAAE,KAAK,CAAE,UAAU,CAqCtC,SAAS,CAAE,IAAI,CAChB,AAED,AAAA,IAAI,AAAC,CA/BH,cAAc,CAAE,MAAM,CACtB,eAAe,CAAE,UAAU,CAgC3B,UAAU,CAAE,kBAAkB,CAC/B,AAED,AAAA,MAAM,AAAC,CACL,KAAK,CAAE,IAAI,CACX,MAAM,CAAE,IAAI,CAhCZ,eAAe,CAAE,MAAM,CA8CxB,AAhBD,AAKE,MALI,CAKJ,CAAC,AAAC,CACA,KAAK,CA9DK,OAAO,CA+DjB,SAAS,CAAE,MAAM,CAQlB,AAzCD,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EA0B1C,AAKE,MALI,CAKJ,CAAC,AAAC,CAIE,SAAS,CAAE,IAAI,CAMlB,CAfH,AAYI,MAZE,CAKJ,CAAC,CAOC,CAAC,AAAC,CACA,KAAK,CArEG,OAAO,CAsEhB,AAIL,AAAA,GAAG,AAAC,CACF,OAAO,CAAE,KAAK,CACf,AC7ED,AAAA,KAAK,AAAC,CACJ,KAAK,CDIK,OAAO,CCHlB,AAED,AAAA,IAAI,AAAC,CACH,KAAK,CDCI,OAAO,CCAjB,AAED,AAAA,OAAO,AAAC,CACN,KAAK,CDFO,OAAO,CCGpB,AAED,AAAA,MAAM,AAAC,CACL,KAAK,CDLM,OAAO,CCMnB,AAED,AAAA,QAAQ,AAAC,CACP,OAAO,CAAE,YAAY,CACrB,SAAS,CAAE,MAAM,CACjB,SAAS,CAAE,aAAa,CAIzB,ADQC,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,ECf1C,AAAA,QAAQ,AAAC,CAKL,SAAS,CAAE,IAAI,CAElB,CAED,AAAA,UAAU,AAAC,CACT,QAAQ,CAAE,QAAQ,CAClB,IAAI,CAAE,QAAQ,CACf,AAED,AAAA,KAAK,AAAC,CACJ,OAAO,CAAE,IAAI,CACd,AAED,AAAA,KAAK,AAAC,CACJ,OAAO,CAAE,IAAI,CACd,ACpCD,AAAA,YAAY,AAAC,CFqBX,cAAc,CAAE,MAAM,CACtB,eAAe,CAAE,UAAU,CEpB3B,WAAW,CAAE,IAAI,CAqGlB,AAvGD,AAIE,YAJU,CAIV,KAAK,AAAC,CACJ,cAAc,CAAE,IAAI,CACpB,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,GAAG,CAChB,aAAa,CAAE,MAAM,CAKtB,AFkBD,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EE/B1C,AAIE,YAJU,CAIV,KAAK,AAAC,CAMF,SAAS,CAAE,IAAI,CACf,cAAc,CAAE,KAAK,CAExB,CAbH,AAeE,YAfU,CAeV,UAAU,AAAC,CACT,KAAK,CAAE,IAAI,CACX,OAAO,CAAE,IAAI,CACb,MAAM,CAAE,GAAG,CAAC,KAAK,CFlBD,OAAO,CEmBvB,aAAa,CAAE,KAAK,CACpB,OAAO,CAAE,+BAA+B,CA6EzC,AFlED,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EE/B1C,AAeE,YAfU,CAeV,UAAU,AAAC,CAOP,KAAK,CAAE,IAAI,CACX,OAAO,CAAE,cAAc,CA0E1B,CFlED,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,MAAM,EE/B3C,AAeE,YAfU,CAeV,UAAU,AAAC,CAWP,KAAK,CAAE,IAAI,CAuEd,CAjGH,AA6BI,YA7BQ,CAeV,UAAU,CAcR,KAAK,CAAA,AAAA,IAAC,CAAK,MAAM,AAAX,CAAa,CACjB,SAAS,CAAE,CAAC,CACZ,SAAS,CAAE,OAAO,CAClB,UAAU,CAAE,IAAI,CAChB,cAAc,CAAE,MAAM,CACtB,MAAM,CAAE,CAAC,CACT,OAAO,CAAE,IAAI,CACb,SAAS,CAAE,KAAK,CAIjB,AFTH,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EE/B1C,AA6BI,YA7BQ,CAeV,UAAU,CAcR,KAAK,CAAA,AAAA,IAAC,CAAK,MAAM,AAAX,CAAa,CASf,SAAS,CAAE,OAAO,CAErB,CAxCL,AA0CI,YA1CQ,CAeV,UAAU,CA2BR,OAAO,AAAC,CACN,MAAM,CAAE,OAAO,CACf,MAAM,CAAE,CAAC,CACT,UAAU,CAAE,WAAW,CACvB,SAAS,CAAE,IAAI,CACf,UAAU,CAAE,IAAI,CAChB,OAAO,CAAE,IAAI,CASd,AAzDL,AAkDM,YAlDM,CAeV,UAAU,CA2BR,OAAO,CAQL,CAAC,AAAC,CACA,WAAW,CAAE,qBAAqB,CAClC,SAAS,CAAE,IAAI,CAIhB,AFzBL,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EE/B1C,AAkDM,YAlDM,CAeV,UAAU,CA2BR,OAAO,CAQL,CAAC,AAAC,CAIE,SAAS,CAAE,MAAM,CAEpB,CAxDP,AA6DM,YA7DM,CAeV,UAAU,CA4CR,OAAO,AAAA,MAAM,CAEX,CAAC,CA7DP,YAAY,CAeV,UAAU,CA6CR,OAAO,AAAA,MAAM,CACX,CAAC,AAAC,CACA,cAAc,CAAE,MAAM,CACtB,mBAAmB,CAAE,GAAG,CACxB,mBAAmB,CAAE,KAAK,CAC3B,AAjEP,AAsEM,YAtEM,CAeV,UAAU,CAqDR,aAAa,AAAA,MAAM,CAEjB,CAAC,CAtEP,YAAY,CAeV,UAAU,CAsDR,aAAa,AAAA,MAAM,CACjB,CAAC,AAAC,CACA,KAAK,CF/DA,OAAO,CEgEb,AAxEP,AA6EM,YA7EM,CAeV,UAAU,CA4DR,MAAM,AAAA,MAAM,CAEV,CAAC,CA7EP,YAAY,CAeV,UAAU,CA6DR,MAAM,AAAA,MAAM,CACV,CAAC,AAAC,CACA,KAAK,CFxEF,OAAO,CEyEX,AFhDL,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EE/B1C,AAkFI,YAlFQ,CAeV,UAAU,CAmER,aAAa,AAAC,CAEV,YAAY,CAAE,IAAI,CAErB,CAtFL,AAwFI,YAxFQ,CAeV,UAAU,CAyER,MAAM,AAAC,CACL,eAAe,CAAE,MAAM,CACvB,WAAW,CAAE,MAAM,CACnB,KAAK,CF1FG,OAAO,CE2Ff,YAAY,CAAE,IAAI,CAAC,KAAK,CF1FT,OAAO,CE8FvB,AFjEH,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EE/B1C,AAwFI,YAxFQ,CAeV,UAAU,CAyER,MAAM,AAAC,CAMH,OAAO,CAAE,MAAM,CAElB,CAhGL,AAmGE,YAnGU,CAmGV,UAAU,AAAA,MAAM,CAnGlB,YAAY,CAoGV,UAAU,AAAA,aAAa,AAAC,CACtB,UAAU,CAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CFrGT,OAAO,CEsGxB,ACtGH,AAAA,QAAQ,AAAC,CHqBP,cAAc,CAAE,MAAM,CACtB,eAAe,CAAE,UAAU,CGpB3B,OAAO,CAAE,WAAW,CACpB,KAAK,CAAE,IAAI,CAyFZ,AH7DC,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EG/B1C,AAAA,QAAQ,AAAC,CAKL,KAAK,CAAE,IAAI,CAuFd,CH7DC,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,MAAM,EG/B3C,AAAA,QAAQ,AAAC,CAQL,KAAK,CAAE,IAAI,CAoFd,CA5FD,AAWE,QAXM,CAWN,SAAS,AAAC,CACR,KAAK,CAAE,IAAI,CASZ,AArBH,AAcI,QAdI,CAWN,SAAS,CAGP,MAAM,AAAC,CACL,KAAK,CHdG,OAAO,CGef,SAAS,CAAE,OAAO,CAInB,AHWH,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EG/B1C,AAcI,QAdI,CAWN,SAAS,CAGP,MAAM,AAAC,CAIH,SAAS,CAAE,IAAI,CAElB,CApBL,AAuBE,QAvBM,CAuBN,cAAc,AAAC,CACb,KAAK,CAAE,IAAI,CAmEZ,AA3FH,AA0BI,QA1BI,CAuBN,cAAc,CAGZ,WAAW,AAAC,CHLd,cAAc,CAAE,MAAM,CACtB,eAAe,CAAE,UAAU,CGMvB,KAAK,CAAE,IAAI,CACX,OAAO,CAAE,SAAS,CA6DnB,AH3DH,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EG/B1C,AA0BI,QA1BI,CAuBN,cAAc,CAGZ,WAAW,AAAC,CAKR,OAAO,CAAE,QAAQ,CA2DpB,CA1FL,AAkCM,QAlCE,CAuBN,cAAc,CAGZ,WAAW,CAQT,YAAY,AAAC,CACX,KAAK,CAAE,IAAI,CACX,UAAU,CAAE,IAAI,CAChB,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,MAAM,CACnB,aAAa,CAAE,OAAO,CACtB,QAAQ,CAAE,MAAM,CAChB,WAAW,CAAE,MAAM,CACnB,aAAa,CAAE,QAAQ,CACvB,OAAO,CAAE,OAAO,CAwBjB,AHpCL,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EG/B1C,AAkCM,QAlCE,CAuBN,cAAc,CAGZ,WAAW,CAQT,YAAY,AAAC,CAWT,SAAS,CAAE,MAAM,CACjB,WAAW,CAAE,OAAO,CACpB,aAAa,CAAE,MAAM,CAoBxB,CAnEP,AAkDQ,QAlDA,CAuBN,cAAc,CAGZ,WAAW,CAQT,YAAY,CAgBV,CAAC,AAAC,CACA,KAAK,CH1CF,OAAO,CG2CV,eAAe,CAAE,IAAI,CACrB,MAAM,CAAE,OAAO,CAChB,AAtDT,AAwDQ,QAxDA,CAuBN,cAAc,CAGZ,WAAW,CAQT,YAAY,CAsBV,CAAC,AAAA,QAAQ,AAAC,CACR,KAAK,CH/CM,IAAI,CGgDhB,AA1DT,AA4DQ,QA5DA,CAuBN,cAAc,CAGZ,WAAW,CAQT,YAAY,CA0BV,CAAC,AAAA,MAAM,AAAC,CACN,eAAe,CAAE,SAAS,CAC3B,AA9DT,AAgEQ,QAhEA,CAuBN,cAAc,CAGZ,WAAW,CAQT,YAAY,CA8BV,CAAC,AAAA,MAAM,AAAC,CACN,OAAO,CAAE,GAAG,CAAC,KAAK,CHtDP,IAAI,CGuDhB,AAlET,AAqEM,QArEE,CAuBN,cAAc,CAGZ,WAAW,CA2CT,eAAe,AAAC,CACd,OAAO,CAAE,IAAI,CACb,KAAK,CAAE,IAAI,CAkBZ,AAzFP,AAyEQ,QAzEA,CAuBN,cAAc,CAGZ,WAAW,CA2CT,eAAe,CAIb,YAAY,AAAC,CACX,YAAY,CAAE,MAAM,CACrB,AA3ET,AA6EQ,QA7EA,CAuBN,cAAc,CAGZ,WAAW,CA2CT,eAAe,CAQb,WAAW,AAAC,CACV,SAAS,CAAE,CAAC,CACZ,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,IAAI,CACjB,UAAU,CAAE,IAAI,CAChB,QAAQ,CAAE,MAAM,CAChB,aAAa,CAAE,QAAQ,CAKxB,AHzDP,MAAM,MAAM,MAAM,MAAM,SAAS,EAAE,KAAK,EG/B1C,AA6EQ,QA7EA,CAuBN,cAAc,CAGZ,WAAW,CA2CT,eAAe,CAQb,WAAW,AAAC,CAQR,SAAS,CAAE,IAAI,CACf,WAAW,CAAE,IAAI,CAEpB", 4 | "sources": [ 5 | "../../sass/style.scss", 6 | "../../sass/_base.scss", 7 | "../../sass/_sharedClasses.scss", 8 | "../../sass/_searchEntry.scss", 9 | "../../sass/_searchResults.scss" 10 | ], 11 | "names": [], 12 | "file": "style.min.css" 13 | } --------------------------------------------------------------------------------