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 שקלים ותביא איתך עוד ארבעה חברים!"

+ +
+ ) +} \ 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