diff --git a/TP3.html b/TP3.html index 7cc2faa..0298724 100644 --- a/TP3.html +++ b/TP3.html @@ -1,33 +1,67 @@ + - - - + + + + -
-
- - +
+ + +
+ +
+
+ + +
+ +
- - -
+ + - - + diff --git a/TP4.html b/TP4.html index 2e7de3f..5cd8abe 100644 --- a/TP4.html +++ b/TP4.html @@ -1,16 +1,41 @@ + - - - + + + + -
-
- -

-

- +
+ + +
+ +
+
+ +

+

+ +
-
- + +
+

+ Fait par Djalim Simaila et sa haine de l'HTML, CSS, mais pas du + JavaScript ♥️ +

+

©2025

+
+ diff --git a/TP5.html b/TP5.html index cb7bcaf..778cd23 100644 --- a/TP5.html +++ b/TP5.html @@ -1,27 +1,62 @@ + - - - - + + + + + - -
+
+ + +
+

Grocery list

-
- - - - -
-
-
-
+ +
+ + + + + +
+ +
+ +
+

+ Fait par Djalim Simaila et sa haine de l'HTML, CSS, mais pas du + JavaScript ♥️ +

+

©2025

+
- - - + diff --git a/TP6.html b/TP6.html new file mode 100644 index 0000000..1962cfe --- /dev/null +++ b/TP6.html @@ -0,0 +1,49 @@ + + + + + + + + + +
+ + +
+
+

how many spins do you want to simulate

+ + +
+
+

Current Spin

+

+
+
+
+

+ Fait par Djalim Simaila et sa haine de l'HTML, CSS, mais pas du + JavaScript ♥️ +

+

©2025

+
+ + diff --git a/index.html b/index.html index bdb129b..07423f7 100644 --- a/index.html +++ b/index.html @@ -1,35 +1,75 @@ + - - - + + + + - - -
-

- Qu'est-ce que le Lorem Ipsum? - Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker. - Pourquoi l'utiliser? +

+

+ Qu'est-ce que le Lorem Ipsum? Le Lorem Ipsum est simplement du faux + texte employé dans la composition et la mise en page avant + impression. Le Lorem Ipsum est le faux texte standard de + l'imprimerie depuis les années 1500, quand un imprimeur anonyme + assembla ensemble des morceaux de texte pour réaliser un livre + spécimen de polices de texte. Il n'a pas fait que survivre cinq + siècles, mais s'est aussi adapté à la bureautique informatique, sans + que son contenu n'en soit modifié. Il a été popularisé dans les + années 1960 grâce à la vente de feuilles Letraset contenant des + passages du Lorem Ipsum, et, plus récemment, par son inclusion dans + des applications de mise en page de texte, comme Aldus PageMaker. + Pourquoi l'utiliser? On sait depuis longtemps que travailler avec du + texte lisible et contenant du sens est source de distractions, et + empêche de se concentrer sur la mise en page elle-même. L'avantage + du Lorem Ipsum sur un texte générique comme 'Du texte. Du texte. Du + texte.' est qu'il possède une distribution de lettres plus ou moins + normale, et en tout cas comparable avec celle du français standard. + De nombreuses suites logicielles de mise en page ou éditeurs de + sites Web ont fait du Lorem Ipsum leur faux texte par défaut, et une + recherche pour 'Lorem Ipsum' vous conduira vers de nombreux sites + qui n'en sont encore qu'à leur phase de construction. Plusieurs + versions sont apparues avec le temps, parfois par accident, souvent + intentionnellement (histoire d'y rajouter de petits clins d'oeil, + voire des phrases embarassantes). D'où vient-il? Contrairement à une + opinion répandue, le Lorem Ipsum n'est pas simplement du texte + aléatoire. Il trouve ses racines dans une oeuvre de la littérature + latine classique datant de 45 av. J.-C., le rendant vieux de 2000 + ans. Un professeur du Hampden-Sydney College, en Virginie, s'est + intéressé à un des mots latins les plus obscurs, consectetur, + extrait d'un passage du Lorem Ipsum, et en étudiant tous les usages + de ce mot dans la littérature classique, découvrit la source + incontestable du Lorem Ipsum. Il provient en fait des sections + 1.10.32 et 1.10.33 du "De Finibus Bonorum et Malorum" (Des Suprêmes + Biens et des Suprêmes Maux) de Cicéron. Cet ouvrage, très populaire + pendant la Renaissance, est un traité sur la théorie de l'éthique. + Les premières lignes du Lorem Ipsum, "Lorem ipsum dolor sit + amet...", proviennent de la section +

+
- On sait depuis longtemps que travailler avec du texte lisible et contenant du sens est source de distractions, et empêche de se concentrer sur la mise en page elle-même. L'avantage du Lorem Ipsum sur un texte générique comme 'Du texte. Du texte. Du texte.' est qu'il possède une distribution de lettres plus ou moins normale, et en tout cas comparable avec celle du français standard. De nombreuses suites logicielles de mise en page ou éditeurs de sites Web ont fait du Lorem Ipsum leur faux texte par défaut, et une recherche pour 'Lorem Ipsum' vous conduira vers de nombreux sites qui n'en sont encore qu'à leur phase de construction. Plusieurs versions sont apparues avec le temps, parfois par accident, souvent intentionnellement (histoire d'y rajouter de petits clins d'oeil, voire des phrases embarassantes). - - D'où vient-il? - - Contrairement à une opinion répandue, le Lorem Ipsum n'est pas simplement du texte aléatoire. Il trouve ses racines dans une oeuvre de la littérature latine classique datant de 45 av. J.-C., le rendant vieux de 2000 ans. Un professeur du Hampden-Sydney College, en Virginie, s'est intéressé à un des mots latins les plus obscurs, consectetur, extrait d'un passage du Lorem Ipsum, et en étudiant tous les usages de ce mot dans la littérature classique, découvrit la source incontestable du Lorem Ipsum. Il provient en fait des sections 1.10.32 et 1.10.33 du "De Finibus Bonorum et Malorum" (Des Suprêmes Biens et des Suprêmes Maux) de Cicéron. Cet ouvrage, très populaire pendant la Renaissance, est un traité sur la théorie de l'éthique. Les premières lignes du Lorem Ipsum, "Lorem ipsum dolor sit amet...", proviennent de la section -

-
+
+

+ Fait par Djalim Simaila et sa haine de l'HTML, CSS, mais pas du + JavaScript ♥️ +

+

©2025

+
- diff --git a/projects.html b/projects.html index dfa7aec..08ea81c 100644 --- a/projects.html +++ b/projects.html @@ -1,29 +1,56 @@ + - - - + + + + - - -
-
- placeholder -

-Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker -

-
-
- +
+ + +
+
+

Mes projets

+
+ +
+
+ placeholder +

+ Le Lorem Ipsum est simplement du faux texte employé dans la + composition et la mise en page avant impression. Le Lorem Ipsum + est le faux texte standard de l'imprimerie depuis les années + 1500, quand un imprimeur anonyme assembla ensemble des morceaux + de texte pour réaliser un livre spécimen de polices de texte. Il + n'a pas fait que survivre cinq siècles, mais s'est aussi adapté + à la bureautique informatique, sans que son contenu n'en soit + modifié. Il a été popularisé dans les années 1960 grâce à la + vente de feuilles Letraset contenant des passages du Lorem + Ipsum, et, plus récemment, par son inclusion dans des + applications de mise en page de texte, comme Aldus PageMaker +

+
+
+ +
+

+ Fait par Djalim Simaila et sa haine de l'HTML, CSS, mais pas du + JavaScript ♥️ +

+

©2025

+
+ diff --git a/static/js/TP3.js b/static/js/TP3.js index 10e9a35..2774241 100644 --- a/static/js/TP3.js +++ b/static/js/TP3.js @@ -5,90 +5,135 @@ var guessedNumber; var minimum; var maximum; - -function hide(element){ - element.classList.add("hidden") -} -function unhide(element){ - element.classList.remove("hidden") -} - - -function showText(element, text){ - console.log(element); - console.log(text); +function showText(element, text) { element.textContent = text; } /** - * Represents a book. - * @constructor - * @param {string} title - The title of the book. - * @param {string} author - The author of the book. + * Return a randon between min and max. + * @param {number} min - The minimum value of the random number. + * @param {number} max - The maximum value of the random number. + * @return {number} */ -function randint(min,max) { +function randint(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } -function back(){ +/** + * Returns to the previous state + * @return {void} + */ +function back() { unhide(document.getElementById("game_selection")); hide(document.getElementById("game_one")); hide(document.getElementById("game_two")); + document.removeEventListener("keydown", process_keydown); } - -function setup_game_one(){ - hide(document.getElementById("game_selection")) +/** + * This function shows the first game + * @return {void} + */ +function setup_game_one() { + hide(document.getElementById("game_selection")); unhide(document.getElementById("game_one")); - numberToGuess = randint(1,100); - console.log(numberToGuess) - showText(document.getElementById("message1"),"") + numberToGuess = randint(1, 100); + console.log(numberToGuess); + showText(document.getElementById("message1"), ""); document.getElementById("player_input").value = ""; } -function process_guess(){ - console.log("processing"); - let guessedNumber = parseInt(document.getElementById("player_input").value); +/** + * This function is responsible for processing the player's guess in game one. + * It retrieves the player's input, validates it, and compares it to the number to guess. + * It also provides feedback to the player based on their guess + * @return {void} + */ +function process_guess() { + let player_input = document.getElementById("player_input"); + let guessedNumber = parseInt(player_input.value); + player_input.value = ""; let message_box = document.getElementById("message1"); - if (isNaN(guessedNumber)){ - showText(message_box,"Not a valid number, Try again"); + if (isNaN(guessedNumber)) { + showText(message_box, "Not a valid number, Try again"); } if (guessedNumber > numberToGuess) { - showText(message_box,"Nop, Too high, try again"); + showText(message_box, "Nop, " + guessedNumber + " is too high, try again"); } if (guessedNumber < numberToGuess) { - showText(message_box,"Nop, Too low, try again"); + showText(message_box, "Nop, " + guessedNumber + " is too low, try again"); } if (guessedNumber === numberToGuess) { - showText(message_box,"You found it well played"); + showText(message_box, "You found it well played"); } - console.log("done processing"); -} -/// -function pick_number(smart=false){ - if(smart) return Math.floor((minimum+maximum)/2); - return randint(minimum,maximum); } -function setup_game_two(){ - hide(document.getElementById("game_selection")) +/** + * This function tries to predict the player's number + * @param {bool} smart - use dichotomic search for guessing + * @returns {number} - the predicted number + */ +function pick_number(smart = false) { + if (smart) return Math.floor((minimum + maximum) / 2); + return randint(minimum, maximum); +} + +/** + * Processes the keydown events for game two to handle player input (lower, greater, found, retry). + * @param {KeyboardEvent} event - The keyboard event object. + * @return {void} + */ +function process_keydown(event) { + switch (event.key) { + case "L": + case "l": + lower(); + break; + case "G": + case "g": + greater(); + break; + case "F": + case "f": + found(); + break; + case "R": + case "r": + document.removeEventListener("keydown", process_keydown); + setup_game_two(); + break; + } +} + +function setup_game_two() { + hide(document.getElementById("game_selection")); unhide(document.getElementById("game_two")); minimum = 1; maximum = 100; - guessedNumber = pick_number() - showText(document.getElementById("message2"),"is it "+guessedNumber+" ?") + guessedNumber = pick_number(); + showText( + document.getElementById("message2"), + "is it " + guessedNumber + " ?", + ); + document.addEventListener("keydown", process_keydown); } -function lower(){ +function lower() { maximum = guessedNumber - 1; - guessedNumber = pick_number() - showText(document.getElementById("message2"),"is it "+guessedNumber+" ?") + guessedNumber = pick_number(); + showText( + document.getElementById("message2"), + "is it " + guessedNumber + " ?", + ); } -function greater(){ +function greater() { minimum = guessedNumber + 1; - guessedNumber = pick_number() - showText(document.getElementById("message2"),"is it "+guessedNumber+" ?") + guessedNumber = pick_number(); + showText( + document.getElementById("message2"), + "is it " + guessedNumber + " ?", + ); } -function found(){ - showText(document.getElementById("message2"),"yay i found it") +function found() { + showText(document.getElementById("message2"), "yay i found it"); } diff --git a/static/js/TP5.js b/static/js/TP5.js index e08876e..c173dae 100644 --- a/static/js/TP5.js +++ b/static/js/TP5.js @@ -1,15 +1,25 @@ -var grocery_array = [] +var grocery_array = []; -function clear_input(){ - document.getElementById("new_item_input").value = ""; +/* + * This function will return a random number + * param min : minimum limit of the range (inclusive) + * param max: maximum limit of the range (inclusive). + * returns : Random integer within specified limits. + */ +function randint(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; } -function addItemToList(item){ - grocery_array.push(item) - localStorage.setItem("grocery_list",JSON.stringify(grocery_array)) +function clear_input() { + document.getElementById("new_item_input").value = ""; +} + +function addItemToList(item) { + grocery_array.push(item); + localStorage.setItem("grocery_list", JSON.stringify(grocery_array)); let item_box = document.createElement("div"); - item_box.classList.add("grocery_item") + item_box.classList.add("grocery_item"); let item_name_container = document.createElement("span"); item_name_container.classList.add("grocery_item_name"); @@ -17,67 +27,63 @@ function addItemToList(item){ item_name_container.textContent = item; let item_button = document.createElement("button"); - item_button.innerHTML = "" - item_button.onclick = (ev) =>{ - let parent_div = ev.target.parentElement.closest('div'); + item_button.innerHTML = ""; + item_button.onclick = (ev) => { + let parent_div = ev.target.parentElement.closest("div"); let item_name; var children = parent_div.childNodes; - for (var i=0; i < children.length; i++) { + for (var i = 0; i < children.length; i++) { console.log(children[i]); if (children[i].tagName == "SPAN") { item_name = children[i].textContent; break; } } - grocery_array = grocery_array.filter((value) => value != item_name ); - localStorage.setItem("grocery_list",JSON.stringify(grocery_array)) + grocery_array = grocery_array.filter((value) => value != item_name); + localStorage.setItem("grocery_list", JSON.stringify(grocery_array)); parent_div.remove(); - } + }; item_box.appendChild(item_button); item_box.appendChild(item_name_container); - document.getElementById("grocery_list").appendChild(item_box); -} +} - -function addNewItemToList(){ - let input = document.getElementById("new_item_input") +function addNewItemToList() { + let input = document.getElementById("new_item_input"); if (input.value === "") return; let item = input.value; input.value = ""; // quantity - let quantity = document.getElementById("new_item_quantity").value + let quantity = document.getElementById("new_item_quantity").value; // unit let e = document.getElementById("new_item_unit"); let text = e.options[e.selectedIndex].text; - switch(text){ - case 'L': - item = ""+ quantity + (quantity == 1 ? " liter of ":" liters of ") + item; + switch (text) { + case "L": + item = + "" + quantity + (quantity == 1 ? " liter of " : " liters of ") + item; break; - case 'KG': - item = ""+ quantity + (quantity == 1 ? " kilogram of":" kilograms of ") + item; + case "KG": + item = + "" + + quantity + + (quantity == 1 ? " kilogram of" : " kilograms of ") + + item; break; default: item = "" + quantity + " " + item; } - addItemToList(item) + addItemToList(item); } - -function restoreList(){ - JSON.parse(localStorage.getItem("grocery_list")).forEach(element => { +function restoreList() { + JSON.parse(localStorage.getItem("grocery_list")).forEach((element) => { addItemToList(element); }); } - -document.addEventListener('keydown', function(event) { - if (event.key === 'Enter') { - addNewItemToList(); - } -}); diff --git a/static/js/TP6.js b/static/js/TP6.js new file mode 100644 index 0000000..6b4b604 --- /dev/null +++ b/static/js/TP6.js @@ -0,0 +1,164 @@ +/* + * TP6: Roulette + * Author: SIMAILA Djalim + * Date: 2025-01-27 + * Description: A roulette game + * Version: 1.0 + */ + +/* + * The amount of money of a bet + * @type {Number} + * @example 1 + */ +var bet = 1; + +var currentSpin = 0; + +/* + * Array of the n next spins + * @type {Array} + * @example [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + */ +var spinArray; + +var potentialQualifyingNumbers = []; + +/* + * Object containing the qualifying numbers , and the remaining spins in which they are played + * @type {Object} + * @example {10: 3, 15: 5, 20: 1} + */ +var qualifyingNumbers = {}; + +/** + * Array containing the wining numbers , and the winning amount + * @type {Array} + * @example [[10, 5], [15, 10], [20, 15]] + */ +var winingNumbers = []; + +/** + * Array containing the qualifying number that didn't win + * @type {Array} + * @example [10,15,20] + */ +var losingNumbers = []; + +var spinInterval; + +function lowerBound() { + return currentSpin - 30 < 0 ? 0 : currentSpin - 30; +} + +/* + * Function to generate a random array of numbers + * @param len: length of the number array + * @returns {Array} numberArray + */ +function generate_random_array(len = 30) { + let numberArray = []; + for (let i = 0; i < len; i++) + numberArray.push(Math.floor(Math.random() * 37)); + return numberArray; +} + +/* + * Function to check if a number is qualifying + * @param num: number to check + * @returns {Boolean} true if the number is qualifying, false otherwise + */ +function qualifyingPreprocess() { + let currentNumber = spinArray[currentSpin]; + if (!spinArray.slice(lowerBound(), currentSpin).includes(currentNumber)) { + potentialQualifyingNumbers.push({ + number: currentNumber, + firstOccurence: currentSpin, + secondOccurence: null, + thirdOccurence: null, + }); + } + potentialQualifyingNumbers = potentialQualifyingNumbers.filter( + (potientialNumber) => currentSpin - potientialNumber.firstOccurence < 18, + ); + + let qualifiedIndexes = new Set(); + + potentialQualifyingNumbers.forEach((potentialNumber, index) => { + if (potentialNumber.number == currentNumber) { + if (potentialNumber.firstOccurence == currentSpin) return; + + if (potentialNumber.secondOccurence == null) + potentialNumber.secondOccurence = currentSpin; + else if (potentialNumber.thirdOccurence == null) + potentialNumber.thirdOccurence = currentSpin; + } + if ( + potentialNumber.secondOccurence != null && + potentialNumber.thirdOccurence != null + ) { + let space1 = + potentialNumber.secondOccurence - potentialNumber.firstOccurence; + let space2 = + potentialNumber.thirdOccurence - potentialNumber.secondOccurence; + if (Math.abs(space2 - space1) <= 6) { + if ( + spinArray[currentSpin] !== spinArray[currentSpin - 1] && + spinArray[currentSpin] !== spinArray[currentSpin - 2] + ) { + qualifyingNumbers[potentialNumber.number] = 9; + qualifiedIndexes.add(index); + } + } + } + }); + + potentialQualifyingNumbers = potentialQualifyingNumbers.filter( + (_, index) => !qualifiedIndexes.has(index), + ); +} + +function setupGame() { + spinArray = generate_random_array( + document.getElementById("maxSpinInput").value, + ); + document.getElementById("setupGame").classList.add("hidden"); + spinInterval = setInterval(() => processSpin(), 100); +} + +function processSpin() { + // Check if the number is qualifying + qualifyingPreprocess(); + + for (let number in qualifyingNumbers) { + // if the number is a wining number + if (number == currentSpin) { + // Add the wining number to the wining numbers Array + winingNumbers.push([ + number, + 36 * bet - (9 - qualifyingNumbers[number]), // loss + ]); + } + qualifyingNumbers[number] -= 1; + if (qualifyingNumbers[number] == 0) { + losingNumbers.push(number); + delete qualifyingNumbers[number]; + } + } + console.log(potentialQualifyingNumbers); + console.log(qualifyingNumbers); + console.log(winingNumbers); + console.log(losingNumbers); + currentSpin += 1; + showLastSpins(); +} + +function showLastSpins() { + document.getElementById("lastSpins").replaceChildren(); + spinArray.slice(lowerBound(), currentSpin).forEach((number) => { + let numberDiv = document.createElement("div"); + numberDiv.classList.add("spinNumber"); + numberDiv.textContent = number; + document.getElementById("lastSpins").appendChild(numberDiv); + }); +} diff --git a/static/js/utils.js b/static/js/utils.js new file mode 100644 index 0000000..65158f4 --- /dev/null +++ b/static/js/utils.js @@ -0,0 +1,15 @@ +function hide(element) { + element.classList.add("hidden"); +} +function unhide(element) { + element.classList.remove("hidden"); +} + +function toggle_all_header_links() { + const headerLinks = document.querySelector("header > .links"); + const button_link = document.querySelector("header > button"); + headerLinks.classList.toggle("display_links"); + button_link.textContent = headerLinks.classList.contains("display_links") + ? "▲" + : "▼"; +} diff --git a/static/style.css b/static/style.css index 28268af..c26bdb4 100644 --- a/static/style.css +++ b/static/style.css @@ -1,133 +1,182 @@ @font-face { - font-family: JetBrainsMono; - src: url(assets/font/JetBrainsMono-Regular.woff2) format(woff2); + font-family: JetBrainsMono; + src: url(assets/font/JetBrainsMono-Regular.woff2) format(woff2); } -* { - font-family: JetBrainsMono; +* { + font-family: JetBrainsMono; + --color-text: #f8f8f2; + --color-background: #282a36; + --color-current-line: #44475a; + --color-purple: #bd93f9; } body { - color:#F8F8F2; - display: flex; - justify-content: center; - background-color: #282936; - flex-direction: column; + color: var(--color-text); + display: flex; + justify-content: center; + align-items: center; + background-color: var(--color-background); + flex-direction: column; } -#main{ - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; +header { + display: flex; + background-color: var(--color-current-line); + border-radius: 20px; + padding: 10px; + overflow: hidden; + & > .links { + display: flex; + justify-content: space-between; + } } -#pokemon_team{ - display: flex; - justify-content: center; - align-items: center; - flex-direction: column; +@media screen and (min-width: 740px) { + header > .links { + flex-direction: row; + gap: 30px; + } + #display_header_links { + display: none; + } +} +@media screen and (max-width: 739px) { + header { + gap: 10px; + align-items: baseline; + & > .links { + flex-direction: column; + gap: 10px; + overlay: hidden; + transition: max-height 300ms ease-out; + max-height: 41px; + &.display_links { + max-height: 270px; + } + } + & > button { + padding: 8px 12px; + cursor: pointer; + } + } } -#grocery_list { - display: flex; - flex-direction: column; +.header_button { + color: black; + padding: 10px 8px; + border-radius: 10px; + background-color: var(--color-purple); + text-decoration: none !important; + text-align: center; } - -#header { - display: flex; - flex-direction: column; - gap: 1rem; - justify-content: center; +.header_button:hover { + background-color: var(--color-purple); } #title { - padding : 1rem; + padding: 1rem; } -#menubar { - background-color: #44475A; - border-radius: 20px; - padding: 10px; - display: flex; - gap: 50px; - justify-content: center; +footer { + display: flex; + flex-direction: row; + gap: 2rem; + justify-content: space-evenly; + background-color: var(--color-current-line); + border-radius: 20px; + padding: 4px 20px; + margin-top: 20px; +} + +#main { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + height: 100vh; +} + +#pokemon_team { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +#grocery_list { + display: flex; + flex-direction: column; } button { - color: black; - padding : 10px; - border-radius: 10px; - background-color: #BD93F9; - border: none; - text-decoration: none !important; + color: black; + padding: 10px; + border-radius: 10px; + background-color: var(--color-purple); + border: none; + text-decoration: none !important; } button:hover { - background-color: #BD93F966; + background-color: var(--color-purple); } -.title_button { - color: black; - padding : 10px; - border-radius: 10px; - background-color: #BD93F9; - text-decoration: none !important; -} - - -.title_button:hover { - background-color: #BD93F966; -} - - #content { - background-color : #44475A; - padding: 10px; - border-radius: 20px; - margin-left: 10rem; - margin-right: 10rem; + background-color: var(--color-current-line); + padding: 10px; + border-radius: 20px; + margin-left: 10rem; + margin-right: 10rem; } - .project_box { - flex-direction: row; - display: flex; - gap: 1rem; + flex-direction: row; + display: flex; + gap: 1rem; } .project_box_thumbnail { - width: 20rem; - height: 20rem; + width: 20rem; + height: 20rem; } .hidden { - display: none; + display: none; } input { - color: #F8F8F2; - border-radius: 30px; - border: none; - padding: 10px; - background-color: #44475A; - margin: 10px; + color: var(--color-text); + border-radius: 30px; + border: none; + padding: 10px; + background-color: var(--color-current-line); + margin: 10px; } -#pokemon_frame{ - width: 200px; - height: 200px; +select { + color: var(--color-text); + border-radius: 30px; + border: none; + padding: 10px; + background-color: var(--color-current-line); + margin: 10px; } -.grocery_item{ - margin: 15px; +#pokemon_frame { + width: 200px; + height: 200px; } -.grocery_item_name{ - padding: 10px; - background-color:#44475A; - border-color: #BD93F9; - border-radius: 10px; - margin: 10px; +.grocery_item { + margin: 15px; +} + +.grocery_item_name { + padding: 10px; + background-color: var(--color-current-line); + border-color: var(--color-purple); + border-radius: 10px; + margin: 10px; }