diff --git a/react-project/src/App.css b/react-project/src/App.css index f90339d..d0fe425 100644 --- a/react-project/src/App.css +++ b/react-project/src/App.css @@ -1,184 +1,187 @@ .counter { - font-size: 16px; - padding: 5px 10px; - border-radius: 5px; - color: var(--accent); - background: var(--accent-bg); - border: 2px solid transparent; - transition: border-color 0.3s; - margin-bottom: 24px; + font-size: 16px; + padding: 5px 10px; + border-radius: 5px; + color: var(--accent); + background: var(--accent-bg); + border: 2px solid transparent; + transition: border-color 0.3s; + margin-bottom: 24px; - &:hover { - border-color: var(--accent-border); - } - &:focus-visible { - outline: 2px solid var(--accent); - outline-offset: 2px; - } + &:hover { + border-color: var(--accent-border); + } + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; + } } .hero { - position: relative; - - .base, - .framework, - .vite { - inset-inline: 0; - margin: 0 auto; - } - - .base { - width: 170px; position: relative; - z-index: 0; - } - .framework, - .vite { - position: absolute; - } + .base, + .framework, + .vite { + inset-inline: 0; + margin: 0 auto; + } - .framework { - z-index: 1; - top: 34px; - height: 28px; - transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) rotateY(39deg) - scale(1.4); - } + .base { + width: 170px; + position: relative; + z-index: 0; + } - .vite { - z-index: 0; - top: 107px; - height: 26px; - width: auto; - transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) rotateY(39deg) - scale(0.8); - } + .framework, + .vite { + position: absolute; + } + + .framework { + z-index: 1; + top: 34px; + height: 28px; + transform: perspective(2000px) rotateZ(300deg) rotateX(44deg) + rotateY(39deg) scale(1.4); + } + + .vite { + z-index: 0; + top: 107px; + height: 26px; + width: auto; + transform: perspective(2000px) rotateZ(300deg) rotateX(40deg) + rotateY(39deg) scale(0.8); + } } #center { - display: flex; - flex-direction: column; - gap: 25px; - place-content: center; - place-items: center; - flex-grow: 1; + display: flex; + flex-direction: column; + gap: 25px; + place-content: center; + place-items: center; + flex-grow: 1; - @media (max-width: 1024px) { - padding: 32px 20px 24px; - gap: 18px; - } + @media (max-width: 1024px) { + padding: 32px 20px 24px; + gap: 18px; + } } #next-steps { - display: flex; - border-top: 1px solid var(--border); - text-align: left; + display: flex; + border-top: 1px solid var(--border); + text-align: left; - & > div { - flex: 1 1 0; - padding: 32px; - @media (max-width: 1024px) { - padding: 24px 20px; + & > div { + flex: 1 1 0; + padding: 32px; + @media (max-width: 1024px) { + padding: 24px 20px; + } } - } - .icon { - margin-bottom: 16px; - width: 22px; - height: 22px; - } + .icon { + margin-bottom: 16px; + width: 22px; + height: 22px; + } - @media (max-width: 1024px) { - flex-direction: column; - text-align: center; - } + @media (max-width: 1024px) { + flex-direction: column; + text-align: center; + } } #docs { - border-right: 1px solid var(--border); + border-right: 1px solid var(--border); - @media (max-width: 1024px) { - border-right: none; - border-bottom: 1px solid var(--border); - } + @media (max-width: 1024px) { + border-right: none; + border-bottom: 1px solid var(--border); + } } #next-steps ul { - list-style: none; - padding: 0; - display: flex; - gap: 8px; - margin: 32px 0 0; - - .logo { - height: 18px; - } - - a { - color: var(--text-h); - font-size: 16px; - border-radius: 6px; - background: var(--social-bg); + list-style: none; + padding: 0; display: flex; - padding: 6px 12px; - align-items: center; gap: 8px; - text-decoration: none; - transition: box-shadow 0.3s; + margin: 32px 0 0; - &:hover { - box-shadow: var(--shadow); - } - .button-icon { - height: 18px; - width: 18px; - } - } - - @media (max-width: 1024px) { - margin-top: 20px; - flex-wrap: wrap; - justify-content: center; - - li { - flex: 1 1 calc(50% - 8px); + .logo { + height: 18px; } a { - width: 100%; - justify-content: center; - box-sizing: border-box; + color: var(--text-h); + font-size: 16px; + border-radius: 6px; + background: var(--social-bg); + display: flex; + padding: 6px 12px; + align-items: center; + gap: 8px; + text-decoration: none; + transition: box-shadow 0.3s; + + &:hover { + box-shadow: var(--shadow); + } + .button-icon { + height: 18px; + width: 18px; + } + } + + @media (max-width: 1024px) { + margin-top: 20px; + flex-wrap: wrap; + justify-content: center; + + li { + flex: 1 1 calc(50% - 8px); + } + + a { + width: 100%; + justify-content: center; + box-sizing: border-box; + } } - } } -#spacer { - height: 88px; - border-top: 1px solid var(--border); - @media (max-width: 1024px) { +.spacer { height: 48px; - } + @media (max-width: 1024px) { + height: 28px; + } +} + +.smallgap { + height: 20px; } .ticks { - position: relative; - width: 100%; + position: relative; + width: 100%; - &::before, - &::after { - content: ''; - position: absolute; - top: -4.5px; - border: 5px solid transparent; - } + &::before, + &::after { + content: ""; + position: absolute; + top: -4.5px; + border: 5px solid transparent; + } - &::before { - left: 0; - border-left-color: var(--border); - } - &::after { - right: 0; - border-right-color: var(--border); - } + &::before { + left: 0; + border-left-color: var(--border); + } + &::after { + right: 0; + border-right-color: var(--border); + } } diff --git a/react-project/src/App.jsx b/react-project/src/App.jsx index 31045bc..b81b466 100644 --- a/react-project/src/App.jsx +++ b/react-project/src/App.jsx @@ -1,17 +1,46 @@ +import { useState, useEffect } from "react"; +import { Routes, Route } from "react-router-dom"; import Header from "./components/Header"; import Footer from "./components/Footer"; -import { Routes, Route } from "react-router-dom"; import Accueil from "./pages/Accueil"; import Detail from "./pages/Detail"; import "./App.css"; function App() { + const [jeux, setJeux] = useState([]); + const [likes, setLikes] = useState(() => + JSON.parse(localStorage.getItem("likes") || "{}"), + ); + + useEffect(() => { + fetch("/zelda.json") + .then((r) => r.json()) + .then(setJeux); + }, []); + + useEffect(() => { + localStorage.setItem("likes", JSON.stringify(likes)); + }, [likes]); + + function liker(id) { + setLikes((prev) => ({ ...prev, [id]: (prev[id] || 0) + 1 })); + } return ( <>
- } /> - } /> + + } + /> + } />