diff --git a/package.json b/package.json index 0545857..3dbe3c7 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "type": "module", "scripts": { "dev": "gen-branches && vite", + "dev": "node scripts/gen-branches.cjs && vite", "build": "tsc -b && vite build", "lint": "eslint .", "preview": "vite preview", @@ -28,4 +29,4 @@ "typescript-eslint": "^8.11.0", "vite": "^5.4.10" } -} +} \ No newline at end of file diff --git a/src/generated/branches.ts b/src/generated/branches.ts index 7a56c3b..2cf7652 100644 --- a/src/generated/branches.ts +++ b/src/generated/branches.ts @@ -2,170 +2,682 @@ import type { BranchData } from "../types"; const data: BranchData = { - "generatedAt": "2026-04-26T22:06:42.722Z", - "currentBranch": "", + "generatedAt": "2026-05-26T12:09:11.294Z", + "currentBranch": "stars-green-johnny-update-team1-bracha", "mainBranch": "master", "branches": [ + { + "name": "ChavivaSeiff", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "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": "MaayanBaba", + "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": "ayala-oshri-stars-green-johnny-update-team1", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "ayala-samson", + "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": "johnny-update-team3-Eti_Munk", + "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": "mayanSJoke", + "parentBranch": null, "shortHash": "", "lastCommitMessage": "", "isMergedIntoParent": false, "isCurrent": false }, { - "name": "diamond", - "parentBranch": "master", - "shortHash": "234", - "lastCommitMessage": "diamond", + "name": "noa_gabay", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", "isMergedIntoParent": false, "isCurrent": false }, { - "name": "red", - "parentBranch": "diamond", - "shortHash": "23444", - "lastCommitMessage": "moshe", + "name": "shani", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", "isMergedIntoParent": false, "isCurrent": false }, { - "name": "miri", - "parentBranch": "red", - "shortHash": "23444", - "lastCommitMessage": "miri", + "name": "shani2", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", "isMergedIntoParent": false, "isCurrent": false }, { - "name": "roch", - "parentBranch": "red", - "shortHash": "23444", - "lastCommitMessage": "roch ", + "name": "shiraGidi", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", "isMergedIntoParent": false, "isCurrent": false }, { - "name": "roch", - "parentBranch": "red", - "shortHash": "23444", - "lastCommitMessage": "roch ", + "name": "sola", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", "isMergedIntoParent": false, "isCurrent": false }, { - "name": "avi nos", - "parentBranch": "red", - "shortHash": "23444", - "lastCommitMessage": "roch ", - "isMergedIntoParent": true, + "name": "sola3", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, "isCurrent": false }, { - "name": "shia cjss s", - "parentBranch": "red", - "shortHash": "23444", - "lastCommitMessage": "roch ", + "name": "sola4", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", "isMergedIntoParent": false, "isCurrent": false }, { - "name": "blue", - "parentBranch": "diamond", - "shortHash": "23444", - "lastCommitMessage": "moshe", + "name": "sola_sola1", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", "isMergedIntoParent": false, "isCurrent": false }, { - "name": "red", - "parentBranch": "diamond", - "shortHash": "23444", - "lastCommitMessage": "moshe", + "name": "sola_sola1_carmi", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", "isMergedIntoParent": false, - "isCurrent": true + "isCurrent": false + }, + { + "name": "sola_sola1_malka", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "sola_sola1_ruti", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "sola_sola1_sari", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "sola_sola1_shifraZ", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "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_hadas", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "sola_sola2_tamarD", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "sola_sola2_yehudit", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "sola_sola3_Efrat_Madmon", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "sola_sola3_saralevin", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "sola_sola3_yaeli", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "stars", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "stars-green", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "stars-green-bat-sheva-bloch", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "stars-green-johnny-update-team1", + "parentBranch": null, + "shortHash": "0c10217", + "lastCommitMessage": "fix: instructions branch names", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "stars-green-johnny-update-team1-Tamar", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "stars-green-johnny-update-team1-Yael", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false }, { - "name": "star", + "name": "stars-green-johnny-update-team1-bracha", "parentBranch": "master", - "shortHash": "23454", - "lastCommitMessage": "yos", - "isMergedIntoParent": true, + "shortHash": "f0c8976", + "lastCommitMessage": "fix: resolve sync syntax error and update student list", + "isMergedIntoParent": false, + "isCurrent": true + }, + { + "name": "stars-green-johnny-update-team2", + "parentBranch": null, + "shortHash": "0c10217", + "lastCommitMessage": "fix: instructions branch names", + "isMergedIntoParent": false, "isCurrent": false }, { - "name": "green", - "parentBranch": "star", - "shortHash": "23454", - "lastCommitMessage": "green", - "isMergedIntoParent": true, + "name": "stars-green-johnny-update-team2-LitalShamanov", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, "isCurrent": false }, { - "name": "tut", - "parentBranch": "green", - "shortHash": "23454", - "lastCommitMessage": "green", - "isMergedIntoParent": true, + "name": "stars-green-johnny-update-team3", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, "isCurrent": false }, { - "name": "brach", - "parentBranch": "green", - "shortHash": "23454", - "lastCommitMessage": "green", - "isMergedIntoParent": true, + "name": "stars-green-johnny-update-team3-Zehavi", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, "isCurrent": false }, { - "name": "yochi", - "parentBranch": "green", - "shortHash": "23454", - "lastCommitMessage": "green", - "isMergedIntoParent": true, + "name": "stars-green-johnny-update-team3-chanaMoshayev", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, "isCurrent": false }, { - "name": "sjn cjknd", - "parentBranch": "green", - "shortHash": "23454", - "lastCommitMessage": "green", - "isMergedIntoParent": true, + "name": "stars-green-jonny-update-miryam-dahari", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, "isCurrent": false }, { - "name": "yellow", - "parentBranch": "star", - "shortHash": "23454", - "lastCommitMessage": "yellow fkgnlfg df", - "isMergedIntoParent": true, + "name": "tamar-levi-branch", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "team/vcomm/sub/vcomm3/noagabay", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "tovi", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, "isCurrent": false }, { - "name": "hjdf df", - "parentBranch": "yellow", - "shortHash": "23454", - "lastCommitMessage": "yellow fkgnlfg df", - "isMergedIntoParent": true, + "name": "vcomm/vcomm-1/ShiraShemesh", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, "isCurrent": false }, { - "name": "gfkj dfkn", - "parentBranch": "yellow", - "shortHash": "23454", - "lastCommitMessage": "yellow fkgnlfg df", - "isMergedIntoParent": true, + "name": "vcomm/vcomm-1/ShiraShemesh2", + "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/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", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + }, + { + "name": "yonny-update-saraRafalowitz", + "parentBranch": null, + "shortHash": "", + "lastCommitMessage": "", + "isMergedIntoParent": false, + "isCurrent": false + } ] }; diff --git a/src/index.css b/src/index.css index 031d4ad..272934c 100644 --- a/src/index.css +++ b/src/index.css @@ -184,7 +184,7 @@ body { display: flex; flex-direction: column; gap: 0; - margin: 1rem 0; + margin: 1rem 0; } .branch-level { diff --git a/src/students/ayala oshri/Card.tsx b/src/students/ayala oshri/Card.tsx new file mode 100644 index 0000000..620fe63 --- /dev/null +++ b/src/students/ayala oshri/Card.tsx @@ -0,0 +1,24 @@ +import styles from "./styles.module.css"; +import { CardProps } from "../../types"; + +export default function MyCard({ student, onClick }: CardProps) { + return ( +
+ {/* Decorative bubbles */} + + + + + + {/* Duck icon */} +
🛁
+ +

{student.jokeTitle}

+

{student.name}

+ +
+ לחץ לצחוק 🫧 +
+
+ ); +} \ No newline at end of file diff --git a/src/students/ayala oshri/JokePage.tsx b/src/students/ayala oshri/JokePage.tsx new file mode 100644 index 0000000..79428d8 --- /dev/null +++ b/src/students/ayala oshri/JokePage.tsx @@ -0,0 +1,59 @@ +import styles from "./styles.module.css"; +import { PageProps } from "../../types"; + +export default function MyJokePage({ onBack }: PageProps) { + return ( +
+ {/* Animated bubbles background */} +
+ {[...Array(12)].map((_, i) => ( + + ))} +
+ + {/* Decorative top row */} +
+ 🐥 + 🛁 + 🫧 + 🚿 + 🐥 +
+ + {/* Joke card */} +
+
+ ? +

הבדיחה

+
+ +
+

למה למתכנתים לוקח הרבה זמן להתקלח?

+
+ +
+ 🫧 +
+ 🫧 +
+ +
+

+ כי על השמפו כתוב:
+ לחפוף, לשטוף, ולחזור על הפעולה. +

+
+
+ + +
+ ); +} diff --git a/src/students/ayala oshri/styles.module.css b/src/students/ayala oshri/styles.module.css new file mode 100644 index 0000000..ae96202 --- /dev/null +++ b/src/students/ayala oshri/styles.module.css @@ -0,0 +1,411 @@ +/* ================================================ + 🛁 BATH TIME KITSCH THEME + Bright, bubbly, playful – because code needs baths too + ================================================ */ + +@import url('https://fonts.googleapis.com/css2?family=Fredoka+One&family=Varela+Round&display=swap'); + +/* ── CSS Variables ─────────────────────────── */ +:root { + --bath-blue: #b3e5fc; + --bath-teal: #4dd0e1; + --bath-sky: #e1f5fe; + --foam-white: #ffffff; + --duck-yellow: #fff176; + --duck-orange: #ffb300; + --bubble-pink: #f8bbd0; + --bubble-lavender: #e1bee7; + --soft-mint: #c8e6c9; + --text-deep: #1a3a4a; + --text-mid: #2d6a8a; + --shadow-blue: rgba(77, 208, 225, 0.35); + --radius-card: 28px; + --radius-pill: 50px; +} + +/* ── CARD ──────────────────────────────────── */ +.card { + position: relative; + overflow: hidden; + direction: rtl; + font-family: 'Fredoka One', 'Varela Round', sans-serif; + + /* Bath-tile checkerboard feel via gradient mesh */ + background: + radial-gradient(ellipse at 20% 20%, #e0f7fa 0%, transparent 55%), + radial-gradient(ellipse at 80% 80%, #fce4ec 0%, transparent 55%), + radial-gradient(ellipse at 80% 20%, #f3e5f5 0%, transparent 50%), + radial-gradient(ellipse at 20% 80%, #e8f5e9 0%, transparent 50%), + #dff6fd; + + border: 3px solid var(--bath-teal); + border-radius: var(--radius-card); + padding: 32px 28px 24px; + min-width: 240px; + max-width: 320px; + cursor: pointer; + box-shadow: + 0 8px 32px var(--shadow-blue), + 0 2px 8px rgba(0,0,0,0.08), + inset 0 1px 0 rgba(255,255,255,0.9); + + transition: transform 0.22s cubic-bezier(.34,1.56,.64,1), + box-shadow 0.22s ease; +} + +/* Wet-glass shimmer overlay */ +.card::before { + content: ''; + position: absolute; + inset: 0; + background: linear-gradient( + 135deg, + rgba(255,255,255,0.55) 0%, + rgba(255,255,255,0.05) 50%, + rgba(180,230,250,0.15) 100% + ); + pointer-events: none; + border-radius: var(--radius-card); +} + +/* Wavy bottom border */ +.card::after { + content: ''; + position: absolute; + bottom: 0; left: 0; right: 0; + height: 48px; + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 48'%3E%3Cpath d='M0 24 Q50 0 100 24 T200 24 T300 24 T400 24 V48 H0Z' fill='%234dd0e1' opacity='0.18'/%3E%3C/svg%3E") repeat-x bottom; + pointer-events: none; +} + +.card:hover { + transform: translateY(-6px) scale(1.02); + box-shadow: + 0 18px 48px var(--shadow-blue), + 0 4px 12px rgba(0,0,0,0.1), + inset 0 1px 0 rgba(255,255,255,0.9); +} + +.card:active { + transform: translateY(-2px) scale(0.99); +} + +/* ── Duck icon ─────────────────────────────── */ +.duckIcon { + font-size: 2.6rem; + text-align: center; + margin-bottom: 10px; + filter: drop-shadow(0 3px 6px rgba(0,0,0,0.12)); + animation: wobble 2.8s ease-in-out infinite; +} + +@keyframes wobble { + 0%, 100% { transform: rotate(-5deg) scale(1); } + 50% { transform: rotate(5deg) scale(1.07); } +} + +/* ── Card Title ────────────────────────────── */ +.title { + font-family: 'Fredoka One', sans-serif; + font-size: 1.4rem; + color: var(--text-deep); + text-align: center; + margin: 0 0 10px; + line-height: 1.3; + text-shadow: 0 2px 0 rgba(255,255,255,0.8); + letter-spacing: 0.02em; +} + +/* ── Student Name ──────────────────────────── */ +.name { + font-family: 'Varela Round', sans-serif; + font-size: 0.95rem; + color: var(--text-mid); + text-align: center; + margin: 0; + background: rgba(255,255,255,0.65); + padding: 4px 16px; + border-radius: var(--radius-pill); + display: inline-block; + width: 100%; + box-sizing: border-box; + backdrop-filter: blur(4px); +} + +/* ── Card footer ───────────────────────────── */ +.cardFooter { + margin-top: 16px; + text-align: center; +} + +.clickHint { + font-family: 'Varela Round', sans-serif; + font-size: 0.8rem; + color: var(--bath-teal); + background: rgba(255,255,255,0.7); + padding: 3px 14px; + border-radius: var(--radius-pill); + border: 1.5px dashed var(--bath-teal); + animation: pulse 2s ease-in-out infinite; +} + +@keyframes pulse { + 0%, 100% { opacity: 1; } + 50% { opacity: 0.55; } +} + +/* ── Bubble decorations on card ────────────── */ +.bubble { + position: absolute; + border-radius: 50%; + background: radial-gradient(circle at 35% 35%, rgba(255,255,255,0.85), rgba(180,235,255,0.3)); + border: 1.5px solid rgba(100,210,240,0.5); + pointer-events: none; + animation: floatBubble 3.5s ease-in-out infinite alternate; +} + +@keyframes floatBubble { + 0% { transform: translateY(0) scale(1); opacity: 0.7; } + 100% { transform: translateY(-6px) scale(1.1); opacity: 1; } +} + + +/* ════════════════════════════════════════════ + 🛁 JOKE PAGE + ════════════════════════════════════════════ */ + +.jokePage { + position: relative; + direction: rtl; + font-family: 'Fredoka One', 'Varela Round', sans-serif; + min-height: 100vh; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 32px 20px; + overflow: hidden; + + /* Sky-blue + foam gradient background */ + background: + radial-gradient(ellipse at 15% 15%, #fff9c4 0%, transparent 40%), + radial-gradient(ellipse at 85% 85%, #f8bbd0 0%, transparent 40%), + radial-gradient(ellipse at 85% 15%, #b3e5fc 0%, transparent 45%), + radial-gradient(ellipse at 15% 85%, #c8e6c9 0%, transparent 45%), + linear-gradient(160deg, #e1f5fe 0%, #fce4ec 50%, #e8f5e9 100%); +} + +/* ── Floating animated bubbles bg ─────────── */ +.bubblesContainer { + position: absolute; + inset: 0; + pointer-events: none; + overflow: hidden; +} + +.floatingBubble { + position: absolute; + bottom: -40px; + border-radius: 50%; + background: radial-gradient(circle at 35% 30%, rgba(255,255,255,0.9), rgba(180,235,255,0.25)); + border: 1.5px solid rgba(120,210,240,0.45); + animation: rise linear infinite; +} + +@keyframes rise { + 0% { transform: translateY(0) scale(0.8); opacity: 0; } + 10% { opacity: 0.7; } + 90% { opacity: 0.5; } + 100% { transform: translateY(-110vh) scale(1.15); opacity: 0; } +} + +/* ── Top decorative emoji row ──────────────── */ +.topDecor { + display: flex; + gap: 18px; + font-size: 1.8rem; + margin-bottom: 28px; + position: relative; + z-index: 2; + filter: drop-shadow(0 2px 4px rgba(0,0,0,0.12)); +} + +.topDecor span { + animation: bounce 1.8s ease-in-out infinite; +} +.topDecor span:nth-child(2) { animation-delay: 0.2s; } +.topDecor span:nth-child(3) { animation-delay: 0.4s; } +.topDecor span:nth-child(4) { animation-delay: 0.6s; } +.topDecor span:nth-child(5) { animation-delay: 0.8s; } + +@keyframes bounce { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-8px); } +} + +/* ── Main Joke Card ────────────────────────── */ +.jokeCard { + position: relative; + z-index: 2; + background: + radial-gradient(ellipse at 10% 10%, rgba(255,255,255,0.9) 0%, transparent 60%), + rgba(255,255,255,0.75); + backdrop-filter: blur(12px); + -webkit-backdrop-filter: blur(12px); + border: 3px solid var(--bath-teal); + border-radius: 36px; + padding: 36px 40px; + max-width: 480px; + width: 100%; + box-shadow: + 0 16px 48px rgba(77,208,225,0.28), + 0 4px 16px rgba(0,0,0,0.08), + inset 0 2px 0 rgba(255,255,255,0.95); + + /* Entrance animation */ + animation: slideUp 0.55s cubic-bezier(.34,1.56,.64,1) both; +} + +@keyframes slideUp { + from { opacity: 0; transform: translateY(40px) scale(0.95); } + to { opacity: 1; transform: translateY(0) scale(1); } +} + +/* Wavy top ribbon */ +.jokeCard::before { + content: ''; + position: absolute; + top: 0; left: 0; right: 0; + height: 54px; + background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 480 54'%3E%3Cpath d='M0 32 Q60 8 120 32 T240 32 T360 32 T480 32 V0 H0Z' fill='%234dd0e1' opacity='0.22'/%3E%3C/svg%3E") no-repeat top; + border-radius: 36px 36px 0 0; + pointer-events: none; +} + +/* ── Joke header ───────────────────────────── */ +.jokeHeader { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + margin-bottom: 20px; +} + +.questionMark { + width: 38px; + height: 38px; + background: linear-gradient(135deg, var(--duck-yellow), var(--duck-orange)); + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.3rem; + font-weight: bold; + color: #5d4000; + box-shadow: 0 3px 10px rgba(255,179,0,0.35); + line-height: 38px; + text-align: center; +} + +.jokeLabel { + font-family: 'Fredoka One', sans-serif; + font-size: 1.2rem; + color: var(--text-mid); + margin: 0; + letter-spacing: 0.04em; +} + +/* ── Question block ────────────────────────── */ +.questionBlock { + background: linear-gradient(135deg, #e3f7ff, #f0fbff); + border-radius: 20px; + padding: 20px 24px; + border: 2px solid rgba(77,208,225,0.4); + margin-bottom: 18px; +} + +.jokeQuestion { + font-family: 'Fredoka One', sans-serif; + font-size: 1.25rem; + color: var(--text-deep); + text-align: center; + margin: 0; + line-height: 1.55; + text-shadow: 0 1px 0 rgba(255,255,255,0.8); +} + +/* ── Divider ───────────────────────────────── */ +.dividerRow { + display: flex; + align-items: center; + gap: 10px; + margin: 6px 0 18px; +} + +.dividerLine { + flex: 1; + height: 2px; + background: linear-gradient(90deg, transparent, var(--bath-teal), transparent); + border-radius: 2px; +} + +.dividerEmoji { + font-size: 1.1rem; +} + +/* ── Answer block ──────────────────────────── */ +.answerBlock { + background: linear-gradient(135deg, #fff8e1, #fffde7); + border-radius: 20px; + padding: 20px 24px; + border: 2px solid rgba(255,202,40,0.45); +} + +.jokeAnswer { + font-family: 'Varela Round', sans-serif; + font-size: 1.1rem; + color: var(--text-deep); + text-align: center; + margin: 0; + line-height: 1.7; +} + +.jokeAnswer strong { + font-family: 'Fredoka One', sans-serif; + font-size: 1.15rem; + color: #b45309; + display: block; + margin-top: 6px; +} + +/* ── Back button ───────────────────────────── */ +.backButton { + position: relative; + z-index: 2; + margin-top: 28px; + padding: 12px 36px; + font-family: 'Fredoka One', sans-serif; + font-size: 1.05rem; + color: var(--foam-white); + background: linear-gradient(135deg, var(--bath-teal) 0%, #26c6da 100%); + border: none; + border-radius: var(--radius-pill); + cursor: pointer; + box-shadow: + 0 6px 20px rgba(77,208,225,0.45), + 0 2px 6px rgba(0,0,0,0.1); + letter-spacing: 0.04em; + transition: transform 0.18s cubic-bezier(.34,1.56,.64,1), + box-shadow 0.18s ease; +} + +.backButton:hover { + transform: translateY(-3px) scale(1.04); + box-shadow: + 0 12px 28px rgba(77,208,225,0.5), + 0 4px 10px rgba(0,0,0,0.1); +} + +.backButton:active { + transform: scale(0.97); +} diff --git a/src/students/bracha-pappenheim/Card.tsx b/src/students/bracha-pappenheim/Card.tsx new file mode 100644 index 0000000..ebf5191 --- /dev/null +++ b/src/students/bracha-pappenheim/Card.tsx @@ -0,0 +1,11 @@ +import styles from "./styles.module.css"; +import { CardProps } from "../../types"; + +export default function BrachaCard({ student, onClick }: CardProps) { + return ( +
+

{student.jokeTitle}

+

{student.name}

+
+ ); +} \ No newline at end of file diff --git a/src/students/bracha-pappenheim/JokePage.tsx b/src/students/bracha-pappenheim/JokePage.tsx new file mode 100644 index 0000000..a1a523a --- /dev/null +++ b/src/students/bracha-pappenheim/JokePage.tsx @@ -0,0 +1,13 @@ +import styles from "./styles.module.css"; +import { PageProps } from "../../types"; + +export default function brachaJokePage({ onBack }: PageProps) { + return ( +
+

בדיחה מאד מצחיקה למתכנת סטלן

+

מה קורה כשמתכנת סטלן מנסה לדאבג (Debug) קוד? + הוא מוצא באג, בוהה בו עשר דקות, ואז אומר: "וואו אחי... בעצם, מי אמר שזו טעות? אולי זה פשוט ה-Feature של היקום..."

+ +
+ ); +} \ No newline at end of file diff --git a/src/students/bracha-pappenheim/styles.module.css b/src/students/bracha-pappenheim/styles.module.css new file mode 100644 index 0000000..d85c3a8 --- /dev/null +++ b/src/students/bracha-pappenheim/styles.module.css @@ -0,0 +1,95 @@ +/* סגנון כללי לדף הבדיחה */ +.jokePage { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 200px; + padding: 2rem; + background-color: #1e1e24; + color: #f4f4f6; + border-radius: 16px; + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.25); + max-width: 600px; + margin: 2rem auto; + text-align: center; + font-family: system-ui, -apple-system, sans-serif; + border: 1px solid #3a3a45; +} + +/* כותרת או טקסט מודגש בתוך הדף */ +.jokePage p:first-of-type { + font-size: 1.4rem; + font-weight: 700; + color: #4ade80; + margin-bottom: 1.5rem; +} + +/* תוכן הבדיחה עצמה */ +.jokePage p:last-of-type { + font-size: 1.15rem; + line-height: 1.6; + color: #e2e8f0; + margin-bottom: 2rem; + background: #2d2d38; + padding: 1.5rem; + border-radius: 12px; + border-right: 4px solid #4ade80; /* הדגשה בצד ימין בגלל העברית */ +} + +/* כפתור חזרה */ +.jokePage button { + background-color: transparent; + color: #a78bfa; /* סגול בהיר */ + border: 2px solid #a78bfa; + padding: 0.6rem 1.5rem; + font-size: 1rem; + font-weight: 600; + border-radius: 8px; + cursor: pointer; + transition: all 0.3s ease; +} + +.jokePage button:hover { + background-color: #a78bfa; + color: #1e1e24; + box-shadow: 0 0 15px rgba(167, 139, 250, 0.4); + transform: translateY(-2px); +} + +/* --- עיצוב לכרטיס הבדיחה (BrachaCard) --- */ + +.card { + background: #25252f; + border: 1px solid #3f3f46; + border-radius: 12px; + padding: 1.5rem; + margin: 1rem auto; + max-width: 400px; + cursor: pointer; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); +} + +/* אפקט ריחוף על הכרטיס */ +.card:hover { + transform: translateY(-4px); + border-color: #60a5fa; /* כחול מודרני בטעינה */ + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3), 0 0 8px rgba(96, 165, 250, 0.2); +} + +/* כותרת הבדיחה בכרטיס */ +.title { + margin: 0 0 0.75rem 0; + font-size: 1.25rem; + color: #f3f4f6; + font-weight: 600; +} + +/* שם הסטודנט */ +.name { + margin: 0; + font-size: 0.95rem; + color: #9ca3af; + font-style: italic; +} \ No newline at end of file diff --git a/src/students/index.ts b/src/students/index.ts index 5be78e7..a8d82e2 100644 --- a/src/students/index.ts +++ b/src/students/index.ts @@ -5,11 +5,28 @@ import DanaDuviJokePage from "./dana-duvi/JokePage"; import ChaniChanzinCard from "./chani-chanzin/Card"; import ChaniChanzinJokePage from "./chani-chanzin/JokePage"; +import YaelCard from "./yael-shoham/Card"; +import YaelJokePage from "./yael-shoham/JokePage"; + +import AyalaOshriCard from "./ayala oshri/Card"; +import AyalaOshriJokePage from "./ayala oshri/JokePage"; +import BrachaCard from "./bracha-pappenheim/Card"; +import brachaJokePage from "./bracha-pappenheim/JokePage"; + +import TamarCard from "./tamar-lev/Card"; +import TamarJokePage from "./tamar-lev/JokePage"; // ⚠️ סדר הרשימה חייב להיות לפי סדר האלף-בית העברי לפי שם המשפחה. // כל תלמידה מוסיפה את עצמה במקום הנכון ידנית. -// אסור להשתמש בפונקציית-sort! +// אסור להשתמש בפונקציית-sort! const students: Student[] = [ + { + id: "bracha-pappenheim", + name: "ברכה פפנהיים", + jokeTitle: "שלום וברכה!", + CardComponent: BrachaCard, + JokePageComponent: brachaJokePage, + }, { id: "dana-duvi", name: "דנה דובי", @@ -17,6 +34,13 @@ const students: Student[] = [ CardComponent: DanaDuviCard, JokePageComponent: DanaDuviJokePage, }, + { + id: "Yael-Shoham", + name: "יעל שהם", + jokeTitle: "הילד המדבר", + CardComponent: YaelCard, + JokePageComponent: YaelJokePage, + }, { id: "chani-chanzin", name: "חני חנזין", @@ -24,6 +48,21 @@ const students: Student[] = [ CardComponent: ChaniChanzinCard, JokePageComponent: ChaniChanzinJokePage, }, + { + id: "Tamar-Lev", + name: "תמר לב", + jokeTitle: "החושך והאור", + CardComponent: TamarCard, + JokePageComponent: TamarJokePage, + }, + { + id: "ayala-oshri", + name: "אילה עושרי", + jokeTitle: "לולאה אינסופית", + CardComponent: AyalaOshriCard, + JokePageComponent: AyalaOshriJokePage, + } + ]; export default students; diff --git a/src/students/tamar-lev/Card.tsx b/src/students/tamar-lev/Card.tsx new file mode 100644 index 0000000..258d700 --- /dev/null +++ b/src/students/tamar-lev/Card.tsx @@ -0,0 +1,11 @@ +import styles from "./styles.module.css"; +import { CardProps } from "../../types"; + +export default function TamarCard({ student, onClick }: CardProps) { + return ( +
+

{student.jokeTitle}

+

{student.name}

+
+ ); +} \ No newline at end of file diff --git a/src/students/tamar-lev/JokePage.tsx b/src/students/tamar-lev/JokePage.tsx new file mode 100644 index 0000000..2daaf60 --- /dev/null +++ b/src/students/tamar-lev/JokePage.tsx @@ -0,0 +1,12 @@ +import styles from "./styles.module.css"; +import { PageProps } from "../../types"; + +export default function TamarJokePage({ onBack }: PageProps) { + return ( +
+

למה מתכנתים מעדיפים מצב חשוך?

+      

כי האור מושך באגים!

+ +
+ ); +} \ No newline at end of file diff --git a/src/students/tamar-lev/styles.module.css b/src/students/tamar-lev/styles.module.css new file mode 100644 index 0000000..ab1d8d2 --- /dev/null +++ b/src/students/tamar-lev/styles.module.css @@ -0,0 +1,82 @@ +/* עיצוב לעמוד הבדיחה הראשי */ +.jokePage { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 50vh; + background-color: #1a1a1a; /* רקע כהה */ + color: #ffffff; /* טקסט לבן */ + padding: 40px; + border-radius: 12px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3); + text-align: center; + font-family: sans-serif; +} + +/* עיצוב פסקאות הטקסט בתוך העמוד */ +.jokePage p { + font-size: 1.5rem; + margin: 15px 0; + line-height: 1.6; +} + +/* הפסקה של התשובה (הפאנץ' ליין) */ +.jokePage p:nth-of-type(2) { + font-weight: bold; + color: #4caf50; /* צבע ירוק להדגשת התשובה */ +} + +/* עיצוב כפתור החזרה */ +.jokePage button { + margin-top: 30px; + padding: 10px 25px; + font-size: 1rem; + background-color: #333333; + color: #ffffff; + border: 1px solid #555555; + border-radius: 6px; + cursor: pointer; + transition: background-color 0.2s ease, transform 0.1s ease; +} + +.jokePage button:hover { + background-color: #444444; + transform: scale(1.05); +} + +/* ========================================== */ + +/* עיצוב לכרטיס הבדיחה (ברשימה הראשית) */ +.card { + background-color: #242424; + border: 1px solid #333333; + border-radius: 8px; + padding: 20px; + margin: 15px; + cursor: pointer; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + transition: transform 0.2s ease, box-shadow 0.2s ease; + text-align: right; /* התאמה לעברית */ +} + +/* אפקט ריחוף מעל הכרטיס */ +.card:hover { + transform: translateY(-5px); + box-shadow: 0 6px 16px rgba(0, 0, 0, 0.25); + border-color: #4caf50; /* הדגשת המסגרת בריחוף */ +} + +/* עיצוב הכותרת בתוך הכרטיס */ +.title { + font-size: 1.25rem; + color: #ffffff; + margin: 0 0 10px 0; +} + +/* עיצוב שם התלמיד בתחתית הכרטיס */ +.name { + font-size: 0.9rem; + color: #888888; + margin: 0; +} \ No newline at end of file diff --git a/src/students/yael-shoham/Card.tsx b/src/students/yael-shoham/Card.tsx new file mode 100644 index 0000000..a911460 --- /dev/null +++ b/src/students/yael-shoham/Card.tsx @@ -0,0 +1,21 @@ +import styles from "./styles.module.css"; + +export default function YaelCard({ onClick }: any) { + return ( +
+
+ 👦 +
+ +

הילד המדבר

+ +
+ יעל שהם +
+ + +
+ ); +} \ No newline at end of file diff --git a/src/students/yael-shoham/JokePage.tsx b/src/students/yael-shoham/JokePage.tsx new file mode 100644 index 0000000..63af5e5 --- /dev/null +++ b/src/students/yael-shoham/JokePage.tsx @@ -0,0 +1,25 @@ +import styles from "./styles.module.css"; + +export default function YaelJokePage({ onBack }: any) { + return ( +
+
👦 💬 ✨
+ +
+
+ אמא שואלת: +

"למה אתה תמיד מדבר עם עצמך?"

+
+ +
+ הילד עונה: +

"כי אני אוהב לדבר עם אנשים חכמים!"

+
+
+ + +
+ ); +} \ No newline at end of file diff --git a/src/students/yael-shoham/styles.module.css b/src/students/yael-shoham/styles.module.css new file mode 100644 index 0000000..687841a --- /dev/null +++ b/src/students/yael-shoham/styles.module.css @@ -0,0 +1,185 @@ +/* רקע כללי עם גרדיאנט עדין ויוקרתי */ +.pageWrapper { + min-height: 100vh; + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 40px 20px; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + direction: rtl; +} + +/* כותרת האייקונים למעלה */ +.decorIcons { + font-size: 2.5rem; + margin-bottom: 30px; + filter: drop-shadow(0 5px 15px rgba(0,0,0,0.2)); +} + +/* קונטיינר מרכזי שמאגד הכל */ +.jokeContainer { + width: 100%; + max-width: 600px; + background: rgba(255, 255, 255, 0.95); + border-radius: 30px; + padding: 40px; + box-shadow: 0 20px 50px rgba(0,0,0,0.3); + display: flex; + flex-direction: column; + gap: 25px; +} + +/* עיצוב הבועות של השאלה והתשובה */ +.questionBox, .answerBox { + padding: 20px 25px; + border-radius: 20px; + position: relative; + transition: transform 0.3s ease; +} + +.questionBox { + background-color: #f0f4ff; + border-right: 5px solid #4a90e2; + align-self: flex-start; + width: 90%; +} + +.answerBox { + background-color: #fff9e6; + border-right: 5px solid #f5a623; + align-self: flex-end; + width: 90%; +} + +.questionBox:hover, .answerBox:hover { + transform: translateY(-5px); +} + +/* תוויות הדובר (אמא / ילד) */ +.dialogLabel, .dialogLabelAnswer { + font-size: 0.9rem; + font-weight: bold; + margin-bottom: 8px; + display: block; +} + +.dialogLabel { color: #2c5282; } +.dialogLabelAnswer { color: #744210; } + +/* הטקסט המרכזי של הבדיחה */ +.textMain { + font-size: 1.4rem; + color: #2d3748; + margin: 0; + line-height: 1.4; +} + +/* כפתור חזרה מעוצב */ +.backButton { + margin-top: 20px; + padding: 15px 40px; + background: #4a90e2; + color: white; + border: none; + border-radius: 50px; + font-size: 1.1rem; + font-weight: bold; + cursor: pointer; + box-shadow: 0 10px 20px rgba(74, 144, 226, 0.4); + transition: all 0.3s ease; +} + +.backButton:hover { + background: #357abd; + transform: scale(1.05); + box-shadow: 0 15px 25px rgba(74, 144, 226, 0.5); +} + +/* קונטיינר הכרטיסייה במפה */ +.cardContainer { + background: white; + border-radius: 20px; + padding: 24px; + text-align: center; + box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08); + border: 1px solid #e2e8f0; + cursor: pointer; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + display: flex; + flex-direction: column; + align-items: center; + gap: 12px; + position: relative; + overflow: hidden; +} + +/* אפקט ריחוף משגע לכרטיסייה */ +.cardContainer:hover { + transform: translateY(-8px); + box-shadow: 0 20px 35px rgba(102, 126, 234, 0.15); + border-color: #667eea; +} + +/* בועת האייקון בכרטיסייה */ +.iconBubble { + width: 60px; + height: 60px; + background: #f0f4ff; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + font-size: 1.8rem; + transition: transform 0.3s ease; +} + +.cardContainer:hover .iconBubble { + transform: scale(1.1) rotate(5deg); + background: #667eea; +} + +/* כותרת הבדיחה בכרטיסייה */ +.cardTitle { + font-size: 1.25rem; + font-weight: 700; + color: #1a202c; + margin: 0; +} + +/* תג השם שלך */ +.authorBadge { + background: #edf2f7; + padding: 4px 12px; + border-radius: 30px; + font-size: 0.85rem; + font-weight: 600; + color: #4a5568; +} + +.cardContainer:hover .authorBadge { + background: #764ba2; + color: white; +} + +/* כפתור כניסה קטן בכרטיסייה */ +.actionButton { + margin-top: 8px; + width: 100%; + padding: 10px; + background: #f7fafc; + border: 1px solid #e2e8f0; + border-radius: 12px; + font-size: 0.9rem; + font-weight: bold; + color: #4a90e2; + cursor: pointer; + transition: all 0.2s ease; +} + +.cardContainer:hover .actionButton { + background: #4a90e2; + color: white; + border-color: #4a90e2; +} \ No newline at end of file