diff --git a/package.json b/package.json
index 0545857..34f69c3 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"version": "0.0.0",
"type": "module",
"scripts": {
- "dev": "gen-branches && vite",
+ "dev": "npm run gen-branches && vite",
"build": "tsc -b && vite build",
"lint": "eslint .",
"preview": "vite preview",
diff --git a/src/generated/branches.ts b/src/generated/branches.ts
index 7a56c3b..db24192 100644
--- a/src/generated/branches.ts
+++ b/src/generated/branches.ts
@@ -2,12 +2,279 @@
import type { BranchData } from "../types";
const data: BranchData = {
- "generatedAt": "2026-04-26T22:06:42.722Z",
- "currentBranch": "",
+
+ "generatedAt": "2026-05-26T07:39:46.973Z",
+ "currentBranch": "master",
+
+ "generatedAt": "2026-05-26T08:32:45.334Z",
+ "currentBranch": "sola_sola3_Efrat",
+
"mainBranch": "master",
"branches": [
+ {
+ "name": "Eti-NewJoke",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Eti-Orenbach",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Hilla_Arye",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Hilla_Arye_2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Maayan-Bukrits",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "RivkaBarashi",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Shira-Shemesh",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "ShiraShemesh2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Vcomm",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Vcomm_1",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Vcomm_2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Vcomm_3",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "Vcomm_3_noaNew",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "ayala-joke2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "hadar-gerafi",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "hadas-karasenti",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+
+ "name": "johnny-update-3",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "kiter-2-RachelWeinberger",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kitera",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria-1",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria-1-chedvaf",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria-1-efrat",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria-2",
+
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria-2-yehudit",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria-3",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria-3-Ayelet",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria-3-ester",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria-3_RachelPanet",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "kiteria_chedva",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "maayan-vecomm-1-vecomm",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "maayan2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
{
"name": "master",
+
+ "parentBranch": null,
+ "shortHash": "0c10217",
+ "lastCommitMessage": "fix: instructions branch names",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "noa_gabay",
"parentBranch": null,
"shortHash": "",
"lastCommitMessage": "",
@@ -15,157 +282,391 @@ const data: BranchData = {
"isCurrent": false
},
{
- "name": "diamond",
- "parentBranch": "master",
- "shortHash": "234",
- "lastCommitMessage": "diamond",
+ "name": "shani",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
"isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "red",
- "parentBranch": "diamond",
- "shortHash": "23444",
- "lastCommitMessage": "moshe",
+ "name": "shani2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
"isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "miri",
- "parentBranch": "red",
- "shortHash": "23444",
- "lastCommitMessage": "miri",
+
+ "name": "kiteria-2-yehudit",
+
+ "name": "shiraGidi",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
"isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "roch",
- "parentBranch": "red",
- "shortHash": "23444",
- "lastCommitMessage": "roch ",
+
+ "name": "kiteria-3",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+
+ "name": "sola",
+ "parentBranch": null,
+ "shortHash": "0c10217",
+ "lastCommitMessage": "fix: instructions branch names",
+
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "kiteria-3-Ayelet",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+
+ "name": "sola3",
+ "parentBranch": null,
+ "shortHash": "0c10217",
+ "lastCommitMessage": "fix: instructions branch names",
+
"isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "roch",
- "parentBranch": "red",
- "shortHash": "23444",
- "lastCommitMessage": "roch ",
+
+ "name": "kiteria-3-ester",
+
+ "name": "sola4",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "kiteria-3_RachelPanet",
+
+ "name": "sola_sola1",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
"isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "avi nos",
- "parentBranch": "red",
- "shortHash": "23444",
- "lastCommitMessage": "roch ",
- "isMergedIntoParent": true,
+
+ "name": "kiteria_chedva",
+
+ "name": "sola_sola1_carmi",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "shia cjss s",
- "parentBranch": "red",
- "shortHash": "23444",
- "lastCommitMessage": "roch ",
+
+ "name": "maayan-vecomm-1-vecomm",
+
+ "name": "sola_sola1_malka",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
"isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "blue",
- "parentBranch": "diamond",
- "shortHash": "23444",
- "lastCommitMessage": "moshe",
+
+ "name": "maayan2",
+
+ "name": "sola_sola1_sari",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
"isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "red",
- "parentBranch": "diamond",
- "shortHash": "23444",
- "lastCommitMessage": "moshe",
+
+ "name": "master",
+
+ "name": "sola_sola2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "sola_sola2-Tamar",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "sola_sola2_gili",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "sola_sola2_yehudit",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "sola_sola3_Efrat",
+
+ "parentBranch": null,
+ "shortHash": "0c10217",
+ "lastCommitMessage": "fix: instructions branch names",
"isMergedIntoParent": false,
"isCurrent": true
},
{
- "name": "star",
- "parentBranch": "master",
- "shortHash": "23454",
- "lastCommitMessage": "yos",
- "isMergedIntoParent": true,
+
+ "name": "noa_gabay",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "green",
- "parentBranch": "star",
- "shortHash": "23454",
- "lastCommitMessage": "green",
- "isMergedIntoParent": true,
+ "name": "shani",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "tut",
- "parentBranch": "green",
- "shortHash": "23454",
- "lastCommitMessage": "green",
- "isMergedIntoParent": true,
+ "name": "shani2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "brach",
- "parentBranch": "green",
- "shortHash": "23454",
- "lastCommitMessage": "green",
- "isMergedIntoParent": true,
+ "name": "shiraGidi",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "yochi",
- "parentBranch": "green",
- "shortHash": "23454",
- "lastCommitMessage": "green",
- "isMergedIntoParent": true,
+
+
+ "name": "stars",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+
"isCurrent": false
},
{
- "name": "sjn cjknd",
- "parentBranch": "green",
- "shortHash": "23454",
- "lastCommitMessage": "green",
- "isMergedIntoParent": true,
+ "name": "stars-green",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "yellow",
- "parentBranch": "star",
- "shortHash": "23454",
- "lastCommitMessage": "yellow fkgnlfg df",
- "isMergedIntoParent": true,
+ "name": "stars-green-bat-sheva-bloch",
+
"isCurrent": false
},
{
- "name": "hjdf df",
- "parentBranch": "yellow",
- "shortHash": "23454",
- "lastCommitMessage": "yellow fkgnlfg df",
- "isMergedIntoParent": true,
+ "name": "stars-green",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "gfkj dfkn",
- "parentBranch": "yellow",
- "shortHash": "23454",
- "lastCommitMessage": "yellow fkgnlfg df",
- "isMergedIntoParent": true,
+
+ "name": "tamar-levi-branch",
+
+ "name": "stars-green-bat-sheva-bloch",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "team/vcomm/sub/vcomm3/noagabay",
+
+ "name": "stars-green-johnny-update-team1",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "tovi",
+
+ "name": "stars-green-johnny-update-team2",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "vcomm/vcomm-1/ShiraShemesh",
+
+ "name": "stars-green-johnny-update-team3",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "vcomm/vcomm-1/ShiraShemesh2",
+
+ "name": "stars-green-jonny-update-miryam-dahari",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "vcomm/vcomm-1/tova",
+
+ "name": "tamar-levi-branch",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "vcomm/vcomm-1/tovi",
+
+ "name": "team/vcomm/sub/vcomm3/noagabay",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
"isCurrent": false
},
{
- "name": "fldngk df",
- "parentBranch": "yellow",
- "shortHash": "23454",
- "lastCommitMessage": "yellow fkgnlfg df",
- "isMergedIntoParent": true,
+
+ "name": "vcomm/vcomm-1/tovi-joke2",
+
+ "name": "tovi",
+
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+
+ "name": "vcomm/vcomm-1/ShiraShemesh",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
"isCurrent": false
},
+ {
+ "name": "vcomm/vcomm-1/ShiraShemesh2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "vcomm/vcomm-1/tova",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "vcomm/vcomm-1/tovi",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+ "name": "vcomm/vcomm-1/tovi-joke2",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+ },
+ {
+
+ "name": "vcomm/vcomm3/ayalaKlein",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+
+
+ },
+ {
+ "name": "yonny-update-saraRafalowitz",
+ "parentBranch": null,
+ "shortHash": "",
+ "lastCommitMessage": "",
+ "isMergedIntoParent": false,
+ "isCurrent": false
+
+ }
]
};
diff --git a/src/students/Efrat-Madmon/Card.tsx b/src/students/Efrat-Madmon/Card.tsx
new file mode 100644
index 0000000..ee211b7
--- /dev/null
+++ b/src/students/Efrat-Madmon/Card.tsx
@@ -0,0 +1,11 @@
+import styles from "./styles.module.css";
+import {CardProps } from "../../types";
+
+export default function EfratMadmonCard({student,onClick}:CardProps){
+ return (
+
+
{student.jokeTitle}
+
{student.name}
+
+ )
+}
\ No newline at end of file
diff --git a/src/students/Efrat-Madmon/JokePage.tsx b/src/students/Efrat-Madmon/JokePage.tsx
new file mode 100644
index 0000000..93a6750
--- /dev/null
+++ b/src/students/Efrat-Madmon/JokePage.tsx
@@ -0,0 +1,14 @@
+import styles from "./styles.module.css";
+import { PageProps } from "../../types";
+
+export default function EfratMadmonJokePage({onBack}:PageProps){
+ return (
+
+
עשרה שקלים
+
איש אחד הולך ברחוב ורואה אדם יושב על המדרכה ומחזיק שלט: "אנא עזרו לי, חסרים לי 10 שקלים לאוטובוס הביתה".
+
+האיש מרחם עליו, מוציא שטר של 50 שקלים, נותן לו ואומר: "הנה, קח 50 שקלים ותביא איתך עוד ארבעה חברים!"
+
← Back
+
+ )
+}
\ No newline at end of file
diff --git a/src/students/Efrat-Madmon/styles.module.css b/src/students/Efrat-Madmon/styles.module.css
new file mode 100644
index 0000000..ecd0003
--- /dev/null
+++ b/src/students/Efrat-Madmon/styles.module.css
@@ -0,0 +1,89 @@
+.card {
+ background: linear-gradient(160deg, #fff8e7 0%, #ffe0a3 100%);
+ border: 3px solid #f5a623;
+ box-shadow: 0 6px 20px rgba(245, 166, 35, 0.35);
+}
+
+.avatar {
+ font-size: 3rem;
+ margin-bottom: 0.5rem;
+}
+
+.title {
+ font-size: 1.4rem;
+ color: #7a4800;
+ margin-bottom: 0.4rem;
+}
+
+.name {
+ font-size: 1rem;
+ color: #5a3400;
+ margin-bottom: 1rem;
+}
+
+.badge {
+ display: inline-block;
+ background: #f5a623;
+ color: #fff;
+ border-radius: 20px;
+ padding: 0.3rem 1rem;
+ font-size: 0.85rem;
+ font-weight: bold;
+}
+
+.jokePage {
+ background: linear-gradient(135deg, #fff3cd, #ffd77a);
+}
+
+.jokeHeader {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 0.3rem;
+}
+
+.bigEmoji {
+ font-size: 5rem;
+}
+
+.jokeCard {
+ background: #fff;
+ border-radius: 20px;
+ padding: 2rem 2.5rem;
+ max-width: 500px;
+ width: 100%;
+ text-align: center;
+ box-shadow: 0 8px 24px rgba(245, 166, 35, 0.3);
+ color: #5a3400;
+}
+
+.jokeCard h2 {
+ font-size: 1.3rem;
+ margin-bottom: 0.6rem;
+}
+
+.jokeCard p {
+ font-size: 1.4rem;
+ line-height: 1.6;
+ margin-top: 0.8rem;
+}
+
+.backBtn {
+ background: #f5a623;
+ color: #fff;
+ border: none;
+ border-radius: 30px;
+ padding: 0.7rem 2rem;
+ font-size: 1rem;
+ font-weight: bold;
+ cursor: pointer;
+ transition: background 0.2s;
+}
+
+.backBtn:hover {
+ background: #d4891a;
+}
+
+
+
+
diff --git a/src/students/YehuditB/Card.tsx b/src/students/YehuditB/Card.tsx
new file mode 100644
index 0000000..a4d5f59
--- /dev/null
+++ b/src/students/YehuditB/Card.tsx
@@ -0,0 +1,11 @@
+import styles from "./styles.module.css";
+import { CardProps } from "../../types";
+
+export default function YehuditBCard({ student, onClick }: CardProps) {
+ return (
+
+
{student.jokeTitle}
+
{student.name}
+
+ );
+}
\ No newline at end of file
diff --git a/src/students/YehuditB/JokePage.tsx b/src/students/YehuditB/JokePage.tsx
new file mode 100644
index 0000000..4751fe1
--- /dev/null
+++ b/src/students/YehuditB/JokePage.tsx
@@ -0,0 +1,24 @@
+import styles from "./styles.module.css";
+import { PageProps } from "../../types";
+
+export default function YehuditBJokePage({ onBack }: PageProps) {
+ return (
+
+
הטרמפיסט
+
+ {`שוטר עוצר נהג שנוסע במהירות מטורפת בכביש המהיר. הוא ניגש לחלון ומסתכל פנימה – במושב האחורי יושב פינגווין.
+
+ השוטר ההמום אומר: "אדוני, מה זה צריך להיות?! קח את הפינגווין הזה מיד לגן החיות!"
+
+ הנהג נבהל ואומר: "כן, כן, צודק,אני נוסע לשם עכשיו."
+
+ למחרת, אותו שוטר עומד באותו כביש, ושוב רואה את אותו נהג טס במהירות. הוא עוצר אותו, מביט פנימה – והפינגווין עדיין שם במושב האחורי, אבל הפעם הוא מרכיב משקפי שמש.
+
+ השוטר צועק: "לא אמרתי לך לקחת אותו אתמול לגן החיות?!"
+
+ הנהג עונה: "בטח שלקחתי! הוא כל כך נהנה, שהיום אנחנו הולכים לים!"`}
+
+
← חזרה
+
+ );
+}
\ No newline at end of file
diff --git a/src/students/YehuditB/styles.module.css b/src/students/YehuditB/styles.module.css
new file mode 100644
index 0000000..772f7ed
--- /dev/null
+++ b/src/students/YehuditB/styles.module.css
@@ -0,0 +1,113 @@
+/* ==========================================================================
+ 1. עיצוב הכרטיס (סגנון קומיקס חי, בולט ותוסס)
+ ========================================================================== */
+
+.card {
+ background-color: #ffffff;
+ border: 3px solid #1a1a1a; /* מסגרת שחורה עבה בסגנון קומיקס */
+ border-radius: 20px;
+ padding: 24px;
+ margin: 18px;
+ box-shadow: 5px 5px 0px #1a1a1a; /* צל תלת-ממדי קשיח */
+ cursor: pointer;
+ direction: rtl;
+ max-width: 320px;
+ position: relative;
+ background-image: radial-gradient(#e0f2fe 1px, transparent 1px); /* רקע נקודות עדין */
+ background-size: 15px 15px;
+ transition: all 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); /* פתיחה אלסטית ברחיפה */
+}
+
+/* אפקט ריחוף אינטראקטיבי על הכרטיס */
+.card:hover {
+ transform: translate(-4px, -4px);
+ box-shadow: 9px 9px 0px #00a8ff; /* הצל גדל ומשתנה לכחול בהיר */
+ background-color: #f0f9ff;
+}
+
+/* כותרת הבדיחה בתוך הכרטיס */
+.title {
+ font-size: 1.6rem;
+ color: #1a1a1a;
+ margin-top: 5px;
+ margin-bottom: 15px;
+ font-weight: 900;
+ letter-spacing: -0.5px;
+}
+
+/* שם הסטודנט בתוך הכרטיס (מעוצב כמו תג/מדבקה) */
+.name {
+ font-size: 0.85rem;
+ font-weight: 700;
+ color: #ffffff;
+ background-color: #1a1a1a;
+ padding: 6px 14px;
+ border-radius: 50px;
+ display: inline-block;
+ margin: 0;
+}
+
+/* אייקון קטן של ניידת בצד הכרטיס */
+.card::after {
+ content: '🚨';
+ position: absolute;
+ left: 20px;
+ bottom: 18px;
+ font-size: 1.4rem;
+}
+
+/* ==========================================================================
+ 2. עיצוב עמוד הבדיחה (סגנון נקי, מודרני, אלגנטי ונוח לקריאה)
+ ========================================================================== */
+
+.jokePage {
+ background-color: #ffffff; /* רקע לבן נקי וחלק */
+ border: 1px solid #e2e8f0;
+ border-radius: 16px;
+ padding: 40px;
+ max-width: 600px;
+ margin: 40px auto;
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.06); /* צל רך ואלגנטי */
+ direction: rtl;
+ text-align: right;
+ font-family: system-ui, -apple-system, sans-serif;
+}
+
+/* עיצוב מושך לכותרת הבדיחה "הטרמפיסט" בעמוד הראשי */
+.jokePage p:first-child {
+ font-size: 2.1rem;
+ color: #007acc; /* כחול רויאל מושך לעין */
+ font-weight: 800;
+ margin-top: 0;
+ margin-bottom: 25px;
+ padding-bottom: 12px;
+ border-bottom: 2px solid #edf2f7; /* קו מפריד עדין מתחת לכותרת */
+}
+
+/* טקסט גוף הבדיחה - קריא, מרווח ושומר על האנטרים של הליטרל */
+.jokeText {
+ font-size: 1.2rem;
+ line-height: 1.75;
+ color: #2d3748; /* צבע אפור כהה שמקל על הקריאה */
+ white-space: pre-line; /* מאפשר ל-`\n` או לאנטרים בקוד לרדת שורה במסך */
+ margin-bottom: 30px;
+}
+
+/* כפתור החזרה הנקי והמעוצב */
+.jokePage button {
+ background-color: #007acc;
+ color: #ffffff;
+ border: none;
+ padding: 12px 24px;
+ font-size: 1rem;
+ font-weight: 600;
+ border-radius: 8px;
+ cursor: pointer;
+ transition: background-color 0.2s ease, transform 0.1s ease;
+}
+
+/* אפקט קטן במעבר עכבר על כפתור החזרה */
+.jokePage button:hover {
+ background-color: #005999;
+ transform: translateY(-1px);
+}
\ No newline at end of file
diff --git a/src/students/index.ts b/src/students/index.ts
index 5be78e7..e798059 100644
--- a/src/students/index.ts
+++ b/src/students/index.ts
@@ -6,6 +6,16 @@ import DanaDuviJokePage from "./dana-duvi/JokePage";
import ChaniChanzinCard from "./chani-chanzin/Card";
import ChaniChanzinJokePage from "./chani-chanzin/JokePage";
+import YehuditBJokePage from "./YehuditB/JokePage";
+import YehuditBCard from "./YehuditB/Card";
+
+import yaelihainCard from "./yaeli-hain/Card";
+import yaelihainJokePage from "./yaeli-hain/JokePage";
+
+import saralevinCard from "./sara-levin/Card";
+import saralevinJokePage from "./sara-levin/JokePage";
+
+
// ⚠️ סדר הרשימה חייב להיות לפי סדר האלף-בית העברי לפי שם המשפחה.
// כל תלמידה מוסיפה את עצמה במקום הנכון ידנית.
// אסור להשתמש בפונקציית-sort!
@@ -24,6 +34,40 @@ const students: Student[] = [
CardComponent: ChaniChanzinCard,
JokePageComponent: ChaniChanzinJokePage,
},
+ {
+
+ id: "Yehudit",
+ name: "יהודית בירמן",
+ jokeTitle: "לאן הגיע הפינגווין???",
+ CardComponent: YehuditBCard,
+ JokePageComponent: YehuditBJokePage,
+ },
+{
+ id: "yaeli-hain ",
+ name: "יעלי היין",
+ jokeTitle:"באגים",
+ CardComponent: yaelihainCard,
+ JokePageComponent: yaelihainJokePage,
+},
+
+{
+ id: "sara-levin",
+ name: "שרה לוין",
+ jokeTitle: "אמא של מתכנתים",
+ CardComponent: saralevinCard,
+ JokePageComponent: saralevinJokePage,
+
+},
+
+ {
+ id: "yaeli-rosner",
+ name: "יעלי רוזנר",
+ jokeTitle: "מה קרה למרק???",
+ CardComponent: yaelihainCard,
+ JokePageComponent: yaelihainJokePage,
+ }
+
+
];
export default students;
diff --git a/src/students/sara-levin/Card.tsx b/src/students/sara-levin/Card.tsx
new file mode 100644
index 0000000..64a9208
--- /dev/null
+++ b/src/students/sara-levin/Card.tsx
@@ -0,0 +1,11 @@
+import styles from "./styles.module.css";
+import { CardProps } from "../../types";
+
+export default function SaraLevinCard({ student, onClick }: CardProps) {
+ return (
+
+
{student.jokeTitle}
+
{student.name}
+
+ );
+}
\ No newline at end of file
diff --git a/src/students/sara-levin/JokePage.tsx b/src/students/sara-levin/JokePage.tsx
new file mode 100644
index 0000000..9c3fce3
--- /dev/null
+++ b/src/students/sara-levin/JokePage.tsx
@@ -0,0 +1,17 @@
+import styles from "./styles.module.css";
+import { PageProps } from "../../types";
+
+export default function MyJokePage({ onBack }: PageProps) {
+ return (
+
+
+ אמא של מתכנת שלחה אותו לסופר: "תקנה כיכר לחם, ואם יש ביצים – תקנה עשר".
+
+
+ הוא חזר הביתה עם 10 כיכרות לחם.
+ כששאלה אותו למה, הוא ענה: "כי היו ביצים". 🥚🥖
+
+
← חזרה
+
+ );
+}
\ No newline at end of file
diff --git a/src/students/sara-levin/styles.module.css b/src/students/sara-levin/styles.module.css
new file mode 100644
index 0000000..aad104d
--- /dev/null
+++ b/src/students/sara-levin/styles.module.css
@@ -0,0 +1,186 @@
+/* ==========================================================================
+ 1. העיצוב של הכרטיס הכללי (בחוץ) - Cyberpunk Hacker Premium
+ ========================================================================== */
+
+.card {
+ background: linear-gradient(145deg, #12121a 0%, #0a0a0f 100%);
+ border: 2px solid rgba(255, 75, 75, 0.2); /* מסגרת אדומה דקה מובנית */
+ border-radius: 16px;
+
+ padding: 30px 24px;
+ width: 280px;
+ min-height: 190px;
+
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+ box-sizing: border-box;
+
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ gap: 15px;
+ text-align: center;
+
+ /* תנועה חלקה במיוחד בריחוף */
+ transition: all 0.5s cubic-bezier(0.25, 0.8, 0.25, 1);
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.6),
+ inset 0 1px 1px rgba(255, 255, 255, 0.05);
+}
+
+/* אפקט ריחוף (Hover) מטורף לכרטיס */
+.card:hover {
+ transform: translateY(-10px) scale(1.03);
+ border-color: #ff4b4b; /* אדום חי לחלוטין */
+
+ /* זוהר נאון כפול סביב הכרטיס */
+ box-shadow: 0 20px 40px rgba(255, 75, 75, 0.25),
+ 0 0 30px rgba(255, 75, 75, 0.15),
+ inset 0 1px 10px rgba(255, 75, 75, 0.1);
+}
+
+/* כותרת הבדיחה על הכרטיס */
+.title {
+ color: #ff4b4b;
+ font-size: 1.4rem;
+ font-weight: 800;
+ margin: 0;
+ font-family: 'Consolas', 'Fira Code', monospace;
+ letter-spacing: -0.3px;
+ transition: all 0.3s ease;
+ text-shadow: 0 0 10px rgba(255, 75, 75, 0.4);
+}
+
+.card:hover .title {
+ color: #ff7676;
+ text-shadow: 0 0 15px rgba(255, 75, 75, 0.8);
+ letter-spacing: 0.5px; /* אפקט התרחבות קל ומגניב */
+}
+
+/* שם הסטודנטית על הכרטיס */
+.name {
+ color: #8f8fa3;
+ font-size: 0.95rem;
+ margin: 0;
+ font-weight: 600;
+ font-family: 'Segoe UI', system-ui, sans-serif;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+}
+
+/* אלמנט קישוט לכרטיס: סמלי קוד < /> בצדדים */
+.card::after {
+ content: ">";
+ position: absolute;
+ bottom: -10px;
+ left: -5px;
+ font-family: monospace;
+ font-size: 4rem;
+ font-weight: 900;
+ color: rgba(255, 75, 75, 0.02);
+ transform: rotate(-15deg);
+ transition: all 0.5s ease;
+}
+
+.card:hover::after {
+ color: rgba(255, 75, 75, 0.06);
+ transform: rotate(0deg) scale(1.1) translate(10px, -10px);
+}
+
+
+/* ==========================================================================
+ 2. העיצוב של עמוד הבדיחה הפנימי (בתוכו) - מסך קוד נאון
+ ========================================================================== */
+
+.jokePage {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ min-height: 350px;
+ padding: 40px 30px;
+ background: linear-gradient(135deg, #12121a 0%, #050508 100%);
+ border-radius: 24px;
+
+ /* מסגרת אדומה קשיחה תואמת עם זוהר */
+ border: 2px solid #ff4b4b;
+ box-shadow: 0 20px 50px rgba(0, 0, 0, 0.7),
+ 0 0 30px rgba(255, 75, 75, 0.2);
+
+ color: #ffffff;
+ font-family: 'Segoe UI', system-ui, sans-serif;
+ text-align: center;
+ max-width: 550px;
+ margin: 30px auto;
+ position: relative;
+ box-sizing: border-box;
+}
+
+/* כותרת הבדיחה הפנימית (השאלה של אמא) */
+.jokePage p:first-of-type {
+ font-size: 1.45rem;
+ font-weight: 750;
+ line-height: 1.5;
+ color: #ffffff;
+ margin-bottom: 25px;
+ padding: 0 10px;
+ border-bottom: 1px dashed rgba(255, 255, 255, 0.1);
+ padding-bottom: 15px;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+/* גוף הבדיחה הפנימי (התשובה / הפאנץ' המודגש) */
+.jokePage p:nth-of-type(2) {
+ font-size: 1.25rem;
+ font-weight: 700;
+ line-height: 1.7;
+ color: #ff4b4b; /* צבע אדום נאון לפאנץ' */
+ background: rgba(255, 75, 75, 0.04);
+
+ padding: 20px 25px;
+ border-radius: 16px;
+ /* מסגרת אדומה זוהרת בצד ימין המותאמת לעברית */
+ border-right: 5px solid #ff4b4b;
+ border-left: 1px solid rgba(255, 75, 75, 0.1);
+ border-top: 1px solid rgba(255, 75, 75, 0.1);
+ border-bottom: 1px solid rgba(255, 75, 75, 0.1);
+
+ margin-bottom: 35px;
+ width: 100%;
+ box-sizing: border-box;
+ text-shadow: 0 0 8px rgba(255, 75, 75, 0.2);
+}
+
+/* כפתור החזרה המעוצב */
+.jokePage button {
+ background: #ff4b4b;
+ border: none;
+ color: #ffffff;
+ padding: 12px 32px;
+ font-size: 1.05rem;
+ font-weight: 700;
+ border-radius: 50px;
+ cursor: pointer;
+ box-shadow: 0 5px 15px rgba(255, 75, 75, 0.3);
+
+ display: inline-flex;
+ align-items: center;
+ gap: 10px;
+ transition: all 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);
+}
+
+/* אפקט מעבר עכבר (Hover) על הכפתור */
+.jokePage button:hover {
+ background: #ff6b6b;
+ box-shadow: 0 8px 25px rgba(255, 75, 75, 0.6);
+ transform: translateY(-3px);
+ letter-spacing: 0.5px;
+}
+
+/* אפקט לחיצה על כפתור חזרה */
+.jokePage button:active {
+ transform: translateY(1px);
+ box-shadow: 0 3px 10px rgba(255, 75, 75, 0.4);
+}
\ No newline at end of file
diff --git a/src/students/yaeli-hain/Card.tsx b/src/students/yaeli-hain/Card.tsx
new file mode 100644
index 0000000..75a4b6d
--- /dev/null
+++ b/src/students/yaeli-hain/Card.tsx
@@ -0,0 +1,12 @@
+import styles from "./styles.module.css";
+import { CardProps } from "../../types";
+import students from "..";
+
+export default function yaelihainCard({ student, onClick }: CardProps) {
+ return (
+
+
{student.jokeTitle}
+
{student.name}
+
+ );
+}
\ No newline at end of file
diff --git a/src/students/yaeli-hain/JokePage.tsx b/src/students/yaeli-hain/JokePage.tsx
new file mode 100644
index 0000000..b52847a
--- /dev/null
+++ b/src/students/yaeli-hain/JokePage.tsx
@@ -0,0 +1,15 @@
+import styles from "./styles.module.css";
+import { PageProps } from "../../types";
+
+
+export default function yaelihainJokePage({ onBack }: PageProps) {
+ return (
+
+
+
למה מתכנתים אוהבים להשתמש במצב לילה (Dark Mode)?
+
+ כי אור מושך באגים. 😉
+
← חזרה
+
+ );
+}
\ No newline at end of file
diff --git a/src/students/yaeli-hain/styles.module.css b/src/students/yaeli-hain/styles.module.css
new file mode 100644
index 0000000..d28632a
--- /dev/null
+++ b/src/students/yaeli-hain/styles.module.css
@@ -0,0 +1,147 @@
+/* styles.module.css
+ Grid + card styles for a "joke" list. Designed for CSS Modules.
+*/
+
+.jokeGrid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
+ gap: 16px;
+ align-items: start;
+ padding: 12px;
+}
+
+/* Individual joke card */
+.jokeCard {
+ background: linear-gradient(180deg, #ffffff 0%, #fbfbfe 100%);
+ border: 1px solid rgba(20, 24, 40, 0.06);
+ border-radius: 12px;
+ box-shadow: 0 4px 12px rgba(18, 22, 45, 0.06);
+ padding: 14px;
+ display: flex;
+ flex-direction: column;
+ gap: 10px;
+ transition: transform 200ms ease, box-shadow 200ms ease;
+ overflow: hidden;
+ will-change: transform;
+}
+.jokeCard:hover,
+.jokeCard:focus-within {
+ transform: translateY(-6px);
+ box-shadow: 0 10px 30px rgba(18, 22, 45, 0.12);
+}
+
+/* Header: avatar + title/meta */
+.jokeHeader {
+ display: flex;
+ gap: 10px;
+ align-items: center;
+}
+.avatar {
+ width: 40px;
+ height: 40px;
+ flex: 0 0 40px;
+ border-radius: 999px;
+ background: linear-gradient(135deg, #7b61ff, #00c2ff);
+ display: inline-block;
+ box-shadow: inset 0 -6px 18px rgba(0,0,0,0.08);
+}
+
+/* Setup text (the first part of the joke) */
+/* Grid background/color tweak */
+.jokeGrid {
+ background: linear-gradient(180deg, #f5f8ff 0%, #ffffff 100%);
+ border-radius: 14px;
+ padding: 14px;
+ border: 1px solid rgba(99,102,241,0.06);
+ box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset;
+}
+
+/* Setup text (the first part of the joke) */
+.jokeSetup {
+ font-size: 16px; /* גדל */
+ font-weight: 600; /* חזק יותר */
+ color: #0b1220; /* כהה יותר לקריאות */
+ line-height: 1.4;
+ margin: 0;
+ word-break: break-word;
+}
+
+/* Punchline: hidden by default and revealed with a data attribute */
+.jokePunchline {
+ font-size: 16px; /* גדל */
+ font-weight: 600; /* חזק יותר */
+ color: #0b1220;
+ background: rgba(11, 18, 32, 0.02);
+ border-radius: 8px;
+ padding: 10px;
+ margin-top: 6px;
+ max-height: 0;
+ opacity: 0;
+ overflow: hidden;
+ transform-origin: top left;
+ transform: translateY(-6px) scale(0.995);
+ transition: opacity 220ms cubic-bezier(.2,.9,.2,1), max-height 220ms ease, transform 220ms ease;
+}
+
+/* When the card has data-revealed="true" (toggle from JS or via aria-expanded), show the punchline */
+[data-revealed="true"] .jokePunchline {
+ max-height: 400px; /* large enough for typical punchlines */
+ opacity: 1;
+ transform: none;
+}
+
+/* Meta row: tags, date, actions */
+.jokeMeta {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ margin-top: auto;
+ justify-content: space-between;
+ font-size: 13px; /* מעט גדול יותר */
+ color: #50555f; /* כהה יותר לקריאות */
+}
+.tag {
+ background: rgba(99,102,241,0.08);
+ color: #4f46e5;
+ padding: 6px 8px;
+ border-radius: 999px;
+ white-space: nowrap;
+}
+
+/* Simple action button (like reveal or vote) */
+.actionBtn {
+ background: transparent;
+ border: none;
+ color: #374151;
+ padding: 6px 8px;
+ border-radius: 8px;
+ cursor: pointer;
+ transition: background 160ms ease, color 160ms ease;
+ font-weight: 600; /* טיפה יותר ניגודיות לכפתורים */
+}
+.actionBtn:hover,
+.actionBtn:focus {
+ background: rgba(15,23,42,0.04);
+ color: #111827;
+}
+
+/* Accessibility focus outline */
+.jokeCard:focus-within .actionBtn,
+.actionBtn:focus {
+ outline: 3px solid rgba(59,130,246,0.18);
+ outline-offset: 2px;
+}
+
+/* Responsive tweaks */
+@media (max-width: 520px) {
+ .jokeGrid {
+ gap: 10px;
+ padding: 10px;
+ border-radius: 12px;
+ background: linear-gradient(180deg, #fbfdff 0%, #ffffff 100%);
+ }
+ .avatar { width: 36px; height: 36px; }
+ .jokeSetup { font-size: 15px; }
+ .jokePunchline { font-size: 15px; }
+ .jokeMeta { font-size: 12px; }
+}
\ No newline at end of file
diff --git a/src/students/yaeli-rosner/Card.tsx b/src/students/yaeli-rosner/Card.tsx
new file mode 100644
index 0000000..29ba72a
--- /dev/null
+++ b/src/students/yaeli-rosner/Card.tsx
@@ -0,0 +1,18 @@
+import styles from "./styles.module.css";
+import { CardProps } from "../../types";
+
+export default function yaeliCard({ student, onClick }: CardProps) {
+ return (
+
+ {/* אזור האנימציה של המסעדה */}
+
+ 🤵♂️
+ 🍲
+ 🙋♂️
+
+
+
{student.jokeTitle}
+
{student.name}
+
+ );
+}
\ No newline at end of file
diff --git a/src/students/yaeli-rosner/JokePage.tsx b/src/students/yaeli-rosner/JokePage.tsx
new file mode 100644
index 0000000..8d775c2
--- /dev/null
+++ b/src/students/yaeli-rosner/JokePage.tsx
@@ -0,0 +1,37 @@
+import styles from "./styles.module.css";
+import { PageProps } from "../../types";
+
+export default function yaeliJokePage({ onBack }: PageProps) {
+ return (
+
+
🍲 מה קרה למרק?????
+
+
+
אחד מגיע למסעדה, מתיישב ומזמין מרק. אחרי כמה דקות המלצר מביא לו את המנה והולך.
+
+
איך שהמלצר מתרחק, הלקוח קורא לו:
+
הלקוח: "מלצר! מלצר, בוא הנה מהר!"
+
+
המלצר רץ אליו:
+
המלצר: "כן אדוני, מה קרה? המרק קר?"
+
+
הלקוח: "לא, תטעם מהמרק."
+
+
המלצר המופתע: "חסר מלח? חסר פלפל?"
+
+
הלקוח: "פשוט תטעם מהמרק!"
+
+
המלצר: "אדוני, אני לא יכול לטעום מהמנה שלך, אבל אם משהו לא בסדר אני אחליף לך..."
+
+
הלקוח מתעקש: "אני אומר לך, תטעם מהמרק!"
+
+
המלצר נכנע:
+
המלצר: "טוב, בסדר, אני אטעם. רגע... איפה הכף?"
+
+
הלקוח: "אההה! בשעה טובה!" 🥄
+
+
+
← חזרה לתפריט הבדיחות
+
+ );
+}
\ No newline at end of file
diff --git a/src/students/yaeli-rosner/styles.module.css b/src/students/yaeli-rosner/styles.module.css
new file mode 100644
index 0000000..83433c1
--- /dev/null
+++ b/src/students/yaeli-rosner/styles.module.css
@@ -0,0 +1,191 @@
+
+.card {
+ background: linear-gradient(135deg, #fff9e6 0%, #ffe6cc 100%);
+ border: 2px solid #e6b800;
+ border-radius: 16px;
+ padding: 20px;
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.08);
+ cursor: pointer;
+ transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
+ text-align: center;
+ max-width: 300px;
+ margin: 15px;
+ position: relative;
+ overflow: hidden;
+}
+
+.card:hover {
+ transform: translateY(-5px);
+ box-shadow: 0 12px 20px rgba(230, 184, 0, 0.2);
+ border-color: #ff9900;
+}
+
+.title {
+ color: #8a4f00;
+ font-size: 1.4rem;
+ margin-bottom: 8px;
+}
+
+.name {
+ color: #b36b00;
+ font-size: 0.9rem;
+ font-weight: bold;
+}
+
+.restaurantScene {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ background: #fff0db;
+ border-radius: 12px;
+ padding: 10px 20px;
+ margin-bottom: 15px;
+ height: 50px;
+ position: relative;
+ border: 1px dashed #ffd199;
+}
+
+.actor {
+ font-size: 1.8rem;
+ display: inline-block;
+ user-select: none;
+}
+
+.waiter {
+ animation: walkAndServe 4s ease-in-out infinite;
+}
+
+@keyframes walkAndServe {
+ 0%, 100% {
+ transform: translateX(0) scaleX(1);
+ }
+ 40% {
+ transform: translateX(45px) scaleX(1);
+ }
+ 50% {
+ transform: translateX(45px) scaleX(-1);
+ }
+ 90% {
+ transform: translateX(0) scaleX(-1);
+ }
+}
+
+.soup {
+ animation: steamingSoup 1.5s ease-in-out infinite;
+}
+
+@keyframes steamingSoup {
+ 0%, 100% {
+ transform: translateY(0) scale(1);
+ filter: drop-shadow(0 0 0px rgba(255,100,0,0));
+ }
+ 50% {
+ transform: translateY(-4px) scale(1.05);
+ filter: drop-shadow(0 -3px 3px #ffaa44);
+ }
+}
+
+.customer {
+ animation: angryCustomer 2s ease-in-out infinite;
+}
+
+@keyframes angryCustomer {
+ 0%, 100% {
+ transform: rotate(0deg) scale(1);
+ }
+ 25% {
+ transform: rotate(-10deg) translateY(-3px);
+ }
+ 50% {
+ transform: rotate(10deg) scale(1.05);
+ }
+ 75% {
+ transform: rotate(-5deg);
+ }
+}
+
+.jokePage {
+ background-color: #fffdf9;
+ border-radius: 24px;
+ padding: 40px;
+ max-width: 650px;
+ margin: 30px auto;
+ box-shadow: 0 10px 30px rgba(138, 79, 0, 0.1);
+ font-family: system-ui, -apple-system, sans-serif;
+ direction: rtl;
+}
+
+.pageTitle {
+ color: #cc7a00;
+ font-size: 2.2rem;
+ text-align: center;
+ margin-bottom: 30px;
+ border-bottom: 3px dashed #ffe6cc;
+ padding-bottom: 15px;
+}
+
+.storyContainer {
+ background-color: #ffffff;
+ border: 1px solid #f2e6d9;
+ border-radius: 16px;
+ padding: 25px;
+ line-height: 1.8;
+ font-size: 1.15rem;
+ color: #4a3b32;
+ margin-bottom: 30px;
+}
+
+.narration {
+ font-style: italic;
+ color: #7a6657;
+ margin: 12px 0;
+}
+
+.dialogue {
+ margin: 10px 0;
+ padding-right: 15px;
+ border-right: 3px solid #ffd699;
+}
+
+.character {
+ color: #b35900;
+}
+
+.punchline {
+ margin-top: 20px;
+ padding: 15px;
+ background-color: #fff2e6;
+ border-radius: 8px;
+ border-right: 5px solid #ff8000;
+ font-size: 1.3rem;
+ font-weight: bold;
+ animation: popIn 0.5s ease-out;
+}
+
+.backButton {
+ background-color: #cc7a00;
+ color: white;
+ border: none;
+ padding: 12px 24px;
+ font-size: 1rem;
+ font-weight: bold;
+ border-radius: 50px;
+ cursor: pointer;
+ transition: background-color 0.2s, transform 0.1s;
+ display: block;
+ margin: 0 auto;
+}
+
+.backButton:hover {
+ background-color: #b36b00;
+ transform: scale(1.05);
+}
+
+.backButton:active {
+ transform: scale(0.98);
+}
+
+@keyframes popIn {
+ 0% { transform: scale(0.95); opacity: 0; }
+ 100% { transform: scale(1); opacity: 1; }
+}
\ No newline at end of file