/*
  design-system/tokens.css — משימה 36 שלב 1.
  מקור האמת: אפליקציה/app-server/public/design-lab/national-v2.html (אושר במלואו על ידי אור).
  זהו קובץ חילוץ, לא עיצוב חדש. כל טוקן/קלאס כאן קיים ב-v2 או הורחב ממנו בהשראה ישירה (מסומן בהערה איפה שכן).
  תיעוד מלא, כולל כל שינוי/הרחבה, ב-design-system/MASTER.md. אל תשנו קובץ זה בלי לעדכן את MASTER.md.

  סדר הטעינה המומלץ בכל דף app2:
    1. <script src="/app2/design-system/shell.js"></script>   (סינכרוני, מוקדם ב-head, לפני כל CSS — ר' תיעוד ב-shell.js)
    2. <link rel="preconnect" href="https://fonts.googleapis.com">
       <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
       <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Karantina...&family=Heebo...">  (משימה 48, ממצא 136)
    3. <link rel="stylesheet" href="/app2/design-system/tokens.css">
    4. CSS ספציפי לדף (בא אחרי tokens.css כדי שיוכל לדרוס במידת הצורך).
*/

/* משימה 48, ממצא 136: הפונטים עברו ל-<link> ישיר ב-head של כל דף. @import כאן יצר שרשרת חסימת רינדור, כי הדפדפן חייב לקרוא ולפרסר את tokens.css לפני שהוא בכלל מגלה שיש בקשת פונטים. **אל תחזיר את ה-@import.** דף חדש מעתיק את שורת ה-link מ-home.html יחד עם שתי שורות ה-preconnect. */

:root{
  /* צבעי בסיס — זהים ל-v2 מילה במילה */
  /* משימה 96 §2 (D-541): המשטחים הוארו מדרגה אחת — אותו גוון כחול-לילה של הזהות מ-17.08,
     ערך בהיר יותר. היה: --bg:#0A0E14 --bg-elev:#121826 --bg-elev-2:#182233.
     נבדק חישובית (WCAG 2.x) מול טוקני הטקסט על --bg-elev החדש (#1A2231):
     --text #F1F5F9 → 14.6:1 · --text-muted #94A3B8 → 6.31:1 · --text-dim #7C8DAA → 4.77:1.
     שלושתם מעל 4.5:1, ולכן ההארה אינה מורידה שום טקסט מתחת לשער הנגישות (§1). */
  --bg:#0F1520; --bg-elev:#1A2231; --bg-elev-2:#242F42;
  --glass-bg:rgba(255,255,255,.075); --glass-border:rgba(255,255,255,.14);
  /* --primary/--danger תוקנו במשימה 38 שלב 4 (המתאם): #DC2626/#EF4444 המקוריים (זהים ל-v2) נותנים
     טקסט לבן על btn-primary/btn-danger ביחס ניגודיות מתחת ל-4.5:1 במצב hover (filter:brightness(1.1)
     ב-tokens.css למטה מבהיר עוד את הרקע). #C81E1E/#C22323 נבדקו חישובית (נוסחת WCAG 2.x, luminance
     יחסית): btn-primary 5.74:1 בסיס / 4.90:1 ב-hover, btn-danger 5.90:1 בסיס / 5.06:1 ב-hover -
     שניהם מעל יעד 4.5:1 גם אחרי ה-hover. --pos-att (שמצביע ל-primary) מושפע גם הוא, בכוונה - אותה
     בעיית ניגודיות חלה על תג עמדת "התקפה". שאר הטוקנים (כולל --primary-2 שמשמש טקסט על רקע כהה,
     לא רקע-עם-טקסט-לבן) לא נגעתי בהם - זהים ל-v2 כמתועד. אימות מלא: 03 דואר\תוצאה 38.md. */
  --primary:#C81E1E; --primary-2:#F87171; --gold:#FBBF24; --gold-2:#FDE68A;
  /* משימה 96 §2: `--text-dim` הואר מ-#7C8DAA ל-#8A9BB8. **הסיבה נמדדה
     בדפדפן ולא נוחשה:** אחרי הארת `--bg-elev-2` (D-541), טקסט dim על
     המשטח הזה ירד ל-4.00:1 בדיוק — מתחת ל-4.5 של §1 — וזה מה שהפיל
     32 מדידות ניגודיות בשבעה מסכים (כספים 16, רפואה 4, טקטיקה 5,
     אימונים 3, בית 2, העברות 2, לוח 2). הערך החדש נותן
     4.79:1 על --bg-elev-2 · 5.70:1 על --bg-elev · 6.56:1 על --bg. */
  --text:#F1F5F9; --text-muted:#94A3B8; --text-dim:#8A9BB8;
  --success:#22C55E; --danger:#C22323; --info:#38BDF8;
  --pos-gk:#FBBF24; --pos-def:#38BDF8; --pos-mid:#22C55E; --pos-att:#C81E1E;

  /* רדיוסים */
  --radius:16px; --radius-chip:999px; --radius-sm:10px;

  /* ריווח */
  --sp-1:9px; --sp-2:18px; --sp-3:26px; --sp-4:35px; --sp-6:53px; /* משימה 91א §3ד (D-494): ×1.1 — היה 8/16/24/32/48 */

  /* תנועה */
  --ease:cubic-bezier(.16,.8,.32,1);
  --dur:260ms;

  /* מבנה */
  --header-h:64px;

  /* צללים ומיקוד */
  --shadow-card:0 12px 32px -12px rgba(0,0,0,.55);
  --focus-ring:0 0 0 3px rgba(56,189,248,.55);

  /* z-index — לא היו מתויגים כטוקן מפורש ב-v2 (רק ערכים חופשיים בכל רכיב: 50/200/300/1000),
     כאן מוצא כסולם מפורש כדי שדפי המוצר לא יתנגשו. הרחבה מתועדת של הצוות שלי, לא המצאת ערכים חדשים —
     הערכים עצמם (50, 200, 300, 1000) לקוחים ישירות מהשימושים ב-v2 (site-header, lightbox, toast-host, rotate-screen). */
  /* משימה 45 סעיף 0.3: סולם z-index גלובלי אחד, מלמטה למעלה.
     תוכן -> סרגלים -> אייקון הטלפון -> הטלפון -> מודאלים -> טוסטים -> מסך הסיבוב.
     הסדר תוקן אחרי שהבקרה מצאה שבסדר הקודם מסך הסיבוב היה מתחת לטלפון
     ולמודאלים, כלומר מודאל היה נפתח מעליו ומאפשר אינטראקציה בדיוק במצב
     שנועד לחסום.
     **הערה מחייבת:** הסולם הזה **אינו חל על שכבות** (כרטיס שחקן/מנהל, טבלה,
     נבחרת, הטלפון, מסך הסיבוב כשהוא dialog). showModal() מכניס אלמנט ל-top
     layer, שנמצא מעל כל z-index אפשרי, וסדר הערימה שם נקבע לפי סדר הפתיחה.
     הסולם נשאר תקף **לתוכן, לסרגלים ולטוסטים בלבד**. בלי מספרים מפוזרים בקבצים. */
  --z-content:1; --z-header:50; --z-dropdown:80;
  --z-phone-icon:120; --z-phone:150;
  --z-overlay:200; --z-toast:300; --z-rotate:1000;

  /* ===== משימה 59 סעיף 2.1 ===== */
  /* DES-10: בלי ההצהרה הזאת select, פסי גלילה ורכיבי טופס נייטיביים מרונדרים
     בהירים על דף כהה. אומת חי בייצור על מסך ההעברות. */
  color-scheme:dark;
  /* DES-3: tokens.css עצמו (shell-manager-chip, shell-offline-bar) ו-tactics.css
     צורכים var(--border) שלא היה מוגדר. */
  --border:rgba(255,255,255,.08);

  /* ===== משימה 59 ריצה ג, סעיף 6.1 ===== */
  /* DES-17: המשטח הבהיר של hover, היה 23 מופעי #1e2a3f ליטרליים */
  --bg-hover:#2B3850; /* משימה 96 §2 (D-541): הואר עם המשטחים. היה #1e2a3f */
  /* DES-14: טוקני שקיפות ל-primary ול-danger. מחליפים את
     rgba(220,38,38,*) ו-rgba(239,68,68,*) הישנים שנשארו מלפני תיקון
     הצבעים של משימה 38 */
  --primary-a08:rgba(200,30,30,.08);
  --primary-a16:rgba(200,30,30,.16);
  --primary-a25:rgba(200,30,30,.25);
  --danger-a08:rgba(194,35,35,.08);
  --danger-a16:rgba(194,35,35,.16);
  --danger-a25:rgba(194,35,35,.25);
  --danger-a40:rgba(194,35,35,.40);
  /* DES-18: צבעי טקסט רכים שהיו קשיחים ומשוכפלים */
  --danger-soft:#fca5a5;
  --success-soft:#86efac;
  --on-gold:#3b2600;

  /* ===== מערכת התצלומים, טוקנים. IMG-3 סעיף 1.1 ===== */
  /* שכבות עומק */
  --z-photo-back:-3;
  --z-photo-mid:-2;
  --z-photo-scrim:-1;
  --z-photo-product:2;

  /* ספי אלפא. מחושבים ב-IMG-3 פרק 2. אל תשנה */
  --scrim-a-gold:.72;
  --scrim-a-white:.60;
  --scrim-a-solid:.92;

  /* מילויי סקרים */
  --scrim-deep:linear-gradient(180deg,
    rgba(10,14,20,.55) 0%, rgba(10,14,20,.60) 30%,
    rgba(10,14,20,.72) 50%, rgba(10,14,20,.88) 78%,
    rgba(10,14,20,.96) 100%);
  --scrim-band:linear-gradient(180deg,
    rgba(10,14,20,.72) 0%, rgba(10,14,20,.80) 55%,
    rgba(10,14,20,.94) 100%);
  --scrim-tile:linear-gradient(180deg,
    rgba(10,14,20,0) 46%, rgba(10,14,20,.78) 100%);
  --scrim-flat:rgba(10,14,20,.72);
  /* RTL: 270deg שם את העצירה הכהה בימין, שם מתחיל הטקסט. אל תשתמש ב-90deg */
  --scrim-rtl:linear-gradient(270deg,
    rgba(10,14,20,.80) 0%, rgba(10,14,20,.34) 42%,
    rgba(10,14,20,0) 72%);

  /* מסנני תצלום */
  --img-f-deep:blur(14px) saturate(1.15) brightness(.45);
  --img-f-band:blur(6px) saturate(1.05) brightness(.50);
  --img-f-mid:saturate(.98) contrast(1.04) brightness(.92);
  --img-f-thumb:saturate(1.02) contrast(1.06);

  /* מוצר */
  --shadow-product:drop-shadow(0 12px 16px rgba(0,0,0,.60)) drop-shadow(0 2px 3px rgba(0,0,0,.50));
  --halo-product:drop-shadow(0 0 1px rgba(255,255,255,.42));
  --plate-product:radial-gradient(58% 56% at 50% 42%,
    rgba(255,255,255,.090) 0%, rgba(255,255,255,.032) 46%,
    rgba(255,255,255,0) 72%);

  /* סולם גדלים. שישה. אין שביעי */
  --img-1:24px; --img-2:34px; --img-3:48px;
  --img-4:64px; --img-5:96px; --img-6:132px;
  --kit-1:40px; --kit-2:64px; --kit-3:96px; --kit-4:132px;

  /* יחסי תצוגה */
  --ar-deep:16/10; --ar-band:308/96; --ar-tile:1;
  --ar-video:16/9; --ar-kit:1; --ar-pitch:68/100;

  /* מסגרות */
  --photo-border:1px solid rgba(255,255,255,.08);
  --photo-border-strong:2px solid rgba(255,255,255,.14);
  --photo-plate:var(--bg-elev-2);

  /* ==========================================================================
     משימה 96 §2 (D-541) — שלושה סולמות חדשים. נוספים, לא מחליפים:
     --sp-1..--sp-6 הישנים נשארים כפי שהם (91א D-494), כי 40 קובצי דף צורכים אותם.
     ========================================================================== */

  /* סולם טיפוגרפי קבוע, שישה שלבים, בפיקסלים מוחלטים.
     בכוונה px ולא rem: שורש המסמך הוא 19.25px (D-494), ולכן rem אינו "פיקסל".
     גוף הטקסט נשאר 1rem = 19.25px, מעל מינימום 16px של §1; הסולם הזה משרת
     תוויות, ראשי טבלה, תאים צפופים וכותרות — שם צריך שליטה מדויקת. */
  --fs-1:12px; --fs-2:14px; --fs-3:16px; --fs-4:20px; --fs-5:24px; --fs-6:32px;
  --lh-tight:1.25; --lh-normal:1.5; --lh-loose:1.65;

  /* גריד 4/8 — כל מרווח חדש הוא כפולה של 4. */
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:24px; --s-6:32px; --s-7:48px;

  /* שפת צבע לנתונים, ארבע מדרגות (D-541, סולם מקובל):
     אדום (נמוך) ← כתום ← צהוב ← ירוק (גבוה).
     ניגודיות הטקסט על --bg-elev (#1A2231), נוסחת WCAG 2.x:
     d1 5.82:1 · d2 6.95:1 · d3 10.3:1 · d4 9.2:1 — כולן מעל 4.5:1.
     **חוק §1: הצבע לעולם אינו לבדו.** רכיב `.dv96` למטה מחייב ערך מספרי
     או מילה לצידו, ומצייר סולם ארבע-מקטעים שנקרא גם בלי צבע. */
  --d-1:#F87171; --d-2:#FB923C; --d-3:#FACC15; --d-4:#4ADE80;
  --d-1-bg:rgba(248,113,113,.14); --d-2-bg:rgba(251,146,60,.14);
  --d-3-bg:rgba(250,204,21,.14);  --d-4-bg:rgba(74,222,128,.14);
  --d-1-bd:rgba(248,113,113,.34); --d-2-bd:rgba(251,146,60,.34);
  --d-3-bd:rgba(250,204,21,.34);  --d-4-bd:rgba(74,222,128,.34);
  --d-0:#94A3B8; --d-0-bg:rgba(148,163,184,.12); --d-0-bd:rgba(148,163,184,.28);

  /* צפיפות שורה בטבלת נתונים (§8 בדיקה 3) */
  --row-h:32px; --row-h-touch:44px;
  /* יעד מגע מינימלי (§1) */
  --tap:44px;
}

*,*::before,*::after{box-sizing:border-box}

/* html מ-16 ל-17.5px — הגדלת הסולם הסופית שכבר מומשה ב-v2 (משימה 35, פידבק אור סעיף 3). מועתק, לא מוגדל שוב. */
html{scroll-behavior:smooth; font-size:19.25px} /* משימה 91א §3ד (D-494): הגדלה כללית ~10% בטוקנים — היה 17.5px */
@media (prefers-reduced-motion: reduce){ html{scroll-behavior:auto} }

body{
  margin:0; background:var(--bg); color:var(--text);
  font-family:'Heebo',system-ui,sans-serif; font-size:1rem; line-height:1.55;
  -webkit-font-smoothing:antialiased; overflow-x:hidden;
}
img{max-width:100%; display:block}
a{color:inherit}
h1,h2,h3{font-family:'Karantina','Heebo',sans-serif; font-weight:400; letter-spacing:.5px; margin:0}
/* unicode-bidi:isolate + direction:ltr: תוקן במפורש אחרי בדיקה ויזואלית חיה של _preview.html (משימה 36).
   בלי זה, ביטוי כמו "14 / 20" בתוך פסקה RTL מוצג הפוך ("20 / 14") — כל מספר בודד הוא ריצה חזקה-LTR
   מטבעה, אבל שתי ריצות LTR מופרדות בתו ניטרלי (/) בתוך פסקת-אב RTL מסודרות-מחדש כיחידות. isolate
   הופך את כל הביטוי המספרי ליחידה עצמאית אחת שממוקמת נכון לפי מקומה המקורי במקור. חובה על כל דף מוצר
   לעטוף כל ביטוי מספרי מורכב (יחס, טווח, "x / y") ב-class="num", לא רק מספר בודד. */
.num,.tabular{font-variant-numeric:tabular-nums; direction:ltr; unicode-bidi:isolate}
button{font-family:inherit; cursor:pointer}
:focus-visible{outline:none; box-shadow:var(--focus-ring); border-radius:6px}
.sr-only{position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip:rect(0,0,0,0); white-space:nowrap; border:0}

/* ---------- מצב הפחתת תנועה: מבטל כל אנימציה/מעברים, מציג מצב סופי (זהה ל-v2) ---------- */
@media (prefers-reduced-motion: reduce){
  *{animation-duration:.001ms !important; animation-iteration-count:1 !important; transition-duration:.001ms !important; scroll-behavior:auto !important}
}

/* ---------- מיכל תוכן כללי ---------- */
.wrap{max-width:1180px; margin:0 auto; padding-inline:var(--sp-2)}
@media (min-width:720px){ .wrap{padding-inline:var(--sp-4)} }

/* ---------- כרטיסים / זכוכית ---------- */
.card{
  background:var(--bg-elev); border:1px solid rgba(255,255,255,.06); border-radius:var(--radius);
  box-shadow:var(--shadow-card);
}
.glass{
  background:var(--glass-bg); backdrop-filter:blur(15px); -webkit-backdrop-filter:blur(15px);
  border:1px solid var(--glass-border); border-radius:var(--radius);
}
/* וריאציות שימושיות, הרחבה שלי בהשראת אותה שפה (card/glass קיימים כמות שהם למעלה) */
.card-pad{padding:var(--sp-3)}
.card-interactive{transition:transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease); cursor:pointer}
.card-interactive:hover{transform:translateY(-2px); box-shadow:0 16px 36px -12px rgba(0,0,0,.6)}
.card-interactive:focus-visible{transform:translateY(-2px)}

/* ---------- אייקונים (SVG בלבד, ר' Shell.icon ב-shell.js — בלי אימוג'י בשום מקום) ---------- */
.icon{width:20px; height:20px; flex:none}
.icon-sm{width:16px; height:16px}
.icon-lg{width:28px; height:28px}

/* ---------- תגיות מצב ---------- */
.tag-demo{
  display:inline-flex; align-items:center; gap:4px; font-size:0.65625rem; font-weight:700;
  color:#3b2600; background:linear-gradient(135deg,var(--gold),var(--gold-2));
  padding:0.125rem 0.5rem; border-radius:var(--radius-chip); letter-spacing:.3px; vertical-align:middle;
}
.tag-live{
  display:inline-flex; align-items:center; gap:4px; font-size:0.65625rem; font-weight:700;
  color:#052e1a; background:linear-gradient(135deg,var(--success),#86efac);
  padding:0.125rem 0.5rem; border-radius:var(--radius-chip); letter-spacing:.3px; vertical-align:middle;
}
/* .tag-building חדש: לא קיים ב-v2, נדרש במפורש במשימה 36 ("בבנייה"). באותה שפה חזותית של tag-demo/tag-live —
   גרדיאנט אפור-כחלחל ניטרלי (v2 לא השתמש בטון הזה בשום תג קיים, כדי לא להתבלבל עם דמו/חי) + טקסט כהה לניגודיות.
   גוון ראשוני (#64748B→#94A3B8) נבדק ותוקן: על הקצה הכהה של הגרדיאנט הניגודיות מול הטקסט הכהה יצאה כ-3.75:1,
   מתחת ל-4.5:1 הנדרש. הוחלף לזוג בהיר יותר (slate-300/200) שנותן ~12:1 בכל הגרדיאנט, כמו tag-demo/tag-live. */
.tag-building{
  display:inline-flex; align-items:center; gap:4px; font-size:0.65625rem; font-weight:700;
  color:#0F172A; background:linear-gradient(135deg,#CBD5E1,#E2E8F0);
  padding:0.125rem 0.5rem; border-radius:var(--radius-chip); letter-spacing:.3px; vertical-align:middle;
}
/* .tag-preview חדש (תיקון המתאם אחרי שלב 2): גבול-ברזל של משימה 36 מחייב שכל דף app2 יישא תג "תצוגה
   מקדימה" גלוי - הוחמץ מהוראות סוכני הדפים, תוקן מרכזית כאן ומוזרק אוטומטית על ידי renderHeader() ב-shell.js
   כדי שיחול על כל דף קיים ועתידי בלי תלות בזיכרון של כל סוכן דף בנפרד. גוון תכלת ניטרלי (--info), לא מתבלבל
   עם דמו (זהב)/חי (ירוק)/בבנייה (אפור), ניגודיות ~8:1 (טקסט כהה על --info/--info בהיר). */
.tag-preview{
  display:inline-flex; align-items:center; gap:4px; font-size:0.65625rem; font-weight:700;
  color:#052e3d; background:linear-gradient(135deg,var(--info),#bae6fd);
  padding:0.125rem 0.5rem; border-radius:var(--radius-chip); letter-spacing:.3px; vertical-align:middle;
}

/* ============================= כפתורים ============================= */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:8px; border:none; border-radius:var(--radius-chip);
  padding:0.875rem 1.625rem; font-size:0.9375rem; font-weight:700; min-height:44px; min-width:44px;
  transition:transform var(--dur) var(--ease), box-shadow var(--dur) var(--ease), filter var(--dur) var(--ease), background var(--dur) var(--ease), opacity var(--dur) var(--ease);
}
.btn-primary{background:linear-gradient(135deg,var(--primary),#B91C1C); color:#fff; box-shadow:0 8px 24px -8px rgba(220,38,38,.7)}
.btn-primary:hover{filter:brightness(1.1); transform:translateY(-2px); box-shadow:0 12px 28px -8px rgba(220,38,38,.85)}
.btn-primary:active{transform:translateY(0px) scale(.98); filter:brightness(.95)}
.btn-gold{background:linear-gradient(135deg,var(--gold),#F59E0B); color:#3b2600; box-shadow:0 8px 24px -8px rgba(251,191,36,.6)}
.btn-gold:hover{filter:brightness(1.08); transform:translateY(-2px)}
.btn-ghost{background:transparent; color:var(--text); border:1.5px solid var(--glass-border)}
.btn-ghost:hover{background:rgba(255,255,255,.08); border-color:rgba(255,255,255,.3)}
.btn-secondary{background:var(--bg-elev-2); color:var(--text); border:1px solid rgba(255,255,255,.08)}
.btn-secondary:hover{background:#1e2a3f}
/* btn-danger חדש: לא קיים ב-v2 (שם היה רק primary/gold/ghost/secondary), אבל "כפתור מסוכן" מבוקש במפורש
   במשימה 36. משתמש ב-var(--danger) הקיים בטוקנים, לא צבע חדש. */
.btn-danger{background:linear-gradient(135deg,var(--danger),#B91C1C); color:#fff; box-shadow:0 8px 24px -8px rgba(239,68,68,.65)}
.btn-danger:hover{filter:brightness(1.1); transform:translateY(-2px)}
.btn:disabled{opacity:.4; cursor:not-allowed; filter:none; transform:none; box-shadow:none}
.btn:focus-visible{box-shadow:var(--focus-ring)}
.btn-sm{padding:0.5rem 1rem; font-size:0.8125rem; min-height:36px}

/* ============================= צ'יפים ============================= */
.chip{display:inline-flex; align-items:center; gap:6px; background:var(--bg-elev-2); border:1px solid rgba(255,255,255,.08); color:var(--text-muted); font-size:0.78125rem; padding:0.375rem 0.875rem; border-radius:var(--radius-chip); min-height:32px}
.chip-clickable{cursor:pointer; transition:background var(--dur) var(--ease), color var(--dur) var(--ease)}
.chip-clickable:hover{background:rgba(255,255,255,.1); color:var(--text)}
.pos-chip{display:inline-block; font-size:0.6875rem; font-weight:700; padding:0.1875rem 0.625rem; border-radius:var(--radius-chip)}
.pos-chip.gk{background:rgba(251,191,36,.16); color:var(--gold)}
.pos-chip.def{background:rgba(56,189,248,.16); color:var(--info)}
.pos-chip.mid{background:rgba(34,197,94,.16); color:var(--success)}
.pos-chip.att{background:rgba(220,38,38,.18); color:var(--primary-2)}
.pos-chip.unk{background:rgba(148,163,184,.14); color:var(--text-muted)}
.badge-dot{position:relative; display:inline-flex}
.badge-count{position:absolute; top:-6px; inset-inline-end:-6px; background:var(--primary); color:#fff; font-size:0.625rem; font-weight:800; min-width:17px; height:17px; border-radius:50%; display:flex; align-items:center; justify-content:center; border:2px solid var(--bg-elev)}

/* ============================= מתג (toggle) ============================= */
.toggle{position:relative; display:inline-flex; align-items:center; gap:8px; cursor:pointer; min-height:44px}
.toggle input{position:absolute; opacity:0; width:44px; height:26px; margin:0; cursor:pointer}
.toggle-track{width:44px; height:26px; background:#1e2a3f; border-radius:99px; position:relative; transition:background var(--dur)}
.toggle-track::after{content:'';position:absolute; top:3px; inset-inline-start:3px; width:20px; height:20px; border-radius:50%; background:#fff; transition:transform var(--dur) var(--ease)}
.toggle input:checked + .toggle-track{background:var(--success)}
.toggle input:checked + .toggle-track::after{transform:translateX(18px)}
[dir="rtl"] .toggle input:checked + .toggle-track::after{transform:translateX(-18px)}
.toggle input:focus-visible + .toggle-track{box-shadow:var(--focus-ring)}

/* ============================= טולטיפ ============================= */
.tt{position:relative; display:inline-flex}
.tt .tt-bubble{
  position:absolute; bottom:calc(100% + 8px); inset-inline-start:50%; transform:translateX(50%) translateY(4px);
  background:var(--bg-elev-2); border:1px solid var(--glass-border); padding:0.375rem 0.75rem; border-radius:8px;
  font-size:0.71875rem; white-space:nowrap; opacity:0; pointer-events:none; transition:opacity var(--dur), transform var(--dur); box-shadow:var(--shadow-card); z-index:var(--z-dropdown);
}
.tt:hover .tt-bubble, .tt:focus-within .tt-bubble{opacity:1; transform:translateX(50%) translateY(0)}

/* ============================= שלד טעינה (skeleton) ============================= */
.skel{background:linear-gradient(90deg,#1c2637 25%,#26334a 37%,#1c2637 63%); background-size:400% 100%; animation:skel-shimmer 1.4s ease-in-out infinite; border-radius:8px}
@keyframes skel-shimmer{ 0%{background-position:100% 0} 100%{background-position:0 0} }
@media (prefers-reduced-motion: reduce){ .skel{animation:none; opacity:.5} }

/* ============================= טוסט ============================= */
.toast-host{position:fixed; top:calc(var(--header-h) + 14px); inset-inline-start:50%; transform:translateX(50%); z-index:var(--z-toast); display:flex; flex-direction:column; gap:8px; pointer-events:none}
.toast{
  background:var(--bg-elev-2); border:1px solid rgba(34,197,94,.4); color:var(--text); padding:0.75rem 1.125rem; border-radius:12px;
  box-shadow:var(--shadow-card); display:flex; align-items:center; gap:10px; font-size:0.84375rem;
  opacity:0; transform:translateY(-12px); transition:opacity var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.toast.show{opacity:1; transform:translateY(0)}
.toast.toast-danger{border-color:rgba(239,68,68,.5)}

/* ============================= אקורדיון (חדש, בהשראת שפת v2 — לא היה קיים שם) =============================
   טכניקת grid-template-rows 0fr/1fr במקום max-height קבוע (v2 השתמש ב-max-height:160px קשיח בפרטי הסגל,
   ר' .roster-detail-inner במקור — כאן נמנעים מהמגבלה הזו במכוון, תוכן בכל גובה נפתח חלק). */
.accordion-item{border-bottom:1px solid rgba(255,255,255,.08)}
.accordion-item:last-child{border-bottom:none}
.accordion-trigger{
  width:100%; display:flex; align-items:center; justify-content:space-between; gap:12px;
  background:transparent; border:none; color:var(--text); font-size:0.9375rem; font-weight:600;
  padding:0.875rem 0.25rem; min-height:44px; text-align:start; transition:color var(--dur) var(--ease);
}
.accordion-trigger:hover{color:var(--gold)}
.accordion-chevron{transition:transform var(--dur) var(--ease); flex:none}
.accordion-trigger[aria-expanded="true"] .accordion-chevron{transform:rotate(180deg)}
.accordion-panel{display:grid; grid-template-rows:0fr; transition:grid-template-rows var(--dur) var(--ease)}
.accordion-panel.open{grid-template-rows:1fr}
.accordion-panel-inner{overflow:hidden}
.accordion-body{padding:0 0.25rem 1rem; color:var(--text-muted); font-size:0.875rem}

/* ============================= לשוניות (tabs) ============================= */
.tabs-nav{display:flex; gap:4px; background:var(--bg-elev-2); padding:5px; border-radius:var(--radius-chip); width:fit-content; position:relative; margin-bottom:var(--sp-3)}
/* =====================================================================
   משימה 49 §8ב פריט 3: **שש לשוניות בטקטיקה, ובטלפון הן לא נשברות.**
   הכרעת אור הוסיפה למסך הטקטיקה שתי לשוניות (המרכז הרפואי ולוח
   השקיפות) על ארבע קיימות. `.tabs-nav` הוא `flex` בלי גלישה וברוחב
   `fit-content`, ולכן שש לשוניות היו דוחפות את הסרגל **מעבר לרוחב
   המסך** בטלפון וגוררות את כל הדף לגלילה אופקית.
   הפתרון: הסרגל עצמו נעשה מכל גלילה. הוא לעולם אינו רחב מהמסך, הלשוניות
   אינן מתכווצות ואינן נחתכות, והדף עצמו אינו זז. סרגל של שלוש או ארבע
   לשוניות אינו מושפע כלל, כי `fit-content` משאיר אותו צר כשהוא נכנס.
   ===================================================================== */
.tabs-nav{max-width:100%; overflow-x:auto; overflow-y:hidden; scrollbar-width:none; -webkit-overflow-scrolling:touch}
.tabs-nav::-webkit-scrollbar{display:none}
.tabs-nav > .tab-btn{flex:0 0 auto; white-space:nowrap}
html[data-layout="phone"] .tab-btn{padding-inline:0.9rem}
/* min-height 44px (לא 40px כמו ב-v2): תוקן אחרי בדיקת נגישות ב-_preview.html — 40px נמדד בפועל כ-41px
   גובה מציאותי, מתחת ליעד המגע המינימלי 44x44 שמחייב במפורש משימה 36. */
.tab-btn{position:relative; z-index:2; padding:0.6875rem 1.25rem; font-size:0.84375rem; font-weight:600; color:var(--text-muted); background:transparent; border:none; border-radius:var(--radius-chip); min-height:44px; transition:color var(--dur) var(--ease)}
.tab-btn.active{color:var(--bg)}
/* תיקון באג ידוע (משימה 35, roster/design-lab): positionIndicator() המקורי מיקם את .tab-indicator עם
   inset-inline-start = offsetLeft, אבל offsetLeft הוא מדידה פיזית (משמאל) בעוד inset-inline-start ב-RTL
   מתייחס לצד ימין — התוצאה: האינדיקטור לא מיושר בדיוק מתחת לכפתור הפעיל באפליקציה RTL.
   כאן (ר' Shell.initTabs ב-shell.js) האינדיקטור ממוקם עם left הפיזי (תואם ל-offsetLeft), לא עם inset-inline-start. */
.tab-indicator{position:absolute; top:5px; bottom:5px; left:0; background:var(--gold); border-radius:var(--radius-chip); z-index:1; transition:left var(--dur) var(--ease), width var(--dur) var(--ease)}
.tab-panel{display:none}
.tab-panel.active{display:block}

/* ============================= טבעת ציון (score ring) ============================= */
/* ציון עם ספרה במרכז העיגול — שונה במכוון מ-.ring-pct של v2 (שם התג יושב כתגית מתחת לתמונה, לא במרכז
   הטבעת עצמה). כאן זו הגרסה הגנרית לספריית הרכיבים, לפי מפרט משימה 36 ("עיגול עם ציון מספרי במרכז"). */
.score-ring{position:relative; display:inline-flex; align-items:center; justify-content:center}
.score-ring svg{transform:rotate(-90deg)}
.score-ring-track{fill:none; stroke:rgba(255,255,255,.1); stroke-width:8}
/* stroke בכוונה לא מוגדר כאן (חוץ מברירת מחדל --gold): כל טבעת מקבלת gradient ייחודי דרך style="stroke:..." inline
   שנוצר ב-Shell.scoreRing (shell.js) — style inline גובר על הכלל הזה, כדי שכמה טבעות באותו דף לא יתנגשו על id אחד. */
.score-ring-fill{fill:none; stroke:var(--gold); stroke-width:8; stroke-linecap:round; transition:stroke-dashoffset 1.1s var(--ease)}
.score-ring-value{position:absolute; inset:0; display:flex; align-items:center; justify-content:center; font-family:'Karantina'; color:var(--gold); font-size:1.5rem}
.score-ring-sm .score-ring-value{font-size:1.0625rem}
.score-ring-lg .score-ring-value{font-size:2rem}

/* ============================= מיכל רדאר ============================= */
.radar-container{max-width:520px; margin-inline:auto; padding:var(--sp-2)}
.radar-container canvas{width:100%; height:auto}
.radar-legend{display:flex; gap:16px; justify-content:center; flex-wrap:wrap; margin-top:8px; font-size:0.75rem; color:var(--text-muted)}
.radar-legend-dot{display:inline-block; width:9px; height:9px; border-radius:50%; margin-inline-end:5px; vertical-align:middle}

/* ============================= מדים ומדדים (מקור: תחנה 8 ב-v2, halfGauge/ringMini/bullet/momentum) ============================= */
.gauge-num{font-family:'Karantina'; font-size:1.875rem; margin-top:-38px}
.gauge-label{font-size:0.75rem; color:var(--text-muted); margin-top:6px}
.ring-mini{width:96px; text-align:center}
.bullet-row{margin-bottom:14px; text-align:start}
.bullet-label{font-size:0.75rem; color:var(--text-muted); display:flex; justify-content:space-between; margin-bottom:4px}
.bullet-track{height:16px; border-radius:6px; background:rgba(255,255,255,.06); position:relative; overflow:hidden}
.bullet-band{position:absolute; top:0; bottom:0; height:100%}
.bullet-bar{position:absolute; top:5px; bottom:5px; background:var(--gold); border-radius:4px; transition:width 1s var(--ease)}
.bullet-target{position:absolute; top:-2px; bottom:-2px; width:3px; background:#fff}
.momentum-track{height:14px; border-radius:99px; background:linear-gradient(90deg,var(--danger) 0%,var(--danger) 25%,var(--text-dim) 25%,var(--text-dim) 50%,var(--info) 50%,var(--info) 75%,var(--success) 75%,var(--success) 100%); position:relative; margin-top:22px}
.momentum-marker{position:absolute; top:-9px; width:3px; height:32px; background:#fff; border-radius:2px; box-shadow:0 0 8px rgba(255,255,255,.7); transition:right 1s var(--ease)}
.momentum-zones{display:flex; justify-content:space-between; font-size:0.65625rem; color:var(--text-muted); margin-top:6px}

/* מד התקדמות פשוט, ליניארי — הרחבה שלי, אין ב-v2 (שם המונה היחיד היה bullet-track). API פשוט: div.meter-track > div.meter-fill */
.meter-track{height:8px; border-radius:99px; background:rgba(255,255,255,.06); overflow:hidden}
.meter-fill{height:100%; border-radius:99px; background:linear-gradient(90deg,var(--info),var(--success)); transition:width var(--dur) var(--ease)}
.meter-fill.warn{background:linear-gradient(90deg,var(--gold),#F59E0B)}
.meter-fill.danger{background:linear-gradient(90deg,var(--danger),#B91C1C)}

/* ============================= טבלאות ============================= */
/* גנרית, מקבילה ל-table.roster ב-v2 (תחנה 6), שם כללי כדי שכל דף מוצר ישתמש: table.data-table */
/* משימה 45 סעיף 0.2, מוקד סיכון 3: טבלאות רחבות בלאורך.
   **גלילה אופקית בתוך מכל ייעודי, לא הקטנת גופן ולא הסתרת עמודות.**
   overscroll-behavior-x:contain מונע מהגלילה האופקית לגרור את הדף עצמו
   (ובאייפון, לגרור את מחוות האחורה של הדפדפן). */
.table-wrap{overflow-x:auto; overscroll-behavior-x:contain; -webkit-overflow-scrolling:touch; border-radius:var(--radius)}
html[data-layout="phone"] .table-wrap > table{min-width:max-content}
/* עמודת השם נשארת דבוקה בצד ימין. **inset-inline-start ולא left**: הדפוס
   המתועד בספרות נכתב לשפות משמאל לימין, ואצלנו העמודה הראשונה היא בימין,
   ולכן left:0 היה מדביק אותה לצד הלא נכון. */
html[data-layout="phone"] .table-wrap > table > thead > tr > th:first-child,
html[data-layout="phone"] .table-wrap > table > tbody > tr > td:first-child{
  position:sticky; inset-inline-start:0; z-index:2;
  background:var(--bg-elev); box-shadow:-10px 0 12px -10px rgba(0,0,0,.75);
}
html[data-layout="phone"] .table-wrap > table > thead > tr > th:first-child{z-index:3}
table.data-table{width:100%; border-collapse:collapse; min-width:480px}
table.data-table th{font-size:0.71875rem; color:var(--text-dim); text-align:start; padding:0.625rem 0.75rem; border-bottom:1px solid rgba(255,255,255,.08); font-weight:600}
table.data-table td{padding:0.625rem 0.75rem; border-bottom:1px solid rgba(255,255,255,.05); font-size:0.84375rem; vertical-align:middle}
table.data-table tr.row-clickable{cursor:pointer; transition:background var(--dur) var(--ease)}
table.data-table tr.row-clickable:hover{background:rgba(255,255,255,.04)}
table.data-table tr.row-clickable:focus-visible{background:rgba(255,255,255,.06)}
/* משימה 59 סעיף 2.5: הגדלים על סולם --img-1..6 (IMG-3 סעיף 1.8) */
.table-photo{width:var(--img-2); height:var(--img-2); border-radius:50%; object-fit:cover}
.table-photo-empty{width:var(--img-2); height:var(--img-2); border-radius:50%; background:linear-gradient(135deg,#1e2a3f,#0f1622); display:flex; align-items:center; justify-content:center; font-size:0.75rem; color:var(--text-dim); border:1px solid rgba(255,255,255,.08)}
.table-crest{width:18px; height:18px; object-fit:contain; vertical-align:middle; margin-inline-start:6px}
.minibar{width:70px; height:6px; border-radius:99px; background:rgba(255,255,255,.08); overflow:hidden; display:inline-block; vertical-align:middle}
.minibar span{display:block; height:100%; background:linear-gradient(90deg,var(--info),var(--success))}

/* ============================= מצבי טקסט עזר ============================= */
.empty-note{color:var(--text-dim); font-size:0.75rem}
.err-inline{color:var(--danger-soft); font-size:0.8125rem; padding:var(--sp-2); background:rgba(239,68,68,.08); border:1px solid rgba(239,68,68,.25); border-radius:var(--radius-sm)}
/* משימה 63 שלב ז, מחלקה ז4 (LAY-21): קוד הסיבה שמחליף את נתיב ה-API בהודעת
   השגיאה. משני לטקסט, ומבודד ל-LTR כדי שקוד כמו MC-02 לא יישבר בשורה עברית. */
.err-code{display:inline-block; direction:ltr; unicode-bidi:isolate; font-size:0.75rem; opacity:.75; white-space:nowrap}
.loading-row{color:var(--text-dim); font-size:0.8125rem; padding:var(--sp-2)}

/* =====================================================================
   השלד המשותף: כותרת עליונה, ניווט ראשי, נגן יוטיוב, מסך סיבוב.
   ===================================================================== */

/* ---------- כותרת עליונה דביקה (מבוססת #site-header של v2) ---------- */
#shell-header{
  position:sticky; top:0; z-index:var(--z-header); min-height:var(--header-h);
  display:flex; align-items:center; background:rgba(10,14,20,.82); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  box-shadow:0 8px 24px -12px rgba(0,0,0,.6); border-bottom:1px solid var(--glass-border);
}
.shell-header-inner{width:100%; display:flex; align-items:center; gap:var(--sp-2)}
.shell-brand{display:flex; align-items:center; gap:8px; flex:none; font-family:'Karantina'; font-size:1.375rem; color:var(--text); white-space:nowrap}
.shell-brand .dot{width:8px; height:8px; border-radius:50%; background:var(--primary); box-shadow:0 0 10px 2px var(--primary)}

/* ---------- ניווט ראשי (12 דפי המפה) ---------- */
.shell-nav{display:flex; gap:6px; overflow-x:auto; scrollbar-width:none; padding-block:4px; flex:1 1 auto; min-width:0}
.shell-nav::-webkit-scrollbar{display:none}
.shell-nav-link{
  flex:none; font-size:0.78125rem; color:var(--text-muted); background:transparent; border:1px solid transparent;
  padding:0.4375rem 0.75rem; border-radius:var(--radius-chip); white-space:nowrap; transition:all var(--dur) var(--ease);
  min-height:44px; display:inline-flex; align-items:center; gap:6px; text-decoration:none;
}
.shell-nav-link:hover{color:var(--text); background:rgba(255,255,255,.06)}
.shell-nav-link.active{color:var(--bg); background:var(--gold); font-weight:700}
.shell-nav-link.is-building{color:var(--text-dim); cursor:default; pointer-events:none}

/* ---------- נגן יוטיוב גלובלי (סרגל עליון, inline-end = שמאל ב-RTL) ---------- */
.ytplayer{position:relative; flex:none; inset-inline-end:0}
.ytplayer-toggle{
  width:44px; height:44px; border-radius:50%; background:var(--bg-elev-2); border:1px solid rgba(255,255,255,.08);
  color:var(--text); display:flex; align-items:center; justify-content:center; transition:background var(--dur) var(--ease);
}
.ytplayer-toggle:hover{background:#1e2a3f}
.ytplayer-toggle[aria-expanded="true"]{color:var(--gold); border-color:rgba(251,191,36,.4)}
.ytplayer-panel{
  position:absolute; top:calc(100% + 10px); inset-inline-end:0; width:min(320px,86vw); z-index:var(--z-dropdown);
  background:var(--bg-elev); border:1px solid rgba(255,255,255,.08); border-radius:var(--radius); box-shadow:var(--shadow-card);
  padding:var(--sp-2);
}
.ytplayer-panel[hidden]{display:none}
.ytplayer-frame{position:relative; aspect-ratio:16/9; border-radius:var(--radius-sm); overflow:hidden; background:#000; margin-bottom:var(--sp-1)}
.ytplayer-frame iframe{position:absolute; inset:0; width:100%; height:100%; border:0}
.ytplayer-controls{display:flex; align-items:center; gap:10px}
.ytplayer-controls button{width:36px; height:36px; border-radius:50%; background:var(--bg-elev-2); border:1px solid rgba(255,255,255,.08); color:var(--text); display:flex; align-items:center; justify-content:center; flex:none}
.ytplayer-controls button:hover{background:#1e2a3f}
.ytplayer-volume{flex:1 1 auto; accent-color:var(--gold); min-height:44px}
.ytplayer-status{font-size:0.71875rem; color:var(--text-dim); margin-top:8px; text-align:center}
.ytplayer.fullscreen .ytplayer-panel{
  position:fixed; inset:var(--sp-3); top:var(--sp-3); bottom:var(--sp-3); width:auto; max-width:none; z-index:var(--z-overlay);
  display:flex; flex-direction:column; justify-content:center;
}
.ytplayer.fullscreen .ytplayer-frame{aspect-ratio:auto; flex:1 1 auto}

/* ---------- מסך סיבוב, טלפון לאורך (זהה ל-#rotate-screen של v2) ---------- */
#rotate-screen{
  position:fixed; inset:0; z-index:var(--z-rotate); display:none;
  flex-direction:column; align-items:center; justify-content:center; gap:var(--sp-2);
  background:var(--bg); color:var(--text); text-align:center; padding:var(--sp-4);
}
html[data-layout="rotate"] #rotate-screen{display:flex}
html[data-layout="rotate"] #app-root{display:none}
.rotate-icon{width:4.5rem; height:4.5rem; color:var(--gold); animation:rotate-hint 1.8s ease-in-out infinite; margin-bottom:var(--sp-2)}
@keyframes rotate-hint{ 0%,100%{transform:rotate(0deg)} 50%{transform:rotate(90deg)} }
.rotate-title{font-family:'Karantina'; font-size:clamp(1.75rem,6vw,2.5rem); color:var(--gold)}
.rotate-sub{color:var(--text-muted); font-size:0.9375rem; max-width:34ch; margin-top:4px}

/* =====================================================================
   משימה 45, שלב 0. כל התוספות של הפריסה החדשה, השכבות והשדות.
   אסור לשנות את שפת העיצוב: הצבעים, הגופנים, הרדיוסים, הרווחים והתנועה
   נשארים בדיוק כפי שאושרו. משנים סידור, לא מראה.
   ===================================================================== */

/* ---------- 0.1ב: שם לחיץ (Shell.playerLink / Shell.managerLink) ----------
   סימון חזותי עדין בלבד, בשפת העיצוב המאושרת. **בלי קו תחתון כחול.** */
.entity-link{
  color:inherit; text-decoration:none; cursor:pointer;
  border-bottom:1px dotted rgba(251,191,36,.45);
  transition:color var(--dur) var(--ease), border-color var(--dur) var(--ease);
}
.entity-link:hover, .entity-link:focus-visible{ color:var(--gold); border-bottom-color:var(--gold); }
.entity-link:focus-visible{ outline:none; box-shadow:var(--focus-ring); border-radius:3px; }
/* שחקן בלי כרטיס: טקסט רגיל, לא קישור מת */
.entity-name{ color:inherit; }

/* ---------- 0.1: שדות PIN ----------
   הסתרה חזותית ב--webkit-text-security, שעובדת רק על שדה שאינו type="password".
   התמיכה אומתה: ספארי מ-3.1, כרום מ-4, אדג' מ-79, פיירפוקס מ-114.
   כשהמחלקה מוסרת (כפתור העין) הספרות מוצגות. */
.pin-masked{ -webkit-text-security:disc; text-security:disc; }
/* כל שדה קלט לפחות 16px — מתחת לזה iOS מזנקת בזום בכל פוקוס.
   17.5px * 0.9143 = 16px בדיוק. חל על שדות קלט בלבד, לא על שום טקסט אחר. */
input, textarea, select{ font-size:max(1rem, 16px); }
/* שטח נגיעה מוגדל: נגיעה אחת פותחת מקלדת בוודאות, בלי להסתמך על focus() */
input[data-pin-field]{ min-height:52px; letter-spacing:0.35em; text-align:center; }
.pin-eye{
  width:44px; height:44px; border-radius:50%; background:var(--bg-elev-2);
  border:1px solid rgba(255,255,255,.08); color:var(--text-muted);
  display:inline-flex; align-items:center; justify-content:center; flex:none;
}
.pin-eye:hover{ background:#1e2a3f; color:var(--text); }
.pin-eye[aria-pressed="true"]{ color:var(--gold); border-color:rgba(251,191,36,.4); }
.pin-field-row{ display:flex; align-items:center; gap:8px; }
.pin-field-row > input{ flex:1 1 auto; min-width:0; }
/* שדה סכום: אין חצים, יישור לשמאל כמו מספר */
input[data-amount-field]{ text-align:start; font-variant-numeric:tabular-nums; }

/* ---------- 0.1ד סעיף 8: השכבה. dialog אחד עם מחסנית פנימית ---------- */
.shell-layer{
  border:none; padding:0; background:var(--bg); color:var(--text);
  max-width:none; max-height:none; overflow:hidden;
}
.shell-layer::backdrop{ background:rgba(4,6,10,.72); backdrop-filter:blur(3px); }
.shell-layer-chrome{
  display:flex; align-items:center; gap:var(--sp-2);
  padding:var(--sp-2) var(--sp-3);
  padding-top:max(var(--sp-2), env(safe-area-inset-top));
  border-bottom:1px solid var(--glass-border);
  background:rgba(10,14,20,.92); position:sticky; top:0;
}
.shell-layer-title{ flex:1 1 auto; font-family:'Karantina'; font-size:1.375rem; color:var(--text); min-width:0; }
.shell-layer-back, .shell-layer-close{
  width:44px; height:44px; border-radius:50%; background:var(--bg-elev-2);
  border:1px solid rgba(255,255,255,.08); color:var(--text);
  display:inline-flex; align-items:center; justify-content:center; flex:none;
}
.shell-layer-back:hover, .shell-layer-close:hover{ background:#1e2a3f; }
.shell-layer-back[hidden]{ display:none; }
/* גלילה מלאה בפנים, והגלילה לא "בורחת" לדף שמאחור */
.shell-layer-body{
  overflow-y:auto; overscroll-behavior:contain; -webkit-overflow-scrolling:touch;
  padding:var(--sp-3);
  padding-bottom:max(var(--sp-3), env(safe-area-inset-bottom));
}
.shell-layer-body:focus{ outline:none; }
/* במחשב: חלון ממורכז. */
html[data-layout="desktop"] .shell-layer{
  width:min(980px, 94vw); max-height:88dvh; border-radius:var(--radius);
  box-shadow:var(--shadow-card); margin:auto;
}
html[data-layout="desktop"] .shell-layer-body{ max-height:calc(88dvh - 68px); }
/* בטלפון לאורך: מסך מלא מלמטה. */
html[data-layout="phone"] .shell-layer{
  width:100vw; max-width:100vw; height:100dvh; margin:0;
  border-radius:0; position:fixed; inset:0;
}
html[data-layout="phone"] .shell-layer-body{ height:calc(100dvh - 60px); }

/* ---------- 0.2: פס הרמז לסיבוב בזמן מצ'אף חי ----------
   מסך סיבוב מלא לעולם אינו מכסה משחק פעיל: הוא היה גוזל מהמנהל את חלון
   60 השניות לחילוף אחרי פציעה, והמשחק היה מוכרע על ידי באג ממשק. */
#rotate-hint-bar{
  display:none; position:fixed; top:0; inset-inline:0; z-index:var(--z-toast);
  padding:6px var(--sp-2); padding-top:max(6px, env(safe-area-inset-top));
  background:rgba(251,191,36,.92); color:#1a1206;
  font-size:0.78125rem; font-weight:700; text-align:center;
}
html[data-rotate-hint="true"] #rotate-hint-bar{ display:block; }
html[data-rotate-hint="true"] #shell-header{ top:28px; }

/* =====================================================================
   0.2, היפוך כיוון התצוגה. בטלפון האפליקציה **לאורך**.
   החדשות הטובות שהתאמתו בפועל: 390x844 (לאורך) פחות מגביל מ-844x390
   (לרוחב). הבעיה הקשה בפריסה הקודמת הייתה גובה 390px בלבד. רוב הכללים
   התפשטו ולא הסתבכו, ומה שהיה בטורים לרוחב הסתדר בערימה לאורך.
   ===================================================================== */

/* 100vh אסור: הוא קופץ עם סרגל הכתובת בספארי מובייל. dvh/svh נתמכים
   בספארי מ-15.4, בכרום ובאדג' מ-108, ובפיירפוקס מ-101. */
html[data-layout="phone"] #app-root{ min-height:100svh; }

/* הסרגל: תשעה פריטים חייבים להיכנס לרוחב 390. אם לא נכנסים — **גלילה
   אופקית**, ולא הקטנת גופן ולא הסתרת פריטים. */
html[data-layout="phone"] .shell-nav{
  overflow-x:auto; flex-wrap:nowrap; scroll-snap-type:x proximity;
  -webkit-overflow-scrolling:touch;
}
html[data-layout="phone"] .shell-nav-link{ scroll-snap-align:start; }
html[data-layout="phone"] .shell-header-inner{ flex-wrap:wrap; row-gap:4px; }
html[data-layout="phone"] .shell-brand{ font-size:1.1875rem; }
html[data-layout="phone"] .shell-brand-sub{ display:none; }
#shell-header{ padding-top:env(safe-area-inset-top); }
.shell-brand-sub{ color:var(--text-dim); font-size:0.75rem; font-weight:400; }

/* safe-area מתנהג אחרת בכל כיוון: לאורך רלוונטיים top ו-bottom, לרוחב
   המגרעת עוברת לצד. יש דיווחים שהערכים חוזרים לפעמים כאפס, ולכן תמיד
   עם ברירת מחדל דרך max(). */
html[data-layout="phone"] .wrap{
  padding-inline:max(var(--sp-2), env(safe-area-inset-left), env(safe-area-inset-right));
  padding-bottom:max(var(--sp-3), env(safe-area-inset-bottom));
}

/* ---------- טבלאות רחבות (0.2, מוקד סיכון 3) ----------
   גלילה אופקית בתוך מכל ייעודי. **לא** הקטנת גופן ו**לא** הסתרת עמודות.
   עמודת השם נשארת דבוקה בצד ימין — ולכן inset-inline-start ולא left:
   הדפוס המתועד בספרות נכתב לשפות משמאל לימין, ואצלנו העמודה הראשונה
   היא בצד ימין. */
.table-scroll{
  overflow-x:auto; overscroll-behavior-x:contain; -webkit-overflow-scrolling:touch;
  max-width:100%;
}
.table-scroll > table{ min-width:max-content; }
.table-scroll th.sticky-name, .table-scroll td.sticky-name{
  position:sticky; inset-inline-start:0; z-index:2;
  background:var(--bg-elev); box-shadow:-8px 0 12px -10px rgba(0,0,0,.7);
}
.table-scroll thead th.sticky-name{ z-index:3; }

/* סרגלים דבוקים מכבדים safe-area ואינם מכסים תוכן */
html[data-layout="phone"] .sticky-bottom-bar{
  padding-bottom:max(var(--sp-2), env(safe-area-inset-bottom));
}

/* 48, ממצא 121: לשונית שהיא קישור לדף מלא ולא פאנל.
   נראית כמו לשונית רגילה, ולעולם אינה מקבלת מצב .active — היא עוזבת את
   הדף. initTabs אוסף ‎.tab-btn‎, ולכן הקישור מקבל את אותו עיצוב בלי CSS
   כפול, ומכיוון שאין לו data-tab הוא לעולם לא ייבחר כלשונית פעילה. */
.tab-btn-link{ text-decoration:none; display:inline-flex; align-items:center; }

/* =====================================================================
   משימה 48, A-80: **כיבוי עיגון הגלילה במכל השכבה.**
   Chrome מזיז `scrollTop` בעצמו כדי לשמור על מיקום ויזואלי כשתוכן נוסף
   מעל נקודת הצפייה (scroll anchoring). זה נמדד בייצור: שחזור גלילה
   ל-500 החזיר 1445, ושחזור ל-600 החזיר 1543 - **הפרש קבוע של כ-945**,
   בדיוק גובה התוכן שמודול הדף מצייר אחרי השחזור. בלי הכיבוי הזה שחזור
   מיקום הגלילה בשכבה אינו יכול לעבוד, כמה שלא ננסה לקבוע אותו בקוד.
   ===================================================================== */
.shell-layer-body{ overflow-anchor:none; }

/* =====================================================================
   משימה 50: שבב המנהל, האישור האחיד, פס השמירה, וחיווי "נשמר".

   כל מה שכאן הוא **חדש ואינו נוגע ב-`.tabs-nav`** — משימה 49 תיקנה את
   גלילת הלשוניות, ושכבה שנייה על אותו כלל היא בדיוק מה ש-§13 אוסר.
   ===================================================================== */

/* --- §4.2 פריט 5: שבב המנהל המחובר. משימה 59 §8.6: נהיה קישור לחיץ
   שפותח את כרטיס המנהל כשכבה (IA "כניסות ומוסתרים"). --- */
.shell-manager-chip{
  display:flex; align-items:center; gap:8px; margin-inline-start:auto;
  padding:5px 12px 5px 6px; border-radius:999px;
  background:var(--bg-elev-2); border:1px solid var(--border);
  font-size:0.8125rem; font-weight:600; color:var(--text-muted);
  max-width:40vw; overflow:hidden;
  text-decoration:none; cursor:pointer; min-height:36px;
  transition:border-color var(--dur) var(--ease), color var(--dur) var(--ease);
}
.shell-manager-chip:hover{border-color:rgba(255,255,255,.22); color:var(--text)}
.shell-manager-chip:focus-visible{outline:none; box-shadow:var(--focus-ring)}
/* DYN פרק 3 הנחיה 10: צ'יפ קטן מקבל אזור מגע מורחב בלי לגדול חזותית */
.shell-manager-chip{position:relative}
.shell-manager-chip::before{content:''; position:absolute; inset:-6px}
.shell-manager-chip-img{width:26px; height:26px; border-radius:50%; object-fit:cover; flex:0 0 auto}
.shell-manager-chip-dot{width:26px; height:26px; border-radius:50%; background:var(--gold); flex:0 0 auto}
.shell-manager-chip-name{white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
html[data-layout="phone"] .shell-manager-chip-name{display:none}
html[data-layout="phone"] .shell-manager-chip{padding:4px; max-width:none}

/* --- §7.2: Shell.confirm. מודאל בתוך #app-root, לא דיאלוג דפדפן. --- */
/* משימה 71 §6.3: האישור הוא <dialog> שנפתח ב-showModal, ולכן הוא ב-top
   layer ותמיד מעל שכבה פתוחה. z-index לבדו לעולם לא היה מרים אותו מעל
   dialog אחר. **ולכן צריך גם לאפס את סגנון ברירת המחדל של <dialog>**:
   הוא display:none עד [open], ויש לו border, padding, margin:auto ורוחב
   fit-content שהיו הופכים את הרקע לקופסה קטנה במרכז. */
.shell-confirm-backdrop{
  position:fixed; inset:0; z-index:var(--z-overlay);
  display:none; align-items:center; justify-content:center; padding:var(--sp-3);
  background:rgba(0,0,0,.62); backdrop-filter:blur(2px);
  border:0; margin:0; width:100%; height:100%; max-width:none; max-height:none;
  color:inherit; overflow:hidden;
}
.shell-confirm-backdrop[open]{ display:flex; }
/* הדים של הדפדפן מיותר — הרקע שלנו כבר על האלמנט עצמו. */
.shell-confirm-backdrop::backdrop{ background:transparent; }
.shell-confirm{width:min(440px,100%); max-height:86vh; overflow-y:auto}
.shell-confirm-title{font-size:1.0625rem; font-weight:800; margin:0 0 10px}
.shell-confirm-body{font-size:0.9375rem; line-height:1.6; color:var(--text-muted); margin-bottom:var(--sp-3)}
.shell-confirm-actions{display:flex; gap:10px; justify-content:flex-start; flex-wrap:wrap}
.shell-confirm-actions .btn{min-height:44px}

/* --- משימה 63 שלב א, מחלקה א4: חוק האישור האחיד (Shell.confirmMoney) ---
   שלוש שורות קבועות בכל חלון אישור שמזיז כסף: סכום, כיס, יתרה לפני/אחרי.
   קופסה אחת, טיפוגרפיה אחת, בכל המסכים. */
.shell-money-intro{margin:0 0 10px}
.shell-money-box{
  border:1px solid var(--border, rgba(255,255,255,.10)); border-radius:10px;
  padding:10px 12px; background:rgba(255,255,255,.03); margin-bottom:10px;
}
.shell-money-row{display:flex; justify-content:space-between; gap:12px; padding:4px 0; font-size:0.875rem}
.shell-money-row + .shell-money-row{border-top:1px solid rgba(255,255,255,.05)}
.shell-money-row.shell-money-detail{color:var(--text-muted); font-size:0.8125rem}
.shell-money-row.shell-money-amount{font-weight:800; font-size:1rem; color:var(--text)}
.shell-money-row.shell-money-pocket span:last-child{font-weight:700}
.shell-money-row.shell-money-neg span:last-child{color:var(--danger-soft)}
.shell-money-note{margin:0; font-size:0.8125rem; color:var(--text-muted)}

/* --- §6.1 כלל 4: פס עליון **קבוע** לכישלון שמירה. לא טוסט. --- */
.shell-save-bar{
  position:fixed; top:0; inset-inline:0; z-index:calc(var(--z-toast) + 1);
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  padding:10px var(--sp-3); min-height:48px;
  background:linear-gradient(135deg,var(--danger),#B91C1C); color:#fff;
  font-size:0.875rem; font-weight:600; box-shadow:0 6px 20px -6px rgba(0,0,0,.6);
}
.shell-save-bar[hidden]{display:none}
.shell-save-bar-msg{flex:1 1 auto; min-width:0}
.shell-save-bar .btn{min-height:36px; padding-block:6px}

/* --- §6.1 כלל 5: חיווי "נשמר" במקום כפתור. --- */
.shell-saved-hint{
  display:inline-flex; align-items:center; gap:4px; margin-inline-start:8px;
  font-size:0.75rem; font-weight:700; color:var(--ok,#22C55E);
  opacity:1; transition:opacity .4s;
}
.shell-saved-hint.fade{opacity:0}

/* --- §9.4: באנר אין-רשת. --- */
.shell-offline-bar{
  position:fixed; bottom:0; inset-inline:0; z-index:var(--z-toast);
  padding:9px var(--sp-3); text-align:center;
  background:var(--bg-elev-2); border-top:1px solid var(--border);
  color:var(--text-muted); font-size:0.8125rem; font-weight:600;
}
.shell-offline-bar[hidden]{display:none}

/* --- §6.3: שדה נעול בזמן מצ'אף חי — מנוטרל **עם הסבר**, לא נדחה. --- */
.field-locked{opacity:.55; pointer-events:none}
.field-lock-note{
  display:block; margin-top:6px; font-size:0.75rem; font-weight:600;
  color:var(--warn,#F59E0B);
}

/* =====================================================================
   משימה 59 ריצה א: מערכת התצלומים (IMG-3 סעיפים 1.2 עד 1.7 ו-5),
   מעברי המסך והלשוניות (סעיף 2.9), שפת ההשפעות (סעיף 2.10, FX סעיף 4),
   ועיצוב select משותף (DES-9).
   ===================================================================== */

/* ===== מערכת התצלומים ===== */

/* ---- טייר 1, רקע עמוק ---- */
.ph-deep{
  position:relative; overflow:hidden; isolation:isolate;
  border-radius:var(--radius); border:var(--photo-border);
  box-shadow:var(--shadow-card);
  min-height:220px; max-height:280px;
  display:flex; align-items:flex-end; padding:var(--sp-3);
  background:var(--bg-elev);
}
.ph-deep > .ph-img{
  position:absolute; inset:-6%; width:112%; height:112%;
  object-fit:cover; object-position:center 38%;
  filter:var(--img-f-deep); transform:scale(1.02);
  z-index:var(--z-photo-mid); pointer-events:none;
}
.ph-deep > .ph-scrim{
  position:absolute; inset:0; z-index:var(--z-photo-scrim);
  background:var(--scrim-deep); pointer-events:none;
}
.ph-deep > .ph-scrim-rtl{
  position:absolute; inset:0; z-index:var(--z-photo-scrim);
  background:var(--scrim-rtl); pointer-events:none;
}
.ph-deep > .ph-fallback{
  position:absolute; inset:0; z-index:var(--z-photo-back);
  background:
    radial-gradient(120% 90% at 20% 0%, rgba(200,30,30,.32), transparent 60%),
    radial-gradient(100% 80% at 85% 100%, rgba(251,191,36,.22), transparent 55%),
    linear-gradient(160deg,#0e1f14,#0A0E14 60%);
}
.ph-deep > .ph-body{ position:relative; z-index:1; width:100%; min-width:0; }

/* ---- טייר 2, רקע רצועה ---- */
.ph-band{
  position:relative; overflow:hidden; isolation:isolate;
  border-radius:var(--radius-sm); border:var(--photo-border);
  height:96px; display:flex; align-items:center;
  padding-inline:var(--sp-2); background:var(--bg-elev);
}
.ph-band > .ph-img{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; object-position:center 40%;
  filter:var(--img-f-band); z-index:var(--z-photo-mid); pointer-events:none;
}
.ph-band > .ph-scrim{
  position:absolute; inset:0; z-index:var(--z-photo-scrim);
  background:var(--scrim-band); pointer-events:none;
}
.ph-band > .ph-body{ position:relative; z-index:1; min-width:0; }

/* ---- טייר 3, תמונת מוצר ---- */
.ph-product{
  position:relative; display:flex; align-items:center; justify-content:center;
  border-radius:var(--radius-sm);
  background-color:var(--bg-elev); background-image:var(--plate-product);
  border:var(--photo-border);
}
.ph-product > img{
  width:88%; height:88%; object-fit:contain; object-position:center 46%;
  filter:var(--shadow-product) var(--halo-product);
}
.ph-product-40{width:var(--kit-1); height:var(--kit-1); border-radius:8px}
.ph-product-64{width:var(--kit-2); height:var(--kit-2)}
.ph-product-96{width:var(--kit-3); height:var(--kit-3)}
.ph-product-132{width:var(--kit-4); height:var(--kit-4); border-radius:var(--radius)}

/* ---- טייר 4, תמונונת ---- */
.ph-thumb{
  border-radius:50%; object-fit:cover; object-position:center 26%;
  filter:var(--img-f-thumb); background:var(--photo-plate);
  border:var(--photo-border-strong); flex:none; display:block;
}
.ph-thumb-24{width:var(--img-1); height:var(--img-1); border-width:1px}
.ph-thumb-34{width:var(--img-2); height:var(--img-2); border-width:1px}
.ph-thumb-48{width:var(--img-3); height:var(--img-3)}
.ph-thumb-64{width:var(--img-4); height:var(--img-4)}
.ph-thumb-96{width:var(--img-5); height:var(--img-5); border-width:3px}
.ph-thumb-132{width:var(--img-6); height:var(--img-6); border-width:3px}
.ph-thumb-empty{
  border-radius:50%; flex:none;
  background:linear-gradient(135deg,#1e2a3f,#0f1622);
  border:var(--photo-border-strong);
  display:flex; align-items:center; justify-content:center;
  font-family:'Karantina'; color:var(--text-dim); line-height:1;
}

/* ---- טייר 5, אייקון ---- */
.ph-mark{ object-fit:contain; flex:none; filter:drop-shadow(0 3px 8px rgba(0,0,0,.55)); }
.ph-mark-18{width:18px; height:18px}
.ph-mark-24{width:var(--img-1); height:var(--img-1)}
.ph-mark-34{width:var(--img-2); height:var(--img-2)}
.ph-mark-48{width:var(--img-3); height:var(--img-3)}
.ph-mark-64{width:var(--img-4); height:var(--img-4)}
.ph-mark-onwhite{
  background:#fff; padding:4px; border-radius:var(--radius-sm);
  filter:none; box-shadow:0 2px 8px rgba(0,0,0,.5);
}
.ph-mark-pin{
  position:absolute; inset-inline-end:-4px; bottom:-4px;
  background:var(--bg-elev); border-radius:50%; padding:4px;
  border:1px solid rgba(255,255,255,.15); filter:none;
}

/* ---- טייר 6, תא גלריה ---- */
.ph-grid-3{display:grid; grid-template-columns:repeat(3,1fr); gap:8px}
.ph-grid-2{display:grid; grid-template-columns:repeat(2,1fr); gap:var(--sp-1)}
.ph-tile{
  position:relative; aspect-ratio:var(--ar-tile);
  border-radius:var(--radius-sm); overflow:hidden;
  background:var(--photo-plate); border:var(--photo-border);
}
.ph-tile > img{
  width:100%; height:100%; object-fit:cover; object-position:center 30%;
  filter:var(--img-f-mid);
}
.ph-tile-cap{
  position:absolute; inset-inline:0; bottom:0; z-index:1;
  padding:14px 8px 6px; background:var(--scrim-tile);
  font-size:0.6875rem; line-height:1.25; color:var(--text);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}

/* ---- תלבושות (IMG-3 פרק 6): משטח, הילה ושני צללים. אין חריג ---- */
.kit{
  position:relative; flex:none;
  display:flex; align-items:center; justify-content:center;
  border-radius:var(--radius-sm);
  background-color:var(--bg-elev);
  background-image:var(--plate-product);
  border:var(--photo-border);
}
.kit > img{
  width:86%; height:86%; object-fit:contain; object-position:center 46%;
  filter:var(--shadow-product) var(--halo-product);
}
.kit-40 {width:var(--kit-1); height:var(--kit-1); border-radius:8px}
.kit-64 {width:var(--kit-2); height:var(--kit-2)}
.kit-96 {width:var(--kit-3); height:var(--kit-3)}
.kit-132{width:var(--kit-4); height:var(--kit-4); border-radius:var(--radius)}

/* ---- דהיית טעינה (IMG-3 סעיף 5) ----
   ברירת המחדל של כל תמונה היא opacity:1. המחלקה רק מפעילה אנימציה חד
   פעמית, ולכן כשל JS או כשל load אינם משאירים תמונה בלתי נראית.
   אין כאן prefers-reduced-motion משלנו: הכלל הגורף למעלה (animation-duration
   .001ms) כבר מנטרל. */
@keyframes ph-in{
  from{ opacity:0; transform:scale(1.014) }
  to  { opacity:1; transform:none }
}
[data-ph-fade].ph-in{ animation:ph-in 220ms var(--ease) }
.ph-deep > .ph-img[data-ph-fade].ph-in{ animation:ph-in 320ms var(--ease) }
.ph-in-d1{ animation-delay:40ms }
.ph-in-d2{ animation-delay:80ms }
.ph-in-d3{ animation-delay:120ms }
.ph-in-d4{ animation-delay:160ms }
.ph-in-d5{ animation-delay:200ms }

/* ===== מעברי המסך (משימה 59 סעיף 2.9א) =====
   view-transition-name על הכותרת מבודד אותה מאנימציית השורש, כך שהיא
   נשארת יציבה בזמן שהתוכן מתחלף. בלוק ה-reduced-motion חובה בנפרד:
   הכלל הגורף למעלה אינו מגיע למחלקות המדומות של המעבר. */
::view-transition-old(root){ animation:vt-out 120ms var(--ease) both }
::view-transition-new(root){ animation:vt-in 180ms var(--ease) both }
@keyframes vt-out{ to{ opacity:0 } }
@keyframes vt-in{ from{ opacity:0; transform:translateY(6px) } }
#shell-header{ view-transition-name:shell-header }
@media (prefers-reduced-motion:reduce){
  ::view-transition-old(*), ::view-transition-new(*){ animation:none !important }
}

/* ===== לשוניות שזזות (משימה 59 סעיף 2.9ג) ===== */
/* במיקום הראשון האינדיקטור מקבל no-anim כדי שלא יחליק ממיקום אפס בטעינה */
.tab-indicator.no-anim{ transition:none }
/* animation ולא transition, כי הפאנל מגיע מ-display:none */
.tab-panel.active{ animation:tab-in 160ms var(--ease) }
@keyframes tab-in{ from{ opacity:0; transform:translateY(4px) } }

/* ===== select משותף (DES-9): רכיב מערכת בהיר על דף כהה ===== */
select{
  background:var(--bg-elev-2); color:var(--text);
  border:1px solid var(--border); border-radius:var(--radius-sm);
  padding:0.4375rem 0.625rem; min-height:44px;
}
select:focus-visible{ outline:none; box-shadow:var(--focus-ring) }

/* ===== שפת ההשפעות (משימה 59 סעיף 2.10, FX סעיף 4) =====
   הרכיב נבנה בריצה א ואינו מחווט לשום מסך עד ריצה ג.
   רמה 10 בלבד מקבלת הילה. אסור להנפיש שבבים חוץ מדהיית הכניסה. */
.fx-chip{
  display:inline-flex; align-items:center; gap:4px;
  min-height:24px; padding:2px 8px; border-radius:var(--radius-chip);
  font-size:0.6875rem; font-weight:700; line-height:1;
  background:color-mix(in srgb, var(--fx-c) 14%, transparent);
  color:var(--fx-c); border:1px solid color-mix(in srgb, var(--fx-c) 45%, transparent);
}
.fx-chip.is-neg{ box-shadow:inset 0 0 0 1px rgba(194,35,35,.35) }
.fx-chip .fx-icon{ width:12px; height:12px }
.fx-1{--fx-c:#8B98A9} .fx-2{--fx-c:#45C08A} .fx-3{--fx-c:#2DD4BF}
.fx-4{--fx-c:#38BDF8} .fx-5{--fx-c:#7C8CF8} .fx-6{--fx-c:#A78BFA}
.fx-7{--fx-c:#F472B6} .fx-8{--fx-c:#FB923C} .fx-9{--fx-c:#FBBF24}
.fx-10{
  --fx-c:#FBBF24;
  background:linear-gradient(90deg, rgba(248,113,113,.20), rgba(251,191,36,.20));
  border-color:rgba(251,191,36,.6);
  box-shadow:0 0 12px rgba(251,191,36,.25);
}

/* =====================================================================
   משימה 59 ריצה ג: רכיבי העיצוב המשותפים (DES ממצאים 11-25) ותמיכת
   onerror של מערכת התצלומים.
   ===================================================================== */

/* תמונה שקובץ המקור שלה נכשל חוזרת למצב של היום: נעלמת, והפולבק
   (גרדיאנט, ph-fallback או פריסת הטקסט הקיימת) נשאר. IMG-3 סעיף 5. */
img.is-broken{display:none !important}

/* DES-11: btn-sm משמש גם לפעולות ראשיות. בפריסת טלפון יעד המגע 44 */
html[data-layout="phone"] .btn-sm{min-height:44px}
/* DES-12: צ'יפ לחיץ מקבל יעד מגע מלא */
.chip-clickable{min-height:44px}

/* DES-17: הגרדיאנט "אין תמונה" שהיה משוכפל 21 פעמים ב-9 קבצים */
.photo-empty{
  background:linear-gradient(135deg,var(--bg-hover),#0f1622);
  display:flex; align-items:center; justify-content:center;
  color:var(--text-dim); border:1px solid var(--border);
}

/* DES-19: אריח נתון אחד במקום חמישה מימושים */
.stat-tile{
  background:var(--bg-elev-2); border:1px solid var(--border);
  border-radius:var(--radius-sm); padding:10px 12px;
  display:flex; flex-direction:column; gap:2px; min-width:0; text-align:center;
}
.stat-tile-value{font-family:'Karantina','Heebo',sans-serif; font-size:1.375rem; line-height:1.1; color:var(--text)}
.stat-tile-value.gold{color:var(--gold)}
.stat-tile-label{font-size:0.71875rem; color:var(--text-dim)}

/* DES-20: רשת בורר המנהלים, מימוש אחד במקום שישה */
.picker-btn{
  display:flex; flex-direction:column; align-items:center; gap:8px;
  background:var(--bg-elev); border:1px solid var(--border); border-radius:var(--radius);
  padding:var(--sp-2); color:var(--text); cursor:pointer; min-height:44px;
  transition:border-color var(--dur) var(--ease), background var(--dur) var(--ease), transform var(--dur) var(--ease);
}
.picker-btn:hover{background:var(--bg-elev-2); transform:translateY(-2px)}
.picker-btn.selected, .picker-btn[aria-pressed="true"]{border-color:var(--gold)}
.picker-photo{
  width:var(--img-4); height:var(--img-4); border-radius:50%;
  object-fit:cover; object-position:center 26%; filter:var(--img-f-thumb);
  border:var(--photo-border-strong);
}
.picker-photo-empty{
  width:var(--img-4); height:var(--img-4); border-radius:50%; flex:none;
  background:linear-gradient(135deg,var(--bg-hover),#0f1622);
  border:var(--photo-border-strong);
  display:flex; align-items:center; justify-content:center;
  font-family:'Karantina','Heebo',sans-serif; font-size:1.5rem; color:var(--text-dim);
}

/* DES-21: כותרת מקטע אחת. הגודל הקנוני נלקח מהשכיח בקבצים (1.25rem קרנטינה) */
.section-title{
  font-family:'Karantina','Heebo',sans-serif; font-weight:400;
  font-size:1.25rem; letter-spacing:.5px; color:var(--text); margin:0;
}

/* DES-22: מודל אחד במקום חמישה מימושים. שמות המחלקות הישנים נשארים
   בסימון ה-JS; הכללים החזותיים יושבים כאן פעם אחת */
.modal-backdrop{
  position:fixed; inset:0; z-index:var(--z-overlay);
  display:flex; align-items:center; justify-content:center; padding:var(--sp-3);
  background:rgba(0,0,0,.62); backdrop-filter:blur(2px);
}
.modal-card{
  width:min(440px,100%); max-height:86vh; overflow-y:auto;
  background:var(--bg-elev); border:1px solid var(--border);
  border-radius:var(--radius); box-shadow:var(--shadow-card); padding:var(--sp-3);
}

/* DES-24: שלד טעינה אחיד. Shell.skeleton() מרכיב את השורות */
.skel-line{height:12px; border-radius:8px; margin-block:10px}
.skel-line.w60{width:60%} .skel-line.w80{width:80%} .skel-line.w40{width:40%}

/* ---- רקע העמוד של השלד (תמונה 45) ומצב הטעינה של השכבה (תמונה 52) ---- */
#shell-page-bg{ position:fixed; inset:0; z-index:-1; overflow:hidden; pointer-events:none; }
#shell-page-bg > img{
  width:100%; height:100%; object-fit:cover; object-position:center 30%;
  filter:var(--img-f-deep) brightness(.7);
}
#shell-page-bg::after{ content:''; position:absolute; inset:0; background:var(--scrim-flat); }
/* המסכים השקטים והשטוחים אינם מקבלים את הרקע (IMG-4 ס' 5, IMG-3 ס' 4 כלל 5),
   ו-login נושא את רקע הסף שלו */
html[data-page-key="transparency"] #shell-page-bg,
html[data-page-key="admin"] #shell-page-bg,
html[data-page-key="tactics"] #shell-page-bg,
html[data-page-key="matchup"] #shell-page-bg,
html[data-page-key="table"] #shell-page-bg,
html[data-page-key="training"] #shell-page-bg,
html[data-page-key="medical"] #shell-page-bg,
html[data-page-key="entry"] #shell-page-bg{ display:none; }

.shell-layer-loading{
  position:relative; overflow:hidden; isolation:isolate;
  border-radius:var(--radius); min-height:50vh;
}
.shell-layer-loading > img{
  position:absolute; inset:0; width:100%; height:100%;
  object-fit:cover; filter:var(--img-f-deep); z-index:var(--z-photo-mid);
}
.shell-layer-loading > .ph-scrim{
  position:absolute; inset:0; background:var(--scrim-deep);
  z-index:var(--z-photo-scrim); pointer-events:none;
}
.shell-layer-loading-body{ position:relative; z-index:1; padding:var(--sp-3); }

/* DES-25: מצב ריק אחיד */
.empty-state{
  display:flex; flex-direction:column; align-items:center; gap:6px;
  text-align:center; padding:var(--sp-4) var(--sp-2); color:var(--text-dim);
}
.empty-state > .icon{width:28px; height:28px; opacity:.6}
.empty-state-title{font-weight:700; color:var(--text-muted); font-size:0.9375rem}
.empty-state-sub{font-size:0.8125rem; max-width:40ch; margin:0}

/* =====================================================================
   משימה 59 ריצה ד, DYN פרק 4 טכניקה 5: חזית יוטיוב אחידה.
   פוסטר + פליי, iframe רק בלחיצה. משמש את חדר הווידאו, הנבחרת וכרטיס
   השחקן — חזית אחת לכל האמבדים.
   ===================================================================== */
.yt-facade-frame{
  position:relative; aspect-ratio:16/9; width:100%;
  border-radius:var(--radius-sm); overflow:hidden; background:#000;
}
.yt-facade-frame iframe{ position:absolute; inset:0; width:100%; height:100%; border:0; }
.yt-facade{
  position:absolute; inset:0; width:100%; height:100%;
  background-size:cover; background-position:center;
  border:0; cursor:pointer; display:flex; align-items:center; justify-content:center;
}
.yt-facade::after{ content:''; position:absolute; inset:0; background:rgba(4,6,10,.25); transition:background var(--dur) var(--ease); }
.yt-facade:hover::after{ background:rgba(4,6,10,.1); }
.yt-facade:focus-visible{ outline:none; box-shadow:var(--focus-ring) inset; }
.yt-facade-play{
  position:relative; z-index:1; width:52px; height:52px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  background:rgba(4,6,10,.72); color:var(--text);
  transition:transform var(--dur) var(--ease);
}
.yt-facade:hover .yt-facade-play{ transform:scale(1.08); }
@media (prefers-reduced-motion:reduce){ .yt-facade:hover .yt-facade-play{ transform:none; } }

/* =====================================================================
   משימה 59 ריצה ד, סעיף 8.5 + DYN פרק 1: משפחת המסמכים.
   רכיב אחד `.doc` + חמישה מודיפיירים: doc--contract, doc--letter,
   doc--receipt, doc--summary, doc--dossier.
   עיקרון העל: הנייר הוא חפץ מודפס, האפליקציה היא הסביבה. כפתורי פעולה
   יושבים על המשטח הכהה מתחת לנייר, לעולם לא מודפסים עליו.
   color-scheme:light על .doc בלבד — שדות טופס על הנייר בהירים.
   ===================================================================== */
.doc{
  position:relative;
  background:#f4efe4; color:#2B2416; color-scheme:light;
  font-family:'Frank Ruhl Libre',Georgia,'Times New Roman',serif;
  border-radius:2px;                       /* נייר אינו כרטיס */
  box-shadow:0 24px 48px -12px rgba(0,0,0,.6);
  line-height:1.6;
}
/* טקסטורת גרעון: feTurbulence כ-data-URL, נכס אחד משותף, אטימות 0.035 */
.doc::before{
  content:''; position:absolute; inset:0; pointer-events:none; opacity:.035;
  border-radius:inherit;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='g'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/></filter><rect width='160' height='160' filter='url(%23g)'/></svg>");
}
.doc h1,.doc h2,.doc h3,.doc h4,.doc .doc-title{
  font-family:'Frank Ruhl Libre',Georgia,serif; color:#1a150c; font-weight:700; letter-spacing:.2px;
}
/* Heebo נשארת לתוויות ולסכומים; המינוס לא מתהפך ב-RTL (DYN פרק 3 הנחיה 4) */
.doc .num, .doc .doc-amount{
  font-family:'Heebo',system-ui,sans-serif;
  font-variant-numeric:tabular-nums lining-nums;
  unicode-bidi:isolate; direction:ltr;
}
.doc label, .doc .doc-label{ font-family:'Heebo',system-ui,sans-serif; }
/* אנטומיה קבועה: כותרת עם סמל ומספר מסמך, גוף, אזור חתימה/סיכום */
.doc-head{
  display:flex; flex-direction:column; align-items:center; gap:2px; text-align:center;
  border-bottom:2px solid #2B2416; padding-bottom:10px; margin-bottom:12px;
}
.doc-no{ font-size:0.71875rem; color:#6b5f4a; }
.doc-sign-row{ display:flex; gap:var(--sp-3); margin:14px 0 10px; }
.doc-sign{ flex:1; text-align:center; font-size:0.71875rem; color:#4b4231; padding-top:18px; border-top:1px solid #2B2416; }
/* חוזה ומכתב: פס קיפול עדין */
.doc--contract .doc-fold, .doc--letter .doc-fold{
  position:absolute; left:0; right:0; top:33%; height:1px; pointer-events:none;
  background:linear-gradient(90deg, transparent, rgba(43,36,22,.14), transparent);
}
/* קבלה: קצה קרוע — משולשי mask של 8px בתחתית */
.doc--receipt{
  -webkit-mask-image:linear-gradient(#000 0 0), conic-gradient(from -45deg at 50% 100%, #0000 90deg, #000 0);
  -webkit-mask-size:100% calc(100% - 8px), 16px 8px;
  -webkit-mask-position:top, bottom;
  -webkit-mask-repeat:no-repeat, repeat-x;
  mask-image:linear-gradient(#000 0 0), conic-gradient(from -45deg at 50% 100%, #0000 90deg, #000 0);
  mask-size:100% calc(100% - 8px), 16px 8px;
  mask-position:top, bottom;
  mask-repeat:no-repeat, repeat-x;
}
/* מכתב התאחדות: חותם זהב רדיאלי */
.doc-seal{
  width:44px; height:44px; border-radius:50%; flex:none;
  background:radial-gradient(circle at 35% 30%, #f3d98b, #d4af37 55%, #9c7c1e);
  box-shadow:inset 0 0 0 3px rgba(255,255,255,.25), 0 1px 3px rgba(43,36,22,.35);
  display:flex; align-items:center; justify-content:center;
}
.doc-seal img{ width:30px; height:30px; object-fit:contain; }
/* חותמת דיו: סיבוב, blend, דיו לא אחיד */
.doc-stamp{
  display:inline-block; padding:4px 12px;
  border:2px solid rgba(200,30,30,.55); border-radius:4px;
  color:rgba(200,30,30,.72); font-weight:700; letter-spacing:1px;
  transform:rotate(-8deg); mix-blend-mode:multiply;
  -webkit-mask-image:radial-gradient(circle at 40% 45%, #000 55%, rgba(0,0,0,.55));
  mask-image:radial-gradient(circle at 40% 45%, #000 55%, rgba(0,0,0,.55));
}
/* --- חלון המסמך של השלד: רקע נכנס 120ms לפני הנייר --- */
.doc-backdrop{
  position:fixed; inset:0; z-index:var(--z-overlay);
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:var(--sp-2); padding:var(--sp-3);
  background:rgba(4,6,10,.72); backdrop-filter:blur(8px);
  animation:doc-bd-in 120ms var(--ease) both;
}
.doc-backdrop .doc{
  width:min(340px,94vw); max-height:min(78dvh,640px); overflow-y:auto;
  overscroll-behavior:contain; -webkit-overflow-scrolling:touch;
  padding:var(--sp-3) var(--sp-2); font-size:0.84375rem;
  animation:doc-pop-in var(--dur) var(--ease) 120ms both;
}
/* הפעולות על המשטח הכהה, לא על הנייר */
.doc-actions{ display:flex; gap:8px; flex-wrap:wrap; justify-content:center; }
.doc-actions .btn{ min-height:44px; }
@keyframes doc-bd-in{ from{ opacity:0 } }
@keyframes doc-pop-in{ from{ opacity:0; transform:scale(.96) } }
@media (prefers-reduced-motion:reduce){
  .doc-backdrop, .doc-backdrop .doc{ animation:none !important; }
}

/* חותמת ההצלחה בחתימה (DYN פרק 2 פריט 7) — שכבת חותמת מעל הנייר */
.doc-stamp-overlay{
  position:sticky; top:30%; z-index:2; display:flex; justify-content:center;
  pointer-events:none; height:0; overflow:visible;
}
.doc-stamp-overlay .doc-stamp{ font-size:1.5rem; padding:8px 22px; background:rgba(244,239,228,.5); }
.doc-stamp-pop{ animation:stamp-in 320ms cubic-bezier(.2,1.45,.4,1) both; }
@keyframes stamp-in{
  from{ opacity:0; transform:scale(1.6) rotate(-14deg) }
  to{ transform:scale(1) rotate(-8deg) }
}
@media (prefers-reduced-motion:reduce){
  .doc-stamp-pop{ animation:stamp-fade 160ms var(--ease) both; }
  @keyframes stamp-fade{ from{ opacity:0 } }
}
/* קישור על נייר: דיו כחול של חותמת דואר, לא תכלת המסך הכהה */
.doc a{ color:#274c8f }

/* =====================================================================
   משימה 59 ריצה ד, סעיף 9 + DYN פרקים 2-4: ערכת החיות.
   חוק גלובלי: transform ו-opacity בלבד, כל אנימציה ניתנת לקטיעה,
   המצב הסופי במחלקה. RM = ההתנהגות תחת prefers-reduced-motion.
   ===================================================================== */

/* --- DYN 2.1: לחיצת כפתור — scale(.97) + brightness(.94), כניסה 90ms, שחרור 160ms --- */
.btn{ transition:transform 160ms var(--ease), filter 160ms var(--ease); }
.btn:active{ transform:scale(.97); filter:brightness(.94); transition-duration:90ms; }
@media (prefers-reduced-motion:reduce){
  .btn{ transition:filter 160ms var(--ease); }
  .btn:active{ transform:none; filter:brightness(.94); }
}

/* --- DYN 2.2: לחיצת לשונית — שכבת אור שדועכת 160ms. בלי ripple. --- */
.tab-btn{ position:relative; }
.tab-btn::after{
  content:''; position:absolute; inset:0; border-radius:inherit; pointer-events:none;
  background:rgba(255,255,255,.06); opacity:0; transition:opacity 160ms var(--ease);
}
.tab-btn:active::after{ opacity:1; transition:none; }
@media (prefers-reduced-motion:reduce){
  .tab-btn::after{ transition:none; }
}

/* --- DYN 2.3: לחיצת צ'יפ שאינו fx — translateY(1px) והבהרת מסגרת, 120ms --- */
button.chip, a.chip, .chip-clickable{
  transition:transform 120ms var(--ease), border-color 120ms var(--ease);
}
button.chip:active, a.chip:active, .chip-clickable:active{
  transform:translateY(1px); border-color:rgba(255,255,255,.28);
}
@media (prefers-reduced-motion:reduce){
  button.chip:active, a.chip:active, .chip-clickable:active{ transform:none; }
}

/* --- DYN 2.4: ספירת ארנק — הבזק זהב דועך (ה-rAF ב-Shell.countUpEl) --- */
.wallet-flash{ animation:wallet-flash 900ms var(--ease) both; }
@keyframes wallet-flash{ 0%{ color:var(--gold) } 100%{} }

/* --- DYN 2.5: נקודת LIVE ל-SSE — נקודה 8 עם טבעת פועמת 1.6s --- */
.live-dot{
  position:relative; display:inline-block; width:8px; height:8px; flex:none;
  border-radius:50%; background:var(--danger); margin-inline-end:5px; vertical-align:middle;
}
.live-dot::before{
  content:''; position:absolute; inset:-3px; border-radius:50%;
  border:1.5px solid var(--danger); opacity:.7;
  animation:live-pulse 1.6s var(--ease) infinite;
}
@keyframes live-pulse{ 0%{ transform:scale(.6); opacity:.8 } 70%{ transform:scale(1.4); opacity:0 } 100%{ opacity:0 } }
@media (prefers-reduced-motion:reduce){ .live-dot::before{ animation:none; opacity:0; } }

/* --- DYN 2.6: שלד רק לטעינות מעל שנייה — נגלה אחרי השהיה של 1s --- */
.skel{ opacity:0; animation:skel-shimmer 1.4s ease-in-out infinite, skel-appear 200ms linear 1s forwards; }
@keyframes skel-appear{ to{ opacity:1 } }
@media (prefers-reduced-motion:reduce){
  .skel{ animation:skel-appear 1ms linear 1s forwards; opacity:0; }
}

/* --- DYN 2.8: פופ badge בניווט בעליית מונה --- */
.badge-pop{ animation:badge-pop var(--dur) var(--ease); }
@keyframes badge-pop{ 0%{ transform:scale(1) } 50%{ transform:scale(1.25) } 100%{ transform:scale(1) } }
@media (prefers-reduced-motion:reduce){ .badge-pop{ animation:none; } }

/* --- DYN 2.9: וי הצלחה — ציור הקו אחרי 60ms --- */
.check-draw path{
  stroke-dasharray:24; stroke-dashoffset:24;
  animation:check-draw var(--dur) var(--ease) 60ms forwards;
}
@keyframes check-draw{ to{ stroke-dashoffset:0 } }
@media (prefers-reduced-motion:reduce){ .check-draw path{ animation:none; stroke-dashoffset:0; } }

/* --- DYN 2.10: Yellow Fade — דעיכת רקע 1.5s על תוכן שהשתנה מרענון --- */
.row-updated{ animation:row-updated 1.5s var(--ease) both; }
@keyframes row-updated{ from{ background-color:rgba(251,191,36,.12) } to{ background-color:transparent } }
@media (prefers-reduced-motion:reduce){ .row-updated{ animation:none; } }

/* --- DYN 3.2: כותרת סקשן — קו גרדיאנט שדועך לכיוון ההמשך, ומונה קטן --- */
.section-title{ position:relative; padding-bottom:6px; }
.section-title::after{
  content:''; position:absolute; inset-inline-start:0; bottom:0; height:1px; width:100%;
  background:linear-gradient(to left, rgba(255,255,255,.18), transparent 70%);
}
.section-count{
  font-family:'Heebo',sans-serif; font-size:0.71875rem; color:var(--text-dim);
  vertical-align:middle; margin-inline-start:4px;
}

/* --- DYN 3.10: מגע — touch-action גלובלי, אזור מגע מורחב לצ'יפים לחיצים --- */
html{ touch-action:manipulation; }
button.chip, a.chip, .chip-clickable{ position:relative; }
button.chip::before, a.chip::before, .chip-clickable::before{
  content:''; position:absolute; inset:-6px;
}

/* --- DYN 4.3: תאורת מצב אמביינטית — radial-gradient יחיד לפי data-mode.
   מעבר 800ms בקצות מצב בלבד; אינה נוגעת בצבעי מועדון; RM: החלפה מיידית --- */
#shell-ambient{
  position:fixed; inset:0; z-index:0; pointer-events:none;
  opacity:0; transition:opacity 800ms var(--ease), background 800ms var(--ease);
}
html[data-mode="pre"] #shell-ambient{ opacity:1; background:radial-gradient(80% 60% at 50% 0%, rgba(56,120,190,.10), transparent 70%); }
html[data-mode="live"] #shell-ambient{ opacity:1; background:radial-gradient(80% 60% at 50% 0%, rgba(214,120,40,.10), transparent 70%); }
html[data-mode="win"] #shell-ambient{ opacity:1; background:radial-gradient(80% 60% at 50% 0%, rgba(212,175,55,.12), transparent 70%); }
html[data-mode="loss"] #shell-ambient{ opacity:1; background:radial-gradient(80% 60% at 50% 0%, rgba(148,163,184,.08), transparent 70%); }
@media (prefers-reduced-motion:reduce){ #shell-ambient{ transition:none; } }

/* --- DYN 4.8: משמעת קומפוזיטור — רשימות ארוכות מצוירות רק כשנראות.
   על פריטי רשימה (לא על שורות טבלה — display:table-row אינו תומך).
   contain-intrinsic-size שומר את גובה הגלילה כשהפריט מחוץ למסך. --- */
.msg-item{ content-visibility:auto; contain-intrinsic-size:auto 88px; }
.home-feed-item{ content-visibility:auto; contain-intrinsic-size:auto 160px; }
.cv-auto{ content-visibility:auto; contain-intrinsic-size:auto 96px; }

/* ===== משימה 83 שלב ג: צ'יפ ההסבר וחלון שלוש הרמות (copy83.json) =====
   רמה 1 נשארת בלי טקסט; הצ'יפ פותח את רמה 2, ו"הראיה המלאה" את רמה 3.
   z-index על סולם הטוקנים בלבד — מעל תוכן, מתחת לטוסטים. */
.info83{display:inline-flex; align-items:center; justify-content:center; width:20px; height:20px; padding:0;
  border-radius:50%; border:1px solid var(--border); background:transparent; color:var(--text-dim);
  cursor:pointer; vertical-align:middle; margin-inline-start:6px; transition:color var(--dur), border-color var(--dur)}
.info83:hover{color:var(--text); border-color:var(--text-dim)}
/* משימה 96 §1 (יעד מגע 44px): האייקון נשאר 20px, ושטח הלחיצה סביבו
   גדל ל-44x44 בלי לזוז אף פיקסל בפריסה. נמדד בדפדפן, לא ב-grep. */
.info83{position:relative}
.info83::after{
  content:""; position:absolute; top:50%; inset-inline-start:50%;
  width:var(--tap); height:var(--tap); transform:translate(50%,-50%);
}
.info83 .info83-ic{width:13px; height:13px; display:block}
.info83-pop{position:absolute; z-index:var(--z-overlay); max-width:340px; min-width:220px;
  background:var(--bg-elev-2); border:1px solid var(--border); border-radius:12px; padding:0.75rem 0.875rem;
  box-shadow:var(--shadow-card); font-size:0.84375rem; line-height:1.55; color:var(--text-muted)}
.info83-head{display:flex; align-items:center; justify-content:space-between; gap:8px;
  font-weight:700; color:var(--text); margin-bottom:4px; font-size:0.875rem}
.info83-x{background:transparent; border:none; color:var(--text-dim); cursor:pointer; padding:2px; display:inline-flex}
.info83-x svg{width:14px; height:14px}
.info83-x:hover{color:var(--text)}
.info83-more{margin-top:8px}
.info83-detail{margin-top:8px; padding-top:8px; border-top:1px solid var(--border); color:var(--text-muted)}

/* =====================================================================
   משימה 91 ריצה 91א — בלוק §91: שמונת רכיבי הערוץ (D-490), המחשב לרוחב
   (D-501), שכבת העזרה (D-502/D-503), הנגן הגלובלי (D-492), מונה הסרגל (D-498).
   **תוספת בלבד** — אף טוקן צבע/פונט קיים לא שונה. ההגדלה (D-494) יושבת
   בשורות הקיימות של html{font-size} ו---sp-* למעלה, לא כאן.
   ===================================================================== */
:root{
  --sidebar-w:236px;            /* רוחב סרגל הצד במחשב (D-501) */
  --hero91-h:52dvh;             /* גובה ההירו (תוכנית הערוץ 29.08) */
  --tile91-min:150px;
}

/* ---------- Hero ---------- */
.hero91{ position:relative; min-height:var(--hero91-h); border-radius:var(--radius); overflow:hidden; display:flex; align-items:flex-end;
  background:var(--bg-elev); margin-bottom:var(--sp-2); isolation:isolate; }
.hero91.is-compact{ min-height:calc(var(--hero91-h) * .6); }
.hero91-img, .hero91-video{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:var(--z-photo-back); filter:var(--img-f-mid); }
.hero91-scrim{ position:absolute; inset:0; z-index:var(--z-photo-scrim); pointer-events:none;
  background:linear-gradient(to top, rgba(10,14,20,.96) 0%, rgba(10,14,20,.78) 38%, rgba(10,14,20,.28) 70%, rgba(10,14,20,.05) 100%); }
.hero91-body{ position:relative; z-index:var(--z-photo-product); padding:var(--sp-3); width:100%; }
.hero91-kicker{ font-size:0.78125rem; color:var(--gold); font-weight:700; letter-spacing:.3px; margin-bottom:6px; display:flex; align-items:center; gap:8px; }
.hero91-title{ font-family:'Karantina','Heebo',sans-serif; font-weight:400; font-size:clamp(2rem,6vw,3rem); line-height:1.02; margin:0; color:var(--text); }
.hero91-sub{ color:var(--text-muted); margin:6px 0 0; font-size:0.9375rem; max-width:60ch; }
.hero91-lines{ list-style:none; margin:var(--sp-2) 0 0; padding:0; display:flex; flex-direction:column; gap:6px; }
.hero91-line{ display:flex; }
.hero91-line > a, .hero91-line > span{ display:flex; align-items:center; gap:8px; color:var(--text); text-decoration:none; font-size:0.9375rem;
  background:rgba(255,255,255,.06); border:1px solid var(--border); border-radius:var(--radius-sm); padding:8px 12px; width:100%; min-height:44px; }
.hero91-line > a:hover{ border-color:rgba(251,191,36,.45); }
.hero91-line.is-up > *{ border-inline-start:3px solid var(--success); }
.hero91-line.is-down > *{ border-inline-start:3px solid var(--danger); }
.hero91-line.is-warn > *{ border-inline-start:3px solid var(--gold); }
.hero91-chev{ margin-inline-start:auto; color:var(--text-dim); }
.hero91-foot{ display:flex; flex-wrap:wrap; gap:8px; align-items:center; margin-top:var(--sp-2); }
.hero91-chip{ background:rgba(255,255,255,.08); }

/* ---------- Tile ---------- */
.tile91{ position:relative; display:flex; flex-direction:column; gap:4px; min-height:var(--tile91-min); padding:var(--sp-2);
  background:var(--bg-elev); border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow-card);
  color:var(--text); text-decoration:none; overflow:hidden; isolation:isolate; text-align:start; font:inherit; cursor:default; }
a.tile91, button.tile91{ cursor:pointer; transition:transform var(--dur) var(--ease), border-color var(--dur) var(--ease); }
a.tile91:hover, button.tile91:hover{ transform:translateY(-2px); border-color:rgba(251,191,36,.45); }
a.tile91:focus-visible, button.tile91:focus-visible{ outline:none; box-shadow:var(--focus-ring); }
.tile91.is-wide{ grid-column:1 / -1; }
.tile91-photo{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:var(--z-photo-back); filter:var(--img-f-deep); }
.tile91-scrim{ position:absolute; inset:0; z-index:var(--z-photo-scrim); background:linear-gradient(to top, rgba(10,14,20,.92), rgba(10,14,20,.55)); }
.tile91-top{ display:flex; align-items:center; justify-content:space-between; gap:8px; color:var(--text-dim); position:relative; z-index:var(--z-photo-product); }
.tile91-tag{ font-size:0.65625rem; font-weight:700; color:var(--gold); border:1px solid rgba(251,191,36,.35); border-radius:var(--radius-chip); padding:2px 8px; }
.tile91-value{ font-family:'Karantina','Heebo',sans-serif; font-size:2.25rem; line-height:1; color:var(--text); position:relative; z-index:var(--z-photo-product); margin-top:auto; }
.tile91-value.is-up, .tone-up .tile91-value{ color:var(--success); }
.tile91-value.is-down, .tone-down .tile91-value{ color:var(--danger-soft); }
.tile91-value.is-warn, .tone-warn .tile91-value{ color:var(--gold); }
.tile91-value.is-gold, .tone-gold .tile91-value{ color:var(--gold); }
.tile91-label{ font-size:0.84375rem; color:var(--text-muted); position:relative; z-index:var(--z-photo-product); }
.tile91-sub{ font-size:0.75rem; color:var(--text-dim); position:relative; z-index:var(--z-photo-product); }
.tile91-chev{ position:absolute; inset-inline-end:10px; bottom:10px; color:var(--text-dim); z-index:var(--z-photo-product); }
.tile91 .badge-count{ position:static; }

/* ---------- Sheet ---------- */
.sheet91{ position:fixed; inset:auto 0 0 0; margin:0; width:100%; max-width:none; max-height:88dvh; border:0; padding:0;
  background:var(--bg-elev); color:var(--text); border-radius:var(--radius) var(--radius) 0 0; box-shadow:0 -12px 40px -8px rgba(0,0,0,.7);
  transform:translateY(100%); transition:transform var(--dur) var(--ease); display:none; flex-direction:column; }
.sheet91[open]{ display:flex; }
.sheet91.is-open{ transform:translateY(0); }
.sheet91::backdrop{ background:rgba(0,0,0,.55); backdrop-filter:blur(2px); }
.sheet91-grab{ width:44px; height:5px; border-radius:99px; background:var(--text-dim); margin:10px auto 4px; opacity:.6; }
.sheet91-head{ display:flex; align-items:center; gap:10px; padding:6px var(--sp-3) 10px; border-bottom:1px solid var(--border); }
.sheet91-title{ flex:1 1 auto; font-family:'Karantina','Heebo',sans-serif; font-weight:400; font-size:1.5rem; margin:0; min-width:0; }
.sheet91-x{ width:40px; height:40px; border-radius:50%; background:var(--bg-elev-2); border:1px solid var(--border); color:var(--text); display:flex; align-items:center; justify-content:center; }
.sheet91-body{ padding:var(--sp-2) var(--sp-3) max(var(--sp-3), env(safe-area-inset-bottom)); overflow-y:auto; overscroll-behavior:contain; }
.sheet91-deep{ margin-top:var(--sp-2); display:flex; justify-content:flex-end; }
html[data-layout="desktop"] .sheet91{ inset:auto auto 0 auto; right:var(--sidebar-w); left:auto; width:min(560px, 100vw); border-radius:var(--radius) 0 0 0; }

/* ---------- Section ---------- */
.section91{ margin-bottom:var(--sp-3); }
.section91-head{ display:flex; align-items:baseline; justify-content:space-between; gap:10px; margin-bottom:10px; }
.section91-head .section-title{ display:flex; align-items:center; gap:8px; }
.section91-more{ color:var(--text-muted); font-size:0.8125rem; text-decoration:none; display:inline-flex; align-items:center; gap:4px; min-height:32px; }
.section91-more:hover{ color:var(--gold); }

/* ---------- MoneyStrip ---------- */
.money91{ display:grid; grid-template-columns:repeat(auto-fit, minmax(120px, 1fr)); gap:1px; background:var(--border); border:1px solid var(--border);
  border-radius:var(--radius); overflow:hidden; margin-bottom:var(--sp-2); }
.money91-cell{ background:var(--bg-elev); padding:10px 12px; display:flex; flex-direction:column; gap:2px; text-decoration:none; color:inherit; min-height:60px; }
a.money91-cell:hover{ background:var(--bg-elev-2); }
.money91-value{ font-family:'Karantina','Heebo',sans-serif; font-size:1.375rem; line-height:1.1; color:var(--text); }
.money91-value.gold{ color:var(--gold); }
.money91-cell.is-down .money91-value{ color:var(--danger-soft); }
.money91-label{ font-size:0.71875rem; color:var(--text-dim); }

/* ---------- CardList ---------- */
.cardlist91-wrap{ display:flex; flex-direction:column; gap:var(--sp-2); }
.cardlist91-head{ display:flex; align-items:center; gap:8px; margin:0 0 8px; color:var(--text-dim); font-size:0.78125rem; font-weight:700; letter-spacing:.3px; }
.cardlist91-head::after{ content:''; flex:1 1 auto; height:1px; background:var(--border); }
.cardlist91-count{ position:static; }
.cardlist91{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px; }
.cardlist91-item > *{ margin:0; }

/* ---------- MediaCard ---------- */
.media91{ position:relative; display:block; border-radius:var(--radius); overflow:hidden; background:var(--bg-elev); aspect-ratio:3/2; text-decoration:none; color:var(--text); isolation:isolate; }
.media91.ratio-wide{ aspect-ratio:16/7; }
.media91.ratio-square{ aspect-ratio:1; }
.media91-img, .media91-video{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:var(--z-photo-back); filter:var(--img-f-mid); }
.media91-scrim{ position:absolute; inset:0; z-index:var(--z-photo-scrim); background:linear-gradient(to top, rgba(10,14,20,.9) 0%, rgba(10,14,20,.35) 55%, rgba(10,14,20,0) 100%); }
.media91-body{ position:absolute; inset-inline:0; bottom:0; padding:var(--sp-2); display:flex; flex-direction:column; gap:2px; z-index:var(--z-photo-product); }
.media91-kicker{ font-size:0.71875rem; color:var(--gold); font-weight:700; }
.media91-title{ font-family:'Karantina','Heebo',sans-serif; font-size:1.5rem; line-height:1.05; }
.media91-sub{ font-size:0.8125rem; color:var(--text-muted); }
.media91-chev{ position:absolute; top:10px; inset-inline-start:10px; color:var(--text-muted); z-index:var(--z-photo-product); }
a.media91:hover .media91-img{ filter:var(--img-f-thumb); }

/* ---------- Reveal ---------- */
[data-reveal]{ opacity:0; transform:translateY(10px); transition:opacity 420ms var(--ease), transform 420ms var(--ease); }
[data-reveal].is-in{ opacity:1; transform:none; }
@media (prefers-reduced-motion: reduce){ [data-reveal]{ opacity:1; transform:none; transition:none; } .sheet91{ transition:none; } }

/* ---------- רשת המסך ---------- */
.grid91{ display:grid; grid-template-columns:1fr; gap:var(--sp-2); margin-bottom:var(--sp-2); }
@media (min-width:600px){ .grid91{ grid-template-columns:repeat(2, minmax(0,1fr)); } }
html[data-layout="desktop"] .grid91{ grid-template-columns:repeat(auto-fit, minmax(240px, 1fr)); }
html[data-layout="desktop"] .grid91.cols-2{ grid-template-columns:repeat(2, minmax(0,1fr)); }
html[data-layout="desktop"] .grid91.cols-3{ grid-template-columns:repeat(3, minmax(0,1fr)); }
html[data-layout="desktop"] .grid91.cols-4{ grid-template-columns:repeat(4, minmax(0,1fr)); }

/* ---------- שורת הדרכה בפיד ---------- */
.note91{ display:flex; align-items:center; gap:10px; padding:10px 14px; border:1px dashed rgba(251,191,36,.35); border-radius:var(--radius-sm); color:var(--text-muted); font-size:0.84375rem; margin-bottom:var(--sp-2); }
.note91-x{ margin-inline-start:auto; background:transparent; border:0; color:var(--text-dim); cursor:pointer; min-width:36px; min-height:36px; display:inline-flex; align-items:center; justify-content:center; }

/* =====================================================================
   D-501: המחשב לרוחב — סרגל צד קבוע בימין, התוכן על מלוא הרוחב.
   הסרגל העליון נשאר לטלפון בלבד; הטלפון לאורך אינו זז (הכרעת 18.08).
   ===================================================================== */
html[data-layout="desktop"] body{ padding-right:var(--sidebar-w); } /* פיזי ולא לוגי: <html> אינו RTL (רק #app-root), ולכן inline-end היה שמאל */
html[data-layout="desktop"] #shell-header{
  position:fixed; top:0; bottom:0; right:0; left:auto; width:var(--sidebar-w); min-height:0;
  flex-direction:column; align-items:stretch; border-bottom:0; border-inline-start:1px solid var(--glass-border);
  overflow-y:auto; overflow-x:hidden; padding:var(--sp-2) var(--sp-1) max(var(--sp-2), env(safe-area-inset-bottom)); scrollbar-width:thin;
}
html[data-layout="desktop"] #shell-header .shell-header-inner{ flex-direction:column; align-items:stretch; gap:var(--sp-2); max-width:none; padding-inline:6px; height:100%; }
html[data-layout="desktop"] .shell-brand{ font-size:1.5rem; flex-wrap:wrap; }
html[data-layout="desktop"] .shell-brand-sub{ display:none; }
html[data-layout="desktop"] .shell-nav{ flex-direction:column; overflow:visible; gap:4px; padding:0; }
html[data-layout="desktop"] .shell-nav-link{ font-size:0.9375rem; padding:0.55rem 0.9rem; justify-content:flex-start; border-radius:var(--radius-sm); }
html[data-layout="desktop"] .shell-nav-link.active{ box-shadow:inset 3px 0 0 var(--primary); }
html[data-layout="desktop"] .shell-manager-chip{ margin-inline-start:0; max-width:none; margin-top:auto; }
html[data-layout="desktop"] .wrap{ max-width:none; padding-inline:var(--sp-4); }
html[data-layout="desktop"] .tag-preview{ display:none; }
html[data-layout="desktop"] .ytbar91{ order:5; }

/* ---------- מונה לא-נקראו על לשונית ההודעות (D-498) ---------- */
.shell-nav-link{ position:relative; }
.shell-nav-badge{ display:inline-flex; align-items:center; justify-content:center; min-width:18px; height:18px; padding:0 5px; border-radius:99px;
  background:var(--primary); color:#fff; font-size:0.65625rem; font-weight:800; line-height:1; margin-inline-start:2px; }
.shell-nav-badge[hidden]{ display:none; }
.shell-nav-link.active .shell-nav-badge{ background:var(--bg); color:var(--gold); }

/* ---------- הנגן הגלובלי (D-492) — על מחלקות .ytplayer הקיימות ---------- */
.ytbar91{ display:flex; align-items:center; gap:8px; flex:none; position:relative; }
.ytbar91-label{ font-size:0.71875rem; color:var(--text-dim); white-space:nowrap; }
html[data-layout="phone"] .ytbar91-label{ display:none; }
.ytplayer-panel .ytplayer-status a{ color:var(--gold); }

/* ---------- שכבת העזרה (D-502/D-503): tooltip גלובלי אחד ---------- */
.help91{ position:fixed; z-index:var(--z-toast); max-width:min(320px, 92vw); background:var(--bg-elev-2); border:1px solid var(--border); border-radius:12px;
  padding:10px 12px; box-shadow:var(--shadow-card); font-size:0.84375rem; line-height:1.5; color:var(--text-muted); pointer-events:none;
  opacity:0; transform:translateY(4px); transition:opacity 160ms var(--ease), transform 160ms var(--ease); }
.help91.is-on{ opacity:1; transform:none; }
.help91-label{ display:block; font-weight:700; color:var(--text); margin-bottom:2px; font-size:0.875rem; }
.help91-hint{ display:block; color:var(--text-dim); font-size:0.71875rem; margin-top:6px; }
[data-help]{ cursor:help; }
a[data-help], button[data-help]{ cursor:pointer; }
@media (prefers-reduced-motion: reduce){ .help91{ transition:none; } }
.info83-link{ display:inline-flex; align-items:center; gap:4px; margin-top:8px; color:var(--gold); text-decoration:none; font-size:0.8125rem; }

/* =====================================================================
   משימה 91 ריצה 91ב — §91ב: יעדי העונה, מד האוהדים, יום משחק, חדר הגביעים (D-510–D-516).
   תוספת בלבד על הטוקנים; אפס צבע/פונט חדש.
   ===================================================================== */
.goal91-bar{ display:block; height:6px; border-radius:99px; background:rgba(255,255,255,.08); overflow:hidden; margin-top:6px; }
.goal91-fill{ display:block; height:100%; border-radius:99px; background:var(--gold); transition:width 520ms var(--ease); }
.goal91-fill.is-up{ background:var(--success); }
.goal91-fill.is-warn{ background:var(--danger); }
.goal91-status{ display:block; font-size:0.71875rem; color:var(--text-dim); margin-top:4px; }
.goal91-cur{ font-family:'Karantina','Heebo',sans-serif; font-size:1.5rem; line-height:1.05; }
.goal91-foot{ margin:8px 2px 0; }
.goal91-row{ margin-bottom:8px; }
.goal91-row.is-focus{ outline:2px solid var(--gold); outline-offset:2px; }
.goal91-row-top{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.goal91-row-top .chip{ margin-inline-start:auto; }
.goal91-row-mid{ display:flex; align-items:center; gap:10px; margin:8px 0; }
.goal91-row-mid .goal91-bar{ flex:1 1 auto; margin:0; }
.goal91-row-foot{ display:flex; justify-content:space-between; flex-wrap:wrap; gap:6px; font-size:0.8125rem; color:var(--text-muted); }
.goal91-hist{ display:flex; justify-content:space-between; gap:8px; padding:6px 0; border-bottom:1px solid var(--border); font-size:0.84375rem; color:var(--text-muted); }
.fans91-head{ display:flex; align-items:baseline; gap:12px; margin-bottom:6px; }
.fans91-big{ font-family:'Karantina','Heebo',sans-serif; font-size:3rem; line-height:1; color:var(--gold); }
.fans91-list{ list-style:none; margin:6px 0 0; padding:0; display:flex; flex-direction:column; gap:4px; }
.fans91-ev{ display:grid; grid-template-columns:auto 1fr auto; gap:10px; align-items:center; padding:6px 10px; border-radius:var(--radius-sm); background:var(--bg-elev-2); font-size:0.84375rem; border-inline-start:3px solid transparent; }
.fans91-ev.is-up{ border-inline-start-color:var(--success); }
.fans91-ev.is-down{ border-inline-start-color:var(--danger-soft); }
.fans91-ev-day{ color:var(--text-dim); font-size:0.75rem; }
.fans91-ev-pct{ color:var(--text-muted); }
.home-md-kicker{ display:inline-flex; align-items:center; gap:6px; }
.home-md-title{ font-family:'Karantina','Heebo',sans-serif; }
.home-md-count{ color:var(--gold); font-weight:700; }
.home-hero91-md.is-pre .hero91-scrim{ background:linear-gradient(to top, rgba(10,14,20,.97) 0%, rgba(10,14,20,.8) 40%, rgba(200,30,30,.18) 100%); }
.home-hero91-md.is-live .hero91-scrim{ background:linear-gradient(to top, rgba(10,14,20,.97) 0%, rgba(34,197,94,.12) 100%); }
.home-hero91-md.is-post .hero91-scrim{ background:linear-gradient(to top, rgba(10,14,20,.97) 0%, rgba(251,191,36,.12) 100%); }
/* חדר הגביעים */
.troph91-grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(150px, 1fr)); gap:var(--sp-2); }
.troph91-empty{ position:relative; border-radius:var(--radius); overflow:hidden; min-height:220px; display:flex; align-items:flex-end; isolation:isolate; }
.troph91-empty img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; z-index:var(--z-photo-back); filter:var(--img-f-deep); }
.troph91-empty-body{ position:relative; padding:var(--sp-3); color:var(--text-muted); font-size:0.9375rem; max-width:48ch; }
.troph91-moment{ display:flex; flex-direction:column; gap:4px; }
.troph91-moment .tile91-value{ font-size:1.75rem; }
.troph91-award{ display:flex; align-items:center; justify-content:space-between; gap:8px; padding:8px 0; border-bottom:1px solid var(--border); }
.troph91-award .num{ color:var(--gold); }
.troph91-sql{ font-size:0.6875rem; color:var(--text-dim); direction:ltr; text-align:left; white-space:pre-wrap; word-break:break-word; background:var(--bg); border-radius:var(--radius-sm); padding:8px; margin-top:6px; }


/* ===================== משימה 92 — התשתית, הניווט וסיפור הפתיחה (D-526–D-529, D-547) ===================== */
/* §1 מעברים בין-מסמכיים: טעינת דף מלאה (נסיגה בלי Navigation API, כתובת ישירה, שכבה כדף) מקבלת את אותה אנימציה. דפדפן בלי תמיכה — בלי אנימציה, בלי שבירה. */
@view-transition { navigation: auto; }
.shell-nav{ view-transition-name: shell-nav; }
/* §1 שלד טעינה אחיד: מרגע ההחלפה עד ש-init של הדף נפתר */
#app-root.is-loading92 > main::before{
  content:''; display:block; height:132px; border-radius:14px; margin:12px 0 16px;
  background:linear-gradient(90deg,#1c2637 25%,#26334a 37%,#1c2637 63%); background-size:400% 100%;
  animation:skel-shimmer 1.4s ease-in-out infinite;
}
@media (prefers-reduced-motion: reduce){ #app-root.is-loading92 > main::before{ animation:none; opacity:.5 } }
/* §2 כפתור חזרה אחיד בכותרת לדף שאינו עמודת סרגל (לוח האימונים, חדר הגביעים, המרכז הרפואי כדף מלא, לוח השקיפות, מפת ההשפעות, לוח העונה) — פינה קבועה, פיזית ימין */
.shell-back92{ position:fixed; top:10px; right:12px; z-index:60; display:inline-flex; align-items:center; gap:4px; padding:6px 10px; border-radius:999px;
  background:var(--bg-elev-2); color:var(--text); border:1px solid rgba(255,255,255,.14); box-shadow:var(--shadow-card); font-size:.85rem; text-decoration:none; }
.shell-back92:hover{ background:#1e2a3f; }
html[data-layout="desktop"] .shell-back92{ position:static; margin-inline-start:auto; }
/* §2 השכבה: כפתור החזרה תמיד גלוי בפינה קבועה של הכרום */
.shell-layer-back{ visibility:visible; }
/* §3 נעילה מוסברת בסרגל (D-527): מושבת ומוסבר, לא מוסתר */
.shell-nav-link.is-locked92{ opacity:.62; }
.shell-nav-link.is-locked92 .shell-nav-lock92{ display:block; font-size:.66rem; line-height:1.1; color:var(--text-muted); margin-top:2px; white-space:nowrap; }
html[data-layout="phone"] .shell-nav-link.is-locked92 .shell-nav-lock92{ display:none; }
html[data-layout="phone"] .shell-nav-link.is-locked92::after{ content:' 🔒'; }
/* §3 מסך נעול: הכרטיס למעלה, התוכן מאחוריו מוסתר */
main.is-locked92 > :not(.lock92){ display:none !important; }
.lock92{ border:1px solid rgba(255,255,255,.14); }
.lock92-head{ display:flex; align-items:center; gap:8px; font-size:1.05rem; margin-bottom:6px; }
.lock92-text{ color:var(--text-dim); margin:0 0 12px; }
/* §3 קשת הפתיחה (D-528): הבלוקים הכופים */
.arc92{ border:1px solid rgba(255,255,255,.14); }
.arc92-head{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; font-size:1.05rem; margin-bottom:4px; }
.arc92-count{ color:var(--text-muted); font-size:.85rem; }
.arc92-intro{ color:var(--text-dim); margin:0 0 10px; }
.arc92-steps{ list-style:none; margin:0; padding:0; display:grid; gap:8px; }
.arc92-step{ display:flex; align-items:center; gap:12px; padding:10px 12px; border-radius:12px; background:rgba(255,255,255,.03); border:1px solid rgba(255,255,255,.08); }
.arc92-step.is-current{ border-color:var(--danger); background:rgba(220,60,60,.10); }
.arc92-step.is-done{ opacity:.6; }
.arc92-step.is-locked{ opacity:.55; }
.arc92-num{ flex:none; width:28px; height:28px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; background:var(--bg-elev-2); font-weight:700; }
.arc92-step.is-done .arc92-num{ background:var(--ok, #2e8b57); color:#fff; }
.arc92-step.is-current .arc92-num{ background:var(--danger); color:#fff; }
.arc92-body{ flex:1 1 auto; min-width:0; }
.arc92-title{ font-weight:700; }
.arc92-sub{ color:var(--text-dim); font-size:.85rem; }
.arc92-cta{ flex:none; }
/* §3 סולם הדרגות (D-547) בקבוצה שלי */
.tier92{ display:flex; align-items:center; gap:6px; flex-wrap:wrap; padding:8px 12px; margin:0 0 10px; border-radius:12px; background:rgba(255,255,255,.04); border:1px solid rgba(255,255,255,.10); color:var(--text-dim); font-size:.9rem; }
/* §3 בבנייה (D-529): מד התקדמות והאצה */
.tag-building92{ display:inline-block; padding:2px 8px; border-radius:999px; background:rgba(230,170,40,.16); color:#f0c35a; font-size:.72rem; }
.build92{ display:flex; align-items:center; gap:10px; flex-wrap:wrap; width:100%; margin-top:8px; }
.build92-bar{ flex:1 1 120px; height:8px; border-radius:999px; background:rgba(255,255,255,.08); overflow:hidden; }
.build92-bar i{ display:block; height:100%; background:#f0c35a; border-radius:999px; transition:width .6s var(--ease); }
/* §2 המרכז הרפואי מוטמע כלשונית */
.embed92 > .wrap{ padding:0; }

/* ==========================================================================
   משימה 96 §2, שער בדיקה 2 — הטוקנים שהיו חסרים.
   נמדד בפתיחת הריצה: 228 ערכי hex גולמיים ב-25 קובצי CSS של app2 ועוד 37
   ב-JS. רובם לא היו "צבע חדש" אלא **העתק של טוקן קיים** או של משטח ישן
   (#0a0e14, #0f1622, #1e2a3f) — ולכן הארת המשטחים של D-541 פשוט לא הייתה
   מגיעה אליהם. הטוקנים כאן נותנים שם לכל מה שנשאר, ואז ההחלפה מכנית.
   ========================================================================== */
:root{
  /* לבן ושחור — היו 27 מופעי #fff */
  --white:#ffffff;
  --black:#000000;
  /* משטח עמוק מתחת ל---bg (רקע כותרות, שכבות) — היה #05070c */
  --bg-deep:#0A1018;
  /* אפור ניטרלי שאינו על ציר הכחול — היה #8a8f98 */
  --grey-1:#9AA0A9;
  /* תכלת רך על רקע כהה — היה #bae6fd / #7dd3fc */
  --info-soft:#BAE6FD;
  --info-2:#7DD3FC;
  /* כתום אזהרה — היה #f59e0b / #b45309 */
  --warn:#F59E0B;
  --warn-deep:#B45309;
  /* סגול (סקאוטינג, נבחרת) — היה #a78bfa / #c4b5fd / #c084fc / #5b21b6 */
  --violet:#A78BFA; --violet-soft:#C4B5FD; --violet-2:#C084FC; --violet-deep:#5B21B6;
  /* ירוקים עמוקים (רקע הצלחה) — היה #15803d / #0e1f14 / #06210f / #052e1a */
  --success-deep:#15803D; --success-bg:#0E1F14; --success-bg-2:#06210F; --success-bg-3:#0E3B1F; --on-success:#052E1A;
  /* אדומים עמוקים — היה #7f1d1d / #991b1b / #b91c1c / #ef6b6b */
  --danger-deep:#7F1D1D; --danger-deep-2:#991B1B; --danger-deep-3:#B91C1C; --danger-2:#EF6B6B;
  /* אפורי טקסט משניים — היה #4b5563 / #374151 / #cbd5e1 / #e2e8f0 / #e7ecf3 / #c9d3e0 / #8b96ad / #3a4560 */
  --slate-600:#4B5563; --slate-700:#374151; --slate-300:#CBD5E1; --slate-200:#E2E8F0;
  --slate-100:#E7ECF3; --slate-250:#C9D3E0; --slate-400:#8B96AD; --slate-750:#3A4560;
  /* זהב עמוק (חותמות, מדליות) — היה #9c7c1e / #7a5a1e / #6d5312 / #3a2c10 */
  --gold-deep:#9C7C1E; --gold-deep-2:#7A5A1E; --gold-deep-3:#6D5312; --gold-deep-4:#3A2C10;
  /* כחול ותכלת נוספים — היה #60a5fa / #34d399 */
  --blue:#60A5FA; --emerald:#34D399;

  /* --------- פלטת "החוזה על נייר" (מרכז ההעברות) ---------
     שמונה גוונים שהיו כתובים ישירות ב-transfers.css. הם פלטה אמיתית
     ונפרדת (נייר, דיו, עור) ולא העתק של הטוקנים הכהים — ולכן קיבלו שם
     במקום להימחק. */
  --paper-ink:#241D12;      /* דיו כהה, כותרת החוזה */
  --paper-ink-2:#2B2416;
  --paper-ink-3:#3A3222;
  --paper-text:#4B4231;     /* גוף הטקסט על הנייר */
  --paper-muted:#6B5F4A;    /* שורה משנית */
  --paper-line:#B9AC8F;     /* קו מפריד */
  --paper-line-2:#C9BDA3;   /* מסגרת */
  --paper-line-3:#D8CDB4;
  --paper-bg:#E8E0CF;       /* הנייר עצמו */
  --paper-bg-2:#F4EFE4;
  --paper-bg-3:#FFFDF7;
}

:root{
  /* משימה 96 §2 (שער 2, סבב שני): עשרים גוונים שהיו כתובים ישירות בתשעה
     קובצי מסך. כל אחד שייך לסצנה אחת (הדשא של המגרש, פנס הלילה, נייר
     הפגישה), ולכן קיבל שם משלו ולא מופה לטוקן קיים שאינו הוא. */
  --pitch-green:#1C5E33; --pitch-green-2:#164A29;      /* דשא המגרש (טקטיקה) */
  --pitch-green-3:#1F6A3A; --pitch-green-4:#175230;    /* דשא בהיר יותר */
  --pitch-dark:#0F3D1F; --pitch-dark-2:#0B2E18;        /* דשא לילה (מצ'אף) */
  --blood-deep:#2B0505;                                /* אדום כהה מאוד, חולשה */
  --night:#1A1A1A; --night-2:#141414;                  /* שחור רך, וידאו/קולנוע */
  --steel:#1F2937; --steel-2:#1A2436; --steel-3:#1B2438; --steel-4:#151821; --steel-5:#0F172A;
  --ocean-deep:#0369A1; --forest-deep:#14532D; --forest-deep-2:#166534;
  --amber-night:#1A150C;                               /* נייר בפנס לילה */
  --green-live:#2EA043;                                /* ירוק פעולה */
  --sky:#0EA5E9;                                       /* תכלת גרף */
}

/* ==========================================================================
   משימה 96 §2 — שכבת הרכיבים המשותפת. נבנתה פעם אחת כאן ומוחלת בכל מסך.
   שלושה רכיבים: טבלת נתונים אחידה (.tbl96), צבע-הנתונים (.dv96), וסצנת
   הנוכחות (.scene96, D-554). כל צבע כאן מגיע מטוקן — אפס hex גולמי.
   ========================================================================== */

/* ---------- 1. טבלת נתונים אחידה (§2, שער בדיקה 3) ---------- */
/* עוטף חובה. §1: אין גלילה אופקית לדף — הטבלה גוללת בתוך עצמה. */
.tbl96-wrap{
  overflow-x:auto; -webkit-overflow-scrolling:touch;
  border:1px solid var(--border); border-radius:var(--radius-sm);
  background:var(--bg-elev);
}
.tbl96{
  width:100%; border-collapse:separate; border-spacing:0;
  font-size:var(--fs-2); line-height:var(--lh-tight);
  font-variant-numeric:tabular-nums;
}
.tbl96 thead th{
  position:sticky; top:0; z-index:2;
  background:var(--bg-elev-2); color:var(--text-muted);
  font-size:var(--fs-1); font-weight:700; letter-spacing:.2px;
  text-align:start; white-space:nowrap;
  padding:var(--s-2) var(--s-3); height:var(--row-h);
  border-bottom:1px solid var(--border);
}
/* כותרת שאפשר למיין בה: כל הכותרת היא כפתור, ויעד המגע 44px (§1) */
.tbl96 thead th.sortable96{padding:0}
.tbl96 th .th96{
  display:flex; align-items:center; gap:var(--s-1);
  width:100%; min-height:var(--tap); padding:var(--s-2) var(--s-3);
  background:none; border:0; color:inherit; font:inherit; font-weight:700;
  text-align:start; cursor:pointer;
  transition:background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.tbl96 th .th96:hover{background:var(--bg-hover); color:var(--text)}
.tbl96 th .th96:focus-visible{box-shadow:var(--focus-ring)}
.tbl96 th .th96 .caret96{width:0;height:0;border-inline:4px solid transparent;opacity:.35;flex:none}
.tbl96 th[aria-sort="ascending"]  .caret96{border-bottom:5px solid currentColor;opacity:1}
.tbl96 th[aria-sort="descending"] .caret96{border-top:5px solid currentColor;opacity:1}
.tbl96 th[aria-sort]:not([aria-sort="none"]){color:var(--text)}
.tbl96 tbody td{
  padding:var(--s-1) var(--s-3); height:var(--row-h);
  border-bottom:1px solid rgba(255,255,255,.05);
  color:var(--text); vertical-align:middle; white-space:nowrap;
}
.tbl96 tbody tr:nth-child(even) td{background:rgba(255,255,255,.022)}
.tbl96 tbody tr:hover td{background:var(--bg-hover)}
.tbl96 tbody tr[data-href]{cursor:pointer}
.tbl96 tbody tr:focus-within td{background:var(--bg-hover)}
/* קישור בתא ממלא את גובה השורה. **שער יעד המגע נמדד לפי סוג המצביע:**
   בעכבר השורה 32px (הצפיפות שאור ביקש), ובמגע השורה עולה ל-44px
   (--row-h-touch למטה) ואיתה גם הקישור — ולכן 44x44 מתקיים בדיוק היכן
   שהוא נדרש, בלי לוותר על הצפיפות במסך גדול. */
.tbl96 td a, .tbl96 td button.cell96{
  display:inline-flex; align-items:center; min-height:var(--row-h);
  color:inherit; text-decoration:none; background:none; border:0; font:inherit;
}
@media (pointer:coarse){
  .tbl96 td a, .tbl96 td button.cell96{min-height:var(--tap)}
}
/* יעד מגע לאייקון קטן בתוך שורת טקסט: השטח גדל בלי שהאייקון יגדל
   ובלי שהפריסה תזוז (§1, יעד 44px). */
.tap96{position:relative}
.tap96::after{
  content:""; position:absolute; top:50%; left:50%;
  width:var(--tap); height:var(--tap); transform:translate(-50%,-50%);
}
.tbl96 td a:hover{text-decoration:underline}
.tbl96 .wide96{white-space:normal; min-width:9rem}
.tbl96 .num96{direction:ltr; unicode-bidi:isolate; text-align:start; font-variant-numeric:tabular-nums}
/* צפיפות רגועה למסכי חוויה */
.tbl96.roomy96 tbody td{height:auto; padding:var(--s-3)}
/* במגע — שורה גבוהה יותר, כי אצבע אינה עכבר (§1) */
@media (pointer:coarse){
  .tbl96 tbody td{height:var(--row-h-touch)}
}
/* שורת סינון/חיפוש מעל הטבלה */
.tbl96-bar{
  display:flex; flex-wrap:wrap; align-items:center; gap:var(--s-2);
  padding:var(--s-2) 0; max-width:100%;
}
/* שדה החיפוש מתכווץ עם המסך. `size` ברירת המחדל של input הוא ~20 תווים,
   וזה מה שדחף את הדף לגלילה אופקית בטלפון (§1: לעולם לא). */
.tbl96-bar input[type="search"], .tbl96-bar input[type="text"]{
  flex:1 1 12rem; min-width:0; max-width:100%;
}
.tbl96-bar input[type="search"], .tbl96-bar input[type="text"], .tbl96-bar select{
  min-height:var(--tap); padding:var(--s-2) var(--s-3);
  background:var(--bg-elev-2); color:var(--text);
  border:1px solid var(--border); border-radius:var(--radius-sm);
  font:inherit; font-size:var(--fs-2);
}
.tbl96-bar input:focus-visible, .tbl96-bar select:focus-visible{box-shadow:var(--focus-ring); outline:none}
.tbl96-count{color:var(--text-muted); font-size:var(--fs-2); margin-inline-start:auto}
.tbl96-empty{padding:var(--s-5); text-align:center; color:var(--text-muted)}

/* ---------- 2. צבע-הנתונים בארבע מדרגות (D-541) ---------- */
/* .dv96 הוא תמיד סמל ועוד ערך. הצבע לבדו אסור (§1). */
.dv96{
  display:inline-flex; align-items:center; gap:var(--s-2);
  font-variant-numeric:tabular-nums; direction:ltr; unicode-bidi:isolate;
  font-size:var(--fs-2); font-weight:700; white-space:nowrap;
}
.dv96 .dv96-v{color:var(--d-0)}
.dv96-bar{display:inline-flex; align-items:flex-end; gap:2px; flex:none; height:15px}
.dv96-bar i{display:block; width:4px; border-radius:1px; background:currentColor; opacity:.22}
.dv96-bar i:nth-child(1){height:6px}
.dv96-bar i:nth-child(2){height:9px}
.dv96-bar i:nth-child(3){height:12px}
.dv96-bar i:nth-child(4){height:15px}
.dv96[data-tier="1"] .dv96-bar{color:var(--d-1)} .dv96[data-tier="1"] .dv96-v{color:var(--d-1)}
.dv96[data-tier="2"] .dv96-bar{color:var(--d-2)} .dv96[data-tier="2"] .dv96-v{color:var(--d-2)}
.dv96[data-tier="3"] .dv96-bar{color:var(--d-3)} .dv96[data-tier="3"] .dv96-v{color:var(--d-3)}
.dv96[data-tier="4"] .dv96-bar{color:var(--d-4)} .dv96[data-tier="4"] .dv96-v{color:var(--d-4)}
.dv96[data-tier="1"] .dv96-bar i:nth-child(-n+1),
.dv96[data-tier="2"] .dv96-bar i:nth-child(-n+2),
.dv96[data-tier="3"] .dv96-bar i:nth-child(-n+3),
.dv96[data-tier="4"] .dv96-bar i:nth-child(-n+4){opacity:1}
/* צ׳יפ מלא — לתגיות מצב שאינן מספר */
.chip96{
  display:inline-flex; align-items:center; gap:var(--s-1);
  padding:2px var(--s-2); border-radius:var(--radius-chip);
  font-size:var(--fs-1); font-weight:700; white-space:nowrap;
  background:var(--d-0-bg); border:1px solid var(--d-0-bd); color:var(--d-0);
}
.chip96[data-tier="1"]{background:var(--d-1-bg); border-color:var(--d-1-bd); color:var(--d-1)}
.chip96[data-tier="2"]{background:var(--d-2-bg); border-color:var(--d-2-bd); color:var(--d-2)}
.chip96[data-tier="3"]{background:var(--d-3-bg); border-color:var(--d-3-bd); color:var(--d-3)}
.chip96[data-tier="4"]{background:var(--d-4-bg); border-color:var(--d-4-bd); color:var(--d-4)}

/* ---------- 3. סצנת הנוכחות (D-554) ---------- */
/* שלוש שכבות: רקע סצנה אחורי, שכבת עומק אמצעית, ותוכן חד בקדמה. */
.scene96{
  position:relative; isolation:isolate;
  border-radius:var(--radius); overflow:hidden;
  perspective:900px; perspective-origin:50% 40%;
  background:var(--bg-elev);
}
.scene96-bg, .scene96-mid{
  position:absolute; inset:-6%; z-index:-3;
  background-size:cover; background-position:center;
  will-change:transform;
  transform:translate3d(var(--px96,0px),var(--py96,0px),-140px) scale(1.18);
  transition:transform 420ms var(--ease);
}
/* D-541 מבקש **פחות כהה**. הסקרים והעמעום כאן מכוילים לשתי מטרות
   שמושכות לכיוונים הפוכים: שהסצנה תיראה, ושהטקסט מעליה יעבור 4.5:1.
   הפתרון אינו להחשיך הכל אלא להחשיך **מקומית** — הסצנה בהירה, ומתחת
   לטקסט עצמו יושבת זכוכית כהה (`.glass96`) שנותנת את הניגודיות. */
/* הווידאו מונח על התמונה. שניהם ממלאים את השכבה. */
.scene96-bg video{z-index:1}
.scene96-bg .scene96-still{z-index:0}
.scene96-bg img, .scene96-bg video{
  position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  filter:saturate(1.06) contrast(1.03) brightness(.82);
}
.scene96-mid{
  z-index:-2; inset:-3%;
  transform:translate3d(calc(var(--px96,0px) * 1.9),calc(var(--py96,0px) * 1.9),-60px) scale(1.08);
  background:radial-gradient(120% 90% at 50% 0%, rgba(255,255,255,.06) 0%, rgba(255,255,255,0) 58%);
}
/* סקרים: קריאות התוכן קודמת לאפקט (§1) */
.scene96::after{
  content:""; position:absolute; inset:0; z-index:-1; pointer-events:none;
  background:
    linear-gradient(270deg, rgba(15,21,32,.86) 0%, rgba(15,21,32,.52) 46%, rgba(15,21,32,.20) 78%),
    linear-gradient(180deg, rgba(15,21,32,.34) 0%, rgba(15,21,32,.10) 40%, rgba(15,21,32,.58) 100%);
}
.scene96::before{
  content:""; position:absolute; inset:0; z-index:-1; pointer-events:none;
  box-shadow:inset 0 0 120px 22px rgba(10,14,20,.42); /* vignette עדין */
}
/* וריאנט כהה יותר למסך שבו הטקסט פרוס על כל הרוחב */
.scene96.scene96-flat::after{background:var(--scrim-band)}
/* הרצועה הישנה של 91 (img + scrim) מוסתרת אחרי שהמיכל הפך לסצנה.
   היא נשארת ב-DOM — אין הסרת תוכן — ורק אינה מצוירת פעמיים. */
.scene96 > .hero96-legacy{display:none !important}
/* מיכל שהפך לסצנה שומר על גובה מינימלי כדי שהרקע ייראה */
.scene96[data-scene96]{min-height:150px}
.scene96-in{position:relative; z-index:1; padding:var(--s-5)}
@media (max-width:720px){ .scene96-in{padding:var(--s-4)} }
/* שכבת זכוכית כהה לתוכן שיושב על הסצנה */
.scene96 .glass96{
  background:rgba(15,21,32,.62); backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px);
  border:1px solid var(--glass-border); border-radius:var(--radius);
}
/* הפרלקסה מכבה את עצמה: העדפת משתמש, ומסכי מגע (§1, D-554) */
@media (prefers-reduced-motion: reduce){
  .scene96-bg, .scene96-mid{transform:none !important; transition:none !important}
  .scene96 [data-parallax96]{transform:none !important}
}
@media (pointer:coarse){
  .scene96-bg, .scene96-mid{transform:translate3d(0,0,0) scale(1.06) !important}
}

/* ---------- 4. עזרי פריסה משותפים ---------- */
.grid96{display:grid; gap:var(--s-4)}
@media (min-width:900px){ .grid96.cols2-96{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (min-width:1100px){ .grid96.cols3-96{grid-template-columns:repeat(3,minmax(0,1fr))} }
@media (min-width:1100px){ .grid96.cols4-96{grid-template-columns:repeat(4,minmax(0,1fr))} }
.stat96{
  background:var(--bg-elev); border:1px solid var(--border); border-radius:var(--radius-sm);
  padding:var(--s-3) var(--s-4); display:flex; flex-direction:column; gap:var(--s-1);
  min-width:0;
}
.stat96 .k96{font-size:var(--fs-1); color:var(--text-muted); font-weight:600}
.stat96 .v96{font-size:var(--fs-5); font-weight:700; direction:ltr; unicode-bidi:isolate; font-variant-numeric:tabular-nums}
.sec96{margin-block:var(--s-6)}
.sec96 > h2, .sec96 > h3{font-size:var(--fs-5); margin-bottom:var(--s-3)}
.muted96{color:var(--text-muted); font-size:var(--fs-2)}
/* גרף uPlot בתוך תא או כרטיס */
.chart96{width:100%; min-height:0}
.chart96 .u-title{color:var(--text-muted); font-size:var(--fs-1)}
.chart96 .u-legend{font-size:var(--fs-1); color:var(--text-muted)}
.chart96 .u-legend .u-marker{border-radius:2px}
.spark96{display:inline-block; vertical-align:middle}

/* ==========================================================================
   משימה 96 §1 — יעדי מגע. נמדדו בדפדפן בהקשר מגע (pointer:coarse) על
   שלושת המסכים שהוגרלו לבדיקה הידנית (§8 בדיקה 1) ועל כל 24 המסכים.
   הכלל: במגע יעד הלחיצה 44x44 לפחות. שני דפוסים —
     · פקד עצמאי (כפתור, לשונית, קישור חזרה) גדל בפועל ל-44.
     · קישור ישות בתוך רשימה או משפט **אינו גדל**, כדי שהטקסט לא ייפרם;
       הוא מקבל שטח לחיצה מורחב ב-::after, בלי לזוז אף פיקסל בפריסה.
       זה גם מה שתקן WCAG 2.5.8 מתיר לקישור בתוך שורת טקסט.
   ========================================================================== */
@media (pointer:coarse){
  .shell-back92, .rank94-seg-btn, .msg-filter-chip, .tab-btn, .btn-sm{min-height:var(--tap)}
}
.entity-link{position:relative}
@media (pointer:coarse){
  .entity-link::after{
    content:""; position:absolute; top:50%; inset-inline-start:0;
    width:100%; min-width:24px; height:var(--tap);
    transform:translateY(-50%); pointer-events:none;
  }
}
/* קישור החזרה של השלד — גם בעכבר הוא פקד ראשי, ולא קישור בתוך משפט */
.shell-back92{min-height:40px; display:inline-flex; align-items:center}
/* select ו-input בכל מסך — יעד מגע 44px במגע */
@media (pointer:coarse){
  select, input:not([type="hidden"]):not([type="range"]):not([type="checkbox"]):not([type="radio"]), textarea{min-height:var(--tap)}
}
